module_radiance.f90

References to this file elsewhere.
1 module module_radiance
2 
3    !---------------------------------------------------------------------------
4    ! Purpose: module for radiance data assimilation. 
5    !---------------------------------------------------------------------------
6 
7    use da_control, only : pi, use_landem
8    use da_reporting, only : da_error,message
9 
10 #ifdef RTTOV
11    use rttov_const,  only : &
12             errorstatus_success, &
13             platform_name      , &
14             inst_name          , &
15             gas_id_watervapour  ,&
16             gas_unit_specconc   ,&
17             gas_unit_ppmv, sensor_id_mw
18    use rttov_types
19 #endif
20 
21 #ifdef CRTM
22   ! -- Modules to define CRTM constants etc.
23    USE CRTM_Parameters, only : INVALID_WMO_SENSOR_ID
24    !USE Type_Kinds
25    !USE Error_Handler
26    !USE CRTM_Utility
27 
28   ! -- CRTM RT_models modules
29    USE CRTM_Module, only : graupel_cloud, rain_cloud, snow_cloud,crtm_adjoint, &
30       crtm_allocate_atmosphere, crtm_allocate_surface, crtm_assign_atmosphere, &
31       crtm_assign_surface,crtm_destroy_atmosphere,crtm_destroy_surface, &
32       crtm_forward,crtm_init,crtm_k_matrix,crtm_set_channelinfo, &
33       crtm_tangent_linear, grass_soil, h2o_id,hail_cloud,ice_cloud,new_snow, &
34       o3_id, water_cloud, crtm_rtsolution_type, crtm_channelinfo_type, &
35       crtm_atmosphere_type, crtm_surface_type, crtm_geometryinfo_type, &
36       crtm_zero_surface, crtm_zero_atmosphere
37 
38    USE CRTM_SensorInfo
39 #endif
40 
41    use gsi_kinds      ,  only : r_kind,r_double,i_kind,r_single
42    use gsi_constants  ,  only : deg2rad, rad2deg,       &
43                             init_constants_derived, &
44                             one, three, zero, half, &
45                             one_tenth, two, four
46 
47    ! use irsse_model, only: forward_irsse
48    implicit none
49    
50    real, parameter             :: q2ppmv = 1.60771704e+6
51 
52   Character (len=8), Parameter :: rttov_platform_name(1:20) = &
53        (/ 'noaa    ', 'dmsp    ', 'meteosat', 'goes    ', 'gms     ', &
54           'fy2     ', 'trmm    ', 'ers     ', 'eos     ', 'metop   ', &
55           'envisat ', 'msg     ', 'fy1     ', 'adeos   ', 'mtsat   ', &
56           'coriolis', 'npoess  ', 'gifts   ', 'xxxxxxxx', 'xxxxxxxx'/)
57 
58   ! List of instruments  !!!! HIRS is number 0
59   Character (len=8), Dimension(0:34) :: rttov_inst_name  =                &
60        & (/ 'hirs    ', 'msu     ', 'ssu     ', 'amsua   ', 'amsub   ',  &
61        &    'avhrr   ', 'ssmi    ', 'vtpr1   ', 'vtpr2   ', 'tmi     ',  &
62        &    'ssmis   ', 'airs    ', 'hsb     ', 'modis   ', 'atsr    ',  &
63        &    'mhs     ', 'iasi    ', 'amsr    ', 'imager  ', 'atms    ',  &
64        &    'mviri   ', 'seviri  ', 'imager  ', 'sounder ', 'imager  ',  &
65        &    'vissr   ', 'mvisr   ', 'cris    ', 'cmis    ', 'viirs   ',  &
66        &    'windsat ', 'gifts   ', 'xxxxxxxx', 'airs    ', 'xxxxxxxx'   /)
67 
68 ! n=noaa; f=dmsp; g=goes; c=npoess; eos-1/2=aqua/terra;
69    character(len=8), parameter :: crtm_platform_name(1:20) = &
70        (/ 'n       ', 'f       ', 'meteosat', 'g       ', 'gms     ', &
71           'fy2     ', 'trmm    ', 'ers     ', 'eos     ', 'metop   ', &
72           'envisat ', 'msg     ', 'fy1     ', 'adeos   ', 'mtsat   ', &
73           'coriolis', 'c       ', 'gifts   ', 'xxxxxxxx', 'xxxxxxxx'/)
74 
75 ! List of instruments  !!!! HIRS is number 0
76   Character (len=8), Dimension(0:34) :: crtm_sensor_name  =                &
77        & (/ 'hirs    ', 'msu     ', 'ssu     ', 'amsua   ', 'amsub   ',  &
78        &    'avhrr   ', 'ssmi    ', 'vtpr1   ', 'vtpr2   ', 'tmi     ',  &
79        &    'ssmis   ', 'airs    ', 'hsb     ', 'modis   ', 'atsr    ',  &
80        &    'mhs     ', 'iasi    ', 'amsre   ', 'imager  ', 'atms    ',  &
81        &    'mviri   ', 'seviri  ', 'imgr    ', 'sndr    ', 'imager  ',  &
82        &    'vissr   ', 'mvisr   ', 'cris    ', 'cmis    ', 'viirs   ',  &
83        &    'windsat ', 'gifts   ', 'amsre   ', 'xxxxxxxx', 'xxxxxxxx'   /)
84 
85    integer                     :: n_scatt_coef
86    character(len=5), pointer   :: coefs_scatt_instname(:)
87    real,             pointer   :: time_slots(:)
88 #ifdef RTTOV
89    type( rttov_coef ), pointer :: coefs(:)         ! RTTOV8_5 coefficients
90    type( rttov_scatt_coef ), pointer :: coefs_scatt(:)
91 #endif
92 
93    type satinfo_type
94       integer, pointer   :: ichan(:)      ! channel index
95       integer, pointer   :: iuse (:)      ! usage flag (-1: not use) from GSI info file
96       real   , pointer   :: error(:)      ! error Standard Deviation from GSI info file
97       real   , pointer   :: polar(:)      ! polarisation (0:ver; 1:hori) from GSI info file
98       real   , pointer   :: error_factor(:) ! error tuning factor ! from error tuning file
99      ! new air mass bias correction coefs.
100       real   , pointer   :: scanbias(:,:) ! scan bias without latitude band variation
101       real   , pointer   :: scanbias_b(:,:,:) ! scan bias with latitude band variation
102       real   , pointer   :: bcoef(:,:)   ! airmass predictor bias coefficients
103       real   , pointer   :: bcoef0(:)    ! airmass constant coefficient
104       real   , pointer   :: error_std(:) ! error standard deviation
105    end type satinfo_type
106 
107    type (satinfo_type), pointer :: satinfo(:)
108 
109 #ifdef RTTOV
110    CHARACTER( 80 ), pointer :: Sensor_Descriptor(:)
111 #endif
112 
113 contains
114 
115 #include "gsi_emiss.inc"
116 #include "emiss_ssmi.inc"
117 #include "iceem_amsu.inc"
118 #include "siem_ats.inc"
119 #include "siem_bts.inc"
120 #include "siem_interpolate.inc"
121 #include "landem.inc"
122 #include "snwem_amsu.inc"
123 #include "seaem.inc"
124 #include "ossmem.inc"
125 
126 end module module_radiance
127