Changeset 1140 for LMDZ4/branches/LMDZ4-dev/libf/dyn3d
- Timestamp:
- Mar 30, 2009, 4:46:54 PM (16 years ago)
- Location:
- LMDZ4/branches/LMDZ4-dev/libf/dyn3d
- Files:
-
- 2 added
- 3 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/comdissip.h
r524 r1140 2 2 ! $Header$ 3 3 ! 4 c-----------------------------------------------------------------------5 c INCLUDEdissip.h4 !----------------------------------------------------------------------- 5 ! INCLUDE comdissip.h 6 6 7 COMMON/comdissip/ 8 $ lstardis,niterdis,coefdis,tetavel,tetatemp,gamdissip7 COMMON/comdissip/ & 8 & niterdis,coefdis,tetavel,tetatemp,gamdissip 9 9 10 10 11 LOGICAL lstardis12 11 INTEGER niterdis 13 12 14 13 REAL tetavel,tetatemp,coefdis,gamdissip 15 14 16 c-----------------------------------------------------------------------15 !----------------------------------------------------------------------- -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/conf_gcm.F
r1046 r1140 6 6 SUBROUTINE conf_gcm( tapedef, etatinit, clesphy0 ) 7 7 c 8 #ifdef CPP_IOIPSL 8 9 use IOIPSL 10 #else 11 ! if not using IOIPSL, we still need to use (a local version of) getin 12 use ioipsl_getincom 13 #endif 9 14 IMPLICIT NONE 10 15 c----------------------------------------------------------------------- … … 99 104 c Parametres de controle du run: 100 105 c----------------------------------------------------------------------- 106 !Config Key = planet_type 107 !Config Desc = planet type ("earth", "mars", "venus", ...) 108 !Config Def = earth 109 !Config Help = this flag sets the type of atymosphere that is considered 110 planet_type="earth" 111 CALL getin('planet_type',planet_type) 101 112 102 113 !Config Key = dayref … … 179 190 CALL getin('periodav',periodav) 180 191 192 !Config Key = output_grads_dyn 193 !Config Desc = output dynamics diagnostics in 'dyn.dat' file 194 !Config Def = n 195 !Config Help = output dynamics diagnostics in Grads-readable 'dyn.dat' file 196 output_grads_dyn=.false. 197 CALL getin('output_grads_dyn',output_grads_dyn) 198 181 199 !Config Key = idissip 182 200 !Config Desc = periode de la dissipation … … 274 292 c ............................................................... 275 293 294 !Config Key = read_start 295 !Config Desc = Initialize model using a 'start.nc' file 296 !Config Def = y 297 !Config Help = y: intialize dynamical fields using a 'start.nc' file 298 ! n: fields are initialized by 'iniacademic' routine 299 read_start= .true. 300 CALL getin('read_start',read_start) 301 276 302 !Config Key = iflag_phys 277 303 !Config Desc = Avec ls physique … … 330 356 c 331 357 IF( ABS(clat - clatt).GE. 0.001 ) THEN 332 PRINT *,' La valeur de clat passee par run.def est differente de333 *celle lue sur le fichier start '358 write(lunout,*)'conf_gcm: La valeur de clat passee par run.def', 359 & ' est differente de celle lue sur le fichier start ' 334 360 STOP 335 361 ENDIF … … 345 371 346 372 IF( ABS(grossismx - grossismxx).GE. 0.001 ) THEN 347 PRINT *,' La valeur de grossismx passee par run.def est differente348 *de celle lue sur le fichier start '373 write(lunout,*)'conf_gcm: La valeur de grossismx passee par ', 374 & 'run.def est differente de celle lue sur le fichier start ' 349 375 STOP 350 376 ENDIF … … 359 385 360 386 IF( ABS(grossismy - grossismyy).GE. 0.001 ) THEN 361 PRINT *,' La valeur de grossismy passee par run.def est differen362 *te de celle lue sur le fichier start '387 write(lunout,*)'conf_gcm: La valeur de grossismy passee par ', 388 & 'run.def est differente de celle lue sur le fichier start ' 363 389 STOP 364 390 ENDIF 365 391 366 392 IF( grossismx.LT.1. ) THEN 367 PRINT *,' *** ATTENTION !! grossismx < 1 . *** ' 393 write(lunout,*) 394 & 'conf_gcm: *** ATTENTION !! grossismx < 1 . *** ' 368 395 STOP 369 396 ELSE … … 373 400 374 401 IF( grossismy.LT.1. ) THEN 375 PRINT *,' *** ATTENTION !! grossismy < 1 . *** ' 402 write(lunout,*) 403 & 'conf_gcm: *** ATTENTION !! grossismy < 1 . *** ' 376 404 STOP 377 405 ELSE … … 379 407 ENDIF 380 408 381 PRINT *,' alphax alphay defrun',alphax,alphay409 write(lunout,*)'conf_gcm: alphax alphay',alphax,alphay 382 410 c 383 411 c alphax et alphay sont les anciennes formulat. des grossissements … … 394 422 395 423 IF( .NOT.fxyhypb ) THEN 396 397 PRINT *,' ******** PBS DANS DEFRUN******** '398 PRINT *,' *** fxyhypb lu sur le fichier start est F',399 * ' alors qu il est T sur run.def ***'424 IF( fxyhypbb ) THEN 425 write(lunout,*)' ******** PBS DANS CONF_GCM ******** ' 426 write(lunout,*)' *** fxyhypb lu sur le fichier start est ', 427 * 'F alors qu il est T sur run.def ***' 400 428 STOP 401 429 ENDIF 402 430 ELSE 403 404 PRINT *,' ******** PBS DANS DEFRUN******** '405 PRINT *,' *** fxyhypb lu sur le fichier start est T',406 * ' alors qu il est F sur run.def **** '431 IF( .NOT.fxyhypbb ) THEN 432 write(lunout,*)' ******** PBS DANS CONF_GCM ******** ' 433 write(lunout,*)' *** fxyhypb lu sur le fichier start est ', 434 * 'T alors qu il est F sur run.def **** ' 407 435 STOP 408 436 ENDIF 409 437 ENDIF 410 438 c … … 419 447 IF( fxyhypb ) THEN 420 448 IF( ABS(dzoomx - dzoomxx).GE. 0.001 ) THEN 421 PRINT *,' La valeur de dzoomx passee par run.def est differente422 * de celle lue sur le fichier start '449 write(lunout,*)'conf_gcm: La valeur de dzoomx passee par ', 450 * 'run.def est differente de celle lue sur le fichier start ' 423 451 STOP 424 452 ENDIF … … 435 463 IF( fxyhypb ) THEN 436 464 IF( ABS(dzoomy - dzoomyy).GE. 0.001 ) THEN 437 PRINT *,' La valeur de dzoomy passee par run.def est differente438 * de celle lue sur le fichier start '465 write(lunout,*)'conf_gcm: La valeur de dzoomy passee par ', 466 * 'run.def est differente de celle lue sur le fichier start ' 439 467 STOP 440 468 ENDIF … … 450 478 IF( fxyhypb ) THEN 451 479 IF( ABS(taux - tauxx).GE. 0.001 ) THEN 452 PRINT *,' La valeur de taux passee par run.def est differente453 * de celle lue sur le fichier start '480 write(lunout,*)'conf_gcm: La valeur de taux passee par ', 481 * 'run.def est differente de celle lue sur le fichier start ' 454 482 STOP 455 483 ENDIF … … 465 493 IF( fxyhypb ) THEN 466 494 IF( ABS(tauy - tauyy).GE. 0.001 ) THEN 467 PRINT *,' La valeur de tauy passee par run.def est differente468 * de celle lue sur le fichier start '495 write(lunout,*)'conf_gcm: La valeur de tauy passee par ', 496 * 'run.def est differente de celle lue sur le fichier start ' 469 497 STOP 470 498 ENDIF … … 484 512 485 513 IF( .NOT.ysinus ) THEN 486 IF( ysinuss ) THEN 487 PRINT *,' ******** PBS DANS DEFRUN ******** ' 488 PRINT *,' *** ysinus lu sur le fichier start est F ', 489 * 'alors qu il est T sur run.def ***' 514 IF( ysinuss ) THEN 515 write(lunout,*)' ******** PBS DANS CONF_GCM ******** ' 516 write(lunout,*)' *** ysinus lu sur le fichier start est F', 517 * ' alors qu il est T sur run.def ***' 518 STOP 519 ENDIF 520 ELSE 521 IF( .NOT.ysinuss ) THEN 522 write(lunout,*)' ******** PBS DANS CONF_GCM ******** ' 523 write(lunout,*)' *** ysinus lu sur le fichier start est T', 524 * ' alors qu il est F sur run.def **** ' 490 525 STOP 491 ENDIF 492 ELSE 493 IF( .NOT.ysinuss ) THEN 494 PRINT *,' ******** PBS DANS DEFRUN ******** ' 495 PRINT *,' *** ysinus lu sur le fichier start est T ', 496 * 'alors qu il est F sur run.def **** ' 497 STOP 498 ENDIF 526 ENDIF 499 527 ENDIF 500 ENDIF 528 ENDIF ! of IF( .NOT.fxyhypb ) 501 529 c 502 530 !Config Key = offline … … 521 549 write(lunout,*)' #########################################' 522 550 write(lunout,*)' Configuration des parametres du gcm: ' 551 write(lunout,*)' planet_type = ', planet_type 523 552 write(lunout,*)' dayref = ', dayref 524 553 write(lunout,*)' anneeref = ', anneeref … … 529 558 write(lunout,*)' iecri = ', iecri 530 559 write(lunout,*)' periodav = ', periodav 560 write(lunout,*)' output_grads_dyn = ', output_grads_dyn 531 561 write(lunout,*)' idissip = ', idissip 532 562 write(lunout,*)' lstardis = ', lstardis … … 539 569 write(lunout,*)' coefdis = ', coefdis 540 570 write(lunout,*)' purmats = ', purmats 571 write(lunout,*)' read_start = ', read_start 541 572 write(lunout,*)' iflag_phys = ', iflag_phys 542 573 write(lunout,*)' iphysiq = ', iphysiq … … 590 621 591 622 IF( grossismx.LT.1. ) THEN 592 PRINT *,' *** ATTENTION !! grossismx < 1 . *** ' 623 write(lunout,*) 624 & 'conf_gcm: *** ATTENTION !! grossismx < 1 . *** ' 593 625 STOP 594 626 ELSE … … 598 630 599 631 IF( grossismy.LT.1. ) THEN 600 PRINT *,' *** ATTENTION !! grossismy < 1 . *** ' 632 write(lunout,*) 633 & 'conf_gcm: *** ATTENTION !! grossismy < 1 . *** ' 601 634 STOP 602 635 ELSE … … 604 637 ENDIF 605 638 606 PRINT *,' alphax alphay defrun',alphax,alphay639 write(lunout,*)'conf_gcm: alphax alphay ',alphax,alphay 607 640 c 608 641 c alphax et alphay sont les anciennes formulat. des grossissements … … 693 726 write(lunout,*)' #########################################' 694 727 write(lunout,*)' Configuration des parametres du gcm: ' 728 write(lunout,*)' planet_type = ', planet_type 695 729 write(lunout,*)' dayref = ', dayref 696 730 write(lunout,*)' anneeref = ', anneeref … … 701 735 write(lunout,*)' iecri = ', iecri 702 736 write(lunout,*)' periodav = ', periodav 737 write(lunout,*)' output_grads_dyn = ', output_grads_dyn 703 738 write(lunout,*)' idissip = ', idissip 704 739 write(lunout,*)' lstardis = ', lstardis … … 711 746 write(lunout,*)' coefdis = ', coefdis 712 747 write(lunout,*)' purmats = ', purmats 748 write(lunout,*)' read_start = ', read_start 713 749 write(lunout,*)' iflag_phys = ', iflag_phys 714 750 write(lunout,*)' iphysiq = ', iphysiq 715 write(lunout,*)' clon n = ', clonn716 write(lunout,*)' clat t = ', clatt751 write(lunout,*)' clon = ', clon 752 write(lunout,*)' clat = ', clat 717 753 write(lunout,*)' grossismx = ', grossismx 718 754 write(lunout,*)' grossismy = ', grossismy 719 write(lunout,*)' fxyhypb b = ', fxyhypbb755 write(lunout,*)' fxyhypb = ', fxyhypb 720 756 write(lunout,*)' dzoomx = ', dzoomx 721 757 write(lunout,*)' dzoomy = ', dzoomy -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/control.h
r962 r1140 14 14 & iperiod,iapp_tracvl,iconser,iecri,idissip,iphysiq , & 15 15 & periodav,iecrimoy,dayref,anneeref, & 16 & raz_date,offline,ip_ebil_dyn,config_inca 16 & raz_date,offline,ip_ebil_dyn,config_inca, & 17 & planet_type,output_grads_dyn 17 18 18 19 INTEGER nday,day_step,iperiod,iapp_tracvl,iconser,iecri, & … … 22 23 logical offline 23 24 CHARACTER (len=4) :: config_inca 25 CHARACTER(len=10) :: planet_type ! planet type ('earth','mars',...) 26 LOGICAL :: output_grads_dyn ! output dynamics diagnostics in 27 ! binary grads file 'dyn.dat' (y/n) 24 28 !----------------------------------------------------------------------- -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/diagedyn.F
r524 r1140 58 58 #include "paramet.h" 59 59 #include "comgeom.h" 60 61 #ifdef CPP_PHYS 60 #include "iniprint.h" 61 62 #ifdef CPP_EARTH 62 63 #include "../phylmd/YOMCST.h" 63 64 #include "../phylmd/YOETHF.h" … … 139 140 140 141 141 #ifdef CPP_ PHYS142 #ifdef CPP_EARTH 142 143 c====================================================================== 143 144 C Compute Kinetic enrgy … … 314 315 C 315 316 #else 316 print*,'Pour l instant diagedyn a besoin de la physique'317 write(lunout,*),'diagedyn: Needs Earth physics to function' 317 318 #endif 319 ! #endif of #ifdef CPP_EARTH 318 320 RETURN 319 321 END -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/etat0_netcdf.F
r1114 r1140 5 5 c 6 6 SUBROUTINE etat0_netcdf (interbar, masque) 7 7 #ifdef CPP_EARTH 8 8 USE startvar 9 9 USE ioipsl … … 14 14 USE phys_state_var_mod 15 15 USE filtreg_mod 16 #endif 17 !#endif of #ifdef CPP_EARTH 16 18 ! 17 19 IMPLICIT NONE … … 25 27 ! .KLON=KFDIA-KIDIA+1,KLEV=llm 26 28 ! 29 #ifdef CPP_EARTH 27 30 #include "comgeom2.h" 28 31 #include "comvert.h" … … 31 34 #include "dimsoil.h" 32 35 #include "temps.h" 33 ! 36 #endif 37 !#endif of #ifdef CPP_EARTH 38 ! arguments: 34 39 LOGICAL interbar 40 REAL :: masque(iip1,jjp1) 41 42 #ifdef CPP_EARTH 43 ! local variables: 35 44 REAL :: latfi(klon), lonfi(klon) 36 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1) , masque(iip1,jjp1)45 REAL :: orog(iip1,jjp1), rugo(iip1,jjp1) 37 46 REAL :: psol(iip1, jjp1), phis(iip1, jjp1) 38 47 REAL :: p3d(iip1, jjp1, llm+1) … … 143 152 ! 144 153 preff = 101325. 154 pa = 50000. 145 155 unskap = 1./kappa 146 156 ! … … 168 178 169 179 170 CALL inicons 0()180 CALL iniconst() 171 181 CALL inigeom() 172 182 … … 759 769 DEALLOCATE(q3d) 760 770 771 #endif 772 !#endif of #ifdef CPP_EARTH 761 773 RETURN 762 774 ! -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/gcm.F
r1114 r1140 8 8 #ifdef CPP_IOIPSL 9 9 USE IOIPSL 10 #else 11 ! if not using IOIPSL, we still need to use (a local version of) getin 12 USE ioipsl_getincom 10 13 #endif 11 14 … … 17 20 ! A nettoyer. On ne veut qu'une ou deux routines d'interface 18 21 ! dynamique -> physique pour l'initialisation 19 #ifdef CPP_PHYS 22 ! Ehouarn: for now these only apply to Earth: 23 #ifdef CPP_EARTH 20 24 USE dimphy 21 25 USE comgeomphy … … 158 162 159 163 160 c--------------------------------------------------------------------------161 c Iflag_phys controle l'appel a la physique :162 c -------------------------------------------163 c 0 : pas de physique164 c 1 : Normale (appel a phylmd, phymars ...)165 c 2 : rappel Newtonien pour la temperature + friction au sol166 iflag_phys=1167 168 c--------------------------------------------------------------------------169 c Lecture de l'etat initial :170 c ---------------------------171 c T : on lit start.nc172 c F : le modele s'autoinitialise avec un cas academique (iniacademic)173 read_start=.true.174 #ifdef CPP_IOIPSL175 #else176 read_start=.false.177 #endif178 #ifdef CPP_PHYS179 #else180 read_start=.false.181 #endif182 164 183 165 c----------------------------------------------------------------------- … … 196 178 c --------------------------------------- 197 179 c 198 #ifdef CPP_IOIPSL 180 ! Ehouarn: dump possibility of using defrun 181 !#ifdef CPP_IOIPSL 199 182 CALL conf_gcm( 99, .TRUE. , clesphy0 ) 200 #else201 CALL defrun( 99, .TRUE. , clesphy0 )202 #endif183 !#else 184 ! CALL defrun( 99, .TRUE. , clesphy0 ) 185 !#endif 203 186 204 187 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 206 189 ! A nettoyer. On ne veut qu'une ou deux routines d'interface 207 190 ! dynamique -> physique pour l'initialisation 208 #ifdef CPP_PHYS 191 ! Ehouarn : temporarily (?) keep this only for Earth 192 if (planet_type.eq."earth") then 193 #ifdef CPP_EARTH 209 194 CALL Init_Phys_lmdz(iim,jjp1,llm,1,(jjm-1)*iim+2) 210 195 call InitComgeomphy 211 196 #endif 197 endif 212 198 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 213 199 … … 242 228 c lecture du fichier start.nc 243 229 if (read_start) then 244 #ifdef CPP_IOIPSL 230 ! we still need to run iniacademic to initialize some 231 ! constants & fields, if we run the 'newtonian' case: 232 if (iflag_phys.eq.2) then 233 CALL iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) 234 endif 235 !#ifdef CPP_IOIPSL 236 if (planet_type.eq."earth") then 237 #ifdef CPP_EARTH 238 ! Load an Earth-format start file 245 239 CALL dynetat0("start.nc",vcov,ucov, 246 240 . teta,q,masse,ps,phis, time_0) 241 #endif 242 endif ! of if (planet_type.eq."earth") 247 243 c write(73,*) 'ucov',ucov 248 244 c write(74,*) 'vcov',vcov … … 251 247 c write(77,*) 'q',q 252 248 253 #endif 254 endif 249 endif ! of if (read_start) 255 250 256 251 IF (config_inca /= 'none') THEN … … 264 259 c le cas echeant, creation d un etat initial 265 260 IF (prt_level > 9) WRITE(lunout,*) 266 . 'AVANT iniacademic AVANT AVANT AVANT AVANT'261 . 'GCM: AVANT iniacademic AVANT AVANT AVANT AVANT' 267 262 if (.not.read_start) then 268 263 CALL iniacademic(vcov,ucov,teta,q,masse,ps,phis,time_0) … … 298 293 if (annee_ref .ne. anneeref .or. day_ref .ne. dayref) then 299 294 write(lunout,*) 300 . ' Attention les dates initiales lues dans le fichier'295 . 'GCM: Attention les dates initiales lues dans le fichier' 301 296 write(lunout,*) 302 297 . ' restart ne correspondent pas a celles lues dans ' … … 304 299 if (raz_date .ne. 1) then 305 300 write(lunout,*) 306 . ' On garde les dates du fichier restart'301 . 'GCM: On garde les dates du fichier restart' 307 302 else 308 303 annee_ref = anneeref … … 313 308 time_0 = 0. 314 309 write(lunout,*) 315 . ' On reinitialise a la date lue dans gcm.def'310 . 'GCM: On reinitialise a la date lue dans gcm.def' 316 311 endif 317 312 ELSE … … 350 345 c Initialisation de la physique : 351 346 c ------------------------------- 352 #ifdef CPP_PHYS 353 IF (call_iniphys.and. iflag_phys.eq.1) THEN347 348 IF (call_iniphys.and.(iflag_phys.eq.1)) THEN 354 349 latfi(1)=rlatu(1) 355 350 lonfi(1)=0. … … 370 365 CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,aire,airefi) 371 366 WRITE(lunout,*) 372 . 'WARNING!!! vitesse verticale nulle dans la physique' 367 . 'GCM: WARNING!!! vitesse verticale nulle dans la physique' 368 ! Earth: 369 if (planet_type.eq."earth") then 370 #ifdef CPP_EARTH 373 371 CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys , 374 372 , latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp ) 373 #endif 374 endif ! of if (planet_type.eq."earth") 375 375 call_iniphys=.false. 376 ENDIF 377 #endif376 ENDIF ! of IF (call_iniphys.and.(iflag_phys.eq.1)) 377 !#endif 378 378 379 379 c numero de stockage pour les fichiers de redemarrage: … … 386 386 day_end = day_ini + nday 387 387 WRITE(lunout,300)day_ini,day_end 388 300 FORMAT('1'/,15x,'run du jour',i7,2x,'au jour',i7//) 389 390 if (planet_type.eq."earth") then 391 #ifdef CPP_EARTH 392 CALL dynredem0("restart.nc", day_end, phis) 393 #endif 394 endif 395 396 ecripar = .TRUE. 388 397 389 398 #ifdef CPP_IOIPSL 390 CALL dynredem0("restart.nc", day_end, phis)391 392 ecripar = .TRUE.393 394 399 if ( 1.eq.1) then 395 400 time_step = zdtvr … … 409 414 410 415 #endif 416 ! #endif of #ifdef CPP_IOIPSL 411 417 412 418 c Choix des frequences de stokage pour le offline … … 432 438 . time_0) 433 439 434 435 436 300 FORMAT('1'/,15x,'run du pas',i7,2x,'au pas',i7,2x,437 . 'c''est a dire du jour',i7,3x,'au jour',i7//)438 440 END 439 441 -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/iniacademic.F
r1114 r1140 45 45 #include "temps.h" 46 46 #include "control.h" 47 #include "iniprint.h" 47 48 48 49 c Arguments: … … 57 58 REAL ps(ip1jmp1) ! pression au sol 58 59 REAL masse(ip1jmp1,llm) ! masse d'air 60 REAL phis(ip1jmp1) ! geopotentiel au sol 61 62 c Local: 63 c ------ 64 59 65 REAL p (ip1jmp1,llmp1 ) ! pression aux interfac.des couches 60 66 REAL pks(ip1jmp1) ! exner au sol 61 67 REAL pk(ip1jmp1,llm) ! exner au milieu des couches 62 68 REAL pkf(ip1jmp1,llm) ! exner filt.au milieu des couches 63 REAL phis(ip1jmp1) ! geopotentiel au sol64 69 REAL phi(ip1jmp1,llm) ! geopotentiel 65 66 67 68 69 70 c Local:71 c ------72 73 70 REAL ddsin,tetarappelj,tetarappell,zsig 74 71 real tetajl(jjp1,llm) … … 81 78 82 79 c----------------------------------------------------------------------- 80 ! 1. Initializations for Earth-like case 81 ! -------------------------------------- 82 if (planet_type=="earth") then 83 c 84 time_0=0. 83 85 84 c 85 time_0=0. 86 im = iim 87 jm = jjm 88 day_ini = 0 89 omeg = 4.*asin(1.)/86400. 90 rad = 6371229. 91 g = 9.8 92 daysec = 86400. 93 dtvr = daysec/FLOAT(day_step) 94 zdtvr=dtvr 95 kappa = 0.2857143 96 cpp = 1004.70885 97 preff = 101325. 98 pa = 50000. 99 etot0 = 0. 100 ptot0 = 0. 101 ztot0 = 0. 102 stot0 = 0. 103 ang0 = 0. 86 104 87 im = iim 88 jm = jjm 89 day_ini = 0 90 omeg = 4.*asin(1.)/86400. 91 rad = 6371229. 92 g = 9.8 93 daysec = 86400. 94 dtvr = daysec/FLOAT(day_step) 95 zdtvr=dtvr 96 kappa = 0.2857143 97 cpp = 1004.70885 98 preff = 101325. 99 pa = 50 000. 100 etot0 = 0. 101 ptot0 = 0. 102 ztot0 = 0. 103 stot0 = 0. 104 ang0 = 0. 105 pa = 0. 105 CALL iniconst 106 CALL inigeom 107 CALL inifilr 106 108 107 CALL inicons0 108 CALL inigeom 109 CALL inifilr 110 111 ps=0. 112 phis=0. 109 ps=0. 110 phis=0. 113 111 c--------------------------------------------------------------------- 114 112 115 taurappel=10.*daysec113 taurappel=10.*daysec 116 114 117 115 c--------------------------------------------------------------------- … … 119 117 c -------------------------------------- 120 118 121 DO l=1,llm122 zsig=ap(l)/preff+bp(l)123 if (zsig.gt.0.3) then124 lsup=l125 tetarappell=1./8.*(-log(zsig)-.5)126 DO j=1,jjp1127 ddsin=sin(rlatu(j))-sin(pi/20.)128 tetajl(j,l)=300.*(1+1./18.*(1.-3.*ddsin*ddsin)+tetarappell)129 ENDDO130 else119 DO l=1,llm 120 zsig=ap(l)/preff+bp(l) 121 if (zsig.gt.0.3) then 122 lsup=l 123 tetarappell=1./8.*(-log(zsig)-.5) 124 DO j=1,jjp1 125 ddsin=sin(rlatu(j))-sin(pi/20.) 126 tetajl(j,l)=300.*(1+1./18.*(1.-3.*ddsin*ddsin)+tetarappell) 127 ENDDO 128 else 131 129 c Choix isotherme au-dessus de 300 mbar 132 do j=1,jjp1133 tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa134 enddo135 endif136 ENDDO130 do j=1,jjp1 131 tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa 132 enddo 133 endif ! of if (zsig.gt.0.3) 134 ENDDO ! of DO l=1,llm 137 135 138 do l=1,llm139 do j=1,jjp1140 do i=1,iip1141 ij=(j-1)*iip1+i142 tetarappel(ij,l)=tetajl(j,l)143 enddo144 enddo145 enddo136 do l=1,llm 137 do j=1,jjp1 138 do i=1,iip1 139 ij=(j-1)*iip1+i 140 tetarappel(ij,l)=tetajl(j,l) 141 enddo 142 enddo 143 enddo 146 144 147 c call dump2d(jjp1,llm,tetajl,'TEQ ')145 c call dump2d(jjp1,llm,tetajl,'TEQ ') 148 146 149 ps=1.e5150 phis=0.151 CALL pression ( ip1jmp1, ap, bp, ps, p )152 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )153 CALL massdair(p,masse)147 ps=1.e5 148 phis=0. 149 CALL pression ( ip1jmp1, ap, bp, ps, p ) 150 CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf ) 151 CALL massdair(p,masse) 154 152 155 153 c intialisation du vent et de la temperature 156 teta(:,:)=tetarappel(:,:)157 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi)158 call ugeostr(phi,ucov)159 vcov=0.160 q(:,:,1 )=1.e-10161 q(:,:,2 )=1.e-15162 q(:,:,3:nqtot)=0.154 teta(:,:)=tetarappel(:,:) 155 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 156 call ugeostr(phi,ucov) 157 vcov=0. 158 q(:,:,1 )=1.e-10 159 q(:,:,2 )=1.e-15 160 q(:,:,3:nqtot)=0. 163 161 164 162 165 c perturbation al \351atoire sur la temp\351rature166 idum = -1167 zz = ran1(idum)168 idum = 0169 do l=1,llm170 do ij=iip2,ip1jm171 teta(ij,l)=teta(ij,l)*(1.+0.005*ran1(idum))172 enddo173 enddo163 c perturbation aleatoire sur la temperature 164 idum = -1 165 zz = ran1(idum) 166 idum = 0 167 do l=1,llm 168 do ij=iip2,ip1jm 169 teta(ij,l)=teta(ij,l)*(1.+0.005*ran1(idum)) 170 enddo 171 enddo 174 172 175 do l=1,llm176 do ij=1,ip1jmp1,iip1177 teta(ij+iim,l)=teta(ij,l)178 enddo179 enddo173 do l=1,llm 174 do ij=1,ip1jmp1,iip1 175 teta(ij+iim,l)=teta(ij,l) 176 enddo 177 enddo 180 178 181 179 … … 187 185 188 186 c initialisation d'un traceur sur une colonne 189 j=jjp1*3/4 190 i=iip1/2 191 ij=(j-1)*iip1+i 192 q(ij,:,3)=1. 193 187 j=jjp1*3/4 188 i=iip1/2 189 ij=(j-1)*iip1+i 190 q(ij,:,3)=1. 191 192 else 193 write(lunout,*)"iniacademic: planet types other than earth", 194 & " not implemented (yet)." 195 stop 196 endif ! of if (planet_type=="earth") 194 197 return 195 198 END -
LMDZ4/branches/LMDZ4-dev/libf/dyn3d/leapfrog.F
r1114 r1140 7 7 8 8 cIM : pour sortir les param. du modele dans un fis. netcdf 110106 9 USE IOIPSL 9 #ifdef CPP_IOIPSL 10 use IOIPSL 11 #endif 10 12 USE infotrac 11 13 … … 161 163 162 164 character*80 dynhist_file, dynhistave_file 163 character *20modname165 character(len=20) :: modname 164 166 character*80 abort_message 165 167 … … 217 219 call guide(itau,ucov,vcov,teta,q,masse,ps) 218 220 else 219 IF(prt_level>9)WRITE( *,*)'attention on ne guide pas les',220 . ' 6 dernieres heures'221 IF(prt_level>9)WRITE(lunout,*)'leapfrog: attention on ne ', 222 . 'guide pas les 6 dernieres heures' 221 223 endif 222 224 #endif … … 227 229 c ENDIF 228 230 c 231 232 ! Save fields obtained at previous time step as '...m1' 229 233 CALL SCOPY( ijmllm ,vcov , 1, vcovm1 , 1 ) 230 234 CALL SCOPY( ijp1llm,ucov , 1, ucovm1 , 1 ) … … 242 246 CALL filtreg ( finvmaold ,jjp1, llm, -2,2, .TRUE., 1 ) 243 247 244 call minmax(ijp1llm,q(:,:,3),zqmin,zqmax) 248 ! Ehouarn: what is this for? zqmin & zqmax are not used anyway ... 249 ! call minmax(ijp1llm,q(:,:,3),zqmin,zqmax) 245 250 246 251 2 CONTINUE … … 302 307 303 308 304 ENDIF 305 c 306 ENDIF 309 ENDIF ! of IF (offline) 310 c 311 ENDIF ! of IF( forward. OR . leapf ) 307 312 308 313 … … 350 355 c ----------------------------------------------------- 351 356 352 #ifdef CPP_PHYS353 357 c+jld 354 358 355 359 c Diagnostique de conservation de l'énergie : initialisation 356 IF (ip_ebil_dyn.ge.1 ) THEN360 IF (ip_ebil_dyn.ge.1 ) THEN 357 361 ztit='bil dyn' 358 CALL diagedyn(ztit,2,1,1,dtphys 359 e , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 360 ENDIF 362 ! Ehouarn: be careful, diagedyn is Earth-specific (includes ../phylmd/..)! 363 IF (planet_type.eq."earth") THEN 364 CALL diagedyn(ztit,2,1,1,dtphys 365 & , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 366 ENDIF 367 ENDIF ! of IF (ip_ebil_dyn.ge.1 ) 361 368 c-jld 369 #ifdef CPP_IOIPSL 362 370 cIM : pour sortir les param. du modele dans un fis. netcdf 110106 363 IF (first) THEN364 first=.false.371 IF (first) THEN 372 first=.false. 365 373 #include "ini_paramLMDZ_dyn.h" 366 ENDIF374 ENDIF 367 375 c 368 376 #include "write_paramLMDZ_dyn.h" 369 377 c 370 371 CALL calfis( lafin ,rdayvrai,time , 378 #endif 379 ! #endif of #ifdef CPP_IOIPSL 380 CALL calfis( lafin ,rdayvrai,time , 372 381 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 373 382 $ du,dv,dteta,dq, … … 375 384 $ clesphy0, dufi,dvfi,dtetafi,dqfi,dpfi ) 376 385 377 IF (ok_strato) THEN378 CALL top_bound( vcov,ucov,teta, dufi,dvfi,dtetafi)379 ENDIF386 IF (ok_strato) THEN 387 CALL top_bound( vcov,ucov,teta, dufi,dvfi,dtetafi) 388 ENDIF 380 389 381 390 c ajout des tendances physiques: … … 386 395 c 387 396 c Diagnostique de conservation de l'énergie : difference 388 IF (ip_ebil_dyn.ge.1 ) THEN397 IF (ip_ebil_dyn.ge.1 ) THEN 389 398 ztit='bil phys' 390 CALL diagedyn(ztit,2,1,1,dtphys 391 e , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 392 ENDIF 393 #endif 399 IF (planet_type.eq."earth") THEN 400 CALL diagedyn(ztit,2,1,1,dtphys 401 & , ucov , vcov , ps, p ,pk , teta , q(:,:,1), q(:,:,2)) 402 ENDIF 403 ENDIF ! of IF (ip_ebil_dyn.ge.1 ) 404 394 405 ENDIF ! of IF( apphys ) 395 406 396 IF(iflag_phys.EQ.2) THEN ! "Newtonian physics" case407 IF(iflag_phys.EQ.2) THEN ! "Newtonian" case 397 408 c Calcul academique de la physique = Rappel Newtonien + friction 398 409 c -------------------------------------------------------------- … … 472 483 473 484 474 END IF 485 END IF ! of IF(apdiss) 475 486 476 487 c ajout debug … … 545 556 c IF( MOD(itau,iecri*day_step).EQ.0) THEN 546 557 547 nbetat = nbetatdem 548 CALL geopot ( ip1jmp1, teta , pk , pks, phis , phi ) 549 unat=0. 550 do l=1,llm 551 unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm) 552 vnat(:,l)=vcov(:,l)/cv(:) 553 enddo 554 #ifdef CPP_IOIPSL 555 c CALL writehist(histid,histvid,itau,vcov, 556 c s ucov,teta,phi,q,masse,ps,phis) 557 #else 558 nbetat = nbetatdem 559 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 560 unat=0. 561 do l=1,llm 562 unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm) 563 vnat(:,l)=vcov(:,l)/cv(:) 564 enddo 565 #ifdef CPP_IOIPSL 566 c CALL writehist(histid,histvid,itau,vcov, 567 c & ucov,teta,phi,q,masse,ps,phis) 568 #endif 569 ! For some Grads outputs of fields 570 if (output_grads_dyn) then 558 571 #include "write_grads_dyn.h" 559 #endif 560 561 562 ENDIF 572 endif 573 574 ENDIF ! of IF(MOD(itau,iecri).EQ.0) 563 575 564 576 IF(itau.EQ.itaufin) THEN 565 577 566 578 567 #ifdef CPP_IOIPSL 568 CALL dynredem1("restart.nc",0.0, 569 , vcov,ucov,teta,q,masse,ps) 570 #endif 579 if (planet_type.eq."earth") then 580 #ifdef CPP_EARTH 581 ! Write an Earth-format restart file 582 CALL dynredem1("restart.nc",0.0, 583 & vcov,ucov,teta,q,masse,ps) 584 #endif 585 endif ! of if (planet_type.eq."earth") 571 586 572 587 CLOSE(99) 573 ENDIF 588 ENDIF ! of IF (itau.EQ.itaufin) 574 589 575 590 c----------------------------------------------------------------------- … … 593 608 leapf = .TRUE. 594 609 dt = 2.*dtvr 595 GO TO 2 596 END IF 610 GO TO 2 611 END IF ! of IF (forward) 597 612 ELSE 598 613 … … 602 617 dt = 2.*dtvr 603 618 GO TO 2 604 END IF 605 606 ELSE 619 END IF ! of IF (MOD(itau,iperiod).EQ.0) 620 ! ELSEIF (MOD(itau-1,iperiod).EQ.0) 621 622 ELSE ! of IF (.not.purmats) 607 623 608 624 c ........................................................ … … 627 643 GO TO 2 628 644 629 ELSE 630 631 IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN645 ELSE ! of IF(forward) 646 647 IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) THEN 632 648 IF(itau.EQ.itaufin) THEN 633 649 iav=1 … … 636 652 ENDIF 637 653 #ifdef CPP_IOIPSL 638 CALL writedynav(histaveid, itau,vcov ,654 CALL writedynav(histaveid, itau,vcov , 639 655 , ucov,teta,pk,phi,q,masse,ps,phis) 640 656 call bilan_dyn (2,dtvr*iperiod,dtvr*day_step*periodav, … … 642 658 #endif 643 659 644 ENDIF645 646 660 ENDIF ! of IF(MOD(itau,iperiod).EQ.0 .OR. itau.EQ.itaufin) 661 662 IF(MOD(itau,iecri ).EQ.0) THEN 647 663 c IF(MOD(itau,iecri*day_step).EQ.0) THEN 648 nbetat = nbetatdem 649 CALL geopot ( ip1jmp1, teta , pk , pks, phis , phi ) 650 unat=0. 651 do l=1,llm 652 unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm) 653 vnat(:,l)=vcov(:,l)/cv(:) 654 enddo 655 #ifdef CPP_IOIPSL 656 c CALL writehist( histid, histvid, itau,vcov , 657 c , ucov,teta,phi,q,masse,ps,phis) 658 #else 664 nbetat = nbetatdem 665 CALL geopot(ip1jmp1,teta,pk,pks,phis,phi) 666 unat=0. 667 do l=1,llm 668 unat(iip2:ip1jm,l)=ucov(iip2:ip1jm,l)/cu(iip2:ip1jm) 669 vnat(:,l)=vcov(:,l)/cv(:) 670 enddo 671 #ifdef CPP_IOIPSL 672 c CALL writehist( histid, histvid, itau,vcov , 673 c & ucov,teta,phi,q,masse,ps,phis) 674 #endif 675 ! For some Grads outputs 676 if (output_grads_dyn) then 659 677 #include "write_grads_dyn.h" 660 #endif 661 662 663 ENDIF 664 665 #ifdef CPP_IOIPSL 666 IF(itau.EQ.itaufin) 667 . CALL dynredem1("restart.nc",0.0, 668 . vcov,ucov,teta,q,masse,ps) 669 #endif 670 671 forward = .TRUE. 672 GO TO 1 673 674 ENDIF 675 676 END IF 678 endif 679 680 ENDIF ! of IF(MOD(itau,iecri ).EQ.0) 681 682 IF(itau.EQ.itaufin) THEN 683 if (planet_type.eq."earth") then 684 #ifdef CPP_EARTH 685 CALL dynredem1("restart.nc",0.0, 686 & vcov,ucov,teta,q,masse,ps) 687 #endif 688 endif ! of if (planet_type.eq."earth") 689 ENDIF ! of IF(itau.EQ.itaufin) 690 691 forward = .TRUE. 692 GO TO 1 693 694 ENDIF ! of IF (forward) 695 696 END IF ! of IF(.not.purmats) 677 697 678 698 STOP
Note: See TracChangeset
for help on using the changeset viewer.