121 &, kind_io4, kind_io8
125 use module_iounitdef
, only : niaercm
130 use funcphys
, only : fpkap
131 use gfs_phy_tracer_config
, only : gfs_phy_tracer, trcindx
138 character(40),
parameter :: &
139 & VTAGAER=
'NCEP-Radiation_aerosols v5.2 Jan 2013 ' 151 integer,
parameter,
public ::
nspc = 5
155 real (kind=kind_phys),
parameter ::
f_zero = 0.0
156 real (kind=kind_phys),
parameter ::
f_one = 1.0
172 integer,
parameter,
public ::
nwvsol = 151
175 integer,
parameter,
public ::
nwvtot = 57600
177 integer,
parameter,
public ::
nwvtir = 4000
180 integer,
dimension(NWVSOL),
save ::
nwvns0 182 data nwvns0 / 100, 11, 14, 18, 24, 33, 50, 83, 12, 12, &
183 & 13, 15, 15, 17, 18, 20, 21, 24, 26, 30, 32, 37, 42, &
184 & 47, 55, 64, 76, 91, 111, 139, 179, 238, 333, 41, 42, 45, &
185 & 46, 48, 51, 53, 55, 58, 61, 64, 68, 71, 75, 79, 84, &
186 & 89, 95, 101, 107, 115, 123, 133, 142, 154, 167, 181, 197, 217, &
187 & 238, 263, 293, 326, 368, 417, 476, 549, 641, 758, 909, 101, 103, &
188 & 105, 108, 109, 112, 115, 117, 119, 122, 125, 128, 130, 134, 137, &
189 & 140, 143, 147, 151, 154, 158, 163, 166, 171, 175, 181, 185, 190, &
190 & 196, 201, 207, 213, 219, 227, 233, 240, 248, 256, 264, 274, 282, &
191 & 292, 303, 313, 325, 337, 349, 363, 377, 392, 408, 425, 444, 462, &
192 & 483, 505, 529, 554, 580, 610, 641, 675, 711, 751, 793, 841, 891, &
193 & 947,1008,1075,1150,1231,1323,1425,1538,1667,1633,14300 /
196 real (kind=kind_phys),
dimension(NWVSOL),
save ::
s0intv 199 & 1.60000e-6, 2.88000e-5, 3.60000e-5, 4.59200e-5, 6.13200e-5, &
200 & 8.55000e-5, 1.28600e-4, 2.16000e-4, 2.90580e-4, 3.10184e-4, &
201 & 3.34152e-4, 3.58722e-4, 3.88050e-4, 4.20000e-4, 4.57056e-4, &
202 & 4.96892e-4, 5.45160e-4, 6.00600e-4, 6.53600e-4, 7.25040e-4, &
203 & 7.98660e-4, 9.11200e-4, 1.03680e-3, 1.18440e-3, 1.36682e-3, &
204 & 1.57560e-3, 1.87440e-3, 2.25500e-3, 2.74500e-3, 3.39840e-3, &
205 & 4.34000e-3, 5.75400e-3, 7.74000e-3, 9.53050e-3, 9.90192e-3, &
206 & 1.02874e-2, 1.06803e-2, 1.11366e-2, 1.15830e-2, 1.21088e-2, &
207 & 1.26420e-2, 1.32250e-2, 1.38088e-2, 1.44612e-2, 1.51164e-2, &
208 & 1.58878e-2, 1.66500e-2, 1.75140e-2, 1.84450e-2, 1.94106e-2 /
210 & 2.04864e-2, 2.17248e-2, 2.30640e-2, 2.44470e-2, 2.59840e-2, &
211 & 2.75940e-2, 2.94138e-2, 3.13950e-2, 3.34800e-2, 3.57696e-2, &
212 & 3.84054e-2, 4.13490e-2, 4.46880e-2, 4.82220e-2, 5.22918e-2, &
213 & 5.70078e-2, 6.19888e-2, 6.54720e-2, 6.69060e-2, 6.81226e-2, &
214 & 6.97788e-2, 7.12668e-2, 7.27100e-2, 7.31610e-2, 7.33471e-2, &
215 & 7.34814e-2, 7.34717e-2, 7.35072e-2, 7.34939e-2, 7.35202e-2, &
216 & 7.33249e-2, 7.31713e-2, 7.35462e-2, 7.36920e-2, 7.23677e-2, &
217 & 7.25023e-2, 7.24258e-2, 7.20766e-2, 7.18284e-2, 7.32757e-2, &
218 & 7.31645e-2, 7.33277e-2, 7.36128e-2, 7.33752e-2, 7.28965e-2, &
219 & 7.24924e-2, 7.23307e-2, 7.21050e-2, 7.12620e-2, 7.10903e-2 /
220 data s0intv(101:151) / 7.12714e-2, &
221 & 7.08012e-2, 7.03752e-2, 7.00350e-2, 6.98639e-2, 6.90690e-2, &
222 & 6.87621e-2, 6.52080e-2, 6.65184e-2, 6.60038e-2, 6.47615e-2, &
223 & 6.44831e-2, 6.37206e-2, 6.24102e-2, 6.18698e-2, 6.06320e-2, &
224 & 5.83498e-2, 5.67028e-2, 5.51232e-2, 5.48645e-2, 5.12340e-2, &
225 & 4.85581e-2, 4.85010e-2, 4.79220e-2, 4.44058e-2, 4.48718e-2, &
226 & 4.29373e-2, 4.15242e-2, 3.81744e-2, 3.16342e-2, 2.99615e-2, &
227 & 2.92740e-2, 2.67484e-2, 1.76904e-2, 1.40049e-2, 1.46224e-2, &
228 & 1.39993e-2, 1.19574e-2, 1.06386e-2, 1.00980e-2, 8.63808e-3, &
229 & 6.52736e-3, 4.99410e-3, 4.39350e-3, 2.21676e-3, 1.33812e-3, &
230 & 1.12320e-3, 5.59000e-4, 3.60000e-4, 2.98080e-4, 7.46294e-5 /
242 integer,
allocatable,
save ::
ivolae(:,:,:)
253 integer,
parameter ::
nxc = 5
254 integer,
parameter ::
nae = 7
255 integer,
parameter ::
ndm = 5
264 real (kind=kind_phys),
dimension(NRHLEV),
save ::
rhlev 265 data rhlev(:) / 0.0, 0.5, 0.7, 0.8, 0.9, 0.95, 0.98, 0.99 /
274 real (kind=kind_phys),
save,
dimension(NDM,NAE) ::
haer,
prsref, &
297 real (kind=kind_phys),
allocatable,
save,
dimension(:,:) :: &
298 & extrhi, scarhi, ssarhi, asyrhi
299 real (kind=kind_phys),
allocatable,
save,
dimension(:,:,:) :: &
300 & extrhd, scarhd, ssarhd, asyrhd
301 real (kind=kind_phys),
allocatable,
save,
dimension(:) :: &
311 real (kind=kind_phys),
dimension(NXC,IMXAE,JMXAE),
save ::
cmixg 312 real (kind=kind_phys),
dimension( 2 ,IMXAE,JMXAE),
save ::
denng 313 integer,
dimension(NXC,IMXAE,JMXAE),
save ::
idxcg 314 integer,
dimension( IMXAE,JMXAE),
save ::
kprfg 332 data rhlev_grt (:)/ .00, .05, .10, .15, .20, .25, .30, .35, &
333 & .40, .45, .50, .55, .60, .65, .70, .75, .80, .81, .82, &
334 & .83, .84, .85, .86, .87, .88, .89, .90, .91, .92, .93, &
335 & .94, .95, .96, .97, .98, .99 /
369 real (kind=kind_phys),
allocatable,
dimension(:,:) :: &
370 & rhidext0_grt, rhidssa0_grt, rhidasy0_grt
371 real (kind=kind_phys),
allocatable,
dimension(:,:,:):: &
372 & rhdpext0_grt, rhdpssa0_grt, rhdpasy0_grt
383 real (kind=kind_phys),
allocatable,
save,
dimension(:,:) :: &
384 & extrhi_grt, ssarhi_grt, asyrhi_grt
385 real (kind=kind_phys),
allocatable,
save,
dimension(:,:,:) :: &
386 & extrhd_grt, ssarhd_grt, asyrhd_grt
404 integer,
parameter ::
imxg = 144
405 integer,
parameter ::
jmxg = 91
406 integer,
parameter ::
kmxg = 30
410 real (kind=kind_phys),
parameter ::
dltx = 360.0 / float(
imxg)
411 real (kind=kind_phys),
parameter ::
dlty = 180.0 / float(
jmxg-1)
419 real (kind=kind_phys),
allocatable,
save::
psclmg(:,:,:), &
423 real (kind=kind_phys),
allocatable,
save,
dimension(:) :: &
424 & geos_rlon, geos_rlat
431 real (kind=kind_io4),
allocatable ::
molwgt(:)
485 integer :: dust1, dust2, dust3, dust4, dust5, &
488 & waso_phobic, waso_philic, &
489 & soot_phobic, soot_philic
495 integer :: du001, du002, du003, du004, du005, &
496 & ss001, ss002, ss003, ss004, ss005, &
498 & ocphobic, ocphilic, &
525 data idxspc / 1, 2, 1, 1, 1, 1, 3, 5, 5, 4 /
530 real (kind=kind_phys),
parameter ::
wvn550 = 1.0e4/0.55
608 integer,
intent(in) :: NLAY, me
613 real (kind=kind_phys),
dimension(NWVTOT) :: solfwv
614 real (kind=kind_phys),
dimension(NWVTIR) :: eirfwv
671 & ( solfwv, eirfwv, me &
686 print *,
' !!! ERROR in aerosol model scheme selection', &
750 print *,
' - Using OPAC-seasonal climatology for tropospheric', &
753 print *,
' - Using GOCART-climatology for tropospheric', &
756 print *,
' - Using GOCART-prognostic aerosols for tropospheric', &
759 print *,
' !!! ERROR in selection of aerosol model scheme', &
768 print *,
' - No tropospheric/volcanic aerosol effect included' 769 print *,
' Input values of aerosol optical properties to' &
770 & ,
' both SW and LW radiations are set to zeros' 773 print *,
' - Include stratospheric volcanic aerosol effect' 775 print *,
' - No stratospheric volcanic aerosol effect' 779 print *,
' - Compute multi-band aerosol optical' &
780 & ,
' properties for SW input parameters' 782 print *,
' - No SW radiation aerosol effect, values of' &
783 & ,
' aerosol properties to SW input are set to zeros' 788 print *,
' - Compute 1 broad-band aerosol optical' &
789 & ,
' properties for LW input parameters' 791 print *,
' - Compute multi-band aerosol optical' &
792 & ,
' properties for LW input parameters' 795 print *,
' - No LW radiation aerosol effect, values of' &
796 & ,
' aerosol properties to LW input are set to zeros' 845 real (kind=kind_phys) :: soltot, tmp1, tmp2, tmp3
847 integer :: nb, nw, nw1, nw2, nmax, nmin
868 nw2 = nw1 +
nwvns0(nb) - 1
887 eirfwv(nw) = (tmp1 * tmp3**3) / (exp(tmp2*tmp3) - 1.0)
926 if ( .not.
allocated(
ivolae) )
then 927 allocate (
ivolae(12,4,10) )
944 & ( solfwv, eirfwv, me &
993 real (kind=kind_phys),
dimension(:) :: solfwv
994 real (kind=kind_phys),
dimension(:) :: eirfwv
996 integer,
intent(in) :: me
1001 real (kind=kind_phys),
dimension(NAERBND,NCM1) :: &
1002 & rhidext0, rhidsca0, rhidssa0, rhidasy0
1003 real (kind=kind_phys),
dimension(NAERBND,NRHLEV,NCM2):: &
1004 & rhdpext0, rhdpsca0, rhdpssa0, rhdpasy0
1005 real (kind=kind_phys),
dimension(NAERBND) :: straext0
1007 real (kind=kind_phys),
dimension(NSWBND,NAERBND) :: solwaer
1008 real (kind=kind_phys),
dimension(NSWBND) :: solbnd
1009 real (kind=kind_phys),
dimension(NLWBND,NAERBND) :: eirwaer
1010 real (kind=kind_phys),
dimension(NLWBND) :: eirbnd
1012 integer,
dimension(NSWBND) :: nv1, nv2
1013 integer,
dimension(NLWBND) :: nr1, nr2
1112 integer,
dimension(NAERBND) :: iendwv
1114 integer :: i, j, k, m, mb, ib, ii, id, iw, iw1, iw2
1116 real (kind=kind_phys) :: sumsol, sumir
1118 logical :: file_exist
1119 character :: cline*80
1127 if ( file_exist )
then 1129 open (unit=niaercm,file=
aeros_file,status=
'OLD', &
1133 print *,
' Requested aerosol data file "',
aeros_file, &
1135 print *,
' *** Stopped in subroutine aero_init !!' 1142 read (niaercm,12) cline
1154 if ( .not.
allocated(
extrhi ) )
then 1166 read(niaercm,21) cline
1168 read(niaercm,22) iendwv(:)
1171 read(niaercm,21) cline
1172 read(niaercm,24)
haer(:,:)
1175 read(niaercm,21) cline
1176 read(niaercm,26)
prsref(:,:)
1179 read(niaercm,21) cline
1180 read(niaercm,28) rhidext0(:,:)
1183 read(niaercm,21) cline
1184 read(niaercm,28) rhidsca0(:,:)
1186 read(niaercm,21) cline
1187 read(niaercm,28) rhidssa0(:,:)
1189 read(niaercm,21) cline
1190 read(niaercm,28) rhidasy0(:,:)
1192 read(niaercm,21) cline
1193 read(niaercm,28) rhdpext0(:,:,:)
1195 read(niaercm,21) cline
1196 read(niaercm,28) rhdpsca0(:,:,:)
1198 read(niaercm,21) cline
1199 read(niaercm,28) rhdpssa0(:,:,:)
1201 read(niaercm,21) cline
1202 read(niaercm,28) rhdpasy0(:,:,:)
1204 read(niaercm,21) cline
1205 read(niaercm,28) straext0(:)
1224 iw1 = nint(wvnsw1(mb))
1225 iw2 = nint(wvnsw2(mb))
1227 if ( wvnsw2(mb)>=
wvn550 .and.
wvn550>=wvnsw1(mb) )
then 1231 lab_swdowhile :
do while ( iw1 > iendwv(ii) )
1232 if ( ii ==
naerbnd )
exit lab_swdowhile
1240 solbnd(ib) = solbnd(ib) + solfwv(iw)
1241 sumsol = sumsol + solfwv(iw)
1243 if ( iw == iendwv(ii) )
then 1244 solwaer(ib,ii) = sumsol
1253 if ( iw2 /= iendwv(ii) )
then 1254 solwaer(ib,ii) = sumsol
1281 lab_lwdowhile :
do while ( iw1 > iendwv(ii) )
1282 if ( ii ==
naerbnd )
exit lab_lwdowhile
1290 eirbnd(ib) = eirbnd(ib) + eirfwv(iw)
1291 sumir = sumir + eirfwv(iw)
1293 if ( iw == iendwv(ii) )
then 1294 eirwaer(ib,ii) = sumir
1303 if ( iw2 /= iendwv(ii) )
then 1304 eirwaer(ib,ii) = sumir
1413 real (kind=kind_phys) :: sumk, sums, sumok, sumokg, sumreft, &
1414 & sp, refb, reft, rsolbd, rirbd
1416 integer :: ib, nb, ni, nh, nc
1425 rsolbd =
f_one / solbnd(nb)
1436 do ni = nv1(nb), nv2(nb)
1437 sp = sqrt( (
f_one - rhidssa0(ni,nc)) &
1438 & / (
f_one - rhidssa0(ni,nc)*rhidasy0(ni,nc)) )
1440 sumreft = sumreft + reft*solwaer(nb,ni)
1442 sumk = sumk + rhidext0(ni,nc)*solwaer(nb,ni)
1443 sums = sums + rhidsca0(ni,nc)*solwaer(nb,ni)
1444 sumok = sumok + rhidssa0(ni,nc)*solwaer(nb,ni) &
1446 sumokg = sumokg + rhidssa0(ni,nc)*solwaer(nb,ni) &
1447 & * rhidext0(ni,nc)*rhidasy0(ni,nc)
1450 refb = sumreft * rsolbd
1452 extrhi(nc,nb) = sumk * rsolbd
1453 scarhi(nc,nb) = sums * rsolbd
1454 asyrhi(nc,nb) = sumokg / (sumok + 1.0e-10)
1455 ssarhi(nc,nb) = 4.0*refb &
1469 do ni = nv1(nb), nv2(nb)
1470 sp = sqrt( (
f_one - rhdpssa0(ni,nh,nc)) &
1471 & / (
f_one - rhdpssa0(ni,nh,nc)*rhdpasy0(ni,nh,nc)) )
1473 sumreft = sumreft + reft*solwaer(nb,ni)
1475 sumk = sumk + rhdpext0(ni,nh,nc)*solwaer(nb,ni)
1476 sums = sums + rhdpsca0(ni,nh,nc)*solwaer(nb,ni)
1477 sumok = sumok + rhdpssa0(ni,nh,nc)*solwaer(nb,ni) &
1478 & * rhdpext0(ni,nh,nc)
1479 sumokg = sumokg + rhdpssa0(ni,nh,nc)*solwaer(nb,ni) &
1480 & * rhdpext0(ni,nh,nc)*rhdpasy0(ni,nh,nc)
1483 refb = sumreft * rsolbd
1485 extrhd(nh,nc,nb) = sumk * rsolbd
1486 scarhd(nh,nc,nb) = sums * rsolbd
1487 asyrhd(nh,nc,nb) = sumokg / (sumok + 1.0e-10)
1488 ssarhd(nh,nc,nb) = 4.0*refb &
1496 do ni = nv1(nb), nv2(nb)
1497 sumk = sumk + straext0(ni)*solwaer(nb,ni)
1525 rirbd =
f_one / eirbnd(nb)
1536 do ni = nr1(nb), nr2(nb)
1537 sp = sqrt( (
f_one - rhidssa0(ni,nc)) &
1538 & / (
f_one - rhidssa0(ni,nc)*rhidasy0(ni,nc)) )
1540 sumreft = sumreft + reft*eirwaer(nb,ni)
1542 sumk = sumk + rhidext0(ni,nc)*eirwaer(nb,ni)
1543 sums = sums + rhidsca0(ni,nc)*eirwaer(nb,ni)
1544 sumok = sumok + rhidssa0(ni,nc)*eirwaer(nb,ni) &
1546 sumokg = sumokg + rhidssa0(ni,nc)*eirwaer(nb,ni) &
1547 & * rhidext0(ni,nc)*rhidasy0(ni,nc)
1550 refb = sumreft * rirbd
1552 extrhi(nc,ib) = sumk * rirbd
1553 scarhi(nc,ib) = sums * rirbd
1554 asyrhi(nc,ib) = sumokg / (sumok + 1.0e-10)
1555 ssarhi(nc,ib) = 4.0*refb &
1569 do ni = nr1(nb), nr2(nb)
1570 sp = sqrt( (
f_one - rhdpssa0(ni,nh,nc)) &
1571 & / (
f_one - rhdpssa0(ni,nh,nc)*rhdpasy0(ni,nh,nc)) )
1573 sumreft = sumreft + reft*eirwaer(nb,ni)
1575 sumk = sumk + rhdpext0(ni,nh,nc)*eirwaer(nb,ni)
1576 sums = sums + rhdpsca0(ni,nh,nc)*eirwaer(nb,ni)
1577 sumok = sumok + rhdpssa0(ni,nh,nc)*eirwaer(nb,ni) &
1578 & * rhdpext0(ni,nh,nc)
1579 sumokg = sumokg + rhdpssa0(ni,nh,nc)*eirwaer(nb,ni) &
1580 & * rhdpext0(ni,nh,nc)*rhdpasy0(ni,nh,nc)
1583 refb = sumreft * rirbd
1585 extrhd(nh,nc,ib) = sumk * rirbd
1586 scarhd(nh,nc,ib) = sums * rirbd
1587 asyrhd(nh,nc,ib) = sumokg / (sumok + 1.0e-10)
1588 ssarhd(nh,nc,ib) = 4.0*refb &
1596 do ni = nr1(nb), nr2(nb)
1597 sumk = sumk + straext0(ni)*eirwaer(nb,ni)
1646 & ( iyear, imon, me )
1673 integer,
intent(in) :: iyear, imon, me
1681 if ( imon < 1 .or. imon > 12 )
then 1682 print *,
' ***** ERROR in specifying requested month !!! ', &
1684 print *,
' ***** STOPPED in subroutinte aer_update !!!' 1746 real (kind=kind_phys) :: cmix(
nxc), denn, tem
1747 integer :: idxc(
nxc), kprf
1749 integer :: i, id, j, k, m, nc
1750 logical :: file_exist
1752 character :: cline*80, ctyp*3
1760 if ( file_exist )
then 1762 open (unit=niaercm,file=
aeros_file,status=
'OLD', &
1767 print *,
' Opened aerosol data file: ',
aeros_file 1770 print *,
' Requested aerosol data file "',
aeros_file, &
1772 print *,
' *** Stopped in subroutine trop_update !!' 1795 lab_do_12mon :
do m = 1, 12
1797 read(niaercm,12) cline
1800 if ( m /= imon )
then 1809 if ( me == 0 ) print *,
' --- Reading ',cline
1813 read(niaercm,14) (idxc(k),cmix(k),k=1,
nxc),kprf,denn,nc,ctyp
1814 14
format(5(i2,e11.4),i2,f8.2,i3,1x,a3)
1818 if ( kprf >= 6 )
then 1826 idxcg(k,i,j) = idxc(k)
1827 cmixg(k,i,j) = cmix(k)
1903 logical :: file_exist
1905 character :: cline*80, volcano_file*32
1906 data volcano_file /
'volcanic_aerosols_1850-1859.txt ' /
1917 kyrstr = iyear - mod(iyear,10)
1930 print *,
' Request volcanic date out of range,', &
1931 &
' optical depth set to lowest value' 1935 60
format(i4.4,
'-',i4.4)
1937 inquire (file=volcano_file, exist=file_exist)
1938 if ( file_exist )
then 1940 open (unit=niaercm,file=volcano_file,status=
'OLD', &
1943 read(niaercm,62) cline
1948 print *,
' Opened volcanic data file: ',volcano_file
1954 read(niaercm,64) (
ivolae(i,j,k),i=1,12)
1961 print *,
' Requested volcanic data file "', &
1962 & volcano_file,
'" not found!' 1963 print *,
' *** Stopped in subroutine VOLC_AERINIT !!' 1973 print *,
' CHECK: Sample Volcanic data used for month, year:', &
2018 & ( prsi,prsl,prslk,tvly,rhlay,slmsk,tracer,xlon,xlat, &
2019 & imax,nlay,nlp1, lsswr,lslwr, &
2080 integer,
intent(in) :: IMAX, NLAY, NLP1
2082 real (kind=kind_phys),
dimension(:,:),
intent(in) :: prsi, prsl, &
2083 & prslk, tvly, rhlay
2084 real (kind=kind_phys),
dimension(:),
intent(in) :: xlon, xlat, &
2086 real (kind=kind_phys),
dimension(:,:,:),
intent(in):: tracer
2088 logical,
intent(in) :: lsswr, lslwr
2092 real (kind=kind_phys),
dimension(:,:,:,:),
intent(out) :: &
2095 real (kind=kind_phys),
dimension(:,:) ,
intent(out) :: aerodp
2098 real (kind=kind_phys),
parameter :: psrfh = 5.0
2100 real (kind=kind_phys),
dimension(IMAX) :: alon,alat,volcae,rdelp
2102 real (kind=kind_phys) :: prsln(nlp1),hz(imax,nlp1),dz(imax,nlay)
2103 real (kind=kind_phys) :: tmp1, tmp2, psrfl
2105 integer :: kcutl(imax), kcuth(imax)
2106 integer :: i, i1, j, k, m, mb, kh, kl
2108 logical :: laddsw=.false., laersw=.false.
2109 logical :: laddlw=.false., laerlw=.false.
2112 real (kind=kind_phys),
parameter :: rdg = 180.0 /
con_pi 2113 real (kind=kind_phys),
parameter :: rovg = 0.001 *
con_rd /
con_g 2145 if ( .not. (lsswr .or. lslwr) )
then 2160 alon(i) = xlon(i) * rdg
2161 if (alon(i) <
f_zero) alon(i) = alon(i) + 360.0
2162 alat(i) = xlat(i) * rdg
2171 lab_do_imax :
do i = 1, imax
2173 lab_if_flip :
if (
ivflip == 1)
then 2176 prsln(k) = log(prsi(i,k))
2178 prsln(nlp1)= log(prsl(i,nlay))
2181 dz(i,k) = rovg * (prsln(k) - prsln(k+1)) * tvly(i,k)
2183 dz(i,nlay) = 2.0 * dz(i,nlay)
2187 hz(i,k+1) = hz(i,k) + dz(i,k)
2192 prsln(1) = log(prsl(i,1))
2194 prsln(k) = log(prsi(i,k))
2198 dz(i,k) = rovg * (prsln(k+1) - prsln(k)) * tvly(i,k)
2200 dz(i,1) = 2.0 * dz(i,1)
2204 hz(i,k) = hz(i,k+1) + dz(i,k)
2226 & ( prsi,prsl,prslk,tvly,rhlay,dz,hz,tracer, &
2227 & alon,alat,slmsk, laersw,laerlw, &
2231 & aerosw,aerolw,aerodp &
2276 & ( alon,alat,prslk,rhlay,dz,hz,
nswlwbd, &
2277 & prsl,tvly,tracer, &
2278 & imax,nlay,nlp1,
ivflip, lsswr,lslwr, &
2310 if ( alat(i) > 46.0 )
then 2312 else if ( alat(i) > 44.0 )
then 2313 volcae(i) = 5.0e-5 &
2315 else if ( alat(i) > 1.0 )
then 2317 else if ( alat(i) > -1.0 )
then 2318 volcae(i) = 5.0e-5 &
2320 else if ( alat(i) >-44.0 )
then 2322 else if ( alat(i) >-46.0 )
then 2323 volcae(i) = 5.0e-5 &
2337 tmp1 = abs( alat(i) )
2338 if ( tmp1 > 70.0 )
then 2340 elseif ( tmp1 < 20.0 )
then 2343 psrfl = 110.0 + 2.0*tmp1
2348 rdelp(i) =
f_one / prsi(i,2)
2350 lab_do_kcuth0 :
do k = 2, nlay-2
2351 if ( prsi(i,k) >= psrfh )
then 2357 lab_do_kcutl0 :
do k = 2, nlay-2
2358 if ( prsi(i,k) >= psrfl )
then 2360 rdelp(i) =
f_one / (prsi(i,k) - prsi(i,kcuth(i)))
2373 if ( wvnsw1(mb) > 20000 )
then 2375 elseif ( wvnsw2(mb) < 20000 )
then 2380 tmp1 = (0.275e-4 * (wvnsw2(mb)+wvnsw1(mb))) ** tmp2
2386 tmp2 = tmp1 * ((prsi(i,k+1) - prsi(i,k)) * rdelp(i))
2387 aerosw(i,k,m,1) = aerosw(i,k,m,1) + tmp2*volcae(i)
2392 if ( aerosw(i,kl,m,1) > 10.*aerosw(i,kl+1,m,1) )
then 2393 tmp2 = aerosw(i,kl,m,1) + aerosw(i,kl+1,m,1)
2394 aerosw(i,kl ,m,1) = 0.8 * tmp2
2395 aerosw(i,kl+1,m,1) = 0.2 * tmp2
2419 tmp1 = (0.55 / 11.0) ** 1.2
2424 tmp2 = tmp1 * ((prsi(i,k+1) - prsi(i,k)) * rdelp(i)) &
2427 aerolw(i,k,m,1) = aerolw(i,k,m,1) + tmp2
2441 tmp2 = tmp1 * ((prsi(i,k+1)-prsi(i,k)) * rdelp(i))
2442 aerolw(i,k,m,1) = aerolw(i,k,m,1) + tmp2*volcae(i)
2456 tmp1 = abs( alat(i) )
2457 if ( tmp1 > 70.0 )
then 2459 elseif ( tmp1 < 20.0 )
then 2462 psrfl = 110.0 + 2.0*tmp1
2467 rdelp(i) =
f_one / prsi(i,nlay-1)
2469 lab_do_kcuth1 :
do k = nlay-1, 2, -1
2470 if ( prsi(i,k) >= psrfh )
then 2476 lab_do_kcutl1 :
do k = nlay, 2, -1
2477 if ( prsi(i,k) >= psrfl )
then 2479 rdelp(i) =
f_one / (prsi(i,k) - prsi(i,kcuth(i)+1))
2491 if ( wvnsw1(mb) > 20000 )
then 2493 elseif ( wvnsw2(mb) < 20000 )
then 2498 tmp1 = (0.275e-4 * (wvnsw2(mb)+wvnsw1(mb))) ** tmp2
2504 tmp2 = tmp1 * ((prsi(i,k) - prsi(i,k+1)) * rdelp(i))
2505 aerosw(i,k,m,1) = aerosw(i,k,m,1) + tmp2*volcae(i)
2510 if ( aerosw(i,kl,m,1) > 10.*aerosw(i,kl-1,m,1) )
then 2511 tmp2 = aerosw(i,kl,m,1) + aerosw(i,kl-1,m,1)
2512 aerosw(i,kl ,m,1) = 0.8 * tmp2
2513 aerosw(i,kl-1,m,1) = 0.2 * tmp2
2536 tmp1 = (0.55 / 11.0) ** 1.2
2541 tmp2 = tmp1 * ((prsi(i,k) - prsi(i,k+1)) * rdelp(i)) &
2544 aerolw(i,k,m,1) = aerolw(i,k,m,1) + tmp2
2558 tmp2 = tmp1 * ((prsi(i,k)-prsi(i,k+1)) * rdelp(i))
2559 aerolw(i,k,m,1) = aerolw(i,k,m,1) + tmp2*volcae(i)
2584 & ( prsi,prsl,prslk,tvly,rhlay,dz,hz,tracer, &
2585 & alon,alat,slmsk, laersw,laerlw, &
2589 & aerosw,aerolw,aerodp &
2654 integer,
intent(in) :: IMAX, NLAY, NLP1
2656 logical,
intent(in) :: laersw, laerlw
2658 real (kind=kind_phys),
dimension(:,:),
intent(in) :: prsi, prsl, &
2659 & prslk, tvly, rhlay, dz, hz
2660 real (kind=kind_phys),
dimension(:),
intent(in) :: alon, alat, &
2662 real (kind=kind_phys),
dimension(:,:,:),
intent(in):: tracer
2665 real (kind=kind_phys),
dimension(:,:,:,:),
intent(out) :: &
2667 real (kind=kind_phys),
dimension(:,:) ,
intent(out) :: aerodp
2670 real (kind=kind_phys),
dimension(NCM) :: cmix
2671 real (kind=kind_phys),
dimension( 2) :: denn
2672 real (kind=kind_phys),
dimension(NSPC) :: spcodp
2674 real (kind=kind_phys),
dimension(NLAY) :: delz, rh1, dz1
2675 integer,
dimension(NLAY) :: idmaer
2677 real (kind=kind_phys),
dimension(NLAY,NSWLWBD):: tauae,ssaae,asyae
2680 real (kind=kind_phys) :: tmp1, tmp2, rps, dtmp, h1
2681 real (kind=kind_phys) :: wi, wj, w11, w12, w21, w22
2683 integer :: i, ii, i1, i2, i3, j1, j2, j3, k, m, m1, &
2687 real (kind=kind_phys),
parameter :: dltg = 360.0 / float(
imxae)
2688 real (kind=kind_phys),
parameter :: hdlt = 0.5 * dltg
2689 real (kind=kind_phys),
parameter :: rdlt = 1.0 / dltg
2701 lab_do_imax :
do i = 1, imax
2707 lab_do_imxae :
do while ( i3 <=
imxae )
2708 tmp1 = dltg * (i3 - 1)
2709 dtmp = alon(i) - tmp1
2712 if ( dtmp > dltg )
then 2714 if ( i3 >
imxae )
then 2715 print *,
' ERROR! In setclimaer alon>360. ipt =',i, &
2716 &
', dltg,alon,tlon,dlon =',dltg,alon(i),tmp1,dtmp
2719 elseif ( dtmp >=
f_zero )
then 2721 i2 = mod(i3,
imxae) + 1
2723 if ( dtmp <= hdlt )
then 2733 print *,
' ERROR! In setclimaer alon< 0. ipt =',i, &
2734 &
', dltg,alon,tlon,dlon =',dltg,alon(i),tmp1,dtmp
2744 lab_do_jmxae :
do while ( j3 <=
jmxae )
2745 tmp2 = 90.0 - dltg * (j3 - 1)
2746 dtmp = tmp2 - alat(i)
2749 if ( dtmp > dltg )
then 2751 if ( j3 >=
jmxae )
then 2752 print *,
' ERROR! In setclimaer alat<-90. ipt =',i, &
2753 &
', dltg,alat,tlat,dlat =',dltg,alat(i),tmp2,dtmp
2756 elseif ( dtmp >=
f_zero )
then 2760 if ( dtmp <= hdlt )
then 2770 print *,
' ERROR! In setclimaer alat>90. ipt =',i, &
2771 &
', dltg,alat,tlat,dlat =',dltg,alat(i),tmp2,dtmp
2786 if ( kp /= kpa )
then 2787 if ( kpa == 6 )
then 2789 if ( slmsk(i) >
f_zero )
then 2796 elseif ( kpa == 7 )
then 2798 if ( slmsk(i) <=
f_zero )
then 2815 w12 = (
f_one-wi) * wj
2816 w21 = wi * (
f_one-wj)
2830 denn(m) = w11*
denng(m,i1,j1) + w12*
denng(m,i1,j2) &
2840 cmix(ii) = cmix(ii) + w11*
cmixg(m,i1,j1)
2844 cmix(ii) = cmix(ii) + w12*
cmixg(m,i1,j2)
2848 cmix(ii) = cmix(ii) + w21*
cmixg(m,i2,j1)
2852 cmix(ii) = cmix(ii) + w22*
cmixg(m,i2,j2)
2868 lab_if_flip :
if (
ivflip == 1)
then 2870 if ( prsi(i,1) > 100.0 )
then 2871 rps =
f_one / prsi(i,1)
2873 print *,
' !!! (1) Error in subr radiation_aerosols:', &
2874 &
' unrealistic surface pressure =', i,prsi(i,1)
2880 if (prsi(i,k+1)*rps <
sigref(ii,kp))
then 2896 delz(k) = tmp1 * (exp(-hz(i,k)*tmp2)-exp(-hz(i,k+1)*tmp2))
2904 if ( prsi(i,nlp1) > 100.0 )
then 2905 rps = 1.0 / prsi(i,nlp1)
2907 print *,
' !!! (2) Error in subr radiation_aerosols:', &
2908 &
' unrealistic surface pressure =', i,prsi(i,nlp1)
2913 if (prsi(i,k)*rps <
sigref(ii,kp))
then 2929 delz(k) = tmp1 * (exp(-hz(i,k+1)*tmp2)-exp(-hz(i,k)*tmp2))
2956 aerosw(i,k,m,1) = tauae(k,m)
2957 aerosw(i,k,m,2) = ssaae(k,m)
2958 aerosw(i,k,m,3) = asyae(k,m)
2964 aerodp(i,1) = aerodp(i,1) + tauae(k,
nv_aod)
2970 aerodp(i,m+1) = spcodp(m)
2982 aerolw(i,k,m,1) = tauae(k,m1)
2983 aerolw(i,k,m,2) = ssaae(k,m1)
2984 aerolw(i,k,m,3) = asyae(k,m1)
2991 aerolw(i,k,m,1) = tauae(k,m1)
2992 aerolw(i,k,m,2) = ssaae(k,m1)
2993 aerolw(i,k,m,3) = asyae(k,m1)
3042 real (kind=kind_phys) :: crt1, crt2
3043 parameter(crt1=30.0, crt2=0.03333)
3049 real (kind=kind_phys) :: cm, hd, hdi, sig0u, sig0l, ratio, tt0, &
3050 & ex00, sc00, ss00, as00, ex01, sc01, ss01, as01, tt1, &
3051 & ex02, sc02, ss02, as02, ex03, sc03, ss03, as03, tt2, &
3052 & ext1, sca1, ssa1, asy1, drh0, drh1, rdrh
3054 integer :: ih1, ih2, kk, idom, icmp, ib, ii, ic, ic1
3063 lab_do_layer :
do kk = 1, nlay
3068 do while ( rh1(kk) >
rhlev(ih2) )
3072 ih1 = max( 1, ih2-1 )
3076 drh1 = rh1(kk) -
rhlev(ih1)
3077 if ( ih1 == ih2 )
then 3087 lab_if_idom :
if (idom == 5)
then 3094 asyae(kk,ib) = 0.696
3101 elseif (idom == 4)
then lab_if_idom
3105 tauae(kk,ib) =
extstra(ib) * delz(kk)
3108 asyae(kk,ib) = 0.696
3117 spcodp(idx) = spcodp(idx) + tauae(kk,
nv_aod)
3119 elseif (idom == 3)
then lab_if_idom
3134 ex03 =
extrhd(ih1,1,ib) &
3136 sc03 =
scarhd(ih1,1,ib) &
3138 ss03 =
ssarhd(ih1,1,ib) &
3140 as03 =
asyrhd(ih1,1,ib) &
3143 ext1 = 0.17e-3*ex01 + 0.4*ex02 + 0.59983*ex03
3144 sca1 = 0.17e-3*sc01 + 0.4*sc02 + 0.59983*sc03
3145 ssa1 = 0.17e-3*ss01*ex01 + 0.4*ss02*ex02 + 0.59983*ss03*ex03
3146 asy1 = 0.17e-3*as01*sc01 + 0.4*as02*sc02 + 0.59983*as03*sc03
3148 tauae(kk,ib) = ext1 * 730.0 * delz(kk)
3149 ssaae(kk,ib) = min(
f_one, ssa1/ext1)
3150 asyae(kk,ib) = min(
f_one, asy1/sca1)
3154 spcodp(1) = spcodp(1) + 0.17e-3*ex01*730.0*delz(kk)
3155 spcodp(2) = spcodp(2) + 0.4 *ex02*730.0*delz(kk)
3156 spcodp(3) = spcodp(3) + 0.59983*ex03*730.0*delz(kk)
3161 elseif (idom == 1)
then lab_if_idom
3164 lab_do_ib :
do ib = 1,
nswlwbd 3170 lab_do_icmp :
do icmp = 1,
ncm 3175 lab_if_cm :
if ( cm >
f_zero )
then 3177 lab_if_ic :
if ( ic <=
ncm1 )
then 3180 sca1 = sca1 + cm *
scarhi(ic,ib)
3186 ex00 =
extrhd(ih1,ic1,ib) &
3188 sc00 =
scarhd(ih1,ic1,ib) &
3190 ss00 =
ssarhd(ih1,ic1,ib) &
3192 as00 =
asyrhd(ih1,ic1,ib) &
3197 sca1 = sca1 + cm * sc00
3198 ssa1 = ssa1 + cm * ss00 * ex00
3199 asy1 = asy1 + cm * as00 * sc00
3204 spcodp(idx) = spcodp(idx) + tt0*denn(1)*delz(kk)
3210 tauae(kk,ib) = ext1 * denn(1) * delz(kk)
3211 ssaae(kk,ib) = min(
f_one, ssa1/ext1)
3212 asyae(kk,ib) = min(
f_one, asy1/sca1)
3215 elseif (idom == 2)
then lab_if_idom
3219 tauae(kk,ib) =
extrhi(6,ib) * denn(2) * delz(kk)
3220 ssaae(kk,ib) =
ssarhi(6,ib)
3221 asyae(kk,ib) =
asyrhi(6,ib)
3225 spcodp(1) = spcodp(1) + tauae(kk,
nv_aod)
3232 ssaae(kk,ib) =
f_one 3252 if ( tauae(kk,ib) >
f_zero )
then 3253 ratio = tauae(kk-1,ib) / tauae(kk,ib)
3258 tt0 = tauae(kk,ib) + tauae(kk-1,ib)
3262 if ( ratio > crt1 )
then 3264 tauae(kk-1,ib) = tt2
3267 if ( ratio < crt2 )
then 3269 tauae(kk-1,ib) = tt1
3277 do kk = nlay-1, 1, -1
3278 if ( tauae(kk,ib) >
f_zero )
then 3279 ratio = tauae(kk+1,ib) / tauae(kk,ib)
3284 tt0 = tauae(kk,ib) + tauae(kk+1,ib)
3288 if ( ratio > crt1 )
then 3290 tauae(kk+1,ib) = tt2
3293 if ( ratio < crt2 )
then 3295 tauae(kk+1,ib) = tt1
3392 integer,
intent(in) :: NWVTOT,NWVTIR,NBDSW,NLWBND,NSWLWBD,imon,me
3394 real (kind=kind_phys),
intent(in) :: raddt, fdaer
3396 real (kind=kind_phys),
intent(in) :: solfwv(:),soltot, eirfwv(:)
3402 real (kind=kind_phys),
dimension(NBDSW,KAERBND) :: solwaer
3403 real (kind=kind_phys),
dimension(NBDSW) :: solbnd
3404 real (kind=kind_phys),
dimension(NLWBND,KAERBND) :: eirwaer
3405 real (kind=kind_phys),
dimension(NLWBND) :: eirbnd
3406 real (kind=kind_phys) :: sumsol, sumir
3408 integer,
dimension(NBDSW) :: nv1, nv2
3409 integer,
dimension(NLWBND) :: nr1, nr2
3411 integer :: i, mb, ib, ii, iw, iw1, iw2
3484 iw1 = nint(wvnsw1(mb))
3485 iw2 = nint(wvnsw2(mb))
3489 if (10000./iw1 >= 0.55 .and. &
3490 & 10000./iw2 <= 0.55 )
then 3494 lab_swdowhile :
do while ( iw1 >
iendwv_grt(ii) )
3495 if ( ii ==
kaerbnd )
exit lab_swdowhile
3503 solbnd(ib) = solbnd(ib) + solfwv(iw)
3504 sumsol = sumsol + solfwv(iw)
3507 solwaer(ib,ii) = sumsol
3517 solwaer(ib,ii) = sumsol
3522 if((me==0) .and.
lckprnt) print *,
'RAD-nv1,nv2:', &
3525 & 10000./iw1, 10000./iw2
3529 if((me==0) .and.
lckprnt)
then 3531 iw1 = nint(wvnsw1(mb))
3532 iw2 = nint(wvnsw2(mb))
3533 print *,
'RAD-nv_aod:', &
3534 &
nv_aod, iw1, iw2, 10000./iw1, 10000./iw2
3545 if ( nlwbnd == 1 )
then 3553 lab_lwdowhile :
do while ( iw1 >
iendwv_grt(ii) )
3554 if ( ii ==
kaerbnd )
exit lab_lwdowhile
3562 eirbnd(ib) = eirbnd(ib) + eirfwv(iw)
3563 sumir = sumir + eirfwv(iw)
3566 eirwaer(ib,ii) = sumir
3576 eirwaer(ib,ii) = sumir
3581 if(me==0 .and.
lckprnt) print *,
'RAD-nr1,nr2:', &
3584 & 10000./iw1, 10000./iw2
3594 print *,
'RAD -After optavg_grt, sw band info' 3597 print *,
'RAD -wvnsw1,wvnsw2: ',ib,wvnsw1(mb),wvnsw2(mb)
3598 print *,
'RAD -lamda1,lamda2: ',ib,10000./wvnsw1(mb), &
3603 print *,
'RAD -extrhd_grt:',i,
rhlev_grt(i), &
3607 print *,
'RAD -After optavg_grt, lw band info' 3610 print *,
'RAD -wvnlw1,wvnlw2: ',ib,
wvnlw1(ib),
wvnlw2(ib)
3611 print *,
'RAD -lamda1,lamda2: ',ib,10000./
wvnlw1(ib), &
3616 print *,
'RAD -extrhd_grt:',i,
rhlev_grt(i), &
3671 real (kind=kind_phys),
intent(in) :: raddt, fdaer
3682 if((fdaer>0.).and.(fdaer<99999.))
ctaer=exp(-raddt/fdaer)
3685 print *,
'RAD -raddt, fdaer,ctaer: ', raddt, fdaer,
ctaer 3687 print *,
'LU -aerosol fields determined from fcst' 3689 print *,
'LU -aerosol fields determined from clim' 3691 print *,
'LU -aerosol fields determined from fcst/clim' 3710 if ( gfs_phy_tracer%doing_GOCART )
then 3711 if ( gfs_phy_tracer%doing_DU )
then 3715 if ( gfs_phy_tracer%doing_SU )
then 3719 if ( gfs_phy_tracer%doing_SS )
then 3723 if ( gfs_phy_tracer%doing_OC )
then 3727 if ( gfs_phy_tracer%doing_BC )
then 3736 print *,
'ERROR: prognostic aerosols not found,abort',me
3742 print *,
'ERROR: prognostic aerosols option off, abort',me
3777 dm_indx%waso_phobic = indxr + 1
3778 dm_indx%waso_philic = indxr + 2
3781 dm_indx%soot_phobic = indxr + 1
3782 dm_indx%soot_philic = indxr + 2
3799 print *,
'ERROR: aerosol species not supported, abort',me
3815 if ( gfs_phy_tracer%doing_OC )
then 3816 dmfcs_indx%ocphobic = trcindx(
'ocphobic', gfs_phy_tracer)
3817 dmfcs_indx%ocphilic = trcindx(
'ocphilic', gfs_phy_tracer)
3819 if ( gfs_phy_tracer%doing_BC )
then 3820 dmfcs_indx%bcphobic = trcindx(
'bcphobic', gfs_phy_tracer)
3821 dmfcs_indx%bcphilic = trcindx(
'bcphilic', gfs_phy_tracer)
3823 if ( gfs_phy_tracer%doing_SS )
then 3824 dmfcs_indx%ss001 = trcindx(
'ss001', gfs_phy_tracer)
3825 dmfcs_indx%ss002 = trcindx(
'ss002', gfs_phy_tracer)
3826 dmfcs_indx%ss003 = trcindx(
'ss003', gfs_phy_tracer)
3827 dmfcs_indx%ss004 = trcindx(
'ss004', gfs_phy_tracer)
3828 dmfcs_indx%ss005 = trcindx(
'ss005', gfs_phy_tracer)
3830 if ( gfs_phy_tracer%doing_SU )
then 3831 dmfcs_indx%so4 = trcindx(
'so4', gfs_phy_tracer)
3833 if ( gfs_phy_tracer%doing_DU )
then 3834 dmfcs_indx%du001 = trcindx(
'du001', gfs_phy_tracer)
3835 dmfcs_indx%du002 = trcindx(
'du002', gfs_phy_tracer)
3836 dmfcs_indx%du003 = trcindx(
'du003', gfs_phy_tracer)
3837 dmfcs_indx%du004 = trcindx(
'du004', gfs_phy_tracer)
3838 dmfcs_indx%du005 = trcindx(
'du005', gfs_phy_tracer)
3858 if ( tp /=
'DU' )
then 3870 if ( tp /=
'SS' )
then 3884 if( me == 0 .and.
lckprnt)
then 3886 print *,
'RAD -gridcomp :',
gridcomp(:)
3887 print *,
'RAD -NMXG:',
nmxg 3888 print *,
'RAD -dm_indx ===> ' 3889 print *,
'RAD -aerspc: dust1=',
dm_indx%dust1
3890 print *,
'RAD -aerspc: dust2=',
dm_indx%dust2
3891 print *,
'RAD -aerspc: dust3=',
dm_indx%dust3
3892 print *,
'RAD -aerspc: dust4=',
dm_indx%dust4
3893 print *,
'RAD -aerspc: dust5=',
dm_indx%dust5
3894 print *,
'RAD -aerspc: ssam=',
dm_indx%ssam
3895 print *,
'RAD -aerspc: sscm=',
dm_indx%sscm
3896 print *,
'RAD -aerspc: suso=',
dm_indx%suso
3897 print *,
'RAD -aerspc: waso_phobic=',
dm_indx%waso_phobic
3898 print *,
'RAD -aerspc: waso_philic=',
dm_indx%waso_philic
3899 print *,
'RAD -aerspc: soot_phobic=',
dm_indx%soot_phobic
3900 print *,
'RAD -aerspc: soot_philic=',
dm_indx%soot_philic
3902 print *,
'RAD -KCM1 =',
kcm1 3903 print *,
'RAD -KCM2 =',
kcm2 3904 print *,
'RAD -KCM =',
kcm 3905 if (
kcm2 > 0 )
then 3906 print *,
'RAD -aerspc: issam=',
issam 3907 print *,
'RAD -aerspc: isscm=',
isscm 3908 print *,
'RAD -aerspc: isuso=',
isuso 3909 print *,
'RAD -aerspc: iwaso=',
iwaso 3910 print *,
'RAD -aerspc: isoot=',
isoot 3914 print *,
'RAD -dmfcs_indx ===> ' 3921 print *,
'RAD -trc_ocphobic=',
dmfcs_indx%ocphobic
3922 print *,
'RAD -trc_ocphilic=',
dmfcs_indx%ocphilic
3923 print *,
'RAD -trc_bcphobic=',
dmfcs_indx%bcphobic
3924 print *,
'RAD -trc_bcphilic=',
dmfcs_indx%bcphilic
3972 INTEGER,
PARAMETER :: NP = 100, np2 = 2*np, nwave=100, &
3974 INTEGER :: NW, NS, nH, n_bin
3975 real (kind=kind_io8),
Dimension( NP2 ) :: Angle, Cos_Angle, &
3977 real (kind=kind_io8),
Dimension(n_p,nAero) :: RH, rm, reff
3978 real (kind=kind_io8),
Dimension(nWave,n_p,nAero) :: &
3980 real (kind=kind_io8),
Dimension(NP2,n_p,nWave,nAero) :: ph0
3981 real (kind=kind_io8) :: wavelength(nwave), density(naero), &
3982 & sigma(nAero), wave,n_fac,PI,t1,s1,g1
3983 CHARACTER(len=80) :: AerosolName(naero)
3984 INTEGER :: i, j, k, l, ij
3986 character :: aerosol_file*30
3987 logical :: file_exist
3988 integer :: indx_dust(8)
3990 data aerosol_file /
"NCEP_AEROSOL.bin"/
3991 data aerosolname/
' Dust ',
' Soot ',
' SUSO ',
' WASO ', &
3992 &
' SSAM ',
' SSCM '/
3998 data indx_dust/4, 8, 12, 18, 21, 24, 30, 36/
4018 inquire (file = aerosol_file, exist = file_exist)
4020 if ( file_exist )
then 4021 if(me==0 .and.
lckprnt) print *,
'RAD -open :',aerosol_file
4023 open (unit=niaercm,file=aerosol_file,status=
'OLD', &
4024 & form=
'UNFORMATTED')
4026 print *,
' Requested aerosol data file "',aerosol_file, &
4027 &
'" not found!', me
4028 print *,
' *** Stopped in subroutine RD_GOCART_LUTS !!' 4032 READ(niaercm) (cos_angle(i),i=1,np)
4033 READ(niaercm) (cos_weight(i),i=1,np)
4038 READ(niaercm) (wavelength(i),i=1,nw)
4042 print *,
"Incorrect spectral band, abort ", nw
4049 if(me==0 .and.
lckprnt) print *,
'RAD -wn,lamda:', &
4054 if(me==0 .and.
lckprnt) print *,
'RAD -read LUTs:', &
4058 READ(niaercm) n_bin, density(j), sigma(j)
4060 READ(niaercm) (rh(i,j),i=1, n_bin)
4062 READ(niaercm) (rm(i,j),i=1, n_bin)
4064 READ(niaercm) (reff(i,j),i=1, n_bin)
4067 if (n_bin /=
krhlev )
then 4068 print *,
"Incorrect rh levels, abort ", n_bin
4074 READ(niaercm) wave,(ext0(k,l,j),l=1,n_bin)
4075 READ(niaercm) (sca0(k,l,j),l=1,n_bin)
4076 READ(niaercm) (asy0(k,l,j),l=1,n_bin)
4077 READ(niaercm) (ph0(1:np2,l,k,j),l=1,n_bin)
4081 if (aerosolname(j) ==
' Dust ' )
then 4091 if (aerosolname(j) ==
' Soot ') ij =
isoot 4092 if (aerosolname(j) ==
' SUSO ') ij =
isuso 4093 if (aerosolname(j) ==
' WASO ') ij =
iwaso 4094 if (aerosolname(j) ==
' SSAM ') ij =
issam 4095 if (aerosolname(j) ==
' SSCM ') ij =
isscm 4096 if ( ij .ne. -999 )
then 4160 real (kind=kind_phys) :: sumk, sumok, sumokg, sumreft, &
4161 & sp, refb, reft, rsolbd, rirbd
4163 integer :: ib, nb, ni, nh, nc
4182 rsolbd =
f_one / solbnd(nb)
4186 lab_rhi:
if (
kcm1 > 0 )
then 4193 do ni = nv1(nb), nv2(nb)
4197 sumreft = sumreft + reft*solwaer(nb,ni)
4206 refb = sumreft * rsolbd
4209 asyrhi_grt(nc,nb) = sumokg / (sumok + 1.0e-10)
4218 lab_rhd:
if (
kcm2 > 0 )
then 4226 do ni = nv1(nb), nv2(nb)
4230 sumreft = sumreft + reft*solwaer(nb,ni)
4233 sumok = sumok +
rhdpssa0_grt(ni,nh,nc)*solwaer(nb,ni) &
4235 sumokg = sumokg +
rhdpssa0_grt(ni,nh,nc)*solwaer(nb,ni) &
4239 refb = sumreft * rsolbd
4242 asyrhd_grt(nh,nc,nb) = sumokg / (sumok + 1.0e-10)
4256 rirbd =
f_one / eirbnd(nb)
4260 lab_rhi_lw:
if (
kcm1 > 0 )
then 4267 do ni = nr1(nb), nr2(nb)
4271 sumreft = sumreft + reft*eirwaer(nb,ni)
4280 refb = sumreft * rirbd
4283 asyrhi_grt(nc,ib) = sumokg / (sumok + 1.0e-10)
4291 lab_rhd_lw:
if (
kcm2 > 0 )
then 4299 do ni = nr1(nb), nr2(nb)
4303 sumreft = sumreft + reft*eirwaer(nb,ni)
4306 sumok = sumok +
rhdpssa0_grt(ni,nh,nc)*eirwaer(nb,ni) &
4308 sumokg = sumokg+
rhdpssa0_grt(ni,nh,nc)*eirwaer(nb,ni) &
4312 refb = sumreft * rirbd
4315 asyrhd_grt(nh,nc,ib) = sumokg / (sumok + 1.0e-10)
4374 integer,
parameter :: MAXSPC = 5
4375 real (kind=kind_io4),
parameter :: PINT = 0.01
4376 real (kind=kind_io4),
parameter :: EPSQ = 0.0
4378 integer :: i, j, k, numspci, ii
4379 integer :: icmp, nrecl, nt1, nt2, nn(maxspc)
4380 character :: ymd*6, yr*4, mn*2, tp*2, &
4381 & fname*30, fin*30, aerosol_file*40
4382 logical :: file_exist
4384 real (kind=kind_io4),
dimension(KMXG) :: sig
4385 real (kind=kind_io4),
dimension(IMXG,JMXG) :: ps
4386 real (kind=kind_io4),
dimension(IMXG,JMXG,KMXG) :: temp
4387 real (kind=kind_io4),
dimension(IMXG,JMXG,KMXG,MAXSPC):: buff
4388 real (kind=kind_phys) :: pstmp
4391 real (kind=kind_io4),
dimension(KMXG):: hyam, hybm
4392 real (kind=kind_io4) :: p0
4399 & 9.98547e-01,9.94147e-01,9.86350e-01,9.74300e-01,9.56950e-01, &
4400 & 9.33150e-01,9.01750e-01,8.61500e-01,8.11000e-01,7.50600e-01, &
4401 & 6.82900e-01,6.10850e-01,5.37050e-01,4.63900e-01,3.93650e-01, &
4402 & 3.28275e-01,2.69500e-01,2.18295e-01,1.74820e-01,1.38840e-01, &
4403 & 1.09790e-01,8.66900e-02,6.84150e-02,5.39800e-02,4.25750e-02, &
4404 & 3.35700e-02,2.39900e-02,1.36775e-02,5.01750e-03,5.30000e-04 /
4409 & 0, 0.0062694, 0.02377049, 0.05011813, 0.08278809, 0.1186361, &
4410 & 0.1540329, 0.1836373, 0.2043698, 0.2167788, 0.221193, &
4411 & 0.217729, 0.2062951, 0.1865887, 0.1615213, 0.1372958, &
4412 & 0.1167039, 0.09920014, 0.08432171, 0.06656809, 0.04765031, &
4413 & 0.03382346, 0.0237648, 0.01435208, 0.00659734, 0.002826232, &
4414 & 0.001118959, 0.0004086494, 0.0001368611, 3.750308e-05/
4417 & 0.992555, 0.9642, 0.90556, 0.816375, 0.703815, 0.576585, &
4418 & 0.44445, 0.324385, 0.226815, 0.149165, 0.089375, &
4419 & 0.045865, 0.017485, 0.00348, 0, 0, 0, 0, 0, &
4420 & 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 /
4427 if ( .not.
allocated (
dmclmg) )
then 4438 if ( .not.
allocated (
geos_rlon ))
then 4460 aerosol_file =
'200001.PS.avg' 4461 inquire (file = aerosol_file, exist = file_exist)
4464 aerosol_file =
'gocart_climo_2000x2007_ps_01.bin' 4465 inquire (file = aerosol_file, exist = file_exist)
4472 write(mn,
'(i2.2)') imon
4474 aerosol_file =
'null' 4476 aerosol_file = ymd//
'.PS.avg' 4478 aerosol_file =
'gocart_climo_2000x2007_ps_'//mn//
'.bin' 4481 inquire (file = aerosol_file, exist = file_exist)
4482 lab_if_ps :
if ( file_exist )
then 4487 open(niaercm, file=trim(aerosol_file), &
4488 & access=
'direct',recl=nrecl)
4489 read(niaercm, rec=1) ps
4493 pstmp = pint + sig(k) * (ps(i,j) - pint)
4494 psclmg(i,j,k) = 0.1 * pstmp
4500 open(niaercm, file=trim(aerosol_file), &
4501 & status=
'old', form=
'unformatted')
4502 read(niaercm) ps(:,:)
4506 pstmp = hyam(k)*p0 + hybm(k)*ps(i,j)
4507 psclmg(i,j,k) = 0.1 * pstmp
4516 print *,
' *** Requested aerosol data file "', &
4517 & trim(aerosol_file),
'" not found!' 4518 print *,
' *** Stopped in RD_GOCART_CLIM ! ', me
4529 aerosol_file =
'null' 4531 if(tp ==
'DU') fname=
'.DU.STD.tv20.g.avg' 4532 if(tp ==
'SS') fname=
'.SS.STD.tv17.g.avg' 4533 if(tp ==
'SU') fname=
'.SU.STD.tv15.g.avg' 4534 if(tp ==
'OC') fname=
'.CC.STD.tv15.g.avg' 4535 if(tp ==
'BC') fname=
'.CC.STD.tv15.g.avg' 4536 aerosol_file=ymd//trim(fname)
4538 fin =
'gocart_climo_2000x2007_' 4539 if(tp ==
'DU') fname=trim(fin)//
'du_' 4540 if(tp ==
'SS') fname=trim(fin)//
'ss_' 4541 if(tp ==
'SU') fname=trim(fin)//
'su_' 4542 if(tp ==
'OC') fname=trim(fin)//
'cc_' 4543 if(tp ==
'BC') fname=trim(fin)//
'cc_' 4544 aerosol_file=trim(fname)//mn//
'.bin' 4548 if(tp ==
'DU') numspci = 5
4549 inquire (file=trim(aerosol_file), exist = file_exist)
4550 lab_if_aer:
if ( file_exist )
then 4555 open (niaercm, file=trim(aerosol_file), &
4556 & access=
'direct', recl=nrecl)
4557 read(niaercm,rec=1)(nt1,nt2,nn(i),buff(:,:,:,i),i=1,numspci)
4560 open (niaercm, file=trim(aerosol_file), &
4561 & status=
'old', form=
'unformatted')
4564 read(niaercm) temp(:,:,k)
4565 buff(:,:,k,i) = temp(:,:,k)
4575 if (
dm_indx%dust1 /= -999)
then 4580 print *,
'ERROR: invalid DU index, abort! ',me
4586 if (
dm_indx%soot_phobic /= -999)
then 4592 print *,
'ERROR: invalid BC index, abort! ',me
4598 if (
dm_indx%suso /= -999)
then 4602 print *,
'ERROR: invalid SU index, abort! ',me
4608 if (
dm_indx%waso_phobic /= -999)
then 4614 print *,
'ERROR: invalid OC index, abort! ',me
4620 if (
dm_indx%ssam /= -999)
then 4623 & buff(:,:,:,3)+buff(:,:,:,4)
4625 print *,
'ERROR: invalid SS index, abort! ',me
4631 print *,
'ERROR: invalid aerosol species, abort ',tp
4637 print *,
' *** Requested aerosol data file "',aerosol_file, &
4639 print *,
' *** Stopped in RD_GOCART_CLIM ! ', me
4660 & ( alon,alat,prslk,rhlay,dz,hz,
nswlwbd, &
4661 & prsl,tvly,trcly, &
4662 & imax,nlay,nlp1,
ivflip, lsswr,lslwr, &
4720 integer,
intent(in) :: IMAX,NLAY,NLP1,ivflip,NSWLWBD
4721 logical,
intent(in) :: lsswr, lslwr
4723 real (kind=kind_phys),
dimension(:,:),
intent(in) :: prslk, &
4724 & prsl, rhlay, tvly, dz, hz
4725 real (kind=kind_phys),
dimension(:),
intent(in) :: alon, alat
4726 real (kind=kind_phys),
dimension(:,:,:),
intent(in) :: trcly
4729 real (kind=kind_phys),
dimension(:,:,:,:),
intent(out) :: &
4733 real (kind=kind_phys),
dimension(NLAY) :: rh1, dz1
4734 real (kind=kind_phys),
dimension(NLAY,NSWLWBD)::tauae,ssaae,asyae
4735 real (kind=kind_phys),
dimension(NLAY,max_num_gridcomp) :: &
4738 real (kind=kind_phys) :: tmp1, tmp2
4740 integer :: i, i1, i2, j1, j2, k, m, m1, kp
4743 real (kind=kind_phys),
dimension(:,:,:),
allocatable:: aermr,dmfcs
4746 real (kind=kind_phys),
dimension(:,:),
allocatable :: dmanl,dmclm, &
4748 real (kind=kind_phys),
dimension(KMXG) :: pstmp, pkstr
4749 real (kind=kind_phys) :: ptop, psfc, tem, plv, tv, rho
4752 real (kind=kind_phys),
parameter :: hdltx = 0.5 *
dltx 4753 real (kind=kind_phys),
parameter :: hdlty = 0.5 *
dlty 4757 if ( .not.
allocated(dmanl) )
then 4759 allocate ( dmanl(nlay,
nmxg) )
4760 allocate ( dmclm(nlay,
nmxg) )
4762 allocate ( aermr(imax,nlay,
nmxg) )
4763 allocate ( dmfcs(imax,nlay,
nmxg) )
4779 lab_do_imax :
do i = 1, imax
4788 if (tmp1 > 180.) tmp1 = tmp1 - 360.0
4789 lab_do_imxg :
do i1 = 1,
imxg 4791 if (tmp2 > 180.) tmp2 = tmp2 - 360.0
4792 if (abs(tmp1-tmp2) <= hdltx)
then 4799 lab_do_jmxg :
do j1 = 1,
jmxg 4800 if (abs(alat(i)-
geos_rlat(j1)) <= hdlty)
then 4807 pstmp(:)=
psclmg(i2,j2,:)*1000.0
4808 dmclmx(:,:) =
dmclmg(i2,j2,:,:)
4811 pkstr(:)=fpkap(pstmp(:))
4819 if(ivflip==0) kp = nlay - k + 1
4823 if(tmp1 > pkstr(m1+1) .and. tmp1 <= pkstr(m1))
then 4824 tmp2 =
f_one / (pkstr(m1)-pkstr(m1+1))
4825 tem = (pkstr(m1) - tmp1) * tmp2
4826 dmclm(kp,:) = tem * dmclmx(m1+1,:)+ &
4827 & (
f_one-tem) * dmclmx(m1,:)
4847 plv = 100. * prsl(i,k)
4849 rho = plv / (
con_rd * tv)
4852 dmfcs(i,k,m) = max(1000.*(rho*aermr(i,k,m)),
f_zero)
4857 dmclm(k,m)=1000.*dmclm(k,m)*rho
4858 if (
molwgt(m) /= 0. )
then 4867 dmanl(k,m)=
ctaer*dmfcs(i,k,m) + &
4885 aerosw(i,k,m,1) = tauae(k,m)
4886 aerosw(i,k,m,2) = ssaae(k,m)
4887 aerosw(i,k,m,3) = asyae(k,m)
4907 aerolw(i,k,m,1) = tauae(k,m1)
4908 aerolw(i,k,m,2) = ssaae(k,m1)
4909 aerolw(i,k,m,3) = asyae(k,m1)
4916 aerolw(i,k,m,1) = tauae(k,m1)
4917 aerolw(i,k,m,2) = ssaae(k,m1)
4918 aerolw(i,k,m,3) = asyae(k,m1)
4969 integer :: i, indx, ii
4977 if( gfs_phy_tracer%doing_DU )
then 4986 if( gfs_phy_tracer%doing_OC )
then 4987 aermr(:,:,
dm_indx%waso_phobic) = &
4989 aermr(:,:,
dm_indx%waso_philic) = &
4994 if( gfs_phy_tracer%doing_BC )
then 4995 aermr(:,:,
dm_indx%soot_phobic) = &
4997 aermr(:,:,
dm_indx%soot_philic) = &
5002 if( gfs_phy_tracer%doing_SS )
then 5011 if( gfs_phy_tracer%doing_SU )
then 5059 real (kind=kind_phys) :: aerdm
5060 real (kind=kind_phys) :: ext1, ssa1, asy1, ex00, ss00, as00, &
5061 & ex01, ss01, as01, exint
5062 real (kind=kind_phys) :: tau, ssa, asy, &
5063 & sum_tau, sum_ssa, sum_asy
5068 real (kind=kind_phys) :: fd(4)
5069 data fd / 0.01053,0.08421,0.25263,0.65263 /
5072 integer :: icmp, n, kk, ib, ih2, ih1, ii, ij, ijk
5073 real (kind=kind_phys) :: drh0, drh1, rdrh
5075 real (kind=kind_phys) :: qmin
5076 data qmin / 1.e-20 /
5089 lab_do_layer :
do kk = 1, nlay
5098 ih1 = max( 1, ih2-1 )
5103 if ( ih1 == ih2 )
then 5111 lab_do_ib :
do ib = 1, nswlwbd
5131 aerdm = dmanl(kk,
dm_indx%dust1) * fd(n)
5133 aerdm = dmanl(kk,
dm_indx%dust1+n-4 )
5136 if (aerdm < qmin) aerdm =
f_zero 5137 ex00 =
extrhi_grt(n,ib)*(1000.*dz1(kk))*aerdm
5141 ssa1 = ssa1 + ex00 * ss00
5142 asy1 = asy1 + ex00 * ss00 * as00
5156 aerdm = dmanl(kk,
dm_indx%suso)
5157 if (aerdm < qmin) aerdm =
f_zero 5158 ex00 = exint*(1000.*dz1(kk))*aerdm
5161 asy1 = ex00 * ss00 * as00
5174 aerdm = dmanl(kk,
dm_indx%ssam+n-1)
5175 if (aerdm < qmin) aerdm =
f_zero 5176 ex00 = exint*(1000.*dz1(kk))*aerdm
5178 ssa1 = ssa1 + ex00 * ss00
5179 asy1 = asy1 + ex00 * ss00 * as00
5196 aerdm = dmanl(kk, ii)
5197 if (aerdm < qmin) aerdm =
f_zero 5198 ex00 =
extrhd_grt(1,ij,ib)*(1000.*dz1(kk))*aerdm
5202 aerdm = dmanl(kk, ii+1)
5203 if (aerdm < qmin) aerdm =
f_zero 5206 ex01 = exint*(1000.*dz1(kk))*aerdm
5213 ssa1 = (ex00 * ss00) + (ex01 * ss01)
5214 asy1 = (ex00 * ss00 * as00) + (ex01 * ss01 * as01)
5227 tauae_gocart(kk,ijk) = tau
5233 sum_tau = sum_tau + tau
5234 sum_ssa = sum_ssa + tau * ssa
5235 sum_asy = sum_asy + tau * ssa * asy
5241 tauae(kk,ib) = sum_tau
5242 if (sum_tau >
f_zero) ssaae(kk,ib) = sum_ssa / sum_tau
5243 if (sum_ssa >
f_zero) asyae(kk,ib) = sum_asy / sum_ssa
real(kind=kind_phys), dimension(nwvsol), save s0intv
real(kind=kind_phys), dimension(ndm, nae), save haer
real(kind=kind_phys), dimension(:,:,:), allocatable, save extrhd_grt
integer, parameter maxvyr
subroutine aer_property
This subroutine maps the 5 degree global climatological aerosol data set onto model grids...
real(kind=kind_phys), dimension(:,:), allocatable rhidssa0_grt
integer, dimension(:,:,:), allocatable, save ivolae
subroutine wrt_aerlog
This subroutine writes aerosol parameter configuration to run log file.
real(kind=kind_phys), dimension(:), allocatable, save geos_rlon
real(kind=kind_phys), parameter f_one
subroutine setgocartaer
This subroutine computes SW + LW aerosol optical properties for gocart aerosol species (merged from f...
real(kind=kind_phys), parameter wvn550
integer, save iaerflg
aerosol effect control flag
real(kind=kind_phys), dimension(krhlev) data
integer, dimension(:), allocatable iendwv_grt
real(kind=kind_phys), parameter con_t0c
temp at 0C (K)
type(gocart_index_type), save dm_indx
real(kind=kind_phys), dimension(:,:), allocatable, save scarhi
integer, save iaermdl
aerosol model scheme control flag
character(40), parameter vtagaer
integer, parameter, public nlwstr
starting band number in ir region
real(kind=kind_phys), dimension(:,:), allocatable, save asyrhi
real(kind=kind_phys), dimension(:,:,:,:), allocatable, save dmclmg
subroutine set_spectrum
This subroutine defines the one wavenumber solar fluxes based on toa solar spectral distribution...
real(kind=kind_phys), dimension(:,:,:), allocatable rhdpasy0_grt
real(kind=kind_phys), dimension(nbands) wvnum1
subroutine aeropt_grt
This subroutine computes aerosols optical properties in NSWLWBD SW/LW bands. Aerosol distribution at ...
This module contains some the most frequently used math and physics constants for gcm models...
real(kind=kind_phys), dimension(:,:,:), allocatable, save asyrhd_grt
real(kind=kind_phys), parameter con_boltz
boltzmann constant (J/K)
real(kind=kind_phys), dimension(:,:), allocatable rhidasy0_grt
real(kind=kind_phys), dimension(:), allocatable, save geos_rlat
integer, parameter, public nwvsol
num of wvnum regions where solar flux is constant
real(kind=kind_phys), dimension(2,imxae, jmxae), save denng
real(kind=kind_phys), dimension(nbands) wvnlw2
integer, parameter krhlev
subroutine trop_update
update the monthly global distribution of aerosol profiles in five degree horizontal resolution...
subroutine rd_gocart_luts
This subroutine reads input gocart aerosol optical data from Mie code calculations.
real(kind=kind_phys), dimension(:), allocatable, save extstra
real(kind=kind_phys), dimension(nbands) wvnum2
real(kind=kind_phys), dimension(ndm, nae), save prsref
integer, parameter, public nf_aelw
num of output fields for lw rad
real(kind=kind_phys), dimension(:,:), allocatable, save ssarhi_grt
subroutine volc_update
search historical volcanic data sets to find and read in monthly 45-degree lat-zone band of optical d...
real(kind=kind_phys), dimension(nxc, imxae, jmxae), save cmixg
This module defines commonly used control variables/parameters in physics related programs...
real(kind=kind_phys), dimension(ndm, nae), save sigref
real(kind=kind_phys), dimension(:,:,:), allocatable rhdpssa0_grt
integer, parameter nswstr
This module contains SW band parameters set up.
integer, parameter kaerbnd
real(kind=kind_phys), dimension(:,:,:), allocatable, save ssarhd_grt
integer, parameter max_num_gridcomp
real(kind=kind_phys), parameter con_rd
gas constant air (J/kg/K)
subroutine optavg_grt
This subroutine computes mean aerosols optical properties over each SW/LW radiation spectral band for...
real(kind=kind_io4), dimension(:), allocatable molwgt
integer, parameter naerbnd
real(kind=kind_phys), dimension(:,:), allocatable rhidext0_grt
real(kind=kind_phys), save ctaer
This module contains climatological atmospheric aerosol schemes for radiation computations.
integer, parameter, public nwvtir
total num of wvnum in ir range
integer, save ivflip
vertical profile indexing flag
integer, dimension(nwvsol), save nwvns0
real(kind=kind_phys), dimension(nbands) wvnlw1
character *2, dimension(max_num_gridcomp) max_gridcomp
logical, save lalwflg
lw aerosols effect control flag
subroutine gocart_init
the initialization program for gocart aerosols
real(kind=kind_phys), parameter dlty
integer, parameter minvyr
subroutine, public aer_init
The initialization program to set up necessary parameters and working arrays.
This module contains LW band parameters set up.
real(kind=kind_phys), parameter con_plnk
planck constant (J/s)
real(kind=kind_phys), dimension(:,:,:), allocatable, save scarhd
character, dimension(:), allocatable, save gridcomp
integer, dimension( imxae, jmxae), save kprfg
real(kind=kind_phys), dimension(:,:), allocatable, save asyrhi_grt
real(kind=kind_phys), parameter dltx
real(kind=kind_phys), parameter con_amd
molecular wght of dry air (g/mol)
real(kind=kind_phys), dimension(:,:,:), allocatable, save ssarhd
logical, parameter lalw1bd
control flag for lw aerosol property =t: use 1 broad-band lw aeros properties =f: use multi bands...
integer, parameter, public nspc
num of species for output aod (opnl)
character, save aeros_file
external aerosols data file
real(kind=kind_phys), dimension(:,:), allocatable, save extrhi
real(kind=kind_phys), parameter con_g
gravity (m/s2)
integer, parameter nrhlev
integer, save num_gridcomp
real(kind=kind_phys), parameter con_pi
subroutine map_aermr
This subroutine maps input tracer fields (trcly) to local tracer array (aermr).
integer, parameter, public nwvtot
total num of wvnum included
real(kind=kind_phys), dimension(:,:), allocatable, save extrhi_grt
real(kind=kind_phys), parameter con_c
real(kind=kind_phys), dimension(nrhlev), save rhlev
subroutine set_aerspc(raddt, fdaer)
determine merging coefficients ctaer; setup aerosol specification.
subroutine clim_aerinit
the opac-climatology aerosol initialization program to set up necessary parameters and working arrays...
integer, parameter, public nf_aesw
num of output fields for sw rad
character *4, save gocart_climo
type(tracer_index_type), save dmfcs_indx
subroutine set_aercoef
the initialization program for climatological aerosols. the program reads and maps the pre-tabulated ...
real(kind=kind_phys), dimension(:,:,:), allocatable, save extrhd
integer, dimension(nxc, imxae, jmxae), save idxcg
subroutine set_volcaer
The initialization program for stratospheric volcanic aerosols.
logical, save lavoflg
stratospheric volcanic effect flag
real(kind=kind_phys), dimension(:,:,:), allocatable, save asyrhd
subroutine optavg
compute mean aerosols optical properties over each SW radiation spectral band for each of the species...
subroutine radclimaer
This subroutine computes aerosols optical properties in NSWLWBD bands. there are seven different vert...
integer, dimension(ncm) idxspc
subroutine rd_gocart_clim
This subroutine:
real(kind=kind_phys), dimension(:,:,:), allocatable rhdpext0_grt
real(kind=kind_phys), parameter f_zero
integer, parameter, public nspc1
total+species
logical, save laswflg
sw aerosols effect control flag
subroutine, public setaer
This subroutine computes aerosols optical properties.
real(kind=kind_phys), dimension(:,:), allocatable, save ssarhi
real(kind=kind_phys), dimension(:,:,:), allocatable, save psclmg
subroutine, public aer_update
This subroutine checks and updates time varying climatology aerosol data sets.
real(kind=kind_phys), dimension(:) rhlev_grt