/[lmdze]/trunk/phylmd/Mobidic/regr_pr_comb_coefoz.f
ViewVC logotype

Contents of /trunk/phylmd/Mobidic/regr_pr_comb_coefoz.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 90 - (show annotations)
Wed Mar 12 21:16:36 2014 UTC (10 years, 2 months ago) by guez
File size: 3986 byte(s)
Removed procedures ini_histday, ini_histhf, write_histday and
write_histhf.

Divided file regr_pr_coefoz.f into regr_pr_av.f and
regr_pr_int.f. (Following LMDZ.) Divided module regr_pr_coefoz into
modules regr_pr_av_m and regr_pr_int_m. Renamed regr_pr_av_coefoz to
regr_pr_av and regr_pr_int_coefoz to regr_pr_int. The idea is that
those procedures are more general than Mobidic.

Removed argument dudyn of calfis and physiq. dudyn is not used either
in LMDZ. Removed computation in calfis of unused variable zpsrf (not
used either in LMDZ). Removed useless computation of dqfi in calfis
(part 62): the results were overwritten. (Same in LMDZ.)

1 module regr_pr_comb_coefoz_m
2
3 use dimens_m, only: llm
4 use dimphy, only: klon
5
6 implicit none
7
8 ! The five module variables declared here are on the "physics" grid.
9 ! The value of each variable for index "(i, k)" is at longitude
10 ! "rlon(i)", latitude "rlat(i)" and middle of layer "k".
11
12 real, save:: c_Mob(klon, llm)
13 ! (sum of Mobidic terms in the net mass production rate of ozone
14 ! by chemistry, per unit mass of air, in s-1)
15
16 real, save:: a2(klon, llm)
17 ! (derivative of mass production rate of ozone per unit mass of
18 ! air with respect to ozone mass fraction, in s-1)
19
20 real, save:: a4_mass(klon, llm)
21 ! (derivative of mass production rate of ozone per unit mass of
22 ! air with respect to temperature, in s-1 K-1)
23
24 real, save:: a6_mass(klon, llm)
25 ! (derivative of mass production rate of ozone per unit mass of
26 ! air with respect to mass column-density of ozone above, in m2 s-1 kg-1)
27
28 real, save:: r_het_interm(klon, llm)
29 ! (net mass production rate by heterogeneous chemistry, per unit
30 ! mass of ozone, corrected for chlorine content and latitude, but
31 ! not for temperature and sun direction, in s-1)
32
33 private klon, llm
34
35 contains
36
37 subroutine regr_pr_comb_coefoz(julien)
38
39 ! "regr_pr_comb_coefoz" stands for "regrid pressure combine
40 ! coefficients ozone".
41
42 ! This subroutine :
43 ! -- reads from a file all eight coefficients for ozone chemistry,
44 ! at the current day ;
45 ! -- regrids the coefficients in pressure to the LMDZ vertical grid ;
46 ! -- packs the coefficients to the "physics" horizontal grid ;
47 ! -- combines the eight coefficients to define the five module variables.
48
49 use netcdf, only: nf90_nowrite
50 use netcdf95, only: nf95_open, nf95_close
51 use phyetat0_m, only: rlat
52 use regr_pr_av_m, only: regr_pr_av
53 use regr_pr_int_m, only: regr_pr_int
54
55 integer, intent(in):: julien ! jour julien, 1 <= julien <= 360
56
57 ! Variables local to the procedure:
58
59 integer ncid ! for NetCDF
60
61 real coefoz(klon, llm)
62 ! (temporary storage for an ozone coefficient)
63 ! (On the "physics" grid.
64 ! "coefoz(i, k)" is at longitude "rlon(i)", latitude "rlat(i)",
65 ! middle of layer "k".)
66
67 real a6(klon, llm)
68 ! (derivative of "P_net_Mob" with respect to column-density of ozone
69 ! above, in cm2 s-1)
70 ! (On the "physics" grid.
71 ! "a6(i, k)" is at longitude "rlon(i)", latitude "rlat(i)",
72 ! middle of layer "k".)
73
74 real, parameter:: amu = 1.6605402e-27 ! atomic mass unit, in kg
75
76 real, parameter:: Clx = 3.8e-9
77 ! (total chlorine content in the upper stratosphere)
78
79 integer k
80
81 !------------------------------------
82
83 print *, "Call sequence information: regr_pr_comb_coefoz"
84
85 call nf95_open("coefoz_LMDZ.nc", nf90_nowrite, ncid)
86
87 call regr_pr_av(ncid, "a2", julien, a2)
88
89 call regr_pr_av(ncid, "a4", julien, a4_mass)
90 a4_mass = a4_mass * 48. / 29.
91
92 call regr_pr_av(ncid, "a6", julien, a6)
93
94 ! Compute "a6_mass" avoiding underflow, do not divide by 1e4
95 ! before dividing by molecular mass:
96 a6_mass = a6 / (1e4 * 29. * amu)
97 ! (factor 1e4: conversion from cm2 to m2)
98
99 ! Combine coefficients to get "c_Mob":
100 ! (We use as few local variables as possible, in order to spare
101 ! main memory.)
102
103 call regr_pr_av(ncid, "P_net_Mob", julien, c_Mob)
104
105 call regr_pr_av(ncid, "r_Mob", julien, coefoz)
106 c_mob = c_mob - a2 * coefoz
107
108 call regr_pr_int(ncid, "Sigma_Mob", julien, top_value=0., v3=coefoz)
109 c_mob = (c_mob - a6 * coefoz) * 48. / 29.
110
111 call regr_pr_av(ncid, "temp_Mob", julien, coefoz)
112 c_mob = c_mob - a4_mass * coefoz
113
114 call regr_pr_av(ncid, "R_Het", julien, r_het_interm)
115 ! Heterogeneous chemistry is only at high latitudes:
116 forall (k = 1: llm)
117 where (abs(rlat) <= 45.) r_het_interm(:, k) = 0.
118 end forall
119 r_het_interm = r_het_interm * (Clx / 3.8e-9)**2
120
121 call nf95_close(ncid)
122
123 end subroutine regr_pr_comb_coefoz
124
125 end module regr_pr_comb_coefoz_m

  ViewVC Help
Powered by ViewVC 1.1.21