3 SUBROUTINE phyetat0 (fichnom, clesphy0, tabcntr0)
50 REAL run_off_lic_0(
klon)
60 REAL clesphy0( longcles )
65 INTEGER ierr, i, nsrf, isoil , k
69 REAL tab_cntrl(length), tabcntr0(length)
72 LOGICAL :: found,phyetat0_get,phyetat0_srf
84 CALL get_var(
"controle", tab_cntrl)
98 tabcntr0( i ) = tab_cntrl( i )
107 rco2 =
co2_ppm * 1.0e-06 * 44.011/28.97
127 clesphy0(1)=tab_cntrl( 5 )
128 clesphy0(2)=tab_cntrl( 6 )
129 clesphy0(3)=tab_cntrl( 7 )
130 clesphy0(4)=tab_cntrl( 8 )
131 clesphy0(5)=tab_cntrl( 9 )
132 clesphy0(6)=tab_cntrl( 10 )
133 clesphy0(7)=tab_cntrl( 11 )
134 clesphy0(8)=tab_cntrl( 12 )
150 IF (.NOT. found)
THEN
151 print*,
'phyetat0: Le champ <masque> est absent'
152 print *,
'fichier startphy non compatible avec phyetat0'
164 IF (.NOT. found) print*,
'phyetat0: Le champ <FTER> est absent'
169 IF (.NOT. found) print*,
'phyetat0: Le champ <FLIC> est absent'
174 IF (.NOT. found) print*,
'phyetat0: Le champ <FOCE> est absent'
179 IF (.NOT. found) print*,
'phyetat0: Le champ <FSIC> est absent'
186 IF ( abs(fractint(i) -
zmasq(i) ) .GT.
epsfra )
THEN
187 WRITE(*, *)
'phyetat0: attention fraction terre pas ', &
190 WRITE(*, *)
'Je force la coherence zmasq=fractint'
191 zmasq(i) = fractint(i)
197 IF ( abs( fractint(i) - (1. -
zmasq(i))) .GT.
epsfra )
THEN
198 WRITE(*, *)
'phyetat0 attention fraction ocean pas ', &
201 WRITE(*, *)
'Je force la coherence zmasq=1.-fractint'
202 zmasq(i) = 1. - fractint(i)
210 found=phyetat0_get(1,
ftsol(:,1),
"TS",
"Surface temperature",283.)
216 found=phyetat0_srf(1,
ftsol,
"TS",
"Surface temperature",283.)
226 print*,
"Trop de bandes SW"
229 WRITE(str2,
'(i2.2)') isw
230 found=phyetat0_srf(1,
falb_dir(:, isw,:),
"A_dir_SW"//str2//
"srf",
"Direct Albedo",0.2)
231 found=phyetat0_srf(1,
falb_dif(:, isw,:),
"A_dif_SW"//str2//
"srf",
"Direct Albedo",0.2)
240 IF (isoil.GT.99)
THEN
241 print*,
"Trop de couches "
244 WRITE(str2,
'(i2.2)') isoil
245 found=phyetat0_srf(1,tsoil(:, isoil,:),
"Tsoil"//str2//
"srf",
"Temp soil",0.)
246 IF (.NOT. found)
THEN
247 print*,
"phyetat0: Le champ <Tsoil"//str7//
"> est absent"
248 print*,
" Il prend donc la valeur de surface"
249 tsoil(:, isoil, :)=
ftsol(:, :)
257 found=phyetat0_srf(1,qsurf,
"QS",
"Near surface hmidity",0.)
258 found=phyetat0_get(1,
qsol,
"QSOL",
"Surface hmidity / bucket",0.)
259 found=phyetat0_srf(1,snow,
"SNOW",
"Surface snow",0.)
260 found=phyetat0_srf(1,
fevap,
"EVAP",
"evaporation",0.)
261 found=phyetat0_get(1,
snow_fall,
"snow_f",
"snow fall",0.)
262 found=phyetat0_get(1,
rain_fall,
"rain_f",
"rain fall",0.)
268 found=phyetat0_get(1,
solsw,
"solsw",
"net SW radiation surf",0.)
269 found=phyetat0_get(1,
sollw,
"sollw",
"net LW radiation surf",0.)
270 found=phyetat0_get(1,
sollwdown,
"sollwdown",
"down LW radiation surf",0.)
271 IF (.NOT. found)
THEN
279 found=phyetat0_get(1,
radsol,
"RADS",
"Solar radiation",0.)
280 found=phyetat0_get(1,fder,
"fder",
"Flux derivative",0.)
284 found=phyetat0_srf(1,
z0m,
"RUG",
"Z0m ancien",0.001)
288 found=phyetat0_srf(1,
z0m,
"Z0m",
"Roughness length, momentum ",0.001)
289 found=phyetat0_srf(1,
z0h,
"Z0h",
"Roughness length, enthalpy ",0.001)
293 found=phyetat0_srf(1,
agesno,
"AGESNO",
"SNOW AGE",0.001)
301 found=phyetat0_get(
klev,
clwcon,
"CLWCON",
"CLWCON",0.)
302 found=phyetat0_get(
klev,
rnebcon,
"RNEBCON",
"RNEBCON",0.)
303 found=phyetat0_get(
klev,
ratqs,
"RATQS",
"RATQS",0.)
305 found=phyetat0_get(1,run_off_lic_0,
"RUNOFFLIC0",
"RUNOFFLIC0",0.)
312 found=phyetat0_srf(
klev+1,
pbl_tke,
"TKE",
"Turb. Kinetic. Energ. ",1.e-8)
315 IF (
iflag_pbl>1 .AND. iflag_wake>=1 .AND. iflag_pbl_split >=1 )
then
317 found=phyetat0_srf(1,
delta_tsurf,
"DELTA_TSURF",
"Delta Ts wk/env ",0.)
325 found=phyetat0_get(
klev,
sig1,
"sig1",
"sig1",0.)
326 found=phyetat0_get(
klev,
w01,
"w01",
"w01",0.)
329 found=phyetat0_get(
klev,
wake_deltat,
"WAKE_DELTAT",
"Delta T wake/env",0.)
330 found=phyetat0_get(
klev,
wake_deltaq,
"WAKE_DELTAQ",
"Delta hum. wake/env",0.)
331 found=phyetat0_get(1,
wake_s,
"WAKE_S",
"WAKE_S",0.)
332 found=phyetat0_get(1,
wake_cstar,
"WAKE_CSTAR",
"WAKE_CSTAR",0.)
333 found=phyetat0_get(1,
wake_pe,
"WAKE_PE",
"WAKE_PE",0.)
334 found=phyetat0_get(1,
wake_fip,
"WAKE_FIP",
"WAKE_FIP",0.)
337 found=phyetat0_get(1,
zmax0,
"ZMAX0",
"ZMAX0",40.)
338 found=phyetat0_get(1,
f0,
"F0",
"F0",1.e-5)
339 found=phyetat0_get(
klev+1,
fm_therm,
"FM_THERM",
"Thermals mass flux",0.)
340 found=phyetat0_get(
klev,
entr_therm,
"ENTR_THERM",
"Thermals Entrain.",0.)
341 found=phyetat0_get(
klev,
detr_therm,
"DETR_THERM",
"Thermals Detrain.",0.)
344 found=phyetat0_get(1,
ale_bl,
"ALE_BL",
"ALE BL",0.)
345 found=phyetat0_get(1,
ale_bl_trig,
"ALE_BL_TRIG",
"ALE BL_TRIG",0.)
346 found=phyetat0_get(1,
alp_bl,
"ALP_BL",
"ALP BL",0.)
356 found=phyetat0_get(1,trs(:,it),
"trs_"//
tname(iiq), &
357 "Surf trac"//
tname(iiq),0.)
363 IF (ierr /= 0)
CALL abort_physic(
'phyetat0',
'pb allocation co2_send', 1)
364 found=phyetat0_get(1,
co2_send,
"co2_send",
"co2 send",0.)
373 if (ok_gwd_rando) found = &
375 IF (.not. ok_hines .and. ok_gwd_rando) found &
379 found=phyetat0_get(1,
zmea,
"ZMEA",
"sub grid orography",0.)
380 found=phyetat0_get(1,
zstd,
"ZSTD",
"sub grid orography",0.)
381 found=phyetat0_get(1,
zsig,
"ZSIG",
"sub grid orography",0.)
382 found=phyetat0_get(1,
zgam,
"ZGAM",
"sub grid orography",0.)
383 found=phyetat0_get(1,
zthe,
"ZTHE",
"sub grid orography",0.)
384 found=phyetat0_get(1,
zpic,
"ZPIC",
"sub grid orography",0.)
385 found=phyetat0_get(1,
zval,
"ZVAL",
"sub grid orography",0.)
386 found=phyetat0_get(1,
zmea,
"ZMEA",
"sub grid orography",0.)
387 found=phyetat0_get(1,
rugoro,
"RUGSREL",
"sub grid orography",0.)
395 found=phyetat0_get(
nslay,
tslab,
"tslab",
"tslab",0.)
396 IF (.NOT. found)
THEN
397 print*,
"phyetat0: Le champ <tslab> est absent"
398 print*,
"Initialisation a tsol_oce"
405 found=phyetat0_get(1,
tice,
"slab_tice",
"slab_tice",0.)
407 IF (.NOT. found)
THEN
408 print*,
"phyetat0: Le champ <tice> est absent"
409 print*,
"Initialisation a tsol_sic"
412 IF (.NOT. found)
THEN
413 print*,
"phyetat0: Le champ <seaice> est absent"
414 print*,
"Initialisation a 0/1m suivant fraction glace"
460 INTEGER,
INTENT(IN) :: nlev
461 CHARACTER*(*),
INTENT(IN) :: name,descr
462 REAL,
INTENT(IN) :: default
463 REAL,
DIMENSION(klon,nlev),
INTENT(INOUT) :: field
469 IF (.NOT. found)
THEN
470 WRITE(
lunout,*)
"phyetat0: Le champ <",name,
"> est absent"
471 WRITE(
lunout,*)
"Depart legerement fausse. Mais je continue"
474 WRITE(
lunout,*) name, descr, minval(field),maxval(field)
498 INTEGER,
INTENT(IN) :: nlev
499 CHARACTER*(*),
INTENT(IN) :: name,descr
500 REAL,
INTENT(IN) :: default
501 REAL,
DIMENSION(klon,nlev,nbsrf),
INTENT(INOUT) :: field
504 LOGICAL found,phyetat0_get
508 IF (
nbsrf.GT.99)
THEN
509 WRITE(
lunout,*)
"Trop de sous-mailles"
514 WRITE(str2,
'(i2.2)') nsrf
515 found= phyetat0_get(nlev,field(:,:, nsrf), &
516 name//str2,descr//
" srf:"//str2,default)
!$Header!c include clesph0 h c COMMON clesph0 ok_orolf
real, dimension(:,:), allocatable, save q_ancien
real, dimension(:,:), allocatable, save w01
subroutine traclmdz_from_restart(trs_in)
real, dimension(:), allocatable, save, public tice
real, dimension(:,:), allocatable, save clwcon
real, dimension(:,:), allocatable, save du_gwd_front
integer, parameter is_ter
real, dimension(:), allocatable, save f0
!$Header!c include clesph0 h c COMMON clesph0 soil_model
real, dimension(:), allocatable, save zval
real, dimension(:), allocatable, save zsig
!$Header!c include clesph0 h c COMMON clesph0 ok_orodr
subroutine, public ocean_cpl_init(dtime, rlon, rlat)
real, dimension(:), allocatable, save snow_fall
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_con
real, dimension(:,:,:), allocatable, save falb_dir
real, dimension(:,:), allocatable, save wake_deltaq
real, dimension(:), allocatable, save rain_fall
real, dimension(:,:), allocatable, save sig1
!$Header!c include clesph0 h c COMMON clesph0 cycle_diurne
real, dimension(:,:), allocatable, save t_ancien
!$Header!integer nvarmx dtime
!$Header!c include clesph0 h c COMMON clesph0 ok_limitvrai
subroutine fonte_neige_init(restart_runoff)
character(len=6), save version_ocean
subroutine, public open_startphy(filename)
!$Header!c include clesph0 h c COMMON clesph0 new_oliq
real, dimension(:), allocatable, save zmea
real, dimension(:,:), allocatable, save pctsrf
real, dimension(:), allocatable, save radsol
real, dimension(:,:), allocatable, save entr_therm
!$Id iflag_pbl_split common compbl iflag_pbl
real, dimension(:), allocatable, save qsol
real, dimension(:,:,:), allocatable, save pbl_tke
real, dimension(:), allocatable, save sollw
real, dimension(:,:), allocatable, save rnebcon
!$Header!c include clesph0 h c COMMON clesph0 nbapp_rad
real, dimension(:), allocatable, save sollwdown
real, dimension(:), allocatable, save wake_s
real, dimension(:), allocatable, save ale_bl
real, dimension(:), allocatable, save wake_cstar
integer, dimension(:), allocatable, save niadv
real, dimension(:,:), allocatable, save delta_tsurf
real, dimension(:,:,:), allocatable, save wake_delta_pbl_tke
real, dimension(:), allocatable, save alp_bl
real, dimension(:,:), allocatable, save z0m
subroutine, public ocean_slab_init(dtime, pctsrf_rst)
real, dimension(:), allocatable, save zmasq
real, dimension(:), allocatable, save, public seaice
logical function phyetat0_get(nlev, field, name, descr, default)
real, dimension(:), allocatable, save rugoro
integer, parameter is_lic
real, dimension(:), allocatable, save zpic
real, dimension(:), allocatable, save rlon
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL co2_ppm
real, dimension(:,:), allocatable, save fm_therm
real, dimension(:), allocatable, save solsw
real, dimension(:), allocatable, save zgam
real, dimension(:,:), allocatable, save, public tslab
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
subroutine, public close_startphy
real, dimension(:), allocatable, save wake_fip
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL true
character(len=20), dimension(:), allocatable, save tname
character(len=6), save type_ocean
real, dimension(:,:,:), allocatable, save falb_dif
!$Id ok_orolf LOGICAL ok_limitvrai LOGICAL ok_all_xml INTEGER iflag_ener_conserv REAL co2_ppm0
real, dimension(:), allocatable, save rlat
!$Id zjulian!correction pour l heure initiale!jyg!jyg CALL pdtphys
logical, public carbon_cycle_tr
real, dimension(:,:), allocatable, save du_gwd_rando
real, dimension(:), allocatable, save wake_pe
real, dimension(:,:), allocatable, save agesno
real, dimension(:,:), allocatable, save ratqs
real, dimension(:), allocatable, save ale_bl_trig
real, dimension(:), allocatable, save zstd
subroutine pbl_surface_init(fder_rst, snow_rst, qsurf_rst, ftsoil_rst)
character(len=4), save type_trac
integer, parameter is_sic
subroutine init_iteration(itau_phy_)
subroutine abort_physic(modname, message, ierr)
real, dimension(:,:), allocatable, save fevap
real, dimension(:), allocatable, save zmax0
nrlmd
subroutine phyetat0(fichnom)
logical, public carbon_cycle_cpl
real, dimension(:,:), allocatable, save z0h
real, dimension(:), allocatable, public co2_send
real, dimension(:,:), allocatable, save ftsol
subroutine init_iophy_new(rlat, rlon)
real, dimension(:,:), allocatable, save u_ancien
real, dimension(:), allocatable, save zthe
integer, parameter is_oce
real, dimension(:,:), allocatable, save detr_therm
real, dimension(:,:), allocatable, save v_ancien
logical function phyetat0_srf(nlev, field, name, descr, default)
!$Header!gestion des impressions de sorties et de débogage la sortie standard prt_level COMMON comprint lunout
real, dimension(:,:), allocatable, save wake_deltat