/[lmdze]/trunk/libf/dyn3d/advect.f90
ViewVC logotype

Annotation of /trunk/libf/dyn3d/advect.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 25 - (hide annotations)
Fri Mar 5 16:43:45 2010 UTC (14 years, 2 months ago) by guez
File size: 4654 byte(s)
Simplified "etat0_lim.sh" and "gcm.sh" because the full versions
depended on personal arrangements for directories and machines.

Translated included files into modules. Encapsulated procedures into modules.

Moved variables from module "comgeom" to local variables of
"inigeom". Deleted some unused variables in "comgeom".

Moved variable "day_ini" from module "temps" to module "dynetat0_m".

Removed useless test on variable "time" and useless "close" statement
in procedure "leapfrog".

Removed useless call to "inigeom" in procedure "limit".

1 guez 25 SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta, conser)
2 guez 3
3 guez 25 ! From dyn3d/advect.F, v 1.1.1.1 2004/05/19 12:53:06
4     ! Auteurs: P. Le Van , Fr. Hourdin .
5     ! Objet:
6     ! .... calcul des termes d'advection vertic.pour u, v, teta, q ...
7     ! ces termes sont ajoutes a du, dv, dteta et dq .
8     ! Modif F.Forget 03/94 : on retire q de advect
9 guez 3
10 guez 25 USE dimens_m
11     USE paramet_m
12     USE comconst
13     USE comvert
14     USE comgeom
15     USE ener
16 guez 3
17 guez 25 IMPLICIT NONE
18 guez 3
19 guez 25 ! Arguments:
20 guez 3
21 guez 25 REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)
22     REAL massebx(ip1jmp1, llm), masseby(ip1jm, llm), w(ip1jmp1, llm)
23     REAL dv(ip1jm, llm), du(ip1jmp1, llm), dteta(ip1jmp1, llm)
24     LOGICAL, INTENT (IN) :: conser
25 guez 3
26 guez 25 ! Local:
27 guez 3
28 guez 25 REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1)
29     REAL unsaire2(ip1jmp1), ge(ip1jmp1)
30     REAL deuxjour, ww, gt, uu, vv
31 guez 3
32 guez 25 INTEGER ij, l
33 guez 3
34 guez 25 REAL ssum
35 guez 3
36 guez 25 !-----------------------------------------------------------------------
37     ! 2. Calculs preliminaires:
38     ! -------------------------
39 guez 3
40 guez 25 IF (conser) THEN
41     deuxjour = 2.*daysec
42 guez 3
43 guez 25 DO ij = 1, ip1jmp1
44     unsaire2(ij) = unsaire(ij)*unsaire(ij)
45     end DO
46     END IF
47 guez 3
48    
49 guez 25 !------------------ -yy ----------------------------------------------
50     ! . Calcul de u
51 guez 3
52 guez 25 DO l = 1, llm
53     DO ij = iip2, ip1jmp1
54     uav(ij, l) = 0.25*(ucov(ij, l)+ucov(ij-iip1, l))
55     END DO
56     DO ij = iip2, ip1jm
57     uav(ij, l) = uav(ij, l) + uav(ij+iip1, l)
58     END DO
59     DO ij = 1, iip1
60     uav(ij, l) = 0.
61     uav(ip1jm+ij, l) = 0.
62     END DO
63     END DO
64 guez 3
65 guez 25 !------------------ -xx ----------------------------------------------
66     ! . Calcul de v
67 guez 3
68 guez 25 DO l = 1, llm
69     DO ij = 2, ip1jm
70     vav(ij, l) = 0.25*(vcov(ij, l)+vcov(ij-1, l))
71     END DO
72     DO ij = 1, ip1jm, iip1
73     vav(ij, l) = vav(ij+iim, l)
74     END DO
75     DO ij = 1, ip1jm - 1
76     vav(ij, l) = vav(ij, l) + vav(ij+1, l)
77     END DO
78     DO ij = 1, ip1jm, iip1
79     vav(ij+iim, l) = vav(ij, l)
80     END DO
81     END DO
82 guez 3
83 guez 25 !-----------------------------------------------------------------------
84 guez 3
85    
86 guez 25 DO l = 1, llmm1
87 guez 3
88    
89 guez 25 ! ...... calcul de - w/2. au niveau l+1 .......
90 guez 3
91 guez 25 DO ij = 1, ip1jmp1
92     wsur2(ij) = -0.5*w(ij, l+1)
93     END DO
94 guez 3
95    
96 guez 25 ! ..................... calcul pour du ..................
97 guez 3
98 guez 25 DO ij = iip2, ip1jm - 1
99     ww = wsur2(ij) + wsur2(ij+1)
100     uu = 0.5*(ucov(ij, l)+ucov(ij, l+1))
101     du(ij, l) = du(ij, l) - ww*(uu-uav(ij, l))/massebx(ij, l)
102     du(ij, l+1) = du(ij, l+1) + ww*(uu-uav(ij, l+1))/massebx(ij, l+1)
103     END DO
104 guez 3
105 guez 25 ! ..... correction pour du(iip1, j, l) ........
106     ! ..... du(iip1, j, l)= du(1, j, l) .....
107 guez 3
108 guez 25 !DIR$ IVDEP
109     DO ij = iip1 + iip1, ip1jm, iip1
110     du(ij, l) = du(ij-iim, l)
111     du(ij, l+1) = du(ij-iim, l+1)
112     END DO
113 guez 3
114 guez 25 ! ................. calcul pour dv .....................
115 guez 3
116 guez 25 DO ij = 1, ip1jm
117     ww = wsur2(ij+iip1) + wsur2(ij)
118     vv = 0.5*(vcov(ij, l)+vcov(ij, l+1))
119     dv(ij, l) = dv(ij, l) - ww*(vv-vav(ij, l))/masseby(ij, l)
120     dv(ij, l+1) = dv(ij, l+1) + ww*(vv-vav(ij, l+1))/masseby(ij, l+1)
121     END DO
122 guez 3
123    
124    
125 guez 25 ! ............................................................
126     ! ............... calcul pour dh ...................
127     ! ............................................................
128 guez 3
129 guez 25 ! ---z
130     ! calcul de - d( teta * w ) qu'on ajoute a dh
131     ! ...............
132    
133     DO ij = 1, ip1jmp1
134     ww = wsur2(ij)*(teta(ij, l)+teta(ij, l+1))
135     dteta(ij, l) = dteta(ij, l) - ww
136     dteta(ij, l+1) = dteta(ij, l+1) + ww
137     end DO
138    
139     IF (conser) THEN
140     DO ij = 1, ip1jmp1
141     ge(ij) = wsur2(ij)*wsur2(ij)*unsaire2(ij)
142     end DO
143     gt = ssum(ip1jmp1, ge, 1)
144     gtot(l) = deuxjour*sqrt(gt/ip1jmp1)
145     END IF
146    
147     END DO
148    
149     END SUBROUTINE advect

  ViewVC Help
Powered by ViewVC 1.1.21