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

Annotation of /trunk/dyn3d/integrd.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 66 - (hide annotations)
Thu Sep 20 13:00:41 2012 UTC (11 years, 8 months ago) by guez
Original Path: trunk/libf/dyn3d/integrd.f90
File size: 4751 byte(s)
Changed name of module "comvert" to "disvert_m". Changed constant
1. to 0.3 in vertical sampling "strato".

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

  ViewVC Help
Powered by ViewVC 1.1.21