source: LMDZ6/branches/Amaury_dev/libf/phylmdiso/add_phys_tend_mod.F90 @ 5136

Last change on this file since 5136 was 5134, checked in by abarral, 8 weeks ago

Replace academic.h, alpale.h, comdissip.h, comdissipn.h, comdissnew.h by modules
Remove unused clesph0.h

  • Property svn:keywords set to Id
File size: 35.9 KB
Line 
1
2! $Id: add_phys_tend_mod.F90 5134 2024-07-26 15:56:37Z abarral $
3
4
5MODULE add_phys_tend_mod
6
7  IMPLICIT NONE 
8  ! flag to compute diagnostics to check energy conservation. If  fl_ebil==0, no check
9  INTEGER, SAVE ::   fl_ebil
10!$OMP THREADPRIVATE(fl_ebil)
11  ! flag to include modifcations to ensure energy conservation. If  fl_cor_ebil==0, no corrections
12  ! Note that with time, all these modifications should be included by default
13  INTEGER, SAVE ::   fl_cor_ebil
14!$OMP THREADPRIVATE(fl_cor_ebil)
15
16CONTAINS
17
18SUBROUTINE add_pbl_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap &
19#ifdef ISO
20        ,zdxt,zdxtl,zdxti &
21#endif
22        )
23  ! ======================================================================
24  ! Ajoute les tendances de couche limite, soit determinees par la
25  ! parametrisation
26  ! physique, soit forcees,  aux variables d etat de la dynamique t_seri,
27  ! q_seri ...
28  ! ======================================================================
29
30
31  ! ======================================================================
32  ! Declarations
33  ! ======================================================================
34
35  USE dimphy, ONLY: klon, klev
36!  USE dimphy
37  USE phys_local_var_mod
38  USE phys_state_var_mod
39  USE lmdz_grid_phy, ONLY: nbp_lev
40#ifdef ISO
41  USE infotrac_phy, ONLY: ntraciso=>ntiso
42  USE isotopes_mod, ONLY: iso_eau
43#endif
44  IMPLICIT NONE
45  REAL,SAVE,ALLOCATABLE :: hthturb_gcssold(:)
46  REAL,SAVE,ALLOCATABLE :: hqturb_gcssold(:)
47!$OMP THREADPRIVATE(hthturb_gcssold,hqturb_gcssold)
48  REAL,SAVE :: dtime_frcg
49  LOGICAL,SAVE :: turb_fcg_gcssold
50  LOGICAL,SAVE :: firstcall=.TRUE.
51!$OMP THREADPRIVATE(firstcall,turb_fcg_gcssold,dtime_frcg)
52  INTEGER abortphy
53!  COMMON /turb_forcing/dtime_frcg, hthturb_gcssold, hqturb_gcssold, &
54!    turb_fcg_gcssold
55#ifdef ISO
56  REAL,SAVE,ALLOCATABLE :: hxtturb_gcssold(:,:)
57!$OMP THREADPRIVATE(hxtturb_gcssold)
58        ! variable à définir dans le 1D
59#endif
60
61  ! Arguments :
62  ! ------------
63  REAL zdu(klon, klev), zdv(klon, klev)
64  REAL zdt(klon, klev), zdq(klon, klev), zdql(klon, klev), zdqi(klon, klev), zdqbs(klon,klev)
65  CHARACTER *(*) text
66  REAL paprs(klon,klev+1)
67  INTEGER flag_inhib_tend ! if flag_inhib_tend != 0, tendencies are not added
68  INTEGER itap ! time step number
69#ifdef ISO
70  REAL zdxt(ntraciso,klon, klev), zdxtl(ntraciso,klon, klev), zdxti(ntraciso,klon, klev)
71#endif
72
73  ! Local :
74  ! --------
75  REAL zzdt(klon, klev), zzdq(klon, klev)
76  INTEGER i, k
77#ifdef ISO
78  REAL zzdxt(ntraciso,klon, klev)
79  INTEGER ixt
80#endif
81
82  IF (firstcall) THEN
83    ALLOCATE(hthturb_gcssold(nbp_lev))
84    ALLOCATE(hqturb_gcssold(nbp_lev))
85#ifdef ISO
86    ALLOCATE(hxtturb_gcssold(ntraciso,nbp_lev))
87#endif
88    firstcall=.FALSE.
89  ENDIF
90
91  IF (turb_fcg_gcssold) THEN
92    DO k = 1, klev
93      DO i = 1, klon
94        zzdt(i, k) = hthturb_gcssold(k)*dtime_frcg
95        zzdq(i, k) = hqturb_gcssold(k)*dtime_frcg
96#ifdef ISO
97        do ixt=1,ntraciso
98          zzdxt(ixt,i, k) = hxtturb_gcssold(ixt,k)*dtime_frcg
99        enddo
100#endif
101      END DO
102    END DO
103    PRINT *, ' add_pbl_tend, dtime_frcg ', dtime_frcg
104    PRINT *, ' add_pbl_tend, zzdt ', zzdt
105    PRINT *, ' add_pbl_tend, zzdq ', zzdq
106    CALL add_phys_tend(zdu, zdv, zzdt, zzdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
107#ifdef ISO
108        ,zzdxt,zdxtl,zdxti &
109#endif
110        )
111  ELSE
112    CALL add_phys_tend(zdu, zdv, zdt, zdq, zdql, zdqi, zdqbs, paprs, text,abortphy,flag_inhib_tend, itap, 0 &
113#ifdef ISO
114        ,zdxt,zdxtl,zdxti &
115#endif
116        )
117  END IF
118
119
120
121END SUBROUTINE add_pbl_tend
122
123! $Id: add_phys_tend_mod.F90 5134 2024-07-26 15:56:37Z abarral $
124
125SUBROUTINE add_phys_tend(zdu,zdv,zdt,zdq,zdql,zdqi,zdqbs,paprs,text, &
126                          abortphy,flag_inhib_tend, itap, diag_mode &
127#ifdef ISO
128        ,zdxt,zdxtl,zdxti &
129#endif
130        )
131!======================================================================
132! Ajoute les tendances des variables physiques aux variables
133! d'etat de la dynamique t_seri, q_seri ...
134! On en profite pour faire des tests sur les tendances en question.
135!======================================================================
136
137
138!======================================================================
139! Declarations
140!======================================================================
141
142USE dimphy, ONLY: klon, klev
143USE phys_state_var_mod, ONLY: phys_tstep
144USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri
145#ifdef ISO
146USE phys_local_var_mod, ONLY: xtl_seri, xts_seri, xt_seri
147#endif
148USE phys_state_var_mod, ONLY: ftsol
149USE lmdz_geometry, ONLY: longitude_deg, latitude_deg
150USE lmdz_print_control, ONLY: prt_level
151USE cmp_seri_mod
152USE phys_output_var_mod, ONLY: d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
153              , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
154
155#ifdef ISO
156    USE infotrac_phy, ONLY: ntraciso=>ntiso
157#ifdef ISOVERIF
158    USE isotopes_mod, ONLY: iso_eau
159    USE isotopes_verif_mod
160#endif 
161#endif
162IMPLICIT NONE
163  include "YOMCST.h"
164  include "clesphys.h"
165
166! Arguments :
167!------------
168REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdu, zdv
169REAL, DIMENSION(klon,klev),     INTENT(IN)    :: zdt, zdql, zdqi, zdqbs
170REAL, DIMENSION(klon,klev+1),   INTENT(IN)    :: paprs
171CHARACTER*(*),                  INTENT(IN)    :: text
172INTEGER,                        INTENT(IN)    :: abortphy
173INTEGER,                        INTENT(IN)    :: flag_inhib_tend ! if not 0, tendencies are not added
174INTEGER,                        INTENT(IN)    :: itap            ! time step number
175INTEGER,                        INTENT(IN)    :: diag_mode       ! 0 -> normal effective mode
176                                                                 ! 1 -> only conservation stats are computed
177
178REAL, DIMENSION(klon,klev),     INTENT(INOUT) :: zdq
179#ifdef ISO
180REAL zdxt(ntraciso,klon,klev),zdxtl(ntraciso,klon,klev) &
181        ,zdxti(ntraciso,klon,klev)
182INTEGER ixt
183#endif
184
185! Local :
186!--------
187REAL zt,zq
188#ifdef ISO
189REAL zxt(ntraciso)
190REAL qprec(klon,klev)
191REAL zxt_int(ntraciso), zxtp_int(ntraciso), zxtp(ntraciso,klev),zxt_new
192#endif
193REAL zq_int, zqp_int, zq_new
194
195REAL zqp(klev)
196
197! Save variables, used in diagnostic mode (diag_mode=1).
198REAL, DIMENSION(klon,klev)   :: sav_u_seri, sav_v_seri
199REAL, DIMENSION(klon,klev)   :: sav_ql_seri, sav_qs_seri, sav_qbs_seri, sav_q_seri
200REAL, DIMENSION(klon,klev)   :: sav_t_seri
201REAL, DIMENSION(klon,klev)   :: sav_zdq
202#ifdef ISO
203REAL, DIMENSION(ntraciso,klon,klev)   :: sav_zdxt
204REAL, DIMENSION(ntraciso,klon,klev)   :: sav_xtl_seri, sav_xts_seri, sav_xt_seri
205#endif
206
207INTEGER i, k,j, n
208INTEGER jadrs(klon*klev), jbad
209INTEGER jqadrs(klon*klev), jqbad
210INTEGER kadrs(klon*klev)
211INTEGER kqadrs(klon*klev)
212
213LOGICAL done(klon)
214
215INTEGER debug_level
216logical, save :: first=.TRUE.
217!$OMP THREADPRIVATE(first)
218
219!======================================================================
220! Variables for energy conservation tests
221!======================================================================
222
223! zh_col-------  total enthalpy of vertical air column
224! (air with watter vapour, liquid and solid) (J/m2)
225! zh_dair_col--- total enthalpy of dry air (J/m2)
226! zh_qw_col----  total enthalpy of watter vapour (J/m2)
227! zh_ql_col----  total enthalpy of liquid watter (J/m2)
228! zh_qs_col----  total enthalpy of solid watter  (J/m2)
229! zh_qbs_col----  total enthalpy of blowing snow  (J/m2)
230! zqw_col------  total mass of watter vapour (kg/m2)
231! zql_col------  total mass of liquid watter (kg/m2)
232! zqs_col------  total mass of cloud ice (kg/m2)
233! zqbs_col------  total mass of blowing snow (kg/m2)
234! zek_col------  total kinetic energy (kg/m2)
235
236REAL zairm(klon, klev) ! layer air mass (kg/m2)
237REAL zqw_col(klon,2)
238REAL zql_col(klon,2)
239REAL zqs_col(klon,2)
240REAL zqbs_col(klon,2)
241REAL zek_col(klon,2)
242REAL zh_dair_col(klon,2)
243REAL zh_qw_col(klon,2), zh_ql_col(klon,2), zh_qs_col(klon,2), zh_qbs_col(klon,2)
244REAL zh_col(klon,2)
245
246REAL zcpvap, zcwat, zcice
247
248!======================================================================
249! Initialisations
250
251     IF (prt_level >= 5) THEN
252        write (*,*) "In add_phys_tend, after ",text
253        CALL flush
254     end if
255
256     ! if flag_inhib_tend != 0, tendencies are not added
257     IF (flag_inhib_tend /= 0) THEN
258        ! If requiered, diagnostics are shown
259        IF (flag_inhib_tend > 0) THEN
260           ! print some diagnostics if xxx_seri have changed
261           CALL cmp_seri(flag_inhib_tend,text)
262        END IF
263        RETURN ! on n ajoute pas les tendance
264     END IF
265
266     IF (abortphy==1) RETURN ! on n ajoute pas les tendance si le modele
267                              ! a deja plante.
268
269     debug_level=10
270     IF (first) THEN
271        print *,"TestJLD rcpv, rcw, rcs",rcpv, rcw, rcs
272        first=.FALSE.
273     endif
274
275!  print *,'add_phys_tend: paprs ',paprs
276! When in diagnostic mode, save initial values of out variables
277  IF (diag_mode == 1) THEN
278    sav_u_seri(:,:)  = u_seri(:,:)
279    sav_v_seri(:,:)  = v_seri(:,:)
280    sav_ql_seri(:,:) = ql_seri(:,:)
281    sav_qs_seri(:,:) = qs_seri(:,:)
282    sav_qbs_seri(:,:) = qbs_seri(:,:)
283    sav_q_seri(:,:)  = q_seri(:,:)
284    sav_t_seri(:,:)  = t_seri(:,:)
285    sav_zdq(:,:)     = zdq(:,:)   
286#ifdef ISO
287    sav_zdxt(:,:,:)     = zdxt(:,:,:)
288#endif
289  ENDIF ! (diag_mode == 1)
290!======================================================================
291! Diagnostics for energy conservation tests
292!======================================================================
293  DO k = 1, klev
294    ! layer air mass
295    zairm(:, k) = (paprs(:,k)-paprs(:,k+1))/rg
296  END DO
297
298  IF (fl_ebil > 0) THEN
299    ! ------------------------------------------------
300    ! Compute vertical sum for each atmospheric column
301    ! ------------------------------------------------
302    n=1   ! begining of time step
303
304    zcpvap = rcpv
305    zcwat = rcw
306    zcice = rcs
307
308    CALL integr_v(klon, klev, zcpvap, &
309                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
310                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
311                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
312
313  end if ! end if (fl_ebil .GT. 0)
314
315!======================================================================
316! Ajout des tendances sur le vent et l'eau liquide
317!======================================================================
318
319#ifdef ISO
320#ifdef ISOVERIF
321        IF (iso_eau.gt.0) THEN
322          CALL iso_verif_egalite_vect2D( &
323                xt_seri,q_seri, &
324                'add_phys_tend 321a: '//text,ntraciso,klon,klev)
325          CALL iso_verif_egalite_vect2D( &
326                xtl_seri,ql_seri, &
327                'add_phys_tend 321b: '//text,ntraciso,klon,klev)
328         endif !if (iso_eau.gt.0) THEN
329#ifdef ISOTRAC
330        CALL iso_verif_traceur_vect(xt_seri,klon,klev, &
331                 'add_phys_tend 328a: '//text)
332        CALL iso_verif_traceur_vect(xtl_seri,klon,klev, &
333                 'add_phys_tend 328b: '//text)
334#endif
335#endif
336#endif
337
338     u_seri(:,:)=u_seri(:,:)+zdu(:,:)
339     v_seri(:,:)=v_seri(:,:)+zdv(:,:)
340     ql_seri(:,:)=ql_seri(:,:)+zdql(:,:)
341     qs_seri(:,:)=qs_seri(:,:)+zdqi(:,:)
342     qbs_seri(:,:)=qbs_seri(:,:)+zdqbs(:,:)
343#ifdef ISO
344     xtl_seri(:,:,:)=xtl_seri(:,:,:)+zdxtl(:,:,:)
345     xts_seri(:,:,:)=xts_seri(:,:,:)+zdxti(:,:,:) 
346#endif
347
348!======================================================================
349! On ajoute les tendances de la temperature et de la vapeur d'eau
350! en verifiant que ca ne part pas dans les choux
351!======================================================================
352
353      jbad=0
354      jqbad=0
355      DO k = 1, klev
356         DO i = 1, klon
357            zt=t_seri(i,k)+zdt(i,k)
358            zq=q_seri(i,k)+zdq(i,k)
359#ifdef ISO
360            do ixt=1,ntraciso   
361              zxt(ixt)=xt_seri(ixt,i,k)+zdxt(ixt,i,k)
362            enddo !do ixt=1,ntraciso
363            qprec(i,k)=q_seri(i,k)
364#endif
365            IF ( zt>370. .OR. zt<130. .OR. abs(zdt(i,k))>50. ) THEN
366            jbad = jbad + 1
367            jadrs(jbad) = i
368            kadrs(jbad) = k
369            ENDIF
370            IF ( zq<0. .OR. zq>0.1 .OR. abs(zdq(i,k))>1.e-2 ) THEN
371            jqbad = jqbad + 1
372            jqadrs(jqbad) = i
373            kqadrs(jqbad) = k
374            ENDIF
375            t_seri(i,k)=zt
376            q_seri(i,k)=zq
377#ifdef ISO           
378            do ixt=1,ntraciso   
379              xt_seri(ixt,i,k)=zxt(ixt)
380            enddo !do ixt=1,ntraciso
381#endif
382         ENDDO
383      ENDDO
384
385#ifdef ISO
386#ifdef ISOVERIF
387        IF (iso_eau.gt.0) THEN
388          CALL iso_verif_egalite_vect2D( &
389                xt_seri,q_seri, &
390                'add_phys_tend 122: '//text,ntraciso,klon,klev)
391          CALL iso_verif_egalite_vect2D( &
392                xtl_seri,ql_seri, &
393                'add_phys_tend 138: '//text,ntraciso,klon,klev)
394         endif !if (iso_eau.gt.0) THEN
395#ifdef ISOTRAC
396        CALL iso_verif_traceur_vect(xt_seri,klon,klev, &
397                 'add_phys_tend 374a: '//text)
398        CALL iso_verif_traceur_vect(xtl_seri,klon,klev, &
399                 'add_phys_tend 374b: '//text)
400#endif
401#endif
402#endif
403
404
405!=====================================================================================
406! Impression et stop en cas de probleme important
407!=====================================================================================
408
409IF (jbad > 0) THEN
410      DO j = 1, jbad
411         i=jadrs(j)
412         IF(prt_level>=debug_level) THEN
413          PRINT*,'PLANTAGE POUR LE POINT i lon lat =',&
414                 i,longitude_deg(i),latitude_deg(i),text
415          PRINT*,'l    T     dT       Q     dQ    '
416          DO k = 1, klev
417             WRITE(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
418          ENDDO
419          CALL print_debug_phys(i,debug_level,text)
420         endif
421      ENDDO
422ENDIF
423
424!=====================================================================================
425! Impression, warning et correction en cas de probleme moins important
426!=====================================================================================
427IF (jqbad > 0) THEN
428      done(:) = .FALSE.                         !jyg
429      DO j = 1, jqbad
430        i=jqadrs(j)
431          IF(prt_level>=debug_level) THEN
432           PRINT*,'WARNING  : EAU POUR LE POINT i lon lat =',&
433                  i,longitude_deg(i),latitude_deg(i),text
434           PRINT*,'l    T     dT       Q     dQ    '
435           DO k = 1, klev
436              WRITE(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
437           ENDDO
438          endif
439          IF (ok_conserv_q) THEN
440!jyg<20140228 Corrections pour conservation de l'eau
441            IF (.NOT.done(i)) THEN                  !jyg
442              DO k = 1, klev
443                zqp(k) = max(q_seri(i,k),1.e-15)
444#ifdef ISO
445                do ixt=1,ntraciso
446                  zxtp(ixt,k)=xt_seri(ixt,i,k)*max(1.0,1.e-15/qprec(i,k))
447                enddo
448#endif
449              ENDDO
450              zq_int  = 0.
451              zqp_int = 0.
452              DO k = 1, klev
453                zq_int  = zq_int  + q_seri(i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
454                zqp_int = zqp_int + zqp(k)     *(paprs(i,k)-paprs(i,k+1))/Rg
455              ENDDO
456#ifdef ISO
457              do ixt=1,ntraciso
458              zxt_int(ixt)  = 0.
459              zxtp_int(ixt) = 0.
460              DO k = 1, klev
461                zxt_int(ixt)  = zxt_int(ixt)  + xt_seri(ixt,i,k)*(paprs(i,k)-paprs(i,k+1))/Rg
462                zxtp_int(ixt) = zxtp_int(ixt) + zxtp(ixt,k)     *(paprs(i,k)-paprs(i,k+1))/Rg
463              ENDDO
464              enddo
465#endif
466              IF(prt_level>=debug_level) THEN
467               PRINT*,' cas q_seri<1.e-15 i k zq_int zqp_int zq_int/zqp_int :', &
468                                    i, kqadrs(j), zq_int, zqp_int, zq_int/zqp_int
469              endif
470              DO k = 1, klev
471                zq_new = zqp(k)*zq_int/zqp_int
472                zdq(i,k) = zdq(i,k) + zq_new - q_seri(i,k)
473                q_seri(i,k) = zq_new
474#ifdef ISO
475                do ixt=1,ntraciso
476                  zxt_new = zxtp(ixt,k)*zxt_int(ixt)/zxtp_int(ixt)
477                  zdxt(ixt,i,k) = zdxt(ixt,i,k) + zxt_new - xt_seri(ixt,i,k)
478                  xt_seri(ixt,i,k) = zxt_new
479                enddo !ixt=1,ntraciso
480#endif
481              ENDDO
482              done(i) = .TRUE.
483            ENDIF !(.NOT.done(i))
484          ELSE
485!jyg>
486            DO k = 1, klev
487              zq=q_seri(i,k)+zdq(i,k)
488              IF (zq<1.e-15) THEN
489                 IF (q_seri(i,k)<1.e-15) THEN
490                  IF(prt_level>=debug_level) THEN
491                   PRINT*,' cas q_seri<1.e-15 i k q_seri zq zdq :',i,k,q_seri(i,k),zq,zdq(i,k)
492                  endif
493                  q_seri(i,k)=1.e-15
494                  zdq(i,k)=(1.e-15-q_seri(i,k))
495#ifdef ISO
496               do ixt=1,ntraciso     
497                xt_seri(ixt,i,k)=1.e-15*(xt_seri(ixt,i,k)/qprec(i,k))
498                  ! xt_seri(ixt,i,k)=1.e-15*(Rdefault(index_iso(ixt)))
499                  ! zdxt(ixt,i,k)=0.0
500                zdxt(ixt,i,k)=xt_seri(ixt,i,k)*(1.e-15/qprec(i,k)-1)
501               enddo !do ixt=1,ntraciso   
502#endif
503                 endif
504              endif
505!              zq=q_seri(i,k)+zdq(i,k)
506!              if (zq.lt.1.e-15) THEN
507!                 zdq(i,k)=(1.e-15-q_seri(i,k))
508!              endif
509            ENDDO
510!jyg<20140228
511          ENDIF   !  (ok_conserv_q)
512!jyg>
513      ENDDO ! j = 1, jqbad
514ENDIF
515
516#ifdef ISO
517#ifdef ISOVERIF
518     IF (iso_eau.gt.0) THEN
519        CALL iso_verif_egalite_vect2D( &
520                xt_seri,q_seri, &
521                        'add_phys_tend 173'//text,ntraciso,klon,klev)
522        CALL iso_verif_egalite_vect2D( &
523                zdxt,zdq, &
524                        'add_phys_tend 175'//text,ntraciso,klon,klev)
525      endif !if (iso_eau.gt.0) THEN
526#ifdef ISOTRAC
527        CALL iso_verif_traceur_vect(xt_seri,klon,klev, &
528                 'add_phys_tend 499'//text)
529#endif
530#endif
531#endif
532
533!IM ajout memes tests pour reverifier les jbad, jqbad beg
534      jbad=0
535      jqbad=0
536      DO k = 1, klev
537         DO i = 1, klon
538            IF ( t_seri(i,k)>370. .OR. t_seri(i,k)<130. .OR. abs(zdt(i,k))>50. ) THEN
539            jbad = jbad + 1
540            jadrs(jbad) = i
541!            IF(prt_level.ge.debug_level) THEN
542!             PRINT*,'cas2 i k t_seri zdt',i,k,t_seri(i,k),zdt(i,k)
543!            endif
544            ENDIF
545            IF ( q_seri(i,k)<0. .OR. q_seri(i,k)>0.1 .OR. abs(zdq(i,k))>1.e-2 ) THEN
546            jqbad = jqbad + 1
547            jqadrs(jqbad) = i
548            kqadrs(jqbad) = k
549!            IF(prt_level.ge.debug_level) THEN
550!             PRINT*,'cas2 i k q_seri zdq',i,k,q_seri(i,k),zdq(i,k)
551!            endif
552            ENDIF
553         ENDDO
554      ENDDO
555IF (jbad > 0) THEN
556      DO j = 1, jbad
557         i=jadrs(j)
558         k=kadrs(j)
559         IF(prt_level>=debug_level) THEN
560          PRINT*,'PLANTAGE2 POUR LE POINT i itap lon lat txt jbad zdt t',&
561                 i,itap,longitude_deg(i),latitude_deg(i),text,jbad, &
562                zdt(i,k),t_seri(i,k)-zdt(i,k)
563!!!       IF(prt_level.ge.10.AND.itap.GE.229.AND.i.EQ.3027) THEN
564          PRINT*,'l    T     dT       Q     dQ    '
565          DO k = 1, klev
566             WRITE(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
567          ENDDO
568          CALL print_debug_phys(i,debug_level,text)
569         endif
570      ENDDO
571ENDIF
572
573IF (jqbad > 0) THEN
574      DO j = 1, jqbad
575         i=jqadrs(j)
576         k=kqadrs(j)
577         IF(prt_level>=debug_level) THEN
578          PRINT*,'WARNING  : EAU2 POUR LE POINT i itap lon lat txt jqbad zdq q zdql ql',&
579                 i,itap,longitude_deg(i),latitude_deg(i),text,jqbad,&
580                zdq(i,k), q_seri(i,k)-zdq(i,k), zdql(i,k), ql_seri(i,k)-zdql(i,k)
581!!!       IF(prt_level.ge.10.AND.itap.GE.229.AND.i.EQ.3027) THEN
582          PRINT*,'l    T     dT       Q     dQ    '
583          DO k = 1, klev
584            WRITE(*,'(i3,2f14.4,2e14.2)') k,t_seri(i,k),zdt(i,k),q_seri(i,k),zdq(i,k)
585          ENDDO
586          CALL print_debug_phys(i,debug_level,text)
587         endif
588      ENDDO
589ENDIF
590
591!======================================================================
592! Contrôle des min/max pour arrêt du modèle
593! Si le modele est en mode abortphy, on retire les tendances qu'on
594! vient d'ajouter. Pas exactement parce qu'on ne tient pas compte des
595! seuils.
596!======================================================================
597
598      CALL hgardfou(t_seri,ftsol,text,abortphy)
599      IF (abortphy==1) THEN
600        Print*,'ERROR ABORT hgardfou dans ',text
601! JLD pourquoi on ne modifie pas de meme t_seri et q_seri ?
602        u_seri(:,:)=u_seri(:,:)-zdu(:,:)
603        v_seri(:,:)=v_seri(:,:)-zdv(:,:)
604        ql_seri(:,:)=ql_seri(:,:)-zdql(:,:)
605        qs_seri(:,:)=qs_seri(:,:)-zdqi(:,:)
606        qbs_seri(:,:)=qbs_seri(:,:)-zdqbs(:,:)
607      ENDIF
608
609!======================================================================
610! Diagnostics for energy conservation tests
611!======================================================================
612
613  IF (fl_ebil > 0) THEN
614    ! ------------------------------------------------
615    ! Compute vertical sum for each atmospheric column
616    ! ------------------------------------------------
617    n=2   ! end of time step
618
619    CALL integr_v(klon, klev, zcpvap, &
620                  t_seri, q_seri, ql_seri, qs_seri, qbs_seri, u_seri, v_seri, zairm, &
621                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
622                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
623
624    ! ------------------------------------------------
625    ! Compute the changes by unit of time
626    ! ------------------------------------------------
627
628    d_qw_col(:) = (zqw_col(:,2)-zqw_col(:,1))/phys_tstep
629    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
630    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
631    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
632    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
633
634    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
635
636    d_h_dair_col(:) = (zh_dair_col(:,2)-zh_dair_col(:,1))/phys_tstep
637    d_h_qw_col(:) = (zh_qw_col(:,2)-zh_qw_col(:,1))/phys_tstep
638    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
639    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
640    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
641
642    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
643
644  end if ! end if (fl_ebil .GT. 0)
645
646! When in diagnostic mode, restore "out" variables to initial values.
647  IF (diag_mode == 1) THEN
648    u_seri(:,:)  = sav_u_seri(:,:)
649    v_seri(:,:)  = sav_v_seri(:,:)
650    ql_seri(:,:) = sav_ql_seri(:,:)
651    qs_seri(:,:) = sav_qs_seri(:,:)
652    qbs_seri(:,:) = sav_qbs_seri(:,:)
653    q_seri(:,:)  = sav_q_seri(:,:)
654    t_seri(:,:)  = sav_t_seri(:,:)
655    zdq(:,:)     = sav_zdq(:,:)   
656#ifdef ISO
657    xtl_seri(:,:,:) = sav_xtl_seri(:,:,:)
658    xts_seri(:,:,:) = sav_xts_seri(:,:,:)
659    xt_seri(:,:,:)  = sav_xt_seri(:,:,:)
660    zdxt(:,:,:)     = sav_zdxt(:,:,:)
661#endif
662  ENDIF ! (mode == 1)
663
664
665END SUBROUTINE add_phys_tend
666
667SUBROUTINE diag_phys_tend(nlon, nlev, uu, vv, temp, qv, ql, qs, qbs, &
668                          zdu,zdv,zdt,zdq,zdql,zdqs,zdqbs,paprs,text)
669!======================================================================
670! Ajoute les tendances des variables physiques aux variables
671! d'etat de la dynamique t_seri, q_seri ...
672! On en profite pour faire des tests sur les tendances en question.
673!======================================================================
674! C Risi: on ne met pas les isos dedans car elle n'est jamais apelée.
675
676!======================================================================
677! Declarations
678!======================================================================
679
680USE phys_state_var_mod, ONLY: phys_tstep, ftsol
681USE lmdz_geometry, ONLY: longitude_deg, latitude_deg
682USE lmdz_print_control, ONLY: prt_level
683USE cmp_seri_mod
684USE phys_output_var_mod, ONLY: d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
685              , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
686IMPLICIT NONE
687  include "YOMCST.h"
688  include "clesphys.h"
689
690! Arguments :
691!------------
692INTEGER, INTENT(IN)                           :: nlon, nlev
693REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: uu, vv
694REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: temp, qv, ql, qs, qbs
695REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdu, zdv
696REAL, DIMENSION(nlon,nlev),     INTENT(IN)    :: zdt, zdq, zdql, zdqs, zdqbs
697REAL, DIMENSION(nlon,nlev+1),   INTENT(IN)    :: paprs
698CHARACTER*(*),                  INTENT(IN)    :: text
699
700! Local :
701!--------
702REAL, DIMENSION(nlon,nlev)      :: uu_n, vv_n
703REAL, DIMENSION(nlon,nlev)      :: temp_n, qv_n, ql_n, qs_n, qbs_n
704
705INTEGER k, n
706
707INTEGER debug_level
708logical, save :: first=.TRUE.
709!$OMP THREADPRIVATE(first)
710
711!======================================================================
712! Variables for energy conservation tests
713!======================================================================
714
715! zh_col-------  total enthalpy of vertical air column
716! (air with watter vapour, liquid and solid) (J/m2)
717! zh_dair_col--- total enthalpy of dry air (J/m2)
718! zh_qw_col----  total enthalpy of watter vapour (J/m2)
719! zh_ql_col----  total enthalpy of liquid watter (J/m2)
720! zh_qs_col----  total enthalpy of solid watter  (J/m2)
721! zqw_col------  total mass of watter vapour (kg/m2)
722! zql_col------  total mass of liquid watter (kg/m2)
723! zqs_col------  total mass of cloud ice (kg/m2)
724! zqbs_col------  total mass of blowing snow (kg/m2)
725! zek_col------  total kinetic energy (kg/m2)
726
727REAL zairm(nlon, nlev) ! layer air mass (kg/m2)
728REAL zqw_col(nlon,2)
729REAL zql_col(nlon,2)
730REAL zqs_col(nlon,2)
731REAL zqbs_col(nlon,2)
732REAL zek_col(nlon,2)
733REAL zh_dair_col(nlon,2)
734REAL zh_qw_col(nlon,2), zh_ql_col(nlon,2), zh_qs_col(nlon,2), zh_qbs_col(nlon,2)
735REAL zh_col(nlon,2)
736
737!======================================================================
738! Initialisations
739
740     IF (prt_level >= 5) THEN
741        write (*,*) "In diag_phys_tend, after ",text
742        CALL flush
743     end if
744
745     debug_level=10
746     IF (first) THEN
747        print *,"TestJLD rcpv, rcw, rcs",rcpv, rcw, rcs
748        first=.FALSE.
749     endif
750
751!  print *,'add_phys_tend: paprs ',paprs
752!======================================================================
753! Diagnostics for energy conservation tests
754!======================================================================
755  DO k = 1, nlev
756    ! layer air mass
757    zairm(:, k) = (paprs(:,k)-paprs(:,k+1))/rg
758  END DO
759
760  IF (fl_ebil > 0) THEN
761    ! ------------------------------------------------
762    ! Compute vertical sum for each atmospheric column
763    ! ------------------------------------------------
764    n=1   ! begining of time step
765
766    CALL integr_v(nlon, nlev, rcpv, &
767                  temp, qv, ql, qs, qbs, uu, vv, zairm, &
768                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
769                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
770
771  end if ! end if (fl_ebil .GT. 0)
772
773!======================================================================
774! Ajout des tendances sur le vent, la temperature et les diverses phases de l'eau
775!======================================================================
776
777     uu_n(:,:)=uu(:,:)+zdu(:,:)
778     vv_n(:,:)=vv(:,:)+zdv(:,:)
779     qv_n(:,:)=qv(:,:)+zdq(:,:)
780     ql_n(:,:)=ql(:,:)+zdql(:,:)
781     qs_n(:,:)=qs(:,:)+zdqs(:,:)
782     qbs_n(:,:)=qbs(:,:)+zdqbs(:,:)
783     temp_n(:,:)=temp(:,:)+zdt(:,:)
784
785
786
787!======================================================================
788! Diagnostics for energy conservation tests
789!======================================================================
790
791  IF (fl_ebil > 0) THEN
792    ! ------------------------------------------------
793    ! Compute vertical sum for each atmospheric column
794    ! ------------------------------------------------
795    n=2   ! end of time step
796
797    CALL integr_v(nlon, nlev, rcpv, &
798                  temp_n, qv_n, ql_n, qs_n, qbs_n, uu_n, vv_n, zairm, &
799                    zqw_col(:,n), zql_col(:,n), zqs_col(:,n), zqbs_col(:,n), zek_col(:,n), zh_dair_col(:,n), &
800                    zh_qw_col(:,n), zh_ql_col(:,n), zh_qs_col(:,n), zh_qbs_col(:,n), zh_col(:,n))
801
802    ! ------------------------------------------------
803    ! Compute the changes by unit of time
804    ! ------------------------------------------------
805
806    d_qw_col(:) = (zqw_col(:,2)-zqw_col(:,1))/phys_tstep
807    d_ql_col(:) = (zql_col(:,2)-zql_col(:,1))/phys_tstep
808    d_qs_col(:) = (zqs_col(:,2)-zqs_col(:,1))/phys_tstep
809    d_qbs_col(:) = (zqbs_col(:,2)-zqbs_col(:,1))/phys_tstep
810    d_qt_col(:) = d_qw_col(:) + d_ql_col(:) + d_qs_col(:) + d_qbs_col(:)
811
812    d_ek_col(:) = (zek_col(:,2)-zek_col(:,1))/phys_tstep
813
814   print *,'zdu ', zdu
815   print *,'zdv ', zdv
816   print *,'d_ek_col, zek_col(2), zek_col(1) ',d_ek_col(1), zek_col(1,2), zek_col(1,1)
817
818    d_h_dair_col(:) = (zh_dair_col(:,2)-zh_dair_col(:,1))/phys_tstep
819    d_h_qw_col(:) = (zh_qw_col(:,2)-zh_qw_col(:,1))/phys_tstep
820    d_h_ql_col(:) = (zh_ql_col(:,2)-zh_ql_col(:,1))/phys_tstep
821    d_h_qs_col(:) = (zh_qs_col(:,2)-zh_qs_col(:,1))/phys_tstep
822    d_h_qbs_col(:) = (zh_qbs_col(:,2)-zh_qbs_col(:,1))/phys_tstep
823
824    d_h_col = (zh_col(:,2)-zh_col(:,1))/phys_tstep
825
826  end if ! end if (fl_ebil .GT. 0)
827
828
829END SUBROUTINE diag_phys_tend
830
831SUBROUTINE integr_v(nlon, nlev, zcpvap, &
832                    temp, qv, ql, qs, qbs, uu, vv, zairm,  &
833                    zqw_col, zql_col, zqs_col, zqbs_col, zek_col, zh_dair_col, &
834                    zh_qw_col, zh_ql_col, zh_qs_col, zh_qbs_col, zh_col)
835
836IMPLICIT NONE
837  include "YOMCST.h"
838
839INTEGER,                    INTENT(IN)    :: nlon,nlev
840REAL,                       INTENT(IN)    :: zcpvap
841REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: temp, qv, ql, qs, qbs, uu, vv
842REAL, DIMENSION(nlon,nlev), INTENT(IN)    :: zairm
843REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqw_col
844REAL, DIMENSION(nlon),      INTENT(OUT)   :: zql_col
845REAL, DIMENSION(nlon),      INTENT(OUT)   :: zqs_col, zqbs_col
846REAL, DIMENSION(nlon),      INTENT(OUT)   :: zek_col
847REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_dair_col
848REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qw_col
849REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_ql_col
850REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_qs_col, zh_qbs_col
851REAL, DIMENSION(nlon),      INTENT(OUT)   :: zh_col
852
853INTEGER          :: i, k
854
855
856  ! Reset variables
857    zqw_col(:) = 0.
858    zql_col(:) = 0.
859    zqs_col(:) = 0.
860    zqbs_col(:) = 0.
861    zek_col(:) = 0.
862    zh_dair_col(:) = 0.
863    zh_qw_col(:) = 0.
864    zh_ql_col(:) = 0.
865    zh_qs_col(:) = 0.
866    zh_qbs_col(:) = 0.
867
868!JLD    write (*,*) "rcpd, zcpvap, zcwat, zcice ",rcpd, zcpvap, zcwat, zcice
869 
870    ! ------------------------------------------------
871    ! Compute vertical sum for each atmospheric column
872    ! ------------------------------------------------
873    DO k = 1, nlev
874      DO i = 1, nlon
875        ! Watter mass
876        zqw_col(i) = zqw_col(i) + qv(i, k)*zairm(i, k)
877        zql_col(i) = zql_col(i) + ql(i, k)*zairm(i, k)
878        zqs_col(i) = zqs_col(i) + qs(i, k)*zairm(i, k)
879        zqbs_col(i)= zqbs_col(i) + qbs(i,k)*zairm(i,k)
880        ! Kinetic Energy
881        zek_col(i) = zek_col(i) + 0.5*(uu(i,k)**2+vv(i,k)**2)*zairm(i, k)
882        ! Air enthalpy : dry air, water vapour, liquid, solid
883        zh_dair_col(i) = zh_dair_col(i) + rcpd*(1.-qv(i,k)-ql(i,k)-qs(i,k))* &
884                                               zairm(i, k)*temp(i, k)
885        zh_qw_col(i) = zh_qw_col(i) +  zcpvap*temp(i, k)         *qv(i, k)*zairm(i, k)    !jyg
886        zh_ql_col(i) = zh_ql_col(i) + (zcpvap*temp(i, k) - rlvtt)*ql(i, k)*zairm(i, k)   !jyg
887        zh_qs_col(i) = zh_qs_col(i) + (zcpvap*temp(i, k) - rlstt)*qs(i, k)*zairm(i, k)   !jyg
888        zh_qbs_col(i) = zh_qbs_col(i) + (zcpvap*temp(i, k) - rlstt)*qbs(i, k)*zairm(i, k)   !jyg
889      END DO
890    END DO
891    ! compute total air enthalpy
892    zh_col(:) = zh_dair_col(:) + zh_qw_col(:) + zh_ql_col(:) + zh_qs_col(:) + zh_qbs_col(:)
893
894END SUBROUTINE integr_v
895
896SUBROUTINE prt_enerbil(text, itap)
897!======================================================================
898! Print enenrgy budget diagnotics for the 1D case
899!======================================================================
900
901!======================================================================
902! Declarations
903!======================================================================
904
905USE dimphy, ONLY: klon, klev
906USE phys_state_var_mod, ONLY: phys_tstep
907USE phys_state_var_mod, ONLY: topsw, toplw, solsw, sollw, rain_con, snow_con, bs_fall
908USE lmdz_geometry, ONLY: longitude_deg, latitude_deg
909USE lmdz_print_control, ONLY: prt_level
910USE cmp_seri_mod
911USE phys_output_var_mod, ONLY: d_qw_col, d_ql_col, d_qs_col, d_qbs_col, d_qt_col, d_ek_col, d_h_dair_col &
912              , d_h_qw_col, d_h_ql_col, d_h_qs_col, d_h_qbs_col, d_h_col
913USE phys_local_var_mod, ONLY: evap, sens
914USE phys_local_var_mod, ONLY: u_seri, v_seri, ql_seri, qs_seri, qbs_seri, q_seri, t_seri &
915      , rain_lsc, snow_lsc
916USE climb_hq_mod, ONLY: d_h_col_vdf, f_h_bnd
917IMPLICIT NONE
918include "YOMCST.h"
919
920! Arguments :
921!------------
922CHARACTER*(*) text ! text specifing the involved parametrization
923INTEGER itap        ! time step number
924! local variables
925! ---------------
926REAL bilq_seuil,  bilh_seuil ! thresold on error in Q and H budget
927REAL bilq_error,  bilh_error ! erros in Q and H budget
928REAL bilq_bnd,  bilh_bnd     ! Q and H budget due to exchange with boundaries
929INTEGER bilq_ok,  bilh_ok
930CHARACTER*(12) status
931
932bilq_seuil = 1.E-10
933bilh_seuil = 1.E-1
934bilq_ok=0
935bilh_ok=0
936
937!!print *,'prt_level:',prt_level,' fl_ebil:',fl_ebil,' fl_cor_ebil:',fl_cor_ebil
938IF ( (fl_ebil > 0) .AND. (klon == 1)) THEN
939  bilq_bnd = 0.
940  bilh_bnd = 0.
941
942  param: SELECT CASE (text)
943  CASE("vdf") param
944      bilq_bnd = evap(1)
945      bilh_bnd = sens(1)+(rcpv-rcpd)*evap(1)*t_seri(1,1)
946  CASE("lsc") param
947      bilq_bnd = - rain_lsc(1) - snow_lsc(1)
948      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_lsc(1) &
949              + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_lsc(1)
950  CASE("bsss") param
951      bilq_bnd = - bs_fall(1)
952      bilh_bnd = (-(rcs-rcpd)*t_seri(1,1) + rlstt) * bs_fall(1)
953  CASE("convection") param
954      bilq_bnd = - rain_con(1) - snow_con(1)
955      bilh_bnd = (-(rcw-rcpd)*t_seri(1,1) + rlvtt) * rain_con(1) &
956              + (-(rcs-rcpd)*t_seri(1,1) + rlstt) * snow_con(1)
957  CASE("SW") param
958      bilh_bnd = topsw(1) - solsw(1)
959  CASE("LW") param
960      bilh_bnd = -(toplw(1) + sollw(1))
961  CASE DEFAULT param
962      bilq_bnd = 0.
963      bilh_bnd = 0.
964  END SELECT param
965
966  bilq_error = d_qt_col(1) - bilq_bnd
967  bilh_error = d_h_col(1) - bilh_bnd
968! are the errors too large?
969  IF ( abs(bilq_error) > bilq_seuil) bilq_ok=1
970  IF ( abs(bilh_error) > bilh_seuil) bilh_ok=1
971
972! Print diagnostics
973! =================
974  IF ( (bilq_ok == 0).AND.(bilh_ok == 0) ) THEN
975    status="enerbil-OK"
976  else
977    status="enerbil-PB"
978  end if
979
980  IF ( prt_level >= 3) THEN
981    WRITE(*,9010) text,status," itap:",itap,"enerbilERROR: Q", bilq_error,"  H", bilh_error
9829010  format (1x,A8,2x,A12,A6,I4,A18,E15.6,A5,E15.6)
983  end if
984  IF ( prt_level >= 3) THEN
985    WRITE(*,9000) text,"enerbil: Q,H,KE budget", d_qt_col(1), d_h_col(1),d_ek_col(1)
986  end if
987  IF ( prt_level >= 5) THEN
988    WRITE(*,9000) text,"enerbil at boundaries: Q, H",bilq_bnd, bilh_bnd
989    WRITE(*,9000) text,"enerbil: water budget",d_qt_col(1),d_qw_col(1),d_ql_col(1),d_qs_col(1), d_qbs_col(1)
990    WRITE(*,9000) text,"enerbil: enthalpy budget",d_h_col(1),d_h_dair_col(1),d_h_qw_col(1),d_h_ql_col(1),d_h_qs_col(1),d_h_qbs_col(1)
991  end if
992
993  specific_diag: SELECT CASE (text)
994  CASE("vdf") specific_diag
995    IF ( prt_level >= 5) THEN
996      WRITE(*,9000) text,"enerbil: d_h, bilh, sens,t_seri", d_h_col(1), bilh_bnd, sens(1), t_seri(1,1)
997      WRITE(*,9000) text,"enerbil: d_h_col_vdf, f_h, diff",d_h_col_vdf, f_h_bnd, bilh_bnd-sens(1)
998    end if
999  CASE("lsc") specific_diag
1000    IF ( prt_level >= 5) THEN
1001      WRITE(*,9000) text,"enerbil: rain, bil_lat, bil_sens", rain_lsc(1), rlvtt * rain_lsc(1), -(rcw-rcpd)*t_seri(1,1) * rain_lsc(1)
1002      WRITE(*,9000) text,"enerbil: snow, bil_lat, bil_sens", snow_lsc(1), rlstt * snow_lsc(1), -(rcs-rcpd)*t_seri(1,1) * snow_lsc(1)
1003    end if
1004  CASE("convection") specific_diag
1005    IF ( prt_level >= 5) THEN
1006      WRITE(*,9000) text,"enerbil: rain, bil_lat, bil_sens", rain_con(1), rlvtt * rain_con(1), -(rcw-rcpd)*t_seri(1,1) * rain_con(1)
1007      WRITE(*,9000) text,"enerbil: snow, bil_lat, bil_sens", snow_con(1), rlstt * snow_con(1), -(rcs-rcpd)*t_seri(1,1) * snow_con(1)
1008    end if
1009  END SELECT specific_diag
1010
10119000 format (1x,A8,2x,A35,10E15.6)
1012
1013end if ! end if (fl_ebil .GT. 0)
1014
1015END SUBROUTINE prt_enerbil
1016
1017END MODULE add_phys_tend_mod
Note: See TracBrowser for help on using the repository browser.