23 USE dimphy, only: klon, klev
26 REAL,
INTENT (IN) ::
rlat(:)
27 REAL,
INTENT (IN) :: paprs(:, :)
28 REAL,
INTENT (IN) :: rjour
40 REAL field(klon,
klev+1)
44 real,
PARAMETER:: ps=101325.
45 REAL,
parameter:: an = 360., zo3q3 = 4e-8
46 REAL,
parameter:: dobson_unit = 2.1415e-5
47 REAL gms, zslat, zsint, zcost,
z, ppm, qpm, a
48 REAL asec, bsec, aprim, zo3a3
52 call
assert((/
size(
rlat),
size(paprs, 1)/) == klon,
"ozonecm klon")
53 call
assert(
size(paprs, 2) ==
klev + 1,
"ozonecm klev")
58 zslat = sin(
pi / 180. *
rlat(
i))
59 zsint = sin(2 *
pi * (rjour + 15.) / an)
60 zcost = cos(2 *
pi * (rjour + 15.) / an)
61 z = 0.0531 + zsint * (-0.001595+0.009443*zslat) &
62 + zcost * (-0.001344-0.00346*zslat) &
63 + zslat**2 * (.056222 + zslat**2 &
64 * (-.037609+.012248*zsint+.00521*zcost+.008890*zslat))
68 ppm = 800. - (500.*zslat+150.*zcost)*zslat
69 qpm = 1.74e-5 - (7.5e-6*zslat+1.7e-6*zcost)*zslat
70 bsec = 2650. + 5000.*zslat**2
71 a = 4.0*(bsec)**(3./2.)*(ppm)**(3./2.)*(1.0+(bsec/ps)**(3./2.))
72 a = a/(bsec**(3./2.)+ppm**(3./2.))**2
73 aprim = (2.666666*qpm*ppm-a*gms)/(1.0-a)
74 aprim = amax1(0., aprim)
75 asec = (gms-aprim)*(1.0+(bsec/ps)**(3./2.))
76 asec = amax1(0.0, asec)
77 aprim = gms - asec/(1.+(bsec/ps)**(3./2.))
79 tozon = aprim / (1. + 3. * (ppm / pl)**2) &
80 + asec / (1. + (bsec / pl)**(3./2.)) + zo3a3 * pl * pl
82 field(
i,
k) = tozon / 9.81 / dobson_unit / 1e3