source: trunk/LMDZ.GENERIC/libf/phystd/radinc_h.F90 @ 2921

Last change on this file since 2921 was 2283, checked in by jvatant, 5 years ago

Set the temperature boundaries and step for Planck function integration as input in callphys.def, for more flexibility.

+ User can now set them by tplanckmin, tplanckmax and dtplanck
+ Default values are a wide range 30-1500K
+ Add a sanity check in callcorrk instead of leaving out-of-bounds planckir indexes.

--JVO

File size: 4.2 KB
Line 
1module radinc_h
2
3  implicit none
4
5  include "bands.h"
6  include "scatterers.h"
7
8!======================================================================
9!
10!     RADINC.H
11!
12!     Includes for the radiation code; RADIATION LAYERS, LEVELS,
13!     number of spectral intervals. . .
14!
15!======================================================================
16
17!     RADIATION parameters
18
19!     In radiation code, layer 1 corresponds to the stratosphere.  Level
20!     1 is the top of the stratosphere.  The dummy layer is at the same
21!     temperature as the (vertically isothermal) stratosphere, and
22!     any time it is explicitly needed, the appropriate quantities will
23!     be dealt with (aka "top". . .)
24
25!     L_NLEVRAD corresponds to the surface - i.e., the GCM Level that
26!     is at the surface.  PLEV(L_NLEVRAD) = P(J,I)+PTROP,
27!     PLEV(2) = PTROP, PLEV(1) = ptop
28
29!     L_NLAYRAD is the number of radiation code layers
30!     L_NLEVRAD is the number of radiation code levels.  Level N is the
31!               top of layer N.
32!
33!     L_NSPECTI is the number of IR spectral intervals
34!     L_NSPECTV is the number of Visual(or Solar) spectral intervals
35!     L_NGAUSS  is the number of Gauss points for K-coefficients
36!               GAUSS POINT 17 (aka the last one) is the special case
37!
38!     L_NPREF   is the number of reference pressures that the
39!               k-coefficients are calculated on
40!     L_PINT    is the number of Lagrange interpolated reference
41!               pressures for the gas k-coefficients - now for a
42!               smaller p-grid than before
43!     L_NTREF   is the number of reference temperatures for the
44!               k-coefficients
45!     L_TAUMAX  is the largest optical depth - larger ones are set
46!               to this value
47!
48!     L_REFVAR  The number of different mixing ratio values for
49!               the k-coefficients. Variable component of the mixture
50!               can in princple be anything: currently it's H2O.
51!
52!     NAERKIND  The number of radiatively active aerosol types
53!
54!     NSIZEMAX  The maximum number of aerosol particle sizes
55!
56!----------------------------------------------------------------------
57
58      integer,save :: L_NLAYRAD  ! = nbp_lev ! set by ini_radinc_h
59      integer,save :: L_LEVELS   ! = 2*(nbp_lev-1)+3 ! set by ini_radinc_h
60      integer,save :: L_NLEVRAD  ! = nbp_lev+1 ! set by ini_radinc_h
61!$OMP THREADPRIVATE(L_NLAYRAD,L_LEVELS,L_NLEVRAD)
62
63      ! These are set in sugas_corrk
64      ! [uses allocatable arrays] -- AS 12/2011
65      integer :: L_NPREF, L_NTREF, L_REFVAR, L_PINT, L_NGAUSS  !L_NPREF, L_NTREF, L_REFVAR, L_PINT, L_NGAUSS read by master in sugas_corrk
66
67      integer, parameter :: L_NSPECTI = NBinfrared
68      integer, parameter :: L_NSPECTV = NBvisible
69
70!      integer, parameter :: NAERKIND  = 2 ! set in scatterers.h
71      real,    parameter :: L_TAUMAX  = 35
72
73      ! For Planck function integration:
74      ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75      ! Integration boundary temperatures are NTstart/NTfac and Ntstop/NTfac
76      ! -- JVO 20 : Now read boundary T and integration dT as inputs in callphys.def
77      !             NTstart, Nstop and NTfac then set by ini_radinc_h
78      !             Smart user can adjust values depending he's running hot or cold atm
79      !             Default is wide range : 30K-1500K, with 0.1K step
80      !             ->  NTstart=300, Nstop=15000, NTfac=10
81      integer :: NTstart, NTstop
82      real*8  :: NTfac
83
84      ! Maximum number of grain size classes for aerosol convolution:
85      ! This must correspond to size of largest dataset used for aerosol
86      ! optical properties in datagcm folder.
87      integer, parameter :: nsizemax = 60
88
89      character(len=100),save :: corrkdir
90!$OMP THREADPRIVATE(corrkdir)
91
92      character(len=100),save :: banddir
93!$OMP THREADPRIVATE(banddir)
94
95contains
96
97  subroutine ini_radinc_h(nbp_lev,tplanckmin,tplanckmax,dtplanck)
98  ! Initialize module variables
99  implicit none
100  integer,intent(in) :: nbp_lev
101  real*8, intent(in) :: tplanckmin
102  real*8, intent(in) :: tplanckmax
103  real*8, intent(in) :: dtplanck
104 
105  L_NLAYRAD = nbp_lev
106  L_LEVELS  = 2*(nbp_lev-1)+3
107  L_NLEVRAD = nbp_lev+1
108
109  NTfac   = 1.D0 / dtplanck
110  NTstart = int(tplanckmin * NTfac)
111  NTstop  = int(tplanckmax * NTfac)
112 
113  end subroutine
114
115end module radinc_h
Note: See TracBrowser for help on using the repository browser.