source: LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/tiedqneg.f90 @ 5103

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

Handle CPP_INLANDSIS in lmdz_cppkeys_wrapper.F90
Remove obsolete key wrgrads_thermcell, _ADV_HALO, _ADV_HALLO, isminmax
Remove redundant uses of CPPKEY_INCA (thanks acozic)
Remove obsolete misc/write_field.F90
Remove unused ioipsl_* wrappers
Remove calls to WriteField_u with wrong signature
Convert .F -> .[fF]90
(lint) uppercase fortran operators
[note: 1d and iso still broken - working on it]

File size: 1.9 KB
Line 
1SUBROUTINE tiedqneg (pres_h, q, d_q)
2
3  USE dimphy
4  IMPLICIT none
5  !======================================================================
6  ! Auteur(s): CG (LGGE/CNRS) date: 19950201
7  ! O. Boucher (LOA/CNRS) date 19961125
8  ! Objet:  Correction eventuelle des valeurs negatives d'humidite
9  ! induites par le schema de convection de Tiedke
10  !======================================================================
11  ! Arguments:
12  ! pres_h--input-R-la valeur de la pression aux interfaces
13  ! q-------input-R-quantite de traceur
14  ! d_q-----input-output-R-increment du traceur
15  !======================================================================
16
17  INCLUDE "dimensions.h"
18  REAL :: pres_h(klon, klev + 1)
19  REAL :: q(klon, klev)
20  REAL :: d_q(klon, klev)
21  INTEGER :: nb_neg
22  INTEGER :: i, l
23
24  REAL :: qmin
25  PARAMETER (qmin = 0.0)
26
27  DO l = klev, 2, -1
28    nb_neg = 0
29    DO i = 1, klon
30      IF (q(i, l) + d_q(i, l)<qmin) THEN
31        nb_neg = nb_neg + 1
32        d_q(i, l - 1) = d_q(i, l - 1) + (q(i, l) + d_q(i, l) - qmin) &
33                * (pres_h(i, l) - pres_h(i, l + 1)) / (pres_h(i, l - 1) - pres_h(i, l))
34        d_q(i, l) = qmin - q(i, l)
35      ENDIF
36    ENDDO
37    ! IF (nb_neg.NE.0) THEN
38    ! PRINT *,'niveau ', l,' ' , nb_neg, ' valeurs negatives'
39    ! ENDIF
40  ENDDO
41
42  DO l = 1, klev - 1
43    nb_neg = 0
44    DO i = 1, klon
45      IF (q(i, l) + d_q(i, l)<qmin) THEN
46        nb_neg = nb_neg + 1
47        d_q(i, l + 1) = d_q(i, l + 1) + (q(i, l) + d_q(i, l) - qmin) &
48                * (pres_h(i, l) - pres_h(i, l + 1)) / (pres_h(i, l + 1) - pres_h(i, l + 2))
49        d_q(i, l) = qmin - q(i, l)
50      ENDIF
51    ENDDO
52    ! IF (nb_neg.NE.0) THEN
53    ! PRINT *,'niveau ', l,' ' , nb_neg, ' valeurs negatives'
54    ! ENDIF
55  ENDDO
56
57  l = klev
58  DO i = 1, klon
59    IF (q(i, l) + d_q(i, l)<qmin) THEN
60      d_q(i, l) = qmin - q(i, l)
61    ENDIF
62  ENDDO
63
64  RETURN
65END SUBROUTINE tiedqneg
Note: See TracBrowser for help on using the repository browser.