source: LMDZ4/trunk/libf/phylmd/add_phys_tend.F90 @ 904

Last change on this file since 904 was 904, checked in by Laurent Fairhead, 16 years ago

Debut de la reecriture de la routine physi.F.
On commence par une extension de hgardfou dans le module add_phys_tend.F90
qui verifie que les tendances physiques calculees dans les differentes
parametrisations sont dans des limites tolerables avant de les ajouter aux
variables d'etat de la dynamique FH
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.3 KB
Line 
1!
2! $Header$
3!
4SUBROUTINE add_phys_tend (zdu,zdv,zdt,zdq,zdql,text)
5!======================================================================
6! Ajoute les tendances des variables physiques aux variables
7! d'etat de la dynamique t_seri, q_seri ...
8! On en profite pour faire des tests sur les tendances en question.
9!======================================================================
10
11
12!======================================================================
13! Declarations
14!======================================================================
15
16use dimphy
17use phys_local_var_mod
18IMPLICIT none
19
20! Arguments :
21!------------
22REAL zdu(klon,klev),zdv(klon,klev)
23REAL zdt(klon,klev),zdq(klon,klev),zdql(klon,klev)
24CHARACTER*(*) text
25
26! Local :
27!--------
28REAL zt,zq
29
30INTEGER i, k,j
31INTEGER jadrs(klon), jbad
32INTEGER jqadrs(klon), jqbad
33
34integer debug_level
35
36!======================================================================
37! Initialisations
38
39debug_level=10
40
41!======================================================================
42! Ajout des tendances sur le vent et l'eau liquide
43!======================================================================
44
45     u_seri(:,:)=u_seri(:,:)+zdu(:,:)
46     v_seri(:,:)=v_seri(:,:)+zdv(:,:)
47     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
48
49!======================================================================
50! On ajoute les tendances de la temperature et de la vapeur d'eau
51! en verifiant que ca ne part pas dans les choux
52!======================================================================
53
54      jbad=0
55      jqbad=0
56      DO k = 1, klev
57         DO i = 1, klon
58            zt=t_seri(i,k)+zdt(i,k)
59            zq=q_seri(i,k)+zdq(i,k)
60            IF ( zt>370. .or. zt<130. .or. abs(zdt(i,k))>50. ) then
61            jbad = jbad + 1
62            jadrs(jbad) = i
63            ENDIF
64            IF ( zq<0. .or. zq>0.1 .or. abs(zdq(i,k))>1.e-2 ) then
65            jqbad = jqbad + 1
66            jqadrs(jqbad) = i
67            ENDIF
68            t_seri(i,k)=zt
69            q_seri(i,k)=zq
70         ENDDO
71      ENDDO
72
73!=====================================================================================
74! Impression et stop en cas de probleme important
75!=====================================================================================
76
77IF (jbad .GT. 0) THEN
78      DO j = 1, jbad
79         i=jadrs(j)
80         print*,'PLANTAGE POUR LE POINT i=',i,text
81         print*,'l    T     dT       Q     dQ    '
82         DO k = 1, klev
83             write(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
84         ENDDO
85         call print_debug_phys(i,debug_level,text)
86      ENDDO
87ENDIF
88!
89!=====================================================================================
90! Impression, warning et correction en cas de probleme moins important
91!=====================================================================================
92IF (jqbad .GT. 0) THEN
93      DO j = 1, jqbad
94         i=jqadrs(j)
95         print*,'WARNING  : EAU POUR LE POINT i=',i,text
96         print*,'l    T     dT       Q     dQ    '
97         DO k = 1, klev
98            write(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
99!           zq=q_seri(i,k)+zdq(i,k)
100!           if (zq.lt.1.e-15) then
101!              zdq(i,k)=(1.e-15-q_seri(i,k))
102!           endif
103         ENDDO
104         call print_debug_phys(i,debug_level,text)
105      ENDDO
106ENDIF
107!
108
109      RETURN
110      END
Note: See TracBrowser for help on using the repository browser.