/[lmdze]/trunk/dyn3d/qminimum.f
ViewVC logotype

Annotation of /trunk/dyn3d/qminimum.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 265 - (hide annotations)
Tue Mar 20 09:35:59 2018 UTC (6 years, 2 months ago) by guez
File size: 2522 byte(s)
Rename module dimens_m to dimensions.
1 guez 71 module qminimum_m
2 guez 3
3 guez 71 IMPLICIT none
4 guez 40
5 guez 71 contains
6 guez 40
7 guez 71 SUBROUTINE qminimum(q, nq, deltap)
8 guez 40
9 guez 71 ! From LMDZ4/libf/dyn3d/qminimum.F, version 1.1.1.1 2004/05/19 12:53:05
10 guez 40
11 guez 71 ! Objet : traiter les valeurs trop petites (même négatives) pour
12     ! l'eau vapeur et l'eau liquide
13 guez 40
14 guez 265 USE dimensions, ONLY: llm
15 guez 71 USE paramet_m, ONLY: ip1jmp1
16 guez 40
17 guez 71 INTEGER, intent(in):: nq
18     REAL, intent(inout):: q(ip1jmp1, llm, nq)
19     real, intent(in):: deltap(ip1jmp1, llm)
20 guez 40
21 guez 71 ! Local:
22 guez 40
23 guez 71 INTEGER, PARAMETER:: iq_vap = 1 ! indice pour l'eau vapeur
24     INTEGER, PARAMETER:: iq_liq = 2 ! indice pour l'eau liquide
25 guez 40
26 guez 71 ! Il est souhaitable mais non obligatoire que les valeurs des
27     ! paramètres seuil_vap, seuil_liq soient identiques à celles de la
28     ! routine ADDFI.
29     REAL, PARAMETER:: seuil_vap = 1e-10 ! seuil pour l'eau vapeur
30     REAL, PARAMETER:: seuil_liq = 1e-11 ! seuil pour l'eau liquide
31 guez 40
32 guez 71 INTEGER i, k
33     REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
34     INTEGER:: imprim = 0
35 guez 40
36 guez 71 !-------------------------------------------------------------------
37 guez 40
38 guez 71 ! Quand l'eau liquide est trop petite (ou négative), on prend
39     ! l'eau vapeur de la même couche et on la convertit en eau liquide
40     ! (sans changer la température !).
41     DO k = 1, llm
42     DO i = 1, ip1jmp1
43     zx_defau = MAX(seuil_liq - q(i, k, iq_liq), 0.0)
44     q(i, k, iq_vap) = q(i, k, iq_vap) - zx_defau
45     q(i, k, iq_liq) = q(i, k, iq_liq) + zx_defau
46     end DO
47     end DO
48    
49     ! Quand l'eau vapeur est trop faible (ou négative), on complète
50     ! le défaut en prenant de l'eau vapeur de la couche au-dessous.
51     DO k = llm, 2, -1
52     DO i = 1, ip1jmp1
53     zx_abc = deltap(i, k)/deltap(i, k-1)
54     zx_defau = MAX(seuil_vap - q(i, k, iq_vap), 0.0)
55     q(i, k-1, iq_vap) = q(i, k-1, iq_vap) - zx_defau * zx_abc
56     q(i, k, iq_vap) = q(i, k, iq_vap) + zx_defau
57     ENDDO
58     ENDDO
59    
60     ! Quand il s'agit de la première couche au dessus du sol, on doit
61     ! imprimer un message d'avertissement (saturation possible).
62    
63     DO i = 1, ip1jmp1
64     zx_pump(i) = MAX(0., seuil_vap - q(i, 1, iq_vap))
65     q(i, 1, iq_vap) = MAX(q(i, 1, iq_vap), seuil_vap)
66     ENDDO
67     pompe = SUM(zx_pump)
68     IF (imprim <= 500 .AND. pompe > 0.) THEN
69     print *, "Attention : on pompe de l'eau au sol, pompe = ", pompe
70     DO i = 1, ip1jmp1
71     IF (zx_pump(i) > 0.) THEN
72     imprim = imprim + 1
73     ENDIF
74     ENDDO
75     ENDIF
76    
77     END SUBROUTINE qminimum
78    
79     end module qminimum_m

  ViewVC Help
Powered by ViewVC 1.1.21