[Dart-dev] [4668] DART/trunk/observations: Move the obs_utilities_mod.f90 file from ' MADIS' to the more generic 'utilities'

nancy at ucar.edu nancy at ucar.edu
Fri Jan 21 11:36:14 MST 2011


Revision: 4668
Author:   nancy
Date:     2011-01-21 11:36:14 -0700 (Fri, 21 Jan 2011)
Log Message:
-----------
Move the obs_utilities_mod.f90 file from 'MADIS' to the more generic 'utilities'
directory since the utility routines are not specific to the MADIS converters
and are being used more and more for other converters.   Update all related
path_names files.

New functionality in the prep_bufr converter from Ryan Torn.  can now optionally
create relative humidity and/or dewpoint obs in addition to the already existing
specific humidity obs.  requires a corresponding update to the ascii_to_obs
converter (which now also uses the common routines in the obs_utilities_mod).

Modified Paths:
--------------
    DART/trunk/observations/MADIS/work/path_names_convert_madis_acars
    DART/trunk/observations/MADIS/work/path_names_convert_madis_marine
    DART/trunk/observations/MADIS/work/path_names_convert_madis_mesonet
    DART/trunk/observations/MADIS/work/path_names_convert_madis_metar
    DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin
    DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90
    DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.html
    DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90
    DART/trunk/observations/NCEP/ascii_to_obs/work/input.nml
    DART/trunk/observations/NCEP/ascii_to_obs/work/path_names_create_real_obs
    DART/trunk/observations/NCEP/prep_bufr/src/prepbufr.f
    DART/trunk/observations/NCEP/prep_bufr/src/prepbufr_03Z.f
    DART/trunk/observations/SSEC/work/path_names_convert_ssec_satwnd
    DART/trunk/observations/gps/work/path_names_convert_cosmic_gps_cdf

Added Paths:
-----------
    DART/trunk/observations/utilities/obs_utilities_mod.f90

Removed Paths:
-------------
    DART/trunk/observations/MADIS/obs_utilities_mod.f90

