/[lmdze]/trunk/Sources/dyn3d/Guide/conf_guide.f
ViewVC logotype

Contents of /trunk/Sources/dyn3d/Guide/conf_guide.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 221 - (show annotations)
Thu Apr 20 14:44:47 2017 UTC (7 years, 1 month ago) by guez
File size: 4606 byte(s)
clcdrag is no longer used in LMDZ. Replaced by cdrag in LMDZ. In cdrag
in LMDZ, zxli is a symbolic constant, false. So removed case zxli true
in LMDZE.

read_sst is called zero (if no ocean point on the whole planet) time or
once per call of physiq. If mod(itap - 1, lmt_pas) == 0 then we have
advanced in time of lmt_pas and deja_lu is necessarily false.

qsat[sl] and dqsat[sl] were never called.

Added output of qsurf in histins, following LMDZ.

Last dummy argument dtime of phystokenc is always the same as first
dummy argument pdtphys, removed dtime.

Removed make rules for nag_xref95, since it does not exist any longer.

1 module conf_guide_m
2
3 USE dimens_m, ONLY: iim, jjm
4
5 IMPLICIT NONE
6
7 LOGICAL:: ini_anal = .false. ! Initial = analyse
8 LOGICAL:: guide_u = .false. ! guidage de u
9 LOGICAL:: guide_v = .false. ! gvidage de v
10 LOGICAL:: guide_t = .false. ! guidage de T
11 LOGICAL:: guide_q = .false. ! guidage de q
12
13 logical, save:: ok_guide ! guidage
14
15 ! alpha détermine la part des injections de données à chaque étape
16 ! alpha=0 signifie pas d'injection
17 ! alpha=1 signifie injection totale
18 REAL, save:: alpha_q(iim + 1, jjm + 1)
19 REAL, save:: alpha_t(iim + 1, jjm + 1)
20 REAL, save:: alpha_u(iim + 1, jjm + 1), alpha_v(iim + 1, jjm)
21
22 private iim, jjm
23
24 contains
25
26 SUBROUTINE conf_guide
27
28 ! From LMDZ4/libf/dyn3d/conf_guide.F, version 1.1.1.1 2004/05/19 12:53:07
29 ! Parametres de controle du run:
30
31 use comconst, only: daysec, dtvr
32 use conf_gcm_m, only: day_step, iperiod
33 use dynetat0_m, only: grossismx, grossismy, rlatu, rlatv
34 use init_tau2alpha_m, only: init_tau2alpha
35 use nr_util, only: assert, pi
36 use tau2alpha_m, only: tau2alpha
37 use unit_nml_m, only: unit_nml
38 use writefield_m, only: writefield
39
40 ! Local:
41
42 ! Constantes de rappel, en jours :
43 REAL tau_min_u, tau_max_u, tau_min_v, tau_max_v, tau_min_t, tau_max_t
44 real tau_min_q, tau_max_q
45
46 REAL lat_min_guide_deg, lat_max_guide_deg ! in degrees
47
48 ! Dans le cas où on n'a les analyses que sur une bande de latitudes :
49 REAL lat_min_guide ! minimum latitude for nudging, in rad
50 real lat_max_guide ! maximum latitude for nudging, in rad
51
52 REAL factt ! pas de temps entre deux appels au guidage, en jours
53 REAL dxdys(iim + 1, jjm + 1), dxdyu(iim + 1, jjm + 1), dxdyv(iim + 1, jjm)
54 integer i, j
55
56 namelist /conf_guide_nml/ ini_anal, guide_u, guide_v, guide_t, guide_q, &
57 tau_min_u, tau_max_u, tau_min_v, tau_max_v, tau_min_t, tau_max_t, &
58 tau_min_q, tau_max_q, lat_min_guide_deg, lat_max_guide_deg
59
60 !-----------------------------------------------------------------------
61
62 print *, "Call sequence information: conf_guide"
63
64 ! Default values:
65 tau_min_u = 0.03
66 tau_max_u = 10.
67 tau_min_v = 0.03
68 tau_max_v = 10.
69 tau_min_t = 0.03
70 tau_max_t = 10.
71 tau_min_q = 0.03
72 tau_max_q = 10.
73 lat_min_guide_deg = -90.
74 lat_max_guide_deg = 90.
75
76 print *, "Enter namelist 'conf_guide_nml'."
77 read(unit=*, nml=conf_guide_nml)
78 write(unit_nml, nml=conf_guide_nml)
79
80 ok_guide = any((/guide_u, guide_v, guide_t, guide_q/))
81
82 if (ok_guide) then
83 call assert(mod(day_step, 4 * iperiod) == 0, &
84 "conf_guide ok_guide day_step iperiod")
85 lat_min_guide = lat_min_guide_deg / 180. * pi
86 lat_max_guide = lat_max_guide_deg / 180. * pi
87 factt = dtvr * iperiod / daysec
88 print *, "factt = ", factt
89
90 IF (abs(grossismx - 1.) < 0.1 .OR. abs(grossismy - 1.) < 0.1) THEN
91 ! grille regulière
92 if (guide_u) alpha_u = 1. - exp(- factt / tau_max_u)
93 if (guide_v) alpha_v = 1. - exp(- factt / tau_max_v)
94 if (guide_t) alpha_t = 1. - exp(- factt / tau_max_t)
95 if (guide_q) alpha_q = 1. - exp(- factt / tau_max_q)
96 else
97 call init_tau2alpha(dxdys)
98
99 if (guide_u) then
100 DO j = 1, jjm + 1
101 DO i = 1, iim
102 dxdyu(i, j) = 0.5 * (dxdys(i, j) + dxdys(i + 1, j))
103 END DO
104 dxdyu(iim + 1, j) = dxdyu(1, j)
105 END DO
106
107 CALL tau2alpha(lat_min_guide, lat_max_guide, factt, dxdyu, rlatu, &
108 tau_min_u, tau_max_u, alpha_u)
109 CALL writefield("alpha_u", alpha_u)
110 end if
111
112 if (guide_v) then
113 DO j = 1, jjm
114 DO i = 1, iim + 1
115 dxdyv(i, j) = 0.5 * (dxdys(i, j) + dxdys(i, j + 1))
116 END DO
117 END DO
118
119 CALL tau2alpha(lat_min_guide, lat_max_guide, factt, dxdyv, rlatv, &
120 tau_min_v, tau_max_v, alpha_v)
121 CALL writefield("alpha_v", alpha_v)
122 end if
123
124 if (guide_t) then
125 CALL tau2alpha(lat_min_guide, lat_max_guide, factt, dxdys, rlatu, &
126 tau_min_t, tau_max_t, alpha_t)
127 CALL writefield("alpha_t", alpha_t)
128 end if
129
130 if (guide_q) then
131 CALL tau2alpha(lat_min_guide, lat_max_guide, factt, dxdys, rlatu, &
132 tau_min_q, tau_max_q, alpha_q)
133 CALL writefield("alpha_q", alpha_q)
134 end if
135 end IF
136 end if
137
138 end SUBROUTINE conf_guide
139
140 end module conf_guide_m

  ViewVC Help
Powered by ViewVC 1.1.21