Changeset 1992 for LMDZ5/trunk/libf/phylmd/homogene.F90
- Timestamp:
- Mar 5, 2014, 2:19:12 PM (11 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/trunk/libf/phylmd/homogene.F90
r1988 r1992 1 ! 1 2 2 ! $Header$ 3 ! 4 SUBROUTINE homogene(paprs, q, dq, u,v, du, dv)5 6 7 c==============================================================8 cSchema ad hoc du melange vertical pour les vitesses u et v,9 ca appliquer apres le schema de convection (fiajc et fiajh).10 c 11 cpaprs:input, pression demi-couche (inter-couche)12 cq: input, vapeur d'eau (kg/kg)13 cdq: input, incrementation de vapeur d'eau (de la convection)14 cu: input, vitesse u15 cv: input, vitesse v16 c 17 cdu: output, incrementation pour u18 cdv: output, incrementation pour v19 c==============================================================20 cym#include "dimensions.h"21 cym#include "dimphy.h"22 c 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 c 28 29 REAL zm_q(klon)! quantite totale de la vapeur d'eau30 REAL zm_u(klon)! moyenne de u (brassage parfait et total)31 REAL zm_v(klon)! moyenne de v (brassage parfait et total)32 33 34 c 35 36 37 38 39 40 PARAMETER (seuil=1.0e-10)41 42 PARAMETER (faisrien=.true.)43 c 44 45 46 du(i,k) = 0.047 dv(i,k) = 0.048 ENDDO49 ENDDO50 c 51 52 c 53 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 ENDDO60 61 62 IF ( ABS(dq(i,k)).GT.seuil) THEN63 zx = paprs(i,k) - paprs(i,k+1)64 zm_dq(i) = zm_dq(i) + ABS(dq(i,k))*zx65 zm_q(i) = zm_q(i) + q(i,k)*zx66 67 zm_u(i) = zm_u(i) + u(i,k)*zx68 zm_v(i) = zm_v(i) + v(i,k)*zx69 END IF70 ENDDO71 ENDDO72 c 73 cHypothese principale: apres la convection, la vitesse de chaque74 c couche est composee de deux parties: celle (1-z_frac) de la vitesse 75 coriginal et celle (z_frac) de la vitesse moyenne qui serait la76 cvitesse de chaque couche si le brassage etait parfait et total.77 cLa fraction du brassage est calculee par le rapport entre la quantite78 ctotale de la vapeur d'eau deplacee (ou condensee) et la quantite79 c totale de la vapeur d'eau. Et cette fraction est limitee a frac_max 80 c(Est-ce vraiment raisonnable ? Z.X. Li, le 07-09-1995).81 c 82 83 IF (zm_dp(i).GE.1.0E-15 .AND. zm_q(i).GE.1.0E-15) THEN84 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 ENDIF88 ENDDO89 90 91 IF (zm_dp(i) .GE.1.e-15 .AND. zm_q(i).GE.1.e-1592 . .AND. ABS(dq(i,k)).GT.seuil) THEN93 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 IF96 ENDDO97 ENDDO98 c 99 100 END 3 4 SUBROUTINE 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 100 END SUBROUTINE homogene
Note: See TracChangeset
for help on using the changeset viewer.