4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta, & |
SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta) |
|
conser) |
|
8 |
|
|
9 |
! From dyn3d/advect.F, version 1.1.1.1 2004/05/19 12:53:06 |
! From dyn3d/advect.F, version 1.1.1.1, 2004/05/19 12:53:06 |
10 |
! Authors: P. Le Van , F. Hourdin |
! Authors: P. Le Van , F. Hourdin |
11 |
! Objet : calcul des termes d'advection verticale pour u, v, teta. |
! Objet : calcul des termes d'advection verticale pour u, v, teta. |
12 |
! Ces termes sont ajoutés à du, dv, dteta. |
! Ces termes sont ajoutés à du, dv, dteta. |
14 |
USE dimens_m, ONLY : iim, llm |
USE dimens_m, ONLY : iim, llm |
15 |
USE paramet_m, ONLY : iip1, iip2, ip1jm, ip1jmp1 |
USE paramet_m, ONLY : iip1, iip2, ip1jm, ip1jmp1 |
16 |
USE comconst, ONLY : daysec |
USE comconst, ONLY : daysec |
|
USE comgeom, ONLY : unsaire |
|
|
USE ener, ONLY : gtot |
|
17 |
|
|
18 |
! Arguments: |
REAL, intent(in):: ucov(ip1jmp1, llm), vcov(ip1jm, llm) |
|
REAL, intent(in):: vcov(ip1jm, llm), ucov(ip1jmp1, llm) |
|
19 |
real, intent(in):: teta(ip1jmp1, llm) |
real, intent(in):: teta(ip1jmp1, llm) |
|
REAL, intent(in):: massebx(ip1jmp1, llm), masseby(ip1jm, llm) |
|
20 |
real, INTENT (IN):: w(ip1jmp1, llm) |
real, INTENT (IN):: w(ip1jmp1, llm) |
21 |
REAL, intent(inout):: dv(ip1jm, llm), du(ip1jmp1, llm), dteta(ip1jmp1, llm) |
REAL, intent(in):: massebx(ip1jmp1, llm), masseby(ip1jm, llm) |
22 |
LOGICAL, INTENT (IN):: conser |
REAL, intent(inout):: du(ip1jmp1, llm), dv(ip1jm, llm), dteta(ip1jmp1, llm) |
23 |
|
|
24 |
! Local: |
! Local: |
25 |
REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1) |
REAL uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1) |
26 |
REAL unsaire2(ip1jmp1) |
REAL ww, uu, vv |
|
REAL deuxjour, ww, uu, vv |
|
27 |
INTEGER ij, l |
INTEGER ij, l |
28 |
|
|
29 |
!----------------------------------------------------------------------- |
!----------------------------------------------------------------------- |
30 |
|
|
31 |
! 2. Calculs preliminaires : |
! 2. Calculs preliminaires : |
32 |
|
|
|
IF (conser) THEN |
|
|
deuxjour = 2. * daysec |
|
|
unsaire2 = unsaire**2 |
|
|
END IF |
|
|
|
|
33 |
! Calcul de \bar{u}^{yy} |
! Calcul de \bar{u}^{yy} |
34 |
DO l = 1, llm |
DO l = 1, llm |
35 |
DO ij = iip2, ip1jmp1 |
DO ij = iip2, ip1jmp1 |
76 |
|
|
77 |
! correction pour du(iip1, j, l) |
! correction pour du(iip1, j, l) |
78 |
! du(iip1, j, l)= du(1, j, l) |
! du(iip1, j, l)= du(1, j, l) |
|
|
|
79 |
DO ij = iip1 + iip1, ip1jm, iip1 |
DO ij = iip1 + iip1, ip1jm, iip1 |
80 |
du(ij, l) = du(ij-iim, l) |
du(ij, l) = du(ij-iim, l) |
81 |
du(ij, l+1) = du(ij-iim, l+1) |
du(ij, l+1) = du(ij-iim, l+1) |
96 |
dteta(ij, l) = dteta(ij, l) - ww |
dteta(ij, l) = dteta(ij, l) - ww |
97 |
dteta(ij, l + 1) = dteta(ij, l + 1) + ww |
dteta(ij, l + 1) = dteta(ij, l + 1) + ww |
98 |
end DO |
end DO |
|
|
|
|
IF (conser) THEN |
|
|
gtot(l) = deuxjour * sqrt(sum(wsur2**2 * unsaire2) / ip1jmp1) |
|
|
END IF |
|
99 |
END DO |
END DO |
100 |
|
|
101 |
END SUBROUTINE advect |
END SUBROUTINE advect |