[Dart-dev] [7233] DART/trunk/observations/NCEP/ascii_to_obs: add option to create geopotential height observation types.

nancy at ucar.edu nancy at ucar.edu
Thu Oct 30 15:02:23 MDT 2014


Revision: 7233
Author:   nancy
Date:     2014-10-30 15:02:23 -0600 (Thu, 30 Oct 2014)
Log Message:
-----------
add option to create geopotential height observation types.
also add option to create surface pressure obs instead of
altimeter obs.  this option is controlled by a global variable
which is intentionally NOT in the namelist.  there are questions
about whether assimilating surface pressure introduces problems
(which is why surface pressure obs are currently turned into
altimeter obs by the converter).  

Modified Paths:
--------------
    DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90
    DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90

-------------- next part --------------
Modified: DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90	2014-10-30 19:47:53 UTC (rev 7232)
+++ DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90	2014-10-30 21:02:23 UTC (rev 7233)
@@ -49,7 +49,7 @@
 
 logical :: obs_U  = .false., obs_V  = .false., obs_T  = .false. , &
            obs_PS = .false., obs_QV = .false., daily_file = .true., & 
-           obs_time = .true.
+           obs_time = .true., obs_Z = .false.
 
 real(r8) :: lon1 =   0.0_r8,  &   !  lower longitude bound
             lon2 = 360.0_r8,  &   !  upper longitude bound 
@@ -58,11 +58,12 @@
 
 logical  :: include_specific_humidity = .true.,  &
             include_relative_humidity = .false., &
-            include_dewpoint          = .false.
+            include_dewpoint          = .false., &
+            include_surface_pressure  = .false.
 
 namelist /ncepobs_nml/ year, month, day, tot_days, max_num, select_obs,  &
         ObsBase, ADPUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND, &
-        obs_U, obs_V, obs_T, obs_PS, obs_QV, daily_file, lon1, lon2, & 
+        obs_U, obs_V, obs_T, obs_PS, obs_QV, obs_Z, daily_file, lon1, lon2, & 
         lat1, lat2, obs_time, include_specific_humidity, &
         include_relative_humidity, include_dewpoint
 
@@ -77,7 +78,7 @@
 !  SATWND: Satellite derived wind reports
 ! ----------------------------------------------------------------------
 ! Select variables of U, V, T, QV, PS using the logicals:
-!  obs_U   obs_V   obs_PS   obs_T   obs_QV  
+!  obs_U   obs_V   obs_PS   obs_T   obs_QV    obs_Z
 ! ----------------------------------------------------------------------
 
 ! start of executable program code
@@ -127,9 +128,9 @@
 
     seq = real_obs_sequence(year, month, day1, hour1, max_num, select_obs, &
          ObsBase, ADPUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND, &
-         obs_U, obs_V, obs_T, obs_PS, obs_QV, include_specific_humidity, &
-         include_relative_humidity, include_dewpoint, bin_beg(kkk), &
-         bin_end(kkk), lon1, lon2, lat1, lat2, obs_time)
+         obs_U, obs_V, obs_T, obs_PS, obs_QV, obs_Z, include_specific_humidity, &
+         include_relative_humidity, include_dewpoint, include_surface_pressure, &
+         bin_beg(kkk), bin_end(kkk), lon1, lon2, lat1, lat2, obs_time)
 
     ! output the daily sequence to a file
     if(.not. daily_file) output_name = 'obs_seq'//obsdate//obstime(kkk)

Modified: DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90	2014-10-30 19:47:53 UTC (rev 7232)
+++ DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90	2014-10-30 21:02:23 UTC (rev 7233)
@@ -26,7 +26,7 @@
                              KIND_TEMPERATURE, KIND_SPECIFIC_HUMIDITY, KIND_RELATIVE_HUMIDITY, &
                              KIND_DEWPOINT, KIND_PRESSURE, KIND_VERTICAL_VELOCITY, &
                              KIND_RAINWATER_MIXING_RATIO, KIND_DENSITY, KIND_VELOCITY, &
-                             KIND_1D_INTEGRAL, KIND_RADAR_REFLECTIVITY 
+                             KIND_1D_INTEGRAL, KIND_RADAR_REFLECTIVITY, KIND_GEOPOTENTIAL_HEIGHT
 
 use  obs_utilities_mod, only : add_obs_to_seq, create_3d_obs
 
@@ -34,6 +34,7 @@
 
 use obs_kind_mod, only : RADIOSONDE_U_WIND_COMPONENT
 use obs_kind_mod, only : RADIOSONDE_V_WIND_COMPONENT
+use obs_kind_mod, only : RADIOSONDE_GEOPOTENTIAL_HGT
 use obs_kind_mod, only : RADIOSONDE_SURFACE_PRESSURE
 use obs_kind_mod, only : RADIOSONDE_TEMPERATURE
 use obs_kind_mod, only : RADIOSONDE_SPECIFIC_HUMIDITY
