source: LMDZ5/branches/testing/libf/phylmd/homogene.F90 @ 2056

Last change on this file since 2056 was 1999, checked in by Laurent Fairhead, 11 years ago

Merged trunk changes r1920:1997 into testing branch

  • 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.