[4692] | 1 | MODULE lmdz_cloud_optics_prop_ini |
---|
| 2 | IMPLICIT NONE |
---|
| 3 | |
---|
| 4 | SAVE |
---|
| 5 | |
---|
| 6 | INTEGER, PROTECTED :: prt_level, lunout |
---|
| 7 | INTEGER, PROTECTED :: flag_aerosol |
---|
| 8 | INTEGER, PROTECTED :: iflag_t_glace=0 |
---|
[4707] | 9 | INTEGER, PROTECTED :: iflag_rei |
---|
| 10 | INTEGER, PROTECTED :: novlp, iflag_ice_thermo |
---|
| 11 | LOGICAL, PROTECTED :: ok_cdnc |
---|
| 12 | LOGICAL, PROTECTED :: ok_icefra_lscp, ok_new_lscp |
---|
[4692] | 13 | REAL, PROTECTED :: bl95_b0, bl95_b1 ! Parameter in B&L 95-Formula |
---|
| 14 | REAL, ALLOCATABLE :: latitude_deg(:) |
---|
| 15 | !$OMP THREADPRIVATE(latitude_deg) |
---|
| 16 | REAL, PROTECTED :: cdnc_max=-1. |
---|
| 17 | REAL, PROTECTED :: cdnc_max_m3=-1. |
---|
| 18 | REAL, PROTECTED :: cdnc_min=-1. |
---|
| 19 | REAL, PROTECTED :: cdnc_min_m3=-1. |
---|
[4707] | 20 | REAL, PROTECTED :: rpi, rg, rd |
---|
| 21 | REAL, PROTECTED :: rad_chau1, rad_chau2, rad_froid |
---|
| 22 | REAL, PROTECTED :: rei_max, rei_min |
---|
| 23 | REAL, PROTECTED :: zepsec |
---|
| 24 | REAL, PARAMETER :: thres_tau=0.3, thres_neb=0.001 |
---|
| 25 | REAL, PARAMETER :: prmhc=440.*100. ! Pressure between medium and high level cloud in Pa |
---|
| 26 | REAL, PARAMETER :: prlmc=680.*100. ! Pressure between low and medium level cloud in Pa |
---|
| 27 | REAL, PARAMETER :: coef_froi=0.09, coef_chau =0.13 |
---|
| 28 | REAL, PARAMETER :: seuil_neb=0.001 |
---|
| 29 | ! if iflag_t_glace=0, old values are used for liquid/ice partitionning: |
---|
| 30 | REAL, PARAMETER :: t_glace_min_old = 258. |
---|
| 31 | REAL, PARAMETER :: t_glace_max_old = 273.13 |
---|
| 32 | REAL, PARAMETER :: k_ice0=0.005 ! units=m2/g |
---|
| 33 | REAL, PARAMETER :: df=1.66 ! diffusivity factor |
---|
| 34 | !$OMP THREADPRIVATE(prt_level, lunout, flag_aerosol, iflag_t_glace) |
---|
| 35 | !$OMP THREADPRIVATE(iflag_rei, novlp, iflag_ice_thermo) |
---|
| 36 | !$OMP THREADPRIVATE(ok_cdnc, ok_icefra_lscp) |
---|
| 37 | !$OMP THREADPRIVATE(bl95_b0, bl95_b1, cdnc_max, cdnc_max_m3) |
---|
| 38 | !$OMP THREADPRIVATE(cdnc_min, cdnc_min_m3, rpi, rg, rd) |
---|
| 39 | !$OMP THREADPRIVATE(rad_chau1, rad_chau2, rad_froid, rei_max, rei_min) |
---|
| 40 | !$OMP THREADPRIVATE(zepsec) |
---|
| 41 | |
---|
[4692] | 42 | |
---|
| 43 | CONTAINS |
---|
| 44 | |
---|
| 45 | SUBROUTINE cloud_optics_prop_ini(klon, prt_level_in, lunout_in, flag_aerosol_in, & |
---|
| 46 | & ok_cdnc_in, bl95_b0_in, & |
---|
[4707] | 47 | & bl95_b1_in, latitude_deg_in, rpi_in, rg_in, rd_in, zepsec_in, novlp_in, & |
---|
| 48 | & iflag_ice_thermo_in, ok_new_lscp_in) |
---|
[4692] | 49 | |
---|
| 50 | USE ioipsl_getin_p_mod, ONLY : getin_p |
---|
| 51 | |
---|
| 52 | IMPLICIT NONE |
---|
| 53 | INTEGER, INTENT(IN) :: klon |
---|
| 54 | INTEGER, INTENT(IN) :: prt_level_in, lunout_in |
---|
| 55 | INTEGER, INTENT(IN) :: flag_aerosol_in |
---|
[4707] | 56 | INTEGER, INTENT(IN) :: novlp_in, iflag_ice_thermo_in |
---|
| 57 | LOGICAL, INTENT(IN) :: ok_cdnc_in, ok_new_lscp_in |
---|
[4692] | 58 | REAL, INTENT(IN) :: bl95_b0_in, bl95_b1_in |
---|
| 59 | REAL, INTENT(IN) :: latitude_deg_in(klon) |
---|
[4707] | 60 | REAL, INTENT(IN) :: rpi_in, rg_in, rd_in |
---|
| 61 | REAL, INTENT(IN) :: zepsec_in |
---|
[4692] | 62 | |
---|
| 63 | ALLOCATE(latitude_deg(klon)) |
---|
| 64 | |
---|
| 65 | prt_level = prt_level_in |
---|
| 66 | lunout = lunout_in |
---|
| 67 | flag_aerosol = flag_aerosol_in |
---|
| 68 | ok_cdnc = ok_cdnc_in |
---|
| 69 | bl95_b0 = bl95_b0_in |
---|
| 70 | bl95_b1 = bl95_b1_in |
---|
| 71 | latitude_deg(:) = latitude_deg_in(:) |
---|
[4707] | 72 | rpi = rpi_in |
---|
| 73 | rg = rg_in |
---|
| 74 | rd = rd_in |
---|
| 75 | zepsec = zepsec_in |
---|
| 76 | novlp = novlp_in |
---|
| 77 | iflag_ice_thermo = iflag_ice_thermo_in |
---|
| 78 | ok_new_lscp = ok_new_lscp_in |
---|
| 79 | |
---|
[4692] | 80 | call getin_p('cdnc_min',cdnc_min) |
---|
| 81 | cdnc_min_m3=cdnc_min*1.E6 |
---|
| 82 | IF (cdnc_min_m3<0.) cdnc_min_m3=20.E6 ! astuce pour retrocompatibilite |
---|
| 83 | write(lunout,*)'cdnc_min=', cdnc_min_m3/1.E6 |
---|
| 84 | call getin_p('cdnc_max',cdnc_max) |
---|
| 85 | cdnc_max_m3=cdnc_max*1.E6 |
---|
| 86 | IF (cdnc_max_m3<0.) cdnc_max_m3=1000.E6 ! astuce pour retrocompatibilite |
---|
| 87 | write(lunout,*)'cdnc_max=', cdnc_max_m3/1.E6 |
---|
| 88 | CALL getin_p('iflag_t_glace',iflag_t_glace) |
---|
| 89 | write(lunout,*)'iflag_t_glace= ',iflag_t_glace |
---|
[4707] | 90 | CALL getin_p('rad_chau1',rad_chau1) |
---|
| 91 | CALL getin_p('rad_chau2',rad_chau2) |
---|
| 92 | CALL getin_p('rad_froid ',rad_froid) |
---|
| 93 | CALL getin_p('ok_icefra_lscp', ok_icefra_lscp) |
---|
| 94 | iflag_rei = 0 |
---|
| 95 | CALL getin_p('iflag_rei',iflag_rei) |
---|
| 96 | rei_min = 3.5 |
---|
| 97 | CALL getin_p('rei_min',rei_min) |
---|
| 98 | rei_max = 61.29 |
---|
| 99 | CALL getin_p('rei_max',rei_max) |
---|
| 100 | |
---|
| 101 | |
---|
[4692] | 102 | END SUBROUTINE cloud_optics_prop_ini |
---|
| 103 | |
---|
| 104 | END MODULE lmdz_cloud_optics_prop_ini |
---|