Changeset 5186 for LMDZ6/branches/Amaury_dev/libf/dyn3dmem
- Timestamp:
- Sep 11, 2024, 6:03:07 PM (4 months ago)
- Location:
- LMDZ6/branches/Amaury_dev/libf/dyn3dmem
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/gcm.F90
r5182 r5186 1 2 1 ! $Id$ 3 2 … … 14 13 USE control_mod 15 14 16 17 15 USE iniphysiq_mod, ONLY: iniphysiq 18 16 USE lmdz_cppkeys_wrapper, ONLY: CPPKEY_PHYS … … 20 18 USE comconst_mod, ONLY: cpp, daysec, dtphys, dtvr, g, r, rad 21 19 USE logic_mod ! all of it, because of copyin clause when calling leapfrog 22 USE temps_mod, ONLY: calend, start_time,annee_ref,day_ref, &23 itau_dyn,itau_phy,day_ini,jD_ref,jH_ref,day_end, &24 dt,hour_ini,itaufin20 USE temps_mod, ONLY: calend, start_time, annee_ref, day_ref, & 21 itau_dyn, itau_phy, day_ini, jD_ref, jH_ref, day_end, & 22 dt, hour_ini, itaufin 25 23 USE mod_xios_dyn3dmem, ONLY: xios_dyn3dmem_init 26 24 USE lmdz_filtreg, ONLY: inifilr … … 34 32 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 35 33 USE lmdz_paramet 34 USE lmdz_conf_gcm, ONLY: conf_gcm 35 36 36 IMPLICIT NONE 37 37 … … 66 66 ! ------------- 67 67 68 69 70 68 REAL zdtvr 71 69 72 70 ! variables dynamiques 73 REAL, ALLOCATABLE,SAVE :: vcov(:,:),ucov(:,:) ! vents covariants74 REAL, ALLOCATABLE,SAVE :: teta(:,:) ! temperature potentielle75 REAL, ALLOCATABLE, SAVE :: q(:,:,:) ! champs advectes76 REAL, ALLOCATABLE,SAVE:: ps(:) ! pression au sol71 REAL, ALLOCATABLE, SAVE :: vcov(:, :), ucov(:, :) ! vents covariants 72 REAL, ALLOCATABLE, SAVE :: teta(:, :) ! temperature potentielle 73 REAL, ALLOCATABLE, SAVE :: q(:, :, :) ! champs advectes 74 REAL, ALLOCATABLE, SAVE :: ps(:) ! pression au sol 77 75 ! REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches 78 REAL, ALLOCATABLE,SAVE :: masse(:,:) ! masse d'air79 REAL, ALLOCATABLE,SAVE:: phis(:) ! geopotentiel au sol76 REAL, ALLOCATABLE, SAVE :: masse(:, :) ! masse d'air 77 REAL, ALLOCATABLE, SAVE :: phis(:) ! geopotentiel au sol 80 78 ! REAL phi(ip1jmp1,llm) ! geopotentiel 81 79 ! REAL w(ip1jmp1,llm) ! vitesse verticale … … 103 101 !-jld 104 102 105 106 CHARACTER (LEN=80) :: dynhist_file, dynhistave_file 107 CHARACTER (LEN=20) :: modname 108 CHARACTER (LEN=80) :: abort_message 103 CHARACTER (LEN = 80) :: dynhist_file, dynhistave_file 104 CHARACTER (LEN = 20) :: modname 105 CHARACTER (LEN = 80) :: abort_message 109 106 ! locales pour gestion du temps 110 107 INTEGER :: an, mois, jour 111 108 REAL :: heure 112 109 ! needed for xios interface 113 CHARACTER (LEN =10) :: xios_cal_type110 CHARACTER (LEN = 10) :: xios_cal_type 114 111 INTEGER :: anref, moisref, jourref 115 112 REAL :: heureref 116 113 117 114 118 115 … … 124 121 modname = 'gcm' 125 122 descript = 'Run GCM LMDZ' 126 lafin 123 lafin = .FALSE. 127 124 dynhist_file = 'dyn_hist' 128 125 dynhistave_file = 'dyn_hist_ave' … … 134 131 ! --------------------------------------- 135 132 136 CALL conf_gcm( 99, .TRUE.)133 CALL conf_gcm(99, .TRUE.) 137 134 IF (mod(iphysiq, iperiod) /= 0) CALL abort_gcm("conf_gcm", & 138 "iphysiq must be a multiple of iperiod", 1)135 "iphysiq must be a multiple of iperiod", 1) 139 136 140 137 … … 147 144 CALL Read_Distrib 148 145 149 !#ifdef CPP_PHYS150 ! CALL Init_Phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys)146 !#ifdef CPP_PHYS 147 ! CALL Init_Phys_lmdz(iim,jjp1,llm,mpi_size,distrib_phys) 151 148 !#endif 152 149 ! CALL set_bands 153 150 !#ifdef CPP_PHYS 154 ! CALL Init_interface_dyn_phys155 !#endif151 ! CALL Init_interface_dyn_phys 152 !#endif 156 153 CALL barrier 157 154 … … 177 174 178 175 IF (calend == 'earth_360d') THEN 179 180 WRITE(lunout,*)'CALENDRIER CHOISI: Terrestre a 360 jours/an'181 xios_cal_type='d360'176 CALL ioconf_calendar('360_day') 177 WRITE(lunout, *)'CALENDRIER CHOISI: Terrestre a 360 jours/an' 178 xios_cal_type = 'd360' 182 179 ELSE IF (calend == 'earth_365d') THEN 183 184 WRITE(lunout,*)'CALENDRIER CHOISI: Terrestre a 365 jours/an'185 xios_cal_type='noleap'180 CALL ioconf_calendar('noleap') 181 WRITE(lunout, *)'CALENDRIER CHOISI: Terrestre a 365 jours/an' 182 xios_cal_type = 'noleap' 186 183 ELSE IF (calend == 'gregorian') THEN 187 188 WRITE(lunout,*)'CALENDRIER CHOISI: Terrestre bissextile'189 xios_cal_type='gregorian'184 CALL ioconf_calendar('gregorian') 185 WRITE(lunout, *)'CALENDRIER CHOISI: Terrestre bissextile' 186 xios_cal_type = 'gregorian' 190 187 else 191 192 CALL abort_gcm(modname,abort_message,1)188 abort_message = 'Mauvais choix de calendrier' 189 CALL abort_gcm(modname, abort_message, 1) 193 190 ENDIF 194 191 … … 202 199 203 200 ! Allocation de la tableau q : champs advectes 204 ALLOCATE(ucov(ijb_u:ije_u, llm))205 ALLOCATE(vcov(ijb_v:ije_v, llm))206 ALLOCATE(teta(ijb_u:ije_u, llm))207 ALLOCATE(masse(ijb_u:ije_u, llm))201 ALLOCATE(ucov(ijb_u:ije_u, llm)) 202 ALLOCATE(vcov(ijb_v:ije_v, llm)) 203 ALLOCATE(teta(ijb_u:ije_u, llm)) 204 ALLOCATE(masse(ijb_u:ije_u, llm)) 208 205 ALLOCATE(ps(ijb_u:ije_u)) 209 206 ALLOCATE(phis(ijb_u:ije_u)) 210 ALLOCATE(q(ijb_u:ije_u, llm,nqtot))207 ALLOCATE(q(ijb_u:ije_u, llm, nqtot)) 211 208 212 209 !----------------------------------------------------------------------- … … 216 213 ! lecture du fichier start.nc 217 214 IF (read_start) THEN 218 219 220 221 CALL iniacademic_loc(vcov,ucov,teta,q,masse,ps,phis,time_0)222 223 224 225 226 CALL dynetat0_loc("start.nc",vcov,ucov, &227 teta,q,masse,ps,phis, time_0)228 229 230 231 232 233 234 215 ! we still need to run iniacademic to initialize some 216 ! constants & fields, if we run the 'newtonian' or 'SW' cases: 217 IF (iflag_phys/=1) THEN 218 CALL iniacademic_loc(vcov, ucov, teta, q, masse, ps, phis, time_0) 219 endif 220 221 ! if (planet_type.EQ."earth") THEN 222 ! Load an Earth-format start file 223 CALL dynetat0_loc("start.nc", vcov, ucov, & 224 teta, q, masse, ps, phis, time_0) 225 ! endif ! of if (planet_type.EQ."earth") 226 227 ! WRITE(73,*) 'ucov',ucov 228 ! WRITE(74,*) 'vcov',vcov 229 ! WRITE(75,*) 'teta',teta 230 ! WRITE(76,*) 'ps',ps 231 ! WRITE(77,*) 'q',q 235 232 236 233 ENDIF ! of if (read_start) 237 234 238 235 ! le cas echeant, creation d un etat initial 239 IF (prt_level > 9) WRITE(lunout, *) &240 'GCM: AVANT iniacademic AVANT AVANT AVANT AVANT'236 IF (prt_level > 9) WRITE(lunout, *) & 237 'GCM: AVANT iniacademic AVANT AVANT AVANT AVANT' 241 238 IF (.NOT.read_start) THEN 242 start_time=0.243 annee_ref=anneeref244 CALL iniacademic_loc(vcov,ucov,teta,q,masse,ps,phis,time_0)239 start_time = 0. 240 annee_ref = anneeref 241 CALL iniacademic_loc(vcov, ucov, teta, q, masse, ps, phis, time_0) 245 242 ENDIF 246 243 … … 250 247 ! on recalcule eventuellement le pas de temps 251 248 252 IF(MOD(day_step, iperiod)/=0) THEN253 abort_message =&254 'Il faut choisir un nb de pas par jour multiple de iperiod'255 CALL abort_gcm(modname,abort_message,1)256 ENDIF 257 258 IF(MOD(day_step, iphysiq)/=0) THEN259 abort_message =&260 'Il faut choisir un nb de pas par jour multiple de iphysiq'261 CALL abort_gcm(modname,abort_message,1)262 ENDIF 263 264 zdtvr = daysec/REAL(day_step)249 IF(MOD(day_step, iperiod)/=0) THEN 250 abort_message = & 251 'Il faut choisir un nb de pas par jour multiple de iperiod' 252 CALL abort_gcm(modname, abort_message, 1) 253 ENDIF 254 255 IF(MOD(day_step, iphysiq)/=0) THEN 256 abort_message = & 257 'Il faut choisir un nb de pas par jour multiple de iphysiq' 258 CALL abort_gcm(modname, abort_message, 1) 259 ENDIF 260 261 zdtvr = daysec / REAL(day_step) 265 262 IF(dtvr/=zdtvr) THEN 266 WRITE(lunout,*) &267 'WARNING!!! changement de pas de temps',dtvr,'>',zdtvr263 WRITE(lunout, *) & 264 'WARNING!!! changement de pas de temps', dtvr, '>', zdtvr 268 265 ENDIF 269 266 … … 271 268 272 269 IF (start_time /= starttime) THEN 273 WRITE(lunout,*)' GCM: Attention l''heure de depart lue dans le' &274 ,' fichier restart ne correspond pas a celle lue dans le run.def'275 276 WRITE(lunout,*)'Je prends l''heure lue dans run.def'277 278 279 WRITE(lunout,*)'Je m''arrete'280 281 270 WRITE(lunout, *)' GCM: Attention l''heure de depart lue dans le' & 271 , ' fichier restart ne correspond pas a celle lue dans le run.def' 272 IF (raz_date == 1) THEN 273 WRITE(lunout, *)'Je prends l''heure lue dans run.def' 274 start_time = starttime 275 ELSE 276 WRITE(lunout, *)'Je m''arrete' 277 CALL abort 278 ENDIF 282 279 ENDIF 283 280 IF (raz_date == 1) THEN 284 285 286 287 288 289 290 WRITE(lunout,*) &291 'GCM: On reinitialise a la date lue dans gcm.def'281 annee_ref = anneeref 282 day_ref = dayref 283 day_ini = dayref 284 itau_dyn = 0 285 itau_phy = 0 286 time_0 = 0. 287 WRITE(lunout, *) & 288 'GCM: On reinitialise a la date lue dans gcm.def' 292 289 ELSE IF (annee_ref /= anneeref .OR. day_ref /= dayref) THEN 293 WRITE(lunout,*) &294 'GCM: Attention les dates initiales lues dans le fichier'295 WRITE(lunout,*) &296 ' restart ne correspondent pas a celles lues dans '297 WRITE(lunout,*)' gcm.def'298 WRITE(lunout,*)' annee_ref=',annee_ref," anneeref=",anneeref299 WRITE(lunout,*)' day_ref=',day_ref," dayref=",dayref300 WRITE(lunout,*)' Pas de remise a zero'290 WRITE(lunout, *) & 291 'GCM: Attention les dates initiales lues dans le fichier' 292 WRITE(lunout, *) & 293 ' restart ne correspondent pas a celles lues dans ' 294 WRITE(lunout, *)' gcm.def' 295 WRITE(lunout, *)' annee_ref=', annee_ref, " anneeref=", anneeref 296 WRITE(lunout, *)' day_ref=', day_ref, " dayref=", dayref 297 WRITE(lunout, *)' Pas de remise a zero' 301 298 ENDIF 302 299 ! if (annee_ref .NE. anneeref .OR. day_ref .NE. dayref) THEN … … 333 330 CALL ioconf_startdate(INT(jD_ref), jH_ref) 334 331 335 WRITE(lunout, *)'DEBUG'336 WRITE(lunout, *)'annee_ref, mois, day_ref, heure, jD_ref'337 WRITE(lunout, *)annee_ref, mois, day_ref, heure, jD_ref338 CALL ju2ymds(jD_ref +jH_ref,anref, moisref, jourref, heureref)339 WRITE(lunout, *)'jD_ref+jH_ref,an, mois, jour, heure'340 WRITE(lunout, *)jD_ref+jH_ref,anref, moisref, jourref, heureref332 WRITE(lunout, *)'DEBUG' 333 WRITE(lunout, *)'annee_ref, mois, day_ref, heure, jD_ref' 334 WRITE(lunout, *)annee_ref, mois, day_ref, heure, jD_ref 335 CALL ju2ymds(jD_ref + jH_ref, anref, moisref, jourref, heureref) 336 WRITE(lunout, *)'jD_ref+jH_ref,an, mois, jour, heure' 337 WRITE(lunout, *)jD_ref + jH_ref, anref, moisref, jourref, heureref 341 338 342 339 IF (iflag_phys==1) THEN 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 340 ! these initialisations have already been done (via iniacademic) 341 ! if running in SW or Newtonian mode 342 !----------------------------------------------------------------------- 343 ! Initialisation des constantes dynamiques : 344 ! ------------------------------------------ 345 dtvr = zdtvr 346 CALL iniconst 347 348 !----------------------------------------------------------------------- 349 ! Initialisation de la geometrie : 350 ! -------------------------------- 351 CALL inigeom 352 353 !----------------------------------------------------------------------- 354 ! Initialisation du filtre : 355 ! -------------------------- 356 CALL inifilr 360 357 ENDIF ! of if (iflag_phys.EQ.1) 361 358 … … 364 361 ! ---------------------------------- 365 362 366 CALL inidissip( lstardis, nitergdiv, nitergrot, niterh, &367 tetagdiv, tetagrot, tetatemp, vert_prof_dissip)363 CALL inidissip(lstardis, nitergdiv, nitergrot, niterh, & 364 tetagdiv, tetagrot, tetatemp, vert_prof_dissip) 368 365 369 366 !----------------------------------------------------------------------- … … 371 368 ! ------------------------ 372 369 373 374 370 IF (nday>=0) THEN 375 371 day_end = day_ini + nday 376 372 else 377 day_end = day_ini - nday/day_step378 ENDIF 379 380 WRITE(lunout, 300)day_ini,day_end381 300 FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//)373 day_end = day_ini - nday / day_step 374 ENDIF 375 376 WRITE(lunout, 300)day_ini, day_end 377 300 FORMAT('1'/, 15x, 'run du jour', i7, 2x, 'au jour', i7//) 382 378 383 379 CALL ju2ymds(jD_ref + day_ini - day_ref, an, mois, jour, heure) 384 write (lunout, 301)jour, mois, an380 write (lunout, 301)jour, mois, an 385 381 CALL ju2ymds(jD_ref + day_end - day_ref, an, mois, jour, heure) 386 write (lunout, 302)jour, mois, an387 301 FORMAT('1'/,15x,'run du ', i2,'/',i2,'/',i4)388 302 FORMAT('1'/,15x,' au ', i2,'/',i2,'/',i4)382 write (lunout, 302)jour, mois, an 383 301 FORMAT('1'/, 15x, 'run du ', i2, '/', i2, '/', i4) 384 302 FORMAT('1'/, 15x, ' au ', i2, '/', i2, '/', i4) 389 385 390 386 !----------------------------------------------------------------------- … … 395 391 ! istdyn=day_step/4 ! stockage toutes les 6h=1jour/4 396 392 ! istdyn=day_step/12 ! stockage toutes les 2h=1jour/12 397 istdyn =day_step/8 ! stockage toutes les 6h=1jour/12398 istphy =istdyn/iphysiq393 istdyn = day_step / 8 ! stockage toutes les 6h=1jour/12 394 istphy = istdyn / iphysiq 399 395 400 396 IF ((iflag_phys==1).OR.(iflag_phys>=100)) THEN 401 397 ! Physics: 402 398 IF (CPPKEY_PHYS) THEN 403 CALL iniphysiq(iim, jjm,llm, &404 distrib_phys(mpi_rank),comm_lmdz, &405 daysec,day_ini,dtphys/nsplit_phys, &406 rlatu,rlatv,rlonu,rlonv,aire,cu,cv,rad,g,r,cpp, &407 iflag_phys)399 CALL iniphysiq(iim, jjm, llm, & 400 distrib_phys(mpi_rank), comm_lmdz, & 401 daysec, day_ini, dtphys / nsplit_phys, & 402 rlatu, rlatv, rlonu, rlonv, aire, cu, cv, rad, g, r, cpp, & 403 iflag_phys) 408 404 END IF 409 405 ENDIF ! of IF ((iflag_phys==1).OR.(iflag_phys>=100)) … … 418 414 419 415 time_step = zdtvr 420 421 422 423 t_ops =((1.0*iecri)/day_step) * daysec424 425 CALL inithist_loc(day_ref,annee_ref,time_step, &426 t_ops,t_wrt)427 428 429 430 431 432 433 CALL initdynav_loc(day_ref,annee_ref,time_step,t_ops,t_wrt)434 435 dtav = iperiod *dtvr/daysec436 437 ! setting up DYN3D/XIOS inerface416 IF (ok_dyn_ins) THEN 417 ! initialize output file for instantaneous outputs 418 ! t_ops = iecri * daysec ! do operations every t_ops 419 t_ops = ((1.0 * iecri) / day_step) * daysec 420 t_wrt = daysec ! iecri * daysec ! write output every t_wrt 421 CALL inithist_loc(day_ref, annee_ref, time_step, & 422 t_ops, t_wrt) 423 endif 424 425 IF (ok_dyn_ave) THEN 426 ! initialize output file for averaged outputs 427 t_ops = iperiod * time_step ! do operations every t_ops 428 t_wrt = periodav * daysec ! write output every t_wrt 429 CALL initdynav_loc(day_ref, annee_ref, time_step, t_ops, t_wrt) 430 END IF 431 dtav = iperiod * dtvr / daysec 432 433 ! setting up DYN3D/XIOS inerface 438 434 IF (ok_dyn_xios) THEN 439 CALL xios_dyn3dmem_init(xios_cal_type, anref, moisref, jourref,heureref, an,&440 mois, jour, heure, zdtvr)435 CALL xios_dyn3dmem_init(xios_cal_type, anref, moisref, jourref, heureref, an, & 436 mois, jour, heure, zdtvr) 441 437 ENDIF 442 438 … … 460 456 !$OMP COPYIN(ok_strato,ok_gradsfile,ok_limit,ok_etat0) & 461 457 !$OMP COPYIN(iflag_phys,iflag_trac,adv_qsat_liq) 462 CALL leapfrog_loc(ucov, vcov,teta,ps,masse,phis,q,time_0)458 CALL leapfrog_loc(ucov, vcov, teta, ps, masse, phis, q, time_0) 463 459 !$OMP END PARALLEL 464 460 -
LMDZ6/branches/Amaury_dev/libf/dyn3dmem/lmdz_conf_gcm.f90
r5185 r5186 1 2 ! $Id$ 3 4 SUBROUTINE conf_gcm( tapedef, etatinit ) 5 6 USE control_mod 7 USE IOIPSL 8 USE misc_mod 9 USE lmdz_filtre_fft, ONLY: use_filtre_fft 10 USE lmdz_filtre_fft_loc, ONLY: use_filtre_fft_loc=>use_filtre_fft 11 USE mod_hallo, ONLY: use_mpi_alloc 12 USE lmdz_infotrac, ONLY: type_trac 13 USE lmdz_assert, ONLY: assert 14 USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, & 15 iflag_top_bound, mode_top_bound, tau_top_bound, & 16 ngroup, maxlatfilter 17 USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, & 18 ok_guide, ok_limit, ok_strato, purmats, read_start, & 19 ysinus, read_orop, adv_qsat_liq 20 USE serre_mod, ONLY: clon,clat,grossismx,grossismy,dzoomx,dzoomy, & 21 alphax,alphay,taux,tauy 22 USE temps_mod, ONLY: calend, year_len, offline_time 23 USE lmdz_iniprint, ONLY: lunout, prt_level 24 USE lmdz_comdissnew, ONLY: lstardis, nitergdiv, nitergrot, niterh, tetagdiv, & 25 tetagrot, tetatemp, coefdis, vert_prof_dissip 26 27 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 28 USE lmdz_paramet 29 IMPLICIT NONE 30 !----------------------------------------------------------------------- 31 ! Auteurs : L. Fairhead , P. Le Van . 32 33 ! Arguments : 34 35 ! tapedef : 36 ! etatinit : = TRUE , on ne compare pas les valeurs des para- 37 ! -metres du zoom avec celles lues sur le fichier start . 38 39 LOGICAL,INTENT(IN) :: etatinit 40 INTEGER,INTENT(IN) :: tapedef 41 42 ! Declarations : 43 ! -------------- 44 45 46 47 ! local: 48 ! ------ 49 50 CHARACTER ch1*72,ch2*72,ch3*72,ch4*12 51 REAL clonn,clatt,grossismxx,grossismyy 52 REAL dzoomxx,dzoomyy, tauxx,tauyy 53 LOGICAL fxyhypbb, ysinuss 54 INTEGER i 55 CHARACTER(len=*), PARAMETER :: modname="conf_gcm" 56 CHARACTER(len=80) :: abort_message 1 MODULE lmdz_conf_gcm 2 IMPLICIT NONE; PRIVATE 3 PUBLIC conf_gcm 4 5 CONTAINS 6 7 SUBROUTINE conf_gcm(tapedef, etatinit) 8 9 USE control_mod 10 USE IOIPSL 11 USE misc_mod 12 USE lmdz_filtre_fft, ONLY: use_filtre_fft 13 USE lmdz_filtre_fft_loc, ONLY: use_filtre_fft_loc => use_filtre_fft 14 USE mod_hallo, ONLY: use_mpi_alloc 15 USE lmdz_infotrac, ONLY: type_trac 16 USE lmdz_assert, ONLY: assert 17 USE comconst_mod, ONLY: dissip_deltaz, dissip_factz, dissip_zref, & 18 iflag_top_bound, mode_top_bound, tau_top_bound, & 19 ngroup, maxlatfilter 20 USE logic_mod, ONLY: fxyhypb, iflag_phys, ok_etat0, ok_gradsfile, & 21 ok_guide, ok_limit, ok_strato, purmats, read_start, & 22 ysinus, read_orop, adv_qsat_liq 23 USE serre_mod, ONLY: clon, clat, grossismx, grossismy, dzoomx, dzoomy, & 24 alphax, alphay, taux, tauy 25 USE temps_mod, ONLY: calend, year_len, offline_time 26 USE lmdz_iniprint, ONLY: lunout, prt_level 27 USE lmdz_comdissnew, ONLY: lstardis, nitergdiv, nitergrot, niterh, tetagdiv, & 28 tetagrot, tetatemp, coefdis, vert_prof_dissip 29 30 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm 31 USE lmdz_paramet 32 IMPLICIT NONE 33 !----------------------------------------------------------------------- 34 ! Auteurs : L. Fairhead , P. Le Van . 35 36 ! Arguments : 37 38 ! tapedef : 39 ! etatinit : = TRUE , on ne compare pas les valeurs des para- 40 ! -metres du zoom avec celles lues sur le fichier start . 41 42 LOGICAL, INTENT(IN) :: etatinit 43 INTEGER, INTENT(IN) :: tapedef 44 45 ! Declarations : 46 ! -------------- 47 48 49 50 ! local: 51 ! ------ 52 53 CHARACTER ch1*72, ch2*72, ch3*72, ch4*12 54 REAL clonn, clatt, grossismxx, grossismyy 55 REAL dzoomxx, dzoomyy, tauxx, tauyy 56 LOGICAL fxyhypbb, ysinuss 57 INTEGER i 58 CHARACTER(len = *), PARAMETER :: modname = "conf_gcm" 59 CHARACTER(len = 80) :: abort_message 57 60 #ifdef CPP_OMP 58 61 INTEGER, EXTERNAL :: OMP_GET_NUM_THREADS 59 62 #endif 60 63 61 ! -------------------------------------------------------------------62 63 ! ......... Version du 29/04/97 ..........64 65 ! Nouveaux parametres nitergdiv,nitergrot,niterh,tetagdiv,tetagrot,66 ! tetatemp ajoutes pour la dissipation .67 68 ! Autre parametre ajoute en fin de liste de tapedef : ** fxyhypb **69 70 ! Si fxyhypb = .TRUE. , choix de la fonction a derivee tangente hyperb.71 ! Sinon , choix de fxynew , a derivee sinusoidale ..72 73 ! ...... etatinit = . TRUE. si defrun est appele dans ETAT0_LMD ou74 ! LIMIT_LMD pour l'initialisation de start.dat (dic) et75 ! de limit.dat ( dic) ...........76 ! Sinon etatinit = . FALSE .77 78 ! Donc etatinit = .F. si on veut comparer les valeurs de grossismx ,79 ! grossismy,clon,clat, fxyhypb lues sur le fichier start avec80 ! celles passees par run.def , au debut du gcm, apres l'appel a81 ! lectba .82 ! Ces parmetres definissant entre autres la grille et doivent etre83 ! pareils et coherents , sinon il y aura divergence du gcm .84 85 !-----------------------------------------------------------------------86 ! initialisations:87 ! ----------------88 89 !Config Key = lunout90 !Config Desc = unite de fichier pour les impressions91 !Config Def = 692 !Config Help = unite de fichier pour les impressions93 !Config (defaut sortie standard = 6)94 lunout=695 CALL getin('lunout', lunout)96 IF (lunout /= 5 .AND. lunout /= 6) THEN97 OPEN(UNIT=lunout,FILE='lmdz.out_0000',ACTION='write',&98 STATUS='unknown',FORM='formatted')99 ENDIF100 101 adjust=.FALSE.102 CALL getin('adjust',adjust)64 ! ------------------------------------------------------------------- 65 66 ! ......... Version du 29/04/97 .......... 67 68 ! Nouveaux parametres nitergdiv,nitergrot,niterh,tetagdiv,tetagrot, 69 ! tetatemp ajoutes pour la dissipation . 70 71 ! Autre parametre ajoute en fin de liste de tapedef : ** fxyhypb ** 72 73 ! Si fxyhypb = .TRUE. , choix de la fonction a derivee tangente hyperb. 74 ! Sinon , choix de fxynew , a derivee sinusoidale .. 75 76 ! ...... etatinit = . TRUE. si defrun est appele dans ETAT0_LMD ou 77 ! LIMIT_LMD pour l'initialisation de start.dat (dic) et 78 ! de limit.dat ( dic) ........... 79 ! Sinon etatinit = . FALSE . 80 81 ! Donc etatinit = .F. si on veut comparer les valeurs de grossismx , 82 ! grossismy,clon,clat, fxyhypb lues sur le fichier start avec 83 ! celles passees par run.def , au debut du gcm, apres l'appel a 84 ! lectba . 85 ! Ces parmetres definissant entre autres la grille et doivent etre 86 ! pareils et coherents , sinon il y aura divergence du gcm . 87 88 !----------------------------------------------------------------------- 89 ! initialisations: 90 ! ---------------- 91 92 !Config Key = lunout 93 !Config Desc = unite de fichier pour les impressions 94 !Config Def = 6 95 !Config Help = unite de fichier pour les impressions 96 !Config (defaut sortie standard = 6) 97 lunout = 6 98 CALL getin('lunout', lunout) 99 IF (lunout /= 5 .AND. lunout /= 6) THEN 100 OPEN(UNIT = lunout, FILE = 'lmdz.out_0000', ACTION = 'write', & 101 STATUS = 'unknown', FORM = 'formatted') 102 ENDIF 103 104 adjust = .FALSE. 105 CALL getin('adjust', adjust) 103 106 104 107 #ifdef CPP_OMP … … 114 117 #endif 115 118 116 itaumax=0117 CALL getin('itaumax',itaumax);118 IF (itaumax<=0) itaumax=HUGE(itaumax)119 120 !Config Key = prt_level121 !Config Desc = niveau d'impressions de débogage122 !Config Def = 0123 !Config Help = Niveau d'impression pour le débogage124 !Config (0 = minimum d'impression)125 prt_level = 0126 CALL getin('prt_level',prt_level)127 128 !-----------------------------------------------------------------------129 ! Parametres de controle du run:130 !-----------------------------------------------------------------------131 !Config Key = planet_type132 !Config Desc = planet type ("earth", "mars", "venus", ...)133 !Config Def = earth134 !Config Help = this flag sets the type of atymosphere that is considered135 planet_type="earth"136 CALL getin('planet_type',planet_type)137 138 !Config Key = calend139 !Config Desc = type de calendrier utilise140 !Config Def = earth_360d141 !Config Help = valeur possible: earth_360d, earth_365d, earth_366d142 !Config143 calend = 'earth_360d'144 ! initialize year_len for aquaplanets and 1D145 CALL getin('calend', calend)146 IF (calend == 'earth_360d') THEN147 year_len=360148 ELSE IF (calend == 'earth_365d') THEN149 year_len=365150 ELSE IF (calend == 'earth_366d') THEN151 year_len=366152 ELSE153 year_len=1154 ENDIF155 156 !Config Key = dayref157 !Config Desc = Jour de l'etat initial158 !Config Def = 1159 !Config Help = Jour de l'etat initial ( = 350 si 20 Decembre ,160 !Config par expl. ,comme ici ) ... A completer161 dayref=1162 CALL getin('dayref', dayref)163 164 !Config Key = anneeref165 !Config Desc = Annee de l'etat initial166 !Config Def = 1998167 !Config Help = Annee de l'etat initial168 !Config ( avec 4 chiffres ) ... A completer169 anneeref = 1998170 CALL getin('anneeref',anneeref)171 172 !Config Key = raz_date173 !Config Desc = Remise a zero de la date initiale174 !Config Def = 0 (pas de remise a zero)175 !Config Help = Remise a zero de la date initiale176 !Config 0 pas de remise a zero, on garde la date du fichier restart177 !Config 1 prise en compte de la date de gcm.def avec remise a zero178 !Config des compteurs de pas de temps179 raz_date = 0180 CALL getin('raz_date', raz_date)181 182 !Config Key = resetvarc183 !Config Desc = Reinit des variables de controle184 !Config Def = n185 !Config Help = Reinit des variables de controle186 resetvarc = .FALSE.187 CALL getin('resetvarc',resetvarc)188 189 !Config Key = nday190 !Config Desc = Nombre de jours d'integration191 !Config Def = 10192 !Config Help = Nombre de jours d'integration193 !Config ... On pourait aussi permettre des mois ou des annees !194 nday = 10195 CALL getin('nday',nday)196 197 !Config Key = starttime198 !Config Desc = Heure de depart de la simulation199 !Config Def = 0200 !Config Help = Heure de depart de la simulation201 !Config en jour202 starttime = 0203 CALL getin('starttime',starttime)204 205 !Config Key = day_step206 !Config Desc = nombre de pas par jour207 !Config Def = 240208 !Config Help = nombre de pas par jour (multiple de iperiod) (209 !Config ici pour dt = 1 min )210 day_step = 240211 CALL getin('day_step',day_step)212 213 !Config Key = nsplit_phys214 nsplit_phys = 1215 CALL getin('nsplit_phys',nsplit_phys)216 217 !Config Key = iperiod218 !Config Desc = periode pour le pas Matsuno219 !Config Def = 5220 !Config Help = periode pour le pas Matsuno (en pas de temps)221 iperiod = 5222 CALL getin('iperiod',iperiod)223 224 !Config Key = iapp_tracvl225 !Config Desc = frequence du groupement des flux226 !Config Def = iperiod227 !Config Help = frequence du groupement des flux (en pas de temps)228 iapp_tracvl = iperiod229 CALL getin('iapp_tracvl',iapp_tracvl)230 231 !Config Key = iconser232 !Config Desc = periode de sortie des variables de controle233 !Config Def = 240234 !Config Help = periode de sortie des variables de controle235 !Config (En pas de temps)236 iconser = 240237 CALL getin('iconser', iconser)238 239 !Config Key = iecri240 !Config Desc = periode d'ecriture du fichier histoire241 !Config Def = 1242 !Config Help = periode d'ecriture du fichier histoire (en jour)243 iecri = 1244 CALL getin('iecri',iecri)245 246 !Config Key = periodav247 !Config Desc = periode de stockage fichier histmoy248 !Config Def = 1249 !Config Help = periode de stockage fichier histmoy (en jour)250 periodav = 1.251 CALL getin('periodav',periodav)252 253 !Config Key = output_grads_dyn254 !Config Desc = output dynamics diagnostics in 'dyn.dat' file255 !Config Def = n256 !Config Help = output dynamics diagnostics in Grads-readable 'dyn.dat' file257 output_grads_dyn=.FALSE.258 CALL getin('output_grads_dyn',output_grads_dyn)259 260 !Config Key = dissip_period261 !Config Desc = periode de la dissipation262 !Config Def = 0263 !Config Help = periode de la dissipation264 !Config dissip_period=0 => la valeur sera calcule dans inidissip265 !Config dissip_period>0 => on prend cette valeur266 dissip_period = 0267 CALL getin('dissip_period',dissip_period)268 269 !cc .... P. Le Van , modif le 29/04/97 .pour la dissipation ...270 !cc271 272 !Config Key = lstardis273 !Config Desc = choix de l'operateur de dissipation274 !Config Def = y275 !Config Help = choix de l'operateur de dissipation276 !Config 'y' si on veut star et 'n' si on veut non-start !277 !Config Moi y en a pas comprendre !278 lstardis = .TRUE.279 CALL getin('lstardis',lstardis)280 281 !Config Key = nitergdiv282 !Config Desc = Nombre d'iteration de gradiv283 !Config Def = 1284 !Config Help = nombre d'iterations de l'operateur de dissipation285 !Config gradiv286 nitergdiv = 1287 CALL getin('nitergdiv',nitergdiv)288 289 !Config Key = nitergrot290 !Config Desc = nombre d'iterations de nxgradrot291 !Config Def = 2292 !Config Help = nombre d'iterations de l'operateur de dissipation293 !Config nxgradrot294 nitergrot = 2295 CALL getin('nitergrot',nitergrot)296 297 !Config Key = niterh298 !Config Desc = nombre d'iterations de divgrad299 !Config Def = 2300 !Config Help = nombre d'iterations de l'operateur de dissipation301 !Config divgrad302 niterh = 2303 CALL getin('niterh',niterh)304 305 !Config Key = tetagdiv306 !Config Desc = temps de dissipation pour div307 !Config Def = 7200308 !Config Help = temps de dissipation des plus petites longeur309 !Config d'ondes pour u,v (gradiv)310 tetagdiv = 7200.311 CALL getin('tetagdiv',tetagdiv)312 313 !Config Key = tetagrot314 !Config Desc = temps de dissipation pour grad315 !Config Def = 7200316 !Config Help = temps de dissipation des plus petites longeur317 !Config d'ondes pour u,v (nxgradrot)318 tetagrot = 7200.319 CALL getin('tetagrot',tetagrot)320 321 !Config Key = tetatemp322 !Config Desc = temps de dissipation pour h323 !Config Def = 7200324 !Config Help = temps de dissipation des plus petites longeur325 !Config d'ondes pour h (divgrad)326 tetatemp= 7200.327 CALL getin('tetatemp',tetatemp)328 329 ! Parametres controlant la variation sur la verticale des constantes de330 ! dissipation.331 ! Pour le moment actifs uniquement dans la version a 39 niveaux332 ! avec ok_strato=y333 334 dissip_factz=4.335 dissip_deltaz=10.336 dissip_zref=30.337 CALL getin('dissip_factz',dissip_factz)338 CALL getin('dissip_deltaz',dissip_deltaz)339 CALL getin('dissip_zref',dissip_zref)340 341 342 !maxlatfilter343 maxlatfilter = -1.0344 CALL getin('maxlatfilter',maxlatfilter)345 IF (maxlatfilter > 90) &346 CALL abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1)347 348 349 ! ngroup350 ngroup=3351 CALL getin('ngroup',ngroup)352 IF (mod(iim, 2**ngroup) /= 0) &353 CALL abort_gcm("conf_gcm", 'iim must be multiple of 2**ngroup', 1)354 IF (2**ngroup > jjm + 1) &355 CALL abort_gcm("conf_gcm", '2**ngroup must be <= jjm + 1', 1)356 357 ! mode_top_bound : fields towards which sponge relaxation will be done:358 ! top_bound sponge: only active if ok_strato=.TRUE. and iflag_top_bound!=0359 ! iflag_top_bound=0 for no sponge360 ! iflag_top_bound=1 for sponge over 4 topmost layers361 ! iflag_top_bound=2 for sponge from top to ~1% of top layer pressure362 iflag_top_bound=1363 CALL getin('iflag_top_bound',iflag_top_bound)364 IF (iflag_top_bound < 0 .OR. iflag_top_bound > 2) &365 CALL abort_gcm("conf_gcm", 'iflag_top_bound must be 0, 1 or 2', 1)366 367 ! mode_top_bound : fields towards which sponge relaxation will be done:368 ! mode_top_bound=0: no relaxation369 ! mode_top_bound=1: u and v relax towards 0370 ! mode_top_bound=2: u and v relax towards their zonal mean371 ! mode_top_bound=3: u,v and pot. temp. relax towards their zonal mean372 mode_top_bound=3373 CALL getin('mode_top_bound',mode_top_bound)374 375 ! top_bound sponge : inverse of charactericstic relaxation time scale for sponge376 tau_top_bound=1.e-5377 CALL getin('tau_top_bound',tau_top_bound)378 379 !Config Key = coefdis380 !Config Desc = coefficient pour gamdissip381 !Config Def = 0382 !Config Help = coefficient pour gamdissip383 coefdis = 0.384 CALL getin('coefdis',coefdis)385 386 !Config Key = purmats387 !Config Desc = Schema d'integration388 !Config Def = n389 !Config Help = Choix du schema d'integration temporel.390 !Config y = pure Matsuno sinon c'est du Matsuno-leapfrog391 purmats = .FALSE.392 CALL getin('purmats',purmats)393 394 !Config Key = ok_guide395 !Config Desc = Guidage396 !Config Def = n397 !Config Help = Guidage398 ok_guide = .FALSE.399 CALL getin('ok_guide',ok_guide)400 401 IF (ok_guide .AND. adjust) CALL abort_gcm("conf_gcm", &402 "adjust does not work with ok_guide", 1)403 404 !Config Key = read_start405 !Config Desc = Initialize model using a 'start.nc' file406 !Config Def = y407 !Config Help = y: intialize dynamical fields using a 'start.nc' file408 ! n: fields are initialized by 'iniacademic' routine409 read_start= .TRUE.410 CALL getin('read_start',read_start)411 412 !Config Key = iflag_phys413 !Config Desc = Avec ls physique414 !Config Def = 1415 !Config Help = Permet de faire tourner le modele sans416 !Config physique.417 iflag_phys = 1418 CALL getin('iflag_phys',iflag_phys)419 420 !Config Key = iphysiq421 !Config Desc = Periode de la physique422 !Config Def = 5423 !Config Help = Periode de la physique en pas de temps de la dynamique.424 iphysiq = 5425 CALL getin('iphysiq', iphysiq)426 427 !Config Key = ip_ebil_dyn428 !Config Desc = PRINT level for energy conserv. diag.429 !Config Def = 0430 !Config Help = PRINT level for energy conservation diag. ;431 ! les options suivantes existent :432 !Config 0 pas de print433 !Config 1 pas de print434 !Config 2 print,435 ip_ebil_dyn = 0436 CALL getin('ip_ebil_dyn',ip_ebil_dyn)437 438 !cc .... P. Le Van , ajout le 7/03/95 .pour le zoom ...439 ! ......... ( modif le 17/04/96 ) .........440 441 test_etatinit: IF (.NOT. etatinit) THEN442 !Config Key = clon443 !Config Desc = centre du zoom, longitude444 !Config Def = 0445 !Config Help = longitude en degres du centre446 !Config du zoom447 clonn = 0.448 CALL getin('clon',clonn)449 450 !Config Key = clat451 !Config Desc = centre du zoom, latitude452 !Config Def = 0453 !Config Help = latitude en degres du centre du zoom454 !Config455 clatt = 0.456 CALL getin('clat',clatt)457 458 IF( ABS(clat - clatt)>= 0.001) THEN459 WRITE(lunout, *)'conf_gcm: La valeur de clat passee par run.def', &460 ' est differente de celle lue sur le fichier start '461 CALL abort_gcm("conf_gcm", "stopped",1)462 ENDIF463 464 !Config Key = grossismx465 !Config Desc = zoom en longitude466 !Config Def = 1.0467 !Config Help = facteur de grossissement du zoom,468 !Config selon la longitude469 grossismxx = 1.0470 CALL getin('grossismx',grossismxx)471 472 IF( ABS(grossismx - grossismxx)>= 0.001) THEN473 WRITE(lunout, *)'conf_gcm: La valeur de grossismx passee par ', &474 'run.def est differente de celle lue sur le fichier start '475 CALL abort_gcm("conf_gcm", "stopped",1)476 ENDIF 477 478 !Config Key = grossismy479 !Config Desc = zoom en latitude480 !Config Def = 1.0481 !Config Help = facteur de grossissement du zoom,482 !Config selon la latitude483 grossismyy = 1.0484 CALL getin('grossismy',grossismyy)485 486 IF( ABS(grossismy - grossismyy)>= 0.001) THEN487 WRITE(lunout, *)'conf_gcm: La valeur de grossismy passee par ', &488 'run.def est differente de celle lue sur le fichier start '489 CALL abort_gcm("conf_gcm", "stopped",1)490 ENDIF491 492 IF( grossismx<1.) THEN493 WRITE(lunout, *) &494 'conf_gcm: *** ATTENTION !! grossismx < 1 . *** '495 CALL abort_gcm("conf_gcm", "stopped",1)496 ELSE497 alphax = 1. - 1. / grossismx498 ENDIF499 500 IF( grossismy<1.) THEN501 WRITE(lunout, *) &502 'conf_gcm: *** ATTENTION !! grossismy < 1 . *** '503 CALL abort_gcm("conf_gcm", "stopped",1)504 ELSE505 alphay = 1. - 1. / grossismy506 ENDIF507 508 WRITE(lunout,*)'conf_gcm: alphax alphay',alphax,alphay509 510 ! alphax et alphay sont les anciennes formulat. des grossissements511 512 !Config Key = fxyhypb513 !Config Desc = Fonction hyperbolique514 !Config Def = y515 !Config Help = Fonction f(y) hyperbolique si = .TRUE.516 !Config sinon sinusoidale517 fxyhypbb = .TRUE.518 CALL getin('fxyhypb',fxyhypbb)519 520 IF( .NOT.fxyhypb) THEN521 IF( fxyhypbb) THEN522 WRITE(lunout,*)' ******** PBS DANS CONF_GCM ******** '523 WRITE(lunout,*)' *** fxyhypb lu sur le fichier start est ', &524 'F alors qu il est T sur run.def ***'525 CALL abort_gcm("conf_gcm","stopped",1)119 itaumax = 0 120 CALL getin('itaumax', itaumax); 121 IF (itaumax<=0) itaumax = HUGE(itaumax) 122 123 !Config Key = prt_level 124 !Config Desc = niveau d'impressions de débogage 125 !Config Def = 0 126 !Config Help = Niveau d'impression pour le débogage 127 !Config (0 = minimum d'impression) 128 prt_level = 0 129 CALL getin('prt_level', prt_level) 130 131 !----------------------------------------------------------------------- 132 ! Parametres de controle du run: 133 !----------------------------------------------------------------------- 134 !Config Key = planet_type 135 !Config Desc = planet type ("earth", "mars", "venus", ...) 136 !Config Def = earth 137 !Config Help = this flag sets the type of atymosphere that is considered 138 planet_type = "earth" 139 CALL getin('planet_type', planet_type) 140 141 !Config Key = calend 142 !Config Desc = type de calendrier utilise 143 !Config Def = earth_360d 144 !Config Help = valeur possible: earth_360d, earth_365d, earth_366d 145 !Config 146 calend = 'earth_360d' 147 ! initialize year_len for aquaplanets and 1D 148 CALL getin('calend', calend) 149 IF (calend == 'earth_360d') THEN 150 year_len = 360 151 ELSE IF (calend == 'earth_365d') THEN 152 year_len = 365 153 ELSE IF (calend == 'earth_366d') THEN 154 year_len = 366 155 ELSE 156 year_len = 1 157 ENDIF 158 159 !Config Key = dayref 160 !Config Desc = Jour de l'etat initial 161 !Config Def = 1 162 !Config Help = Jour de l'etat initial ( = 350 si 20 Decembre , 163 !Config par expl. ,comme ici ) ... A completer 164 dayref = 1 165 CALL getin('dayref', dayref) 166 167 !Config Key = anneeref 168 !Config Desc = Annee de l'etat initial 169 !Config Def = 1998 170 !Config Help = Annee de l'etat initial 171 !Config ( avec 4 chiffres ) ... A completer 172 anneeref = 1998 173 CALL getin('anneeref', anneeref) 174 175 !Config Key = raz_date 176 !Config Desc = Remise a zero de la date initiale 177 !Config Def = 0 (pas de remise a zero) 178 !Config Help = Remise a zero de la date initiale 179 !Config 0 pas de remise a zero, on garde la date du fichier restart 180 !Config 1 prise en compte de la date de gcm.def avec remise a zero 181 !Config des compteurs de pas de temps 182 raz_date = 0 183 CALL getin('raz_date', raz_date) 184 185 !Config Key = resetvarc 186 !Config Desc = Reinit des variables de controle 187 !Config Def = n 188 !Config Help = Reinit des variables de controle 189 resetvarc = .FALSE. 190 CALL getin('resetvarc', resetvarc) 191 192 !Config Key = nday 193 !Config Desc = Nombre de jours d'integration 194 !Config Def = 10 195 !Config Help = Nombre de jours d'integration 196 !Config ... On pourait aussi permettre des mois ou des annees ! 197 nday = 10 198 CALL getin('nday', nday) 199 200 !Config Key = starttime 201 !Config Desc = Heure de depart de la simulation 202 !Config Def = 0 203 !Config Help = Heure de depart de la simulation 204 !Config en jour 205 starttime = 0 206 CALL getin('starttime', starttime) 207 208 !Config Key = day_step 209 !Config Desc = nombre de pas par jour 210 !Config Def = 240 211 !Config Help = nombre de pas par jour (multiple de iperiod) ( 212 !Config ici pour dt = 1 min ) 213 day_step = 240 214 CALL getin('day_step', day_step) 215 216 !Config Key = nsplit_phys 217 nsplit_phys = 1 218 CALL getin('nsplit_phys', nsplit_phys) 219 220 !Config Key = iperiod 221 !Config Desc = periode pour le pas Matsuno 222 !Config Def = 5 223 !Config Help = periode pour le pas Matsuno (en pas de temps) 224 iperiod = 5 225 CALL getin('iperiod', iperiod) 226 227 !Config Key = iapp_tracvl 228 !Config Desc = frequence du groupement des flux 229 !Config Def = iperiod 230 !Config Help = frequence du groupement des flux (en pas de temps) 231 iapp_tracvl = iperiod 232 CALL getin('iapp_tracvl', iapp_tracvl) 233 234 !Config Key = iconser 235 !Config Desc = periode de sortie des variables de controle 236 !Config Def = 240 237 !Config Help = periode de sortie des variables de controle 238 !Config (En pas de temps) 239 iconser = 240 240 CALL getin('iconser', iconser) 241 242 !Config Key = iecri 243 !Config Desc = periode d'ecriture du fichier histoire 244 !Config Def = 1 245 !Config Help = periode d'ecriture du fichier histoire (en jour) 246 iecri = 1 247 CALL getin('iecri', iecri) 248 249 !Config Key = periodav 250 !Config Desc = periode de stockage fichier histmoy 251 !Config Def = 1 252 !Config Help = periode de stockage fichier histmoy (en jour) 253 periodav = 1. 254 CALL getin('periodav', periodav) 255 256 !Config Key = output_grads_dyn 257 !Config Desc = output dynamics diagnostics in 'dyn.dat' file 258 !Config Def = n 259 !Config Help = output dynamics diagnostics in Grads-readable 'dyn.dat' file 260 output_grads_dyn = .FALSE. 261 CALL getin('output_grads_dyn', output_grads_dyn) 262 263 !Config Key = dissip_period 264 !Config Desc = periode de la dissipation 265 !Config Def = 0 266 !Config Help = periode de la dissipation 267 !Config dissip_period=0 => la valeur sera calcule dans inidissip 268 !Config dissip_period>0 => on prend cette valeur 269 dissip_period = 0 270 CALL getin('dissip_period', dissip_period) 271 272 !cc .... P. Le Van , modif le 29/04/97 .pour la dissipation ... 273 !cc 274 275 !Config Key = lstardis 276 !Config Desc = choix de l'operateur de dissipation 277 !Config Def = y 278 !Config Help = choix de l'operateur de dissipation 279 !Config 'y' si on veut star et 'n' si on veut non-start ! 280 !Config Moi y en a pas comprendre ! 281 lstardis = .TRUE. 282 CALL getin('lstardis', lstardis) 283 284 !Config Key = nitergdiv 285 !Config Desc = Nombre d'iteration de gradiv 286 !Config Def = 1 287 !Config Help = nombre d'iterations de l'operateur de dissipation 288 !Config gradiv 289 nitergdiv = 1 290 CALL getin('nitergdiv', nitergdiv) 291 292 !Config Key = nitergrot 293 !Config Desc = nombre d'iterations de nxgradrot 294 !Config Def = 2 295 !Config Help = nombre d'iterations de l'operateur de dissipation 296 !Config nxgradrot 297 nitergrot = 2 298 CALL getin('nitergrot', nitergrot) 299 300 !Config Key = niterh 301 !Config Desc = nombre d'iterations de divgrad 302 !Config Def = 2 303 !Config Help = nombre d'iterations de l'operateur de dissipation 304 !Config divgrad 305 niterh = 2 306 CALL getin('niterh', niterh) 307 308 !Config Key = tetagdiv 309 !Config Desc = temps de dissipation pour div 310 !Config Def = 7200 311 !Config Help = temps de dissipation des plus petites longeur 312 !Config d'ondes pour u,v (gradiv) 313 tetagdiv = 7200. 314 CALL getin('tetagdiv', tetagdiv) 315 316 !Config Key = tetagrot 317 !Config Desc = temps de dissipation pour grad 318 !Config Def = 7200 319 !Config Help = temps de dissipation des plus petites longeur 320 !Config d'ondes pour u,v (nxgradrot) 321 tetagrot = 7200. 322 CALL getin('tetagrot', tetagrot) 323 324 !Config Key = tetatemp 325 !Config Desc = temps de dissipation pour h 326 !Config Def = 7200 327 !Config Help = temps de dissipation des plus petites longeur 328 !Config d'ondes pour h (divgrad) 329 tetatemp = 7200. 330 CALL getin('tetatemp', tetatemp) 331 332 ! Parametres controlant la variation sur la verticale des constantes de 333 ! dissipation. 334 ! Pour le moment actifs uniquement dans la version a 39 niveaux 335 ! avec ok_strato=y 336 337 dissip_factz = 4. 338 dissip_deltaz = 10. 339 dissip_zref = 30. 340 CALL getin('dissip_factz', dissip_factz) 341 CALL getin('dissip_deltaz', dissip_deltaz) 342 CALL getin('dissip_zref', dissip_zref) 343 344 345 !maxlatfilter 346 maxlatfilter = -1.0 347 CALL getin('maxlatfilter', maxlatfilter) 348 IF (maxlatfilter > 90) & 349 CALL abort_gcm("conf_gcm", 'maxlatfilter should be <=90', 1) 350 351 352 ! ngroup 353 ngroup = 3 354 CALL getin('ngroup', ngroup) 355 IF (mod(iim, 2**ngroup) /= 0) & 356 CALL abort_gcm("conf_gcm", 'iim must be multiple of 2**ngroup', 1) 357 IF (2**ngroup > jjm + 1) & 358 CALL abort_gcm("conf_gcm", '2**ngroup must be <= jjm + 1', 1) 359 360 ! mode_top_bound : fields towards which sponge relaxation will be done: 361 ! top_bound sponge: only active if ok_strato=.TRUE. and iflag_top_bound!=0 362 ! iflag_top_bound=0 for no sponge 363 ! iflag_top_bound=1 for sponge over 4 topmost layers 364 ! iflag_top_bound=2 for sponge from top to ~1% of top layer pressure 365 iflag_top_bound = 1 366 CALL getin('iflag_top_bound', iflag_top_bound) 367 IF (iflag_top_bound < 0 .OR. iflag_top_bound > 2) & 368 CALL abort_gcm("conf_gcm", 'iflag_top_bound must be 0, 1 or 2', 1) 369 370 ! mode_top_bound : fields towards which sponge relaxation will be done: 371 ! mode_top_bound=0: no relaxation 372 ! mode_top_bound=1: u and v relax towards 0 373 ! mode_top_bound=2: u and v relax towards their zonal mean 374 ! mode_top_bound=3: u,v and pot. temp. relax towards their zonal mean 375 mode_top_bound = 3 376 CALL getin('mode_top_bound', mode_top_bound) 377 378 ! top_bound sponge : inverse of charactericstic relaxation time scale for sponge 379 tau_top_bound = 1.e-5 380 CALL getin('tau_top_bound', tau_top_bound) 381 382 !Config Key = coefdis 383 !Config Desc = coefficient pour gamdissip 384 !Config Def = 0 385 !Config Help = coefficient pour gamdissip 386 coefdis = 0. 387 CALL getin('coefdis', coefdis) 388 389 !Config Key = purmats 390 !Config Desc = Schema d'integration 391 !Config Def = n 392 !Config Help = Choix du schema d'integration temporel. 393 !Config y = pure Matsuno sinon c'est du Matsuno-leapfrog 394 purmats = .FALSE. 395 CALL getin('purmats', purmats) 396 397 !Config Key = ok_guide 398 !Config Desc = Guidage 399 !Config Def = n 400 !Config Help = Guidage 401 ok_guide = .FALSE. 402 CALL getin('ok_guide', ok_guide) 403 404 IF (ok_guide .AND. adjust) CALL abort_gcm("conf_gcm", & 405 "adjust does not work with ok_guide", 1) 406 407 !Config Key = read_start 408 !Config Desc = Initialize model using a 'start.nc' file 409 !Config Def = y 410 !Config Help = y: intialize dynamical fields using a 'start.nc' file 411 ! n: fields are initialized by 'iniacademic' routine 412 read_start = .TRUE. 413 CALL getin('read_start', read_start) 414 415 !Config Key = iflag_phys 416 !Config Desc = Avec ls physique 417 !Config Def = 1 418 !Config Help = Permet de faire tourner le modele sans 419 !Config physique. 420 iflag_phys = 1 421 CALL getin('iflag_phys', iflag_phys) 422 423 !Config Key = iphysiq 424 !Config Desc = Periode de la physique 425 !Config Def = 5 426 !Config Help = Periode de la physique en pas de temps de la dynamique. 427 iphysiq = 5 428 CALL getin('iphysiq', iphysiq) 429 430 !Config Key = ip_ebil_dyn 431 !Config Desc = PRINT level for energy conserv. diag. 432 !Config Def = 0 433 !Config Help = PRINT level for energy conservation diag. ; 434 ! les options suivantes existent : 435 !Config 0 pas de print 436 !Config 1 pas de print 437 !Config 2 print, 438 ip_ebil_dyn = 0 439 CALL getin('ip_ebil_dyn', ip_ebil_dyn) 440 441 !cc .... P. Le Van , ajout le 7/03/95 .pour le zoom ... 442 ! ......... ( modif le 17/04/96 ) ......... 443 444 test_etatinit: IF (.NOT. etatinit) THEN 445 !Config Key = clon 446 !Config Desc = centre du zoom, longitude 447 !Config Def = 0 448 !Config Help = longitude en degres du centre 449 !Config du zoom 450 clonn = 0. 451 CALL getin('clon', clonn) 452 453 !Config Key = clat 454 !Config Desc = centre du zoom, latitude 455 !Config Def = 0 456 !Config Help = latitude en degres du centre du zoom 457 !Config 458 clatt = 0. 459 CALL getin('clat', clatt) 460 461 IF(ABS(clat - clatt)>= 0.001) THEN 462 WRITE(lunout, *)'conf_gcm: La valeur de clat passee par run.def', & 463 ' est differente de celle lue sur le fichier start ' 464 CALL abort_gcm("conf_gcm", "stopped", 1) 465 ENDIF 466 467 !Config Key = grossismx 468 !Config Desc = zoom en longitude 469 !Config Def = 1.0 470 !Config Help = facteur de grossissement du zoom, 471 !Config selon la longitude 472 grossismxx = 1.0 473 CALL getin('grossismx', grossismxx) 474 475 IF(ABS(grossismx - grossismxx)>= 0.001) THEN 476 WRITE(lunout, *)'conf_gcm: La valeur de grossismx passee par ', & 477 'run.def est differente de celle lue sur le fichier start ' 478 CALL abort_gcm("conf_gcm", "stopped", 1) 479 ENDIF 480 481 !Config Key = grossismy 482 !Config Desc = zoom en latitude 483 !Config Def = 1.0 484 !Config Help = facteur de grossissement du zoom, 485 !Config selon la latitude 486 grossismyy = 1.0 487 CALL getin('grossismy', grossismyy) 488 489 IF(ABS(grossismy - grossismyy)>= 0.001) THEN 490 WRITE(lunout, *)'conf_gcm: La valeur de grossismy passee par ', & 491 'run.def est differente de celle lue sur le fichier start ' 492 CALL abort_gcm("conf_gcm", "stopped", 1) 493 ENDIF 494 495 IF(grossismx<1.) THEN 496 WRITE(lunout, *) & 497 'conf_gcm: *** ATTENTION !! grossismx < 1 . *** ' 498 CALL abort_gcm("conf_gcm", "stopped", 1) 499 ELSE 500 alphax = 1. - 1. / grossismx 501 ENDIF 502 503 IF(grossismy<1.) THEN 504 WRITE(lunout, *) & 505 'conf_gcm: *** ATTENTION !! grossismy < 1 . *** ' 506 CALL abort_gcm("conf_gcm", "stopped", 1) 507 ELSE 508 alphay = 1. - 1. / grossismy 509 ENDIF 510 511 WRITE(lunout, *)'conf_gcm: alphax alphay', alphax, alphay 512 513 ! alphax et alphay sont les anciennes formulat. des grossissements 514 515 !Config Key = fxyhypb 516 !Config Desc = Fonction hyperbolique 517 !Config Def = y 518 !Config Help = Fonction f(y) hyperbolique si = .TRUE. 519 !Config sinon sinusoidale 520 fxyhypbb = .TRUE. 521 CALL getin('fxyhypb', fxyhypbb) 522 523 IF(.NOT.fxyhypb) THEN 524 IF(fxyhypbb) THEN 525 WRITE(lunout, *)' ******** PBS DANS CONF_GCM ******** ' 526 WRITE(lunout, *)' *** fxyhypb lu sur le fichier start est ', & 527 'F alors qu il est T sur run.def ***' 528 CALL abort_gcm("conf_gcm", "stopped", 1) 526 529 ENDIF 527 ELSE528 IF( .NOT.fxyhypbb) THEN529 WRITE(lunout,*)' ******** PBS DANS CONF_GCM ******** '530 WRITE(lunout,*)' *** fxyhypb lu sur le fichier start est ', &531 'T alors qu il est F sur run.def **** '532 CALL abort_gcm("conf_gcm","stopped",1)530 ELSE 531 IF(.NOT.fxyhypbb) THEN 532 WRITE(lunout, *)' ******** PBS DANS CONF_GCM ******** ' 533 WRITE(lunout, *)' *** fxyhypb lu sur le fichier start est ', & 534 'T alors qu il est F sur run.def **** ' 535 CALL abort_gcm("conf_gcm", "stopped", 1) 533 536 ENDIF 534 ENDIF535 536 !Config Key = dzoomx537 !Config Desc = extension en longitude538 !Config Def = 0539 !Config Help = extension en longitude de la zone du zoom540 !Config ( fraction de la zone totale)541 dzoomxx = 0.0542 CALL getin('dzoomx',dzoomxx)543 544 IF( fxyhypb) THEN545 IF( ABS(dzoomx - dzoomxx)>= 0.001) THEN546 WRITE(lunout,*)'conf_gcm: La valeur de dzoomx passee par ', &547 'run.def est differente de celle lue sur le fichier start '548 CALL abort_gcm("conf_gcm","stopped",1)537 ENDIF 538 539 !Config Key = dzoomx 540 !Config Desc = extension en longitude 541 !Config Def = 0 542 !Config Help = extension en longitude de la zone du zoom 543 !Config ( fraction de la zone totale) 544 dzoomxx = 0.0 545 CALL getin('dzoomx', dzoomxx) 546 547 IF(fxyhypb) THEN 548 IF(ABS(dzoomx - dzoomxx)>= 0.001) THEN 549 WRITE(lunout, *)'conf_gcm: La valeur de dzoomx passee par ', & 550 'run.def est differente de celle lue sur le fichier start ' 551 CALL abort_gcm("conf_gcm", "stopped", 1) 549 552 ENDIF 550 ENDIF551 552 !Config Key = dzoomy553 !Config Desc = extension en latitude554 !Config Def = 0555 !Config Help = extension en latitude de la zone du zoom556 !Config ( fraction de la zone totale)557 dzoomyy = 0.0558 CALL getin('dzoomy',dzoomyy)559 560 IF( fxyhypb) THEN561 IF( ABS(dzoomy - dzoomyy)>= 0.001) THEN562 WRITE(lunout,*)'conf_gcm: La valeur de dzoomy passee par ', &563 'run.def est differente de celle lue sur le fichier start '564 CALL abort_gcm("conf_gcm","stopped",1)553 ENDIF 554 555 !Config Key = dzoomy 556 !Config Desc = extension en latitude 557 !Config Def = 0 558 !Config Help = extension en latitude de la zone du zoom 559 !Config ( fraction de la zone totale) 560 dzoomyy = 0.0 561 CALL getin('dzoomy', dzoomyy) 562 563 IF(fxyhypb) THEN 564 IF(ABS(dzoomy - dzoomyy)>= 0.001) THEN 565 WRITE(lunout, *)'conf_gcm: La valeur de dzoomy passee par ', & 566 'run.def est differente de celle lue sur le fichier start ' 567 CALL abort_gcm("conf_gcm", "stopped", 1) 565 568 ENDIF 566 ENDIF567 568 !Config Key = taux569 !Config Desc = raideur du zoom en X570 !Config Def = 3571 !Config Help = raideur du zoom en X572 tauxx = 3.0573 CALL getin('taux',tauxx)574 575 IF( fxyhypb) THEN576 IF( ABS(taux - tauxx)>= 0.001) THEN577 WRITE(lunout,*)'conf_gcm: La valeur de taux passee par ', &578 'run.def est differente de celle lue sur le fichier start '579 CALL abort_gcm("conf_gcm","stopped",1)569 ENDIF 570 571 !Config Key = taux 572 !Config Desc = raideur du zoom en X 573 !Config Def = 3 574 !Config Help = raideur du zoom en X 575 tauxx = 3.0 576 CALL getin('taux', tauxx) 577 578 IF(fxyhypb) THEN 579 IF(ABS(taux - tauxx)>= 0.001) THEN 580 WRITE(lunout, *)'conf_gcm: La valeur de taux passee par ', & 581 'run.def est differente de celle lue sur le fichier start ' 582 CALL abort_gcm("conf_gcm", "stopped", 1) 580 583 ENDIF 581 ENDIF582 583 !Config Key = tauyy584 !Config Desc = raideur du zoom en Y585 !Config Def = 3586 !Config Help = raideur du zoom en Y587 tauyy = 3.0588 CALL getin('tauy',tauyy)589 590 IF( fxyhypb) THEN591 IF( ABS(tauy - tauyy)>= 0.001) THEN592 WRITE(lunout,*)'conf_gcm: La valeur de tauy passee par ', &593 'run.def est differente de celle lue sur le fichier start '594 CALL abort_gcm("conf_gcm","stopped",1)584 ENDIF 585 586 !Config Key = tauyy 587 !Config Desc = raideur du zoom en Y 588 !Config Def = 3 589 !Config Help = raideur du zoom en Y 590 tauyy = 3.0 591 CALL getin('tauy', tauyy) 592 593 IF(fxyhypb) THEN 594 IF(ABS(tauy - tauyy)>= 0.001) THEN 595 WRITE(lunout, *)'conf_gcm: La valeur de tauy passee par ', & 596 'run.def est differente de celle lue sur le fichier start ' 597 CALL abort_gcm("conf_gcm", "stopped", 1) 595 598 ENDIF 596 ENDIF597 598 !c599 IF( .NOT.fxyhypb) THEN599 ENDIF 600 601 !c 602 IF(.NOT.fxyhypb) THEN 600 603 601 604 !Config Key = ysinus … … 606 609 !Config sinon y = latit. 607 610 ysinuss = .TRUE. 608 CALL getin('ysinus', ysinuss)609 610 IF( .NOT.ysinus) THEN611 IF( ysinuss) THEN612 WRITE(lunout,*)' ******** PBS DANS CONF_GCM ******** '613 WRITE(lunout,*)' *** ysinus lu sur le fichier start est F', &614 ' alors qu il est T sur run.def ***'615 CALL abort_gcm("conf_gcm","stopped",1)616 611 CALL getin('ysinus', ysinuss) 612 613 IF(.NOT.ysinus) THEN 614 IF(ysinuss) THEN 615 WRITE(lunout, *)' ******** PBS DANS CONF_GCM ******** ' 616 WRITE(lunout, *)' *** ysinus lu sur le fichier start est F', & 617 ' alors qu il est T sur run.def ***' 618 CALL abort_gcm("conf_gcm", "stopped", 1) 619 ENDIF 617 620 ELSE 618 IF( .NOT.ysinuss) THEN619 WRITE(lunout,*)' ******** PBS DANS CONF_GCM ******** '620 WRITE(lunout,*)' *** ysinus lu sur le fichier start est T', &621 ' alors qu il est F sur run.def **** '622 CALL abort_gcm("conf_gcm","stopped",1)623 621 IF(.NOT.ysinuss) THEN 622 WRITE(lunout, *)' ******** PBS DANS CONF_GCM ******** ' 623 WRITE(lunout, *)' *** ysinus lu sur le fichier start est T', & 624 ' alors qu il est F sur run.def **** ' 625 CALL abort_gcm("conf_gcm", "stopped", 1) 626 ENDIF 624 627 ENDIF 625 ENDIF ! of IF( .NOT.fxyhypb ) 626 627 !Config Key = offline 628 !Config Desc = ecriture des flux de masse 629 !Config Def = n 630 !Config Help = Permet de sortir les flux de masse sur la grille plev 631 offline = .FALSE. 632 CALL getin('offline',offline) 633 634 !Config Key = offline_time 635 !Config Desc = Choix des frequences de stockage pour le offline 636 !Config Def = 8 637 !Config Help = offline_time=12 ! stockage toutes les 2h=1jour/12 638 !Config Help = offline_time=8 ! stockage toutes les 3h=1jour/8 639 offline_time = 8 640 CALL getin('offline_time',offline_time) 641 642 IF (offline .AND. adjust) THEN 643 WRITE(lunout,*) & 644 'WARNING : option offline does not work with adjust=y :' 645 WRITE(lunout,*) 'the files defstoke.nc, fluxstoke.nc ', & 646 'and fluxstokev.nc will not be created' 647 WRITE(lunout,*) & 648 'only the file phystoke.nc will still be created ' 649 ENDIF 650 651 !Config Key = type_trac 652 !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS 653 !Config Def = lmdz 654 !Config Help = 655 !Config 'lmdz' = pas de couplage, pur LMDZ 656 !Config 'inca' = model de chime INCA 657 !Config 'repr' = model de chime REPROBUS 658 type_trac = 'lmdz' 659 CALL getin('type_trac',type_trac) 660 661 662 !Config Key = adv_qsat_liq 663 !Config Desc = option for qsat calculation in the dynamics 664 !Config Def = n 665 !Config Help = controls which phase is considered for qsat calculation 666 !Config 667 adv_qsat_liq = .FALSE. 668 CALL getin('adv_qsat_liq',adv_qsat_liq) 669 670 !Config Key = ok_dynzon 671 !Config Desc = calcul et sortie des transports 672 !Config Def = n 673 !Config Help = Permet de mettre en route le calcul des transports 674 !Config 675 ok_dynzon = .FALSE. 676 CALL getin('ok_dynzon',ok_dynzon) 677 678 !Config Key = ok_dyn_ins 679 !Config Desc = sorties instantanees dans la dynamique 680 !Config Def = n 681 !Config Help = 682 !Config 683 ok_dyn_ins = .FALSE. 684 CALL getin('ok_dyn_ins',ok_dyn_ins) 685 686 !Config Key = ok_dyn_ave 687 !Config Desc = sorties moyennes dans la dynamique 688 !Config Def = n 689 !Config Help = 690 !Config 691 ok_dyn_ave = .FALSE. 692 CALL getin('ok_dyn_ave',ok_dyn_ave) 693 694 !Config Key = ok_dyn_xios 695 !Config Desc = sorties moyennes dans la dynamique 696 !Config Def = n 697 !Config Help = 698 !Config 699 ok_dyn_xios = .FALSE. 700 CALL getin('ok_dyn_xios',ok_dyn_xios) 701 702 WRITE(lunout,*)' #########################################' 703 WRITE(lunout,*)' Configuration des parametres du gcm: ' 704 WRITE(lunout,*)' planet_type = ', planet_type 705 WRITE(lunout,*)' calend = ', calend 706 WRITE(lunout,*)' dayref = ', dayref 707 WRITE(lunout,*)' anneeref = ', anneeref 708 WRITE(lunout,*)' nday = ', nday 709 WRITE(lunout,*)' day_step = ', day_step 710 WRITE(lunout,*)' iperiod = ', iperiod 711 WRITE(lunout,*)' nsplit_phys = ', nsplit_phys 712 WRITE(lunout,*)' iconser = ', iconser 713 WRITE(lunout,*)' iecri = ', iecri 714 WRITE(lunout,*)' periodav = ', periodav 715 WRITE(lunout,*)' output_grads_dyn = ', output_grads_dyn 716 WRITE(lunout,*)' dissip_period = ', dissip_period 717 WRITE(lunout,*)' lstardis = ', lstardis 718 WRITE(lunout,*)' nitergdiv = ', nitergdiv 719 WRITE(lunout,*)' nitergrot = ', nitergrot 720 WRITE(lunout,*)' niterh = ', niterh 721 WRITE(lunout,*)' tetagdiv = ', tetagdiv 722 WRITE(lunout,*)' tetagrot = ', tetagrot 723 WRITE(lunout,*)' tetatemp = ', tetatemp 724 WRITE(lunout,*)' coefdis = ', coefdis 725 WRITE(lunout,*)' purmats = ', purmats 726 WRITE(lunout,*)' read_start = ', read_start 727 WRITE(lunout,*)' iflag_phys = ', iflag_phys 728 WRITE(lunout,*)' iphysiq = ', iphysiq 729 WRITE(lunout,*)' clonn = ', clonn 730 WRITE(lunout,*)' clatt = ', clatt 731 WRITE(lunout,*)' grossismx = ', grossismx 732 WRITE(lunout,*)' grossismy = ', grossismy 733 WRITE(lunout,*)' fxyhypbb = ', fxyhypbb 734 WRITE(lunout,*)' dzoomxx = ', dzoomxx 735 WRITE(lunout,*)' dzoomy = ', dzoomyy 736 WRITE(lunout,*)' tauxx = ', tauxx 737 WRITE(lunout,*)' tauyy = ', tauyy 738 WRITE(lunout,*)' offline = ', offline 739 WRITE(lunout,*)' offline_time = ', offline_time 740 WRITE(lunout,*)' type_trac = ', type_trac 741 WRITE(lunout,*)' ok_dynzon = ', ok_dynzon 742 WRITE(lunout,*)' ok_dyn_ins = ', ok_dyn_ins 743 WRITE(lunout,*)' ok_dyn_ave = ', ok_dyn_ave 744 WRITE(lunout,*)' ok_dyn_xios = ', ok_dyn_xios 745 WRITE(lunout,*)' adv_qsat_liq = ', adv_qsat_liq 746 else 747 !Config Key = clon 748 !Config Desc = centre du zoom, longitude 749 !Config Def = 0 750 !Config Help = longitude en degres du centre 751 !Config du zoom 752 clon = 0. 753 CALL getin('clon',clon) 754 755 !Config Key = clat 756 !Config Desc = centre du zoom, latitude 757 !Config Def = 0 758 !Config Help = latitude en degres du centre du zoom 759 !Config 760 clat = 0. 761 CALL getin('clat',clat) 762 763 !Config Key = grossismx 764 !Config Desc = zoom en longitude 765 !Config Def = 1.0 766 !Config Help = facteur de grossissement du zoom, 767 !Config selon la longitude 768 grossismx = 1.0 769 CALL getin('grossismx',grossismx) 770 771 !Config Key = grossismy 772 !Config Desc = zoom en latitude 773 !Config Def = 1.0 774 !Config Help = facteur de grossissement du zoom, 775 !Config selon la latitude 776 grossismy = 1.0 777 CALL getin('grossismy',grossismy) 778 779 IF( grossismx<1. ) THEN 780 WRITE(lunout,*) 'conf_gcm: ***ATTENTION !! grossismx < 1 . *** ' 781 CALL abort_gcm("conf_gcm","stopped",1) 782 ELSE 783 alphax = 1. - 1./ grossismx 784 ENDIF 785 786 IF( grossismy<1. ) THEN 787 WRITE(lunout,*) 'conf_gcm: ***ATTENTION !! grossismy < 1 . *** ' 788 CALL abort_gcm("conf_gcm","stopped",1) 789 ELSE 790 alphay = 1. - 1./ grossismy 791 ENDIF 792 793 WRITE(lunout,*) 'conf_gcm: alphax alphay ',alphax,alphay 794 795 ! alphax et alphay sont les anciennes formulat. des grossissements 796 797 !Config Key = fxyhypb 798 !Config Desc = Fonction hyperbolique 799 !Config Def = y 800 !Config Help = Fonction f(y) hyperbolique si = .TRUE. 801 !Config sinon sinusoidale 802 fxyhypb = .TRUE. 803 CALL getin('fxyhypb',fxyhypb) 804 805 !Config Key = dzoomx 806 !Config Desc = extension en longitude 807 !Config Def = 0 808 !Config Help = extension en longitude de la zone du zoom 809 !Config ( fraction de la zone totale) 810 dzoomx = 0.2 811 CALL getin('dzoomx',dzoomx) 812 CALL assert(dzoomx < 1, "conf_gcm: dzoomx must be < 1") 813 814 !Config Key = dzoomy 815 !Config Desc = extension en latitude 816 !Config Def = 0 817 !Config Help = extension en latitude de la zone du zoom 818 !Config ( fraction de la zone totale) 819 dzoomy = 0.2 820 CALL getin('dzoomy',dzoomy) 821 CALL assert(dzoomy < 1, "conf_gcm: dzoomy must be < 1") 822 823 !Config Key = taux 824 !Config Desc = raideur du zoom en X 825 !Config Def = 3 826 !Config Help = raideur du zoom en X 827 taux = 3.0 828 CALL getin('taux',taux) 829 830 !Config Key = tauy 831 !Config Desc = raideur du zoom en Y 832 !Config Def = 3 833 !Config Help = raideur du zoom en Y 834 tauy = 3.0 835 CALL getin('tauy',tauy) 836 837 !Config Key = ysinus 838 !Config IF = !fxyhypb 839 !Config Desc = Fonction en Sinus 840 !Config Def = y 841 !Config Help = Fonction f(y) avec y = Sin(latit.) si = .TRUE. 842 !Config sinon y = latit. 843 ysinus = .TRUE. 844 CALL getin('ysinus',ysinus) 845 846 !Config Key = offline 847 !Config Desc = Nouvelle eau liquide 848 !Config Def = n 849 !Config Help = Permet de mettre en route la 850 !Config nouvelle parametrisation de l'eau liquide ! 851 offline = .FALSE. 852 CALL getin('offline',offline) 853 IF (offline .AND. adjust) THEN 854 WRITE(lunout,*) & 855 'WARNING : option offline does not work with adjust=y :' 856 WRITE(lunout,*) 'the files defstoke.nc, fluxstoke.nc ', & 857 'and fluxstokev.nc will not be created' 858 WRITE(lunout,*) & 859 'only the file phystoke.nc will still be created ' 860 ENDIF 861 862 !Config Key = type_trac 863 !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS 864 !Config Def = lmdz 865 !Config Help = 866 !Config 'lmdz' = pas de couplage, pur LMDZ 867 !Config 'inca' = model de chime INCA 868 !Config 'repr' = model de chime REPROBUS 869 type_trac = 'lmdz' 870 CALL getin('type_trac',type_trac) 871 872 !Config Key = ok_dynzon 873 !Config Desc = sortie des transports zonaux dans la dynamique 874 !Config Def = n 875 !Config Help = Permet de mettre en route le calcul des transports 876 !Config 877 ok_dynzon = .FALSE. 878 CALL getin('ok_dynzon',ok_dynzon) 879 880 !Config Key = ok_dyn_ins 881 !Config Desc = sorties instantanees dans la dynamique 882 !Config Def = n 883 !Config Help = 884 !Config 885 ok_dyn_ins = .FALSE. 886 CALL getin('ok_dyn_ins',ok_dyn_ins) 887 888 !Config Key = ok_dyn_ave 889 !Config Desc = sorties moyennes dans la dynamique 890 !Config Def = n 891 !Config Help = 892 !Config 893 ok_dyn_ave = .FALSE. 894 CALL getin('ok_dyn_ave',ok_dyn_ave) 895 896 !Config Key = ok_dyn_xios 897 !Config Desc = sorties moyennes dans la dynamique 898 !Config Def = n 899 !Config Help = 900 !Config 901 ok_dyn_xios = .FALSE. 902 CALL getin('ok_dyn_xios',ok_dyn_xios) 903 904 !Config Key = use_filtre_fft 905 !Config Desc = flag to activate FFTs for the filter 906 !Config Def = false 907 !Config Help = enables to use FFts to do the longitudinal polar 908 !Config filtering around the poles. 909 use_filtre_fft=.FALSE. 910 CALL getin('use_filtre_fft',use_filtre_fft) 911 IF (use_filtre_fft .AND. grossismx /= 1.0) THEN 912 WRITE(lunout,*)'WARNING !!! ' 913 WRITE(lunout,*)"A zoom in longitude is not compatible", & 914 " with the FFT filter ", & 915 "---> FFT filter deactivated" 916 use_filtre_fft=.FALSE. 917 ENDIF 918 use_filtre_fft_loc=use_filtre_fft 919 920 !Config Key = use_mpi_alloc 921 !Config Desc = Utilise un buffer MPI en mémoire globale 922 !Config Def = false 923 !Config Help = permet d'activer l'utilisation d'un buffer MPI 924 !Config en mémoire globale a l'aide de la fonction MPI_ALLOC. 925 !Config Cela peut améliorer la bande passante des transferts MPI 926 !Config d'un facteur 2 927 use_mpi_alloc=.FALSE. 928 CALL getin('use_mpi_alloc',use_mpi_alloc) 929 930 !Config key = ok_strato 931 !Config Desc = activation de la version strato 932 !Config Def = .FALSE. 933 !Config Help = active la version stratosphérique de LMDZ de F. Lott 934 935 ok_strato=.FALSE. 936 CALL getin('ok_strato',ok_strato) 937 938 vert_prof_dissip = merge(1, 0, ok_strato .AND. llm==39) 939 CALL getin('vert_prof_dissip', vert_prof_dissip) 940 CALL assert(vert_prof_dissip == 0 .OR. vert_prof_dissip == 1, & 941 "bad value for vert_prof_dissip") 942 943 !Config Key = ok_gradsfile 944 !Config Desc = activation des sorties grads du guidage 945 !Config Def = n 946 !Config Help = active les sorties grads du guidage 947 948 ok_gradsfile = .FALSE. 949 CALL getin('ok_gradsfile',ok_gradsfile) 950 951 !Config Key = ok_limit 952 !Config Desc = creation des fichiers limit dans create_etat0_limit 953 !Config Def = y 954 !Config Help = production du fichier limit.nc requise 955 956 ok_limit = .TRUE. 957 CALL getin('ok_limit',ok_limit) 958 959 !Config Key = ok_etat0 960 !Config Desc = creation des fichiers etat0 dans create_etat0_limit 961 !Config Def = y 962 !Config Help = production des fichiers start.nc, startphy.nc requise 963 964 ok_etat0 = .TRUE. 965 CALL getin('ok_etat0',ok_etat0) 966 967 !Config Key = read_orop 968 !Config Desc = lecture du fichier de params orographiques sous maille 969 !Config Def = f 970 !Config Help = lecture fichier plutot que grid_noro 971 972 read_orop = .FALSE. 973 CALL getin('read_orop',read_orop) 974 975 WRITE(lunout,*)' #########################################' 976 WRITE(lunout,*)' Configuration des parametres de cel0_limit: ' 977 WRITE(lunout,*)' planet_type = ', planet_type 978 WRITE(lunout,*)' calend = ', calend 979 WRITE(lunout,*)' dayref = ', dayref 980 WRITE(lunout,*)' anneeref = ', anneeref 981 WRITE(lunout,*)' nday = ', nday 982 WRITE(lunout,*)' day_step = ', day_step 983 WRITE(lunout,*)' iperiod = ', iperiod 984 WRITE(lunout,*)' iconser = ', iconser 985 WRITE(lunout,*)' iecri = ', iecri 986 WRITE(lunout,*)' periodav = ', periodav 987 WRITE(lunout,*)' output_grads_dyn = ', output_grads_dyn 988 WRITE(lunout,*)' dissip_period = ', dissip_period 989 WRITE(lunout,*)' lstardis = ', lstardis 990 WRITE(lunout,*)' nitergdiv = ', nitergdiv 991 WRITE(lunout,*)' nitergrot = ', nitergrot 992 WRITE(lunout,*)' niterh = ', niterh 993 WRITE(lunout,*)' tetagdiv = ', tetagdiv 994 WRITE(lunout,*)' tetagrot = ', tetagrot 995 WRITE(lunout,*)' tetatemp = ', tetatemp 996 WRITE(lunout,*)' coefdis = ', coefdis 997 WRITE(lunout,*)' purmats = ', purmats 998 WRITE(lunout,*)' read_start = ', read_start 999 WRITE(lunout,*)' iflag_phys = ', iflag_phys 1000 WRITE(lunout,*)' iphysiq = ', iphysiq 1001 WRITE(lunout,*)' clon = ', clon 1002 WRITE(lunout,*)' clat = ', clat 1003 WRITE(lunout,*)' grossismx = ', grossismx 1004 WRITE(lunout,*)' grossismy = ', grossismy 1005 WRITE(lunout,*)' fxyhypb = ', fxyhypb 1006 WRITE(lunout,*)' dzoomx = ', dzoomx 1007 WRITE(lunout,*)' dzoomy = ', dzoomy 1008 WRITE(lunout,*)' taux = ', taux 1009 WRITE(lunout,*)' tauy = ', tauy 1010 WRITE(lunout,*)' offline = ', offline 1011 WRITE(lunout,*)' type_trac = ', type_trac 1012 WRITE(lunout,*)' ok_dynzon = ', ok_dynzon 1013 WRITE(lunout,*)' ok_dyn_ins = ', ok_dyn_ins 1014 WRITE(lunout,*)' ok_dyn_ave = ', ok_dyn_ave 1015 WRITE(lunout,*)' ok_dyn_xios = ', ok_dyn_xios 1016 WRITE(lunout,*)' use_filtre_fft = ', use_filtre_fft 1017 WRITE(lunout,*)' use_mpi_alloc = ', use_mpi_alloc 1018 WRITE(lunout,*)' ok_strato = ', ok_strato 1019 WRITE(lunout,*)' ok_gradsfile = ', ok_gradsfile 1020 WRITE(lunout,*)' ok_limit = ', ok_limit 1021 WRITE(lunout,*)' ok_etat0 = ', ok_etat0 1022 WRITE(lunout,*)' ok_guide = ', ok_guide 1023 WRITE(lunout,*)' read_orop = ', read_orop 1024 ENDIF test_etatinit 1025 1026 END SUBROUTINE conf_gcm 628 ENDIF ! of IF( .NOT.fxyhypb ) 629 630 !Config Key = offline 631 !Config Desc = ecriture des flux de masse 632 !Config Def = n 633 !Config Help = Permet de sortir les flux de masse sur la grille plev 634 offline = .FALSE. 635 CALL getin('offline', offline) 636 637 !Config Key = offline_time 638 !Config Desc = Choix des frequences de stockage pour le offline 639 !Config Def = 8 640 !Config Help = offline_time=12 ! stockage toutes les 2h=1jour/12 641 !Config Help = offline_time=8 ! stockage toutes les 3h=1jour/8 642 offline_time = 8 643 CALL getin('offline_time', offline_time) 644 645 IF (offline .AND. adjust) THEN 646 WRITE(lunout, *) & 647 'WARNING : option offline does not work with adjust=y :' 648 WRITE(lunout, *) 'the files defstoke.nc, fluxstoke.nc ', & 649 'and fluxstokev.nc will not be created' 650 WRITE(lunout, *) & 651 'only the file phystoke.nc will still be created ' 652 ENDIF 653 654 !Config Key = type_trac 655 !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS 656 !Config Def = lmdz 657 !Config Help = 658 !Config 'lmdz' = pas de couplage, pur LMDZ 659 !Config 'inca' = model de chime INCA 660 !Config 'repr' = model de chime REPROBUS 661 type_trac = 'lmdz' 662 CALL getin('type_trac', type_trac) 663 664 665 !Config Key = adv_qsat_liq 666 !Config Desc = option for qsat calculation in the dynamics 667 !Config Def = n 668 !Config Help = controls which phase is considered for qsat calculation 669 !Config 670 adv_qsat_liq = .FALSE. 671 CALL getin('adv_qsat_liq', adv_qsat_liq) 672 673 !Config Key = ok_dynzon 674 !Config Desc = calcul et sortie des transports 675 !Config Def = n 676 !Config Help = Permet de mettre en route le calcul des transports 677 !Config 678 ok_dynzon = .FALSE. 679 CALL getin('ok_dynzon', ok_dynzon) 680 681 !Config Key = ok_dyn_ins 682 !Config Desc = sorties instantanees dans la dynamique 683 !Config Def = n 684 !Config Help = 685 !Config 686 ok_dyn_ins = .FALSE. 687 CALL getin('ok_dyn_ins', ok_dyn_ins) 688 689 !Config Key = ok_dyn_ave 690 !Config Desc = sorties moyennes dans la dynamique 691 !Config Def = n 692 !Config Help = 693 !Config 694 ok_dyn_ave = .FALSE. 695 CALL getin('ok_dyn_ave', ok_dyn_ave) 696 697 !Config Key = ok_dyn_xios 698 !Config Desc = sorties moyennes dans la dynamique 699 !Config Def = n 700 !Config Help = 701 !Config 702 ok_dyn_xios = .FALSE. 703 CALL getin('ok_dyn_xios', ok_dyn_xios) 704 705 WRITE(lunout, *)' #########################################' 706 WRITE(lunout, *)' Configuration des parametres du gcm: ' 707 WRITE(lunout, *)' planet_type = ', planet_type 708 WRITE(lunout, *)' calend = ', calend 709 WRITE(lunout, *)' dayref = ', dayref 710 WRITE(lunout, *)' anneeref = ', anneeref 711 WRITE(lunout, *)' nday = ', nday 712 WRITE(lunout, *)' day_step = ', day_step 713 WRITE(lunout, *)' iperiod = ', iperiod 714 WRITE(lunout, *)' nsplit_phys = ', nsplit_phys 715 WRITE(lunout, *)' iconser = ', iconser 716 WRITE(lunout, *)' iecri = ', iecri 717 WRITE(lunout, *)' periodav = ', periodav 718 WRITE(lunout, *)' output_grads_dyn = ', output_grads_dyn 719 WRITE(lunout, *)' dissip_period = ', dissip_period 720 WRITE(lunout, *)' lstardis = ', lstardis 721 WRITE(lunout, *)' nitergdiv = ', nitergdiv 722 WRITE(lunout, *)' nitergrot = ', nitergrot 723 WRITE(lunout, *)' niterh = ', niterh 724 WRITE(lunout, *)' tetagdiv = ', tetagdiv 725 WRITE(lunout, *)' tetagrot = ', tetagrot 726 WRITE(lunout, *)' tetatemp = ', tetatemp 727 WRITE(lunout, *)' coefdis = ', coefdis 728 WRITE(lunout, *)' purmats = ', purmats 729 WRITE(lunout, *)' read_start = ', read_start 730 WRITE(lunout, *)' iflag_phys = ', iflag_phys 731 WRITE(lunout, *)' iphysiq = ', iphysiq 732 WRITE(lunout, *)' clonn = ', clonn 733 WRITE(lunout, *)' clatt = ', clatt 734 WRITE(lunout, *)' grossismx = ', grossismx 735 WRITE(lunout, *)' grossismy = ', grossismy 736 WRITE(lunout, *)' fxyhypbb = ', fxyhypbb 737 WRITE(lunout, *)' dzoomxx = ', dzoomxx 738 WRITE(lunout, *)' dzoomy = ', dzoomyy 739 WRITE(lunout, *)' tauxx = ', tauxx 740 WRITE(lunout, *)' tauyy = ', tauyy 741 WRITE(lunout, *)' offline = ', offline 742 WRITE(lunout, *)' offline_time = ', offline_time 743 WRITE(lunout, *)' type_trac = ', type_trac 744 WRITE(lunout, *)' ok_dynzon = ', ok_dynzon 745 WRITE(lunout, *)' ok_dyn_ins = ', ok_dyn_ins 746 WRITE(lunout, *)' ok_dyn_ave = ', ok_dyn_ave 747 WRITE(lunout, *)' ok_dyn_xios = ', ok_dyn_xios 748 WRITE(lunout, *)' adv_qsat_liq = ', adv_qsat_liq 749 else 750 !Config Key = clon 751 !Config Desc = centre du zoom, longitude 752 !Config Def = 0 753 !Config Help = longitude en degres du centre 754 !Config du zoom 755 clon = 0. 756 CALL getin('clon', clon) 757 758 !Config Key = clat 759 !Config Desc = centre du zoom, latitude 760 !Config Def = 0 761 !Config Help = latitude en degres du centre du zoom 762 !Config 763 clat = 0. 764 CALL getin('clat', clat) 765 766 !Config Key = grossismx 767 !Config Desc = zoom en longitude 768 !Config Def = 1.0 769 !Config Help = facteur de grossissement du zoom, 770 !Config selon la longitude 771 grossismx = 1.0 772 CALL getin('grossismx', grossismx) 773 774 !Config Key = grossismy 775 !Config Desc = zoom en latitude 776 !Config Def = 1.0 777 !Config Help = facteur de grossissement du zoom, 778 !Config selon la latitude 779 grossismy = 1.0 780 CALL getin('grossismy', grossismy) 781 782 IF(grossismx<1.) THEN 783 WRITE(lunout, *) 'conf_gcm: ***ATTENTION !! grossismx < 1 . *** ' 784 CALL abort_gcm("conf_gcm", "stopped", 1) 785 ELSE 786 alphax = 1. - 1. / grossismx 787 ENDIF 788 789 IF(grossismy<1.) THEN 790 WRITE(lunout, *) 'conf_gcm: ***ATTENTION !! grossismy < 1 . *** ' 791 CALL abort_gcm("conf_gcm", "stopped", 1) 792 ELSE 793 alphay = 1. - 1. / grossismy 794 ENDIF 795 796 WRITE(lunout, *) 'conf_gcm: alphax alphay ', alphax, alphay 797 798 ! alphax et alphay sont les anciennes formulat. des grossissements 799 800 !Config Key = fxyhypb 801 !Config Desc = Fonction hyperbolique 802 !Config Def = y 803 !Config Help = Fonction f(y) hyperbolique si = .TRUE. 804 !Config sinon sinusoidale 805 fxyhypb = .TRUE. 806 CALL getin('fxyhypb', fxyhypb) 807 808 !Config Key = dzoomx 809 !Config Desc = extension en longitude 810 !Config Def = 0 811 !Config Help = extension en longitude de la zone du zoom 812 !Config ( fraction de la zone totale) 813 dzoomx = 0.2 814 CALL getin('dzoomx', dzoomx) 815 CALL assert(dzoomx < 1, "conf_gcm: dzoomx must be < 1") 816 817 !Config Key = dzoomy 818 !Config Desc = extension en latitude 819 !Config Def = 0 820 !Config Help = extension en latitude de la zone du zoom 821 !Config ( fraction de la zone totale) 822 dzoomy = 0.2 823 CALL getin('dzoomy', dzoomy) 824 CALL assert(dzoomy < 1, "conf_gcm: dzoomy must be < 1") 825 826 !Config Key = taux 827 !Config Desc = raideur du zoom en X 828 !Config Def = 3 829 !Config Help = raideur du zoom en X 830 taux = 3.0 831 CALL getin('taux', taux) 832 833 !Config Key = tauy 834 !Config Desc = raideur du zoom en Y 835 !Config Def = 3 836 !Config Help = raideur du zoom en Y 837 tauy = 3.0 838 CALL getin('tauy', tauy) 839 840 !Config Key = ysinus 841 !Config IF = !fxyhypb 842 !Config Desc = Fonction en Sinus 843 !Config Def = y 844 !Config Help = Fonction f(y) avec y = Sin(latit.) si = .TRUE. 845 !Config sinon y = latit. 846 ysinus = .TRUE. 847 CALL getin('ysinus', ysinus) 848 849 !Config Key = offline 850 !Config Desc = Nouvelle eau liquide 851 !Config Def = n 852 !Config Help = Permet de mettre en route la 853 !Config nouvelle parametrisation de l'eau liquide ! 854 offline = .FALSE. 855 CALL getin('offline', offline) 856 IF (offline .AND. adjust) THEN 857 WRITE(lunout, *) & 858 'WARNING : option offline does not work with adjust=y :' 859 WRITE(lunout, *) 'the files defstoke.nc, fluxstoke.nc ', & 860 'and fluxstokev.nc will not be created' 861 WRITE(lunout, *) & 862 'only the file phystoke.nc will still be created ' 863 ENDIF 864 865 !Config Key = type_trac 866 !Config Desc = Choix de couplage avec model de chimie INCA ou REPROBUS 867 !Config Def = lmdz 868 !Config Help = 869 !Config 'lmdz' = pas de couplage, pur LMDZ 870 !Config 'inca' = model de chime INCA 871 !Config 'repr' = model de chime REPROBUS 872 type_trac = 'lmdz' 873 CALL getin('type_trac', type_trac) 874 875 !Config Key = ok_dynzon 876 !Config Desc = sortie des transports zonaux dans la dynamique 877 !Config Def = n 878 !Config Help = Permet de mettre en route le calcul des transports 879 !Config 880 ok_dynzon = .FALSE. 881 CALL getin('ok_dynzon', ok_dynzon) 882 883 !Config Key = ok_dyn_ins 884 !Config Desc = sorties instantanees dans la dynamique 885 !Config Def = n 886 !Config Help = 887 !Config 888 ok_dyn_ins = .FALSE. 889 CALL getin('ok_dyn_ins', ok_dyn_ins) 890 891 !Config Key = ok_dyn_ave 892 !Config Desc = sorties moyennes dans la dynamique 893 !Config Def = n 894 !Config Help = 895 !Config 896 ok_dyn_ave = .FALSE. 897 CALL getin('ok_dyn_ave', ok_dyn_ave) 898 899 !Config Key = ok_dyn_xios 900 !Config Desc = sorties moyennes dans la dynamique 901 !Config Def = n 902 !Config Help = 903 !Config 904 ok_dyn_xios = .FALSE. 905 CALL getin('ok_dyn_xios', ok_dyn_xios) 906 907 !Config Key = use_filtre_fft 908 !Config Desc = flag to activate FFTs for the filter 909 !Config Def = false 910 !Config Help = enables to use FFts to do the longitudinal polar 911 !Config filtering around the poles. 912 use_filtre_fft = .FALSE. 913 CALL getin('use_filtre_fft', use_filtre_fft) 914 IF (use_filtre_fft .AND. grossismx /= 1.0) THEN 915 WRITE(lunout, *)'WARNING !!! ' 916 WRITE(lunout, *)"A zoom in longitude is not compatible", & 917 " with the FFT filter ", & 918 "---> FFT filter deactivated" 919 use_filtre_fft = .FALSE. 920 ENDIF 921 use_filtre_fft_loc = use_filtre_fft 922 923 !Config Key = use_mpi_alloc 924 !Config Desc = Utilise un buffer MPI en mémoire globale 925 !Config Def = false 926 !Config Help = permet d'activer l'utilisation d'un buffer MPI 927 !Config en mémoire globale a l'aide de la fonction MPI_ALLOC. 928 !Config Cela peut améliorer la bande passante des transferts MPI 929 !Config d'un facteur 2 930 use_mpi_alloc = .FALSE. 931 CALL getin('use_mpi_alloc', use_mpi_alloc) 932 933 !Config key = ok_strato 934 !Config Desc = activation de la version strato 935 !Config Def = .FALSE. 936 !Config Help = active la version stratosphérique de LMDZ de F. Lott 937 938 ok_strato = .FALSE. 939 CALL getin('ok_strato', ok_strato) 940 941 vert_prof_dissip = merge(1, 0, ok_strato .AND. llm==39) 942 CALL getin('vert_prof_dissip', vert_prof_dissip) 943 CALL assert(vert_prof_dissip == 0 .OR. vert_prof_dissip == 1, & 944 "bad value for vert_prof_dissip") 945 946 !Config Key = ok_gradsfile 947 !Config Desc = activation des sorties grads du guidage 948 !Config Def = n 949 !Config Help = active les sorties grads du guidage 950 951 ok_gradsfile = .FALSE. 952 CALL getin('ok_gradsfile', ok_gradsfile) 953 954 !Config Key = ok_limit 955 !Config Desc = creation des fichiers limit dans create_etat0_limit 956 !Config Def = y 957 !Config Help = production du fichier limit.nc requise 958 959 ok_limit = .TRUE. 960 CALL getin('ok_limit', ok_limit) 961 962 !Config Key = ok_etat0 963 !Config Desc = creation des fichiers etat0 dans create_etat0_limit 964 !Config Def = y 965 !Config Help = production des fichiers start.nc, startphy.nc requise 966 967 ok_etat0 = .TRUE. 968 CALL getin('ok_etat0', ok_etat0) 969 970 !Config Key = read_orop 971 !Config Desc = lecture du fichier de params orographiques sous maille 972 !Config Def = f 973 !Config Help = lecture fichier plutot que grid_noro 974 975 read_orop = .FALSE. 976 CALL getin('read_orop', read_orop) 977 978 WRITE(lunout, *)' #########################################' 979 WRITE(lunout, *)' Configuration des parametres de cel0_limit: ' 980 WRITE(lunout, *)' planet_type = ', planet_type 981 WRITE(lunout, *)' calend = ', calend 982 WRITE(lunout, *)' dayref = ', dayref 983 WRITE(lunout, *)' anneeref = ', anneeref 984 WRITE(lunout, *)' nday = ', nday 985 WRITE(lunout, *)' day_step = ', day_step 986 WRITE(lunout, *)' iperiod = ', iperiod 987 WRITE(lunout, *)' iconser = ', iconser 988 WRITE(lunout, *)' iecri = ', iecri 989 WRITE(lunout, *)' periodav = ', periodav 990 WRITE(lunout, *)' output_grads_dyn = ', output_grads_dyn 991 WRITE(lunout, *)' dissip_period = ', dissip_period 992 WRITE(lunout, *)' lstardis = ', lstardis 993 WRITE(lunout, *)' nitergdiv = ', nitergdiv 994 WRITE(lunout, *)' nitergrot = ', nitergrot 995 WRITE(lunout, *)' niterh = ', niterh 996 WRITE(lunout, *)' tetagdiv = ', tetagdiv 997 WRITE(lunout, *)' tetagrot = ', tetagrot 998 WRITE(lunout, *)' tetatemp = ', tetatemp 999 WRITE(lunout, *)' coefdis = ', coefdis 1000 WRITE(lunout, *)' purmats = ', purmats 1001 WRITE(lunout, *)' read_start = ', read_start 1002 WRITE(lunout, *)' iflag_phys = ', iflag_phys 1003 WRITE(lunout, *)' iphysiq = ', iphysiq 1004 WRITE(lunout, *)' clon = ', clon 1005 WRITE(lunout, *)' clat = ', clat 1006 WRITE(lunout, *)' grossismx = ', grossismx 1007 WRITE(lunout, *)' grossismy = ', grossismy 1008 WRITE(lunout, *)' fxyhypb = ', fxyhypb 1009 WRITE(lunout, *)' dzoomx = ', dzoomx 1010 WRITE(lunout, *)' dzoomy = ', dzoomy 1011 WRITE(lunout, *)' taux = ', taux 1012 WRITE(lunout, *)' tauy = ', tauy 1013 WRITE(lunout, *)' offline = ', offline 1014 WRITE(lunout, *)' type_trac = ', type_trac 1015 WRITE(lunout, *)' ok_dynzon = ', ok_dynzon 1016 WRITE(lunout, *)' ok_dyn_ins = ', ok_dyn_ins 1017 WRITE(lunout, *)' ok_dyn_ave = ', ok_dyn_ave 1018 WRITE(lunout, *)' ok_dyn_xios = ', ok_dyn_xios 1019 WRITE(lunout, *)' use_filtre_fft = ', use_filtre_fft 1020 WRITE(lunout, *)' use_mpi_alloc = ', use_mpi_alloc 1021 WRITE(lunout, *)' ok_strato = ', ok_strato 1022 WRITE(lunout, *)' ok_gradsfile = ', ok_gradsfile 1023 WRITE(lunout, *)' ok_limit = ', ok_limit 1024 WRITE(lunout, *)' ok_etat0 = ', ok_etat0 1025 WRITE(lunout, *)' ok_guide = ', ok_guide 1026 WRITE(lunout, *)' read_orop = ', read_orop 1027 ENDIF test_etatinit 1028 1029 END SUBROUTINE conf_gcm 1030 1031 1032 END MODULE lmdz_conf_gcm
Note: See TracChangeset
for help on using the changeset viewer.