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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 25 - (show 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 SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta, conser)
2
3 ! 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
10 USE dimens_m
11 USE paramet_m
12 USE comconst
13 USE comvert
14 USE comgeom
15 USE ener
16
17 IMPLICIT NONE
18
19 ! Arguments:
20
21 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
26 ! Local:
27
28 REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1)
29 REAL unsaire2(ip1jmp1), ge(ip1jmp1)
30 REAL deuxjour, ww, gt, uu, vv
31
32 INTEGER ij, l
33
34 REAL ssum
35
36 !-----------------------------------------------------------------------
37 ! 2. Calculs preliminaires:
38 ! -------------------------
39
40 IF (conser) THEN
41 deuxjour = 2.*daysec
42
43 DO ij = 1, ip1jmp1
44 unsaire2(ij) = unsaire(ij)*unsaire(ij)
45 end DO
46 END IF
47
48
49 !------------------ -yy ----------------------------------------------
50 ! . Calcul de u
51
52 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
65 !------------------ -xx ----------------------------------------------
66 ! . Calcul de v
67
68 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
83 !-----------------------------------------------------------------------
84
85
86 DO l = 1, llmm1
87
88
89 ! ...... calcul de - w/2. au niveau l+1 .......
90
91 DO ij = 1, ip1jmp1
92 wsur2(ij) = -0.5*w(ij, l+1)
93 END DO
94
95
96 ! ..................... calcul pour du ..................
97
98 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
105 ! ..... correction pour du(iip1, j, l) ........
106 ! ..... du(iip1, j, l)= du(1, j, l) .....
107
108 !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
114 ! ................. calcul pour dv .....................
115
116 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
123
124
125 ! ............................................................
126 ! ............... calcul pour dh ...................
127 ! ............................................................
128
129 ! ---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