Changeset 1416
- Timestamp:
- Apr 16, 2015, 10:23:36 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/dyn3d/control_mod.F90
r1216 r1416 13 13 real,save :: periodav 14 14 integer,save :: ecritphy ! output data in "diagfi.nc" every ecritphy dynamical steps 15 character(len=10),save :: planet_type ! planet type ('earth','mars',...) 16 character(len=4),save :: config_inca 15 17 16 18 end module control_mod -
trunk/LMDZ.GENERIC/libf/dyn3d/dynetat0.F
r1216 r1416 1 SUBROUTINE dynetat0(fichnom, nq,vcov,ucov,1 SUBROUTINE dynetat0(fichnom,vcov,ucov, 2 2 . teta,q,masse,ps,phis,time) 3 3 use infotrac, only: tname, nqtot … … 37 37 38 38 CHARACTER*(*) fichnom 39 INTEGER nq40 39 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm),teta(ip1jmp1,llm) 41 REAL q(iip1,jjp1,llm,nq ),masse(ip1jmp1,llm)40 REAL q(iip1,jjp1,llm,nqtot),masse(ip1jmp1,llm) 42 41 REAL ps(ip1jmp1),phis(ip1jmp1) 43 42 … … 318 317 319 318 320 IF(nq .GE.1) THEN319 IF(nqtot.GE.1) THEN 321 320 write(*,*) 'dynetat0: loading tracers' 322 IF(nq .GT.99) THEN321 IF(nqtot.GT.99) THEN 323 322 PRINT*, "Trop de traceurs" 324 323 CALL abort 325 324 ENDIF 326 nqold=nq 327 DO iq=1,nq 325 nqold=nqtot 326 DO iq=1,nqtot 328 327 ! str3(1:1)='q' 329 328 ! WRITE(str3(2:3),'(i2.2)') iq … … 352 351 ENDIF 353 352 ENDDO 354 if ((nqold.lt.nq ).and.(nqold.ge.1)) then353 if ((nqold.lt.nqtot).and.(nqold.ge.1)) then 355 354 c case when new tracer are added in addition to old ones 356 355 write(*,*)'tracers 1 to ', nqold,'were already present' … … 379 378 ! end do 380 379 ! end if 381 end if ! of if ((nqold.lt.nq ).and.(nqold.ge.1))382 ENDIF ! of IF(nq .GE.1)380 end if ! of if ((nqold.lt.nqtot).and.(nqold.ge.1)) 381 ENDIF ! of IF(nqtot.GE.1) 383 382 384 383 ierr = NF_INQ_VARID (nid, "masse", nvarid) -
trunk/LMDZ.GENERIC/libf/dyn3d/dynredem.F
r1216 r1416 1 SUBROUTINE dynredem0(fichnom,idayref, anneeref,phis,nq)2 use infotrac, only: tname 1 SUBROUTINE dynredem0(fichnom,idayref,phis) 2 use infotrac, only: tname,nqtot 3 3 IMPLICIT NONE 4 4 c======================================================================= … … 20 20 c Arguments: 21 21 c ---------- 22 INTEGER*4 idayref ,anneeref22 INTEGER*4 idayref 23 23 REAL phis(ip1jmp1) 24 24 CHARACTER*(*) fichnom 25 INTEGER nq26 25 27 26 c Local: … … 888 887 dims4(3) = idim_llm 889 888 dims4(4) = idim_tim 890 IF(nq .GE.1) THEN891 DO iq=1,nq 889 IF(nqtot.GE.1) THEN 890 DO iq=1,nqtot 892 891 IF (iq.GT.99) THEN 893 892 PRINT*, "Trop de traceurs" … … 954 953 955 954 SUBROUTINE dynredem1(fichnom,time, 956 . vcov,ucov,teta,q, nq,masse,ps)955 . vcov,ucov,teta,q,masse,ps) 957 956 use infotrac, only: nqtot, tname 958 957 IMPLICIT NONE … … 967 966 !#include"advtrac.h" 968 967 969 INTEGER nq,l968 INTEGER l 970 969 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 971 970 REAL teta(ip1jmp1,llm) … … 1045 1044 #endif 1046 1045 1047 IF (nq .GT.99) THEN1046 IF (nqtot.GT.99) THEN 1048 1047 PRINT*, "Trop de traceurs" 1049 1048 CALL abort 1050 1049 ENDIF 1051 IF(nq .GE.1) THEN1052 DO iq=1,nq 1050 IF(nqtot.GE.1) THEN 1051 DO iq=1,nqtot 1053 1052 ! str3(1:1)='q' 1054 1053 ! WRITE(str3(2:3),'(i2.2)') iq -
trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F
r1403 r1416 195 195 allocate(dqfi(ip1jmp1,llm,nqtot)) 196 196 197 CALL dynetat0("start.nc", nqtot,vcov,ucov,197 CALL dynetat0("start.nc",vcov,ucov, 198 198 . teta,q,masse,ps,phis, time_0) 199 199 … … 300 300 . 'c''est a dire du jour',i7,3x,'au jour',i7//) 301 301 302 CALL dynredem0("restart.nc",day_end, anne_ini,phis,nqtot)302 CALL dynredem0("restart.nc",day_end,phis) 303 303 304 304 ecripar = .TRUE. … … 640 640 CALL test_period ( ucov,vcov,teta,q,p,phis ) 641 641 CALL dynredem1("restart.nc",0.0, 642 . vcov,ucov,teta,q, nqtot,masse,ps)642 . vcov,ucov,teta,q,masse,ps) 643 643 644 644 CLOSE(99) -
trunk/LMDZ.GENERIC/libf/dyn3d/infotrac.F90
r1227 r1416 4 4 ! nqtot : total number of tracers and higher order of moment, water vapor and liquid included 5 5 INTEGER, SAVE :: nqtot 6 INTEGER,allocatable :: iadv(:) ! tracer advection scheme number 7 CHARACTER(len=20),allocatable :: tname(:) ! tracer name 8 6 ! CR: add number of tracers for water (for Earth model only!!) 7 INTEGER, SAVE :: nqo 8 9 ! nbtr : number of tracers not including higher order of moment or water vapor or liquid 10 ! number of tracers used in the physics 11 INTEGER, SAVE :: nbtr 12 13 ! Name variables 14 CHARACTER(len=20), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics 15 CHARACTER(len=23), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics 16 17 ! iadv : index of trasport schema for each tracer 18 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: iadv 19 20 ! niadv : vector keeping the coorspondance between all tracers(nqtot) treated in the 21 ! dynamic part of the code and the tracers (nbtr+2) used in the physics part of the code. 22 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: niadv ! equivalent dyn / physique 23 24 ! conv_flg(it)=0 : convection desactivated for tracer number it 25 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: conv_flg 26 ! pbl_flg(it)=0 : boundary layer diffusion desactivaded for tracer number it 27 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: pbl_flg 28 29 CHARACTER(len=4),SAVE :: type_trac 30 CHARACTER(len=8),DIMENSION(:),ALLOCATABLE, SAVE :: solsym 31 9 32 CONTAINS 10 33 34 SUBROUTINE infotrac_init 35 USE control_mod 36 #ifdef REPROBUS 37 USE CHEM_REP, ONLY : Init_chem_rep_trac 38 #endif 39 IMPLICIT NONE 40 !======================================================================= 41 ! 42 ! Auteur: P. Le Van /L. Fairhead/F.Hourdin 43 ! ------- 44 ! Modif special traceur F.Forget 05/94 45 ! Modif M-A Filiberti 02/02 lecture de traceur.def 46 ! 47 ! Objet: 48 ! ------ 49 ! GCM LMD nouvelle grille 50 ! 51 !======================================================================= 52 ! ... modification de l'integration de q ( 26/04/94 ) .... 53 !----------------------------------------------------------------------- 54 ! Declarations 55 56 INCLUDE "dimensions.h" 57 INCLUDE "iniprint.h" 58 59 ! Local variables 60 INTEGER, ALLOCATABLE, DIMENSION(:) :: hadv ! index of horizontal trasport schema 61 INTEGER, ALLOCATABLE, DIMENSION(:) :: vadv ! index of vertical trasport schema 62 63 CHARACTER(len=15), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name 64 CHARACTER(len=3), DIMENSION(30) :: descrq 65 CHARACTER(len=1), DIMENSION(3) :: txts 66 CHARACTER(len=2), DIMENSION(9) :: txtp 67 CHARACTER(len=23) :: str1,str2 68 69 INTEGER :: nqtrue ! number of tracers read from tracer.def, without higer order of moment 70 INTEGER :: iq, new_iq, iiq, jq, ierr, ierr2, ierr3 71 72 character(len=80) :: line ! to store a line of text 73 74 character(len=*),parameter :: modname="infotrac_init" 75 !----------------------------------------------------------------------- 76 ! Initialization : 77 ! 78 txts=(/'x','y','z'/) 79 txtp=(/'x ','y ','z ','xx','xy','xz','yy','yz','zz'/) 80 81 descrq(14)='VLH' 82 descrq(10)='VL1' 83 descrq(11)='VLP' 84 descrq(12)='FH1' 85 descrq(13)='FH2' 86 descrq(16)='PPM' 87 descrq(17)='PPS' 88 descrq(18)='PPP' 89 descrq(20)='SLP' 90 descrq(30)='PRA' 91 92 IF (planet_type=='earth') THEN 93 ! Coherence test between parameter type_trac, config_inca and preprocessing keys 94 IF (type_trac=='inca') THEN 95 WRITE(lunout,*) 'You have choosen to couple with INCA chemestry model : type_trac=', & 96 type_trac,' config_inca=',config_inca 97 IF (config_inca/='aero' .AND. config_inca/='aeNP' .AND. config_inca/='chem') THEN 98 WRITE(lunout,*) 'Incoherence between type_trac and config_inca. Model stops. Modify run.def' 99 CALL abort_gcm('infotrac_init','Incoherence between type_trac and config_inca',1) 100 END IF 101 #ifndef INCA 102 WRITE(lunout,*) 'To run this option you must add cpp key INCA and compile with INCA code' 103 CALL abort_gcm('infotrac_init','You must compile with cpp key INCA',1) 104 #endif 105 ELSE IF (type_trac=='repr') THEN 106 WRITE(lunout,*) 'You have choosen to couple with REPROBUS chemestry model : type_trac=', type_trac 107 #ifndef REPROBUS 108 WRITE(lunout,*) 'To run this option you must add cpp key REPROBUS and compile with REPRPBUS code' 109 CALL abort_gcm('infotrac_init','You must compile with cpp key REPROBUS',1) 110 #endif 111 ELSE IF (type_trac == 'lmdz') THEN 112 WRITE(lunout,*) 'Tracers are treated in LMDZ only : type_trac=', type_trac 113 ELSE 114 WRITE(lunout,*) 'type_trac=',type_trac,' not possible. Model stops' 115 CALL abort_gcm('infotrac_init','bad parameter',1) 116 END IF 117 118 ! Test if config_inca is other then none for run without INCA 119 IF (type_trac/='inca' .AND. config_inca/='none') THEN 120 WRITE(lunout,*) 'config_inca will now be changed to none as you do not couple with INCA model' 121 config_inca='none' 122 END IF 123 ELSE 124 type_trac='plnt' ! planets... May want to dissociate between each later. 125 ENDIF ! of IF (planet_type=='earth') 126 127 !----------------------------------------------------------------------- 128 ! 129 ! 1) Get the true number of tracers + water vapor/liquid 130 ! Here true tracers (nqtrue) means declared tracers (only first order) 131 ! 132 !----------------------------------------------------------------------- 133 IF (planet_type=='earth') THEN 134 IF (type_trac == 'lmdz' .OR. type_trac == 'repr') THEN 135 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 136 IF(ierr.EQ.0) THEN 137 WRITE(lunout,*) trim(modname),': Open traceur.def : ok' 138 READ(90,*) nqtrue 139 ELSE 140 WRITE(lunout,*) trim(modname),': Problem in opening traceur.def' 141 WRITE(lunout,*) trim(modname),': WARNING using defaut values' 142 nqtrue=4 ! Defaut value 143 END IF 144 ! For Earth, water vapour & liquid tracers are not in the physics 145 nbtr=nqtrue-2 146 ELSE ! type_trac=inca 147 ! nbtr has been read from INCA by init_cont_lmdz() in gcm.F 148 nqtrue=nbtr+2 149 END IF 150 151 IF (nqtrue < 2) THEN 152 WRITE(lunout,*) trim(modname),': nqtrue=',nqtrue, ' is not allowded. 2 tracers is the minimum' 153 CALL abort_gcm('infotrac_init','Not enough tracers',1) 154 END IF 155 156 ! Transfert number of tracers to Reprobus 157 IF (type_trac == 'repr') THEN 158 #ifdef REPROBUS 159 CALL Init_chem_rep_trac(nbtr) 160 #endif 161 END IF 162 163 ELSE ! not Earth 164 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 165 IF(ierr.EQ.0) THEN 166 WRITE(lunout,*) 'Open traceur.def : ok' 167 READ(90,*) nqtrue 168 ELSE 169 WRITE(lunout,*) 'Problem in opening traceur.def' 170 WRITE(lunout,*) 'ATTENTION using defaut values: nqtrue=1' 171 nqtrue=1 ! Defaut value 172 END IF 173 ! Other planets (for now); we have the same number of tracers 174 ! in the dynamics than in the physics 175 nbtr=nqtrue 176 177 ENDIF ! planet_type 178 ! 179 ! Allocate variables depending on nqtrue and nbtr 180 ! 181 ALLOCATE(tnom_0(nqtrue), hadv(nqtrue), vadv(nqtrue)) 182 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), solsym(nbtr)) 183 conv_flg(:) = 1 ! convection activated for all tracers 184 pbl_flg(:) = 1 ! boundary layer activated for all tracers 185 186 !----------------------------------------------------------------------- 187 ! 2) Choix des schemas d'advection pour l'eau et les traceurs 188 ! 189 ! iadv = 1 schema transport type "humidite specifique LMD" 190 ! iadv = 2 schema amont 191 ! iadv = 14 schema Van-leer + humidite specifique 192 ! Modif F.Codron 193 ! iadv = 10 schema Van-leer (retenu pour l'eau vapeur et liquide) 194 ! iadv = 11 schema Van-Leer pour hadv et version PPM (Monotone) pour vadv 195 ! iadv = 12 schema Frederic Hourdin I 196 ! iadv = 13 schema Frederic Hourdin II 197 ! iadv = 16 schema PPM Monotone(Collela & Woodward 1984) 198 ! iadv = 17 schema PPM Semi Monotone (overshoots autorisés) 199 ! iadv = 18 schema PPM Positif Defini (overshoots undershoots autorisés) 200 ! iadv = 20 schema Slopes 201 ! iadv = 30 schema Prather 202 ! 203 ! Dans le tableau q(ij,l,iq) : iq = 1 pour l'eau vapeur 204 ! iq = 2 pour l'eau liquide 205 ! Et eventuellement iq = 3,nqtot pour les autres traceurs 206 ! 207 ! iadv(1): choix pour l'eau vap. et iadv(2) : choix pour l'eau liq. 208 !------------------------------------------------------------------------ 209 ! 210 ! Get choice of advection schema from file tracer.def or from INCA 211 !--------------------------------------------------------------------- 212 IF (planet_type=='earth') THEN 213 IF (type_trac == 'lmdz' .OR. type_trac == 'repr') THEN 214 IF(ierr.EQ.0) THEN 215 ! Continue to read tracer.def 216 DO iq=1,nqtrue 217 READ(90,*) hadv(iq),vadv(iq),tnom_0(iq) 218 END DO 219 CLOSE(90) 220 ELSE ! Without tracer.def, set default values (for Earth!) 221 if ((nqtrue==4).and.(planet_type=="earth")) then 222 hadv(1) = 14 223 vadv(1) = 14 224 tnom_0(1) = 'H2Ov' 225 hadv(2) = 10 226 vadv(2) = 10 227 tnom_0(2) = 'H2Ol' 228 hadv(3) = 10 229 vadv(3) = 10 230 tnom_0(3) = 'RN' 231 hadv(4) = 10 232 vadv(4) = 10 233 tnom_0(4) = 'PB' 234 else 235 ! Error message, we need a traceur.def file 236 write(lunout,*) trim(modname),& 237 ': Cannot set default tracer names!' 238 write(lunout,*) trim(modname),' Make a traceur.def file!!!' 239 CALL abort_gcm('infotrac_init','Need a traceur.def file!',1) 240 endif ! of if (nqtrue==4) 241 END IF 242 243 !CR: nombre de traceurs de l eau 244 if (tnom_0(3) == 'H2Oi') then 245 nqo=3 246 else 247 nqo=2 248 endif 249 250 WRITE(lunout,*) trim(modname),': Valeur de traceur.def :' 251 WRITE(lunout,*) trim(modname),': nombre de traceurs ',nqtrue 252 DO iq=1,nqtrue 253 WRITE(lunout,*) hadv(iq),vadv(iq),tnom_0(iq) 254 END DO 255 256 ELSE ! type_trac=inca : config_inca='aero' ou 'chem' 257 ! le module de chimie fournit les noms des traceurs 258 ! et les schemas d'advection associes. 259 260 #ifdef INCA 261 CALL init_transport( & 262 hadv, & 263 vadv, & 264 conv_flg, & 265 pbl_flg, & 266 tracnam) 267 #endif 268 tnom_0(1)='H2Ov' 269 tnom_0(2)='H2Ol' 270 271 DO iq =3,nqtrue 272 tnom_0(iq)=solsym(iq-2) 273 END DO 274 nqo = 2 275 276 END IF ! type_trac 277 278 ELSE ! not Earth 279 IF(ierr.EQ.0) THEN 280 ! Continue to read tracer.def 281 DO iq=1,nqtrue 282 !READ(90,*) hadv(iq),vadv(iq),tnom_0(iq) 283 ! try to be smart when reading traceur.def 284 read(90,'(80a)') line ! store the line from traceur.def 285 ! assume format is hadv,vadv,tnom_0 286 read(line,*,iostat=ierr2) hadv(iq),vadv(iq),tnom_0(iq) 287 if (ierr2.ne.0) then 288 ! maybe format is tnom0,hadv,vadv 289 read(line,*,iostat=ierr3) tnom_0(iq),hadv(iq),vadv(iq) 290 if (ierr3.ne.0) then 291 ! assume only tnom0 is provided (havd and vad default to 10) 292 read(line,*) tnom_0(iq) 293 hadv(iq)=10 294 vadv(iq)=10 295 endif 296 endif ! of if(ierr2.ne.0) 297 END DO ! of DO iq=1,nqtrue 298 CLOSE(90) 299 ELSE ! Without tracer.def 300 hadv(1) = 10 301 vadv(1) = 10 302 tnom_0(1) = 'dummy' 303 END IF 304 305 WRITE(lunout,*) trim(modname),': Valeur de traceur.def :' 306 WRITE(lunout,*) trim(modname),': nombre de traceurs ',nqtrue 307 DO iq=1,nqtrue 308 WRITE(lunout,*) hadv(iq),vadv(iq),tnom_0(iq) 309 END DO 310 311 ENDIF ! planet_type 312 313 !----------------------------------------------------------------------- 314 ! 315 ! 3) Verify if advection schema 20 or 30 choosen 316 ! Calculate total number of tracers needed: nqtot 317 ! Allocate variables depending on total number of tracers 318 !----------------------------------------------------------------------- 319 new_iq=0 320 DO iq=1,nqtrue 321 ! Add tracers for certain advection schema 322 IF (hadv(iq)<20 .AND. vadv(iq)<20 ) THEN 323 new_iq=new_iq+1 ! no tracers added 324 ELSE IF (hadv(iq)==20 .AND. vadv(iq)==20 ) THEN 325 new_iq=new_iq+4 ! 3 tracers added 326 ELSE IF (hadv(iq)==30 .AND. vadv(iq)==30 ) THEN 327 new_iq=new_iq+10 ! 9 tracers added 328 ELSE 329 WRITE(lunout,*) trim(modname),': This choice of advection schema is not available',iq,hadv(iq),vadv(iq) 330 CALL abort_gcm('infotrac_init','Bad choice of advection schema - 1',1) 331 END IF 332 END DO 333 334 IF (new_iq /= nqtrue) THEN 335 ! The choice of advection schema imposes more tracers 336 ! Assigne total number of tracers 337 nqtot = new_iq 338 339 WRITE(lunout,*) trim(modname),': The choice of advection schema for one or more tracers' 340 WRITE(lunout,*) 'makes it necessary to add tracers' 341 WRITE(lunout,*) trim(modname)//': ',nqtrue,' is the number of true tracers' 342 WRITE(lunout,*) trim(modname)//': ',nqtot, ' is the total number of tracers needed' 343 344 ELSE 345 ! The true number of tracers is also the total number 346 nqtot = nqtrue 347 END IF 348 349 ! 350 ! Allocate variables with total number of tracers, nqtot 351 ! 352 ALLOCATE(tname(nqtot), ttext(nqtot)) 353 ALLOCATE(iadv(nqtot), niadv(nqtot)) 354 355 !----------------------------------------------------------------------- 356 ! 357 ! 4) Determine iadv, long and short name 358 ! 359 !----------------------------------------------------------------------- 360 new_iq=0 361 DO iq=1,nqtrue 362 new_iq=new_iq+1 363 364 ! Verify choice of advection schema 365 IF (hadv(iq)==vadv(iq)) THEN 366 iadv(new_iq)=hadv(iq) 367 ELSE IF (hadv(iq)==10 .AND. vadv(iq)==16) THEN 368 iadv(new_iq)=11 369 ELSE 370 WRITE(lunout,*)trim(modname),': This choice of advection schema is not available',iq,hadv(iq),vadv(iq) 371 372 CALL abort_gcm('infotrac_init','Bad choice of advection schema - 2',1) 373 END IF 374 375 str1=tnom_0(iq) 376 tname(new_iq)= tnom_0(iq) 377 IF (iadv(new_iq)==0) THEN 378 ttext(new_iq)=trim(str1) 379 ELSE 380 ttext(new_iq)=trim(tnom_0(iq))//descrq(iadv(new_iq)) 381 END IF 382 383 ! schemas tenant compte des moments d'ordre superieur 384 str2=ttext(new_iq) 385 IF (iadv(new_iq)==20) THEN 386 DO jq=1,3 387 new_iq=new_iq+1 388 iadv(new_iq)=-20 389 ttext(new_iq)=trim(str2)//txts(jq) 390 tname(new_iq)=trim(str1)//txts(jq) 391 END DO 392 ELSE IF (iadv(new_iq)==30) THEN 393 DO jq=1,9 394 new_iq=new_iq+1 395 iadv(new_iq)=-30 396 ttext(new_iq)=trim(str2)//txtp(jq) 397 tname(new_iq)=trim(str1)//txtp(jq) 398 END DO 399 END IF 400 END DO 401 402 ! 403 ! Find vector keeping the correspodence between true and total tracers 404 ! 405 niadv(:)=0 406 iiq=0 407 DO iq=1,nqtot 408 IF(iadv(iq).GE.0) THEN 409 ! True tracer 410 iiq=iiq+1 411 niadv(iiq)=iq 412 ENDIF 413 END DO 414 415 416 WRITE(lunout,*) trim(modname),': Information stored in infotrac :' 417 WRITE(lunout,*) trim(modname),': iadv niadv tname ttext :' 418 DO iq=1,nqtot 419 WRITE(lunout,*) iadv(iq),niadv(iq),& 420 ' ',trim(tname(iq)),' ',trim(ttext(iq)) 421 END DO 422 423 ! 424 ! Test for advection schema. 425 ! This version of LMDZ only garantees iadv=10 and iadv=14 (14 only for water vapour) . 426 ! 427 DO iq=1,nqtot 428 IF (iadv(iq)/=10 .AND. iadv(iq)/=14 .AND. iadv(iq)/=0) THEN 429 WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 430 CALL abort_gcm('infotrac_init','In this version only iadv=10 and iadv=14 is tested!',1) 431 ELSE IF (iadv(iq)==14 .AND. iq/=1) THEN 432 WRITE(lunout,*)trim(modname),'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 433 CALL abort_gcm('infotrac_init','In this version iadv=14 is only permitted for water vapour!',1) 434 END IF 435 END DO 436 437 !----------------------------------------------------------------------- 438 ! Finalize : 439 ! 440 DEALLOCATE(tnom_0, hadv, vadv) 441 442 443 END SUBROUTINE infotrac_init 444 445 ! Ehouarn: routine iniadvtrac => from Mars/generic; does essentially the 446 ! same job as infotrac_init. To clean up and merge at some point... 11 447 subroutine iniadvtrac(nq,numvanle) 12 448 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 133 569 end subroutine iniadvtrac 134 570 571 135 572 END MODULE infotrac -
trunk/LMDZ.GENERIC/makegcm_ifort
r1403 r1416 39 39 setenv NCDFLIB /opt/netcdf/ifort/lib 40 40 setenv NCDFINC /opt/netcdf/ifort/include 41 else if ( `hostname` == ada337 || `hostname` == ada338 ) then 42 echo "ADA cluster" 43 setenv NCDFLIB /smplocal/pub/NetCDF/4.1.3/seq/lib 44 setenv NCDFINC /smplocal/pub/NetCDF/4.1.3/seq/include 41 45 else 42 46 # NetCDF, on LMD farm: … … 651 655 echo "Remaking the makefile!" 652 656 echo "src_dirs: $src_dirs" 653 create_make_gcm $src_dirs >! tmp657 ./create_make_gcm $src_dirs >! tmp 654 658 \mv tmp makefile 655 659 echo "New makefile created." -
trunk/LMDZ.MARS/libf/dyn3d/control_mod.F90
r1130 r1416 16 16 real,save :: timestart ! time start for run in "start.nc" 17 17 real,save :: nday_r ! number of days to run (possibly including a fraction of day) 18 character(len=10),save :: planet_type ! planet type ('earth','mars',...) 19 character(len=4),save :: config_inca 18 20 19 21 end module control_mod -
trunk/LMDZ.MARS/libf/dyn3d/dynetat0.F
r1130 r1416 1 SUBROUTINE dynetat0(fichnom, nq,vcov,ucov,1 SUBROUTINE dynetat0(fichnom,vcov,ucov, 2 2 . teta,q,masse,ps,phis,time0) 3 3 4 4 use netcdf 5 use infotrac, only: tname 5 use infotrac, only: tname,nqtot 6 6 use control_mod, only: timestart 7 7 … … 46 46 47 47 CHARACTER*(*) fichnom 48 INTEGER nq49 48 REAL vcov(iip1,jjm,llm),ucov(iip1,jjp1,llm),teta(iip1,jjp1,llm) 50 REAL q(iip1,jjp1,llm,nq )49 REAL q(iip1,jjp1,llm,nqtot) 51 50 REAL masse(iip1,jjp1,llm) 52 51 REAL ps(iip1,jjp1),phis(iip1,jjp1) … … 371 370 372 371 ! read tracers 373 IF(nq .GE.1) THEN372 IF(nqtot.GE.1) THEN 374 373 write(*,*) 'dynetat0: loading tracers' 375 IF(nq .GT.99) THEN374 IF(nqtot.GT.99) THEN 376 375 PRINT*, "Trop de traceurs" 377 376 CALL abort 378 377 ENDIF 379 nqold=nq 380 DO iq=1,nq 378 nqold=nqtot 379 DO iq=1,nqtot 381 380 ! str3(1:1)='q' 382 381 ! WRITE(str3(2:3),'(i2.2)') iq … … 403 402 ENDIF 404 403 ENDDO 405 if ((nqold.lt.nq ).and.(nqold.ge.1)) then404 if ((nqold.lt.nqtot).and.(nqold.ge.1)) then 406 405 c case when new tracer are added in addition to old ones 407 406 write(*,*)'tracers 1 to ', nqold,'were already present' 408 write(*,*)'tracers ', nqold+1,' to ', nq ,'are new'407 write(*,*)'tracers ', nqold+1,' to ', nqtot,'are new' 409 408 ! yes=' ' 410 409 ! do while ((yes.ne.'y').and.(yes.ne.'n')) 411 410 ! write(*,*) 'Would you like to reindex tracer # 1 ->',nqold 412 ! write(*,*) 'to #',nq -nqold+1,'->', nq,' (y or n) ?'411 ! write(*,*) 'to #',nqtot-nqold+1,'->', nqtot,' (y or n) ?' 413 412 ! read(*,fmt='(a)') yes 414 413 ! end do … … 418 417 ! do j=1,jjp1 419 418 ! do i=1,iip1 420 ! do iq=nq ,nq-nqold+1,-1421 ! q(i,j,l,iq)=q(i,j,l,iq-nq +nqold)419 ! do iq=nqtot,nqtot-nqold+1,-1 420 ! q(i,j,l,iq)=q(i,j,l,iq-nqtot+nqold) 422 421 ! end do 423 ! do iq=nq -nqold,1,-1422 ! do iq=nqtot-nqold,1,-1 424 423 ! q(i,j,l,iq)= 0. 425 424 ! end do -
trunk/LMDZ.MARS/libf/dyn3d/dynredem.F
r1130 r1416 1 SUBROUTINE dynredem0(fichnom,idayref, anneeref,phis,nq)2 use infotrac, only: tname 1 SUBROUTINE dynredem0(fichnom,idayref,phis) 2 use infotrac, only: tname, nqtot 3 3 IMPLICIT NONE 4 4 c======================================================================= … … 21 21 c Arguments: 22 22 c ---------- 23 INTEGER*4 idayref ,anneeref23 INTEGER*4 idayref 24 24 REAL phis(ip1jmp1) 25 25 CHARACTER*(*) fichnom 26 INTEGER nq27 26 28 27 c Local: … … 897 896 dims4(3) = idim_llm 898 897 dims4(4) = idim_tim 899 IF(nq .GE.1) THEN900 DO iq=1,nq 898 IF(nqtot.GE.1) THEN 899 DO iq=1,nqtot 901 900 IF (iq.GT.99) THEN 902 901 PRINT*, "Trop de traceurs" … … 963 962 964 963 SUBROUTINE dynredem1(fichnom,time, 965 . vcov,ucov,teta,q, nq,masse,ps)964 . vcov,ucov,teta,q,masse,ps) 966 965 use infotrac, only: nqtot, tname 967 966 IMPLICIT NONE … … 977 976 !#include"advtrac.h" 978 977 979 INTEGER nq,l978 INTEGER l 980 979 REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) 981 980 REAL teta(ip1jmp1,llm) … … 1096 1095 ENDIF 1097 1096 1098 IF (nq .GT.99) THEN1097 IF (nqtot.GT.99) THEN 1099 1098 PRINT*, "Trop de traceurs" 1100 1099 CALL abort 1101 1100 ENDIF 1102 IF(nq .GE.1) THEN1103 DO iq=1,nq 1101 IF(nqtot.GE.1) THEN 1102 DO iq=1,nqtot 1104 1103 ! str3(1:1)='q' 1105 1104 ! WRITE(str3(2:3),'(i2.2)') iq -
trunk/LMDZ.MARS/libf/dyn3d/gcm.F
r1403 r1416 180 180 allocate(dqfi(ip1jmp1,llm,nqtot)) 181 181 182 CALL dynetat0("start.nc", nqtot,vcov,ucov,182 CALL dynetat0("start.nc",vcov,ucov, 183 183 . teta,q,masse,ps,phis,time_0) 184 184 … … 320 320 . 'c''est a dire du jour',i7,3x,'au jour',i7//) 321 321 322 CALL dynredem0("restart.nc",day_ini, anne_ini,phis,nqtot)322 CALL dynredem0("restart.nc",day_ini,phis) 323 323 324 324 ecripar = .TRUE. … … 631 631 . ' date=',REAL(itau)/REAL(day_step) 632 632 CALL dynredem1("restart.nc",REAL(itau)/REAL(day_step), 633 . vcov,ucov,teta,q, nqtot,masse,ps)633 . vcov,ucov,teta,q,masse,ps) 634 634 635 635 CLOSE(99) … … 711 711 CALL dynredem1("restart.nc", 712 712 . REAL(itau)/REAL(day_step), 713 . vcov,ucov,teta,q, nqtot,masse,ps)713 . vcov,ucov,teta,q,masse,ps) 714 714 715 715 forward = .TRUE. -
trunk/LMDZ.MARS/libf/dyn3d/infotrac.F90
r1130 r1416 4 4 ! nqtot : total number of tracers and higher order of moment, water vapor and liquid included 5 5 INTEGER, SAVE :: nqtot 6 INTEGER,allocatable :: iadv(:) ! tracer advection scheme number 7 CHARACTER(len=20),allocatable :: tname(:) ! tracer name 8 6 ! CR: add number of tracers for water (for Earth model only!!) 7 INTEGER, SAVE :: nqo 8 9 ! nbtr : number of tracers not including higher order of moment or water vapor or liquid 10 ! number of tracers used in the physics 11 INTEGER, SAVE :: nbtr 12 13 ! Name variables 14 CHARACTER(len=20), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics 15 CHARACTER(len=23), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics 16 17 ! iadv : index of trasport schema for each tracer 18 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: iadv 19 20 ! niadv : vector keeping the coorspondance between all tracers(nqtot) treated in the 21 ! dynamic part of the code and the tracers (nbtr+2) used in the physics part of the code. 22 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: niadv ! equivalent dyn / physique 23 24 ! conv_flg(it)=0 : convection desactivated for tracer number it 25 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: conv_flg 26 ! pbl_flg(it)=0 : boundary layer diffusion desactivaded for tracer number it 27 INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: pbl_flg 28 29 CHARACTER(len=4),SAVE :: type_trac 30 CHARACTER(len=8),DIMENSION(:),ALLOCATABLE, SAVE :: solsym 31 9 32 CONTAINS 10 33 34 SUBROUTINE infotrac_init 35 USE control_mod 36 #ifdef REPROBUS 37 USE CHEM_REP, ONLY : Init_chem_rep_trac 38 #endif 39 IMPLICIT NONE 40 !======================================================================= 41 ! 42 ! Auteur: P. Le Van /L. Fairhead/F.Hourdin 43 ! ------- 44 ! Modif special traceur F.Forget 05/94 45 ! Modif M-A Filiberti 02/02 lecture de traceur.def 46 ! 47 ! Objet: 48 ! ------ 49 ! GCM LMD nouvelle grille 50 ! 51 !======================================================================= 52 ! ... modification de l'integration de q ( 26/04/94 ) .... 53 !----------------------------------------------------------------------- 54 ! Declarations 55 56 INCLUDE "dimensions.h" 57 INCLUDE "iniprint.h" 58 59 ! Local variables 60 INTEGER, ALLOCATABLE, DIMENSION(:) :: hadv ! index of horizontal trasport schema 61 INTEGER, ALLOCATABLE, DIMENSION(:) :: vadv ! index of vertical trasport schema 62 63 CHARACTER(len=15), ALLOCATABLE, DIMENSION(:) :: tnom_0 ! tracer short name 64 CHARACTER(len=3), DIMENSION(30) :: descrq 65 CHARACTER(len=1), DIMENSION(3) :: txts 66 CHARACTER(len=2), DIMENSION(9) :: txtp 67 CHARACTER(len=23) :: str1,str2 68 69 INTEGER :: nqtrue ! number of tracers read from tracer.def, without higer order of moment 70 INTEGER :: iq, new_iq, iiq, jq, ierr, ierr2, ierr3 71 72 character(len=80) :: line ! to store a line of text 73 74 character(len=*),parameter :: modname="infotrac_init" 75 !----------------------------------------------------------------------- 76 ! Initialization : 77 ! 78 txts=(/'x','y','z'/) 79 txtp=(/'x ','y ','z ','xx','xy','xz','yy','yz','zz'/) 80 81 descrq(14)='VLH' 82 descrq(10)='VL1' 83 descrq(11)='VLP' 84 descrq(12)='FH1' 85 descrq(13)='FH2' 86 descrq(16)='PPM' 87 descrq(17)='PPS' 88 descrq(18)='PPP' 89 descrq(20)='SLP' 90 descrq(30)='PRA' 91 92 IF (planet_type=='earth') THEN 93 ! Coherence test between parameter type_trac, config_inca and preprocessing keys 94 IF (type_trac=='inca') THEN 95 WRITE(lunout,*) 'You have choosen to couple with INCA chemestry model : type_trac=', & 96 type_trac,' config_inca=',config_inca 97 IF (config_inca/='aero' .AND. config_inca/='aeNP' .AND. config_inca/='chem') THEN 98 WRITE(lunout,*) 'Incoherence between type_trac and config_inca. Model stops. Modify run.def' 99 CALL abort_gcm('infotrac_init','Incoherence between type_trac and config_inca',1) 100 END IF 101 #ifndef INCA 102 WRITE(lunout,*) 'To run this option you must add cpp key INCA and compile with INCA code' 103 CALL abort_gcm('infotrac_init','You must compile with cpp key INCA',1) 104 #endif 105 ELSE IF (type_trac=='repr') THEN 106 WRITE(lunout,*) 'You have choosen to couple with REPROBUS chemestry model : type_trac=', type_trac 107 #ifndef REPROBUS 108 WRITE(lunout,*) 'To run this option you must add cpp key REPROBUS and compile with REPRPBUS code' 109 CALL abort_gcm('infotrac_init','You must compile with cpp key REPROBUS',1) 110 #endif 111 ELSE IF (type_trac == 'lmdz') THEN 112 WRITE(lunout,*) 'Tracers are treated in LMDZ only : type_trac=', type_trac 113 ELSE 114 WRITE(lunout,*) 'type_trac=',type_trac,' not possible. Model stops' 115 CALL abort_gcm('infotrac_init','bad parameter',1) 116 END IF 117 118 ! Test if config_inca is other then none for run without INCA 119 IF (type_trac/='inca' .AND. config_inca/='none') THEN 120 WRITE(lunout,*) 'config_inca will now be changed to none as you do not couple with INCA model' 121 config_inca='none' 122 END IF 123 ELSE 124 type_trac='plnt' ! planets... May want to dissociate between each later. 125 ENDIF ! of IF (planet_type=='earth') 126 127 !----------------------------------------------------------------------- 128 ! 129 ! 1) Get the true number of tracers + water vapor/liquid 130 ! Here true tracers (nqtrue) means declared tracers (only first order) 131 ! 132 !----------------------------------------------------------------------- 133 IF (planet_type=='earth') THEN 134 IF (type_trac == 'lmdz' .OR. type_trac == 'repr') THEN 135 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 136 IF(ierr.EQ.0) THEN 137 WRITE(lunout,*) trim(modname),': Open traceur.def : ok' 138 READ(90,*) nqtrue 139 ELSE 140 WRITE(lunout,*) trim(modname),': Problem in opening traceur.def' 141 WRITE(lunout,*) trim(modname),': WARNING using defaut values' 142 nqtrue=4 ! Defaut value 143 END IF 144 ! For Earth, water vapour & liquid tracers are not in the physics 145 nbtr=nqtrue-2 146 ELSE ! type_trac=inca 147 ! nbtr has been read from INCA by init_cont_lmdz() in gcm.F 148 nqtrue=nbtr+2 149 END IF 150 151 IF (nqtrue < 2) THEN 152 WRITE(lunout,*) trim(modname),': nqtrue=',nqtrue, ' is not allowded. 2 tracers is the minimum' 153 CALL abort_gcm('infotrac_init','Not enough tracers',1) 154 END IF 155 156 ! Transfert number of tracers to Reprobus 157 IF (type_trac == 'repr') THEN 158 #ifdef REPROBUS 159 CALL Init_chem_rep_trac(nbtr) 160 #endif 161 END IF 162 163 ELSE ! not Earth 164 OPEN(90,file='traceur.def',form='formatted',status='old', iostat=ierr) 165 IF(ierr.EQ.0) THEN 166 WRITE(lunout,*) 'Open traceur.def : ok' 167 READ(90,*) nqtrue 168 ELSE 169 WRITE(lunout,*) 'Problem in opening traceur.def' 170 WRITE(lunout,*) 'ATTENTION using defaut values: nqtrue=1' 171 nqtrue=1 ! Defaut value 172 END IF 173 ! Other planets (for now); we have the same number of tracers 174 ! in the dynamics than in the physics 175 nbtr=nqtrue 176 177 ENDIF ! planet_type 178 ! 179 ! Allocate variables depending on nqtrue and nbtr 180 ! 181 ALLOCATE(tnom_0(nqtrue), hadv(nqtrue), vadv(nqtrue)) 182 ALLOCATE(conv_flg(nbtr), pbl_flg(nbtr), solsym(nbtr)) 183 conv_flg(:) = 1 ! convection activated for all tracers 184 pbl_flg(:) = 1 ! boundary layer activated for all tracers 185 186 !----------------------------------------------------------------------- 187 ! 2) Choix des schemas d'advection pour l'eau et les traceurs 188 ! 189 ! iadv = 1 schema transport type "humidite specifique LMD" 190 ! iadv = 2 schema amont 191 ! iadv = 14 schema Van-leer + humidite specifique 192 ! Modif F.Codron 193 ! iadv = 10 schema Van-leer (retenu pour l'eau vapeur et liquide) 194 ! iadv = 11 schema Van-Leer pour hadv et version PPM (Monotone) pour vadv 195 ! iadv = 12 schema Frederic Hourdin I 196 ! iadv = 13 schema Frederic Hourdin II 197 ! iadv = 16 schema PPM Monotone(Collela & Woodward 1984) 198 ! iadv = 17 schema PPM Semi Monotone (overshoots autorisés) 199 ! iadv = 18 schema PPM Positif Defini (overshoots undershoots autorisés) 200 ! iadv = 20 schema Slopes 201 ! iadv = 30 schema Prather 202 ! 203 ! Dans le tableau q(ij,l,iq) : iq = 1 pour l'eau vapeur 204 ! iq = 2 pour l'eau liquide 205 ! Et eventuellement iq = 3,nqtot pour les autres traceurs 206 ! 207 ! iadv(1): choix pour l'eau vap. et iadv(2) : choix pour l'eau liq. 208 !------------------------------------------------------------------------ 209 ! 210 ! Get choice of advection schema from file tracer.def or from INCA 211 !--------------------------------------------------------------------- 212 IF (planet_type=='earth') THEN 213 IF (type_trac == 'lmdz' .OR. type_trac == 'repr') THEN 214 IF(ierr.EQ.0) THEN 215 ! Continue to read tracer.def 216 DO iq=1,nqtrue 217 READ(90,*) hadv(iq),vadv(iq),tnom_0(iq) 218 END DO 219 CLOSE(90) 220 ELSE ! Without tracer.def, set default values (for Earth!) 221 if ((nqtrue==4).and.(planet_type=="earth")) then 222 hadv(1) = 14 223 vadv(1) = 14 224 tnom_0(1) = 'H2Ov' 225 hadv(2) = 10 226 vadv(2) = 10 227 tnom_0(2) = 'H2Ol' 228 hadv(3) = 10 229 vadv(3) = 10 230 tnom_0(3) = 'RN' 231 hadv(4) = 10 232 vadv(4) = 10 233 tnom_0(4) = 'PB' 234 else 235 ! Error message, we need a traceur.def file 236 write(lunout,*) trim(modname),& 237 ': Cannot set default tracer names!' 238 write(lunout,*) trim(modname),' Make a traceur.def file!!!' 239 CALL abort_gcm('infotrac_init','Need a traceur.def file!',1) 240 endif ! of if (nqtrue==4) 241 END IF 242 243 !CR: nombre de traceurs de l eau 244 if (tnom_0(3) == 'H2Oi') then 245 nqo=3 246 else 247 nqo=2 248 endif 249 250 WRITE(lunout,*) trim(modname),': Valeur de traceur.def :' 251 WRITE(lunout,*) trim(modname),': nombre de traceurs ',nqtrue 252 DO iq=1,nqtrue 253 WRITE(lunout,*) hadv(iq),vadv(iq),tnom_0(iq) 254 END DO 255 256 ELSE ! type_trac=inca : config_inca='aero' ou 'chem' 257 ! le module de chimie fournit les noms des traceurs 258 ! et les schemas d'advection associes. 259 260 #ifdef INCA 261 CALL init_transport( & 262 hadv, & 263 vadv, & 264 conv_flg, & 265 pbl_flg, & 266 tracnam) 267 #endif 268 tnom_0(1)='H2Ov' 269 tnom_0(2)='H2Ol' 270 271 DO iq =3,nqtrue 272 tnom_0(iq)=solsym(iq-2) 273 END DO 274 nqo = 2 275 276 END IF ! type_trac 277 278 ELSE ! not Earth 279 IF(ierr.EQ.0) THEN 280 ! Continue to read tracer.def 281 DO iq=1,nqtrue 282 !READ(90,*) hadv(iq),vadv(iq),tnom_0(iq) 283 ! try to be smart when reading traceur.def 284 read(90,'(80a)') line ! store the line from traceur.def 285 ! assume format is hadv,vadv,tnom_0 286 read(line,*,iostat=ierr2) hadv(iq),vadv(iq),tnom_0(iq) 287 if (ierr2.ne.0) then 288 ! maybe format is tnom0,hadv,vadv 289 read(line,*,iostat=ierr3) tnom_0(iq),hadv(iq),vadv(iq) 290 if (ierr3.ne.0) then 291 ! assume only tnom0 is provided (havd and vad default to 10) 292 read(line,*) tnom_0(iq) 293 hadv(iq)=10 294 vadv(iq)=10 295 endif 296 endif ! of if(ierr2.ne.0) 297 END DO ! of DO iq=1,nqtrue 298 CLOSE(90) 299 ELSE ! Without tracer.def 300 hadv(1) = 10 301 vadv(1) = 10 302 tnom_0(1) = 'dummy' 303 END IF 304 305 WRITE(lunout,*) trim(modname),': Valeur de traceur.def :' 306 WRITE(lunout,*) trim(modname),': nombre de traceurs ',nqtrue 307 DO iq=1,nqtrue 308 WRITE(lunout,*) hadv(iq),vadv(iq),tnom_0(iq) 309 END DO 310 311 ENDIF ! planet_type 312 313 !----------------------------------------------------------------------- 314 ! 315 ! 3) Verify if advection schema 20 or 30 choosen 316 ! Calculate total number of tracers needed: nqtot 317 ! Allocate variables depending on total number of tracers 318 !----------------------------------------------------------------------- 319 new_iq=0 320 DO iq=1,nqtrue 321 ! Add tracers for certain advection schema 322 IF (hadv(iq)<20 .AND. vadv(iq)<20 ) THEN 323 new_iq=new_iq+1 ! no tracers added 324 ELSE IF (hadv(iq)==20 .AND. vadv(iq)==20 ) THEN 325 new_iq=new_iq+4 ! 3 tracers added 326 ELSE IF (hadv(iq)==30 .AND. vadv(iq)==30 ) THEN 327 new_iq=new_iq+10 ! 9 tracers added 328 ELSE 329 WRITE(lunout,*) trim(modname),': This choice of advection schema is not available',iq,hadv(iq),vadv(iq) 330 CALL abort_gcm('infotrac_init','Bad choice of advection schema - 1',1) 331 END IF 332 END DO 333 334 IF (new_iq /= nqtrue) THEN 335 ! The choice of advection schema imposes more tracers 336 ! Assigne total number of tracers 337 nqtot = new_iq 338 339 WRITE(lunout,*) trim(modname),': The choice of advection schema for one or more tracers' 340 WRITE(lunout,*) 'makes it necessary to add tracers' 341 WRITE(lunout,*) trim(modname)//': ',nqtrue,' is the number of true tracers' 342 WRITE(lunout,*) trim(modname)//': ',nqtot, ' is the total number of tracers needed' 343 344 ELSE 345 ! The true number of tracers is also the total number 346 nqtot = nqtrue 347 END IF 348 349 ! 350 ! Allocate variables with total number of tracers, nqtot 351 ! 352 ALLOCATE(tname(nqtot), ttext(nqtot)) 353 ALLOCATE(iadv(nqtot), niadv(nqtot)) 354 355 !----------------------------------------------------------------------- 356 ! 357 ! 4) Determine iadv, long and short name 358 ! 359 !----------------------------------------------------------------------- 360 new_iq=0 361 DO iq=1,nqtrue 362 new_iq=new_iq+1 363 364 ! Verify choice of advection schema 365 IF (hadv(iq)==vadv(iq)) THEN 366 iadv(new_iq)=hadv(iq) 367 ELSE IF (hadv(iq)==10 .AND. vadv(iq)==16) THEN 368 iadv(new_iq)=11 369 ELSE 370 WRITE(lunout,*)trim(modname),': This choice of advection schema is not available',iq,hadv(iq),vadv(iq) 371 372 CALL abort_gcm('infotrac_init','Bad choice of advection schema - 2',1) 373 END IF 374 375 str1=tnom_0(iq) 376 tname(new_iq)= tnom_0(iq) 377 IF (iadv(new_iq)==0) THEN 378 ttext(new_iq)=trim(str1) 379 ELSE 380 ttext(new_iq)=trim(tnom_0(iq))//descrq(iadv(new_iq)) 381 END IF 382 383 ! schemas tenant compte des moments d'ordre superieur 384 str2=ttext(new_iq) 385 IF (iadv(new_iq)==20) THEN 386 DO jq=1,3 387 new_iq=new_iq+1 388 iadv(new_iq)=-20 389 ttext(new_iq)=trim(str2)//txts(jq) 390 tname(new_iq)=trim(str1)//txts(jq) 391 END DO 392 ELSE IF (iadv(new_iq)==30) THEN 393 DO jq=1,9 394 new_iq=new_iq+1 395 iadv(new_iq)=-30 396 ttext(new_iq)=trim(str2)//txtp(jq) 397 tname(new_iq)=trim(str1)//txtp(jq) 398 END DO 399 END IF 400 END DO 401 402 ! 403 ! Find vector keeping the correspodence between true and total tracers 404 ! 405 niadv(:)=0 406 iiq=0 407 DO iq=1,nqtot 408 IF(iadv(iq).GE.0) THEN 409 ! True tracer 410 iiq=iiq+1 411 niadv(iiq)=iq 412 ENDIF 413 END DO 414 415 416 WRITE(lunout,*) trim(modname),': Information stored in infotrac :' 417 WRITE(lunout,*) trim(modname),': iadv niadv tname ttext :' 418 DO iq=1,nqtot 419 WRITE(lunout,*) iadv(iq),niadv(iq),& 420 ' ',trim(tname(iq)),' ',trim(ttext(iq)) 421 END DO 422 423 ! 424 ! Test for advection schema. 425 ! This version of LMDZ only garantees iadv=10 and iadv=14 (14 only for water vapour) . 426 ! 427 DO iq=1,nqtot 428 IF (iadv(iq)/=10 .AND. iadv(iq)/=14 .AND. iadv(iq)/=0) THEN 429 WRITE(lunout,*)trim(modname),' STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 430 CALL abort_gcm('infotrac_init','In this version only iadv=10 and iadv=14 is tested!',1) 431 ELSE IF (iadv(iq)==14 .AND. iq/=1) THEN 432 WRITE(lunout,*)trim(modname),'STOP : The option iadv=',iadv(iq),' is not tested in this version of LMDZ' 433 CALL abort_gcm('infotrac_init','In this version iadv=14 is only permitted for water vapour!',1) 434 END IF 435 END DO 436 437 !----------------------------------------------------------------------- 438 ! Finalize : 439 ! 440 DEALLOCATE(tnom_0, hadv, vadv) 441 442 443 END SUBROUTINE infotrac_init 444 445 ! Ehouarn: routine iniadvtrac => from Mars/generic; does essentially the 446 ! same job as infotrac_init. To clean up and merge at some point... 11 447 subroutine iniadvtrac(nq,numvanle) 12 448 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 133 569 end subroutine iniadvtrac 134 570 571 135 572 END MODULE infotrac -
trunk/LMDZ.MARS/makegcm_ifort
r1403 r1416 47 47 setenv NCDFLIB /opt/netcdf3/ifort/lib 48 48 setenv NCDFINC /opt/netcdf3/ifort/include 49 endif 50 hostname | grep 'ada' > /dev/null 51 if ( $? == 0 ) then 52 echo "*** NETCDF preset *** CICLAD cluster" 53 setenv NCDFLIB /smplocal/pub/NetCDF/4.1.3/seq/lib 54 setenv NCDFINC /smplocal/pub/NetCDF/4.1.3/seq/include 49 55 endif 50 56 ### end NetCDF presets … … 669 675 echo "On recree le makefile" 670 676 echo "src_dirs: $src_dirs" 671 create_make_gcm $src_dirs >! tmp677 ./create_make_gcm $src_dirs >! tmp 672 678 \mv tmp makefile 673 679 echo "Nouveau makefile cree."
Note: See TracChangeset
for help on using the changeset viewer.