UFO
ufo_variables_mod.F90
Go to the documentation of this file.
1 !
2 ! (C) Copyright 2017-2019 UCAR
3 !
4 ! This software is licensed under the terms of the Apache Licence Version 2.0
5 ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6 !
7 
9 
10 implicit none
11 private
13 
14 integer, parameter, public :: n_aerosols_gocart_default=14,&
15  &n_aerosols_gocart_merra_2=15,n_aerosols_other=1
16 
17 integer, parameter, public :: maxvarlen=100
18 character(len=MAXVARLEN), public, parameter :: var_tv = "virtual_temperature"
19 character(len=MAXVARLEN), public, parameter :: var_ts = "air_temperature"
20 character(len=MAXVARLEN), public, parameter :: var_t = "temperature"
21 character(len=MAXVARLEN), public, parameter :: var_mixr = "humidity_mixing_ratio" ! g/kg
22 character(len=MAXVARLEN), public, parameter :: var_q = "specific_humidity" ! kg/kg
23 character(len=MAXVARLEN), public, parameter :: var_u = "eastward_wind"
24 character(len=MAXVARLEN), public, parameter :: var_v = "northward_wind"
25 character(len=MAXVARLEN), public, parameter :: var_prs = "air_pressure"
26 character(len=MAXVARLEN), public, parameter :: var_prsi = "air_pressure_levels"
27 character(len=MAXVARLEN), public, parameter :: var_delp = "air_pressure_thickness"
28 character(len=MAXVARLEN), public, parameter :: var_ps = "surface_pressure"
29 character(len=MAXVARLEN), public, parameter :: var_z = "geopotential_height"
30 character(len=MAXVARLEN), public, parameter :: var_zm = "geometric_height"
31 character(len=MAXVARLEN), public, parameter :: var_zi = "geopotential_height_levels"
32 character(len=MAXVARLEN), public, parameter :: var_sfc_z= "surface_geopotential_height"
33 character(len=MAXVARLEN), public, parameter :: var_oz = "mole_fraction_of_ozone_in_air"
34 character(len=MAXVARLEN), public, parameter :: var_co2 = "mole_fraction_of_carbon_dioxide_in_air"
35 character(len=MAXVARLEN), public, parameter :: var_clw = "mass_content_of_cloud_liquid_water_in_atmosphere_layer"
36 character(len=MAXVARLEN), public, parameter :: var_cli = "mass_content_of_cloud_ice_in_atmosphere_layer"
37 character(len=MAXVARLEN), public, parameter :: var_clr = "mass_content_of_rain_in_atmosphere_layer"
38 character(len=MAXVARLEN), public, parameter :: var_cls = "mass_content_of_snow_in_atmosphere_layer"
39 character(len=MAXVARLEN), public, parameter :: var_clg = "mass_content_of_graupel_in_atmosphere_layer"
40 character(len=MAXVARLEN), public, parameter :: var_clh = "mass_content_of_hail_in_atmosphere_layer"
41 character(len=MAXVARLEN), public, parameter :: var_clwefr = "effective_radius_of_cloud_liquid_water_particle"
42 character(len=MAXVARLEN), public, parameter :: var_cliefr = "effective_radius_of_cloud_ice_particle"
43 character(len=MAXVARLEN), public, parameter :: var_clrefr = "effective_radius_of_rain_particle"
44 character(len=MAXVARLEN), public, parameter :: var_clsefr = "effective_radius_of_snow_particle"
45 character(len=MAXVARLEN), public, parameter :: var_clgefr = "effective_radius_of_graupel_particle"
46 character(len=MAXVARLEN), public, parameter :: var_clhefr = "effective_radius_of_hail_particle"
47 character(len=MAXVARLEN), public, parameter :: var_cldfrac= "cloud_area_fraction_in_atmosphere_layer"
48 character(len=MAXVARLEN), public, parameter :: var_sfc_p2m = "air_pressure_at_two_meters_above_surface" ! (Pa)
49 character(len=MAXVARLEN), public, parameter :: var_sfc_q2m = "specific_humidity_at_two_meters_above_surface" ! (kg/kg)
50 character(len=MAXVARLEN), public, parameter :: var_sfc_t2m = "surface_temperature" ! (K)
51 character(len=MAXVARLEN), public, parameter :: var_sfc_tskin = "skin_temperature" ! (K)
52 character(len=MAXVARLEN), public, parameter :: var_sfc_wfrac = "water_area_fraction"
53 character(len=MAXVARLEN), public, parameter :: var_sfc_lfrac = "land_area_fraction"
54 character(len=MAXVARLEN), public, parameter :: var_sfc_ifrac = "ice_area_fraction"
55 character(len=MAXVARLEN), public, parameter :: var_sfc_sfrac = "surface_snow_area_fraction"
56 character(len=MAXVARLEN), public, parameter :: var_sfc_wtmp = "surface_temperature_where_sea"
57 character(len=MAXVARLEN), public, parameter :: var_sfc_ltmp = "surface_temperature_where_land"
58 character(len=MAXVARLEN), public, parameter :: var_sfc_itmp = "surface_temperature_where_ice"
59 character(len=MAXVARLEN), public, parameter :: var_sfc_stmp = "surface_temperature_where_snow"
60 character(len=MAXVARLEN), public, parameter :: var_sfc_sdepth = "surface_snow_thickness"
61 character(len=MAXVARLEN), public, parameter :: var_sfc_vegfrac = "vegetation_area_fraction"
62 character(len=MAXVARLEN), public, parameter :: var_sfc_wspeed = "surface_wind_speed"
63 character(len=MAXVARLEN), public, parameter :: var_sfc_wdir = "surface_wind_from_direction"
64 character(len=MAXVARLEN), public, parameter :: var_sfc_u10 = "uwind_at_10m"
65 character(len=MAXVARLEN), public, parameter :: var_sfc_v10 = "vwind_at_10m"
66 character(len=MAXVARLEN), public, parameter :: var_sfc_u = "surface_eastward_wind"
67 character(len=MAXVARLEN), public, parameter :: var_sfc_v = "surface_northward_wind"
68 character(len=MAXVARLEN), public, parameter :: var_sfc_lai = "leaf_area_index"
69 character(len=MAXVARLEN), public, parameter :: var_sfc_soilm = "volume_fraction_of_condensed_water_in_soil"
70 character(len=MAXVARLEN), public, parameter :: var_sfc_soilt = "soil_temperature"
71 character(len=MAXVARLEN), public, parameter :: var_sfc_landtyp = "land_type_index"
72 character(len=MAXVARLEN), public, parameter :: var_sfc_vegtyp = "vegetation_type_index"
73 character(len=MAXVARLEN), public, parameter :: var_sfc_soiltyp = "soil_type"
74 character(len=MAXVARLEN), public, parameter :: var_geomz = "height"
75 character(len=MAXVARLEN), public, parameter :: var_sfc_geomz = "surface_altitude"
76 character(len=MAXVARLEN), public, parameter :: var_sfc_rough = "surface_roughness_length"
77 character(len=MAXVARLEN), public, parameter :: var_sfc_t = "surface_temperature"
78 character(len=MAXVARLEN), public, parameter :: var_sfc_fact10 = "wind_reduction_factor_at_10m"
79 character(len=MAXVARLEN), public, parameter :: var_sfc_emiss = "surface_emissivity"
80 character(len=MAXVARLEN), public, parameter :: var_sfc_sss = "sea_surface_salinity"
81 character(len=MAXVARLEN), public, parameter :: var_opt_depth = "optical_thickness_of_atmosphere_layer"
82 character(len=MAXVARLEN), public, parameter :: var_radiance = "toa_outgoing_radiance_per_unit_wavenumber"
83 character(len=MAXVARLEN), public, parameter :: var_tb = "brightness_temperature"
84 character(len=MAXVARLEN), public, parameter :: var_tb_clr = "brightness_temperature_assuming_clear_sky"
85 character(len=MAXVARLEN), public, parameter :: var_total_transmit= "toa_total_transmittance"
86 character(len=MAXVARLEN), public, parameter :: var_lvl_transmit= "transmittances_of_atmosphere_layer"
87 character(len=MAXVARLEN), public, parameter :: var_lvl_weightfunc= "weightingfunction_of_atmosphere_layer"
88 character(len=MAXVARLEN), public, parameter :: var_pmaxlev_weightfunc= "pressure_level_at_peak_of_weightingfunction"
89 character(len=MAXVARLEN), public, parameter :: var_tsavg5 = "average_surface_temperature_within_field_of_view"
90 character(len=MAXVARLEN), public, parameter :: var_sea_fric_vel = "friction_velocity_over_water"
91 character(len=MAXVARLEN), public, parameter :: var_obk_length = "obukhov_length"
92 
93 
94 character(len=MAXVARLEN), public, parameter :: var_refl = "equivalent_reflectivity_factor"
95 character(len=MAXVARLEN), public, parameter :: var_w = "upward_air_velocity"
96 
97 character(len=MAXVARLEN), public, parameter :: var_rh = "relative_humidity" ! dimensionless (0 <= RH <= 1)
98 character(len=MAXVARLEN), public, parameter :: var_water_type_rttov = "water_type" ! 0 (fresh), 1 (sea)
99 character(len=MAXVARLEN), public, parameter :: var_surf_type_rttov = "surface_type" ! 0 (land), 1 (water), 2 (sea-ice)
100 character(len=MAXVARLEN), public, parameter :: var_sfc_landmask = "landmask" ! 0 (sea), 1 (land)
101 character(len=MAXVARLEN), public, parameter :: var_sfc_seaicefrac = "seaice_fraction"
102 
103 character(len=MAXVARLEN), public :: var_seaicefrac = "sea_ice_category_area_fraction"
104 character(len=MAXVARLEN), public :: var_seaicethick = "sea_ice_category_thickness"
105 character(len=MAXVARLEN), public :: var_seaicesnowthick = "sea_ice_category_snow_thickness"
106 character(len=MAXVARLEN), public :: var_ocn_chl = "mass_concentration_of_chlorophyll_in_sea_water"
107 character(len=MAXVARLEN), public :: var_abs_topo = "sea_surface_height_above_geoid"
108 character(len=MAXVARLEN), public :: var_ocn_pot_temp = "sea_water_potential_temperature"
109 character(len=MAXVARLEN), public :: var_ocn_con_temp = "sea_water_conservative_temperature"
110 character(len=MAXVARLEN), public :: var_ocn_abs_salt = "sea_water_absolute_salinity"
111 character(len=MAXVARLEN), public :: var_ocn_pra_salt = "sea_water_practical_salinity"
112 character(len=MAXVARLEN), public :: var_ocn_salt = "sea_water_salinity"
113 character(len=MAXVARLEN), public :: var_ocn_lay_thick = "sea_water_cell_thickness"
114 character(len=MAXVARLEN), public :: var_ocn_sst = "sea_surface_temperature"
115 character(len=MAXVARLEN), public :: var_sea_td = "sea_surface_foundation_temperature"
116 character(len=MAXVARLEN), public :: var_latent_vap = "latent_heat_vaporization"
117 character(len=MAXVARLEN), public :: var_sw_rad = "net_downwelling_shortwave_radiation"
118 character(len=MAXVARLEN), public :: var_latent_heat = "upward_latent_heat_flux_in_air"
119 character(len=MAXVARLEN), public :: var_sens_heat = "upward_sensible_heat_flux_in_air"
120 character(len=MAXVARLEN), public :: var_lw_rad = "net_downwelling_longwave_radiation"
121 
122 character(len=MAXVARLEN), public, parameter :: var_du001 = "mass_fraction_of_dust001_in_air"
123 character(len=MAXVARLEN), public, parameter :: var_du002 = "mass_fraction_of_dust002_in_air"
124 character(len=MAXVARLEN), public, parameter :: var_du003 = "mass_fraction_of_dust003_in_air"
125 character(len=MAXVARLEN), public, parameter :: var_du004 = "mass_fraction_of_dust004_in_air"
126 character(len=MAXVARLEN), public, parameter :: var_du005 = "mass_fraction_of_dust005_in_air"
127 character(len=MAXVARLEN), public, parameter :: var_ss001 = "mass_fraction_of_sea_salt001_in_air"
128 character(len=MAXVARLEN), public, parameter :: var_ss002 = "mass_fraction_of_sea_salt002_in_air"
129 character(len=MAXVARLEN), public, parameter :: var_ss003 = "mass_fraction_of_sea_salt003_in_air"
130 character(len=MAXVARLEN), public, parameter :: var_ss004 = "mass_fraction_of_sea_salt004_in_air"
131 character(len=MAXVARLEN), public, parameter :: var_ss005 = "mass_fraction_of_sea_salt005_in_air"
132 character(len=MAXVARLEN), public, parameter :: var_bcphobic = "mass_fraction_of_hydrophobic_black_carbon_in_air"
133 character(len=MAXVARLEN), public, parameter :: var_bcphilic = "mass_fraction_of_hydrophilic_black_carbon_in_air"
134 character(len=MAXVARLEN), public, parameter :: var_ocphobic = "mass_fraction_of_hydrophobic_organic_carbon_in_air"
135 character(len=MAXVARLEN), public, parameter :: var_ocphilic = "mass_fraction_of_hydrophilic_organic_carbon_in_air"
136 character(len=MAXVARLEN), public, parameter :: var_sulfate = "mass_fraction_of_sulfate_in_air"
137 character(len=MAXVARLEN), public, parameter :: var_no3an1 = "mass_fraction_of_nitrate001_in_air"
138 character(len=MAXVARLEN), public, parameter :: var_no3an2 = "mass_fraction_of_nitrate002_in_air"
139 character(len=MAXVARLEN), public, parameter :: var_no3an3 = "mass_fraction_of_nitrate003_in_air"
140 character(len=MAXVARLEN), public, parameter :: var_ext1 = "volume_extinction_in_air_due_to_aerosol_particles_lambda1"
141 character(len=MAXVARLEN), public, parameter :: var_ext2 = "volume_extinction_in_air_due_to_aerosol_particles_lambda2"
142 character(len=MAXVARLEN), public, parameter :: var_ext3 = "volume_extinction_in_air_due_to_aerosol_particles_lambda3"
143 character(len=MAXVARLEN), public, parameter :: var_airdens = "moist_air_density"
144 
145 character(len=MAXVARLEN), dimension(n_aerosols_gocart_default), public, parameter :: &
146  &var_aerosols_gocart_default = [&
147  &var_sulfate,&
148  &var_bcphobic, var_bcphilic, var_ocphobic, var_ocphilic,&
149  &var_du001, var_du002, var_du003, var_du004, var_du005,&
150  &var_ss001, var_ss002, var_ss003, var_ss004]
151 
152 character(len=maxvarlen), dimension(n_aerosols_gocart_merra_2), public, parameter :: &
153  &var_aerosols_gocart_merra_2 = [&
154  &var_sulfate,&
155  &var_bcphobic, var_bcphilic, var_ocphobic, var_ocphilic,&
156  &var_du001, var_du002, var_du003, var_du004, var_du005,&
157  &var_ss001, var_ss002, var_ss003, var_ss004, var_ss005]
158 
159 character(len=MAXVARLEN), dimension(n_aerosols_other), public, parameter :: &
160  &var_aerosols_other = [&
161  &"other "]
162 
163 ! ------------------------------------------------------------------------------
164 contains
165 
166 subroutine ufo_vars_read(f_vars, vars)
167 use fckit_configuration_module, only: fckit_configuration
168 implicit none
169 type(fckit_configuration), intent(in) :: f_vars
170 character(len=MAXVARLEN), dimension(:), allocatable, intent(inout) :: vars
171 
172 integer :: nvars
173 character(len=:), allocatable :: str
174 
175 if (f_vars%has("nvars")) then
176  call f_vars%get_or_die("nvars",nvars)
177  if (allocated(vars)) deallocate(vars)
178  allocate(vars(nvars))
179  call f_vars%get_or_die("variables",str)
180  read(str,*) vars
181 else
182  allocate(vars(0))
183 endif
184 
185 end subroutine ufo_vars_read
186 
187 ! ------------------------------------------------------------------------------
188 
189 integer function ufo_vars_getindex(vars, varname)
190 use ufo_utils_mod, only: cmp_strings
191 implicit none
192 character(len=*), intent(in) :: vars(:)
193 character(len=*), intent(in) :: varname
194 
195 integer :: ivar
196 
198 
199 do ivar = 1, size(vars)
200  if (cmp_strings(vars(ivar), varname)) then
201  ufo_vars_getindex = ivar
202  exit
203  endif
204 enddo
205 
206 end function ufo_vars_getindex
207 
208 ! ------------------------------------------------------------------------------
209 
210 end module ufo_vars_mod
Fortran module with various useful routines.
logical function, public cmp_strings(str1, str2)
character(len=maxvarlen), parameter, public var_sfc_rough
character(len=maxvarlen), parameter, public var_radiance
character(len=maxvarlen), parameter, public var_co2
character(len=maxvarlen), public var_seaicesnowthick
character(len=maxvarlen), parameter, public var_prsi
character(len=maxvarlen), public var_sens_heat
character(len=maxvarlen), parameter, public var_sfc_emiss
character(len=maxvarlen), parameter, public var_clrefr
character(len=maxvarlen), parameter, public var_water_type_rttov
character(len=maxvarlen), parameter, public var_clsefr
character(len=maxvarlen), parameter, public var_no3an3
character(len=maxvarlen), parameter, public var_sfc_ifrac
character(len=maxvarlen), parameter, public var_surf_type_rttov
integer function, public ufo_vars_getindex(vars, varname)
character(len=maxvarlen), parameter, public var_cldfrac
subroutine, public ufo_vars_read(f_vars, vars)
character(len=maxvarlen), parameter, public var_oz
character(len=maxvarlen), parameter, public var_clgefr
character(len=maxvarlen), parameter, public var_clw
character(len=maxvarlen), parameter, public var_sfc_lfrac
character(len=maxvarlen), parameter, public var_sfc_v10
character(len=maxvarlen), parameter, public var_sfc_seaicefrac
character(len=maxvarlen), parameter, public var_cls
character(len=maxvarlen), public var_seaicethick
character(len=maxvarlen), parameter, public var_geomz
character(len=maxvarlen), public var_ocn_abs_salt
character(len=maxvarlen), parameter, public var_sfc_wtmp
character(len=maxvarlen), parameter, public var_prs
character(len=maxvarlen), parameter, public var_rh
character(len=maxvarlen), parameter, public var_du004
character(len=maxvarlen), parameter, public var_obk_length
character(len=maxvarlen), parameter, public var_ext2
character(len=maxvarlen), parameter, public var_q
character(len=maxvarlen), parameter, public var_sfc_u10
character(len=maxvarlen), parameter, public var_ss005
character(len=maxvarlen), parameter, public var_sfc_wfrac
character(len=maxvarlen), parameter, public var_tb_clr
character(len=maxvarlen), parameter, public var_sfc_sfrac
character(len=maxvarlen), parameter, public var_t
character(len=maxvarlen), parameter, public var_sfc_itmp
character(len=maxvarlen), parameter, public var_zm
character(len=maxvarlen), parameter, public var_sfc_wdir
character(len=maxvarlen), parameter, public var_bcphilic
character(len=maxvarlen), public var_ocn_con_temp
character(len=maxvarlen), parameter, public var_sfc_soilm
integer, parameter, public n_aerosols_gocart_default
character(len=maxvarlen), public var_seaicefrac
character(len=maxvarlen), parameter, public var_sfc_landmask
character(len=maxvarlen), parameter, public var_clhefr
character(len=maxvarlen), parameter, public var_du005
integer, parameter, public maxvarlen
character(len=maxvarlen), parameter, public var_ocphobic
character(len=maxvarlen), parameter, public var_sfc_u
character(len=maxvarlen), parameter, public var_sfc_sdepth
character(len=maxvarlen), parameter, public var_du003
character(len=maxvarlen), parameter, public var_sfc_landtyp
character(len=maxvarlen), public var_ocn_pot_temp
character(len=maxvarlen), parameter, public var_sfc_q2m
character(len=maxvarlen), parameter, public var_v
character(len=maxvarlen), parameter, public var_mixr
character(len=maxvarlen), public var_latent_vap
character(len=maxvarlen), parameter, public var_clh
character(len=maxvarlen), parameter, public var_zi
character(len=maxvarlen), parameter, public var_du002
character(len=maxvarlen), public var_latent_heat
character(len=maxvarlen), public var_ocn_salt
character(len=maxvarlen), parameter, public var_sfc_tskin
character(len=maxvarlen), parameter, public var_sfc_p2m
character(len=maxvarlen), parameter, public var_lvl_transmit
character(len=maxvarlen), parameter, public var_sfc_geomz
character(len=maxvarlen), parameter, public var_tb
character(len=maxvarlen), parameter, public var_sulfate
character(len=maxvarlen), parameter, public var_bcphobic
character(len=maxvarlen), parameter, public var_sfc_stmp
character(len=maxvarlen), parameter, public var_lvl_weightfunc
character(len=maxvarlen), parameter, public var_cliefr
character(len=maxvarlen), parameter, public var_sfc_sss
character(len=maxvarlen), parameter, public var_airdens
character(len=maxvarlen), parameter, public var_z
character(len=maxvarlen), parameter, public var_ts
character(len=maxvarlen), parameter, public var_sfc_lai
character(len=maxvarlen), parameter, public var_ocphilic
character(len=maxvarlen), parameter, public var_clwefr
character(len=maxvarlen), parameter, public var_pmaxlev_weightfunc
character(len=maxvarlen), parameter, public var_u
character(len=maxvarlen), parameter, public var_no3an1
character(len=maxvarlen), parameter, public var_du001
character(len=maxvarlen), parameter, public var_sfc_v
character(len=maxvarlen), parameter, public var_sfc_vegtyp
character(len=maxvarlen), parameter, public var_sfc_soiltyp
character(len=maxvarlen), parameter, public var_tsavg5
character(len=maxvarlen), parameter, public var_ps
character(len=maxvarlen), parameter, public var_ext3
character(len=maxvarlen), parameter, public var_cli
character(len=maxvarlen), parameter, public var_tv
character(len=maxvarlen), public var_lw_rad
character(len=maxvarlen), parameter, public var_ss002
character(len=maxvarlen), public var_sea_td
character(len=maxvarlen), parameter, public var_w
character(len=maxvarlen), public var_ocn_chl
character(len=maxvarlen), public var_sw_rad
character(len=maxvarlen), parameter, public var_sfc_vegfrac
character(len=maxvarlen), parameter, public var_no3an2
character(len=maxvarlen), parameter, public var_clr
character(len=maxvarlen), parameter, public var_delp
character(len=maxvarlen), parameter, public var_refl
character(len=maxvarlen), parameter, public var_sfc_z
character(len=maxvarlen), parameter, public var_sfc_ltmp
character(len=maxvarlen), parameter, public var_sfc_t
character(len=maxvarlen), parameter, public var_sfc_fact10
character(len=maxvarlen), parameter, public var_opt_depth
character(len=maxvarlen), public var_ocn_sst
character(len=maxvarlen), public var_ocn_lay_thick
character(len=maxvarlen), public var_abs_topo
character(len=maxvarlen), parameter, public var_ss004
character(len=maxvarlen), parameter, public var_sfc_soilt
character(len=maxvarlen), parameter, public var_sfc_wspeed
character(len=maxvarlen), parameter, public var_total_transmit
character(len=maxvarlen), parameter, public var_ss003
character(len=maxvarlen), parameter, public var_ext1
character(len=maxvarlen), public var_ocn_pra_salt
character(len=maxvarlen), parameter, public var_sfc_t2m
character(len=maxvarlen), parameter, public var_ss001
character(len=maxvarlen), parameter, public var_sea_fric_vel
character(len=maxvarlen), parameter, public var_clg