/[lmdze]/trunk/dyn3d/Guide/guide.f
ViewVC logotype

Annotation of /trunk/dyn3d/Guide/guide.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 265 - (hide annotations)
Tue Mar 20 09:35:59 2018 UTC (6 years, 2 months ago) by guez
File size: 4508 byte(s)
Rename module dimens_m to dimensions.
1 guez 20 MODULE guide_m
2 guez 3
3 guez 210 ! From dyn3d/guide.F, version 1.3, 2005/05/25 13:10:09
4     ! and dyn3d/guide.h, version 1.1.1.1, 2004/05/19 12:53:06
5 guez 3
6 guez 37 IMPLICIT NONE
7    
8 guez 20 CONTAINS
9 guez 3
10 guez 102 SUBROUTINE guide(itau, ucov, vcov, teta, q, ps)
11 guez 3
12 guez 210 ! Author: F. Hourdin
13 guez 3
14 guez 115 USE comconst, ONLY: cpp, kappa
15     USE conf_gcm_m, ONLY: day_step
16 guez 173 use conf_guide_m, only: guide_u, guide_v, guide_t, guide_q, ini_anal, &
17 guez 211 alpha_u, alpha_v, alpha_t, alpha_q
18 guez 265 USE dimensions, ONLY: iim, jjm, llm
19 guez 135 USE disvert_m, ONLY: ap, bp, preff
20 guez 83 USE exner_hyb_m, ONLY: exner_hyb
21     USE q_sat_m, ONLY: q_sat
22 guez 88 use read_reanalyse_m, only: read_reanalyse
23 guez 108 use writefield_m, only: writefield
24 guez 3
25 guez 83 INTEGER, INTENT(IN):: itau
26 guez 102 REAL, intent(inout):: ucov(:, :, :) ! (iim + 1, jjm + 1, llm) vent covariant
27     REAL, intent(inout):: vcov(:, :, :) ! (iim + 1, jjm, llm) ! vent covariant
28    
29 guez 108 REAL, intent(inout):: teta(:, :, :) ! (iim + 1, jjm + 1, llm)
30     ! température potentielle
31    
32     REAL, intent(inout):: q(:, :, :) ! (iim + 1, jjm + 1, llm)
33 guez 88 REAL, intent(in):: ps(:, :) ! (iim + 1, jjm + 1) pression au sol
34 guez 3
35 guez 83 ! Local:
36    
37 guez 210 ! Variables dynamiques pour les réanalyses
38 guez 102
39     REAL, save:: ucovrea1(iim + 1, jjm + 1, llm), vcovrea1(iim + 1, jjm, llm)
40 guez 210 ! vents covariants r\'eanalyses
41 guez 102
42 guez 210 REAL, save:: tetarea1(iim + 1, jjm + 1, llm)
43     ! potential temperture from reanalysis
44 guez 211
45 guez 210 REAL, save:: qrea1(iim + 1, jjm + 1, llm)
46 guez 102
47     REAL, save:: ucovrea2(iim + 1, jjm + 1, llm), vcovrea2(iim + 1, jjm, llm)
48     ! vents covariants reanalyses
49    
50 guez 210 REAL, save:: tetarea2(iim + 1, jjm + 1, llm)
51     ! potential temperture from reanalysis
52 guez 211
53 guez 210 REAL, save:: qrea2(iim + 1, jjm + 1, llm)
54 guez 3
55 guez 115 INTEGER l
56 guez 102 REAL tau
57 guez 3
58 guez 44 ! TEST SUR QSAT
59 guez 210 REAL p(iim + 1, jjm + 1, llm + 1)
60 guez 90 real pk(iim + 1, jjm + 1, llm), pks(iim + 1, jjm + 1)
61     REAL qsat(iim + 1, jjm + 1, llm)
62 guez 3
63 guez 29 !-----------------------------------------------------------------------
64 guez 3
65 guez 172 IF (itau == 0) THEN
66     ! Lecture du premier état des réanalyses :
67     CALL read_reanalyse(ps, ucovrea2, vcovrea2, tetarea2, qrea2)
68     qrea2 = max(qrea2, 0.1)
69 guez 3
70 guez 172 if (ini_anal) then
71     IF (guide_u) ucov = ucovrea2
72     IF (guide_v) vcov = vcovrea2
73     IF (guide_t) teta = tetarea2
74 guez 115
75 guez 172 IF (guide_q) then
76     ! Calcul de l'humidité saturante :
77     forall (l = 1: llm + 1) p(:, :, l) = ap(l) + bp(l) * ps
78     CALL exner_hyb(ps, p, pks, pk)
79     q = q_sat(pk * teta / cpp, preff * (pk / cpp)**(1. / kappa)) &
80     * qrea2 * 0.01
81     end IF
82 guez 112 end if
83 guez 172 END IF
84 guez 3
85 guez 172 ! Importation des vents, pression et temp\'erature r\'eels :
86 guez 115
87 guez 102 ! Nudging fields are given 4 times per day:
88     IF (mod(itau, day_step / 4) == 0) THEN
89     vcovrea1 = vcovrea2
90     ucovrea1 = ucovrea2
91     tetarea1 = tetarea2
92     qrea1 = qrea2
93 guez 3
94 guez 172 CALL read_reanalyse(ps, ucovrea2, vcovrea2, tetarea2, qrea2)
95 guez 102 qrea2 = max(qrea2, 0.1)
96 guez 112
97     if (guide_u) then
98     CALL writefield("ucov", ucov)
99     CALL writefield("ucovrea2", ucovrea2)
100     end if
101    
102     if (guide_t) then
103     CALL writefield("teta", teta)
104     CALL writefield("tetarea2", tetarea2)
105     end if
106    
107     if (guide_q) then
108     CALL writefield("qrea2", qrea2)
109     CALL writefield("q", q)
110     end if
111 guez 102 END IF
112 guez 3
113 guez 102 ! Guidage
114 guez 3
115 guez 102 tau = mod(real(itau) / real(day_step / 4), 1.)
116 guez 3
117 guez 102 ! x_gcm = a * x_gcm + (1 - a) * x_reanalyses
118 guez 3
119 guez 172 IF (guide_u) forall (l = 1: llm) ucov(:, :, l) = (1. - alpha_u) &
120     * ucov(:, :, l) + alpha_u * ((1. - tau) * ucovrea1(:, :, l) + tau &
121     * ucovrea2(:, :, l))
122 guez 3
123 guez 172 IF (guide_v) forall (l = 1: llm) vcov(:, :, l) = (1. - alpha_v) &
124     * vcov(:, :, l) + alpha_v * ((1. - tau) * vcovrea1(:, :, l) + tau &
125     * vcovrea2(:, :, l))
126 guez 3
127 guez 172 IF (guide_t) forall (l = 1: llm) teta(:, :, l) = (1. - alpha_t) &
128     * teta(:, :, l) + alpha_t * ((1. - tau) * tetarea1(:, :, l) + tau &
129     * tetarea2(:, :, l))
130    
131 guez 102 IF (guide_q) THEN
132     ! Calcul de l'humidité saturante :
133     forall (l = 1: llm + 1) p(:, :, l) = ap(l) + bp(l) * ps
134     CALL exner_hyb(ps, p, pks, pk)
135     qsat = q_sat(pk * teta / cpp, preff * (pk / cpp)**(1. / kappa))
136 guez 3
137 guez 102 ! humidité relative en % -> humidité spécifique
138 guez 172 forall (l = 1: llm) q(:, :, l) = (1. - alpha_q) * q(:, :, l) &
139     + alpha_q * (qsat(:, :, l) * ((1. - tau) * qrea1(:, :, l) &
140     + tau * qrea2(:, :, l)) * 0.01)
141 guez 102 END IF
142 guez 3
143 guez 29 END SUBROUTINE guide
144 guez 20
145     END MODULE guide_m

  ViewVC Help
Powered by ViewVC 1.1.21