| 1 | MODULE lmdz_ratqs_ini |
|---|
| 2 | |
|---|
| 3 | IMPLICIT NONE |
|---|
| 4 | |
|---|
| 5 | INTEGER :: lunout |
|---|
| 6 | |
|---|
| 7 | INTEGER, PROTECTED :: nbsrf,is_lic,is_ter |
|---|
| 8 | REAL, PROTECTED :: RG,RV,RD,RCPD,RLSTT,RLVTT,RTT |
|---|
| 9 | REAL, PROTECTED :: a_ratqs_cv |
|---|
| 10 | REAL, PROTECTED :: tau_var |
|---|
| 11 | REAL, PROTECTED :: fac_tau |
|---|
| 12 | REAL, PROTECTED :: tau_cumul |
|---|
| 13 | REAL, PROTECTED :: a_ratqs_wake |
|---|
| 14 | INTEGER, PROTECTED :: dqimpl |
|---|
| 15 | |
|---|
| 16 | REAL, ALLOCATABLE :: povariance(:,:) |
|---|
| 17 | !$OMP THREADPRIVATE(povariance) |
|---|
| 18 | REAL, ALLOCATABLE :: var_conv(:,:) |
|---|
| 19 | !$OMP THREADPRIVATE(var_conv) |
|---|
| 20 | |
|---|
| 21 | !$OMP THREADPRIVATE(a_ratqs_cv,tau_var,fac_tau,tau_cumul,a_ratqs_wake) |
|---|
| 22 | |
|---|
| 23 | |
|---|
| 24 | CONTAINS |
|---|
| 25 | SUBROUTINE ratqs_ini(klon,klev,iflag_thermals,lunout_in,nbsrf_in,is_lic_in,is_ter_in,RG_in,RV_in,RD_in,RCPD_in,RLSTT_in,RLVTT_in,RTT_in) |
|---|
| 26 | |
|---|
| 27 | USE lmdz_ioipsl_getin_p, ONLY: getin_p |
|---|
| 28 | |
|---|
| 29 | INTEGER, INTENT(IN) :: klon,klev,iflag_thermals,lunout_in |
|---|
| 30 | INTEGER, INTENT(IN) :: nbsrf_in,is_lic_in,is_ter_in |
|---|
| 31 | REAL, INTENT(IN) :: RG_in,RV_in,RD_in,RCPD_in,RLSTT_in,RLVTT_in,RTT_in |
|---|
| 32 | |
|---|
| 33 | INTEGER :: i,k |
|---|
| 34 | |
|---|
| 35 | nbsrf =nbsrf_in |
|---|
| 36 | is_lic =is_lic_in |
|---|
| 37 | is_ter =is_ter_in |
|---|
| 38 | RG =RG_in |
|---|
| 39 | RV =RV_in |
|---|
| 40 | RD =RD_in |
|---|
| 41 | RCPD =RCPD_in |
|---|
| 42 | RLSTT =RLSTT_in |
|---|
| 43 | RLVTT =RLVTT_in |
|---|
| 44 | RTT =RTT_in |
|---|
| 45 | |
|---|
| 46 | PRINT*,'ratqs_ini' |
|---|
| 47 | IF (iflag_thermals==15.OR.iflag_thermals==16) THEN |
|---|
| 48 | dqimpl=-1 |
|---|
| 49 | else |
|---|
| 50 | dqimpl=1 |
|---|
| 51 | END IF |
|---|
| 52 | lunout=lunout_in |
|---|
| 53 | |
|---|
| 54 | allocate(povariance(klon,klev)) |
|---|
| 55 | allocate(var_conv(klon,klev)) |
|---|
| 56 | |
|---|
| 57 | |
|---|
| 58 | tau_var = 700. ! temps de relaxation de la variabilit?? pour les thermiques |
|---|
| 59 | fac_tau = 2. |
|---|
| 60 | tau_cumul = 1000 |
|---|
| 61 | a_ratqs_wake = 3. ! param??tre pilotant l'importance du terme d??pendant des poches froides |
|---|
| 62 | a_ratqs_cv = 1. |
|---|
| 63 | CALL getin_p('tau_var', tau_var) |
|---|
| 64 | CALL getin_p('fac_tau', fac_tau) |
|---|
| 65 | CALL getin_p('tau_cumul', tau_cumul) |
|---|
| 66 | CALL getin_p('a_ratqs_wake', a_ratqs_wake) |
|---|
| 67 | CALL getin_p('a_ratqs_cv', a_ratqs_cv) |
|---|
| 68 | |
|---|
| 69 | !-------------------------------------------------------- |
|---|
| 70 | ! Initialisation des variances pour la param??trisation |
|---|
| 71 | ! pronostique des variances de Louis. |
|---|
| 72 | ! Ne marche pour le moment qu'en 1D en forcant une |
|---|
| 73 | ! initialisation des variances ?? une valeur constante. |
|---|
| 74 | ! A terme la variance doit devenir une variable d'etat |
|---|
| 75 | ! passee en argument |
|---|
| 76 | !-------------------------------------------------------- |
|---|
| 77 | |
|---|
| 78 | IF (klon==1) THEN |
|---|
| 79 | do k=1,klev |
|---|
| 80 | do i=1,klon |
|---|
| 81 | povariance(i,k) = 0.00000000001 |
|---|
| 82 | var_conv(i,k) = 0.00000000001 |
|---|
| 83 | enddo |
|---|
| 84 | enddo |
|---|
| 85 | else |
|---|
| 86 | PRINT*, 'conserver la variance dans les restarts' |
|---|
| 87 | END IF |
|---|
| 88 | !-------------------------------------------------------- |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | |
|---|
| 92 | END SUBROUTINE ratqs_ini |
|---|
| 93 | END MODULE lmdz_ratqs_ini |
|---|