source: LMDZ5/branches/LMDZ5_SPLA/libf/phylmd/homogene.F90

Last change on this file was 1992, checked in by lguez, 11 years ago

Converted to free source form files in libf/phylmd which were still in
fixed source form. The conversion was done using the polish mode of
the NAG Fortran Compiler.

In addition to converting to free source form, the processing of the
files also:

-- indented the code (including comments);

-- set Fortran keywords to uppercase, and set all other identifiers
to lower case;

-- added qualifiers to end statements (for example "end subroutine
conflx", instead of "end");

-- changed the terminating statements of all DO loops so that each
loop ends with an ENDDO statement (instead of a labeled continue).

-- replaced #include by include.

  • 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: 2.9 KB
Line 
1
2! $Header$
3
4SUBROUTINE homogene(paprs, q, dq, u, v, du, dv)
5  USE dimphy
6  IMPLICIT NONE
7  ! ==============================================================
8  ! Schema ad hoc du melange vertical pour les vitesses u et v,
9  ! a appliquer apres le schema de convection (fiajc et fiajh).
10
11  ! paprs:input, pression demi-couche (inter-couche)
12  ! q:    input, vapeur d'eau (kg/kg)
13  ! dq:   input, incrementation de vapeur d'eau (de la convection)
14  ! u:    input, vitesse u
15  ! v:    input, vitesse v
16
17  ! du:   output, incrementation pour u
18  ! dv:   output, incrementation pour v
19  ! ==============================================================
20  ! ym#include "dimensions.h"
21  ! ym#include "dimphy.h"
22
23  REAL paprs(klon, klev+1)
24  REAL q(klon, klev), dq(klon, klev)
25  REAL u(klon, klev), du(klon, klev)
26  REAL v(klon, klev), dv(klon, klev)
27
28  REAL zm_dq(klon) ! quantite totale de l'eau deplacee
29  REAL zm_q(klon) ! quantite totale de la vapeur d'eau
30  REAL zm_u(klon) ! moyenne de u (brassage parfait et total)
31  REAL zm_v(klon) ! moyenne de v (brassage parfait et total)
32  REAL z_frac(klon) ! fraction du brassage parfait et total
33  REAL zm_dp(klon)
34
35  REAL zx
36  INTEGER i, k
37  REAL frac_max
38  PARAMETER (frac_max=0.1)
39  REAL seuil
40  PARAMETER (seuil=1.0E-10)
41  LOGICAL faisrien
42  PARAMETER (faisrien=.TRUE.)
43
44  DO k = 1, klev
45    DO i = 1, klon
46      du(i, k) = 0.0
47      dv(i, k) = 0.0
48    END DO
49  END DO
50
51  IF (faisrien) RETURN
52
53  DO i = 1, klon
54    zm_dq(i) = 0.
55    zm_q(i) = 0.
56    zm_u(i) = 0.
57    zm_v(i) = 0.
58    zm_dp(i) = 0.
59  END DO
60  DO k = 1, klev
61    DO i = 1, klon
62      IF (abs(dq(i,k))>seuil) THEN
63        zx = paprs(i, k) - paprs(i, k+1)
64        zm_dq(i) = zm_dq(i) + abs(dq(i,k))*zx
65        zm_q(i) = zm_q(i) + q(i, k)*zx
66        zm_dp(i) = zm_dp(i) + zx
67        zm_u(i) = zm_u(i) + u(i, k)*zx
68        zm_v(i) = zm_v(i) + v(i, k)*zx
69      END IF
70    END DO
71  END DO
72
73  ! Hypothese principale: apres la convection, la vitesse de chaque
74  ! couche est composee de deux parties: celle (1-z_frac) de la vitesse
75  ! original et celle (z_frac) de la vitesse moyenne qui serait la
76  ! vitesse de chaque couche si le brassage etait parfait et total.
77  ! La fraction du brassage est calculee par le rapport entre la quantite
78  ! totale de la vapeur d'eau deplacee (ou condensee) et la quantite
79  ! totale de la vapeur d'eau. Et cette fraction est limitee a frac_max
80  ! (Est-ce vraiment raisonnable ? Z.X. Li, le 07-09-1995).
81
82  DO i = 1, klon
83    IF (zm_dp(i)>=1.0E-15 .AND. zm_q(i)>=1.0E-15) THEN
84      z_frac(i) = min(frac_max, zm_dq(i)/zm_q(i))
85      zm_u(i) = zm_u(i)/zm_dp(i)
86      zm_v(i) = zm_v(i)/zm_dp(i)
87    END IF
88  END DO
89  DO k = 1, klev
90    DO i = 1, klon
91      IF (zm_dp(i)>=1.E-15 .AND. zm_q(i)>=1.E-15 .AND. abs(dq(i, &
92          k))>seuil) THEN
93        du(i, k) = u(i, k)*(1.-z_frac(i)) + zm_u(i)*z_frac(i) - u(i, k)
94        dv(i, k) = v(i, k)*(1.-z_frac(i)) + zm_v(i)*z_frac(i) - v(i, k)
95      END IF
96    END DO
97  END DO
98
99  RETURN
100END SUBROUTINE homogene
Note: See TracBrowser for help on using the repository browser.