/[lmdze]/trunk/dyn3d/integrd.f
ViewVC logotype

Annotation of /trunk/dyn3d/integrd.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 90 - (hide annotations)
Wed Mar 12 21:16:36 2014 UTC (10 years, 2 months ago) by guez
File size: 4720 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 guez 32 module integrd_m
2 guez 3
3 guez 32 IMPLICIT NONE
4 guez 3
5 guez 32 contains
6 guez 3
7 guez 90 SUBROUTINE integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, dteta, &
8     dp, vcov, ucov, teta, q, ps, masse, finvmaold, dt, leapf)
9 guez 3
10 guez 90 ! From dyn3d/integrd.F, version 1.1.1.1, 2004/05/19 12:53:05
11 guez 46 ! Author: P. Le Van
12 guez 39 ! Objet: incrémentation des tendances dynamiques
13 guez 3
14 guez 32 USE comgeom, ONLY : aire, apoln, apols
15 guez 40 USE dimens_m, ONLY : iim, jjm, llm
16 guez 67 USE disvert_m, ONLY : ap, bp
17 guez 32 USE filtreg_m, ONLY : filtreg
18 guez 67 use massdair_m, only: massdair
19 guez 39 use nr_util, only: assert
20 guez 46 USE paramet_m, ONLY : iip1, iip2, ip1jm, ip1jmp1, jjp1, llmp1
21 guez 71 use qminimum_m, only: qminimum
22 guez 3
23 guez 46 REAL vcovm1(ip1jm, llm), ucovm1((iim + 1) * (jjm + 1), llm)
24 guez 57 REAL, intent(inout):: tetam1((iim + 1) * (jjm + 1), llm)
25     REAL, intent(inout):: psm1((iim + 1) * (jjm + 1))
26 guez 46 real massem1((iim + 1) * (jjm + 1), llm)
27 guez 47 REAL dv(ip1jm, llm), dudyn((iim + 1) * (jjm + 1), llm)
28 guez 46 REAL dteta((iim + 1) * (jjm + 1), llm), dp((iim + 1) * (jjm + 1))
29 guez 90 REAL vcov(ip1jm, llm), ucov((iim + 1) * (jjm + 1), llm)
30     real, intent(inout):: teta((iim + 1) * (jjm + 1), llm)
31     REAL q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nq)
32     REAL, intent(inout):: ps((iim + 1) * (jjm + 1))
33     REAL masse((iim + 1) * (jjm + 1), llm)
34 guez 46 REAL finvmaold((iim + 1) * (jjm + 1), llm)
35 guez 90 real, intent(in):: dt
36 guez 32 LOGICAL, INTENT (IN) :: leapf
37 guez 3
38 guez 90 ! Local:
39 guez 39 INTEGER nq
40 guez 46 REAL vscr(ip1jm), uscr((iim + 1) * (jjm + 1)), hscr((iim + 1) * (jjm + 1))
41     real pscr((iim + 1) * (jjm + 1))
42     REAL massescr((iim + 1) * (jjm + 1), llm)
43     real finvmasse((iim + 1) * (jjm + 1), llm)
44     REAL p((iim + 1) * (jjm + 1), llmp1)
45 guez 32 REAL tpn, tps, tppn(iim), tpps(iim)
46     REAL qpn, qps, qppn(iim), qpps(iim)
47 guez 46 REAL deltap((iim + 1) * (jjm + 1), llm)
48 guez 32 INTEGER l, ij, iq
49 guez 3
50 guez 32 !-----------------------------------------------------------------------
51 guez 3
52 guez 40 call assert(size(q, 1) == iim + 1, size(q, 2) == jjm + 1, &
53     size(q, 3) == llm, "integrd")
54     nq = size(q, 4)
55 guez 39
56 guez 32 DO l = 1, llm
57     DO ij = 1, iip1
58 guez 39 ucov(ij, l) = 0.
59     ucov(ij+ip1jm, l) = 0.
60 guez 32 uscr(ij) = 0.
61     uscr(ij+ip1jm) = 0.
62     END DO
63     END DO
64 guez 3
65 guez 46 massescr = masse
66 guez 3
67 guez 46 ! Integration de ps :
68 guez 3
69 guez 46 pscr = ps
70     ps = psm1 + dt * dp
71 guez 3
72 guez 46 DO ij = 1, (iim + 1) * (jjm + 1)
73     IF (ps(ij) < 0.) THEN
74     PRINT *, 'integrd: au point ij = ', ij, &
75     ', negative surface pressure ', ps(ij)
76     STOP 1
77 guez 32 END IF
78     END DO
79 guez 3
80 guez 32 DO ij = 1, iim
81     tppn(ij) = aire(ij)*ps(ij)
82 guez 46 tpps(ij) = aire(ij+ip1jm) * ps(ij+ip1jm)
83 guez 32 END DO
84 guez 90 tpn = sum(tppn)/apoln
85     tps = sum(tpps)/apols
86 guez 32 DO ij = 1, iip1
87     ps(ij) = tpn
88     ps(ij+ip1jm) = tps
89     END DO
90 guez 3
91 guez 39 ! Calcul de la nouvelle masse d'air au dernier temps integre t+1
92 guez 3
93 guez 37 forall (l = 1: llm + 1) p(:, l) = ap(l) + bp(l) * ps
94 guez 39 CALL massdair(p, masse)
95 guez 3
96 guez 46 finvmasse = masse
97 guez 64 CALL filtreg(finvmasse, jjp1, llm, -2, 2, .TRUE.)
98 guez 3
99 guez 39 ! integration de ucov, vcov, h
100 guez 3
101 guez 39 DO l = 1, llm
102 guez 32 DO ij = iip2, ip1jm
103 guez 39 uscr(ij) = ucov(ij, l)
104 guez 47 ucov(ij, l) = ucovm1(ij, l) + dt*dudyn(ij, l)
105 guez 32 END DO
106 guez 3
107 guez 32 DO ij = 1, ip1jm
108 guez 39 vscr(ij) = vcov(ij, l)
109     vcov(ij, l) = vcovm1(ij, l) + dt*dv(ij, l)
110 guez 32 END DO
111 guez 3
112 guez 57 hscr = teta(:, l)
113     teta(:, l) = tetam1(:, l) * massem1(:, l) / masse(:, l) &
114     + dt * dteta(:, l) / masse(:, l)
115 guez 3
116 guez 39 ! Calcul de la valeur moyenne, unique aux poles pour teta
117 guez 3
118 guez 32 DO ij = 1, iim
119 guez 39 tppn(ij) = aire(ij)*teta(ij, l)
120     tpps(ij) = aire(ij+ip1jm)*teta(ij+ip1jm, l)
121 guez 32 END DO
122 guez 90 tpn = sum(tppn)/apoln
123     tps = sum(tpps)/apols
124 guez 3
125 guez 32 DO ij = 1, iip1
126 guez 39 teta(ij, l) = tpn
127     teta(ij+ip1jm, l) = tps
128 guez 32 END DO
129 guez 3
130 guez 32 IF (leapf) THEN
131 guez 57 ucovm1(:, l) =uscr
132     vcovm1(:, l) = vscr
133     tetam1(:, l) = hscr
134 guez 32 END IF
135     END DO
136 guez 3
137 guez 32 DO l = 1, llm
138 guez 46 DO ij = 1, (iim + 1) * (jjm + 1)
139 guez 39 deltap(ij, l) = p(ij, l) - p(ij, l+1)
140 guez 32 END DO
141     END DO
142 guez 3
143 guez 39 CALL qminimum(q, nq, deltap)
144 guez 3
145 guez 39 ! Calcul de la valeur moyenne, unique aux poles pour q
146 guez 3
147 guez 32 DO iq = 1, nq
148     DO l = 1, llm
149     DO ij = 1, iim
150 guez 40 qppn(ij) = aire(ij)*q(ij, 1, l, iq)
151     qpps(ij) = aire(ij+ip1jm)*q(ij, jjm + 1, l, iq)
152 guez 32 END DO
153 guez 90 qpn = sum(qppn)/apoln
154     qps = sum(qpps)/apols
155 guez 28
156 guez 32 DO ij = 1, iip1
157 guez 40 q(ij, 1, l, iq) = qpn
158     q(ij, jjm + 1, l, iq) = qps
159 guez 32 END DO
160     END DO
161     END DO
162 guez 28
163 guez 57 finvmaold = finvmasse
164 guez 28
165 guez 39 ! Fin de l'integration de q
166 guez 28
167 guez 32 IF (leapf) THEN
168 guez 57 psm1 = pscr
169     massem1 = massescr
170 guez 32 END IF
171    
172     END SUBROUTINE integrd
173    
174     end module integrd_m

  ViewVC Help
Powered by ViewVC 1.1.21