[Dart-dev] [4610] DART/trunk: A real forward operator for relative humidity. The chan

nancy at ucar.edu nancy at ucar.edu
Thu Dec 16 17:26:32 MST 2010


Revision: 4610
Author:   nancy
Date:     2010-12-16 17:26:31 -0700 (Thu, 16 Dec 2010)
Log Message:
-----------
A real forward operator for relative humidity.  The changes in the 
other files are to remove the straight interpolation call to the model
interpolate routine, and to add the obs_def_rel_humidity_mod.f90 to
the preprocess list.

Modified Paths:
--------------
    DART/trunk/models/wrf/work/input.nml
    DART/trunk/obs_def/obs_def_metar_mod.f90
    DART/trunk/obs_def/obs_def_reanalysis_bufr_mod.f90
    DART/trunk/observations/MADIS/shell_scripts/input.nml.template
    DART/trunk/observations/MADIS/work/input.nml
    DART/trunk/observations/utilities/threed_sphere/input.nml

Added Paths:
-----------
    DART/trunk/obs_def/obs_def_rel_humidity_mod.f90

-------------- next part --------------
Modified: DART/trunk/models/wrf/work/input.nml
===================================================================
--- DART/trunk/models/wrf/work/input.nml	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/models/wrf/work/input.nml	2010-12-17 00:26:31 UTC (rev 4610)
@@ -110,6 +110,7 @@
                               '../../../obs_def/obs_def_radar_mod.f90',
                               '../../../obs_def/obs_def_metar_mod.f90',
                               '../../../obs_def/obs_def_dew_point_mod.f90',
+                              '../../../obs_def/obs_def_rel_humidity_mod.f90',
                               '../../../obs_def/obs_def_altimeter_mod.f90',
                               '../../../obs_def/obs_def_gps_mod.f90',
                               '../../../obs_def/obs_def_vortex_mod.f90',

Modified: DART/trunk/obs_def/obs_def_metar_mod.f90
===================================================================
--- DART/trunk/obs_def/obs_def_metar_mod.f90	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/obs_def/obs_def_metar_mod.f90	2010-12-17 00:26:31 UTC (rev 4610)
@@ -7,7 +7,6 @@
 ! METAR_V_10_METER_WIND,           KIND_V_WIND_COMPONENT,       COMMON_CODE
 ! METAR_TEMPERATURE_2_METER,       KIND_TEMPERATURE,            COMMON_CODE
 ! METAR_SPECIFIC_HUMIDITY_2_METER, KIND_SPECIFIC_HUMIDITY,      COMMON_CODE
-! METAR_RELATIVE_HUMIDITY_2_METER, KIND_RELATIVE_HUMIDITY,      COMMON_CODE
 ! METAR_SURFACE_PRESSURE,          KIND_SURFACE_PRESSURE,       COMMON_CODE
 ! METAR_POT_TEMP_2_METER,          KIND_POTENTIAL_TEMPERATURE,  COMMON_CODE
 ! END DART PREPROCESS KIND LIST

