source: trunk/LMDZ.MARS/libf/phymars/dimradmars_mod.F90 @ 1242

Last change on this file since 1242 was 1224, checked in by aslmd, 11 years ago

LMDZ.MARS. If not major, a quite important commit.

  1. No more SAVE,ALLOCATABLE arrays outside modules.

This is important to solve the nesting conundrum in MESOSCALE.
And overall this is good for the harmony of the universe.
(Joke apart, this is good for any interfacing task. And compliant with a F90 spirit).
Note that bit-to-bit compatibility of results in debug mode was checked.

  1. inifis is split in two : phys_state_var_init + conf_phys

This makes interfacing with MESOSCALE more transparent.
This is also clearer for LMDZ.MARS.
Before, inifis has two very different tasks to do.

  1. a bit of cleaning as far as modules and saves are concerned

Point 1

  • Removed SAVE,ALLOCATABLE arrays from

physiq, aeropacity, updatereffrad, soil

and put those in

dimradmars_mod, surfdat_h, tracer_mod, comsoil_h

and changed accordingly the initialization subroutines associated to each module.
Allocating these arrays is thus done at initialization.

Point 2

  • Created a subroutine phys_state_var_init which does all the allocation / initialization work for modules. This was previously done in inifis.
  • Replaced inifis which was then (after the previous modification) just about reading callphys.def and setting a few constants by conf_phys. This mimics the new LMDZ terminology (cf. LMDZ.VENUS for instance)
  • Bye bye inifis.

Point 3

  • Removed comdiurn and put everything in comgeomfi
  • Created a turb_mod module for turbulence variables (e.g. l0 in yamada4)
  • dryness had nothing to do in tracer_h, put it in surfdat_h (like watercaptag)
  • topdust0 does not need to be SAVE in aeropacity. better use sinlat.
  • emisref does not need to be SAVE in newcondens. made it automatic array.
  • Removed useless co2ice argument in initracer.
File size: 4.4 KB
Line 
1module dimradmars_mod
2!   Declaration and settings for radiative transfer calculations
3!   Initializations and allocations are done in phys_state_var_init
4implicit 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
88contains
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 
114end module dimradmars_mod
Note: See TracBrowser for help on using the repository browser.