GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: phylmd/stratocu_if.F90 Lines: 19 19 100.0 %
Date: 2023-06-30 12:51:15 Branches: 17 18 94.4 %

Line Branch Exec Source
1
4866912
  SUBROUTINE stratocu_if(klon,klev,pctsrf,paprs, pplay,t &
2
288
,seuil_inversion,weak_inversion,dthmin)
3
4
  USE indice_sol_mod
5
6
IMPLICIT NONE
7
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
12
!
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)
18
!
19
! weak_inversion-----logical
20
!======================================================================
21
!
22
! Arguments:
23
!
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
31
!
32
! Quelques constantes et options:
33
!
34
    REAL seuil_inversion ! au-dela l'inversion est consideree trop faible
35
!    PARAMETER (seuil=-0.1)
36
37
!
38
! Variables locales:
39
!
40
288
    INTEGER i, k, invb(klon)
41
    REAL zl2(klon)
42
    REAL dthmin(klon), zdthdp
43
44
    INCLUDE "YOMCST.h"
45
46
!
47
! Chercher la zone d'inversion forte
48
!
49
50
286560
    DO i = 1, klon
51
286272
       invb(i) = klev
52
286560
       dthmin(i)=0.0
53
    ENDDO
54
5184
    DO k = 2, klev/2-1
55
4871808
       DO i = 1, klon
56
          zdthdp = (t(i,k)-t(i,k+1))/(pplay(i,k)-pplay(i,k+1)) &
57
4866624
               - RD * 0.5*(t(i,k)+t(i,k+1))/RCPD/paprs(i,k+1)
58
4866624
          zdthdp = zdthdp * 100.0
59

4866624
          IF (pplay(i,k).GT.0.8*paprs(i,1) .AND. &
60
4896
               zdthdp.LT.dthmin(i) ) THEN
61
800074
             dthmin(i) = zdthdp
62
800074
             invb(i) = k
63
          ENDIF
64
       ENDDO
65
    ENDDO
66
67
68
!
69
! Introduire une diffusion:
70
!
71
286560
    DO i = 1, klon
72
       IF ( (pctsrf(i,is_oce) < 0.5) .OR. &
73

286560
          (invb(i) == klev) .OR. (dthmin(i) > seuil_inversion) ) THEN
74
242170
          weak_inversion(i)=1.
75
       ELSE
76
44102
          weak_inversion(i)=0.
77
       ENDIF
78
    ENDDO
79
80
288
  END SUBROUTINE stratocu_if