1 |
guez |
349 |
SUBROUTINE advnqx(q, qg, qd) |
2 |
|
|
|
3 |
|
|
! Auteurs: Calcul des valeurs de q aux point u. |
4 |
|
|
|
5 |
|
|
! -------------------------------------------------------------------- |
6 |
|
|
USE dimensions |
7 |
|
|
USE paramet_m |
8 |
|
|
USE conf_gcm_m |
9 |
|
|
IMPLICIT NONE |
10 |
|
|
|
11 |
|
|
|
12 |
|
|
|
13 |
|
|
! Arguments: |
14 |
|
|
! ---------- |
15 |
|
|
REAL q(ip1jmp1, llm), qg(ip1jmp1, llm), qd(ip1jmp1, llm) |
16 |
|
|
|
17 |
|
|
! Local |
18 |
|
|
! --------- |
19 |
|
|
|
20 |
|
|
INTEGER ij, l |
21 |
|
|
|
22 |
|
|
REAL dxqu(ip1jmp1), zqu(ip1jmp1) |
23 |
|
|
REAL zqmax(ip1jmp1), zqmin(ip1jmp1) |
24 |
|
|
LOGICAL extremum(ip1jmp1) |
25 |
|
|
|
26 |
|
|
INTEGER mode |
27 |
|
|
SAVE mode |
28 |
|
|
DATA mode/1/ |
29 |
|
|
|
30 |
|
|
! calcul des pentes en u: |
31 |
|
|
! ----------------------- |
32 |
|
|
IF (mode==0) THEN |
33 |
|
|
DO l = 1, llm |
34 |
|
|
DO ij = 1, ip1jm |
35 |
|
|
qd(ij, l) = q(ij, l) |
36 |
|
|
qg(ij, l) = q(ij, l) |
37 |
|
|
END DO |
38 |
|
|
END DO |
39 |
|
|
ELSE |
40 |
|
|
DO l = 1, llm |
41 |
|
|
DO ij = iip2, ip1jm - 1 |
42 |
|
|
dxqu(ij) = q(ij+1, l) - q(ij, l) |
43 |
|
|
zqu(ij) = 0.5*(q(ij+1,l)+q(ij,l)) |
44 |
|
|
END DO |
45 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
46 |
|
|
dxqu(ij) = dxqu(ij-iim) |
47 |
|
|
zqu(ij) = zqu(ij-iim) |
48 |
|
|
END DO |
49 |
|
|
DO ij = iip2, ip1jm - 1 |
50 |
|
|
zqu(ij) = zqu(ij) - dxqu(ij+1)/12. |
51 |
|
|
END DO |
52 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
53 |
|
|
zqu(ij) = zqu(ij-iim) |
54 |
|
|
END DO |
55 |
|
|
DO ij = iip2 + 1, ip1jm |
56 |
|
|
zqu(ij) = zqu(ij) + dxqu(ij-1)/12. |
57 |
|
|
END DO |
58 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
59 |
|
|
zqu(ij-iim) = zqu(ij) |
60 |
|
|
END DO |
61 |
|
|
|
62 |
|
|
! calcul des valeurs max et min acceptees aux interfaces |
63 |
|
|
|
64 |
|
|
DO ij = iip2, ip1jm - 1 |
65 |
|
|
zqmax(ij) = max(q(ij+1,l), q(ij,l)) |
66 |
|
|
zqmin(ij) = min(q(ij+1,l), q(ij,l)) |
67 |
|
|
END DO |
68 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
69 |
|
|
zqmax(ij) = zqmax(ij-iim) |
70 |
|
|
zqmin(ij) = zqmin(ij-iim) |
71 |
|
|
END DO |
72 |
|
|
DO ij = iip2 + 1, ip1jm |
73 |
|
|
extremum(ij) = dxqu(ij)*dxqu(ij-1) <= 0. |
74 |
|
|
END DO |
75 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
76 |
|
|
extremum(ij-iim) = extremum(ij) |
77 |
|
|
END DO |
78 |
|
|
DO ij = iip2, ip1jm |
79 |
|
|
zqu(ij) = min(max(zqmin(ij),zqu(ij)), zqmax(ij)) |
80 |
|
|
END DO |
81 |
|
|
DO ij = iip2 + 1, ip1jm |
82 |
|
|
IF (extremum(ij)) THEN |
83 |
|
|
qg(ij, l) = q(ij, l) |
84 |
|
|
qd(ij, l) = q(ij, l) |
85 |
|
|
ELSE |
86 |
|
|
qd(ij, l) = zqu(ij) |
87 |
|
|
qg(ij, l) = zqu(ij-1) |
88 |
|
|
END IF |
89 |
|
|
END DO |
90 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
91 |
|
|
qd(ij-iim, l) = qd(ij, l) |
92 |
|
|
qg(ij-iim, l) = qg(ij, l) |
93 |
|
|
END DO |
94 |
|
|
|
95 |
|
|
GO TO 8888 |
96 |
|
|
|
97 |
|
|
DO ij = iip2 + 1, ip1jm |
98 |
|
|
IF (extremum(ij) .AND. .NOT. extremum(ij-1)) qd(ij-1, l) = q(ij, l) |
99 |
|
|
END DO |
100 |
|
|
|
101 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
102 |
|
|
qd(ij-iim, l) = qd(ij, l) |
103 |
|
|
END DO |
104 |
|
|
DO ij = iip2, ip1jm - 1 |
105 |
|
|
IF (extremum(ij) .AND. .NOT. extremum(ij+1)) qg(ij+1, l) = q(ij, l) |
106 |
|
|
END DO |
107 |
|
|
|
108 |
|
|
DO ij = iip1 + iip1, ip1jm, iip1 |
109 |
|
|
qg(ij, l) = qg(ij-iim, l) |
110 |
|
|
END DO |
111 |
|
|
8888 CONTINUE |
112 |
|
|
END DO |
113 |
|
|
END IF |
114 |
|
|
RETURN |
115 |
|
|
END SUBROUTINE advnqx |