Changeset 1005 for trunk/LMDZ.MARS/libf/phymars
- Timestamp:
- Jul 18, 2013, 8:33:04 AM (12 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phymars
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phymars/callsedim.F
r740 r1005 1 1 SUBROUTINE callsedim(ngrid,nlay, ptimestep, 2 & pplev,zlev, zlay, pt, rdust, rice,2 & pplev,zlev, zlay, pt, pdt, rdust, rice, 3 3 & rsedcloud,rhocloud, 4 4 & pq, pdqfi, pdqsed,pdqs_sed,nq, … … 6 6 ! to use 'getin' 7 7 USE ioipsl_getincom 8 USE updaterad 8 USE updaterad,only: updaterdust,updaterice_micro,updaterice_typ 9 9 IMPLICIT NONE 10 10 … … 35 35 c ---------- 36 36 37 INTEGER ngrid ! number of horizontal grid points 38 INTEGER nlay ! number of atmospheric layers 39 REAL ptimestep ! physics time step (s) 40 REAL pplev(ngrid,nlay+1) ! pressure at inter-layers (Pa) 41 REAL pt(ngrid,nlay) ! temperature at mid-layer (K) 42 REAL zlev(ngrid,nlay+1) ! altitude at layer boundaries 37 integer,intent(in) :: ngrid ! number of horizontal grid points 38 integer,intent(in) :: nlay ! number of atmospheric layers 39 real,intent(in) :: ptimestep ! physics time step (s) 40 real,intent(in) :: pplev(ngrid,nlay+1) ! pressure at inter-layers (Pa) 41 real,intent(in) :: zlev(ngrid,nlay+1) ! altitude at layer boundaries 42 real,intent(in) :: zlay(ngrid,nlay) ! altitude at the middle of the layers 43 real,intent(in) :: pt(ngrid,nlay) ! temperature at mid-layer (K) 44 real,intent(in) :: pdt(ngrid,nlay) ! tendency on temperature, from 45 ! previous processes (K/s) 43 46 c Aerosol radius provided by the water ice microphysical scheme: 44 REAL rdust(ngrid,nlay) ! Dust geometric mean radius (m) 45 REAL rice(ngrid,nlay) ! Ice geometric mean radius (m) 46 47 real,intent(out) :: rdust(ngrid,nlay) ! Dust geometric mean radius (m) 48 real,intent(out) :: rice(ngrid,nlay) ! H2O Ice geometric mean radius (m) 49 c Sedimentation radius of water ice 50 real,intent(in) :: rsedcloud(ngridmx,nlayermx) 51 c Cloud density (kg.m-3) 52 real,intent(inout) :: rhocloud(ngridmx,nlayermx) 47 53 c Traceurs : 48 integer nq ! number of tracers 49 real pq(ngrid,nlay,nq) ! tracers (kg/kg) 50 real pdqfi(ngrid,nlay,nq) ! tendency before sedimentation (kg/kg.s-1) 51 real pdqsed(ngrid,nlay,nq) ! tendency due to sedimentation (kg/kg.s-1) 52 real pdqs_sed(ngrid,nq) ! flux at surface (kg.m-2.s-1) 54 real,intent(in) :: pq(ngrid,nlay,nq) ! tracers (kg/kg) 55 real,intent(in) :: pdqfi(ngrid,nlay,nq) ! tendency before sedimentation (kg/kg.s-1) 56 real,intent(out) :: pdqsed(ngrid,nlay,nq) ! tendency due to sedimentation (kg/kg.s-1) 57 real,intent(out) :: pdqs_sed(ngrid,nq) ! flux at surface (kg.m-2.s-1) 58 integer,intent(in) :: nq ! number of tracers 59 real,intent(in) :: tau(ngrid,nlay) ! dust opacity 60 real,intent(in) :: tauscaling(ngrid) 53 61 54 62 c local: … … 57 65 INTEGER l,ig, iq 58 66 59 real zqi(ngridmx,nlayermx,nqmx) ! to locally store tracers 60 real masse (ngridmx,nlayermx) ! Layer mass (kg.m-2) 61 real epaisseur (ngridmx,nlayermx) ! Layer thickness (m) 62 real wq(ngridmx,nlayermx+1) ! displaced tracer mass (kg.m-2) 63 real r0(ngridmx,nlayermx) ! geometric mean radius used for 67 real zqi(ngrid,nlay,nq) ! to locally store tracers 68 real zt(ngrid,nlay) ! to locally store temperature 69 real masse (ngrid,nlay) ! Layer mass (kg.m-2) 70 real epaisseur (ngrid,nlay) ! Layer thickness (m) 71 real wq(ngrid,nlay+1) ! displaced tracer mass (kg.m-2) 72 real r0(ngrid,nlay) ! geometric mean radius used for 64 73 ! sedimentation (m) 65 real r0dust(ngrid mx,nlayermx) ! geometric mean radius used for74 real r0dust(ngrid,nlay) ! geometric mean radius used for 66 75 ! dust (m) 67 ! real r0ccn(ngrid mx,nlayermx) ! geometric mean radius used for76 ! real r0ccn(ngrid,nlay) ! geometric mean radius used for 68 77 ! ! CCNs (m) 69 c Sedimentation radius of water ice 70 real rsedcloud(ngridmx,nlayermx) 71 real beta ! correction for the shape of the ice particles (cf. newsedim) 72 save beta 73 c Cloud density (kg.m-3) 74 real rhocloud(ngridmx,nlayermx) 75 78 real,save :: beta ! correction for the shape of the ice particles (cf. newsedim) 79 76 80 c for ice radius computation 77 81 REAL Mo,No 78 REAL tau(ngrid,nlay), tauscaling(ngrid)79 REAL zlay(ngrid,nlay) ! altitude at the middle of the layers80 82 REAl ccntyp 81 83 … … 86 88 c 1) Parameters used to represent the changes in fall 87 89 c velocity as a function of particle size; 88 integer nr,ir 89 parameter (nr=12) !(nr=7) ! number of bins 90 real rd(nr),qr(ngridmx,nlayermx,nr) 91 real rdi(nr+1) ! extreme and intermediate radii 92 real Sq(ngridmx,nlayermx) 93 real rdmin,rdmax,rdimin,rdimax 94 data rdmin/1.e-8/ !/1.e-7/ 95 data rdmax/30.e-6/ 96 data rdimin/1.e-10/ 97 data rdimax/1e-4/ 98 save rd, rdi 90 integer ir 91 integer,parameter :: nr=12 !(nr=7) ! number of bins 92 real,save :: rd(nr) 93 real qr(ngrid,nlay,nr) 94 real,save :: rdi(nr+1) ! extreme and intermediate radii 95 real Sq(ngrid,nlay) 96 real,parameter :: rdmin=1.e-8 97 real,parameter :: rdmax=30.e-6 98 real,parameter :: rdimin=1.e-8 ! 1.e-7 99 real,parameter :: rdimax=1.e-4 99 100 100 101 c 2) Second size distribution for the log-normal integration 101 102 c (the mass mixing ratio is computed for each radius) 102 103 103 integer ninter, iint 104 parameter (ninter=4) ! nombre de point entre chaque rayon rdi 105 real rr(ninter,nr) 106 save rr 104 integer iint 105 integer,parameter :: ninter=4 ! number of points between each rdi radii 106 real,save :: rr(ninter,nr) 107 107 integer radpower 108 108 real sigma0 … … 110 110 c 3) Other local variables used in doubleq 111 111 112 INTEGER idust_mass ! index of tracer containing dust mass 113 ! mix. ratio 114 INTEGER idust_number ! index of tracer containing dust number 115 ! mix. ratio 116 INTEGER iccn_mass ! index of tracer containing CCN mass 117 ! mix. ratio 118 INTEGER iccn_number ! index of tracer containing CCN number 119 ! mix. ratio 120 SAVE idust_mass,idust_number 121 SAVE iccn_mass,iccn_number 122 123 124 c Firstcall: 125 126 LOGICAL firstcall 127 SAVE firstcall 128 DATA firstcall/.true./ 112 INTEGER,SAVE :: idust_mass ! index of tracer containing dust mass 113 ! mix. ratio 114 INTEGER,SAVE :: idust_number ! index of tracer containing dust number 115 ! mix. ratio 116 INTEGER,SAVE :: iccn_mass ! index of tracer containing CCN mass 117 ! mix. ratio 118 INTEGER,SAVE :: iccn_number ! index of tracer containing CCN number 119 ! mix. ratio 120 121 LOGICAL,SAVE :: firstcall=.true. 129 122 130 123 c ** un petit test de coherence … … 169 162 if (noms(iq).eq."dust_mass") then 170 163 idust_mass=iq 164 write(*,*)"callsedim: idust_mass=",idust_mass 171 165 endif 172 166 if (noms(iq).eq."dust_number") then 173 167 idust_number=iq 168 write(*,*)"callsedim: idust_number=",idust_number 174 169 endif 175 170 enddo … … 190 185 if (noms(iq).eq."ccn_mass") then 191 186 iccn_mass=iq 187 write(*,*)"callsedim: iccn_mass=",iccn_mass 192 188 endif 193 189 if (noms(iq).eq."ccn_number") then 194 190 iccn_number=iq 191 write(*,*)"callsedim: iccn_number=",iccn_number 195 192 endif 196 193 enddo … … 223 220 c ----------------- 224 221 225 zqi(1:ngrid,1:nlay,1:nqmx) = 0.226 c Updat ing the mass mixing ratiowith the tendencies coming222 ! zqi(1:ngrid,1:nlay,1:nqmx) = 0. 223 c Update the mass mixing ratio and temperature with the tendencies coming 227 224 c from other parameterizations: 228 225 c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 229 230 do iq=1,nq 231 do l=1,nlay 232 do ig=1,ngrid 233 zqi(ig,l,iq)=pq(ig,l,iq)+pdqfi(ig,l,iq)*ptimestep 234 enddo 235 enddo 236 enddo 226 zqi(1:ngrid,1:nlay,1:nq)=pq(1:ngrid,1:nlay,1:nq) 227 & +pdqfi(1:ngrid,1:nlay,1:nq)*ptimestep 228 zt(1:ngrid,1:nlay)=pt(1:ngrid,1:nlay) 229 & +pdt(1:ngrid,1:nlay)*ptimestep 230 237 231 238 232 c Computing the different layer properties … … 342 336 343 337 call newsedim(ngrid,nlay,1,1,ptimestep, 344 & pplev,masse,epaisseur, pt,rd(ir),rho_dust,qr(1,1,ir),338 & pplev,masse,epaisseur,zt,rd(ir),rho_dust,qr(1,1,ir), 345 339 & wq,0.5) 346 340 … … 365 359 ! water ice sedimentation 366 360 call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay, 367 & ptimestep,pplev,masse,epaisseur, pt,rsedcloud,rhocloud,361 & ptimestep,pplev,masse,epaisseur,zt,rsedcloud,rhocloud, 368 362 & zqi(1,1,iq),wq,beta) 369 363 else 370 364 ! water ice sedimentation 371 365 call newsedim(ngrid,nlay,ngrid*nlay,1, 372 & ptimestep,pplev,masse,epaisseur, pt,rsedcloud,rho_q(iq),366 & ptimestep,pplev,masse,epaisseur,zt,rsedcloud,rho_q(iq), 373 367 & zqi(1,1,iq),wq,beta) 374 368 endif ! of if (microphys) … … 383 377 else 384 378 call newsedim(ngrid,nlay,1,1,ptimestep, 385 & pplev,masse,epaisseur, pt,radius(iq),rho_q(iq),379 & pplev,masse,epaisseur,zt,radius(iq),rho_q(iq), 386 380 & zqi(1,1,iq),wq,1.0) 387 381 c Tendencies … … 405 399 c ================================================================= 406 400 enddo ! of do iq=1,nq 407 401 408 402 c Update the dust particle size "rdust" 409 403 c ------------------------------------- … … 451 445 endif ! of if (water) 452 446 453 RETURN454 447 END 455 448 -
trunk/LMDZ.MARS/libf/phymars/initracer.F
r740 r1005 14 14 c by the dynamics in "advtrac.h" 15 15 c 16 c Old conventions: (not used any more)17 c18 c If water=T : q(iq=nqmx) is the water mass mixing ratio19 c and q(iq=nqmx-1) is the ice mass mixing ratio20 21 c If there is transported dust, it uses iq=1 to iq=dustbin22 c If there is no transported dust : dustbin=023 c If doubleq=T : q(iq=1) is the dust mass mixing ratio24 c q(iq=2) is the dust number mixing ratio25 26 16 c 27 17 c author: F.Forget … … 380 370 381 371 c------------------------------------------------------------ 382 c Initiali sation tracers ....372 c Initialize tracers .... (in tracer.h) 383 373 c------------------------------------------------------------ 384 call zerophys(nqmx,rho_q) 385 374 ! start by setting everything to (default) zero 375 rho_q(1:nqmx)=0 ! tracer density (kg.m-3) 376 radius(1:nqmx)=0. ! tracer particle radius (m) 377 alpha_lift(1:nqmx) =0. ! tracer saltation vertical flux/horiz flux ratio (m-1) 378 alpha_devil(1:nqmx)=0. ! tracer lifting coefficient by dust devils 379 380 381 ! some reference values 386 382 rho_dust=2500. ! Mars dust density (kg.m-3) 387 383 rho_ice=920. ! Water ice density (kg.m-3) … … 497 493 end if ! (submicron) 498 494 499 c Initialization for photochemistry:500 c ---------------------------------501 if (photochem) then502 ! initialize chemistry+water (water will be correctly initialized below)503 ! by initializing everything which is not dust ...504 do iq=1,nqmx505 txt=noms(iq)506 if (txt(1:4).ne."dust") then507 radius(iq)=0.508 alpha_lift(iq) =0.509 alpha_devil(iq)=0.510 endif511 enddo ! do iq=1,nqmx512 endif513 514 495 c Initialization for water vapor 515 496 c ------------------------------ -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r999 r1005 1172 1172 1173 1173 call callsedim(ngrid,nlayer, ptimestep, 1174 & zplev,zzlev, zzlay, pt, rdust, rice,1174 & zplev,zzlev, zzlay, pt, pdt, rdust, rice, 1175 1175 & rsedcloud,rhocloud, 1176 1176 & pq, pdq, zdqsed, zdqssed,nq, -
trunk/LMDZ.MARS/libf/phymars/writediagfi.F
r410 r1005 92 92 integer,save :: n_nom_def 93 93 integer :: n 94 integer,parameter :: n_nom_def_max= 9995 character(len= 20),save :: nom_def(n_nom_def_max)94 integer,parameter :: n_nom_def_max=199 95 character(len=120),save :: nom_def(n_nom_def_max) 96 96 logical,save :: firstcall=.true. 97 97
Note: See TracChangeset
for help on using the changeset viewer.