Modified: DART/trunk/obs_def/obs_def_reanalysis_bufr_mod.f90
===================================================================
--- DART/trunk/obs_def/obs_def_reanalysis_bufr_mod.f90	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/obs_def/obs_def_reanalysis_bufr_mod.f90	2010-12-17 00:26:31 UTC (rev 4610)
@@ -9,33 +9,27 @@
 !RADIOSONDE_SURFACE_PRESSURE,  KIND_SURFACE_PRESSURE,  COMMON_CODE
 !RADIOSONDE_TEMPERATURE,       KIND_TEMPERATURE,       COMMON_CODE
 !RADIOSONDE_SPECIFIC_HUMIDITY, KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!RADIOSONDE_RELATIVE_HUMIDITY, KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !DROPSONDE_U_WIND_COMPONENT,   KIND_U_WIND_COMPONENT,  COMMON_CODE
 !DROPSONDE_V_WIND_COMPONENT,   KIND_V_WIND_COMPONENT,  COMMON_CODE
 !DROPSONDE_SURFACE_PRESSURE,   KIND_SURFACE_PRESSURE,  COMMON_CODE
 !DROPSONDE_TEMPERATURE,        KIND_TEMPERATURE,       COMMON_CODE
 !DROPSONDE_SPECIFIC_HUMIDITY,  KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!DROPSONDE_RELATIVE_HUMIDITY,  KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !AIRCRAFT_U_WIND_COMPONENT,    KIND_U_WIND_COMPONENT,  COMMON_CODE
 !AIRCRAFT_V_WIND_COMPONENT,    KIND_V_WIND_COMPONENT,  COMMON_CODE
 !AIRCRAFT_TEMPERATURE,         KIND_TEMPERATURE,       COMMON_CODE
 !AIRCRAFT_SPECIFIC_HUMIDITY,   KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!AIRCRAFT_RELATIVE_HUMIDITY,   KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !ACARS_U_WIND_COMPONENT,       KIND_U_WIND_COMPONENT,  COMMON_CODE
 !ACARS_V_WIND_COMPONENT,       KIND_V_WIND_COMPONENT,  COMMON_CODE
 !ACARS_TEMPERATURE,            KIND_TEMPERATURE,       COMMON_CODE
 !ACARS_SPECIFIC_HUMIDITY,      KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!ACARS_RELATIVE_HUMIDITY,      KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !MARINE_SFC_U_WIND_COMPONENT,  KIND_U_WIND_COMPONENT,  COMMON_CODE
 !MARINE_SFC_V_WIND_COMPONENT,  KIND_V_WIND_COMPONENT,  COMMON_CODE
 !MARINE_SFC_TEMPERATURE,       KIND_TEMPERATURE,       COMMON_CODE
 !MARINE_SFC_SPECIFIC_HUMIDITY, KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!MARINE_SFC_RELATIVE_HUMIDITY, KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !LAND_SFC_U_WIND_COMPONENT,    KIND_U_WIND_COMPONENT,  COMMON_CODE
 !LAND_SFC_V_WIND_COMPONENT,    KIND_V_WIND_COMPONENT,  COMMON_CODE
 !LAND_SFC_TEMPERATURE,         KIND_TEMPERATURE,       COMMON_CODE
 !LAND_SFC_SPECIFIC_HUMIDITY,   KIND_SPECIFIC_HUMIDITY, COMMON_CODE
-!LAND_SFC_RELATIVE_HUMIDITY,   KIND_RELATIVE_HUMIDITY, COMMON_CODE
 !SAT_U_WIND_COMPONENT,         KIND_U_WIND_COMPONENT,  COMMON_CODE
 !SAT_V_WIND_COMPONENT,         KIND_V_WIND_COMPONENT,  COMMON_CODE
 !ATOV_TEMPERATURE,             KIND_TEMPERATURE,       COMMON_CODE

