[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