@@ -58,6 +59,7 @@
 use obs_kind_mod, only : MARINE_SFC_RELATIVE_HUMIDITY
 use obs_kind_mod, only : MARINE_SFC_DEWPOINT
 use obs_kind_mod, only : MARINE_SFC_ALTIMETER
+use obs_kind_mod, only : MARINE_SFC_PRESSURE 
 use obs_kind_mod, only : LAND_SFC_U_WIND_COMPONENT
 use obs_kind_mod, only : LAND_SFC_V_WIND_COMPONENT
 use obs_kind_mod, only : LAND_SFC_TEMPERATURE
@@ -65,6 +67,7 @@
 use obs_kind_mod, only : LAND_SFC_RELATIVE_HUMIDITY
 use obs_kind_mod, only : LAND_SFC_DEWPOINT
 use obs_kind_mod, only : LAND_SFC_ALTIMETER
+use obs_kind_mod, only : LAND_SFC_PRESSURE 
 use obs_kind_mod, only : RADIOSONDE_SURFACE_ALTIMETER
 use obs_kind_mod, only : SAT_U_WIND_COMPONENT
 use obs_kind_mod, only : SAT_V_WIND_COMPONENT
@@ -97,18 +100,18 @@
 
 function real_obs_sequence (year, month, day, hourt, max_num, select_obs, &
           ObsBase, ADDUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND, &
-          obs_U, obs_V, obs_T, obs_PS, obs_QV, inc_specific_humidity,      &
-          inc_relative_humidity, inc_dewpoint, bin_beg, bin_end,           &
-          lon1, lon2, lat1, lat2, obs_time)
+          obs_U, obs_V, obs_T, obs_PS, obs_QV, obs_Z, inc_specific_humidity,&
+          inc_relative_humidity, inc_dewpoint, inc_surface_pressure, &
+          bin_beg, bin_end, lon1, lon2, lat1, lat2, obs_time)
 !------------------------------------------------------------------------------
 !  this function is to prepare NCEP decoded BUFR data to DART sequence format
 !
 integer,            intent(in) :: year, month, day, max_num, select_obs
 character(len = *), intent(in) :: ObsBase, hourt
 logical,            intent(in) :: ADDUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND
-logical,            intent(in) :: obs_U, obs_V, obs_T, obs_PS, obs_QV, obs_time
+logical,            intent(in) :: obs_U, obs_V, obs_T, obs_PS, obs_QV, obs_Z, obs_time
 logical,            intent(in) :: inc_specific_humidity, inc_relative_humidity, &
-                                  inc_dewpoint
+                                  inc_dewpoint, inc_surface_pressure
 real(r8),           intent(in) :: lon1, lon2, lat1, lat2
 
 type(obs_sequence_type) :: real_obs_sequence
@@ -316,10 +319,16 @@
 
    if(obs_prof == 3) then
      obs_kind_gen = KIND_SURFACE_PRESSURE
+     if ( zob2 == 0.0_r8 .and. inc_surface_pressure ) then
+       if(obstype == 120                    ) obs_kind = RADIOSONDE_SURFACE_PRESSURE 
+       if(obstype == 180 .or. obstype == 182) obs_kind = MARINE_SFC_PRESSURE 
+       if(obstype == 181                    ) obs_kind = LAND_SFC_PRESSURE 
+     else
      if(obstype == 120                    ) obs_kind = RADIOSONDE_SURFACE_ALTIMETER
      if(obstype == 180 .or. obstype == 182) obs_kind = MARINE_SFC_ALTIMETER
      if(obstype == 181                    ) obs_kind = LAND_SFC_ALTIMETER
    endif
+   endif
 
    if(obs_prof == 2) then
      obs_kind_gen = KIND_U_WIND_COMPONENT
@@ -349,6 +358,11 @@
      if(obstype == 281 .or. obstype == 284) obs_kind = LAND_SFC_V_WIND_COMPONENT
    endif
 
+   if(obs_prof == 7) then
+     obs_kind_gen = KIND_GEOPOTENTIAL_HEIGHT
+     if(obstype == 120 .or. obstype == 220) obs_kind = RADIOSONDE_GEOPOTENTIAL_HGT
+   endif
+
    if (obs_kind < 0) then
       ! the "real" fix if the record type is not found might actually be to
       ! accept all record types within valid ranges, and depend on the first
@@ -391,6 +405,7 @@
              (obs_V                 .and. (obs_kind_gen == KIND_V_WIND_COMPONENT )) .or. &
              (obs_PS                .and. (obs_kind_gen == KIND_SURFACE_PRESSURE))  .or. &
              (obs_QV                .and. (obs_kind_gen == KIND_SPECIFIC_HUMIDITY)) .or. &
+             (obs_Z                 .and. (obs_kind_gen == KIND_GEOPOTENTIAL_HEIGHT)) .or. &
              (inc_relative_humidity .and. (obs_kind_gen == KIND_RELATIVE_HUMIDITY)) .or. &
              (inc_dewpoint          .and. (obs_kind_gen == KIND_DEWPOINT)) ) then
              pass = .false.


More information about the Dart-dev mailing list