1 | module dimradmars_mod |
---|
2 | ! Declaration and settings for radiative transfer calculations |
---|
3 | ! Initializations and allocations are done in phys_state_var_init |
---|
4 | implicit none |
---|
5 | ! nflev: number of vertical layer |
---|
6 | ! ndlon,ndlo2: number of horizontal points |
---|
7 | ! Splitting of horizontal grid |
---|
8 | ! NDLO2 and ndomainsz for the splitting in the physics call |
---|
9 | ! WARNING: One must have 1 < ndomainsz =< ngrid |
---|
10 | integer,save :: NFLEV !=nlayermx ! with splitting |
---|
11 | integer,save :: ndomainsz !=(ngrid-1)/20 + 1 |
---|
12 | integer,save :: NDLON !=ndomainsz ! with splitting |
---|
13 | integer,save :: NDLO2 !=NDLON |
---|
14 | |
---|
15 | |
---|
16 | ! Number of kind of tracer radiative properties |
---|
17 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
18 | ! naerkind is set in scatterers.h (built when compiling with makegcm -s #) |
---|
19 | |
---|
20 | #include"scatterers.h" |
---|
21 | ! NB: May have to change value of nsizemax below when changing scatterers |
---|
22 | |
---|
23 | ! Reference wavelengths used to compute reference optical depth (m) |
---|
24 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
25 | |
---|
26 | real,save :: longrefir(naerkind),longrefvis(naerkind) |
---|
27 | |
---|
28 | ! Definition of spectral intervals at thermal infrared wavelengths (LW) |
---|
29 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
30 | integer,parameter :: nir=4 ! Total number of thermal IR bands |
---|
31 | integer,parameter :: nuco2=2 ! number of bands in CO2 bands |
---|
32 | real,parameter :: long1ir=5.E-6 , long2ir=200.E-6 |
---|
33 | real,parameter :: long1co2=1.E+0 / 865.E+2 , long2co2=1.E+0 / 500.E+2 |
---|
34 | |
---|
35 | ! Warning : the "nir" thermal IR bands are not ordered by wavelength: |
---|
36 | ! iir=1 : central 15um CO2 bands |
---|
37 | ! iir=2 : CO2 band wings [long1co2-long2co2] MINUS central band |
---|
38 | ! iir=3 : 9 um band [long1ir - long1co2] |
---|
39 | ! iir=4 : Far IR [long2co2 - long2ir] |
---|
40 | |
---|
41 | ! Definition of spectral interval at solar wavelengths (SW) |
---|
42 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
43 | integer,parameter :: NSUN=2 ! do not change that ! |
---|
44 | ! Boundaries of spectral intervals (m) : |
---|
45 | real,parameter :: long1vis=0.1E-6 , long2vis=0.5E-6 , long3vis=5.E-6 |
---|
46 | ! Fraction of solar energy in solar band #1 [long1vis-long2vis] : 0.274490 |
---|
47 | ! Fraction of solar energy in solar band #2 [long2vis-long3vis] : 0.725509 |
---|
48 | real,save :: sunfr(2) = (/ 0.274490 , 0.725509 /) |
---|
49 | |
---|
50 | ! Maximum number of grain size classes |
---|
51 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
52 | ! This parameter has to be set to the maximum number of particle |
---|
53 | ! sizes contained in the optical parameter database; For example, |
---|
54 | ! if only one grain size is used to describe dust, and 30 are used |
---|
55 | ! to describe water-ice crystals in the visible and 15 in the IR, |
---|
56 | ! nsizemax has to be set to 30. |
---|
57 | ! If only one grain size is considered for all the aerosols, set |
---|
58 | ! this parameter to 1 and convolution will be turned off during |
---|
59 | ! the radiative calculations. |
---|
60 | |
---|
61 | integer, parameter :: nsizemax = 60 |
---|
62 | ! integer, parameter :: nsizemax = 1 |
---|
63 | |
---|
64 | ! Various initialisation for LW radiative code |
---|
65 | ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
66 | ! npademx : number of Pade coefficients |
---|
67 | ! nabsmx : ? |
---|
68 | ! nt_pademx : number of temperature intervals for Pade |
---|
69 | |
---|
70 | integer,parameter :: npademx=4 |
---|
71 | integer,parameter :: nabsmx=2 |
---|
72 | integer,parameter :: nt_pademx=19 |
---|
73 | |
---|
74 | !! |
---|
75 | !! variables |
---|
76 | !! |
---|
77 | REAL,SAVE,ALLOCATABLE :: dtrad(:,:) ! Net atm. radiative heating rate (K.s-1) |
---|
78 | REAL,SAVE,ALLOCATABLE :: fluxrad_sky(:) ! rad. flux from sky absorbed by surface (W.m-2) |
---|
79 | REAL,SAVE,ALLOCATABLE :: fluxrad(:) ! Net radiative surface flux (W.m-2) |
---|
80 | REAL,SAVE,ALLOCATABLE :: albedo(:,:) ! Surface albedo in each solar band |
---|
81 | REAL,SAVE,ALLOCATABLE :: tauscaling(:) ! Convertion factor for qdust and Ndust |
---|
82 | ! aerosol (dust or ice) extinction optical depth at reference wavelength |
---|
83 | ! "longrefvis" set in dimradmars_mod , for one of the "naerkind" kind of |
---|
84 | ! aerosol optical properties : |
---|
85 | REAL,SAVE,ALLOCATABLE :: aerosol(:,:,:) |
---|
86 | REAL,SAVE,ALLOCATABLE :: nueffdust(:,:) ! Dust effective variance |
---|
87 | |
---|
88 | contains |
---|
89 | |
---|
90 | subroutine ini_dimradmars_mod(ngrid,nlayer) |
---|
91 | |
---|
92 | implicit none |
---|
93 | |
---|
94 | integer,intent(in) :: ngrid ! number of atmospheric columns |
---|
95 | integer,intent(in) :: nlayer ! number of atmospheric layers |
---|
96 | |
---|
97 | nflev=nlayer |
---|
98 | ! ndomainsz=ngrid |
---|
99 | ndomainsz=(ngrid-1)/20 + 1 |
---|
100 | ! ndomainsz=(ngrid-1)/5 + 1 |
---|
101 | ndlon=ndomainsz |
---|
102 | ndlo2=ndlon |
---|
103 | |
---|
104 | allocate(albedo(ngrid,2)) |
---|
105 | allocate(dtrad(ngrid,nlayer)) |
---|
106 | allocate(fluxrad_sky(ngrid)) |
---|
107 | allocate(fluxrad(ngrid)) |
---|
108 | allocate(tauscaling(ngrid)) |
---|
109 | allocate(aerosol(ngrid,nlayer,naerkind)) |
---|
110 | allocate(nueffdust(ngrid,nlayer)) |
---|
111 | |
---|
112 | end subroutine ini_dimradmars_mod |
---|
113 | |
---|
114 | end module dimradmars_mod |
---|