source: trunk/LMDZ.TITAN/libf/phytitan/radinc_h.F90 @ 2054

Last change on this file since 2054 was 2050, checked in by jvatant, 7 years ago

Major radiative transfer contribution : Add the 'corrk_recombin' option that allows to use
correlated-k for single species instead of pre-mix and enables more flexiblity for variable species.
-> Algorithm inspired from Lacis and Oinas 1991 and Amundsen et al 2016

+ Added 'recombin_corrk.F90' - Important improvements in 'sugas_corrk.90' and 'callcork.F90'

  • Must have the desired variable species as tracers -> TBD : Enable to force composition even if no tracers
  • To have decent CPU time recombining is not done on all gridpoints and wavelenghts but we calculate a gasi/v_recomb variable on the reference corrk-k T,P grid (only for T,P values who match the atmospheric conditions ) which is then processed as a standard pre-mix in optci/v routines, but updated every time tracers on the ref P grid have varied > 1%.


READ CAREFULY :

  • In case of 'corrk_recombin', the variable L_NREFVAR doesn't have the same meaning as before and doesn't stand for the different mixing ratios but the different species.
  • Input corr-k should be found in corrkdir within 'corrk_gcm_IR/VI_XXX.dat' and can contain a 'fixed' specie ( compulsory if you include self-broadening ) that MUST have been created with correct mixing ratios, or a variable specie for which mixing ratio MUST have been set to 1 ( no self-broadening then, assume it's a trace sepecie ) -> You can't neither have CIA of variable species included upstream in the corr-k
File size: 3.6 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!               finer 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 
49!               EITHER (corrk_recombin = false)
50!      _          The number of different mixing ratio values for
51!     / \         the k-coefficients. Variable component of the mixture
52!    /   \        can in princple be anything: currently it's H2O.
53!   /  !  \
54!  /_______\    OR (corrk_recombin = true)
55!                 The TOTAL number of species to recombine when we
56!                 recombine corr-k instead of pre-mixed values.
57!----------------------------------------------------------------------
58
59      integer,save :: L_NLAYRAD  ! = nbp_lev ! set by ini_radinc_h
60      integer,save :: L_LEVELS   ! = 2*(nbp_lev-1)+3 ! set by ini_radinc_h
61      integer,save :: L_NLEVRAD  ! = nbp_lev+1 ! set by ini_radinc_h
62!$OMP THREADPRIVATE(L_NLAYRAD,L_LEVELS,L_NLEVRAD)
63
64      ! These are set in sugas_corrk
65      ! [uses allocatable arrays] -- AS 12/2011
66      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
67
68      integer, parameter :: L_NSPECTI = NBinfrared
69      integer, parameter :: L_NSPECTV = NBvisible
70
71      real,    parameter :: L_TAUMAX  = 35
72
73      ! For Planck function integration:
74      ! equivalent temperatures are 1/NTfac of these values
75      integer, parameter :: NTstar = 500
76      integer, parameter :: NTstop = 15000 ! new default for all non hot Jupiter runs
77      real*8, parameter :: NTfac = 1.0D+1 
78      !integer, parameter :: NTstar = 1000
79      !integer, parameter :: NTstop = 25000
80      !real*8,parameter :: NTfac = 5.0D+1   
81      !integer, parameter :: NTstar = 2000
82      !integer, parameter :: NTstop = 50000
83      !real*8,parameter :: NTfac = 1.0D+2   
84
85contains
86
87  subroutine ini_radinc_h(nbp_lev)
88  ! Initialize module variables
89  implicit none
90  integer,intent(in) :: nbp_lev
91 
92  L_NLAYRAD = nbp_lev
93  L_LEVELS = 2*(nbp_lev-1)+3
94  L_NLEVRAD = nbp_lev+1
95 
96  end subroutine
97
98end module radinc_h
Note: See TracBrowser for help on using the repository browser.