/[lmdze]/trunk/libf/phylmd/Mobidic/regr_pr_comb_coefoz.f90
ViewVC logotype

Contents of /trunk/libf/phylmd/Mobidic/regr_pr_comb_coefoz.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3 - (show annotations)
Wed Feb 27 13:16:39 2008 UTC (16 years, 2 months ago) by guez
Original Path: trunk/libf/phylmd/read_coefoz_m.f90
File size: 3944 byte(s)
Initial import
1 module read_coefoz_m
2
3 ! This module is clean: no C preprocessor directive, no include line.
4
5 use dimens_m, only: llm
6 use dimphy, only: klon
7
8 implicit none
9
10 real, save:: c_Mob(klon, llm, 12)
11 ! (sum of Mobidic terms in the net mass production rate of ozone
12 ! by chemistry, per unit mass of air, in s-1)
13 ! (On the "physics" grid.
14 ! Third dimension is the number of the month in the year.
15 ! "c_Mob(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
16 ! middle of layer "k".)
17
18 real, save:: a2(klon, llm, 12)
19 ! (derivative of mass production rate of ozone per unit mass of
20 ! air with respect to ozone mass fraction, in s-1)
21 ! (On the "physics" grid.
22 ! Third dimension is the number of the month in the year.
23 ! "a2(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
24 ! middle of layer "k".)
25
26 real, save:: a4_mass(klon, llm, 12)
27 ! (derivative of mass production rate of ozone per unit mass of
28 ! air with respect to temperature, in s-1 K-1)
29 ! (On the "physics" grid.
30 ! Third dimension is the number of the month in the year.
31 ! "a4_mass(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
32 ! middle of layer "k".)
33
34 real, save:: a6_mass(klon, llm, 12)
35 ! (derivative of mass production rate of ozone per unit mass of
36 ! air with respect to mass column-density of ozone above, in m2 s-1 kg-1)
37 ! (On the "physics" grid.
38 ! Third dimension is the number of the month in the year.
39 ! "a6_mass(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
40 ! middle of layer "k".)
41
42 real, save:: r_het_interm(klon, llm, 12)
43 ! (net mass production rate by heterogeneous chemistry, per unit
44 ! mass of ozone, corrected for chlorine content and latitude, but
45 ! not for temperature and sun direction, in s-1)
46 ! (On the "physics" grid.
47 ! Third dimension is the number of the month in the year.
48 ! "r_het_interm(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
49 ! middle of layer "k".)
50
51 private klon, llm
52
53 contains
54
55 subroutine read_coefoz
56
57 ! This subroutine reads from a file all eight parameters for ozone
58 ! chemistry, at all months.
59 ! The parameters are packed to the "physics" grid.
60 ! Finally, the eight parameters are combined to define the five
61 ! module variables.
62
63 use netcdf95, only: nf95_open, nf95_close, nf90_nowrite
64 use o3_Mob_ph_m, only: o3_Mob_ph
65 use phyetat0_m, only: rlat
66
67 ! Variables local to the procedure:
68 integer ncid ! for NetCDF
69
70 real a6(klon, llm, 12)
71 ! (derivative of P_net_Mob with respect to column-density of ozone
72 ! above, in cm2 s-1)
73 ! (On the "physics" grid.
74 ! Third dimension is the number of the month in the year.
75 ! "a6(i, k, month)" is at longitude "rlon(i)", latitude "rlat(i)",
76 ! middle of layer "k".)
77
78 real, parameter:: amu = 1.6605402e-27 ! atomic mass unit, in kg
79
80 real, parameter:: Clx = 3.8e-9
81 ! (total chlorine content in the upper stratosphere)
82
83 integer k, month
84
85 !------------------------------------
86
87 print *, "Call sequence information: read_coefoz"
88
89 call nf95_open("coefoz_LMDZ.nc", nf90_nowrite, ncid)
90
91 a2 = o3_Mob_ph(ncid, "a2")
92 a4_mass = o3_Mob_ph(ncid, "a4") * 48. / 29.
93 a6 = o3_Mob_ph(ncid, "a6")
94
95 ! Compute "a6_mass" avoiding underflow, do not divide by 1e4
96 ! before dividing by molecular mass:
97 a6_mass = a6 / (1e4 * 29. * amu)
98 ! (factor 1e4: conversion from cm2 to m2)
99
100 c_Mob = 48. / 29. * (o3_Mob_ph(ncid, "P_net_Mob") &
101 - a2 * o3_Mob_ph(ncid, "r_Mob") - a6 * o3_Mob_ph(ncid, "Sigma_Mob")) &
102 - a4_mass * o3_Mob_ph(ncid, "temp_Mob")
103
104 r_het_interm = o3_Mob_ph(ncid, "R_Het") * (Clx / 3.8e-9)**2
105 ! Heterogeneous chemistry is only at high latitudes:
106 forall (k = 1: llm, month = 1: 12)
107 where (abs(rlat) <= 45.) r_het_interm(:, k, month) = 0.
108 end forall
109
110 call nf95_close(ncid)
111
112 end subroutine read_coefoz
113
114 end module read_coefoz_m

  ViewVC Help
Powered by ViewVC 1.1.21