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 |
---|
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 |
---|
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. |
---|
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, ok_new_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 | |
---|
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, & |
---|
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) |
---|
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 |
---|
56 | INTEGER, INTENT(IN) :: novlp_in, iflag_ice_thermo_in |
---|
57 | LOGICAL, INTENT(IN) :: ok_cdnc_in, ok_new_lscp_in |
---|
58 | REAL, INTENT(IN) :: bl95_b0_in, bl95_b1_in |
---|
59 | REAL, INTENT(IN) :: latitude_deg_in(klon) |
---|
60 | REAL, INTENT(IN) :: rpi_in, rg_in, rd_in |
---|
61 | REAL, INTENT(IN) :: zepsec_in |
---|
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(:) |
---|
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 | |
---|
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 |
---|
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 | |
---|
102 | END SUBROUTINE cloud_optics_prop_ini |
---|
103 | |
---|
104 | END MODULE lmdz_cloud_optics_prop_ini |
---|