8 function ozonecm(rlat, paprs,read_climoz, rjour)
26 REAL,
INTENT (IN) :: rlat(:)
27 REAL,
INTENT (IN) :: paprs(:, :)
28 REAL,
INTENT (IN) :: rjour
29 INTEGER,
INTENT (IN) :: read_climoz
45 real,
PARAMETER:: ps=101325.
46 REAL,
parameter:: an = 360., zo3q3 = 4e-8
47 REAL,
parameter:: dobson_unit = 2.1415e-5
48 REAL gms, zslat,zslat2, zsint, zcost, z, ppm, qpm, a
49 REAL asec, bsec, aprim, zo3a3
53 call assert((/
size(rlat),
size(paprs, 1)/) ==
klon,
"ozonecm klon")
54 call assert(
size(paprs, 2) ==
klev + 1,
"ozonecm klev")
59 zslat = sin(pi / 180. * rlat(i))
61 IF (read_climoz==-1) zslat=0.
62 zsint = sin(2 * pi * (rjour + 15.) / an)
63 zcost = cos(2 * pi * (rjour + 15.) / an)
64 z = 0.0531 + zsint * (-0.001595+0.009443*zslat) &
65 + zcost * (-0.001344-0.00346*zslat) &
66 + zslat2 * (.056222 + zslat2 &
67 * (-.037609+.012248*zsint+.00521*zcost+.008890*zslat))
71 ppm = 800. - 500.*zslat2 - 150.*zcost*zslat
72 qpm = 1.74e-5 - 7.5e-6*zslat2 - 1.7e-6*zcost*zslat
73 bsec = 2650. + 5000.*zslat2
74 a = 4.0*(bsec)**(3./2.)*(ppm)**(3./2.)*(1.0+(bsec/ps)**(3./2.))
75 a = a/(bsec**(3./2.)+ppm**(3./2.))**2
76 aprim = (2.666666*qpm*ppm-a*gms)/(1.0-a)
77 aprim = amax1(0., aprim)
78 asec = (gms-aprim)*(1.0+(bsec/ps)**(3./2.))
79 asec = amax1(0.0, asec)
80 aprim = gms - asec/(1.+(bsec/ps)**(3./2.))
82 tozon = aprim / (1. + 3. * (ppm / pl)**2) &
83 + asec / (1. + (bsec / pl)**(3./2.)) + zo3a3 * pl * pl
85 field(i, k) = tozon / 9.81 / dobson_unit / 1e3
90 forall (k = 1:
klev) ozonecm(:,k) = field(:,k) - field(:,k+1)
91 ozonecm = max(ozonecm, 1e-12)
real function, dimension(klon, klev) ozonecm(rlat, paprs, read_climoz, rjour)