Changeset 463 for trunk/LMDZ.MARS/libf/aeronomars
- Timestamp:
- Dec 9, 2011, 8:52:27 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
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.)
Note: See TracChangeset
for help on using the changeset viewer.