/[lmdze]/trunk/dyn3d/ADVN/advnqx.f90
ViewVC logotype

Contents of /trunk/dyn3d/ADVN/advnqx.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 349 - (show annotations)
Mon Dec 23 15:07:24 2019 UTC (4 years, 5 months ago) by guez
File size: 2741 byte(s)
Split `advn.f90`

Split `advn.f90` into files containing a single procedure, group these
files in new directory ADVN.

1 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

  ViewVC Help
Powered by ViewVC 1.1.21