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