FV3 Bundle
RTV_Define.f90
Go to the documentation of this file.
1 !
2 ! RTV_Define
3 !
4 ! Module containing the intermediate variables for RTSolution module.
5 !
6 !
7 ! NOTE: Modified as generic "bucket" for all RT-related algorithm,
8 ! ADA, AMOM, and SOI.
9 ! This is initial step in truly separating out the algorithms
10 ! into their own modules. Currently each algorithm ties into
11 ! the same RTV components (not good.)
12 !
13 !
14 !
15 ! CREATION HISTORY:
16 ! Written by: Quanhua Liu, QSS at JCSDA; Quanhua.Liu@noaa.gov
17 ! Yong Han, NOAA/NESDIS; Yong.Han@noaa.gov
18 ! Paul van Delst, paul.vandelst@noaa.gov
19 ! 08-Jun-2004
20 
21 MODULE rtv_define
22 
23  ! ------------------
24  ! Environment set up
25  ! ------------------
26  ! Module use statements
27  USE type_kinds, ONLY: fp
29  USE crtm_parameters, ONLY: set, zero, one, two, pi, &
35  rt_ada
37  USE crtm_sfcoptics, ONLY: sovar_type => ivar_type
38  ! Disable all implicit typing
39  IMPLICIT NONE
40 
41 
42  ! --------------------
43  ! Default visibilities
44  ! --------------------
45  ! Everything private by default
46  PRIVATE
47  ! Parameters
48  PUBLIC :: angle_threshold
49  PUBLIC :: phase_threshold
50  PUBLIC :: delta_optical_depth
51  PUBLIC :: max_albedo
52  PUBLIC :: small_od_for_sc
53  PUBLIC :: max_n_doubling
54  PUBLIC :: max_n_soi_iterations
55  ! Datatypes
56  PUBLIC :: aircraft_rt_type
57  PUBLIC :: rtv_type
58  ! Procedures
59  PUBLIC :: rtv_associated
60  PUBLIC :: rtv_destroy
61  PUBLIC :: rtv_create
62 
63  ! -----------------
64  ! Module parameters
65  ! -----------------
66  ! Version Id for the module
67  CHARACTER(*), PARAMETER :: module_rcs_id = &
68  '$Id: RTV_Define.f90 60152 2015-08-13 19:19:13Z paul.vandelst@noaa.gov $'
69 
70  ! Threshold for determing if an additional stream
71  ! angle is required for the satellite zenith angle
72  REAL(fp), PARAMETER :: angle_threshold = 1.0e-7_fp
73 
74  ! Small positive value used to replace negative
75  ! values in the computed phase function
76  REAL(fp), PARAMETER :: phase_threshold = 1.0e-7_fp
77 
78  REAL(fp), PARAMETER :: delta_optical_depth = 1.0e-8_fp
79  REAL(fp), PARAMETER :: max_albedo = 0.999999_fp
80 
81  ! Threshold layer optical depth for single scattering
82  REAL(fp), PARAMETER :: small_od_for_sc = 1.e-5_fp
83 
84  ! The maximum number of doubling processes in the
85  ! the doubling-adding scheme.
86  INTEGER, PARAMETER :: max_n_doubling = 55
87 
88  ! The maximum number of iterations for the SOI solution method.
89  INTEGER, PARAMETER :: max_n_soi_iterations = 75
90 
91  ! ---------------------
92  ! Structure definitions
93  ! ---------------------
94  ! ...Aircraft model structure
96  ! The switch
97  LOGICAL :: rt = .false.
98  ! The output level index
99  INTEGER :: idx
100  END TYPE aircraft_rt_type
101 
102  ! --------------------------------------
103  ! Structure definition to hold forward
104  ! variables across FWD, TL, and AD calls
105  ! --------------------------------------
106  TYPE :: rtv_type
107 
108  ! Type of sensor
109  INTEGER :: sensor_type = invalid_sensor
110 
111  ! Type of RT algorithm
112  INTEGER :: rt_algorithm_id = rt_ada
113 
114  ! Dimension information
115  INTEGER :: n_layers = 0 ! Total number of atmospheric layers
116  INTEGER :: n_added_layers = 0 ! Number of layers appended to TOA
117  INTEGER :: n_angles = 0 ! Number of angles to be considered
118  INTEGER :: n_soi_iterations = 0 ! Number of SOI iterations
119 
120 
121  REAL(fp):: cos_sun = zero ! Cosine of sun zenith angle
122  REAL(fp):: solar_irradiance = zero ! channel solar iiradiance at TOA
123  REAL(fp):: cosmic_background_radiance = zero ! For background temp=2.7253
124 
125  ! Variable to hold the various portions of the
126  ! radiance for emissivity retrieval algorithms
127  ! Passed to FWD RTSolution structure argument output
128  REAL(fp) :: up_radiance = zero
129  REAL(fp) :: down_solar_radiance = zero
130 
131  REAL(fp) :: secant_down_angle = 0
132 
133  ! Overcast radiance for cloud detection
134  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: e_cloud_radiance_up= zero
135  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: e_source_up = zero
136  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: e_level_trans_up = one
137 
138  ! Emission model variables
139  REAL(fp) :: total_od = zero
140  REAL(fp), DIMENSION( MAX_N_LAYERS ) :: e_layer_trans_up = zero
141  REAL(fp), DIMENSION( MAX_N_LAYERS ) :: e_layer_trans_down = zero
142  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: e_level_rad_up = zero
143  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: e_level_rad_down = zero
144 
145  ! Planck radiances
146  REAL(fp) :: planck_surface = zero
147  REAL(fp), DIMENSION( 0:MAX_N_LAYERS ) :: planck_atmosphere = zero
148 
149  ! Quadrature information
150  REAL(fp), DIMENSION( MAX_N_ANGLES ) :: cos_angle = zero ! Gaussian quadrature abscissa
151  REAL(fp), DIMENSION( MAX_N_ANGLES ) :: cos_weight = zero ! Gaussian quadrature weights
152 
153  ! Logical switches
154  LOGICAL :: diffuse_surface = .true.
155  LOGICAL :: is_solar_channel = .false.
156 
157  ! Aircraft model RT information
158  TYPE(aircraft_rt_type) :: aircraft
159 
160  ! Scattering, visible model variables
161  INTEGER :: n_streams = 0 ! Number of *hemispheric* stream angles used in RT
162  INTEGER :: mth_azi ! mth fourier component
163  INTEGER :: n_azi ! number of fourier components
164  LOGICAL :: solar_flag_true = .false.
165  LOGICAL :: visible_flag_true = .false.
166  LOGICAL :: scattering_rt = .false.
167 
168  !-----------------------------------
169  ! Variables used in the ADA routines
170  !-----------------------------------
171  ! Flag to indicate the following arrays have all been allocated
172  LOGICAL :: is_allocated = .false.
173 
174  ! Phase function variables
175  ! Forward and backward scattering phase matrices
176  REAL(fp), ALLOCATABLE :: pff(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES+1, MAX_N_LAYERS
177  REAL(fp), ALLOCATABLE :: pbb(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES+1, MAX_N_LAYERS
178 
179  ! Positive and negative cosine angle Legendre phase functions
180  REAL(fp), ALLOCATABLE :: pplus(:,:) ! 0:MAX_N_LEGENDRE_TERMS, MAX_N_ANGLES
181  REAL(fp), ALLOCATABLE :: pminus(:,:) ! 0:MAX_N_LEGENDRE_TERMS, MAX_N_ANGLES
182  REAL(fp), ALLOCATABLE :: pleg(:,:) ! 0:MAX_N_LEGENDRE_TERMS, MAX_N_ANGLES+1
183 
184  ! Original forward and backward scattering phase matrices.
185  ! These may be slightly negative and, if so, need to be made
186  ! positive and thus adjusted to ensure energy conservation
187  REAL(fp), ALLOCATABLE :: off(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES+1, MAX_N_LAYERS
188  REAL(fp), ALLOCATABLE :: obb(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES+1, MAX_N_LAYERS
189 
190  ! Normalisation factor and intermediate sum used for original
191  ! phase matrix energy conservation.
192  REAL(fp), ALLOCATABLE :: n_factor(:,:) ! MAX_N_ANGLES, MAX_N_LAYERS
193  REAL(fp), ALLOCATABLE :: sum_fac(:,:) ! 0:MAX_N_ANGLES, MAX_N_LAYERS
194 
195  ! Adding-Doubling model variables
196  REAL(fp), ALLOCATABLE :: inv_gamma(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
197  REAL(fp), ALLOCATABLE :: inv_gammat(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
198  REAL(fp), ALLOCATABLE :: refl_trans(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
199 
200  REAL(fp), ALLOCATABLE :: s_layer_trans(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
201  REAL(fp), ALLOCATABLE :: s_layer_refl(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
202 
203  REAL(fp), ALLOCATABLE :: s_level_refl_up(:,:,:) ! MAX_N_ANGLES, MAX_N_ANGLES, 0:MAX_N_LAYERS
204  REAL(fp), ALLOCATABLE :: s_level_rad_up(:,:) ! MAX_N_ANGLES, 0:MAX_N_LAYERS
205 
206  REAL(fp), ALLOCATABLE :: s_layer_source_up(:,:) ! MAX_N_ANGLES, MAX_N_LAYERS
207  REAL(fp), ALLOCATABLE :: s_layer_source_down(:,:) ! MAX_N_ANGLES, MAX_N_LAYERS
208 
209 
210  !------------------------------------
211  ! Variables used in the AMOM routines
212  !------------------------------------
213  ! dimensions, MAX_N_ANGLES, MAX_N_LAYERS
214  REAL(fp), ALLOCATABLE :: thermal_c(:,:)
215  REAL(fp), ALLOCATABLE :: eigva(:,:)
216  REAL(fp), ALLOCATABLE :: exp_x(:,:)
217  REAL(fp), ALLOCATABLE :: eigvalue(:,:)
218 
219  ! dimensions, MAX_N_ANGLES, MAX_N_ANGLES, MAX_N_LAYERS
220  REAL(fp), ALLOCATABLE :: hh(:,:,:)
221  REAL(fp), ALLOCATABLE :: pm(:,:,:)
222  REAL(fp), ALLOCATABLE :: pp(:,:,:)
223  REAL(fp), ALLOCATABLE :: ppm(:,:,:)
224  REAL(fp), ALLOCATABLE :: ppp(:,:,:)
225  REAL(fp), ALLOCATABLE :: i_ppm(:,:,:)
226  REAL(fp), ALLOCATABLE :: i_ppp(:,:,:)
227  REAL(fp), ALLOCATABLE :: eigve(:,:,:)
228  REAL(fp), ALLOCATABLE :: gm(:,:,:)
229  REAL(fp), ALLOCATABLE :: i_gm(:,:,:)
230  REAL(fp), ALLOCATABLE :: gp(:,:,:)
231  REAL(fp), ALLOCATABLE :: eigvef(:,:,:)
232  REAL(fp), ALLOCATABLE :: eigveva(:,:,:)
233  REAL(fp), ALLOCATABLE :: a1(:,:,:)
234  REAL(fp), ALLOCATABLE :: a2(:,:,:)
235  REAL(fp), ALLOCATABLE :: a3(:,:,:)
236  REAL(fp), ALLOCATABLE :: a4(:,:,:)
237  REAL(fp), ALLOCATABLE :: a5(:,:,:)
238  REAL(fp), ALLOCATABLE :: a6(:,:,:)
239  REAL(fp), ALLOCATABLE :: gm_a5(:,:,:)
240  REAL(fp), ALLOCATABLE :: i_gm_a5(:,:,:)
241 
242 
243  !-----------------------------------
244  ! Variables used in the SOI routines
245  !-----------------------------------
246  INTEGER :: number_soi_iter = 0
247  REAL(fp), ALLOCATABLE :: e_layer_trans(:,:) ! MAX_N_ANGLES, MAX_N_LAYERS
248  REAL(fp), ALLOCATABLE :: s_level_iterrad_down(:,:,:) ! MAX_N_ANGLES, 0:MAX_N_LAYERS, MAX_N_SOI_ITERATIONS
249  REAL(fp), ALLOCATABLE :: s_level_iterrad_up(:,:,:) ! MAX_N_ANGLES, 0:MAX_N_LAYERS, MAX_N_SOI_ITERATIONS
250 
251  INTEGER , ALLOCATABLE :: number_doubling(:) ! n_Layers
252  REAL(fp), ALLOCATABLE :: delta_tau(:) ! n_Layers
253  REAL(fp), ALLOCATABLE :: refl(:,:,:,:) ! n_Angles, n_Angles, 0:MAX_N_DOUBLING, n_Layers
254  REAL(fp), ALLOCATABLE :: trans(:,:,:,:) ! n_Angles, n_Angles, 0:MAX_N_DOUBLING, n_Layers
255  REAL(fp), ALLOCATABLE :: inv_bet(:,:,:,:) ! n_Angles, n_Angles, 0:MAX_N_DOUBLING, n_Layers
256  REAL(fp), ALLOCATABLE :: c1(:,:) ! n_Angles, n_Layers
257  REAL(fp), ALLOCATABLE :: c2(:,:) ! n_Angles, n_Layers
258 
259 
260  ! The surface optics forward variables
261  TYPE(sovar_type) :: sov
262 
263  END TYPE rtv_type
264 
265 
266 CONTAINS
267 
268 
269 
270 !################################################################################
271 !################################################################################
272 !## ##
273 !## ## PRIVATE MODULE ROUTINES ## ##
274 !## ##
275 !################################################################################
276 !################################################################################
277 
278 !--------------------------------------------------------------------------------
279 !:sdoc+:
280 !
281 ! NAME:
282 ! RTV_Associated
283 !
284 ! PURPOSE:
285 ! Elemental function to test if the allocatable components of an
286 ! RTV object have been allocated.
287 !
288 ! CALLING SEQUENCE:
289 ! Status = RTV_Associated( RTV )
290 !
291 ! OBJECTS:
292 ! RTV: RTV structure which is to have its member's
293 ! status tested.
294 ! UNITS: N/A
295 ! TYPE: RTV_type
296 ! DIMENSION: Scalar or any rank
297 ! ATTRIBUTES: INTENT(IN)
298 !
299 ! FUNCTION RESULT:
300 ! Status: The return value is a logical value indicating the
301 ! status of the RTV members.
302 ! .TRUE. - if ANY of the RTV allocatable or
303 ! pointer members are in use.
304 ! .FALSE. - if ALL of the RTV allocatable or
305 ! pointer members are not in use.
306 ! UNITS: N/A
307 ! TYPE: LOGICAL
308 ! DIMENSION: Same as input RTV argument
309 !
310 !:sdoc-:
311 !--------------------------------------------------------------------------------
312 
313  ELEMENTAL FUNCTION rtv_associated( RTV ) RESULT( Status )
314  ! Arguments
315  TYPE(rtv_type), INTENT(IN) :: rtv
316  ! Function result
317  LOGICAL :: status
318 
319  ! Test the structure members
320  status = rtv%Is_Allocated
321 
322  END FUNCTION rtv_associated
323 
324 
325 !--------------------------------------------------------------------------------
326 !:sdoc+:
327 !
328 ! NAME:
329 ! RTV_Destroy
330 !
331 ! PURPOSE:
332 ! Elemental subroutine to re-initialize RTV objects.
333 !
334 ! CALLING SEQUENCE:
335 ! CALL RTV_Destroy( RTV )
336 !
337 ! OBJECTS:
338 ! RTV: Re-initialized RTV structure.
339 ! UNITS: N/A
340 ! TYPE: RTV_type
341 ! DIMENSION: Scalar OR any rank
342 ! ATTRIBUTES: INTENT(OUT)
343 !
344 !:sdoc-:
345 !--------------------------------------------------------------------------------
346 
347  ELEMENTAL SUBROUTINE rtv_destroy( RTV )
348  TYPE(rtv_type), INTENT(OUT) :: rtv
349 
350  ! Belts and braces
351  rtv%Is_Allocated = .false.
352 
353  END SUBROUTINE rtv_destroy
354 
355 
356 !--------------------------------------------------------------------------------
357 !:sdoc+:
358 !
359 ! NAME:
360 ! RTV_Create
361 !
362 ! PURPOSE:
363 ! Elemental subroutine to create an instance of the RTV object.
364 !
365 ! CALLING SEQUENCE:
366 ! CALL RTV_Create( RTV, &
367 ! n_Angles , &
368 ! n_Legendre_Terms, &
369 ! n_Layers )
370 !
371 ! OBJECTS:
372 ! RTV: RTV structure.
373 ! UNITS: N/A
374 ! TYPE: RTV_type
375 ! DIMENSION: Scalar or any rank
376 ! ATTRIBUTES: INTENT(OUT)
377 !
378 ! INPUTS:
379 ! n_Angles: Number of
380 ! Must be > 0.
381 ! UNITS: N/A
382 ! TYPE: INTEGER
383 ! DIMENSION: Same as RTV object
384 ! ATTRIBUTES: INTENT(IN)
385 !
386 ! n_Legendre_Terms: Number of
387 ! Must be > 0.
388 ! UNITS: N/A
389 ! TYPE: INTEGER
390 ! DIMENSION: Same as RTV object
391 ! ATTRIBUTES: INTENT(IN)
392 !
393 ! n_Layers: Number of atmospheric layers.
394 ! Must be > 0.
395 ! UNITS: N/A
396 ! TYPE: INTEGER
397 ! DIMENSION: Same as RTV object
398 ! ATTRIBUTES: INTENT(IN)
399 !
400 !:sdoc-:
401 !--------------------------------------------------------------------------------
402 
403  ELEMENTAL SUBROUTINE rtv_create( &
404  RTV, &
405  n_Angles , &
406  n_Legendre_Terms, &
407  n_Layers )
408  ! Arguments
409  TYPE(rtv_type), INTENT(OUT) :: rtv
410  INTEGER , INTENT(IN) :: n_angles
411  INTEGER , INTENT(IN) :: n_legendre_terms
412  INTEGER , INTENT(IN) :: n_layers
413  ! Local variables
414  INTEGER :: alloc_stat
415 
416  ! Check input
417  IF ( n_angles < 1 .OR. n_legendre_terms < 1 .OR. n_layers < 1 ) RETURN
418 
419  ! Perform the allocation for phase function variables
420  ALLOCATE( rtv%Pff(n_angles, n_angles+1, n_layers) , &
421  rtv%Pbb(n_angles, n_angles+1, n_layers) , &
422  rtv%Pplus( 0:n_legendre_terms, n_angles), &
423  rtv%Pminus(0:n_legendre_terms, n_angles), &
424  rtv%Pleg(0:n_legendre_terms, n_angles+1), &
425  rtv%Off(n_angles, n_angles+1, n_layers) , &
426  rtv%Obb(n_angles, n_angles+1, n_layers) , &
427  rtv%n_Factor (n_angles, n_layers) , &
428  rtv%sum_fac(0:n_angles, n_layers) , &
429  stat = alloc_stat )
430  IF ( alloc_stat /= 0 ) RETURN
431 
432  ! Perform the allocation for adding-doubling variables
433  ALLOCATE( rtv%Inv_Gamma( n_angles, n_angles, n_layers) , &
434  rtv%Inv_GammaT(n_angles, n_angles, n_layers) , &
435  rtv%Refl_Trans(n_angles, n_angles, n_layers) , &
436  rtv%s_Layer_Trans(n_angles, n_angles, n_layers) , &
437  rtv%s_Layer_Refl( n_angles, n_angles, n_layers) , &
438  rtv%s_Level_Refl_UP(n_angles, n_angles, 0:n_layers), &
439  rtv%s_Level_Rad_UP(n_angles, 0:n_layers) , &
440  rtv%s_Layer_Source_UP( n_angles, n_layers) , &
441  rtv%s_Layer_Source_DOWN(n_angles, n_layers) , &
442  stat = alloc_stat )
443  IF ( alloc_stat /= 0 ) RETURN
444 
445  ! Perform the allocation for AMOM variables
446  ALLOCATE( rtv%Thermal_C(n_angles, n_layers) , &
447  rtv%EigVa(n_angles, n_layers) , &
448  rtv%Exp_x(n_angles, n_layers) , &
449  rtv%EigValue(n_angles, n_layers) , &
450  rtv%HH(n_angles, n_angles, n_layers) , &
451  rtv%PM(n_angles, n_angles, n_layers) , &
452  rtv%PP(n_angles, n_angles, n_layers) , &
453  rtv%PPM(n_angles, n_angles, n_layers) , &
454  rtv%PPP(n_angles, n_angles, n_layers) , &
455  rtv%i_PPM(n_angles, n_angles, n_layers) , &
456  rtv%i_PPP(n_angles,n_angles,n_layers) , &
457  rtv%EigVe(n_angles, n_angles, n_layers) , &
458  rtv%Gm(n_angles, n_angles, n_layers) , &
459  rtv%i_Gm(n_angles, n_angles, n_layers) , &
460  rtv%Gp(n_angles, n_angles, n_layers) , &
461  rtv%EigVeF(n_angles, n_angles, n_layers) , &
462  rtv%EigVeVa(n_angles,n_angles,n_layers) , &
463  rtv%A1(n_angles,n_angles, n_layers) , &
464  rtv%A2(n_angles, n_angles, n_layers) , &
465  rtv%A3(n_angles, n_angles, n_layers) , &
466  rtv%A4(n_angles, n_angles, n_layers) , &
467  rtv%A5(n_angles, n_angles, n_layers) , &
468  rtv%A6(n_angles, n_angles, n_layers) , &
469  rtv%Gm_A5(n_angles, n_angles, n_layers) , &
470  rtv%i_Gm_A5(n_angles, n_angles, n_layers), &
471  stat = alloc_stat )
472  IF ( alloc_stat /= 0 ) RETURN
473 
474  ! Perform the allocation for SOI variables
475  ALLOCATE( rtv%e_Layer_Trans( n_angles, n_layers), &
476  rtv%s_Level_IterRad_DOWN( n_angles, 0:n_layers, max_n_soi_iterations ), &
477  rtv%s_Level_IterRad_UP( n_angles, 0:n_layers, max_n_soi_iterations ), &
478  rtv%Number_Doubling(n_layers), &
479  rtv%Delta_Tau(n_layers), &
480  rtv%Refl(n_angles, n_angles, 0:max_n_doubling, n_layers), &
481  rtv%Trans(n_angles, n_angles, 0:max_n_doubling, n_layers), &
482  rtv%Inv_BeT(n_angles, n_angles, 0:max_n_doubling, n_layers), &
483  rtv%C1(n_angles, n_layers), &
484  rtv%C2(n_angles, n_layers), &
485  stat = alloc_stat )
486  IF ( alloc_stat /= 0 ) RETURN
487 
488  ! Set dimensions
489  rtv%n_Layers = n_layers
490  rtv%n_Angles = n_angles
491 
492  rtv%n_SOI_Iterations = 0
493 
494  ! Set the allocate flag
495  rtv%Is_Allocated = .true.
496 
497  END SUBROUTINE rtv_create
498 
499 END MODULE rtv_define
integer, parameter, public failure
integer, parameter, public set
real(fp), parameter, public zero
integer, parameter, public fp
Definition: Type_Kinds.f90:124
integer, parameter, public max_n_angles
real(fp), parameter, public angle_threshold
Definition: RTV_Define.f90:72
real(fp), parameter, public scattering_albedo_threshold
real(fp), parameter, public delta_optical_depth
Definition: RTV_Define.f90:78
real(fp), parameter, public optical_depth_threshold
character(*), parameter module_rcs_id
Definition: RTV_Define.f90:67
integer, parameter, public max_n_legendre_terms
integer, parameter, public max_n_soi_iterations
Definition: RTV_Define.f90:89
elemental subroutine, public rtv_create(RTV, n_Angles, n_Legendre_Terms, n_Layers)
Definition: RTV_Define.f90:408
real(fp), parameter, public secant_diffusivity
real(fp), parameter, public small_od_for_sc
Definition: RTV_Define.f90:82
real(fp), parameter, public one
recursive subroutine, public display_message(Routine_Name, Message, Error_State, Message_Log)
real(fp), parameter, public two
real(fp), parameter, public degrees_to_radians
integer, parameter, public invalid_sensor
integer, parameter, public max_n_layers
integer, parameter, public max_n_doubling
Definition: RTV_Define.f90:86
integer, parameter, public rt_ada
real(fp), parameter, public phase_threshold
Definition: RTV_Define.f90:76
real(fp), parameter, public max_albedo
Definition: RTV_Define.f90:79
elemental logical function, public rtv_associated(RTV)
Definition: RTV_Define.f90:314
integer, parameter, public success
elemental subroutine, public rtv_destroy(RTV)
Definition: RTV_Define.f90:348
real(fp), parameter, public pi