-------------- next part --------------
Deleted: DART/trunk/observations/MADIS/obs_utilities_mod.f90
===================================================================
--- DART/trunk/observations/MADIS/obs_utilities_mod.f90	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/obs_utilities_mod.f90	2011-01-21 18:36:14 UTC (rev 4668)
@@ -1,472 +0,0 @@
-! DART software - Copyright \xA9 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
-
-module obs_utilities_mod
-
-! <next few lines under version control, do not edit>
-! $URL$
-! $Id$
-! $Revision$
-! $Date$
-
-
-use        types_mod, only : r8, MISSING_R8, MISSING_I
-use    utilities_mod, only : nc_check
-use obs_def_mod,      only : obs_def_type, set_obs_def_time, set_obs_def_kind, &
-                             set_obs_def_error_variance, set_obs_def_location
-use obs_sequence_mod, only : obs_sequence_type, obs_type, insert_obs_in_seq, &
-                             set_obs_values, set_qc, set_obs_def
-use time_manager_mod, only : time_type, operator(>=), set_time
-use     location_mod, only : set_location
-
-
-use netcdf
-
-implicit none
-private
-
-public :: create_3d_obs,    &
-          add_obs_to_seq,   &
-          getdimlen,        &
-          getvar_real,      &
-          getvar_int,       &
-          get_or_fill_real, &
-          get_or_fill_int,  &
-          get_or_fill_QC,   &
-          set_missing_name
-
-
-! module global storage
-character(len=NF90_MAX_NAME) :: missing_name = ''
-
-contains
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   create_3d_obs - subroutine that is used to create an observation
-!                   type from observation data.  
-!
-!       NOTE: assumes the code is using the threed_sphere locations module, 
-!             that the observation has a single data value and a single
-!             qc value, and that this obs type has no additional required
-!             data (e.g. gps and radar obs need additional data per obs)
-!
-!    lat   - latitude of observation
-!    lon   - longitude of observation
-!    vval  - vertical coordinate
-!    vkind - kind of vertical coordinate (pressure, level, etc)
-!    obsv  - observation value
-!    okind - observation kind
-!    oerr  - observation error
-!    day   - gregorian day
-!    sec   - gregorian second
-!    qc    - quality control value
-!    obs   - observation type
-!
-!     created Oct. 2007 Ryan Torn, NCAR/MMM
-!     adapted for more generic use 11 Mar 2010, nancy collins, ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine create_3d_obs(lat, lon, vval, vkind, obsv, okind, oerr, day, sec, qc, obs)
- integer, intent(in)         :: okind, vkind, day, sec
- real(r8), intent(in)        :: lat, lon, vval, obsv, oerr, qc
- type(obs_type), intent(inout) :: obs
-
-real(r8)              :: obs_val(1), qc_val(1)
-type(obs_def_type)    :: obs_def
-
-call set_obs_def_location(obs_def, set_location(lon, lat, vval, vkind))
-call set_obs_def_kind(obs_def, okind)
-call set_obs_def_time(obs_def, set_time(sec, day))
-call set_obs_def_error_variance(obs_def, oerr * oerr)
-call set_obs_def(obs, obs_def)
-
-obs_val(1) = obsv
-call set_obs_values(obs, obs_val)
-qc_val(1)  = qc
-call set_qc(obs, qc_val)
-
-end subroutine create_3d_obs
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   add_obs_to_seq -- adds an observation to a sequence.  inserts if first
-!           obs, inserts with a prev obs to save searching if that's possible.
-!
-!     seq - observation sequence to add obs to
-!     obs - observation, already filled in, ready to add
-!     obs_time - time of this observation, in dart time_type format
-!     prev_obs - the previous observation that was added to this sequence
-!                (will be updated by this routine)
-!     prev_time - the time of the previously added observation (will also
-!                be updated by this routine)
-!     first_obs - should be initialized to be .true., and then will be
-!                updated by this routine to be .false. after the first obs
-!                has been added to this sequence.
-!
-!     created Mar 8, 2010   nancy collins, ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine add_obs_to_seq(seq, obs, obs_time, prev_obs, prev_time, first_obs)
-  type(obs_sequence_type), intent(inout) :: seq
-  type(obs_type),          intent(inout) :: obs, prev_obs
-  type(time_type),         intent(in)    :: obs_time
-  type(time_type),         intent(inout) :: prev_time
-  logical,                 intent(inout) :: first_obs
-
-! insert(seq,obs) always works (i.e. it inserts the obs in
-! proper time format) but it can be slow with a long file.
-! supplying a previous observation that is older (or the same
-! time) as the new one speeds up the searching a lot.
-
-if(first_obs) then    ! for the first observation, no prev_obs
-   call insert_obs_in_seq(seq, obs)
-   first_obs = .false.
-else               
-   if(obs_time >= prev_time) then  ! same time or later than previous obs
-      call insert_obs_in_seq(seq, obs, prev_obs)
-   else                            ! earlier, search from start of seq
-      call insert_obs_in_seq(seq, obs)
-   endif
-endif
-
-! update for next time
-prev_obs = obs
-prev_time = obs_time
-
-end subroutine add_obs_to_seq
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   getdimlen - subroutine that inquires, gets the dimension size
-!
-!      ncid - open netcdf file handle
-!      dimname - string name of netcdf dimension
-!      dout - output value.  integer
-!
-!     created 11 Mar 2010,  nancy collins,  ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine getdimlen(ncid, dimname, dout)
- integer,            intent(in)   :: ncid
- character(len = *), intent(in)   :: dimname
- integer,            intent(out)  :: dout
-
-integer :: dimid
-
-! get the requested dimension size
-call nc_check( nf90_inq_dimid(ncid, dimname, dimid), &
-               'getdimlen', 'inq dimid '//trim(dimname))
-call nc_check( nf90_inquire_dimension(ncid, dimid, len=dout), &
-               'getdimlen', 'inquire dimension '//trim(dimname))
-
-end subroutine getdimlen
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   set_missing_name - subroutine that inquires, gets the variable, and fills 
-!            in the missing value attribute if that arg is present.
-!            gets the entire array, no start or count specified.
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  real(r8)
-!      dmiss - value that signals a missing value   real(r8), optional
-!
-!     created 11 Mar 2010,  nancy collins,  ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine set_missing_name(name)
- character(len = *), intent(in)   :: name
-
-   if (len(name) > NF90_MAX_NAME) then
-      print *, 'set_missing_name: name must be less than ', NF90_MAX_NAME, ' chars long'
-      print *, 'set_missing_name: name is ', len(name), ' long'
-      stop
-   endif
-
-   missing_name = name
-
-end subroutine set_missing_name
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   getvar_real - subroutine that inquires, gets the variable, and fills 
-!            in the missing value attribute if that arg is present.
-!            gets the entire array, no start or count specified.
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  real(r8)
-!      dmiss - value that signals a missing value   real(r8), optional
-!
-!     created 11 Mar 2010,  nancy collins,  ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine getvar_real(ncid, varname, darray, dmiss)
- integer,            intent(in)   :: ncid
- character(len = *), intent(in)   :: varname
- real(r8),           intent(out)  :: darray(:)
- real(r8), optional, intent(out)  :: dmiss
-
-integer  :: varid, nfrc
-real(r8) :: fill, miss
-logical  :: found_miss
-
-! read the data for the requested array, and optionally get the fill value
-call nc_check( nf90_inq_varid(ncid, varname, varid), &
-               'getvar_real', 'inquire var '// trim(varname))
-call nc_check( nf90_get_var(ncid, varid, darray), &
-               'getvar_real', 'getting var '// trim(varname))
-
-! the logic here is: 
-!  if the user hasn't asked about the fill value, don't look for any of
-!  these attributes and just return.
-
-!  if the user has told us another attribute name to look for, try that first.
-!  it's currently NOT an error if it's not there.   then second, look for the
-!  official '_FillValue' attr.  if it's found, return it as the missing value.
-! 
-!  if there are both, overwrite the missing value with the fill value and return
-!  the fill value as the 'dmiss' argument.
-!
-!  if neither are there, set dmiss to the DART missing value.  this could also
-!  be an error, but default to being permissive for now.
-
-if (present(dmiss)) then
-   dmiss = MISSING_R8
-   found_miss = .false.
-
-   ! if user defined another attribute name for missing vals
-   ! look for it first, and make it an error if it's not there?
-   if (missing_name /= '') then
-      nfrc = nf90_get_att(ncid, varid, missing_name, miss)
-      if (nfrc == NF90_NOERR) then 
-         found_miss = .true.
-         dmiss = miss
-      endif
-   endif
-
-      ! this would make it a fatal error if not found
-      !call nc_check( nf90_get_att(ncid, varid, missing_name', miss), &
-      !         'getvar_real', 'getting attr "//trim(missing_name)//" for '//trim(varname))
-
-   ! the predefined netcdf fill value.
-   nfrc = nf90_get_att(ncid, varid, '_FillValue', fill)
-   if (nfrc == NF90_NOERR) then
-      if (.not. found_miss) then  
-         found_miss = .true.
-         dmiss = fill
-      else
-         ! found both, set all to fill value
-         where(darray .eq. miss) darray = fill 
-         dmiss = fill
-      endif
-   endif
-
-   ! if you wanted an error if you specified dmiss and neither attr are
-   ! there, you'd test found_miss here.  if it's still false, none were there.
-
-endif
-  
-end subroutine getvar_real
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   getvar_int - subroutine that inquires, gets the variable, and fills 
-!            in the missing value attribute if that arg is present.
-!            gets the entire array, no start or count specified.
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  integer
-!      dmiss - value that signals a missing value   integer, optional
-!
-!     created 11 Mar 2010,  nancy collins,  ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine getvar_int(ncid, varname, darray, dmiss)
- integer,            intent(in)   :: ncid
- character(len = *), intent(in)   :: varname
- integer,            intent(out)  :: darray(:)
- integer,  optional, intent(out)  :: dmiss
-
-integer  :: varid, nfrc
-real(r8) :: fill, miss
-logical  :: found_miss
-
-! read the data for the requested array, and get the fill value
-call nc_check( nf90_inq_varid(ncid, varname, varid), &
-               'getvar_int', 'inquire var '// trim(varname))
-call nc_check( nf90_get_var(ncid, varid, darray), &
-               'getvar_int', 'getting var '// trim(varname))
-
-! see long comment in getvar_real() about the logic here.
-if (present(dmiss)) then
-   dmiss = MISSING_I
-   found_miss = .false.
-
-   ! if user defined another attribute name for missing vals
-   ! look for it first, and make it an error if it's not there?
-   if (missing_name /= '') then
-      nfrc = nf90_get_att(ncid, varid, missing_name, miss)
-      if (nfrc == NF90_NOERR) then 
-         found_miss = .true.
-         dmiss = miss
-      endif
-   endif
-
-      ! this would make it a fatal error if not found
-      !call nc_check( nf90_get_att(ncid, varid, missing_name', miss), &
-      !         'getvar_real', 'getting attr "//trim(missing_name)//" for '//trim(varname))
-
-   ! the predefined netcdf fill value.
-   nfrc = nf90_get_att(ncid, varid, '_FillValue', fill)
-   if (nfrc == NF90_NOERR) then
-      if (.not. found_miss) then  
-         found_miss = .true.
-         dmiss = fill
-      else
-         ! found both, set all to fill value
-         where(darray .eq. miss) darray = fill 
-         dmiss = fill
-      endif
-   endif
-
-   ! if you wanted an error if you specified dmiss and neither attr are
-   ! there, you'd test found_miss here.  if it's still false, none were there.
-
-endif
-  
-end subroutine getvar_int
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   get_or_fill_real - subroutine which gets the requested netcdf variable
-!           but if it isn't there, it fills the array with 0s.  not an
-!           error if it's not present.  assumes real(r8) data array
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  real(r8)
-!      fillval - real(r8) to fill with if not present.  optional.
-!      did_fill - reports back if fill was done.  logical, optional.
-!
-!     created Mar 8, 2010    nancy collins, ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine get_or_fill_real(ncid, varname, darray, fillval, did_fill)
- integer,             intent(in)    :: ncid
- character(len = *),  intent(in)    :: varname
- real(r8),            intent(inout) :: darray(:)
- real(r8), optional,  intent(in)    :: fillval
- logical,  optional,  intent(out)   :: did_fill
-
-integer :: varid, nfrc
-
-! test to see if variable is present.  if yes, read it in.
-! otherwise, set to fill value, or 0 if none given.
-
-nfrc = nf90_inq_varid(ncid, varname, varid) 
-if (nfrc == NF90_NOERR) then
-   call nc_check( nf90_get_var(ncid, varid, darray), &
-                  'get_or_fill_real', 'reading '//trim(varname) )
-   if (present(did_fill)) did_fill = .false.
-else
-   if (present(fillval)) then
-      darray = fillval
-   else
-      darray = 0.0_r8
-   endif
-   if (present(did_fill)) did_fill = .true.
-endif
-   
-end subroutine get_or_fill_real
-
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-!   get_or_fill_int - subroutine which gets the requested netcdf variable
-!           but if it isn't there, it fills the array with 0s.  not an
-!           error if it's not present.  assumes integer data array
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  integer
-!      fillval - integer to fill with if not present.  optional.
-!      did_fill - reports back if fill was done.  logical, optional.
-!
-!     created Mar 8, 2010    nancy collins, ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine get_or_fill_int(ncid, varname, darray, fillval, did_fill)
- integer,            intent(in)    :: ncid
- character(len = *), intent(in)    :: varname
- integer,            intent(inout) :: darray(:)
- integer, optional,  intent(in)    :: fillval
- logical, optional,  intent(out)   :: did_fill
-
-integer :: varid, nfrc
-
-! test to see if variable is present.  if yes, read it in.
-! otherwise, set to fill value, or 0 if none given.
-
-nfrc = nf90_inq_varid(ncid, varname, varid) 
-if (nfrc == NF90_NOERR) then
-   call nc_check( nf90_get_var(ncid, varid, darray), &
-                  'get_or_fill_int', 'reading '//trim(varname) )
-   if (present(did_fill)) did_fill = .false.
-else
-   if (present(fillval)) then
-      darray = fillval
-   else
-      darray = 0
-   endif
-   if (present(did_fill)) did_fill = .true.
-endif
-   
-end subroutine get_or_fill_int
-
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!
-! get_or_fill_QC - get the expected QC netcdf variable.  if not found,
-!                  fill the array with 0s, and print out a message warning
-!                  that the input didn't have the expected array.
-!   
-!      minor tweak on the standard get_or_fill routine.  prints out a
-!      warning message, and don't return to the caller which one it did.
-!      would be more general if it didn't use 'QC' in the output string.
-!      if anyone else wants to use it, we could change 'QC' to 'warn' in
-!      the name, and remove the 'QC' from the output string, and make it
-!      slightly more general
-!
-!      ncid - open netcdf file handle
-!      varname - string name of netcdf variable
-!      darray - output array.  integer
-!
-!      created 17 mar 2010  nsc  ncar/image
-!
-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-subroutine get_or_fill_QC(ncid, varname, darray)
- integer,            intent(in)    :: ncid
- character(len = *), intent(in)    :: varname
- integer,            intent(inout) :: darray(:)
-
-logical :: did_fill
-
-
-call get_or_fill_int(ncid, varname, darray, 0, did_fill)
-
-if (did_fill) &
-  print *, 'QC field named ' // trim(varname) // ' was not found in input, 0 used instead'
-
-end subroutine get_or_fill_QC
-
-
-
-end module obs_utilities_mod

Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_acars
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_acars	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_acars	2011-01-21 18:36:14 UTC (rev 4668)
@@ -2,7 +2,7 @@
 observations/obs_error/ncep_obs_err_mod.f90
 observations/obs_error/dewpoint_obs_err_mod.f90
 observations/MADIS/meteor_mod.f90
-observations/MADIS/obs_utilities_mod.f90
+observations/utilities/obs_utilities_mod.f90
 location/threed_sphere/location_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90

Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_marine
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_marine	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_marine	2011-01-21 18:36:14 UTC (rev 4668)
@@ -2,7 +2,7 @@
 observations/obs_error/ncep_obs_err_mod.f90
 observations/obs_error/dewpoint_obs_err_mod.f90
 observations/MADIS/meteor_mod.f90
-observations/MADIS/obs_utilities_mod.f90
+observations/utilities/obs_utilities_mod.f90
 location/threed_sphere/location_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90

Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_mesonet
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_mesonet	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_mesonet	2011-01-21 18:36:14 UTC (rev 4668)
@@ -2,7 +2,7 @@
 observations/obs_error/ncep_obs_err_mod.f90
 observations/obs_error/dewpoint_obs_err_mod.f90
 observations/MADIS/meteor_mod.f90
-observations/MADIS/obs_utilities_mod.f90
+observations/utilities/obs_utilities_mod.f90
 location/threed_sphere/location_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90

Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_metar
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_metar	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_metar	2011-01-21 18:36:14 UTC (rev 4668)
@@ -2,7 +2,7 @@
 observations/obs_error/ncep_obs_err_mod.f90
 observations/obs_error/dewpoint_obs_err_mod.f90
 observations/MADIS/meteor_mod.f90
-observations/MADIS/obs_utilities_mod.f90
+observations/utilities/obs_utilities_mod.f90
 location/threed_sphere/location_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90

Modified: DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin
===================================================================
--- DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/MADIS/work/path_names_convert_madis_rawin	2011-01-21 18:36:14 UTC (rev 4668)
@@ -2,7 +2,7 @@
 observations/obs_error/ncep_obs_err_mod.f90
 observations/obs_error/dewpoint_obs_err_mod.f90
 observations/MADIS/meteor_mod.f90
-observations/MADIS/obs_utilities_mod.f90
+observations/utilities/obs_utilities_mod.f90
 location/threed_sphere/location_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90

Modified: DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.f90	2011-01-21 18:36:14 UTC (rev 4668)
@@ -60,10 +60,15 @@
             lat1 = -90.0_r8,  &   !  lower latitude bound
             lat2 =  90.0_r8       !  upper latitude bound
 
+logical  :: include_specific_humidity = .true.,  &
+            include_relative_humidity = .false., &
+            include_dewpoint          = .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, & 
-        lat1, lat2, obs_time
+        lat1, lat2, obs_time, include_specific_humidity, &
+        include_relative_humidity, include_dewpoint
 
 ! ----------------------------------------------------------------------
 ! Select observation types using NCEP categories (when select_obs /= 0).
@@ -126,8 +131,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, bin_beg(kkk), bin_end(kkk), & 
-         lon1, lon2, lat1, lat2, obs_time)
+         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)
 
     ! 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/create_real_obs.html
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.html	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/ascii_to_obs/create_real_obs.html	2011-01-21 18:36:14 UTC (rev 4668)
@@ -1,26 +1,40 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-          "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <HTML>
 <HEAD>
 <TITLE>program create_real_obs</TITLE>
-<link rel="stylesheet" type="text/css" href="../doc/html/doc.css">
+<link rel="stylesheet" type="text/css" href="../../../doc/html/doc.css" />
 </HEAD>
 <BODY>
 <A NAME="TOP"></A>
 
-<center>
+<H1>PROGRAM create_real_obs</H1>
+
+<table border=0 summary="" cellpadding=5>
+<tr>
+    <td valign=middle>
+    <img src="../../../doc/html/Dartboard9.png" alt="DART project logo" height=70 />
+    </td>
+    <td>
+       <P>Jump to <a href="../../../index.html">DART Documentation Main Index</a><br />
+          <small><small>version information for this file: <br />
+          <!-- version tag follows, do not edit -->
+          $Id$</small></small>
+       </P></td>
+</tr>
+</table>
+
+<A HREF="#Instructions">INSTRUCTIONS</A> / 
+<A HREF="#Namelist">NAMELIST</A> /
 <A HREF="#Modules">MODULES</A> /
-<A HREF="#Instructions">INSTRUCTIONS</A> / 
-<A HREF="#Namelist">NAMELIST</A> / 
 <A HREF="#FilesUsed">FILES</A> /
 <A HREF="#References">REFERENCES</A> /
 <A HREF="#Errors">ERRORS</A> /
 <A HREF="#FuturePlans">PLANS</A> /
+<A HREF="#PrivateComponents">PRIVATE COMPONENTS</A> /
 <A HREF="#Legalese">TERMS OF USE</A>
-</center>
 
-<H1>PROGRAM <em class=program>create_real_obs</em></H1>
-<!-- version tag follows, do not edit --><P>$Id$</P>
+<H2>Overview</H2>
 
 <P>
    Translating NCEP BUFR files into DART obs_seq.out files 
@@ -45,18 +59,6 @@
 
 <!--==================================================================-->
 
-<A NAME="Modules"></A>
-<HR>
-<H2>MODULES USED</H2>
-<PRE>
-types_mod
-obs_sequence_mod
-real_obs_mod
-utilities_mod
-</PRE>
-
-<!--==================================================================-->
-
 <A NAME="Instructions"></A>
 <HR>
 <H2>INSTRUCTIONS</H2>
@@ -114,6 +116,9 @@
    max_num    = 800000,
    select_obs = 0,
    ObsBase    = 'temp_obs.',
+   include_specific_humidity = .true.,
+   include_relative_humidity = .false.,
+   include_dewpoint = .false.,
    ADPUPA     = .false.,
    AIRCAR     = .false.,
    AIRCFT     = .false.,
@@ -185,8 +190,9 @@
 '&amp;' and terminating with a slash '/' for all our namelist input.
 <div class=namelist><pre>
 <em class=call>namelist / ncepobs_nml / </em> &amp;
-year, month, day, tot_days, max_num, select_obs, ObsBase, 
-      ADPUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND, 
+      year, month, day, tot_days, max_num, select_obs, ObsBase,  &amp;
+      include_specific_humidity, include_relative_humidity, include_dewpoint, &amp;
+      ADPUPA, AIRCAR, AIRCFT, SATEMP, SFCSHP, ADPSFC, SATWND, &amp;
       obs_U, obs_V, obs_T, obs_PS, obs_QV, lat1, lat2, lon1, lon2, obs_time
 </pre>
 </div>
@@ -246,6 +252,13 @@
                         observation files.  Must end with a '/temp_obs.'
                        </TD></TR>
 
+<TR><!--contents--><TD valign=top>include_specific_humidity, include_relative_humidity, include_dewpoint</TD>
+    <!--  type  --><TD valign=top>logical </TD>
+    <!--descript--><TD>Controls which moisture observations are created.  The default
+                       is to create only specific humidity obs, but any, all, or none can
+                       be requested.  Set to .TRUE. to output that obs type, .FALSE.
+                       skips it. </TD></TR>
+
 <TR><!--contents--><TD valign=top>ADPUPA        </TD>
     <!--  type  --><TD valign=top>logical       </TD>
     <!--descript--><TD>Select the NCEP type ADPUPA observations 
@@ -354,6 +367,29 @@
 <br>
 
 <!--==================================================================-->
+
+<A NAME="Modules"></A>
+<HR>
+<H2>MODULES USED</H2>
+<PRE>
+types_mod
+utilities_mod
+obs_utilities_mod
+obs_sequence_mod
+obs_kind_mod
+obs_def_mod
+assim_model_mod
+model_mod
+cov_cutoff_mod
+location_mod
+random_seq_mod
+random_nr_mod
+time_manager_mod
+null_mpi_utilities_mod
+real_obs_mod
+</PRE>
+
+<!--==================================================================-->
 <!-- Describe the Files Used by this module.                          -->
 <!--==================================================================-->
 

Modified: DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/ascii_to_obs/real_obs_mod.f90	2011-01-21 18:36:14 UTC (rev 4668)
@@ -23,17 +23,17 @@
                              E_ERR, E_MSG, timestamp, is_longitude_between
 use     location_mod, only : location_type, set_location, &
                              VERTISPRESSURE, VERTISSURFACE
-use obs_sequence_mod, only : init_obs_sequence, init_obs, insert_obs_in_seq, &
-                             set_obs_values, set_qc, obs_sequence_type, obs_type, &
-                             copy_obs, set_copy_meta_data, set_qc_meta_data, set_obs_def
+use obs_sequence_mod, only : init_obs_sequence, init_obs, obs_sequence_type, obs_type, &
+                             set_copy_meta_data, set_qc_meta_data
 
-use     obs_kind_mod, only : KIND_U_WIND_COMPONENT, &
-                             KIND_V_WIND_COMPONENT, KIND_SURFACE_PRESSURE, &
-                             KIND_TEMPERATURE, KIND_SPECIFIC_HUMIDITY, KIND_PRESSURE, &
-                             KIND_VERTICAL_VELOCITY, KIND_RAINWATER_MIXING_RATIO, &
-                             KIND_DEWPOINT, KIND_DENSITY, KIND_VELOCITY, &
+use     obs_kind_mod, only : KIND_U_WIND_COMPONENT, KIND_V_WIND_COMPONENT, KIND_SURFACE_PRESSURE, &
+                             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 
 
+use  obs_utilities_mod, only : add_obs_to_seq, create_3d_obs
+
 use  obs_def_altimeter_mod, only: compute_altimeter
 
 use obs_kind_mod, only : RADIOSONDE_U_WIND_COMPONENT
@@ -41,21 +41,33 @@
 use obs_kind_mod, only : RADIOSONDE_SURFACE_PRESSURE
 use obs_kind_mod, only : RADIOSONDE_TEMPERATURE
 use obs_kind_mod, only : RADIOSONDE_SPECIFIC_HUMIDITY
+use obs_kind_mod, only : RADIOSONDE_RELATIVE_HUMIDITY
+use obs_kind_mod, only : RADIOSONDE_DEWPOINT
 use obs_kind_mod, only : AIRCRAFT_U_WIND_COMPONENT
 use obs_kind_mod, only : AIRCRAFT_V_WIND_COMPONENT
 use obs_kind_mod, only : AIRCRAFT_TEMPERATURE
+use obs_kind_mod, only : AIRCRAFT_SPECIFIC_HUMIDITY
+use obs_kind_mod, only : AIRCRAFT_RELATIVE_HUMIDITY
+use obs_kind_mod, only : AIRCRAFT_DEWPOINT
 use obs_kind_mod, only : ACARS_U_WIND_COMPONENT
 use obs_kind_mod, only : ACARS_V_WIND_COMPONENT
 use obs_kind_mod, only : ACARS_TEMPERATURE
+use obs_kind_mod, only : ACARS_SPECIFIC_HUMIDITY
+use obs_kind_mod, only : ACARS_RELATIVE_HUMIDITY
+use obs_kind_mod, only : ACARS_DEWPOINT
 use obs_kind_mod, only : MARINE_SFC_U_WIND_COMPONENT
 use obs_kind_mod, only : MARINE_SFC_V_WIND_COMPONENT
 use obs_kind_mod, only : MARINE_SFC_TEMPERATURE
 use obs_kind_mod, only : MARINE_SFC_SPECIFIC_HUMIDITY
+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 : LAND_SFC_U_WIND_COMPONENT
 use obs_kind_mod, only : LAND_SFC_V_WIND_COMPONENT
 use obs_kind_mod, only : LAND_SFC_TEMPERATURE
 use obs_kind_mod, only : LAND_SFC_SPECIFIC_HUMIDITY
+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 : RADIOSONDE_SURFACE_ALTIMETER
 use obs_kind_mod, only : SAT_U_WIND_COMPONENT
@@ -87,7 +99,8 @@
 
 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, bin_beg, bin_end,           &
+          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)
 !------------------------------------------------------------------------------
 !  this function is to prepare NCEP decoded BUFR data to DART sequence format
@@ -96,6 +109,8 @@
 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) :: inc_specific_humidity, inc_relative_humidity, &
+                                  inc_dewpoint
 real(r8),           intent(in) :: lon1, lon2, lat1, lat2
 
 type(obs_sequence_type) :: real_obs_sequence
@@ -107,7 +122,7 @@
 integer :: day0, sec0
 integer :: hour, imin, sec
 integer :: obs_num, calender_type
-type(time_type) :: current_day, next_day
+type(time_type) :: current_day, next_day, time_obs, prev_time
 
 integer, parameter :: num_fail_kinds = 6
 integer :: iskip(num_fail_kinds)
@@ -136,7 +151,7 @@
 character(len = 8 ) :: obsdate
 character(len = 80) :: obsfile, label
 character(len = 6 ) :: subset
-logical :: pass
+logical :: pass, first_obs
 
 if ( .not. module_initialized ) call initialize_module
 
@@ -269,10 +284,28 @@
    endif
 
    if(obs_prof == 5) then
+     if ( zob2 == 0.0_r8 .and. inc_specific_humidity ) then
     obs_kind_gen = KIND_SPECIFIC_HUMIDITY
     if(obstype == 120 .or. obstype == 132) obs_kind = RADIOSONDE_SPECIFIC_HUMIDITY
+       if(obstype == 130 .or. obstype == 131) obs_kind = AIRCRAFT_SPECIFIC_HUMIDITY
+       if(obstype == 133                    ) obs_kind = ACARS_SPECIFIC_HUMIDITY
     if(obstype == 180 .or. obstype == 182) obs_kind = MARINE_SFC_SPECIFIC_HUMIDITY
     if(obstype == 181 .or. obstype == 183) obs_kind = LAND_SFC_SPECIFIC_HUMIDITY
+     else if ( zob2 == 1.0_r8 .and. inc_relative_humidity ) then
+       obs_kind_gen = KIND_RELATIVE_HUMIDITY
+       if(obstype == 120 .or. obstype == 132) obs_kind = RADIOSONDE_RELATIVE_HUMIDITY
+       if(obstype == 130 .or. obstype == 131) obs_kind = AIRCRAFT_RELATIVE_HUMIDITY
+       if(obstype == 133                    ) obs_kind = ACARS_RELATIVE_HUMIDITY
+       if(obstype == 180 .or. obstype == 182) obs_kind = MARINE_SFC_RELATIVE_HUMIDITY
+       if(obstype == 181 .or. obstype == 183) obs_kind = LAND_SFC_RELATIVE_HUMIDITY
+     else if ( zob2 == 2.0_r8 .and. inc_dewpoint ) then
+       obs_kind_gen = KIND_DEWPOINT
+       if(obstype == 120 .or. obstype == 132) obs_kind = RADIOSONDE_DEWPOINT
+       if(obstype == 130 .or. obstype == 131) obs_kind = AIRCRAFT_DEWPOINT
+       if(obstype == 133                    ) obs_kind = ACARS_DEWPOINT
+       if(obstype == 180 .or. obstype == 182) obs_kind = MARINE_SFC_DEWPOINT
+       if(obstype == 181 .or. obstype == 183) obs_kind = LAND_SFC_DEWPOINT
+     endif
    endif
     
    if(obs_prof == 3) then
@@ -413,9 +446,8 @@
       obs_err = obs_err*1.0e-3_r8
       obs_value = zob*1.0e-3_r8     !  for Q variable to kg/kg
    else
-      obs_value = zob               !  for T, U, V
+      obs_value = zob               !  for T, U, V, RH, Tdew
    endif
-   var2 = obs_err**2            ! error variance
 
    aqc = iqc
    days = day0
@@ -437,31 +469,13 @@
 
    end if
 
-!   create the obs_def for this observation, add to sequence
-!------------------------------------------------------------------------------
-   
-   call real_obs(num_copies, num_qc, obs, lon, lat, vloc, obs_value, &
-                 var2, aqc, obs_kind, which_vert, seconds, days)
+   !   create the obs_def for this observation, add to sequence
+   !------------------------------------------------------------------------------
 
-   
-   if(obs_num == 1) then  ! the first observation, no prev_obs yet
+   call create_3d_obs(lat, lon, vloc, which_vert, obs_value, &
+                      obs_kind, obs_err, days, seconds, aqc, obs)
+   call add_obs_to_seq(real_obs_sequence, obs, time_obs, prev_obs, prev_time, first_obs)
 
-      call insert_obs_in_seq(real_obs_sequence, obs)
-
-   else if(time >= pre_time) then  ! same time or later than previous obs
-
-      call insert_obs_in_seq(real_obs_sequence, obs, prev_obs)
-
-   else  ! earlier time, must start search from start of list
-
-      call insert_obs_in_seq(real_obs_sequence, obs)
-
-   endif
-
-   ! save for next iteration
-   call copy_obs(prev_obs, obs)
-   pre_time = time
-
 end do obsloop
 
 200 continue
@@ -477,66 +491,6 @@
 end function real_obs_sequence
 
 
-
-subroutine real_obs(num_copies, num_qc, obs, lon, lat, vloc, obs_value, &
-                      var2, aqc, obs_kind, which_vert, seconds, days)
-!------------------------------------------------------------------------------
-integer,        intent(in)    :: num_copies, num_qc
-type(obs_type), intent(inout) :: obs
-real(r8),       intent(in)    :: lon, lat, vloc, obs_value, var2, aqc
-integer,        intent(in)    :: obs_kind, which_vert, seconds, days
-
-integer            :: i
-real(r8)           :: aqc01(1), obs_value01(1)
-type(obs_def_type) :: obsdef0
-
-if ( .not. module_initialized ) call initialize_module
-
-! Does real initialization of an observation type
-
-call real_obs_def(obsdef0, lon, lat, vloc, &
-                    var2, obs_kind, which_vert, seconds, days)
-call set_obs_def(obs, obsdef0)
-
-do i = 1, num_copies
-   obs_value01(1) = obs_value
-   call set_obs_values(obs, obs_value01(1:1) )
-end do
-
-do i = 1, num_qc
-   aqc01(1) = aqc
-   call set_qc(obs, aqc01(1:1))
-end do
-
-end subroutine real_obs
-
-
-
-subroutine real_obs_def(obs_def, lon, lat, vloc, &
-                        var2, obs_kind, which_vert, seconds, days)
-!----------------------------------------------------------------------
-type(obs_def_type), intent(inout) :: obs_def
-real(r8),intent(in) :: lon, lat, vloc, var2
-integer, intent(in) :: obs_kind, which_vert, seconds, days
-
-type(location_type) :: loc0
-
-if ( .not. module_initialized ) call initialize_module
-
-! set obs location
-loc0 = set_location(lon, lat, vloc, which_vert )
-call set_obs_def_location(obs_def, loc0)
-
-! set obs kind
-call set_obs_def_kind(obs_def, obs_kind)
-
-call set_obs_def_time(obs_def, set_time(seconds, days) )
-call set_obs_def_error_variance(obs_def, var2)
-
-end subroutine real_obs_def
-
-
-
 subroutine initialize_module
 !-------------------------------------------------
 call register_module(source, revision, revdate)

Modified: DART/trunk/observations/NCEP/ascii_to_obs/work/input.nml
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/work/input.nml	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/ascii_to_obs/work/input.nml	2011-01-21 18:36:14 UTC (rev 4668)
@@ -6,6 +6,9 @@
    max_num    = 800000,
    select_obs = 0,
    ObsBase = '../../prep_bufr/data/temp_obs.',
+   include_specific_humidity = .true.,
+   include_relative_humidity = .false.,
+   include_dewpoint = .false.,
    ADPUPA = .false., 
    AIRCAR = .false., 
    AIRCFT = .false., 
@@ -52,5 +55,6 @@
                               '../../../../obs_def/obs_def_altimeter_mod.f90',
                               '../../../../obs_def/obs_def_gps_mod.f90'  
                               '../../../../obs_def/obs_def_dew_point_mod.f90'  
+                              '../../../../obs_def/obs_def_rel_humidity_mod.f90'  
    /
 

Modified: DART/trunk/observations/NCEP/ascii_to_obs/work/path_names_create_real_obs
===================================================================
--- DART/trunk/observations/NCEP/ascii_to_obs/work/path_names_create_real_obs	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/ascii_to_obs/work/path_names_create_real_obs	2011-01-21 18:36:14 UTC (rev 4668)
@@ -1,5 +1,6 @@
 observations/NCEP/ascii_to_obs/create_real_obs.f90
 observations/NCEP/ascii_to_obs/real_obs_mod.f90
+observations/utilities/obs_utilities_mod.f90
 obs_sequence/obs_sequence_mod.f90
 obs_kind/obs_kind_mod.f90
 obs_def/obs_def_mod.f90

Modified: DART/trunk/observations/NCEP/prep_bufr/src/prepbufr.f
===================================================================
--- DART/trunk/observations/NCEP/prep_bufr/src/prepbufr.f	2011-01-21 18:05:34 UTC (rev 4667)
+++ DART/trunk/observations/NCEP/prep_bufr/src/prepbufr.f	2011-01-21 18:36:14 UTC (rev 4668)
@@ -1,3 +1,8 @@
+c    Yet another revision of the BUFR preparation program.  It has options
+c    to output specific humidity, relative humidity, or dewpoint obs, under
+c    namelist control.  New code added by Ryan Torn.  14 Jan 2011
+c    (Requires the matching update to the create_real_obs program.)
+c
 c    This is the 5th version of the BUFR preparation program for the
 c    newly revised DART version. Ps and moisture obs are outputed as well.
 c     
@@ -2,3 +7,5 @@
 c    12/2009 added additional time window flavors, specified all of the variable
-c    types. 
+c    types.   (this is planned to be removed and observation windowing done
+c    as a post process.  14jan2011)
+c
 c    A bug with the radiosonde T events selection j2 is fixed at 04/06/2005.
@@ -9,18 +16,12 @@
 c    For Aircraft T: No moistuerobs and all T are dry T
 c    For Surface obs, the T of pc=1 is already virtual T.
 c
-c    I tried to remove the code in the READPB() routine which selects
-c    obs based on the string name, since we have a namelist control for
-c    the numeric observation report type (which identifies specific
-c    satellites and data sources, and can be matched to the obs used

@@ Diff output truncated at 40000 characters. @@


More information about the Dart-dev mailing list