1 |
SUBROUTINE calbeta(dtime, indice, knon, snow, qsol, vbeta, vcal, vdif) |
module calbeta_m |
2 |
USE dimens_m |
|
|
USE indicesol |
|
|
USE dimphy |
|
|
USE conf_gcm_m |
|
|
USE suphec_m |
|
3 |
IMPLICIT NONE |
IMPLICIT NONE |
|
! ====================================================================== |
|
|
! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD) |
|
|
! date: 19940414 |
|
|
! ====================================================================== |
|
|
|
|
|
! Calculer quelques parametres pour appliquer la couche limite |
|
|
! ------------------------------------------------------------ |
|
|
REAL tau_gl ! temps de relaxation pour la glace de mer |
|
|
! cc PARAMETER (tau_gl=86400.0*30.0) |
|
|
PARAMETER (tau_gl=86400.0*5.0) |
|
|
REAL mx_eau_sol |
|
|
PARAMETER (mx_eau_sol=150.0) |
|
|
|
|
|
REAL calsol, calsno, calice ! epaisseur du sol: 0.15 m |
|
|
PARAMETER (calsol=1.0/(2.5578E+06*0.15)) |
|
|
PARAMETER (calsno=1.0/(2.3867E+06*0.15)) |
|
|
PARAMETER (calice=1.0/(5.1444E+06*0.15)) |
|
|
|
|
|
INTEGER i |
|
|
|
|
|
REAL dtime |
|
|
REAL snow(klon), qsol(klon) |
|
|
INTEGER indice, knon |
|
|
|
|
|
REAL vbeta(klon) |
|
|
REAL vcal(klon) |
|
|
REAL vdif(klon) |
|
|
|
|
|
|
|
|
IF (indice==is_oce) THEN |
|
|
DO i = 1, knon |
|
|
vcal(i) = 0.0 |
|
|
vbeta(i) = 1.0 |
|
|
vdif(i) = 0.0 |
|
|
END DO |
|
|
END IF |
|
|
|
|
|
IF (indice==is_sic) THEN |
|
|
DO i = 1, knon |
|
|
vcal(i) = calice |
|
|
IF (snow(i)>0.0) vcal(i) = calsno |
|
|
vbeta(i) = 1.0 |
|
|
vdif(i) = 1.0/tau_gl |
|
|
! cc vdif(i) = calice/tau_gl ! c'etait une erreur |
|
|
END DO |
|
|
END IF |
|
|
|
|
|
IF (indice==is_ter) THEN |
|
|
DO i = 1, knon |
|
|
vcal(i) = calsol |
|
|
IF (snow(i)>0.0) vcal(i) = calsno |
|
|
vbeta(i) = min(2.0*qsol(i)/mx_eau_sol, 1.0) |
|
|
vdif(i) = 0.0 |
|
|
END DO |
|
|
END IF |
|
|
|
|
|
IF (indice==is_lic) THEN |
|
|
DO i = 1, knon |
|
|
vcal(i) = calice |
|
|
IF (snow(i)>0.0) vcal(i) = calsno |
|
|
vbeta(i) = 1.0 |
|
|
vdif(i) = 0.0 |
|
|
END DO |
|
|
END IF |
|
4 |
|
|
5 |
RETURN |
contains |
6 |
END SUBROUTINE calbeta |
|
7 |
|
SUBROUTINE calbeta(indice, snow, qsol, vbeta, vcal, vdif) |
8 |
|
|
9 |
|
! Author: Z. X. Li (LMD/CNRS) |
10 |
|
! Date: April 14th, 1994 |
11 |
|
|
12 |
|
! Calcul de quelques paramètres pour appliquer la couche limite. |
13 |
|
|
14 |
|
USE indicesol, ONLY: is_lic, is_oce, is_sic, is_ter |
15 |
|
|
16 |
|
INTEGER, intent(in):: indice |
17 |
|
REAL, intent(in):: snow(:), qsol(:) ! (knon) |
18 |
|
REAL, intent(out):: vbeta(:), vcal(:), vdif(:) ! (knon) |
19 |
|
|
20 |
|
! Local: |
21 |
|
|
22 |
|
REAL, PARAMETER:: tau_gl = 86400. * 5. |
23 |
|
! temps de relaxation pour la glace de mer |
24 |
|
|
25 |
|
REAL, PARAMETER:: max_eau_sol = 150. ! in kg m-2 |
26 |
|
|
27 |
|
! Pour une épaisseur du sol de 15 cm : |
28 |
|
REAL, PARAMETER:: calsol = 1. / (2.5578E6 * 0.15) |
29 |
|
REAL, PARAMETER:: calsno = 1. / (2.3867E6 * 0.15) |
30 |
|
REAL, PARAMETER:: calice = 1. / (5.1444E6 * 0.15) |
31 |
|
|
32 |
|
!------------------------------------------------------------ |
33 |
|
|
34 |
|
select case (indice) |
35 |
|
case(is_oce) |
36 |
|
vbeta = 1. |
37 |
|
vcal = 0. |
38 |
|
vdif = 0. |
39 |
|
|
40 |
|
case (is_sic) |
41 |
|
vbeta = 1. |
42 |
|
vcal = merge(calsno, calice, snow > 0.) |
43 |
|
vdif = 1. / tau_gl |
44 |
|
|
45 |
|
case (is_ter) |
46 |
|
vbeta = min(2. * qsol / max_eau_sol, 1.) |
47 |
|
vcal = merge(calsno, calsol, snow > 0.) |
48 |
|
vdif = 0. |
49 |
|
|
50 |
|
case (is_lic) |
51 |
|
vbeta = 1. |
52 |
|
vcal = merge(calsno, calice, snow > 0.) |
53 |
|
vdif = 0. |
54 |
|
END select |
55 |
|
|
56 |
|
END SUBROUTINE calbeta |
57 |
|
|
58 |
|
end module calbeta_m |