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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 349 - (hide annotations)
Mon Dec 23 15:07:24 2019 UTC (4 years, 4 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 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

  ViewVC Help
Powered by ViewVC 1.1.21