Added: DART/trunk/obs_def/obs_def_rel_humidity_mod.f90
===================================================================
--- DART/trunk/obs_def/obs_def_rel_humidity_mod.f90	                        (rev 0)
+++ DART/trunk/obs_def/obs_def_rel_humidity_mod.f90	2010-12-17 00:26:31 UTC (rev 4610)
@@ -0,0 +1,180 @@
+! DART software - Copyright � 2004 - 2010 UCAR. This open source software is
+! provided by UCAR, "as is", without charge, subject to all terms of use at
+! http://www.image.ucar.edu/DAReS/DART/DART_download
+
+
+! BEGIN DART PREPROCESS KIND LIST
+!RADIOSONDE_RELATIVE_HUMIDITY,    KIND_RELATIVE_HUMIDITY
+!DROPSONDE_RELATIVE_HUMIDITY,     KIND_RELATIVE_HUMIDITY
+!AIRCRAFT_RELATIVE_HUMIDITY,      KIND_RELATIVE_HUMIDITY
+!ACARS_RELATIVE_HUMIDITY,         KIND_RELATIVE_HUMIDITY
+!MARINE_SFC_RELATIVE_HUMIDITY,    KIND_RELATIVE_HUMIDITY
+!LAND_SFC_RELATIVE_HUMIDITY,      KIND_RELATIVE_HUMIDITY
+!METAR_RELATIVE_HUMIDITY_2_METER, KIND_RELATIVE_HUMIDITY
+!AIRS_RELATIVE_HUMIDITY,          KIND_RELATIVE_HUMIDITY
+! END DART PREPROCESS KIND LIST
+
+! BEGIN DART PREPROCESS USE OF SPECIAL OBS_DEF MODULE
+!   use obs_def_rel_humidity_mod, only : get_expected_relative_humidity
+! END DART PREPROCESS USE OF SPECIAL OBS_DEF MODULE
+
+! BEGIN DART PREPROCESS GET_EXPECTED_OBS_FROM_DEF
+!         case(RADIOSONDE_RELATIVE_HUMIDITY, DROPSONDE_RELATIVE_HUMIDITY, &
+!              AIRCRAFT_RELATIVE_HUMIDITY,   ACARS_RELATIVE_HUMIDITY,     &
+!              MARINE_SFC_RELATIVE_HUMIDITY, LAND_SFC_RELATIVE_HUMIDITY,  &
+!              METAR_RELATIVE_HUMIDITY_2_METER, AIRS_RELATIVE_HUMIDITY)
+!            call get_expected_relative_humidity(state, location, obs_val, istatus)
+! END DART PREPROCESS GET_EXPECTED_OBS_FROM_DEF
+
+! BEGIN DART PREPROCESS READ_OBS_DEF
+!         case(RADIOSONDE_RELATIVE_HUMIDITY, DROPSONDE_RELATIVE_HUMIDITY, &
+!              AIRCRAFT_RELATIVE_HUMIDITY,   ACARS_RELATIVE_HUMIDITY,     &
+!              MARINE_SFC_RELATIVE_HUMIDITY, LAND_SFC_RELATIVE_HUMIDITY,  &
+!              METAR_RELATIVE_HUMIDITY_2_METER, AIRS_RELATIVE_HUMIDITY)
+!            continue
+! END DART PREPROCESS READ_OBS_DEF
+
+! BEGIN DART PREPROCESS WRITE_OBS_DEF
+!         case(RADIOSONDE_RELATIVE_HUMIDITY, DROPSONDE_RELATIVE_HUMIDITY, &
+!              AIRCRAFT_RELATIVE_HUMIDITY,   ACARS_RELATIVE_HUMIDITY,     &
+!              MARINE_SFC_RELATIVE_HUMIDITY, LAND_SFC_RELATIVE_HUMIDITY,  &
+!              METAR_RELATIVE_HUMIDITY_2_METER, AIRS_RELATIVE_HUMIDITY)
+!            continue
+! END DART PREPROCESS WRITE_OBS_DEF
+
+! BEGIN DART PREPROCESS INTERACTIVE_OBS_DEF
+!         case(RADIOSONDE_RELATIVE_HUMIDITY, DROPSONDE_RELATIVE_HUMIDITY, &
+!              AIRCRAFT_RELATIVE_HUMIDITY,   ACARS_RELATIVE_HUMIDITY,     &
+!              MARINE_SFC_RELATIVE_HUMIDITY, LAND_SFC_RELATIVE_HUMIDITY,  &
+!              METAR_RELATIVE_HUMIDITY_2_METER, AIRS_RELATIVE_HUMIDITY)
+!            continue
+! END DART PREPROCESS INTERACTIVE_OBS_DEF
+
+! BEGIN DART PREPROCESS MODULE CODE
+module obs_def_rel_humidity_mod
+
+! <next few lines under version control, do not edit>
+! $URL$
+! $Id$
+! $Revision$
+! $Date$
+
+use        types_mod, only : r8, missing_r8, L_over_Rv
+use    utilities_mod, only : register_module, error_handler, E_ERR, E_MSG
+use     location_mod, only : location_type, set_location, get_location, write_location, &
+                             read_location, vert_is_pressure
+use  assim_model_mod, only : interpolate
+use     obs_kind_mod, only : KIND_TEMPERATURE, KIND_PRESSURE, KIND_VAPOR_MIXING_RATIO
+
+implicit none
+private
+
+public :: get_expected_relative_humidity
+
+! version controlled file description for error handling, do not edit
+character(len=128), parameter :: &
+   source   = "$URL$", &
+   revision = "$Revision$", &
+   revdate  = "$Date$"
+
+logical, save       :: module_initialized   = .false.
+logical, save       :: first_time_warn_low  = .true.
+logical, save       :: first_time_warn_high = .true.
+character(len=64)   :: msgstring
+real(r8), parameter :: MIN_VALUE = 1.0e-9
+real(r8), parameter :: MAX_VALUE = 1.1
+
+contains
+
+!----------------------------------------------------------------------
+
+subroutine initialize_module
+
+call register_module(source, revision, revdate)
+module_initialized = .true.
+
+end subroutine initialize_module
+
+!----------------------------------------------------------------------------
+
+subroutine get_expected_relative_humidity(state_vector, location, rh, istatus)
+
+real(r8),            intent(in)  :: state_vector(:)
+type(location_type), intent(in)  :: location
+real(r8),            intent(out) :: rh     ! relative humidity (fraction)
+integer,             intent(out) :: istatus
+
+real(r8) :: qvap, tmpk, xyz(3), pres, es, qsat
+
+if ( .not. module_initialized ) call initialize_module
+
+!  interpolate the mixing ratio to the location
+call interpolate(state_vector, location, KIND_VAPOR_MIXING_RATIO, qvap, istatus)
+if (istatus /= 0 .or. qvap < 0.0_r8) then
+   if (istatus == 0) then
+      qvap = epsilon(0.0_r8)
+   else
+      rh = missing_r8
+      if (istatus == 0) istatus = 99
+      return
+   endif
+endif
+
+!  interpolate the temperature to the desired location
+call interpolate(state_vector, location, KIND_TEMPERATURE, tmpk, istatus)
+if (istatus /= 0 .or. tmpk <= 0.0_r8) then
+   rh = missing_r8
+   if (istatus == 0) istatus = 99
+   return
+endif
+
+!  interpolate the pressure, if observation location is not pressure
+if ( vert_is_pressure(location) ) then
+   xyz = get_location(location)
+   pres = xyz(3)
+else
+   ! pressure comes back in pascals (not hPa or mb)
+   call interpolate(state_vector, location, KIND_PRESSURE, pres, istatus)
+   if (istatus /= 0 .or. pres <= 0.0_r8 .or. pres >= 120000.0_r8)  then
+      rh = missing_r8
+      if (istatus == 0) istatus = 99
+      return
+   endif
+endif
+
+!  Compute the rh
+es   = 611.0_r8 * exp(L_over_Rv * (1.0_r8 / 273.0_r8 - 1.0_r8 / tmpk))
+qsat = 0.622_r8 * es / (pres - es)
+rh   = qvap / qsat
+
+!  Check for unreasonable values and return limits
+if (rh < MIN_VALUE) then
+   if (first_time_warn_low) then
+      write(msgstring, '(A,F12.6)') 'values lower than low limit detected, e.g.', rh
+      call error_handler(E_MSG,'get_expected_relative_humidity', msgstring,      &
+                         text2='all values lower than 1e-9 will be set to 1e-9', &
+                         text3='this message will only print once')
+      first_time_warn_low = .false.
+   endif
+   rh = MIN_VALUE
+endif
+
+if (rh > MAX_VALUE) then
+   if (first_time_warn_high) then
+      write(msgstring, '(A,F12.6)') 'values higher than high limit detected, e.g.', rh
+      call error_handler(E_MSG,'get_expected_relative_humidity', msgstring,      &
+                         text2='all values larger than 1.1 will be set to 1.1', &
+                         text3='this message will only print once')
+      first_time_warn_high = .false.
+   endif
+   rh = MAX_VALUE
+endif
+
+return
+end subroutine get_expected_relative_humidity
+
+!----------------------------------------------------------------------------
+
+end module obs_def_rel_humidity_mod
+! END DART PREPROCESS MODULE CODE
+


