/[lmdze]/trunk/dyn3d/advect.f
ViewVC logotype

Annotation of /trunk/dyn3d/advect.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 43 - (hide annotations)
Fri Apr 8 12:43:31 2011 UTC (13 years, 2 months ago) by guez
Original Path: trunk/libf/dyn3d/advect.f90
File size: 4694 byte(s)
"start_init_phys" is now called directly by "etat0" instead of through
"start_init_dyn". "qsol_2d" is no longer a variable of module
"start_init_phys_m", it is an argument of
"start_init_phys". "start_init_dyn" now receives "tsol_2d" from
"etat0".

Split file "vlspltqs.f" into "vlspltqs.f90", "vlxqs.f90" and
""vlyqs.f90".

In "start_init_orog", replaced calls to "flin*" by calls to NetCDF95.

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 43 REAL vcov(ip1jm, llm), ucov(ip1jmp1, llm)
22     real, intent(in):: teta(ip1jmp1, llm)
23     REAL massebx(ip1jmp1, llm), masseby(ip1jm, llm)
24     real, INTENT (IN):: w(ip1jmp1, llm)
25 guez 25 REAL dv(ip1jm, llm), du(ip1jmp1, llm), dteta(ip1jmp1, llm)
26 guez 43 LOGICAL, INTENT (IN):: conser
27 guez 3
28 guez 25 ! Local:
29 guez 3
30 guez 25 REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1)
31     REAL unsaire2(ip1jmp1), ge(ip1jmp1)
32     REAL deuxjour, ww, gt, uu, vv
33 guez 3
34 guez 25 INTEGER ij, l
35 guez 3
36 guez 25 REAL ssum
37 guez 3
38 guez 25 !-----------------------------------------------------------------------
39     ! 2. Calculs preliminaires:
40     ! -------------------------
41 guez 3
42 guez 25 IF (conser) THEN
43     deuxjour = 2.*daysec
44 guez 3
45 guez 25 DO ij = 1, ip1jmp1
46     unsaire2(ij) = unsaire(ij)*unsaire(ij)
47     end DO
48     END IF
49 guez 3
50    
51 guez 25 !------------------ -yy ----------------------------------------------
52     ! . Calcul de u
53 guez 3
54 guez 25 DO l = 1, llm
55     DO ij = iip2, ip1jmp1
56     uav(ij, l) = 0.25*(ucov(ij, l)+ucov(ij-iip1, l))
57     END DO
58     DO ij = iip2, ip1jm
59     uav(ij, l) = uav(ij, l) + uav(ij+iip1, l)
60     END DO
61     DO ij = 1, iip1
62     uav(ij, l) = 0.
63     uav(ip1jm+ij, l) = 0.
64     END DO
65     END DO
66 guez 3
67 guez 25 !------------------ -xx ----------------------------------------------
68     ! . Calcul de v
69 guez 3
70 guez 25 DO l = 1, llm
71     DO ij = 2, ip1jm
72     vav(ij, l) = 0.25*(vcov(ij, l)+vcov(ij-1, l))
73     END DO
74     DO ij = 1, ip1jm, iip1
75     vav(ij, l) = vav(ij+iim, l)
76     END DO
77     DO ij = 1, ip1jm - 1
78     vav(ij, l) = vav(ij, l) + vav(ij+1, l)
79     END DO
80     DO ij = 1, ip1jm, iip1
81     vav(ij+iim, l) = vav(ij, l)
82     END DO
83     END DO
84 guez 3
85 guez 25 !-----------------------------------------------------------------------
86 guez 3
87    
88 guez 25 DO l = 1, llmm1
89 guez 3
90    
91 guez 25 ! ...... calcul de - w/2. au niveau l+1 .......
92 guez 3
93 guez 25 DO ij = 1, ip1jmp1
94     wsur2(ij) = -0.5*w(ij, l+1)
95     END DO
96 guez 3
97    
98 guez 25 ! ..................... calcul pour du ..................
99 guez 3
100 guez 25 DO ij = iip2, ip1jm - 1
101     ww = wsur2(ij) + wsur2(ij+1)
102     uu = 0.5*(ucov(ij, l)+ucov(ij, l+1))
103     du(ij, l) = du(ij, l) - ww*(uu-uav(ij, l))/massebx(ij, l)
104     du(ij, l+1) = du(ij, l+1) + ww*(uu-uav(ij, l+1))/massebx(ij, l+1)
105     END DO
106 guez 3
107 guez 25 ! ..... correction pour du(iip1, j, l) ........
108     ! ..... du(iip1, j, l)= du(1, j, l) .....
109 guez 3
110 guez 25 !DIR$ IVDEP
111     DO ij = iip1 + iip1, ip1jm, iip1
112     du(ij, l) = du(ij-iim, l)
113     du(ij, l+1) = du(ij-iim, l+1)
114     END DO
115 guez 3
116 guez 25 ! ................. calcul pour dv .....................
117 guez 3
118 guez 25 DO ij = 1, ip1jm
119     ww = wsur2(ij+iip1) + wsur2(ij)
120     vv = 0.5*(vcov(ij, l)+vcov(ij, l+1))
121     dv(ij, l) = dv(ij, l) - ww*(vv-vav(ij, l))/masseby(ij, l)
122     dv(ij, l+1) = dv(ij, l+1) + ww*(vv-vav(ij, l+1))/masseby(ij, l+1)
123     END DO
124 guez 3
125    
126    
127 guez 25 ! ............................................................
128     ! ............... calcul pour dh ...................
129     ! ............................................................
130 guez 3
131 guez 25 ! ---z
132     ! calcul de - d( teta * w ) qu'on ajoute a dh
133     ! ...............
134    
135     DO ij = 1, ip1jmp1
136     ww = wsur2(ij)*(teta(ij, l)+teta(ij, l+1))
137     dteta(ij, l) = dteta(ij, l) - ww
138     dteta(ij, l+1) = dteta(ij, l+1) + ww
139     end DO
140    
141     IF (conser) THEN
142     DO ij = 1, ip1jmp1
143     ge(ij) = wsur2(ij)*wsur2(ij)*unsaire2(ij)
144     end DO
145     gt = ssum(ip1jmp1, ge, 1)
146     gtot(l) = deuxjour*sqrt(gt/ip1jmp1)
147     END IF
148    
149     END DO
150    
151     END SUBROUTINE advect

  ViewVC Help
Powered by ViewVC 1.1.21