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

Annotation of /trunk/dyn3d/integrd.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 76 - (hide annotations)
Fri Nov 15 18:45:49 2013 UTC (10 years, 6 months ago) by guez
Original Path: trunk/dyn3d/integrd.f90
File size: 4821 byte(s)
Moved everything out of libf.
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 47 SUBROUTINE integrd(vcovm1, ucovm1, tetam1, psm1, massem1, dv, dudyn, &
8 guez 39 dteta, dp, vcov, ucov, teta, q, ps, masse, finvmaold, dt, leapf)
9 guez 3
10 guez 39 ! 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 39 ! Arguments:
24 guez 3
25 guez 46 REAL vcov(ip1jm, llm), ucov((iim + 1) * (jjm + 1), llm)
26     real, intent(inout):: teta((iim + 1) * (jjm + 1), llm)
27 guez 40 REAL q(:, :, :, :) ! (iim + 1, jjm + 1, llm, nq)
28 guez 46 REAL, intent(inout):: ps((iim + 1) * (jjm + 1))
29     REAL masse((iim + 1) * (jjm + 1), llm)
30 guez 3
31 guez 46 REAL vcovm1(ip1jm, llm), ucovm1((iim + 1) * (jjm + 1), llm)
32 guez 57 REAL, intent(inout):: tetam1((iim + 1) * (jjm + 1), llm)
33     REAL, intent(inout):: psm1((iim + 1) * (jjm + 1))
34 guez 46 real massem1((iim + 1) * (jjm + 1), llm)
35 guez 3
36 guez 47 REAL dv(ip1jm, llm), dudyn((iim + 1) * (jjm + 1), llm)
37 guez 46 REAL dteta((iim + 1) * (jjm + 1), llm), dp((iim + 1) * (jjm + 1))
38     REAL finvmaold((iim + 1) * (jjm + 1), llm)
39 guez 32 LOGICAL, INTENT (IN) :: leapf
40     real, intent(in):: dt
41 guez 3
42 guez 46 ! Local variables:
43 guez 3
44 guez 39 INTEGER nq
45 guez 46 REAL vscr(ip1jm), uscr((iim + 1) * (jjm + 1)), hscr((iim + 1) * (jjm + 1))
46     real pscr((iim + 1) * (jjm + 1))
47     REAL massescr((iim + 1) * (jjm + 1), llm)
48     real finvmasse((iim + 1) * (jjm + 1), llm)
49     REAL p((iim + 1) * (jjm + 1), llmp1)
50 guez 32 REAL tpn, tps, tppn(iim), tpps(iim)
51     REAL qpn, qps, qppn(iim), qpps(iim)
52 guez 46 REAL deltap((iim + 1) * (jjm + 1), llm)
53 guez 3
54 guez 32 INTEGER l, ij, iq
55 guez 3
56 guez 32 REAL ssum
57 guez 3
58 guez 32 !-----------------------------------------------------------------------
59 guez 3
60 guez 40 call assert(size(q, 1) == iim + 1, size(q, 2) == jjm + 1, &
61     size(q, 3) == llm, "integrd")
62     nq = size(q, 4)
63 guez 39
64 guez 32 DO l = 1, llm
65     DO ij = 1, iip1
66 guez 39 ucov(ij, l) = 0.
67     ucov(ij+ip1jm, l) = 0.
68 guez 32 uscr(ij) = 0.
69     uscr(ij+ip1jm) = 0.
70     END DO
71     END DO
72 guez 3
73 guez 46 massescr = masse
74 guez 3
75 guez 46 ! Integration de ps :
76 guez 3
77 guez 46 pscr = ps
78     ps = psm1 + dt * dp
79 guez 3
80 guez 46 DO ij = 1, (iim + 1) * (jjm + 1)
81     IF (ps(ij) < 0.) THEN
82     PRINT *, 'integrd: au point ij = ', ij, &
83     ', negative surface pressure ', ps(ij)
84     STOP 1
85 guez 32 END IF
86     END DO
87 guez 3
88 guez 32 DO ij = 1, iim
89     tppn(ij) = aire(ij)*ps(ij)
90 guez 46 tpps(ij) = aire(ij+ip1jm) * ps(ij+ip1jm)
91 guez 32 END DO
92 guez 39 tpn = ssum(iim, tppn, 1)/apoln
93     tps = ssum(iim, tpps, 1)/apols
94 guez 32 DO ij = 1, iip1
95     ps(ij) = tpn
96     ps(ij+ip1jm) = tps
97     END DO
98 guez 3
99 guez 39 ! Calcul de la nouvelle masse d'air au dernier temps integre t+1
100 guez 3
101 guez 37 forall (l = 1: llm + 1) p(:, l) = ap(l) + bp(l) * ps
102 guez 39 CALL massdair(p, masse)
103 guez 3
104 guez 46 finvmasse = masse
105 guez 64 CALL filtreg(finvmasse, jjp1, llm, -2, 2, .TRUE.)
106 guez 3
107 guez 39 ! integration de ucov, vcov, h
108 guez 3
109 guez 39 DO l = 1, llm
110 guez 32 DO ij = iip2, ip1jm
111 guez 39 uscr(ij) = ucov(ij, l)
112 guez 47 ucov(ij, l) = ucovm1(ij, l) + dt*dudyn(ij, l)
113 guez 32 END DO
114 guez 3
115 guez 32 DO ij = 1, ip1jm
116 guez 39 vscr(ij) = vcov(ij, l)
117     vcov(ij, l) = vcovm1(ij, l) + dt*dv(ij, l)
118 guez 32 END DO
119 guez 3
120 guez 57 hscr = teta(:, l)
121     teta(:, l) = tetam1(:, l) * massem1(:, l) / masse(:, l) &
122     + dt * dteta(:, l) / masse(:, l)
123 guez 3
124 guez 39 ! Calcul de la valeur moyenne, unique aux poles pour teta
125 guez 3
126 guez 32 DO ij = 1, iim
127 guez 39 tppn(ij) = aire(ij)*teta(ij, l)
128     tpps(ij) = aire(ij+ip1jm)*teta(ij+ip1jm, l)
129 guez 32 END DO
130 guez 39 tpn = ssum(iim, tppn, 1)/apoln
131     tps = ssum(iim, tpps, 1)/apols
132 guez 3
133 guez 32 DO ij = 1, iip1
134 guez 39 teta(ij, l) = tpn
135     teta(ij+ip1jm, l) = tps
136 guez 32 END DO
137 guez 3
138 guez 32 IF (leapf) THEN
139 guez 57 ucovm1(:, l) =uscr
140     vcovm1(:, l) = vscr
141     tetam1(:, l) = hscr
142 guez 32 END IF
143     END DO
144 guez 3
145 guez 32 DO l = 1, llm
146 guez 46 DO ij = 1, (iim + 1) * (jjm + 1)
147 guez 39 deltap(ij, l) = p(ij, l) - p(ij, l+1)
148 guez 32 END DO
149     END DO
150 guez 3
151 guez 39 CALL qminimum(q, nq, deltap)
152 guez 3
153 guez 39 ! Calcul de la valeur moyenne, unique aux poles pour q
154 guez 3
155 guez 32 DO iq = 1, nq
156     DO l = 1, llm
157     DO ij = 1, iim
158 guez 40 qppn(ij) = aire(ij)*q(ij, 1, l, iq)
159     qpps(ij) = aire(ij+ip1jm)*q(ij, jjm + 1, l, iq)
160 guez 32 END DO
161 guez 39 qpn = ssum(iim, qppn, 1)/apoln
162     qps = ssum(iim, qpps, 1)/apols
163 guez 28
164 guez 32 DO ij = 1, iip1
165 guez 40 q(ij, 1, l, iq) = qpn
166     q(ij, jjm + 1, l, iq) = qps
167 guez 32 END DO
168     END DO
169     END DO
170 guez 28
171 guez 57 finvmaold = finvmasse
172 guez 28
173 guez 39 ! Fin de l'integration de q
174 guez 28
175 guez 32 IF (leapf) THEN
176 guez 57 psm1 = pscr
177     massem1 = massescr
178 guez 32 END IF
179    
180     END SUBROUTINE integrd
181    
182     end module integrd_m

  ViewVC Help
Powered by ViewVC 1.1.21