Property changes on: DART/trunk/obs_def/obs_def_rel_humidity_mod.f90
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:keywords
   + Date Rev Author HeadURL Id
Added: svn:eol-style
   + native

Modified: DART/trunk/observations/MADIS/shell_scripts/input.nml.template
===================================================================
--- DART/trunk/observations/MADIS/shell_scripts/input.nml.template	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/observations/MADIS/shell_scripts/input.nml.template	2010-12-17 00:26:31 UTC (rev 4610)
@@ -1,29 +1,4 @@
 
-&preprocess_nml
-    input_obs_kind_mod_file = '../../../obs_kind/DEFAULT_obs_kind_mod.F90',
-   output_obs_kind_mod_file = '../../../obs_kind/obs_kind_mod.f90',
-     input_obs_def_mod_file = '../../../obs_def/DEFAULT_obs_def_mod.F90',
-    output_obs_def_mod_file = '../../../obs_def/obs_def_mod.f90',
-   input_files              = '../../../obs_def/obs_def_altimeter_mod.f90',
-                              '../../../obs_def/obs_def_reanalysis_bufr_mod.f90',
-                              '../../../obs_def/obs_def_metar_mod.f90',
- /
-
-&obs_kind_nml
- /
-
-&location_nml
- /
-
-&utilities_nml
- module_details = .false.
- /
-
-&obs_sequence_nml
-   write_binary_obs_sequence = .false.  
- /
-
-
 &obs_sequence_tool_nml
    filename_seq         = '',
    filename_out         = 'obs_seq.out',
