[Dart-dev] DART/branches Revision: 12495

dart at ucar.edu dart at ucar.edu
Mon Apr 9 14:47:21 MDT 2018


thoar at ucar.edu
2018-04-09 14:47:21 -0600 (Mon, 09 Apr 2018)
251
Adding a first stab at some soil moisture observations from the TERENO data portal.
The netCDF files have a _FillValue of 'NaN' ... not sure how to handle that ...
can't test for something equal to NaN ... by definition even a NaN won't match a NaN.




Added: DART/branches/lanai_terrsysmp/observations/TERENO/convert_soil_moisture.f90
===================================================================
--- DART/branches/lanai_terrsysmp/observations/TERENO/convert_soil_moisture.f90	                        (rev 0)
+++ DART/branches/lanai_terrsysmp/observations/TERENO/convert_soil_moisture.f90	2018-04-09 20:47:21 UTC (rev 12495)
@@ -0,0 +1,448 @@
+! DART software - Copyright 2004 - 2013 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
+!
+! $Id$
+
+program convert_soil_moisture
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! convert_soil_moisture - program that reads a TERENO netCDF 
+!                        file and writes a DART
+!                        obs_seq file using the DART library routines.
+!
+! Apr 2018, Tim Hoar, NCAR/DAReS
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+use         types_mod, only : r8, missing_r8, digits12
+
+use     utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, &
+                              open_file, close_file, find_namelist_in_file, &
+                              check_namelist_read, nmlfileunit, logfileunit, &
+                              do_nml_file, do_nml_term, file_exist, &
+                              find_textfile_dims, get_next_filename, &
+                              error_handler, E_ERR, E_MSG
+
+use  time_manager_mod, only : time_type, set_calendar_type, set_date, &
+                              get_time, set_time, operator(+), GREGORIAN, &
+                              print_time, print_date
+
+use      location_mod, only : VERTISHEIGHT
+
+use  obs_sequence_mod, only : obs_sequence_type, obs_type, read_obs_seq, &
+                              static_init_obs_sequence, init_obs, write_obs_seq, & 
+                              init_obs_sequence, get_num_obs, & 
+                              set_copy_meta_data, set_qc_meta_data
+
+use      obs_kind_mod, only : SOIL_MOISTURE
+
+use obs_utilities_mod, only : getvar_real, getvar_real_2d, getvar_int_2d, &
+                              getdimlen, create_3d_obs, add_obs_to_seq
+
+use netcdf
+
+implicit none
+
+! version controlled file description for error handling, do not edit
+character(len=*), parameter :: source   = &
+   "$URL$"
+character(len=*), parameter :: revision = "$Revision$"
+character(len=*), parameter :: revdate  = "$Date$"
+character(len=*), parameter :: routine  = "convert_soil_moisture"
+
+character(len=512) :: string1, string2, string3
+
+!-----------------------------------------------------------------------
+! Namelist input with default values
+
+character(len=256) :: input_file_list = 'file_list.txt'
+character(len=256) :: obs_out_file    = 'obs_seq.out'
+logical            :: verbose         = .false.
+
+namelist /convert_soil_moisture_nml/ &
+         input_file_list, obs_out_file, verbose
+
+!-----------------------------------------------------------------------
+! MAX_NUM_INPUT_FILES : max number of input files to be processed
+
+integer, parameter :: MAX_NUM_INPUT_FILES = 500
+integer            :: num_input_files = 0  ! actual number of files
+integer            :: ifile
+character(len=256), dimension(MAX_NUM_INPUT_FILES) :: filename_seq_list
+character(len=256) :: filename
+
+integer, parameter :: num_copies = 1,   &   ! number of copies in sequence
+                      num_qc     = 1        ! number of QC entries
+
+integer  :: io, iunit, ncid, i, oday, osec
+logical  :: first_obs
+integer  :: idepth, istation, nstations, itime, ntimes, nqcdims
+integer  :: counts, max_obs
+real(r8) :: obs_val, err_std, qc
+
+real(r8), allocatable :: latitude(:), longitude(:), altitude(:) 
+real(r8), allocatable ::   sensor1(:,:,:),   sensor2(:,:,:)
+integer,  allocatable :: qcsensor1(:,:,:,:), qcsensor2(:,:,:,:)
+type(time_type), allocatable :: dart_time(:)
+
+type(obs_sequence_type) :: obs_seq
+type(obs_type)          :: obs, prev_obs
+type(time_type)         :: prev_time
+
+integer, parameter :: NDEPTHS = 3
+real(r8) :: depths(NDEPTHS) = (/ 0.05, 0.2, 0.5 /) ! meters
+character(len=*), parameter :: varname1(NDEPTHS) = &


More information about the Dart-dev mailing list