Changeset 463 for trunk/LMDZ.MARS
- Timestamp:
- Dec 9, 2011, 8:52:27 AM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r460 r463 1325 1325 (default is "jmars.20111014") 1326 1326 1327 1328 == 09/12/2011 == EM 1329 >> more updates for photochemistry from FL: improved aeronomars/surfacearea.F , 1330 with a change in arguments. 1331 1332 -
trunk/LMDZ.MARS/libf/aeronomars/surfacearea.F
r459 r463 1 subroutine surfacearea(ngrid, nlay, pplay, pzlay, pt, pq, nq, 2 $ rdust, rice, tau, tauscaling, 1 subroutine surfacearea(ngrid, nlay, ptimestep, 2 $ pplay, pzlay, 3 $ pt, pq, pdq, nq, rdust, rice, tau, 4 $ tauscaling, 3 5 $ surfdust, surfice) 4 6 … … 10 12 ! 11 13 ! Franck Lefevre 12 ! version 1. 0november 201114 ! version 1.1 november 2011 13 15 !========================================================================== 14 16 … … 24 26 ! input 25 27 26 integer ngrid, nlay 27 integer nq ! number of tracers 28 real pplay(ngrid,nlay) ! pressure at mid-layers (Pa) 29 real pzlay(ngrid,nlay) ! altitude at mid-layers (m) 30 real pt(ngrid,nlay) ! temperature at mid-layers (K) 31 real pq(ngrid,nlay,nq) ! tracers (kg/kg) 32 real rdust(ngrid,nlay) ! dust geometric mean radius (m) 33 real rice(ngrid,nlay) ! ice mass mean radius (m) 34 real tau(ngrid,naerkind) ! column dust optical depth at each point 35 real tauscaling(ngrid) ! conversion factor for dust amount 28 integer,intent(in) :: ngrid, nlay 29 integer,intent(in) :: nq ! number of tracers 30 real,intent(in) :: ptimestep ! physics time step (s) 31 real,intent(in) :: pplay(ngrid,nlay) ! pressure at mid-layers (Pa) 32 real,intent(in) :: pzlay(ngrid,nlay) ! altitude at mid-layers (m) 33 real,intent(in) :: pt(ngrid,nlay) ! temperature at mid-layers (K) 34 real,intent(in) :: pq(ngrid,nlay,nq) ! tracers (kg/kg) 35 real,intent(in) :: pdq(ngrid,nlay,nq) ! physical tendency (kg/kg.s-1) 36 real,intent(in) :: rdust(ngrid,nlay) ! dust geometric mean radius (m) 37 real,intent(in) :: rice(ngrid,nlay) ! ice mass mean radius (m) 38 real,intent(in) :: tau(ngrid,naerkind) ! column dust optical depth at each point 39 real,intent(in) :: tauscaling(ngrid) ! conversion factor for dust amount 36 40 37 41 ! output 38 42 39 real surfdust(ngrid,nlay)! dust surface area (m2/m3)40 real surfice(ngrid,nlay)! water-ice surface area (m2/m3)43 real,intent(out) :: surfdust(ngrid,nlay) ! dust surface area (m2/m3) 44 real,intent(out) :: surfice(ngrid,nlay) ! water-ice surface area (m2/m3) 41 45 42 46 ! local … … 44 48 integer l, ig 45 49 real rho ! density (kg/m3) 50 real dustnd ! uodated dust number density (kg/kg) 51 real icend ! uodated ice number density (kg/kg) 46 52 real ccntyp ! typical dust number density (#/kg) 47 53 ! (microphys = false) … … 54 60 do l = 1,nlay 55 61 do ig = 1,ngrid 62 ! atmospheric density 56 63 rho = pplay(ig,l)/(rnew(ig,l)*pt(ig,l)) 57 surfdust(ig,l) = pq(ig,l,igcm_dust_number)*rho 58 $ *tauscaling(ig) 64 ! updated dust number density 65 dustnd = pq(ig,l,igcm_dust_number) 66 $ + pdq(ig,l,igcm_dust_number)*ptimestep 67 ! updated ice number density 68 icend = pq(ig,l,igcm_ccn_number) 69 $ + pdq(ig,l,igcm_ccn_number)*ptimestep 70 ! dust surface area 71 surfdust(ig,l) = dustnd*rho*tauscaling(ig) 59 72 $ *4.*pi*rdust(ig,l)**2 60 surfice(ig,l) = pq(ig,l,igcm_ccn_number)*rho 61 $*tauscaling(ig)73 ! ice surface area 74 surfice(ig,l) = icend*rho*tauscaling(ig) 62 75 $ *4.*pi*rice(ig,l)**2 63 76 end do 64 77 end do 65 else ! simpleclouds78 else ! simpleclouds 66 79 do l = 1,nlay 67 80 do ig = 1,ngrid 81 ! atmospheric density 68 82 rho = pplay(ig,l)/(rnew(ig,l)*pt(ig,l)) 83 ! typical dust radius 69 84 rdusttyp = max(.8e-6*exp(-pzlay(ig,l)/18000.),1.e-9) 85 ! typical dust number density 70 86 ccntyp = 1.3e+8*max(tau(ig,1),0.001)/0.1 71 87 $ *exp(-pzlay(ig,l)/10000.) -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r459 r463 308 308 real rho(ngridmx,nlayermx) ! density 309 309 real vmr(ngridmx,nlayermx) ! volume mixing ratio 310 !real colden(ngridmx,nqmx) ! vertical column !FL310 REAL colden(ngridmx,nqmx) ! vertical column of tracers 311 311 REAL mtot(ngridmx) ! Total mass of water vapor (kg/m2) 312 312 REAL icetot(ngridmx) ! Total mass of water ice (kg/m2) … … 1088 1088 1089 1089 ! dust and ice surface area 1090 call surfacearea(ngrid, nlayer, pplay, zzlay, pt, pq, nq, 1090 call surfacearea(ngrid, nlayer, ptimestep, pplay, zzlay, 1091 $ pt, pq, pdq, nq, 1091 1092 $ rdust, rice, tau, tauscaling, 1092 1093 $ surfdust, surfice) … … 1487 1488 if (thermochem.or.photochem) then 1488 1489 do iq=1,nq 1489 if ((noms(iq).eq."o").or.(noms(iq).eq."co2").or. 1490 . (noms(iq).eq."co").or.(noms(iq).eq."n2").or. 1491 . (noms(iq).eq."h2").or. 1492 . (noms(iq).eq."o3")) then 1493 do l=1,nlayer 1494 do ig=1,ngrid 1495 vmr(ig,l)=zq(ig,l,iq)*mmean(ig,l)/mmol(iq) 1496 end do 1497 end do 1498 call wstats(ngrid,"vmr_"//trim(noms(iq)), 1499 . "Volume mixing ratio","mol/mol",3,vmr) 1500 endif 1501 ! do ig = 1,ngrid 1502 ! colden(ig,iq) = 0. !FL 1503 ! end do 1504 ! do l=1,nlayer !FL 1505 ! do ig=1,ngrid !FL 1506 ! colden(ig,iq) = colden(ig,iq) + zq(ig,l,iq) !FL 1507 ! $ *(pplev(ig,l)-pplev(ig,l+1)) !FL 1508 ! $ *6.022e22/(mmol(iq)*g) !FL 1509 ! end do !FL 1510 ! end do !FL 1511 ! call wstats(ngrid,"c_"//trim(noms(iq)), !FL 1512 ! $ "column","mol cm-2",2,colden(1,iq)) !FL 1490 if (noms(iq) .ne. "dust_mass" .and. 1491 $ noms(iq) .ne. "dust_number" .and. 1492 $ noms(iq) .ne. "ccn_mass" .and. 1493 $ noms(iq) .ne. "ccn_number") then 1494 do l=1,nlayer 1495 do ig=1,ngrid 1496 vmr(ig,l)=zq(ig,l,iq)*mmean(ig,l)/mmol(iq) 1497 end do 1498 end do 1499 call wstats(ngrid,"vmr_"//trim(noms(iq)), 1500 $ "Volume mixing ratio","mol/mol",3,vmr) 1501 if ((noms(iq).eq."o") .or. (noms(iq).eq."co2").or. 1502 $ (noms(iq).eq."o3")) then 1503 call writediagfi(ngrid,"vmr_"//trim(noms(iq)), 1504 $ "Volume mixing ratio","mol/mol",3,vmr) 1505 end if 1506 do ig = 1,ngrid 1507 colden(ig,iq) = 0. 1508 end do 1509 do l=1,nlayer 1510 do ig=1,ngrid 1511 colden(ig,iq) = colden(ig,iq) + zq(ig,l,iq) 1512 $ *(pplev(ig,l)-pplev(ig,l+1)) 1513 $ *6.022e22/(mmol(iq)*g) 1514 end do 1515 end do 1516 call wstats(ngrid,"c_"//trim(noms(iq)), 1517 $ "column","mol cm-2",2,colden(1,iq)) 1518 call writediagfi(ngrid,"c_"//trim(noms(iq)), 1519 $ "column","mol cm-2",2,colden(1,iq)) 1520 end if 1513 1521 end do 1514 1522 end if ! of if (thermochem.or.photochem) … … 1635 1643 call WRITEDIAGFI(ngrid,"co2col","CO2 column","kg.m-2",2, 1636 1644 & co2col) 1637 !!!!! FL1638 ! do iq = 1,nq1639 ! if (noms(iq) .ne. "dust_mass" .and.1640 ! $ noms(iq) .ne. "dust_number") then1641 ! call writediagfi(ngrid,"c_"//trim(noms(iq)),1642 ! $ "column","mol cm-2",2,colden(1,iq))1643 ! end if1644 ! end do1645 !!!!! FL1646 1645 endif ! of if (tracer.and.(igcm_co2.ne.0)) 1647 1646
Note: See TracChangeset
for help on using the changeset viewer.