@@ -36,3 +11,17 @@
    gregorian_cal        = .true.,
 /
 
+&utilities_nml
+ module_details = .false.
+ /
+
+&obs_sequence_nml
+   write_binary_obs_sequence = .false.  
+ /
+
+&obs_kind_nml
+ /
+
+&location_nml
+ /
+

Modified: DART/trunk/observations/MADIS/work/input.nml
===================================================================
--- DART/trunk/observations/MADIS/work/input.nml	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/observations/MADIS/work/input.nml	2010-12-17 00:26:31 UTC (rev 4610)
@@ -8,6 +8,7 @@
                               '../../../obs_def/obs_def_reanalysis_bufr_mod.f90',
                               '../../../obs_def/obs_def_metar_mod.f90',
                               '../../../obs_def/obs_def_dew_point_mod.f90',
+                              '../../../obs_def/obs_def_rel_humidity_mod.f90',
  /
 
 &obs_kind_nml

Modified: DART/trunk/observations/utilities/threed_sphere/input.nml
===================================================================
--- DART/trunk/observations/utilities/threed_sphere/input.nml	2010-12-16 18:42:03 UTC (rev 4609)
+++ DART/trunk/observations/utilities/threed_sphere/input.nml	2010-12-17 00:26:31 UTC (rev 4610)
@@ -6,8 +6,10 @@
     output_obs_def_mod_file = '../../../obs_def/obs_def_mod.f90',
    input_files              = '../../../obs_def/obs_def_reanalysis_bufr_mod.f90',
                               '../../../obs_def/obs_def_radar_mod.f90',
+                              '../../../obs_def/obs_def_ocean_mod.f90',
                               '../../../obs_def/obs_def_metar_mod.f90',
                               '../../../obs_def/obs_def_dew_point_mod.f90',
+                              '../../../obs_def/obs_def_rel_humidity_mod.f90',
                               '../../../obs_def/obs_def_AIRS_mod.f90',
                               '../../../obs_def/obs_def_QuikSCAT_mod.f90',
                               '../../../obs_def/obs_def_altimeter_mod.f90',


More information about the Dart-dev mailing list