source: LMDZ6/branches/Amaury_dev/libf/dyn3d/advect.F90 @ 5112

Last change on this file since 5112 was 5105, checked in by abarral, 4 months ago

Replace 1DUTILS.h by module lmdz_1dutils.f90
Replace 1DConv.h by module lmdz_old_1dconv.f90 (it's only used by old_* files)
Convert *.F to *.f90
Fix gradsdef.h formatting
Remove unnecessary "RETURN" at the end of functions/subroutines

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 4.3 KB
Line 
1! $Header$
2
3SUBROUTINE advect(ucov, vcov, teta, w, massebx, masseby, du, dv, dteta)
4
5  USE comconst_mod, ONLY: daysec
6  USE logic_mod, ONLY: conser
7  USE ener_mod, ONLY: gtot
8
9  IMPLICIT NONE
10  !=======================================================================
11  !
12  !   Auteurs:  P. Le Van , Fr. Hourdin  .
13  !   -------
14  !
15  !   Objet:
16  !   ------
17  !
18  !   *************************************************************
19  !   .... calcul des termes d'advection vertic.pour u,v,teta,q ...
20  !   *************************************************************
21  !    ces termes sont ajoutes a du,dv,dteta et dq .
22  !  Modif F.Forget 03/94 : on retire q de advect
23  !
24  !=======================================================================
25  !-----------------------------------------------------------------------
26  !   Declarations:
27  !   -------------
28
29  include "dimensions.h"
30  include "paramet.h"
31  include "comgeom.h"
32
33  !   Arguments:
34  !   ----------
35
36  REAL :: vcov(ip1jm, llm), ucov(ip1jmp1, llm), teta(ip1jmp1, llm)
37  REAL :: massebx(ip1jmp1, llm), masseby(ip1jm, llm), w(ip1jmp1, llm)
38  REAL :: dv(ip1jm, llm), du(ip1jmp1, llm), dteta(ip1jmp1, llm)
39
40  !   Local:
41  !   ------
42
43  REAL :: uav(ip1jmp1, llm), vav(ip1jm, llm), wsur2(ip1jmp1)
44  REAL :: unsaire2(ip1jmp1), ge(ip1jmp1)
45  REAL :: deuxjour, ww, gt, uu, vv
46
47  INTEGER :: ij, l
48
49  REAL :: SSUM
50
51  !-----------------------------------------------------------------------
52  !   2. Calculs preliminaires:
53  !   -------------------------
54
55  IF (conser)  THEN
56    deuxjour = 2. * daysec
57
58    DO   ij = 1, ip1jmp1
59      unsaire2(ij) = unsaire(ij) * unsaire(ij)
60    END DO
61  END IF
62
63
64  !------------------  -yy ----------------------------------------------
65  !   .  Calcul de     u
66
67  DO  l = 1, llm
68    DO    ij = iip2, ip1jmp1
69      uav(ij, l) = 0.25 * (ucov(ij, l) + ucov(ij - iip1, l))
70    ENDDO
71    DO    ij = iip2, ip1jm
72      uav(ij, l) = uav(ij, l) + uav(ij + iip1, l)
73    ENDDO
74    DO      ij = 1, iip1
75      uav(ij, l) = 0.
76      uav(ip1jm + ij, l) = 0.
77    ENDDO
78  ENDDO
79
80  !------------------  -xx ----------------------------------------------
81  !   .  Calcul de     v
82
83  DO  l = 1, llm
84    DO    ij = 2, ip1jm
85      vav(ij, l) = 0.25 * (vcov(ij, l) + vcov(ij - 1, l))
86    ENDDO
87    DO    ij = 1, ip1jm, iip1
88      vav(ij, l) = vav(ij + iim, l)
89    ENDDO
90    DO    ij = 1, ip1jm - 1
91      vav(ij, l) = vav(ij, l) + vav(ij + 1, l)
92    ENDDO
93    DO    ij = 1, ip1jm, iip1
94      vav(ij + iim, l) = vav(ij, l)
95    ENDDO
96  ENDDO
97
98  !-----------------------------------------------------------------------
99
100  !
101  DO l = 1, llmm1
102
103
104    ! ......   calcul de  - w/2.    au niveau  l+1   .......
105
106    DO ij = 1, ip1jmp1
107      wsur2(ij) = - 0.5 * w(ij, l + 1)
108    END DO
109
110
111    ! .....................     calcul pour  du     ..................
112
113    DO ij = iip2, ip1jm - 1
114      ww = wsur2 (ij) + wsur2(ij + 1)
115      uu = 0.5 * (ucov(ij, l) + ucov(ij, l + 1))
116      du(ij, l) = du(ij, l) - ww * (uu - uav(ij, l)) / massebx(ij, l)
117      du(ij, l + 1) = du(ij, l + 1) + ww * (uu - uav(ij, l + 1)) / massebx(ij, l + 1)
118    END DO
119
120    ! .....  correction pour  du(iip1,j,l)  ........
121    ! .....     du(iip1,j,l)= du(1,j,l)   .....
122
123    !DIR$ IVDEP
124    DO   ij = iip1 + iip1, ip1jm, iip1
125      du(ij, l) = du(ij - iim, l)
126      du(ij, l + 1) = du(ij - iim, l + 1)
127    END DO
128
129    ! .................    calcul pour   dv      .....................
130
131    DO ij = 1, ip1jm
132      ww = wsur2(ij + iip1) + wsur2(ij)
133      vv = 0.5 * (vcov(ij, l) + vcov(ij, l + 1))
134      dv(ij, l) = dv(ij, l) - ww * (vv - vav(ij, l)) / masseby(ij, l)
135      dv(ij, l + 1) = dv(ij, l + 1) + ww * (vv - vav(ij, l + 1)) / masseby(ij, l + 1)
136    END DO
137
138    !
139
140    ! ............................................................
141    ! ...............    calcul pour   dh      ...................
142    ! ............................................................
143
144    !                   ---z
145    !   calcul de  - d( teta  * w )      qu'on ajoute a   dh
146    !               ...............
147
148    DO ij = 1, ip1jmp1
149      ww = wsur2(ij) * (teta(ij, l) + teta(ij, l + 1))
150      dteta(ij, l) = dteta(ij, l) - ww
151      dteta(ij, l + 1) = dteta(ij, l + 1) + ww
152    END DO
153
154    IF(conser)  THEN
155      DO ij = 1, ip1jmp1
156        ge(ij) = wsur2(ij) * wsur2(ij) * unsaire2(ij)
157      END DO
158      gt = SSUM(ip1jmp1, ge, 1)
159      gtot(l) = deuxjour * SQRT(gt / ip1jmp1)
160    END IF
161
162  END DO
163
164
165END SUBROUTINE advect
Note: See TracBrowser for help on using the repository browser.