source: LMDZ6/trunk/libf/phylmd/lmdz_cloud_optics_prop_ini.f90 @ 5496

Last change on this file since 5496 was 5496, checked in by evignon, 30 hours ago

nouvelle option pour le calcul du rayon optique des cristaux de glace nuageuse
qui inclue une dependance en temperature ET en contenu en glace (contrairement a la formule
utilisee aujourdhui qui n'a qu'une dependance en T) La formule derivee ici est relativement simple
avec deux coefficients de tuning dont les plages de valeurs acceptables sont donnes en commentaires.
Elle se compare tres bien avec la formule " de reference " de Sun and Rikkus 1999 et Sun 2001

File size: 3.9 KB
Line 
1MODULE 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 :: rei_coef, rei_min_temp
24  REAL, PROTECTED :: zepsec
25  REAL, PARAMETER :: thres_tau=0.3, thres_neb=0.001
26  REAL, PARAMETER :: prmhc=440.*100. ! Pressure between medium and high level cloud in Pa
27  REAL, PARAMETER :: prlmc=680.*100. ! Pressure between low and medium level cloud in Pa
28  REAL, PARAMETER :: coef_froi=0.09, coef_chau =0.13
29  REAL, PARAMETER :: seuil_neb=0.001
30! if iflag_t_glace=0, old values are used for liquid/ice partitionning:
31  REAL, PARAMETER :: t_glace_min_old = 258.
32  REAL, PARAMETER :: t_glace_max_old = 273.13
33  REAL, PARAMETER :: k_ice0=0.005 ! units=m2/g
34  REAL, PARAMETER :: df=1.66 ! diffusivity factor
35!$OMP THREADPRIVATE(prt_level, lunout, flag_aerosol, iflag_t_glace)
36!$OMP THREADPRIVATE(iflag_rei, novlp, iflag_ice_thermo) 
37!$OMP THREADPRIVATE(ok_cdnc, ok_icefra_lscp, ok_new_lscp)
38!$OMP THREADPRIVATE(bl95_b0, bl95_b1, cdnc_max, cdnc_max_m3)
39!$OMP THREADPRIVATE(cdnc_min, cdnc_min_m3, rpi, rg, rd)
40!$OMP THREADPRIVATE(rad_chau1, rad_chau2, rad_froid, rei_max, rei_min)
41!$OMP THREADPRIVATE(rei_coef, rei_min_temp)
42!$OMP THREADPRIVATE(zepsec)
43
44 
45CONTAINS
46
47  SUBROUTINE cloud_optics_prop_ini(klon, prt_level_in, lunout_in, flag_aerosol_in, &
48       & ok_cdnc_in, bl95_b0_in, &
49       & bl95_b1_in, latitude_deg_in, rpi_in, rg_in, rd_in, zepsec_in, novlp_in, &
50       & iflag_ice_thermo_in, ok_new_lscp_in)
51
52    USE ioipsl_getin_p_mod, ONLY : getin_p
53
54    IMPLICIT NONE
55    INTEGER, INTENT(IN) :: klon
56    INTEGER, INTENT(IN) :: prt_level_in, lunout_in
57    INTEGER, INTENT(IN) :: flag_aerosol_in
58    INTEGER, INTENT(IN) :: novlp_in, iflag_ice_thermo_in
59    LOGICAL, INTENT(IN) :: ok_cdnc_in, ok_new_lscp_in
60    REAL, INTENT(IN) :: bl95_b0_in, bl95_b1_in
61    REAL, INTENT(IN) :: latitude_deg_in(klon)
62    REAL, INTENT(IN) :: rpi_in, rg_in, rd_in
63    REAL, INTENT(IN) :: zepsec_in
64
65    ALLOCATE(latitude_deg(klon))
66
67    prt_level = prt_level_in
68    lunout = lunout_in
69    flag_aerosol = flag_aerosol_in
70    ok_cdnc = ok_cdnc_in
71    bl95_b0 = bl95_b0_in
72    bl95_b1 = bl95_b1_in
73    latitude_deg(:) = latitude_deg_in(:)
74    rpi = rpi_in
75    rg = rg_in
76    rd = rd_in
77    zepsec = zepsec_in
78    novlp = novlp_in
79    iflag_ice_thermo = iflag_ice_thermo_in
80    ok_new_lscp = ok_new_lscp_in
81   
82    call getin_p('cdnc_min',cdnc_min)
83    cdnc_min_m3=cdnc_min*1.E6
84    IF (cdnc_min_m3<0.) cdnc_min_m3=20.E6 ! astuce pour retrocompatibilite
85    write(lunout,*)'cdnc_min=', cdnc_min_m3/1.E6
86    call getin_p('cdnc_max',cdnc_max)
87    cdnc_max_m3=cdnc_max*1.E6
88    IF (cdnc_max_m3<0.) cdnc_max_m3=1000.E6 ! astuce pour retrocompatibilite
89    write(lunout,*)'cdnc_max=', cdnc_max_m3/1.E6
90    CALL getin_p('iflag_t_glace',iflag_t_glace)     
91    write(lunout,*)'iflag_t_glace= ',iflag_t_glace
92    CALL getin_p('rad_chau1',rad_chau1)
93    CALL getin_p('rad_chau2',rad_chau2)
94    CALL getin_p('rad_froid ',rad_froid)
95    CALL getin_p('ok_icefra_lscp', ok_icefra_lscp)
96    iflag_rei = 0
97    CALL getin_p('iflag_rei',iflag_rei)
98    rei_min = 3.5
99    CALL getin_p('rei_min',rei_min)
100    rei_max = 61.29
101    CALL getin_p('rei_max',rei_max)
102    rei_coef = 2.4
103    CALL getin_p('rei_coef',rei_coef)
104    rei_min_temp = 175.
105    CALL getin_p('rei_min_temp',rei_min_temp)
106
107   
108  END SUBROUTINE cloud_optics_prop_ini
109
110END MODULE lmdz_cloud_optics_prop_ini
Note: See TracBrowser for help on using the repository browser.