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

Contents of /trunk/Sources/dyn3d/advect.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (show annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 2 months ago) by guez
File size: 2982 byte(s)
Moved variables date0, deltat, datasz_max, ncvar_ids, point, buff_pos,
buffer, regular from module histcom_var to modules where they are
defined.

Removed procedure ioipslmpp, useless for a sequential program.

Added argument datasz_max to histwrite_real (to avoid circular
dependency with histwrite).

Removed useless variables and computations everywhere.

Changed real litteral constants from default kind to double precision
in lwb, lwu, lwvn, sw1s, swtt, swtt1, swu.

Removed unused arguments: paer of sw, sw1s, sw2s, swclr; pcldsw of
sw1s, sw2s; pdsig, prayl of swr; co2_ppm of clmain, clqh; tsol of
transp_lay; nsrf of screenp; kcrit and kknu of gwstress; pstd of
orosetup.

Added output of relative humidity.

1 module advect_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta)
8
9 ! From dyn3d/advect.F, version 1.1.1.1, 2004/05/19 12:53:06
10 ! Authors: P. Le Van , F. Hourdin
11 ! Objet : calcul des termes d'advection verticale pour u, v, teta.
12 ! Ces termes sont ajoutés à du, dv, dteta.
13
14 USE dimens_m, ONLY : iim, llm
15 USE paramet_m, ONLY : iip1, iip2, ip1jm, ip1jmp1
16
17 REAL, intent(in):: ucov(ip1jmp1, llm), vcov(ip1jm, llm)
18 real, intent(in):: teta(ip1jmp1, llm)
19 real, INTENT (IN):: w(ip1jmp1, llm)
20 REAL, intent(in):: massebx(ip1jmp1, llm), masseby(ip1jm, llm)
21 REAL, intent(inout):: du(ip1jmp1, llm), dv(ip1jm, llm), dteta(ip1jmp1, llm)
22
23 ! Local:
24 REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1)
25 REAL ww, uu, vv
26 INTEGER ij, l
27
28 !-----------------------------------------------------------------------
29
30 ! 2. Calculs preliminaires :
31
32 ! Calcul de \bar{u}^{yy}
33 DO l = 1, llm
34 DO ij = iip2, ip1jmp1
35 uav(ij, l) = 0.25*(ucov(ij, l)+ucov(ij-iip1, l))
36 END DO
37 DO ij = iip2, ip1jm
38 uav(ij, l) = uav(ij, l) + uav(ij+iip1, l)
39 END DO
40 DO ij = 1, iip1
41 uav(ij, l) = 0.
42 uav(ip1jm+ij, l) = 0.
43 END DO
44 END DO
45
46 ! Calcul de \bar{v}^{xx}
47 DO l = 1, llm
48 DO ij = 2, ip1jm
49 vav(ij, l) = 0.25*(vcov(ij, l)+vcov(ij-1, l))
50 END DO
51 DO ij = 1, ip1jm, iip1
52 vav(ij, l) = vav(ij+iim, l)
53 END DO
54 DO ij = 1, ip1jm - 1
55 vav(ij, l) = vav(ij, l) + vav(ij+1, l)
56 END DO
57 DO ij = 1, ip1jm, iip1
58 vav(ij+iim, l) = vav(ij, l)
59 END DO
60 END DO
61
62 DO l = 1, llm - 1
63 ! calcul de - w/2 au niveau l+1
64 DO ij = 1, ip1jmp1
65 wsur2(ij) = -0.5 * w(ij, l+1)
66 END DO
67
68 ! calcul pour "du"
69 DO ij = iip2, ip1jm - 1
70 ww = wsur2(ij) + wsur2(ij+1)
71 uu = 0.5*(ucov(ij, l)+ucov(ij, l+1))
72 du(ij, l) = du(ij, l) - ww*(uu-uav(ij, l))/massebx(ij, l)
73 du(ij, l+1) = du(ij, l+1) + ww*(uu-uav(ij, l+1))/massebx(ij, l+1)
74 END DO
75
76 ! correction pour du(iip1, j, l)
77 ! du(iip1, j, l)= du(1, j, l)
78 DO ij = iip1 + iip1, ip1jm, iip1
79 du(ij, l) = du(ij-iim, l)
80 du(ij, l+1) = du(ij-iim, l+1)
81 END DO
82
83 ! calcul pour dv
84 DO ij = 1, ip1jm
85 ww = wsur2(ij+iip1) + wsur2(ij)
86 vv = 0.5*(vcov(ij, l)+vcov(ij, l+1))
87 dv(ij, l) = dv(ij, l) - ww*(vv-vav(ij, l))/masseby(ij, l)
88 dv(ij, l+1) = dv(ij, l+1) + ww*(vv-vav(ij, l+1))/masseby(ij, l+1)
89 END DO
90
91 ! calcul pour dh
92 ! calcul de - d(\bar{teta}^z * w) qu'on ajoute à dh
93 DO ij = 1, ip1jmp1
94 ww = wsur2(ij) * (teta(ij, l) + teta(ij, l + 1))
95 dteta(ij, l) = dteta(ij, l) - ww
96 dteta(ij, l + 1) = dteta(ij, l + 1) + ww
97 end DO
98 END DO
99
100 END SUBROUTINE advect
101
102 end module advect_m

  ViewVC Help
Powered by ViewVC 1.1.21