Changeset 1216 for trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F
- Timestamp:
- Apr 3, 2014, 9:09:47 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F
r1006 r1216 1 1 PROGRAM gcm 2 2 3 use infotrac, only: iniadvtrac, nqtot, iadv 3 4 use sponge_mod,only: callsponge,mode_sponge,sponge 5 use control_mod, only: nday, day_step, iperiod, iphysiq, 6 & iconser, ecritphy, idissip 7 use comgeomphy, only: initcomgeomphy 4 8 IMPLICIT NONE 5 9 … … 42 46 #include "logic.h" 43 47 #include "temps.h" 44 #include "control.h"48 !#include "control.h" 45 49 #include "ener.h" 46 50 #include "netcdf.inc" 47 51 #include "serre.h" 48 52 #include "tracstoke.h" 49 #include"advtrac.h"53 !#include"advtrac.h" 50 54 51 55 INTEGER*4 iday ! jour julien … … 56 60 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants 57 61 real, dimension(ip1jmp1,llm) :: teta ! temperature potentielle 58 REAL q(ip1jmp1,llm,nqmx)! champs advectes62 REAL,allocatable :: q(:,:,:) ! champs advectes 59 63 REAL ps(ip1jmp1) ! pression au sol 60 64 REAL pext(ip1jmp1) ! pression extensive … … 79 83 c tendances dynamiques 80 84 REAL dv(ip1jm,llm),du(ip1jmp1,llm) 81 REAL dteta(ip1jmp1,llm),dq(ip1jmp1,llm,nqmx),dp(ip1jmp1) 85 REAL dteta(ip1jmp1,llm),dp(ip1jmp1) 86 REAL,ALLOCATABLE :: dq(:,:,:) 82 87 83 88 c tendances de la dissipation … … 87 92 c tendances physiques 88 93 REAL dvfi(ip1jm,llm),dufi(ip1jmp1,llm) 89 REAL dhfi(ip1jmp1,llm),dqfi(ip1jmp1,llm,nqmx),dpfi(ip1jmp1) 94 REAL dhfi(ip1jmp1,llm),dpfi(ip1jmp1) 95 REAL,ALLOCATABLE :: dqfi(:,:,:) 90 96 91 97 c variables pour le fichier histoire … … 123 129 LOGICAL tracer 124 130 data tracer/.true./ 125 INTEGER nq131 ! INTEGER nq 126 132 127 133 C Calendrier … … 150 156 REAL vnat(ip1jm,llm),unat(ip1jmp1,llm) 151 157 158 c----------------------------------------------------------------------- 159 c variables pour l'initialisation de la physique : 160 c ------------------------------------------------ 161 INTEGER ngridmx 162 PARAMETER( ngridmx = 2+(jjm-1)*iim - 1/jjm ) 163 REAL zcufi(ngridmx),zcvfi(ngridmx) 164 REAL latfi(ngridmx),lonfi(ngridmx) 165 REAL airefi(ngridmx) 166 SAVE latfi, lonfi, airefi 167 INTEGER i,j 152 168 153 169 c----------------------------------------------------------------------- … … 159 175 160 176 c----------------------------------------------------------------------- 161 c Initialize tracers using iniadvtrac (Ehouarn, oct 2008) 162 CALL iniadvtrac(nq,numvanle) 163 164 165 CALL dynetat0("start.nc",nqmx,vcov,ucov, 177 CALL defrun_new( 99, .TRUE. ) 178 179 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 180 ! FH 2008/05/02 181 ! A nettoyer. On ne veut qu'une ou deux routines d'interface 182 ! dynamique -> physique pour l'initialisation 183 !#ifdef CPP_PHYS 184 CALL init_phys_lmdz(iim,jjp1,llm,1,(/(jjm-1)*iim+2/)) 185 call initcomgeomphy 186 !#endif 187 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 188 189 ! Initialize tracers 190 CALL iniadvtrac(nqtot,numvanle) 191 ! Allocation de la tableau q : champs advectes 192 allocate(q(ip1jmp1,llm,nqtot)) 193 allocate(dq(ip1jmp1,llm,nqtot)) 194 allocate(dqfi(ip1jmp1,llm,nqtot)) 195 196 CALL dynetat0("start.nc",nqtot,vcov,ucov, 166 197 . teta,q,masse,ps,phis, time_0) 167 168 CALL defrun_new( 99, .TRUE. )169 198 170 199 c on recalcule eventuellement le pas de temps … … 196 225 * tetagdiv, tetagrot , tetatemp ) 197 226 c 227 228 c----------------------------------------------------------------------- 229 c Initialisation de la physique : 230 c ------------------------------- 231 232 ! IF (call_iniphys.and.(iflag_phys==1.or.iflag_phys>=100)) THEN 233 latfi(1)=rlatu(1) 234 lonfi(1)=0. 235 zcufi(1) = cu(1) 236 zcvfi(1) = cv(1) 237 DO j=2,jjm 238 DO i=1,iim 239 latfi((j-2)*iim+1+i)= rlatu(j) 240 lonfi((j-2)*iim+1+i)= rlonv(i) 241 zcufi((j-2)*iim+1+i) = cu((j-1)*iip1+i) 242 zcvfi((j-2)*iim+1+i) = cv((j-1)*iip1+i) 243 ENDDO 244 ENDDO 245 latfi(ngridmx)= rlatu(jjp1) 246 lonfi(ngridmx)= 0. 247 zcufi(ngridmx) = cu(ip1jm+1) 248 zcvfi(ngridmx) = cv(ip1jm-iim) 249 250 ! build airefi(), mesh area on physics grid 251 CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,aire,airefi) 252 ! Poles are single points on physics grid 253 airefi(1)=airefi(1)*iim 254 airefi(ngridmx)=airefi(ngridmx)*iim 255 256 ! Initialisation de la physique: pose probleme quand on tourne 257 ! SANS physique, car iniphysiq.F est dans le repertoire phy[]... 258 ! Il faut une cle CPP_PHYS 259 !#ifdef CPP_PHYS 260 ! CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys/nsplit_phys, 261 CALL iniphysiq(ngridmx,llm,daysec,day_ini,dtphys, 262 & latfi,lonfi,airefi,zcufi,zcvfi,rad,g,r,cpp, 263 & 1) 264 ! & iflag_phys) 265 !#endif 266 ! call_iniphys=.false. 267 ! ENDIF ! of IF (call_iniphys.and.(iflag_phys.eq.1)) 198 268 199 269 CALL pression ( ip1jmp1, ap, bp, ps, p ) … … 229 299 . 'c''est a dire du jour',i7,3x,'au jour',i7//) 230 300 231 CALL dynredem0("restart.nc",day_end,anne_ini,phis,nq mx)301 CALL dynredem0("restart.nc",day_end,anne_ini,phis,nqtot) 232 302 233 303 ecripar = .TRUE. … … 237 307 238 308 c Quelques initialisations pour les traceurs 239 call initial0(ijp1llm*nq mx,dq)309 call initial0(ijp1llm*nqtot,dq) 240 310 c istdyn=day_step/4 ! stockage toutes les 6h=1jour/4 241 311 c istphy=istdyn/iphysiq … … 328 398 IF( forward. OR . leapf ) THEN 329 399 330 DO iq = 1, nq mx400 DO iq = 1, nqtot 331 401 c 332 402 IF ( iadv(iq).EQ.1.OR.iadv(iq).EQ.2 ) THEN 333 403 CALL traceur( iq,iadv,q,teta,pk,w, pbaru, pbarv, dq ) 334 404 335 ELSE IF( iq.EQ. nq mx) THEN405 ELSE IF( iq.EQ. nqtot ) THEN 336 406 c 337 407 iapp_tracvl = 5 … … 341 411 c 342 412 343 CALL vanleer(numvanle,iapp_tracvl,nq mx,q,pbaru,pbarv,413 CALL vanleer(numvanle,iapp_tracvl,nqtot,q,pbaru,pbarv, 344 414 * p, masse, dq, iadv(1), teta, pk ) 345 415 … … 413 483 414 484 415 CALL calfis( nq mx, lafin ,rdayvrai,rday_ecri,time ,485 CALL calfis( nqtot, lafin ,rdayvrai,rday_ecri,time , 416 486 $ ucov,vcov,teta,q,masse,ps,p,pk,phis,phi , 417 487 $ du,dv,dteta,dq,w, dufi,dvfi,dhfi,dqfi,dpfi,tracer) … … 421 491 c ------------------------------ 422 492 ! if(1.eq.2)then 423 CALL addfi( nq mx, dtphys, leapf, forward ,493 CALL addfi( nqtot, dtphys, leapf, forward , 424 494 $ ucov, vcov, teta , q ,ps , masse, 425 495 $ dufi, dvfi, dhfi , dqfi ,dpfi ) … … 556 626 c iav=0 557 627 c ENDIF 558 c CALL writedynav(histaveid, nq mx, itau,vcov ,628 c CALL writedynav(histaveid, nqtot, itau,vcov , 559 629 c , ucov,teta,pk,phi,q,masse,ps,phis) 560 630 c ENDIF … … 569 639 CALL test_period ( ucov,vcov,teta,q,p,phis ) 570 640 CALL dynredem1("restart.nc",0.0, 571 . vcov,ucov,teta,q,nq mx,masse,ps)641 . vcov,ucov,teta,q,nqtot,masse,ps) 572 642 573 643 CLOSE(99) … … 636 706 iav=0 637 707 ENDIF 638 c CALL writedynav(histaveid, nq mx, itau,vcov ,708 c CALL writedynav(histaveid, nqtot, itau,vcov , 639 709 c , ucov,teta,pk,phi,q,masse,ps,phis) 640 710 … … 644 714 IF(itau.EQ.itaufin) 645 715 . CALL dynredem1("restart.nc",0.0, 646 . vcov,ucov,teta,q,nq mx,masse,ps)716 . vcov,ucov,teta,q,nqtot,masse,ps) 647 717 648 718 forward = .TRUE.
Note: See TracChangeset
for help on using the changeset viewer.