Ignore:
Timestamp:
Jul 29, 2024, 11:01:04 PM (3 months ago)
Author:
abarral
Message:

Put YOMCST.h into modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/stratocu_if.F90

    r5099 r5144  
    1   SUBROUTINE stratocu_if(klon,klev,pctsrf,paprs, pplay,t &
    2 ,seuil_inversion,weak_inversion,dthmin)
     1SUBROUTINE stratocu_if(klon, klev, pctsrf, paprs, pplay, t &
     2        , seuil_inversion, weak_inversion, dthmin)
    33
    44  USE indice_sol_mod
     5  USE lmdz_yomcst
    56
    6 IMPLICIT NONE
     7  IMPLICIT NONE
    78
    8 !======================================================================
    9 ! J'introduit un peu de diffusion sauf dans les endroits
    10 ! ou une forte inversion est presente
    11 ! On peut dire qu'il represente la convection peu profonde
     9  !======================================================================
     10  ! J'introduit un peu de diffusion sauf dans les endroits
     11  ! ou une forte inversion est presente
     12  ! On peut dire qu'il represente la convection peu profonde
    1213
    13 ! Arguments:
    14 ! klon-----input-I- nombre de points a traiter
    15 ! paprs----input-R- pression a chaque intercouche (en Pa)
    16 ! pplay----input-R- pression au milieu de chaque couche (en Pa)
    17 ! t--------input-R- temperature (K)
     14  ! Arguments:
     15  ! klon-----input-I- nombre de points a traiter
     16  ! paprs----input-R- pression a chaque intercouche (en Pa)
     17  ! pplay----input-R- pression au milieu de chaque couche (en Pa)
     18  ! t--------input-R- temperature (K)
    1819
    19 ! weak_inversion-----logical
    20 !======================================================================
     20  ! weak_inversion-----logical
     21  !======================================================================
    2122
    22 ! Arguments:
     23  ! Arguments:
    2324
    24     INTEGER, INTENT(IN)                       :: klon,klev
    25     REAL, DIMENSION(klon, klev+1), INTENT(IN) ::  paprs
    26     REAL, DIMENSION(klon, klev), INTENT(IN)   ::  pplay
    27     REAL, DIMENSION(klon, 4), INTENT(IN)   ::  pctsrf
    28     REAL, DIMENSION(klon, klev), INTENT(IN)   :: t
    29    
    30     REAL, DIMENSION(klon), INTENT(OUT)  :: weak_inversion
     25  INTEGER, INTENT(IN) :: klon, klev
     26  REAL, DIMENSION(klon, klev + 1), INTENT(IN) :: paprs
     27  REAL, DIMENSION(klon, klev), INTENT(IN) :: pplay
     28  REAL, DIMENSION(klon, 4), INTENT(IN) :: pctsrf
     29  REAL, DIMENSION(klon, klev), INTENT(IN) :: t
    3130
    32 ! Quelques constantes et options:
     31  REAL, DIMENSION(klon), INTENT(OUT) :: weak_inversion
    3332
    34     REAL seuil_inversion ! au-dela l'inversion est consideree trop faible
    35 !    PARAMETER (seuil=-0.1)
     33  ! Quelques constantes et options:
    3634
    37 ! Variables locales:
     35  REAL seuil_inversion ! au-dela l'inversion est consideree trop faible
     36  !    PARAMETER (seuil=-0.1)
    3837
    39     INTEGER i, k, invb(klon)
    40     REAL zl2(klon)
    41     REAL dthmin(klon), zdthdp
     38  ! Variables locales:
    4239
    43     INCLUDE "YOMCST.h"
     40  INTEGER i, k, invb(klon)
     41  REAL zl2(klon)
     42  REAL dthmin(klon), zdthdp
    4443
    45 ! Chercher la zone d'inversion forte
     44  ! Chercher la zone d'inversion forte
    4645
     46  DO i = 1, klon
     47    invb(i) = klev
     48    dthmin(i) = 0.0
     49  ENDDO
     50  DO k = 2, klev / 2 - 1
    4751    DO i = 1, klon
    48        invb(i) = klev
    49        dthmin(i)=0.0
     52      zdthdp = (t(i, k) - t(i, k + 1)) / (pplay(i, k) - pplay(i, k + 1)) &
     53              - RD * 0.5 * (t(i, k) + t(i, k + 1)) / RCPD / paprs(i, k + 1)
     54      zdthdp = zdthdp * 100.0
     55      IF (pplay(i, k)>0.8 * paprs(i, 1) .AND. &
     56              zdthdp<dthmin(i)) THEN
     57        dthmin(i) = zdthdp
     58        invb(i) = k
     59      ENDIF
    5060    ENDDO
    51     DO k = 2, klev/2-1
    52        DO i = 1, klon
    53           zdthdp = (t(i,k)-t(i,k+1))/(pplay(i,k)-pplay(i,k+1)) &
    54                - RD * 0.5*(t(i,k)+t(i,k+1))/RCPD/paprs(i,k+1)
    55           zdthdp = zdthdp * 100.0
    56           IF (pplay(i,k)>0.8*paprs(i,1) .AND. &
    57                zdthdp<dthmin(i) ) THEN
    58              dthmin(i) = zdthdp
    59              invb(i) = k
    60           ENDIF
    61        ENDDO
    62     ENDDO
     61  ENDDO
    6362
    64 ! Introduire une diffusion:
     63  ! Introduire une diffusion:
    6564
    66     DO i = 1, klon
    67        IF ( (pctsrf(i,is_oce) < 0.5) .OR. &
    68           (invb(i) == klev) .OR. (dthmin(i) > seuil_inversion) ) THEN
    69           weak_inversion(i)=1.
    70        ELSE
    71           weak_inversion(i)=0.
    72        ENDIF
    73     ENDDO
     65  DO i = 1, klon
     66    IF ((pctsrf(i, is_oce) < 0.5) .OR. &
     67            (invb(i) == klev) .OR. (dthmin(i) > seuil_inversion)) THEN
     68      weak_inversion(i) = 1.
     69    ELSE
     70      weak_inversion(i) = 0.
     71    ENDIF
     72  ENDDO
    7473
    75   END SUBROUTINE stratocu_if
     74END SUBROUTINE stratocu_if
Note: See TracChangeset for help on using the changeset viewer.