diff --git a/mkmf/mkmf.template b/mkmf/mkmf.template index 5e41aeaf82..e5df05578d 100755 --- a/mkmf/mkmf.template +++ b/mkmf/mkmf.template @@ -1,4 +1,4 @@ -# Template for GNU gfortran on Linux or Mac OSX +# Template for Intel Fortran Compiler on Linux clusters and workstations. # # 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 @@ -9,57 +9,97 @@ # typical use with mkmf # mkmf -t mkmf.template.xxxx ... # -# Suggested (perhaps required) flags: -# -ffree-line-length-none handles "long" lines - i.e. longer than 72 chars -# -# Suggested debugging flags: -# -g add debugging information to executable -# -Wuninitialized catch uninitialized variables -# -Wunused issue warning for unused variables - keeps code clean -# -fbacktrace runtime errors try to print out a stack backtrace -# -fbounds-check add runtime-checking for out-of-range array indices -# -ffpe-trap=invalid,zero,overflow -# stop on floating point errors -# -# earlier versions of this mkmf file listed 'precision' as one of the options on -# the fpe-trap line. this is not recommended anymore as some of the gfortran internal -# routines will trap, as well as some perfectly valid DART computations. -# -# Generally not needed but possibly useful for non-DART code: -# -# -ffree-form forces input file to be read as free format regardless -# of what file extension it has. -# -# -fdefault-real-8 force all real variables to be real*8. not needed for DART code -# since all real variables in DART are declared with a size. -# -# NOTE: Some previous versions of the gfortran compiler (including 4.1.2) -# changed the record marker size to 8 bytes, which made binary files written -# with the 'unformatted' option unreadable by programs compiled with other -# compilers. Later versions of the compiler changed the default back to 4 bytes. -# If you have a version that defaults to 8 byte record markers, use this -# compile time flag: -# -frecord-marker=4 -# If you have files written by older versions of the gfortran compiler that -# cannot be read now, try this compile time flag: -# -frecord-marker=8 -# -# Convert big-endian or little-endian binary files at runtime: -# -# setenv GFORTRAN_CONVERT_UNIT 'big_endian' -# Treats ALL units as big_endian -# -# setenv GFORTRAN_CONVERT_UNIT 'big_endian;native:10-20' -# Treats units 10-20 as big_endian but the rest are 'native' -# -# for more information on unit conversions: -# http://gcc.gnu.org/onlinedocs/gfortran/GFORTRAN_005fCONVERT_005fUNIT.html#GFORTRAN_005fCONVERT_005fUNIT -# +# FFLAGS useful for DEBUGGING. NOTE: The intel compiler can provide a lot more +# information if you LEAVE the object and module files intact. +# Do not remove the *.o and *.mod files when debugging code. +# +# -g include debugging information. these are all synonyms. +# -debug full +# -debug all +# -O0 setting -g will make this the default (no optimization). +# it is possible to set -g and then explicitly set -O2 if +# the behavior being debugged depends on optimization changes. +# -ftrapuv traps if a local variable is used before being set +# -C enables all runtime checks. -C and -check all are synonyms. +# -check all +# -check enables/disables more specific runtime checks. +# keywords: [arg_temp_created,bounds,overflow,format,pointers,uninit] +# -warn the level of warning messages issued. +# keywords: [alignments, argument_checking, declarations, +# errors, fileopt, general, ignore_loc, +# stderrors, truncated_source, uncalled, +# uninitialized, unused, usage, all] +# -fp-stack-check catches conditions where the FP stack is not correct. +# Typically this is when a real function is called as if it were a +# subroutine, OR a subroutine is called as if it were a function (return +# values left of FP stack OR too much data is taken off the FP stack) +# -vec-reportN controls how much diagnostic output is printed about +# loops vectorized by the compiler. N = 0 is silent, +# N can have values up to 5. +# -traceback tells the compiler to generate extra information in the +# object file to provide source file traceback information +# when a severe error occurs at run time +# +# FFLAGS useful for bitwise reproducibility and accuracy control +# (these will slow down performance to various degrees) +# -fp-model precise control how floating point roundoff is done so it is +# reproducible from run to run. in simple tests this +# flag alone was enough to create bitwise reproducible +# code but slowed execution significantly. +# -ftz 'flush to zero' underflows result in zero. set by default if +# any -O other than -O0 set, or if -fpe0 or -fpe1 set. +# -fpeN controls floating point exception handling. -fpe0 rounds underflow +# to zero and traps on any other exception type. +# -pc80 set internal FPU precision to 64 bit significand +# (default is -pc64 with 53 internal bits) +# +# FFLAGS useful for production +# -O2 default. optimize without too much unrepeatable numerical games +# -O3 more aggressive optimizations. check numerical differences +# before using this indiscriminately. +# -O1 if you get compile-time errors about out of memory or unable to +# complete compilation because of complexity, try lowering the +# optimization level on the offending source files. +# -ipo enable optimizations between routines in separate source files +# -heap-arrays 10 allocate large arrays from the heap instead of putting them +# on the stack. the number is the limit in KB for when arrays +# move from the stack to the heap. this can help if you get stack +# overflow errors and cannot increase the stack size more. +# allocating from the stack is faster, but it's usually a smaller +# size than the heap. +# -x, -m, -ax, -mcode, -march all these flags tell the compiler to generate +# processor-specific or vector instructions. either 'man ifort' or +# ifort --help to see what the current list of options are and +# which have priority over the others. +# (for those running on yellowstone, -axavx will enable the advanced +# vector instructions available on the sandy bridge processors.) +# +# FFLAGS possibly useful, not normally used by DART +# -fpp run Fortran preprocessor on source files prior to compilation +# -free interpret source as free-format, regardless of file extension +# -r8 specify default real size. note that for DART we use explicit +# types on all our real values so this will not change anything +# inside DART. see DART/common/types_mod.f90 if you must run +# with single precision reals. +# -convert big_endian useful if you're on the wrong architecture. +# however this controls both reading and writing so you can't +# use it as a conversion mechanism unless you write files out +# in ascii format. applies to all unformatted fortran i/o. +# -assume byterecl ... more 'industry-standard' direct-access behavior +# controls what units the RECL (record length) specifier returns. +# +# Runtime environment variables that influence the compiler behavior: +# +# Make output lines for fortran write statements longer without wrapping: +# setenv FORT_FMT_RECL 512 (or any length) +# +# +# IF YOU HAVE MORE CURRENT COMPILER INFORMATION, PLEASE SHARE IT WITH US. MPIFC = mpif90 MPILD = mpif90 -FC = gfortran -LD = gfortran +FC = ifort +LD = ifort # DISCUSSION ABOUT NETCDF. DART works with both V3 and V4 flavors of netCDF. # Some V4 installations also require the HDF5 libraries. Some don't. @@ -81,14 +121,28 @@ LD = gfortran # are found for the netcdf files that match this compiler. # # NETCDF = /opt/local +NETCDF = /apps/netcdf/4.7.3 INCS = -I$(NETCDF)/include -LIBS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -FFLAGS = -O2 -ffree-line-length-none $(INCS) +#LIBS = -L$(NETCDF)/lib -lnetcdff -lnetcdf +LIBS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -lcurl +FFLAGS = -O $(INCS) LDFLAGS = $(FFLAGS) $(LIBS) -# FFLAGS = -g -Wuninitialized -Wunused -ffree-line-length-none -fbounds-check \ -# -fbacktrace -ffpe-trap=invalid,zero,overflow $(INCS) +# for development or debugging, use this instead: +#FFLAGS = -g -C -check noarg_temp_created -fpe0 \ +# -fp-model precise -ftrapuv -traceback \ +# $(INCS) + +# for speed on yellowstone (verify against a run with with -O and -fp-model precise +# that the numerical differences aren't too large to be acceptable): +# FFLAGS = -O3 -axavx -ipo -vec-report0 $(INCS) +# +# Some optimized (BLAS, LAPACK) libraries may be available with: +# LIBS = -L$(NETCDF)/lib -lnetcdff -lnetcdf -lmkl -lmkl_lapack -lguide -lpthread +# +# If you get this error: libimf.so: warning: warning: feupdateenv is not implemented +# try adding: -limf -lm to your LIBS line. # # $URL$ diff --git a/models/tiegcm/shell_scripts_gadi/advance_model.csh b/models/tiegcm/shell_scripts_gadi/advance_model.csh new file mode 100755 index 0000000000..eab560c26a --- /dev/null +++ b/models/tiegcm/shell_scripts_gadi/advance_model.csh @@ -0,0 +1,224 @@ +#!/bin/csh +# +# DART software - Copyright 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 +# +# DART $Id$ +# +# This script has 4 logical 'blocks': +# 1) creates a clean, temporary directory in which to run a model instance +# and copies the necessary files into the temporary directory +# 2) converts the DART output to input expected by the model +# 3) runs the model +# 4) converts the model output to input expected by DART +# +# The error code from the script reflects which block it failed. +# +# Arguments are the +# 1) process number of caller, +# 2) the number of state copies belonging to that process, and +# 3) the name of the filter_control_file for that process + +set process = $1 +set num_states = $2 +set control_file = $3 + +echo "Starting advance_model for process $process at "`date` + +#------------------------------------------------------------------------- +# Block 1: populate a run-time directory with the bits needed to run tiegcm. +#------------------------------------------------------------------------- + +# Get unique name for temporary working directory for this process's stuff +set temp_dir = `printf "advance_temp%04d" $process` + +# Create a clean temporary directory and go there +\rm -rf $temp_dir +mkdir -p $temp_dir +cd $temp_dir + +# The following is a list of the REQUIRED input.nml namelist settings +# +# &model_nml tiegcm_restart_file_name = 'tiegcm_restart_p.nc', +# tiegcm_secondary_file_name = 'tiegcm_s.nc', +# tiegcm_namelist_file_name = 'tiegcm.nml' +# &dart_to_model_nml file_in = 'dart_restart', +# file_namelist_out = 'namelist_update', +# &model_to_dart file_out = 'dart_ics' +# +# Ensure that the input.nml has the required value for +# dart_to_model_nml:advance_time_present for this context. + +sed -e "/advance_time_present /c\ advance_time_present = .TRUE." \ + ../input.nml >! input.nml || exit 1 + +# Check to see if you are running async==4 ... an mpirun.lsf situation +set MYSTRING = `grep -A 42 filter_nml input.nml | grep async` +set MYSTRING = `echo $MYSTRING | sed -e "s#[=,'\.]# #g"` +set ASYNC = $MYSTRING[2] + +if ($ASYNC == 4) then +# set RUN_CMD = mpirun.lsf +# set RUN_CMD = mpirun + set mpirun = `cat ../mpirun.command` + set nproc = $PBS_NCPUS + set RUN_CMD = $mpirun' -np '$nproc +else +# set RUN_CMD = '' +# set RUN_CMD = 'mpirun -np 1 --bind-to none' + set mpirun = `cat ../mpirun.command` + set RUN_CMD = $mpirun' -np 1 --bind-to none' +endif + +# Loop through each state +set state_copy = 1 +set ensemble_member_line = 1 +set input_file_line = 2 +set output_file_line = 3 + +while($state_copy <= $num_states) + + set ensemble_member = `head -n $ensemble_member_line ../$control_file | tail -n 1` + set input_file = `head -n $input_file_line ../$control_file | tail -n 1` + set output_file = `head -n $output_file_line ../$control_file | tail -n 1` + + # make sure we have a clean logfile for this entire advance + set logfile = `printf "log_advance.%04d.txt" $ensemble_member` + + echo "control_file is ../$control_file" >! $logfile + echo "working on ensemble_member $ensemble_member" >> $logfile + echo "input_file is $input_file" >> $logfile + echo "output_file is $output_file" >> $logfile + echo "Starting dart_to_model at "`date` >> $logfile + + #---------------------------------------------------------------------- + # Block 2: Convert the DART output file to form needed by model. + # Overwrite the appropriate variables of a TIEGCM netCDF restart file. + # The DART output file (namelist_update) has the 'advance_to' time + # which must be communicated to the model ... through the tiegcm namelist + #---------------------------------------------------------------------- + + set tiesecond = `printf "tiegcm_s.nc.%04d" $ensemble_member` + set tierestart = `printf "tiegcm_restart_p.nc.%04d" $ensemble_member` + set tieinp = `printf "tiegcm.nml.%04d" $ensemble_member` + + cp -pv ../$input_file dart_restart >>& $logfile || exit 2 + cp -pv ../$tiesecond tiegcm_s.nc >>& $logfile || exit 2 + cp -pv ../$tierestart tiegcm_restart_p.nc >>& $logfile || exit 2 + cp -pv ../$tieinp tiegcm.nml >>& $logfile || exit 2 + + # Copy across data for Weimar model required by TIE-GCM 2.0 + cp -p ../wei05sc.nc wei05sc.nc >>& $logfile || exit 2 + + ../dart_to_model >>& $logfile || exit 2 # dart_to_model generates namelist_update + + # update tiegcm namelist variables by grabbing the values from namelist_update + # and then overwriting whatever is in the tiegcm.nml + # There is a danger that you match multiple things ... F107 and F107A, + # SOURCE_START and START, for example ... so try to grep whitespace too ... + + set start_year = `grep " START_YEAR " namelist_update` + set start_day = `grep " START_DAY " namelist_update` + set source_start = `grep " SOURCE_START " namelist_update` + set start = `grep " START " namelist_update` + set secstart = `grep " SECSTART " namelist_update` + set stop = `grep " STOP " namelist_update` + set secstop = `grep " SECSTOP " namelist_update` + set hist = `grep " HIST " namelist_update` + set sechist = `grep " SECHIST " namelist_update` + set f107 = `grep " F107 " namelist_update` + + # FIXME TOMOKO ... do we want F107 and F107A to be identical + # + # the way to think about the following sed syntax is this: + # / SearchStringWithWhiteSpaceToMakeUnique /c\ the_new_contents_of_the_line + + sed -e "/ START_YEAR /c\ ${start_year}" \ + -e "/ START_DAY /c\ ${start_day}" \ + -e "/ SOURCE_START /c\ ${source_start}" \ + -e "/ START /c\ ${start}" \ + -e "/ STOP /c\ ${stop}" \ + -e "/ HIST /c\ ${hist}" \ + -e "/ SECSTART /c\ ${secstart}" \ + -e "/ SECSTOP /c\ ${secstop}" \ + -e "/ SECHIST /c\ ${sechist}" \ + -e "/ F107 /c\ ${f107}" \ + tiegcm.nml >! tiegcm.nml.updated + + if ( -e tiegcm.nml.updated ) then + echo "tiegcm.nml updated with new start/stop time for ensemble member $ensemble_member" + mv -v tiegcm.nml tiegcm.nml.original + mv -v tiegcm.nml.updated tiegcm.nml + else + echo "ERROR tiegcm.nml did not update correctly for ensemble member $ensemble_member." + exit 2 + endif + + #---------------------------------------------------------------------- + # Block 3: Run the model + #---------------------------------------------------------------------- + + echo "ensemble member $ensemble_member : before tiegcm" >> $logfile + ncdump -v mtime tiegcm_restart_p.nc >>& $logfile + echo "Starting tiegcm at "`date` >> $logfile + + ${RUN_CMD} ../tiegcm tiegcm.nml >>& $logfile + + #$mpirun -np $nproc ../tiegcm tiegcm.nml >>& $logfile + + grep -q "NORMAL EXIT" $logfile + set tiegcm_status = $status + + if ($tiegcm_status != 0) then + echo "ERROR: tiegcm model advance failed." + echo "ERROR: check $temp_dir/$logfile" + exit 3 + endif + + echo "ensemble member $ensemble_member : after tiegcm" >> $logfile + ncdump -v mtime tiegcm_restart_p.nc >>& $logfile + + #---------------------------------------------------------------------- + # Block 4: Convert the model output to form needed by DART + # AT this point, the model has updated the information in tiegcm_restart_p.nc + # We need to get that information back into the DART state vector. + # + # The updated information needs to be moved into CENTRALDIR in + # preparation for the next cycle. + #---------------------------------------------------------------------- + + echo "Starting model_to_dart at "`date` >> $logfile + ../model_to_dart >>& $logfile || exit 4 + + mv -v dart_ics ../$output_file || exit 4 + mv -v tiegcm_s.nc ../$tiesecond || exit 4 + mv -v tiegcm_restart_p.nc ../$tierestart || exit 4 + mv -v tiegcm.nml ../$tieinp || exit 4 + + @ state_copy++ + @ ensemble_member_line = $ensemble_member_line + 3 + @ input_file_line = $input_file_line + 3 + @ output_file_line = $output_file_line + 3 + echo "Finished model_to_dart at "`date` >> $logfile +end + +# Change back to original directory +cd .. + +# After you are assured this script works as expected, you can actually +# remove the temporary directory. For now ... leave this commented OUT. +#\rm -rf $temp_dir + +# Remove the filter_control file to signal completion +\rm -fv $control_file + +echo "Finished advance_model for process $process at "`date` + +exit 0 + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/models/tiegcm/shell_scripts_gadi/run_filter.csh b/models/tiegcm/shell_scripts_gadi/run_filter.csh new file mode 100755 index 0000000000..a5f5631ca1 --- /dev/null +++ b/models/tiegcm/shell_scripts_gadi/run_filter.csh @@ -0,0 +1,322 @@ +#!/bin/csh +# +# DART software - Copyright 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 +# +# DART $Id$ +# +# Top level script to perform an assimilation. +# +# This script is designed to be submitted as a batch job but may be run from +# the command line (as a single thread) to check for file motion, etc. +# If running interactively, please comment out the part that actually runs filter. +# +# PLEASE READ THE FOLLOWING: +# Setting the number of tasks and choosing the right ptile requires work. +# The number of tasks (-n) can be be as big as the ensemble size for +# a single-threaded tiegcm (i.e. async == 2) so that all ensemble members can +# run simultaneously. The setting of ptile specifies the number of tasks on each +# node, which usually depends on the model resolution and subsequent memory use +# of each ensemble member. Think of ptile as the number of ensemble members you +# can run on one node and not run out of the shared memory on that node. +# If you specify more tasks than ensemble members, there are tasks that have +# nothing to do during the model advance. If the model advance step takes longer +# than the MPI timeout on your machine, you may need to disable the MPI timeout. +#----------------------------------------------------------------------------- +# +#PBS -P n23 +#PBS -l walltime=0:05:00 +#PBS -l wd +#PBS -l ncpus=4 +#PBS -l mem=32GB +#PBS -N run_tiegcm_assim_gadi +#PBS -m ae +#PBS -M g.bowden@adfa.edu.au +#PBS -j oe + +#---------------------------------------------------------------------- +# Turns out the scripts are a lot more flexible if you don't rely on +# the queuing-system-specific variables -- so I am converting them to +# 'generic' names and using the generics throughout the remainder. +#---------------------------------------------------------------------- + +# Load required modules +module load openmpi +module load netcdf/4.7.3 +module load hdf5 + +if ($?PBS_O_HOST) then + + setenv ORIGINALDIR `pwd` + setenv JOBNAME $PBS_JOBNAME + setenv JOBID $PBS_JOBID + setenv MYQUEUE $PBS_QUEUE + setenv MYHOST $HOSTNAME + setenv MPI_RUN_CMD mpirun + + # MP_DEBUG_NOTIMEOUT may alleviate MPI timeouts that may occur under + # certain task geometries. It is NOT a good idea to use it in general. + # setenv MP_DEBUG_NOTIMEOUT yes + +else + + #------------------------------------------------------------------- + # You can run this interactively to check syntax, file motion, etc. + #------------------------------------------------------------------- + + setenv ORIGINALDIR `pwd` + setenv JOBNAME tiegcm_filter + setenv JOBID $$ + setenv MYQUEUE Interactive + setenv MYHOST $HOST + setenv MPI_RUN_CMD '' + +endif + +#---------------------------------------------------------------------- +# Just an echo of job attributes +#---------------------------------------------------------------------- + +echo +echo "${JOBNAME} ($JOBID) submitted from $ORIGINALDIR" +echo "${JOBNAME} ($JOBID) submitted from $MYHOST" +echo "${JOBNAME} ($JOBID) running in queue $MYQUEUE" +echo "${JOBNAME} ($JOBID) running on $MYHOST" +echo "${JOBNAME} ($JOBID) started at "`date` +echo + +#---------------------------------------------------------------------- +# Make a unique, (empty, clean) temporary directory. +#---------------------------------------------------------------------- + +#setenv CENTRALDIR /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/${JOBNAME}/job_${JOBID} +cd ../../.. +setenv CENTRALDIR `pwd`/${JOBNAME}/job_${JOBID} + +mkdir -p ${CENTRALDIR} +cd ${CENTRALDIR} + +set myname = $0 # this is the name of this script + +# some systems don't like the -v option to any of the following + +set OSTYPE = `uname -s` +switch ( ${OSTYPE} ) + case IRIX64: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + case AIX: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + default: + setenv REMOVE 'rm -rvf' + setenv COPY 'cp -v' + setenv MOVE 'mv -fv' + setenv LINK 'ln -s' + breaksw +endsw + +echo "${JOBNAME} ($JOBID) CENTRALDIR == $CENTRALDIR" + +#----------------------------------------------------------------------------- +# Set variables containing various directory names where we will GET things +# DARTDIR The location of the DART tiegcm model directory +# TIEGCMDIR The location of the TIEGCM executable +# ENSEMBLEDIR The location of the initial ensemble of TIEGCM files +# EXPERIMENT The (safe) location for the results of this run. +#----------------------------------------------------------------------------- + +set DARTDIR = /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/models/tiegcm +set TIEGCMDIR = /scratch/n23/gwb112/swm_project/TIEGCM +set TIEGCMDATA = ${TIEGCMDIR}/tiegcm_res5.0_data +set EXPERIMENT = /scratch/n23/gwb112/swm_project/gold_test +set ENSEMBLEDIR = /scratch/n23/gwb112/swm_project/gold_test/initial + +# Need to set TGCMDATA environment variable +setenv TGCMDATA $TIEGCMDATA + +#----------------------------------------------------------------------------- +# Get the DART executables, scripts, and input files +# Get the tiegcm executable, control files, and data files. +# The tiegcm initial conditions are in the next block. +#----------------------------------------------------------------------------- + +${COPY} ${DARTDIR}/work/filter . || exit 1 +${COPY} ${DARTDIR}/work/dart_to_model . || exit 1 +${COPY} ${DARTDIR}/work/model_to_dart . || exit 1 +${COPY} ${DARTDIR}/work/input.nml input.nml.original || exit 1 +${COPY} ${DARTDIR}/shell_scripts_gadi/advance_model.csh . || exit 1 + +#${COPY} ${EXPERIMENT}/observation/obs_seq.out . || exit 1 +${COPY} ${EXPERIMENT}/initial/obs_seq.out . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_restart_p.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_s.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm.nml tiegcm.nml.original || exit 1 +${COPY} ${EXPERIMENT}/initial/gpi*.nc.* . || exit 1 +${COPY} ${EXPERIMENT}/initial/imf*.nc.* . || exit 1 + +${COPY} ${TIEGCMDIR}/tiegcm.exec/tiegcm2.0 tiegcm || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/machines.ini . || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/mpirun.command . || exit 1 + +${COPY} ${TIEGCMDATA}/gswm* . || exit 1 +${COPY} ${TIEGCMDATA}/wei05sc.nc . || exit 1 + +#----------------------------------------------------------------------------- +# Put all of the DART initial conditions files and all of the TIEGCM files +# in the CENTRALDIR - preserving the ensemble member ID for each filename. +# The advance_model.csh script will copy the appropriate files for each +# ensemble member into the model advance directory. +# These files may be linked to CENTRALDIR since they get copied to the +# model advance directory. +# +# REQUIREMENTS: for input.nml +# model_nml : tiegcm_restart_file_name = 'tiegcm_restart_p.nc' +# model_nml : tiegcm_secondary_file_name = 'tiegcm_s.nc' +# model_nml : tiegcm_namelist_file_name = 'tiegcm.nml' +# model_to_dart_nml : file_out = 'dart_ics' +#----------------------------------------------------------------------------- +# ensemble_manager_nml : single_restart_file_in = .false. +# filter_nml : async = 2 +# filter_nml : adv_ens_command = './advance_model.csh' +# filter_nml : start_from_restart = .TRUE. +# filter_nml : restart_in_file_name = 'filter_ics' +# filter_nml : restart_out_file_name = 'filter_restart' +#----------------------------------------------------------------------------- +# dart_to_model_nml : file_in = 'dart_restart' +# dart_to_model_nml : file_namelist_out = 'namelist_update' + +sed -e "/ tiegcm_restart_file_name /c\ tiegcm_restart_file_name = 'tiegcm_restart_p.nc'" \ + -e "/ tiegcm_secondary_file_name /c\ tiegcm_secondary_file_name = 'tiegcm_s.nc'" \ + -e "/ tiegcm_namelist_file_name /c\ tiegcm_namelist_file_name = 'tiegcm.nml'" \ + -e "/ file_out /c\ file_out = 'dart_ics'" \ + -e "/ single_restart_file_in /c\ single_restart_file_in = .FALSE." \ + -e "/ async /c\ async = 2" \ + -e "/ adv_ens_command /c\ adv_ens_command = './advance_model.csh'" \ + -e "/ start_from_restart /c\ start_from_restart = .TRUE." \ + -e "/ restart_in_file_name /c\ restart_in_file_name = 'filter_ics'" \ + -e "/ restart_out_file_name /c\ restart_out_file_name = 'filter_restart'" \ + -e "/ file_in /c\ file_in = 'dart_restart'" \ + -e "/ file_namelist_out /c\ file_namelist_out = 'namelist_update'" \ + input.nml.original >! input.nml || exit 2 + +set ENSEMBLESTRING = `grep -A 42 filter_nml input.nml | grep ens_size` +set NUM_ENS = `echo $ENSEMBLESTRING[3] | sed -e "s#,##"` + +@ instance = 1 +while ( $instance <= $NUM_ENS ) + + set darticname = `printf "filter_ics.%04d" $instance` + set tiesecond = `printf "tiegcm_s.nc.%04d" $instance` + set tierestart = `printf "tiegcm_restart_p.nc.%04d" $instance` + set tieinp = `printf "tiegcm.nml.%04d" $instance` + + ${COPY} ${ENSEMBLEDIR}/$tiesecond . || exit 2 + ${COPY} ${ENSEMBLEDIR}/$tierestart . || exit 2 + ${COPY} ${ENSEMBLEDIR}/$tieinp tiegcm.nml.original || exit 2 + + # Ensure that the tiegcm.nml for all the ensemble members is identical + # in all the ways that matter. This will result in a miniumum of changes + # in the advance_model.csh script. This script REQUIRES that there is a + # SINGLE tiegcm_restart_p.nc. Just keep appending all the timesteps to + # the same file. If you need to subset the large file, use the NCO + # operators. for example ncks -d time,20,30 tiegcm_restart_p.nc bob.nc + # If you need more than 300 timesteps in the file, increase it here. + + sed -e 's/;.*//' -e '/^$/ d' \ + -e "/ MXHIST_PRIM /c\ MXHIST_PRIM = 300" \ + -e "/ MXHIST_SECH /c\ MXHIST_SECH = 300" \ + -e "/ SOURCE /c\ SOURCE = 'tiegcm_restart_p.nc'" \ + -e "/ OUTPUT /c\ OUTPUT = 'tiegcm_restart_p.nc'" \ + -e "/ SECOUT /c\ SECOUT = 'tiegcm_s.nc'" \ + tiegcm.nml.original >! $tieinp || exit 2 + + # If an existing ensemble of filter_ics.#### exist, use it. + # If not, generate one. Be aware - even if they exist, they may + # not have the same variable set as your current input.nml + # If that is the case, you will have to generate your own set anyway. + # If you get an error from aread_state_restart(), this is likely the case. + + if ( -e ${ENSEMBLEDIR}/initial/$darticname.GENERATE ) then + ${REMOVE} $darticname + ${LINK} ${ENSEMBLEDIR}/initial/$darticname . || exit 2 + else + # We must convert a tiegcm_restart_p.nc file to a dart_ics file + # for each ensemble member. So - momentarily, we must + # create links to the static filenames expected by model_to_dart + + ${REMOVE} tiegcm_restart_p.nc tiegcm_s.nc tiegcm.nml + + ${LINK} $tierestart tiegcm_restart_p.nc || exit 2 + ${LINK} $tiesecond tiegcm_s.nc || exit 2 + ${LINK} $tieinp tiegcm.nml || exit 2 + + ./model_to_dart || exit 2 + + if (-e dart_ics ) then + ${MOVE} dart_ics $darticname + else + echo "ERROR: File conversion from $tierestart to $darticname failed." + echo "ERROR: File conversion from $tierestart to $darticname failed." + echo "ERROR: File conversion from $tierestart to $darticname failed." + exit 2 + endif + endif + + @ instance++ +end + +#----------------------------------------------------------------------------- +# Run filter ... +#----------------------------------------------------------------------------- + +${REMOVE} tiegcm_restart_p.nc tiegcm_s.nc tiegcm.nml + +${LINK} tiegcm_restart_p.nc.0001 tiegcm_restart_p.nc || exit 3 +${LINK} tiegcm_s.nc.0001 tiegcm_s.nc || exit 3 +${LINK} tiegcm.nml.0001 tiegcm.nml || exit 3 + +${MPI_RUN_CMD} ./filter || exit 3 + +#----------------------------------------------------------------------------- +# At this point, all the restart,diagnostic files are in the run/CENTRALDIR. +# You may want to move them to someplace more 'permanent'. +# +# TJH: At this point, the output files have pretty 'generic' names. +# The files could be archived with the assimilation date in their name. +#----------------------------------------------------------------------------- + +# ${COPY} tiegcm.nml ${EXPERIMENT}/tiegcm +# ${MOVE} tiegcm_s.nc* ${EXPERIMENT}/tiegcm +# ${MOVE} tiegcm_restart_p.nc* ${EXPERIMENT}/tiegcm +# ${MOVE} tiegcm_out_* ${EXPERIMENT}/tiegcm + +# ${MOVE} analysis.nc ${EXPERIMENT}/DART +# ${MOVE} preassim.nc ${EXPERIMENT}/DART +# ${MOVE} obs_seq.final ${EXPERIMENT}/DART +# ${MOVE} dart_log.out ${EXPERIMENT}/DART + +# Good style dictates that you save the scripts so you can see what worked. + +# ${COPY} input.nml ${EXPERIMENT}/DART +# ${COPY} *.csh ${EXPERIMENT}/DART +# ${COPY} $myname ${EXPERIMENT}/DART + +echo "${JOBNAME} ($JOBID) finished at "`date` +echo "These are the files in the run directory at completion:" +ls -lrt + +exit 0 + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/models/tiegcm/shell_scripts_gadi/run_filter_async4.csh b/models/tiegcm/shell_scripts_gadi/run_filter_async4.csh new file mode 100755 index 0000000000..de3d8cd3bb --- /dev/null +++ b/models/tiegcm/shell_scripts_gadi/run_filter_async4.csh @@ -0,0 +1,409 @@ +#!/bin/csh +# +# DART software - Copyright 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 +# +# DART $Id$ +# +##------------------------------------------------------------------------------ +## This block of directives constitutes the preamble for the PBS queuing system +## +## the normal way to submit to the queue is: qsub run_filter.csh +## +## an explanation of the most common directives follows: +## -N Job name +## -r n Declare job non-rerunable +## -e filename for standard error +## -o filename for standard out +## -q Queue name (small, medium, long, verylong) +## -l nodes=xx:ppn=2 requests BOTH processors on the node. On both bangkok +## and calgary, there is no way to 'share' the processors +## on the node with another job, so you might as well use +## them both. (ppn == Processors Per Node) +## +#PBS -P n23 +#PBS -l walltime=3:00:00 +#PBS -l wd +#PBS -l ncpus=16 +#PBS -l mem=32GB +#PBS -N run_tiegcm_assim_gadi +#PBS -m ae +#PBS -M g.bowden@adfa.edu.au +#PBS -j oe + +#=============================================================================== + +# Load required modules +module load openmpi +module load netcdf/4.7.3 +module load hdf5 + +if ($?PBS_O_HOST) then + + setenv ORIGINALDIR `pwd` + setenv JOBNAME $PBS_JOBNAME + setenv JOBID $PBS_JOBID + setenv MYQUEUE $PBS_QUEUE + setenv MYHOST $HOSTNAME + setenv MPI_RUN_CMD mpirun + + # MP_DEBUG_NOTIMEOUT may alleviate MPI timeouts that may occur under + # certain task geometries. It is NOT a good idea to use it in general. + # setenv MP_DEBUG_NOTIMEOUT yes + +else + + #------------------------------------------------------------------- + # You can run this interactively to check syntax, file motion, etc. + #------------------------------------------------------------------- + + setenv ORIGINALDIR `pwd` + setenv JOBNAME tiegcm_filter + setenv JOBID $$ + setenv MYQUEUE Interactive + setenv MYHOST $HOST + setenv MPI_RUN_CMD '' + +endif + +#---------------------------------------------------------------------- +# Just an echo of job attributes +#---------------------------------------------------------------------- + +echo +echo "${JOBNAME} ($JOBID) submitted from $ORIGINALDIR" +echo "${JOBNAME} ($JOBID) submitted from $MYHOST" +echo "${JOBNAME} ($JOBID) running in queue $MYQUEUE" +echo "${JOBNAME} ($JOBID) running on $MYHOST" +echo "${JOBNAME} ($JOBID) started at "`date` +echo + +#---------------------------------------------------------------------- +# Make a unique, (empty, clean) temporary directory. +#---------------------------------------------------------------------- + +#setenv CENTRALDIR /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/${JOBNAME}/job_${JOBID} +cd ../../.. +setenv CENTRALDIR `pwd`/${JOBNAME}/job_${JOBID} + +mkdir -p ${CENTRALDIR} +cd ${CENTRALDIR} + +set myname = $0 # this is the name of this script + +# some systems don't like the -v option to any of the following + +set OSTYPE = `uname -s` +switch ( ${OSTYPE} ) + case IRIX64: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + case AIX: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + default: + setenv REMOVE 'rm -rvf' + setenv COPY 'cp -v' + setenv MOVE 'mv -fv' + setenv LINK 'ln -s' + breaksw +endsw + +echo "${JOBNAME} ($JOBID) CENTRALDIR == $CENTRALDIR" + +# Set variables containing various directory names where we will GET things +# DARTDIR The location of the DART tiegcm model directory +# TIEGCMDIR The location of the TIEGCM executable +# ENSEMBLEDIR The location of the initial ensemble of TIEGCM files +# EXPERIMENT The (safe) location for the results of this run. +#----------------------------------------------------------------------------- + +set DARTDIR = /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/models/tiegcm +set TIEGCMDIR = /scratch/n23/gwb112/swm_project/TIEGCM +set TIEGCMDATA = ${TIEGCMDIR}/tiegcm_res5.0_data +#set EXPERIMENT = /scratch/n23/gwb112/swm_project/gold_test +#set ENSEMBLEDIR = /scratch/n23/gwb112/swm_project/gold_test/initial +set EXPERIMENT = /scratch/n23/gwb112/swm_project/gold_test_restart +set ENSEMBLEDIR = /scratch/n23/gwb112/swm_project/gold_test_restart/initial + +# Need to set TGCMDATA environment variable +setenv TGCMDATA $TIEGCMDATA + +#----------------------------------------------------------------------------- +# Get the DART executables, scripts, and input files +# Get the tiegcm executable, control files, and data files. +# The tiegcm initial conditions are in the next block. +#----------------------------------------------------------------------------- + +${COPY} ${DARTDIR}/work/filter . || exit 1 +${COPY} ${DARTDIR}/work/dart_to_model . || exit 1 +${COPY} ${DARTDIR}/work/model_to_dart . || exit 1 +${COPY} ${DARTDIR}/work/input.nml input.nml.original || exit 1 +${COPY} ${DARTDIR}/shell_scripts_gadi/advance_model.csh . || exit 1 +${COPY} ${DARTDIR}/work/wakeup_filter . || exit 1 + +#${COPY} ${EXPERIMENT}/observation/obs_seq.out . || exit 1 +${COPY} ${EXPERIMENT}/initial/obs_seq.out . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_restart_p.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_s.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm.nml tiegcm.nml.original || exit 1 +${COPY} ${EXPERIMENT}/initial/gpi*.nc.* . || exit 1 +${COPY} ${EXPERIMENT}/initial/imf*.nc.* . || exit 1 + +${COPY} ${TIEGCMDIR}/tiegcm.exec/tiegcm2.0 tiegcm || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/machines.ini . || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/mpirun.command . || exit 1 + +${COPY} ${TIEGCMDATA}/gswm* . || exit 1 +${COPY} ${TIEGCMDATA}/wei05sc.nc . || exit 1 + +#----------------------------------------------------------------------------- +# Put all of the DART initial conditions files and all of the TIEGCM files +# in the CENTRALDIR - preserving the ensemble member ID for each filename. +# The advance_model.csh script will copy the appropriate files for each +# ensemble member into the model advance directory. +# These files may be linked to CENTRALDIR since they get copied to the +# model advance directory. +# +# REQUIREMENTS: for input.nml +# model_nml : tiegcm_restart_file_name = 'tiegcm_restart_p.nc' +# model_nml : tiegcm_secondary_file_name = 'tiegcm_s.nc' +# model_nml : tiegcm_namelist_file_name = 'tiegcm.nml' +# model_to_dart_nml : file_out = 'dart_ics' +#----------------------------------------------------------------------------- +# ensemble_manager_nml : single_restart_file_in = .false. +# filter_nml : async = 4 +# filter_nml : adv_ens_command = './advance_model.csh' +# filter_nml : start_from_restart = .TRUE. +# filter_nml : restart_in_file_name = 'filter_ics' +# filter_nml : restart_out_file_name = 'filter_restart' +#----------------------------------------------------------------------------- +# dart_to_model_nml : file_in = 'dart_restart' +# dart_to_model_nml : file_namelist_out = 'namelist_update' + +sed -e "/ tiegcm_restart_file_name /c\ tiegcm_restart_file_name = 'tiegcm_restart_p.nc'" \ + -e "/ tiegcm_secondary_file_name /c\ tiegcm_secondary_file_name = 'tiegcm_s.nc'" \ + -e "/ tiegcm_namelist_file_name /c\ tiegcm_namelist_file_name = 'tiegcm.nml'" \ + -e "/ file_out /c\ file_out = 'dart_ics'" \ + -e "/ single_restart_file_in /c\ single_restart_file_in = .FALSE." \ + -e "/ async /c\ async = 4" \ + -e "/ adv_ens_command /c\ adv_ens_command = './advance_model.csh'" \ + -e "/ start_from_restart /c\ start_from_restart = .TRUE." \ + -e "/ restart_in_file_name /c\ restart_in_file_name = 'filter_ics'" \ + -e "/ restart_out_file_name /c\ restart_out_file_name = 'filter_restart'" \ + -e "/ file_in /c\ file_in = 'dart_restart'" \ + -e "/ file_namelist_out /c\ file_namelist_out = 'namelist_update'" \ + input.nml.original >! input.nml || exit 2 + +# Determine the number of ensemble members from input.nml, +# it may exist in more than one place. +# Parse out the filter_nml string and see which +# one is immediately after it ... + +if ( ! -e input.nml ) then + echo "ERROR - input.nml does not exist in local directory." + echo "ERROR - input.nml needed to determine number of ensemble members." + exit 1 +endif + +set ENSEMBLESTRING = `grep -A 42 filter_nml input.nml | grep ens_size` +set NUM_ENS = `echo $ENSEMBLESTRING[3] | sed -e "s#,##"` + +# FIXME ... read the async value from input.nml and set parallel_model accordingly. +# if async=2, e.g. you are going to run './modelxxx', single process +# (or possibly 'mpirun -np 1 ./modelxxx'), so each processor advances +# one ensemble independently of the others, leave this as false. +# +# if async=4, e.g. all the processors advance each modelxxx in turn with +# mpirun -np 64 modelxxx (or whatever) for as many ensembles as you have, +# set this to "true" + +set parallel_model = "true" + +# A common strategy for the beginning is to check for the existence of +# some variables that get set by the different queuing mechanisms. +# This way, we know which queuing mechanism we are working with, +# and can set 'queue-independent' variables for use for the remainder +# of the script. + +if ($?LS_SUBCWD) then + + # LSF has a list of processors already in a variable (LSB_HOSTS) + # alias submit 'bsub < \!*' + echo "LSF - using mpirun.lsf for execution" + setenv MPICMD mpirun.lsf + +else if ($?PBS_O_WORKDIR) then + + # PBS has a list of processors in a file whose name is (PBS_NODEFILE) + # alias submit 'qsub \!*' + echo "PBS - using mpirun for execution" + setenv MPICMD mpirun + +else + + # If you have a linux cluster with no queuing software, use this + # section. The list of computational nodes is given to the mpirun + # command and it assigns them as they appear in the file. In some + # cases it seems to be necessary to wrap the command in a small + # script that changes to the current directory before running. + + echo "running with no queueing system" + + # before running this script, do this once. the syntax is + # node name : how many tasks you can run on it + #setenv MYNODEFILE ~/nodelist + #echo "node7:2" >! $MYNODEFILE + #echo "node5:2" >> $MYNODEFILE + #echo "node3:2" >> $MYNODEFILE + #echo "node1:2" >> $MYNODEFILE + +# one possibility + setenv NUM_PROCS `cat nodelist-pgi | wc -l` + set MPIRUN = /apps/openmpi/4.0.2/bin/mpirun + set MPICMD = $MPIRUN -np $NUM_PROCS -nolocal -machinefile nodelist-pgi + + echo "MPICMD = ${MPICMD}" + +endif + +@ instance = 1 +while ( $instance <= $NUM_ENS ) + + set darticname = `printf "filter_ics.%04d" $instance` + set tiesecond = `printf "tiegcm_s.nc.%04d" $instance` + set tierestart = `printf "tiegcm_restart_p.nc.%04d" $instance` + set tieinp = `printf "tiegcm.nml.%04d" $instance` + + ${COPY} ${ENSEMBLEDIR}/$tiesecond . || exit 2 + ${COPY} ${ENSEMBLEDIR}/$tierestart . || exit 2 + ${COPY} ${ENSEMBLEDIR}/$tieinp tiegcm.nml.original || exit 2 + + # Ensure that the tiegcm.nml for all the ensemble members is identical + # in all the ways that matter. This will result in a miniumum of changes + # in the advance_model.csh script. This script REQUIRES that there is a + # SINGLE tiegcm_restart_p.nc. Just keep appending all the timesteps to + # the same file. If you need to subset the large file, use the NCO + # operators. for example ncks -d time,20,30 tiegcm_restart_p.nc bob.nc + # If you need more than 300 timesteps in the file, increase it here. + + sed -e 's/;.*//' -e '/^$/ d' \ + -e "/ MXHIST_PRIM /c\ MXHIST_PRIM = 300" \ + -e "/ MXHIST_SECH /c\ MXHIST_SECH = 300" \ + -e "/ SOURCE /c\ SOURCE = 'tiegcm_restart_p.nc'" \ + -e "/ OUTPUT /c\ OUTPUT = 'tiegcm_restart_p.nc'" \ + -e "/ SECOUT /c\ SECOUT = 'tiegcm_s.nc'" \ + tiegcm.nml.original >! $tieinp || exit 2 + + # If an existing ensemble of filter_ics.#### exist, use it. + # If not, generate one. Be aware - even if they exist, they may + # not have the same variable set as your current input.nml + # If that is the case, you will have to generate your own set anyway. + # If you get an error from aread_state_restart(), this is likely the case. + + if ( -e ${ENSEMBLEDIR}/initial/$darticname.GENERATE ) then + ${REMOVE} $darticname + ${LINK} ${ENSEMBLEDIR}/initial/$darticname . || exit 2 + else + # We must convert a tiegcm_restart_p.nc file to a dart_ics file + # for each ensemble member. So - momentarily, we must + # create links to the static filenames expected by model_to_dart + + ${REMOVE} tiegcm_restart_p.nc tiegcm_s.nc tiegcm.nml + + ${LINK} $tierestart tiegcm_restart_p.nc || exit 2 + ${LINK} $tiesecond tiegcm_s.nc || exit 2 + ${LINK} $tieinp tiegcm.nml || exit 2 + + ./model_to_dart || exit 2 + + if (-e dart_ics ) then + ${MOVE} dart_ics $darticname + else + echo "ERROR: File conversion from $tierestart to $darticname failed." + echo "ERROR: File conversion from $tierestart to $darticname failed." + echo "ERROR: File conversion from $tierestart to $darticname failed." + exit 2 + endif + endif + + @ instance++ +end + +#------------------------------------------------------------------------------- +# Everything below this separator should not need to be modified if everything +# above the separator is set correctly. +#------------------------------------------------------------------------------- + +if ( "$parallel_model" == "false" ) then + + # each filter task advances the ensembles, each running on 1 proc. + + ${MPICMD} ./filter + +else + + # filter runs in parallel until time to do a model advance, + # and then this script starts up the modelxxx jobs, each one + # running in parallel. then it runs wakeup_filter to wake + # up filter so it can continue. The communication happens through + # 'named pipes' created by the mkfifo command. + + \rm -f model_to_filter.lock filter_to_model.lock + mkfifo model_to_filter.lock filter_to_model.lock + + set filterhome = ~/.filter$$ + if ( ! -e $filterhome) mkdir $filterhome + + # start filter and immediately return control back to this script + + (setenv HOME $filterhome; ${MPICMD} ./filter) & + + while ( -e filter_to_model.lock ) + + set todo=`cat < filter_to_model.lock` + echo "todo received, value = ${todo}" + + if ( "${todo}" == "finished" ) then + echo "main script: filter done." + wait + break + + else if ( "${todo}" == "advance" ) then + + # FIXME : in input.nml, the advance model command must + # have -np N with N equal to the number of processors this job is using. + + echo "calling model advance now:" + ./advance_model.csh 0 ${NUM_ENS} filter_control00000 || exit 9 + + echo "restarting filter." + ${MPICMD} ./wakeup_filter + + else + echo "main script: unexpected value received." + break + endif + end + + echo "filter finished, removing pipes." + \rm -f model_to_filter.lock filter_to_model.lock + + if ( -d $filterhome) \rmdir $filterhome + +endif + +exit 0 + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/models/tiegcm/shell_scripts_gadi/run_perfect_model_obs.csh b/models/tiegcm/shell_scripts_gadi/run_perfect_model_obs.csh new file mode 100755 index 0000000000..b7bd3367f6 --- /dev/null +++ b/models/tiegcm/shell_scripts_gadi/run_perfect_model_obs.csh @@ -0,0 +1,253 @@ +#!/bin/csh +# +# DART software - Copyright 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 +# +# DART $Id$ +# +# Top level script to generate observations and a TRUE state. +# +# This script is designed to be submitted as a batch job but may be run from +# the command line (as a single thread) to check for file motion, etc. +# If running interactively, please comment out the part that actually runs filter. +# +#----------------------------------------------------------------------------- +#PBS -P n23 +#PBS -l walltime=3:00:00 +#PBS -l wd +#PBS -l ncpus=16 +#PBS -l mem=32GB +#PBS -N run_tiegcm_assim_gadi +#PBS -m ae +#PBS -M g.bowden@adfa.edu.au +#PBS -j oe + +#---------------------------------------------------------------------- +# Turns out the scripts are a lot more flexible if you don't rely on +# the queuing-system-specific variables -- so I am converting them to +# 'generic' names and using the generics throughout the remainder. +#---------------------------------------------------------------------- + +if ($?LSB_HOSTS) then + + setenv ORIGINALDIR $LS_SUBCWD + setenv JOBNAME $LSB_JOBNAME + setenv JOBID $LSB_JOBID + setenv MYQUEUE $LSB_QUEUE + setenv MYHOST $LSB_SUB_HOST + +else + + #------------------------------------------------------------------- + # You can run this interactively to check syntax, file motion, etc. + #------------------------------------------------------------------- + + setenv ORIGINALDIR `pwd` + setenv JOBNAME tiegcm_perfect + setenv JOBID $$ + setenv MYQUEUE Interactive + setenv MYHOST $HOST + +endif + +#---------------------------------------------------------------------- +# Just an echo of job attributes +#---------------------------------------------------------------------- + +echo +echo "${JOBNAME} ($JOBID) submitted from $ORIGINALDIR" +echo "${JOBNAME} ($JOBID) submitted from $MYHOST" +echo "${JOBNAME} ($JOBID) running in queue $MYQUEUE" +echo "${JOBNAME} ($JOBID) running on $MYHOST" +echo "${JOBNAME} ($JOBID) started at "`date` +echo + +#---------------------------------------------------------------------- +# Make a unique, (empty, clean) temporary directory. +#---------------------------------------------------------------------- + +#setenv CENTRALDIR /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/${JOBNAME}/job_${JOBID} +cd ../../.. +setenv CENTRALDIR `pwd`/${JOBNAME}/job_${JOBID} + +mkdir -p ${CENTRALDIR} +cd ${CENTRALDIR} + +set myname = $0 # this is the name of this script + +# some systems don't like the -v option to any of the following + +set OSTYPE = `uname -s` +switch ( ${OSTYPE} ) + case IRIX64: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + case AIX: + setenv REMOVE 'rm -rf' + setenv COPY 'cp -p' + setenv MOVE 'mv -f' + setenv LINK 'ln -s' + breaksw + default: + setenv REMOVE 'rm -rvf' + setenv COPY 'cp -v' + setenv MOVE 'mv -fv' + setenv LINK 'ln -s' + breaksw +endsw + +echo "${JOBNAME} ($JOBID) CENTRALDIR == $CENTRALDIR" + +#----------------------------------------------------------------------------- +# Set variables containing various directory names where we will GET things +# DARTDIR The location of the DART tiegcm model directory +# TIEGCMDIR The location of the TIEGCM executable +# ENSEMBLEDIR The location of the initial ensemble of TIEGCM files +# EXPERIMENT The (safe) location for the results of this run. +#----------------------------------------------------------------------------- + +set DARTDIR = /scratch/n23/gwb112/swm_project/DART/dart_tiegcm/models/tiegcm +set TIEGCMDIR = /scratch/n23/gwb112/swm_project/TIEGCM +set TIEGCMDATA = ${TIEGCMDIR}/tiegcm_res5.0_data +set EXPERIMENT = /scratch/n23/gwb112/swm_project/gold_test +set ENSEMBLEDIR = /scratch/n23/gwb112/swm_project/gold_test/initial + +#----------------------------------------------------------------------------- +# Get the DART executables, scripts, and input files +# Get the tiegcm executable, control files, and data files. +# The tiegcm initial conditions are in the next block. +#----------------------------------------------------------------------------- + +${COPY} ${DARTDIR}/work/perfect_model_obs . || exit 1 +${COPY} ${DARTDIR}/work/dart_to_model . || exit 1 +${COPY} ${DARTDIR}/work/model_to_dart . || exit 1 +${COPY} ${DARTDIR}/work/input.nml input.nml.original || exit 1 +${COPY} ${DARTDIR}/shell_scripts_gadi/advance_model.csh . || exit 1 +${COPY} ${DARTDIR}/work/obs_seq.in . || exit 1 + +${COPY} ${EXPERIMENT}/initial/obs_seq.out . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_restart_p.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm_s.nc . || exit 1 +${COPY} ${EXPERIMENT}/initial/tiegcm.nml tiegcm.nml.original || exit 1 +${COPY} ${EXPERIMENT}/initial/gpi*.nc.* . || exit 1 +${COPY} ${EXPERIMENT}/initial/imf*.nc.* . || exit 1 + +${COPY} ${TIEGCMDIR}/tiegcm.exec/tiegcm2.0 tiegcm || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/machines.ini . || exit 1 +${COPY} ${TIEGCMDIR}/tiegcm.exec/mpirun.command . || exit 1 + +${COPY} ${TIEGCMDATA}/gswm* . || exit 1 +${COPY} ${TIEGCMDATA}/wei05sc.nc . || exit 1 + +${COPY} ${ENSEMBLEDIR}/tiegcm_restart_p.nc . || exit 1 +${COPY} ${ENSEMBLEDIR}/tiegcm_s.nc . || exit 1 +${COPY} ${ENSEMBLEDIR}/tiegcm.nml tiegcm.nml.original || exit 1 + +#----------------------------------------------------------------------------- +# Remove all the comments that follow (;) symbol from tiegcm.nml namelist file +# That is a non-standard syntax for fortran namelists. +# +# Ensure that the tiegcm.nml for all the ensemble members is identical +# in all the ways that matter. This will result in a miniumum of changes +# in the advance_model.csh script. This script REQUIRES that there is a +# SINGLE tiegcm_restart_p.nc. Just keep appending all the timesteps to +# the same file. If you need to subset the large file, use the NCO +# operators. for example ncks -d time,20,30 tiegcm_restart_p.nc bob.nc +# If you need more than 300 timesteps in the file, increase it here. +#----------------------------------------------------------------------------- + +sed -e 's/;.*//' -e '/^$/ d' \ + -e "/ MXHIST_PRIM /c\ MXHIST_PRIM = 300" \ + -e "/ MXHIST_SECH /c\ MXHIST_SECH = 300" \ + -e "/ SOURCE /c\ SOURCE = 'tiegcm_restart_p.nc'" \ + -e "/ OUTPUT /c\ OUTPUT = 'tiegcm_restart_p.nc'" \ + -e "/ SECOUT /c\ SECOUT = 'tiegcm_s.nc'" \ + tiegcm.nml.original >! tiegcm.nml || exit 2 + +#----------------------------------------------------------------------------- +# Convert a TIEGCM file 'tiegcm_restart.nc' to a DART ics file 'dart_ics' +# There are some requirements for this script and advance_model.csh. +# The requirements for this script are enforced here, the requirements for +# advance_model.csh are enforced there. +# +# REQUIREMENTS: for input.nml +# model_nml : tiegcm_restart_file_name = 'tiegcm_restart_p.nc' +# model_nml : tiegcm_secondary_file_name = 'tiegcm_s.nc' +# model_nml : tiegcm_namelist_file_name = 'tiegcm.nml' +# model_to_dart_nml : file_out = 'dart_ics' +#----------------------------------------------------------------------------- +# perfect_model_obs_nml: async = 2 +# perfect_model_obs_nml: adv_ens_command = 'advance_model.csh' +# perfect_model_obs_nml: start_from_restart = .TRUE. +# perfect_model_obs_nml: restart_in_file_name = 'dart_ics' +#----------------------------------------------------------------------------- +# dart_to_model_nml : file_in = 'dart_restart' +# dart_to_model_nml : file_namelist_out = 'namelist_update' + +sed -e "/ tiegcm_restart_file_name /c\ tiegcm_restart_file_name = 'tiegcm_restart_p.nc'" \ + -e "/ tiegcm_secondary_file_name /c\ tiegcm_secondary_file_name = 'tiegcm_s.nc'" \ + -e "/ tiegcm_namelist_file_name /c\ tiegcm_namelist_file_name = 'tiegcm.nml'" \ + -e "/ file_out /c\ file_out = 'dart_ics'" \ + -e "/ async /c\ async = 2" \ + -e "/ adv_ens_command /c\ adv_ens_command = './advance_model.csh'" \ + -e "/ start_from_restart /c\ start_from_restart = .TRUE." \ + -e "/ restart_in_file_name /c\ restart_in_file_name = 'dart_ics'" \ + -e "/ file_in /c\ file_in = 'dart_restart'" \ + -e "/ file_namelist_out /c\ file_namelist_out = 'namelist_update'" \ + input.nml.original >! input.nml || exit -3 + +./model_to_dart || exit 2 + +#----------------------------------------------------------------------------- +# Run perfect_model_obs ... harvest the observations to populate obs_seq.out +# model_mod expects a generic name // advance_model.csh expects a filename +# with the ensemble member ID tacked on - must provide both. +#----------------------------------------------------------------------------- + +${REMOVE} tiegcm_restart_p.nc.0001 tiegcm_s.nc.0001 tiegcm.nml.0001 + +${LINK} tiegcm_restart_p.nc tiegcm_restart_p.nc.0001 || exit 3 +${LINK} tiegcm_s.nc tiegcm_s.nc.0001 || exit 3 +${LINK} tiegcm.nml tiegcm.nml.0001 || exit 3 + + +./perfect_model_obs || exit 3 + +#----------------------------------------------------------------------------- +# At this point, all the restart,diagnostic files are in the run/CENTRALDIR. +# You may want to move them to someplace more 'permanent'. +# +# TJH: At this point, the output files have pretty 'generic' names. +# The files could be archived with the assimilation date in their name. +#----------------------------------------------------------------------------- + +# ${MOVE} tiegcm_s.nc.0001 ${EXPERIMENT}/perfect/tiegcm_s.nc +# ${MOVE} tiegcm_restart_p.nc.0001 ${EXPERIMENT}/perfect/tiegcm_restart_p.nc +# ${MOVE} tiegcm.nml ${EXPERIMENT}/perfect +# ${MOVE} obs_seq.out ${EXPERIMENT}/perfect +# ${MOVE} True_State.nc ${EXPERIMENT}/perfect + +# ${MOVE} tiegcm_out_1 ${EXPERIMENT}/perfect/tiegcm_out +# ${MOVE} dart_log.out ${EXPERIMENT}/perfect +# ${MOVE} dart_log.nml ${EXPERIMENT}/perfect +# Good style dictates that you save the scripts so you can see what worked. + +# ${COPY} input.nml ${EXPERIMENT}/DART +# ${COPY} *.csh ${EXPERIMENT}/DART +# ${COPY} $myname ${EXPERIMENT}/DART + +echo "${JOBNAME} ($JOBID) finished at "`date` +echo "These are the files in the run directory at completion:" +ls -lrt + +exit 0 + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/models/tiegcm/work/input.nml b/models/tiegcm/work/input.nml index dd9df614e4..5d9226382d 100644 --- a/models/tiegcm/work/input.nml +++ b/models/tiegcm/work/input.nml @@ -167,14 +167,10 @@ / &obs_kind_nml - assimilate_these_obs_types = 'GPS_PROFILE', - 'COSMIC_ELECTRON_DENSITY', - 'GND_GPS_VTEC', - 'CHAMP_DENSITY', - 'GOLD_TEMPERATURE', + assimilate_these_obs_types = 'GOLD_TEMPERATURE', 'GOLD_NEMAX', 'GOLD_ON2COLUMN', - evaluate_these_obs_types = 'GPS_VTEC_EXTRAP' + evaluate_these_obs_types = 'null' / &assim_model_nml diff --git a/obs_def/obs_def_GOLD_mod.f90 b/obs_def/obs_def_GOLD_mod.f90 index 60b0e42487..b19ce20bd4 100644 --- a/obs_def/obs_def_GOLD_mod.f90 +++ b/obs_def/obs_def_GOLD_mod.f90 @@ -56,7 +56,7 @@ module obs_def_GOLD_mod KIND_ON2_DISK, & KIND_TEMPERATURE, & KIND_ELECTRON_DENSITY, & - KIND_GEOPOTENTIAL_HEIGHT, & + KIND_GEOMETRIC_HEIGHT, & KIND_ATOMIC_OXYGEN_MIXING_RATIO, & KIND_MOLEC_OXYGEN_MIXING_RATIO, & KIND_PRESSURE, & @@ -89,7 +89,7 @@ end subroutine initialize_module !----------------------------------------------------------------------------- !> Given DART state vector and a location, -!> compute ionospheric maximum electron density [/m3] +!> retrieve ionospheric maximum electron density in column [/m3] !> The istatus variable should be returned as 0 unless there is a problem subroutine get_expected_nemax(x, location, obs_val, istatus) @@ -111,10 +111,6 @@ subroutine get_expected_nemax(x, location, obs_val, istatus) if ( .not. module_initialized ) call initialize_module -call error_handler(E_ERR, 'get_expected_nemax', 'Tim has questions', & - source, revision, revdate, & - text2='seems like routine is unfinished') - istatus = 36 !initially bad return code obs_val = MISSING_R8 @@ -145,15 +141,12 @@ subroutine get_expected_nemax(x, location, obs_val, istatus) call interpolate(x, probe, KIND_ELECTRON_DENSITY, IDensityS_ie(iAlt), istatus) if (istatus /= 0) exit LEVELS - call interpolate(x, probe, KIND_GEOPOTENTIAL_HEIGHT, ALT(iAlt), istatus) - if (istatus /= 0) exit LEVELS - nAlts = nAlts+1 enddo LEVELS if (nAlts == 0) return -nemax = maxval(IDensityS_ie) +nemax = maxval(IDensityS_ie(1:nAlts)) obs_val = nemax end subroutine get_expected_nemax @@ -219,7 +212,7 @@ subroutine get_expected_on2(x, location, obs_val, istatus) if (istatus /= 0) exit LEVELS call interpolate(x, probe, KIND_MOLEC_OXYGEN_MIXING_RATIO, o2_ratio, istatus) if (istatus /= 0) exit LEVELS - call interpolate(x, probe, KIND_GEOPOTENTIAL_HEIGHT, ALT(iAlt), istatus) + call interpolate(x, probe, KIND_GEOMETRIC_HEIGHT, ALT(iAlt), istatus) if (istatus /= 0) exit LEVELS call interpolate(x, probe, KIND_PRESSURE, press, istatus) if (istatus /= 0) exit LEVELS diff --git a/observations/GOLD/convert_gold_combined.f90 b/observations/GOLD/convert_gold_combined.f90 new file mode 100644 index 0000000000..ce2979b047 --- /dev/null +++ b/observations/GOLD/convert_gold_combined.f90 @@ -0,0 +1,430 @@ +! 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_gold_combined + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! convert_gold_nmax - program that reads a GOLD netCDF TDISK and ON2 +! observation files and writes a DART +! obs_seq file using the DART library routines. +! +! created Dec. 2007 Ryan Torn, NCAR/MMM (MADIS) +! modified Dec. 2008 Soyoung Ha and David Dowell, NCAR/MMM (MADIS) +! modified Aug. 2020 George Bowden, UNSW Canberra +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISHEIGHT, VERTISPRESSURE, VERTISUNDEF +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_TEMPERATURE, GOLD_ON2COLUMN, GOLD_NEMAX +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_tdisk_netcdf_file = 'gold_tdisk_input.nc' +character(len=128) :: gold_on2_netcdf_file = 'gold_on2_input.nc' +character(len=128) :: gold_nemax_netcdf_file = 'gold_nemax_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: use_tdisk = .true. +logical :: use_on2 = .true. +logical :: use_nemax = .true. +logical :: debug = .true. + +namelist /GOLD_combined_nc_to_obs_nml/ & + gold_tdisk_netcdf_file, & + gold_on2_netcdf_file, & + gold_nemax_netcdf_file, & + gold_out_file, & + use_tdisk, & + use_on2, & + use_nemax, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid_tdisk, ncid_on2, ncid_nemax +integer :: nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs_tdisk, nlat_tdisk, nlon_tdisk, nscan_tdisk, nmsl_tdisk +integer :: nobs_on2, nlat_on2, nlon_on2, nscan_on2, nmsl_on2 +integer :: nobs_nemax, nlat_nemax, nlon_nemax, nscan_nemax, nmsl_nemax + +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: pres, height, qc, qerr, oerr +real(r8) :: tdisk_miss, on2_miss, nemax_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs_tdisk(:,:,:,:) +real(r8), allocatable :: lat_tdisk(:,:,:), lon_tdisk(:,:,:) +character, allocatable :: tobs_on2(:,:,:,:) +real(r8), allocatable :: lat_on2(:,:,:), lon_on2(:,:,:) +character, allocatable :: tobs_nemax(:,:,:) +real(r8), allocatable :: lat_nemax(:,:,:), lon_nemax(:,:,:) + +real(r8), allocatable :: tdisk(:,:,:), tdisk_unc_ran(:,:,:), & + tdisk_unc_sys(:,:,:), tdisk_unc_mod(:,:,:) +real(r8), allocatable :: on2(:,:,:), on2_unc_ran(:,:,:), & + on2_unc_sys(:,:,:), on2_unc_mod(:,:,:) +real(r8), allocatable :: nemax(:,:,:), nemax_unc_ran(:,:,:), & + nemax_unc_sys(:,:,:), nemax_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_combined') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_combined_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_combined_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_combined_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_tdisk_netcdf_file, nf90_nowrite, ncid_tdisk), & + 'convert_gold_combined', 'opening file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_open(gold_on2_netcdf_file, nf90_nowrite, ncid_on2), & + 'convert_gold_combined', 'opening file '//trim(gold_on2_netcdf_file) ) +call nc_check( nf90_open(gold_nemax_netcdf_file, nf90_nowrite, ncid_nemax), & + 'convert_gold_combined', 'opening file '//trim(gold_nemax_netcdf_file) ) + +call getdimlen(ncid_tdisk, "nlats", nlat_tdisk) +call getdimlen(ncid_tdisk, "nlons", nlon_tdisk) +call getdimlen(ncid_tdisk, "nscans", nscan_tdisk) +call getdimlen(ncid_tdisk, "max_string_len ", nmsl_tdisk) +call set_missing_name("missing_value") + +call getdimlen(ncid_on2, "nlats", nlat_on2) +call getdimlen(ncid_on2, "nlons", nlon_on2) +call getdimlen(ncid_on2, "nscans", nscan_on2) +call getdimlen(ncid_on2, "max_string_len ", nmsl_on2) +call set_missing_name("missing_value") + +call getdimlen(ncid_nemax, "nlats", nlat_nemax) +call getdimlen(ncid_nemax, "nlons", nlon_nemax) +call getdimlen(ncid_nemax, "nscans", nscan_nemax) +call getdimlen(ncid_nemax, "max_string_len ", nmsl_nemax) +call set_missing_name("missing_value") + +nobs_tdisk = nlat_tdisk * nlon_tdisk * nscan_tdisk +nobs_on2 = nlat_on2 * nlon_on2 * nscan_on2 +nobs_nemax = nlat_nemax * nlon_nemax * nscan_nemax +nvars = 1 +! Check meaning of nvars + +! Allocate arrays for tdisk +allocate( lat_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( lon_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_ran(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_sys(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_mod(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_tdisk(24,nlon_tdisk,nlat_tdisk,nscan_tdisk)) + +! Allocate arrays for on2 +allocate( lat_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( lon_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_ran(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_sys(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_mod(nlon_on2,nlat_on2,nscan_on2)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_on2(24,nlon_on2,nlat_on2,nscan_on2)) + +! Allocate arrays for nemax +allocate( lat_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( lon_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_ran(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_sys(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_mod(nlon_nemax,nlat_nemax,nscan_nemax)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_nemax(24,nlon_nemax,nscan_nemax)) + +! read in the data arrays for tdisk +call getvar_real_3d(ncid_tdisk, "latitude", lat_tdisk) ! latitudes +call getvar_real_3d(ncid_tdisk, "longitude", lon_tdisk) ! longitudes +call getvar_real_3d(ncid_tdisk, "tdisk", tdisk, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_ran", tdisk_unc_ran, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_sys", tdisk_unc_sys, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_mod", tdisk_unc_mod, tdisk_miss) ! maximum electron concentration + +! read in the data arrays for on2 +call getvar_real_3d(ncid_on2, "latitude", lat_on2) ! latitudes +call getvar_real_3d(ncid_on2, "longitude", lon_on2) ! longitudes +call getvar_real_3d(ncid_on2, "on2", on2, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_ran", on2_unc_ran, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_sys", on2_unc_sys, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_mod", on2_unc_mod, on2_miss) ! maximum electron concentration + +! read in the data arrays for nemax +call getvar_real_3d(ncid_nemax, "latitude", lat_nemax) ! latitudes +call getvar_real_3d(ncid_nemax, "longitude", lon_nemax) ! longitudes +call getvar_real_3d(ncid_nemax, "nmax", nemax, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_ran", nemax_unc_ran, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_sys", nemax_unc_sys, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_mod", nemax_unc_mod, nemax_miss) ! maximum electron concentration + +! read the data for the time array tdisk +call nc_check( nf90_inq_varid(ncid_tdisk, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_tdisk, varid, tobs_tdisk, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_tdisk, nlat_tdisk, nscan_tdisk /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array on2 +call nc_check( nf90_inq_varid(ncid_on2, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_on2, varid, tobs_on2, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_on2, nlat_on2, nscan_on2 /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array nemax +call nc_check( nf90_inq_varid(ncid_nemax, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_nemax, varid, tobs_nemax, & + start = (/ 1, 1, 1 /), count = (/ 24, nlon_nemax, nscan_nemax /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid_tdisk), & + 'convert_gold_combined', 'closing file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_close(ncid_on2), & + 'convert_gold_combined', 'closing file '//trim(gold_on2_netcdf_file) ) +call nc_check( nf90_close(ncid_nemax), & + 'convert_gold_combined', 'closing file '//trim(gold_nemax_netcdf_file) ) + +! either read existing obs_seq or create a new one +call static_init_obs_sequence() +call init_obs(obs, num_copies, num_qc) +call init_obs(prev_obs, num_copies, num_qc) + +inquire(file=gold_out_file, exist=file_exist) + +if ( file_exist ) then + + ! existing file found, append to it + call read_obs_seq(gold_out_file, 0, 0, nvars*(nobs_tdisk + nobs_on2 + nobs_nemax), obs_seq) + +else + + ! create a new one + call init_obs_sequence(obs_seq, num_copies, num_qc, nvars*(nobs_tdisk + nobs_on2 + nobs_nemax)) + do i = 1, num_copies + call set_copy_meta_data(obs_seq, i, 'GOLD observation') + end do + do i = 1, num_qc + call set_qc_meta_data(obs_seq, i, 'Data QC') + end do + +endif + +! Set the DART data quality control. Be consistent with NCEP codes; +! 0 is 'must use', 1 is good, no reason not to use it. +qc = 1.0_r8 + +year_obs = 1970 +month_obs = 1 +day_obs = 1 +hour_obs = 0 +minute_obs = 0 +second_obs = 0 + +nused = 0 +scanloop_tdisk: do k = 1, nscan_tdisk + lonloop_tdisk: do l = 1, nlon_tdisk + latloop_tdisk: do m = 1, nlat_tdisk + + if ('*' == tobs_tdisk(1,l,m,k)) cycle latloop_tdisk + do j = 1, 24 + tobs_string(j:j) = tobs_tdisk(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon_tdisk(l,m,k) < 180.0_r8 .and. lon_tdisk(l,m,k) > -180.0_r8)) cycle latloop_tdisk + if (.not. (lat_tdisk(l,m,k) < 90.0_r8 .and. lat_tdisk(l,m,k) > -90.0_r8)) cycle latloop_tdisk + + if ( lon_tdisk(l,m,k) < 0.0_r8 ) lon_tdisk(l,m,k) = lon_tdisk(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Fixed height of 150 km + height = 1.5E5 + + !oerr = (tdisk_unc_ran(l,m,k)**2.0 + tdisk_unc_sys(l,m,k)**2.0)**0.5 + oerr = tdisk_unc_ran(l,m,k) + + !if (not(isnan(tdisk(l,m,k)))) then + if ((not(isnan(tdisk(l,m,k)))) .and. (not(isnan(oerr)))) then + call create_3d_obs(lat_tdisk(l,m,k), lon_tdisk(l,m,k), height, VERTISHEIGHT, tdisk(l,m,k), & + GOLD_TEMPERATURE, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_tdisk + end do lonloop_tdisk +end do scanloop_tdisk + +scanloop_on2: do k = 1, nscan_on2 + lonloop_on2: do l = 1, nlon_on2 + latloop_on2: do m = 1, nlat_on2 + + if ('*' == tobs_on2(1,l,m,k)) cycle latloop_on2 + do j = 1, 24 + tobs_string(j:j) = tobs_on2(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon_on2(l,m,k) < 180.0_r8 .and. lon_on2(l,m,k) > -180.0_r8)) cycle latloop_on2 + if (.not. (lat_on2(l,m,k) < 90.0_r8 .and. lat_on2(l,m,k) > -90.0_r8)) cycle latloop_on2 + + if ( lon_on2(l,m,k) < 0.0_r8 ) lon_on2(l,m,k) = lon_on2(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + !pres = 5.0E-5 + ! Fixed height of 150 km + height = 1.5E5 + + oerr = (on2_unc_ran(l,m,k)**2.0 + on2_unc_sys(l,m,k)**2.0)**0.5 + + if ((not(isnan(on2(l,m,k)))) .and. (not(isnan(oerr)))) then + !call create_3d_obs(lat_on2(l,m,k), lon_on2(l,m,k), pres, VERTISPRESSURE, on2(l,m,k), & + ! GOLD_ON2COLUMN, oerr, oday, osec, qc, obs) + call create_3d_obs(lat_on2(l,m,k), lon_on2(l,m,k), height, VERTISUNDEF , on2(l,m,k), & + GOLD_ON2COLUMN, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_on2 + end do lonloop_on2 +end do scanloop_on2 + +scanloop_nemax: do k = 1, nscan_nemax + lonloop_nemax: do l = 1, nlon_nemax + + if ('*' == tobs_nemax(1,l,k)) cycle lonloop_nemax + do j = 1, 24 + tobs_string(j:j) = tobs_nemax(j,l,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + latloop_nemax: do m = 1, nlat_nemax + + if (.not. (lon_nemax(l,m,k) < 180.0_r8 .and. lon_nemax(l,m,k) > -180.0_r8)) cycle latloop_nemax + if (.not. (lat_nemax(l,m,k) < 90.0_r8 .and. lat_nemax(l,m,k) > -90.0_r8)) cycle latloop_nemax + + if ( lon_nemax(l,m,k) < 0.0_r8 ) lon_nemax(l,m,k) = lon_nemax(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + !pres = 5.0E-5 + ! Fixed height of 150 km + height = 1.5E5 + + oerr = (nemax_unc_ran(l,m,k)**2.0 + nemax_unc_sys(l,m,k)**2.0)**0.5 + + if ((not(isnan(nemax(l,m,k)))) .and. (not(isnan(oerr)))) then + !call create_3d_obs(lat_nemax(l,m,k), lon_nemax(l,m,k), pres, VERTISPRESSURE, nemax(l,m,k), & + ! GOLD_NEMAX, oerr, oday, osec, qc, obs) + call create_3d_obs(lat_nemax(l,m,k), lon_nemax(l,m,k), height, VERTISUNDEF , nemax(l,m,k), & + GOLD_NEMAX, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_nemax + end do lonloop_nemax +end do scanloop_nemax + +100 continue + +print*,"Finished processing, about to write" + +! if we added any obs to the sequence, write it now. +if ( get_num_obs(obs_seq) > 0 ) call write_obs_seq(obs_seq, gold_out_file) + +! end of main program +call finalize_utilities() + + +end program convert_gold_combined + +! +! $URL$ +! $Id$ +! $Revision$ +! $Date$ diff --git a/observations/GOLD/convert_gold_combined_mess.f90 b/observations/GOLD/convert_gold_combined_mess.f90 new file mode 100644 index 0000000000..eea843644e --- /dev/null +++ b/observations/GOLD/convert_gold_combined_mess.f90 @@ -0,0 +1,641 @@ +! 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_gold_combined + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! convert_gold_nmax - program that reads a GOLD netCDF TDISK and ON2 +! observation files and writes a DART +! obs_seq file using the DART library routines. +! +! created Dec. 2007 Ryan Torn, NCAR/MMM (MADIS) +! modified Dec. 2008 Soyoung Ha and David Dowell, NCAR/MMM (MADIS) +! modified Aug. 2020 George Bowden, UNSW Canberra +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISHEIGHT, VERTISPRESSURE +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_TEMPERATURE, GOLD_ON2COLUMN, GOLD_NEMAX +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_tdisk_netcdf_file = 'gold_tdisk_input.nc' +character(len=128) :: gold_on2_netcdf_file = 'gold_on2_input.nc' +character(len=128) :: gold_nemax_netcdf_file = 'gold_nemax_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: use_tdisk = .true. +logical :: use_on2 = .true. +logical :: use_nemax = .true. +logical :: debug = .true. + +namelist /GOLD_combined_nc_to_obs_nml/ & + gold_tdisk_netcdf_file, & + gold_on2_netcdf_file, & + gold_nemax_netcdf_file, & + gold_out_file, & + use_tdisk, & + use_on2, & + use_nemax, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid_tdisk, ncid_on2, ncid_nemax +integer :: nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs_tdisk, nlat_tdisk, nlon_tdisk, nscan_tdisk, nmsl_tdisk +integer :: nobs_on2, nlat_on2, nlon_on2, nscan_on2, nmsl_on2 +integer :: nobs_nemax, nlat_nemax, nlon_nemax, nscan_nemax, nmsl_nemax + +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: pres, height, qc, qerr, oerr +real(r8) :: tdisk_miss, on2_miss, nemax_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs_tdisk(:,:,:,:) +real(r8), allocatable :: lat_tdisk(:,:,:), lon_tdisk(:,:,:) +character, allocatable :: tobs_on2(:,:,:,:) +real(r8), allocatable :: lat_on2(:,:,:), lon_on2(:,:,:) +character, allocatable :: tobs_nemax(:,:,:) +real(r8), allocatable :: lat_nemax(:,:,:), lon_nemax(:,:,:) + +real(r8), allocatable :: tdisk(:,:,:), tdisk_unc_ran(:,:,:), & + tdisk_unc_sys(:,:,:), tdisk_unc_mod(:,:,:) +real(r8), allocatable :: on2(:,:,:), on2_unc_ran(:,:,:), & + on2_unc_sys(:,:,:), on2_unc_mod(:,:,:) +real(r8), allocatable :: nemax(:,:,:), nemax_unc_ran(:,:,:), & + nemax_unc_sys(:,:,:), nemax_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_combined') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_combined_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_combined_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_combined_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_tdisk_netcdf_file, nf90_nowrite, ncid_tdisk), & + 'convert_gold_combined', 'opening file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_open(gold_on2_netcdf_file, nf90_nowrite, ncid_on2), & + 'convert_gold_combined', 'opening file '//trim(gold_on2_netcdf_file) ) +call nc_check( nf90_open(gold_nemax_netcdf_file, nf90_nowrite, ncid_nemax), & + 'convert_gold_combined', 'opening file '//trim(gold_nemax_netcdf_file) ) + +call getdimlen(ncid_tdisk, "nlats", nlat_tdisk) +call getdimlen(ncid_tdisk, "nlons", nlon_tdisk) +call getdimlen(ncid_tdisk, "nscans", nscan_tdisk) +call getdimlen(ncid_tdisk, "max_string_len ", nmsl_tdisk) +call set_missing_name("missing_value") + +call getdimlen(ncid_on2, "nlats", nlat_on2) +call getdimlen(ncid_on2, "nlons", nlon_on2) +call getdimlen(ncid_on2, "nscans", nscan_on2) +call getdimlen(ncid_on2, "max_string_len ", nmsl_on2) +call set_missing_name("missing_value") + +call getdimlen(ncid_nemax, "nlats", nlat_nemax) +call getdimlen(ncid_nemax, "nlons", nlon_nemax) +call getdimlen(ncid_nemax, "nscans", nscan_nemax) +call getdimlen(ncid_nemax, "max_string_len ", nmsl_nemax) +call set_missing_name("missing_value") + +nobs_tdisk = nlat_tdisk * nlon_tdisk * nscan_tdisk +nobs_on2 = nlat_on2 * nlon_on2 * nscan_on2 +nobs_nemax = nlat_nemax * nlon_nemax * nscan_nemax +nvars = 1 +! Check meaning of nvars + +! Allocate arrays for tdisk +allocate( lat_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( lon_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_ran(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_sys(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_mod(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_tdisk(24,nlon_tdisk,nlat_tdisk,nscan_tdisk)) + +! Allocate arrays for on2 +allocate( lat_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( lon_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_ran(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_sys(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_mod(nlon_on2,nlat_on2,nscan_on2)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_on2(24,nlon_on2,nlat_on2,nscan_on2)) + +! Allocate arrays for nemax +allocate( lat_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( lon_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_ran(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_sys(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_mod(nlon_nemax,nlat_nemax,nscan_nemax)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_nemax(24,nlon_nemax,nscan_nemax)) + +! read in the data arrays for tdisk +call getvar_real_3d(ncid_tdisk, "latitude", lat_tdisk) ! latitudes +call getvar_real_3d(ncid_tdisk, "longitude", lon_tdisk) ! longitudes +call getvar_real_3d(ncid_tdisk, "tdisk", tdisk, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_ran", tdisk_unc_ran, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_sys", tdisk_unc_sys, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_mod", tdisk_unc_mod, tdisk_miss) ! maximum electron concentration + +! read in the data arrays for on2 +call getvar_real_3d(ncid_on2, "latitude", lat_on2) ! latitudes +call getvar_real_3d(ncid_on2, "longitude", lon_on2) ! longitudes +call getvar_real_3d(ncid_on2, "on2", on2, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_ran", on2_unc_ran, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_sys", on2_unc_sys, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_mod", on2_unc_mod, on2_miss) ! maximum electron concentration + +! read in the data arrays for nemax +call getvar_real_3d(ncid_nemax, "latitude", lat_nemax) ! latitudes +call getvar_real_3d(ncid_nemax, "longitude", lon_nemax) ! longitudes +call getvar_real_3d(ncid_nemax, "nmax", nemax, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_ran", nemax_unc_ran, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_sys", nemax_unc_sys, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_mod", nemax_unc_mod, nemax_miss) ! maximum electron concentration + +! read the data for the time array tdisk +call nc_check( nf90_inq_varid(ncid_tdisk, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_tdisk, varid, tobs_tdisk, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_tdisk, nlat_tdisk, nscan_tdisk /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array on2 +call nc_check( nf90_inq_varid(ncid_on2, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_on2, varid, tobs_on2, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_on2, nlat_on2, nscan_on2 /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array nemax +call nc_check( nf90_inq_varid(ncid_nemax, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_nemax, varid, tobs_nemax, & + start = (/ 1, 1, 1 /), count = (/ 24, nlon_nemax, nscan_nemax /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid_tdisk), & + ' +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISHEIGHT, VERTISPRESSURE +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_TEMPERATURE, GOLD_ON2COLUMN, GOLD_NEMAX +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_tdisk_netcdf_file = 'gold_tdisk_input.nc' +character(len=128) :: gold_on2_netcdf_file = 'gold_on2_input.nc' +character(len=128) :: gold_nemax_netcdf_file = 'gold_nemax_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: use_tdisk = .true. +logical :: use_on2 = .true. +logical :: use_nemax = .true. +logical :: debug = .true. + +namelist /GOLD_combined_nc_to_obs_nml/ & + gold_tdisk_netcdf_file, & + gold_on2_netcdf_file, & + gold_nemax_netcdf_file, & + gold_out_file, & + use_tdisk, & + use_on2, & + use_nemax, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid_tdisk, ncid_on2, ncid_nemax +integer :: nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs_tdisk, nlat_tdisk, nlon_tdisk, nscan_tdisk, nmsl_tdisk +integer :: nobs_on2, nlat_on2, nlon_on2, nscan_on2, nmsl_on2 +integer :: nobs_nemax, nlat_nemax, nlon_nemax, nscan_nemax, nmsl_nemax + +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: pres, height, qc, qerr, oerr +real(r8) :: tdisk_miss, on2_miss, nemax_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs_tdisk(:,:,:,:) +real(r8), allocatable :: lat_tdisk(:,:,:), lon_tdisk(:,:,:) +character, allocatable :: tobs_on2(:,:,:,:) +real(r8), allocatable :: lat_on2(:,:,:), lon_on2(:,:,:) +character, allocatable :: tobs_nemax(:,:,:) +real(r8), allocatable :: lat_nemax(:,:,:), lon_nemax(:,:,:) + +real(r8), allocatable :: tdisk(:,:,:), tdisk_unc_ran(:,:,:), & + tdisk_unc_sys(:,:,:), tdisk_unc_mod(:,:,:) +real(r8), allocatable :: on2(:,:,:), on2_unc_ran(:,:,:), & + on2_unc_sys(:,:,:), on2_unc_mod(:,:,:) +real(r8), allocatable :: nemax(:,:,:), nemax_unc_ran(:,:,:), & + nemax_unc_sys(:,:,:), nemax_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_combined') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_combined_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_combined_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_combined_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_tdisk_netcdf_file, nf90_nowrite, ncid_tdisk), & + 'convert_gold_combined', 'opening file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_open(gold_on2_netcdf_file, nf90_nowrite, ncid_on2), & + 'convert_gold_combined', 'opening file '//trim(gold_on2_netcdf_file) ) +call nc_check( nf90_open(gold_nemax_netcdf_file, nf90_nowrite, ncid_nemax), & + 'convert_gold_combined', 'opening file '//trim(gold_nemax_netcdf_file) ) + +call getdimlen(ncid_tdisk, "nlats", nlat_tdisk) +call getdimlen(ncid_tdisk, "nlons", nlon_tdisk) +call getdimlen(ncid_tdisk, "nscans", nscan_tdisk) +call getdimlen(ncid_tdisk, "max_string_len ", nmsl_tdisk) +call set_missing_name("missing_value") + +call getdimlen(ncid_on2, "nlats", nlat_on2) +call getdimlen(ncid_on2, "nlons", nlon_on2) +call getdimlen(ncid_on2, "nscans", nscan_on2) +call getdimlen(ncid_on2, "max_string_len ", nmsl_on2) +call set_missing_name("missing_value") + +call getdimlen(ncid_nemax, "nlats", nlat_nemax) +call getdimlen(ncid_nemax, "nlons", nlon_nemax) +call getdimlen(ncid_nemax, "nscans", nscan_nemax) +call getdimlen(ncid_nemax, "max_string_len ", nmsl_nemax) +call set_missing_name("missing_value") + +nobs_tdisk = nlat_tdisk * nlon_tdisk * nscan_tdisk +nobs_on2 = nlat_on2 * nlon_on2 * nscan_on2 +nobs_nemax = nlat_nemax * nlon_nemax * nscan_nemax +nvars = 1 +! Check meaning of nvars + +! Allocate arrays for tdisk +allocate( lat_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( lon_tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_ran(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_sys(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +allocate( tdisk_unc_mod(nlon_tdisk,nlat_tdisk,nscan_tdisk)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_tdisk(24,nlon_tdisk,nlat_tdisk,nscan_tdisk)) + +! Allocate arrays for on2 +allocate( lat_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( lon_on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_ran(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_sys(nlon_on2,nlat_on2,nscan_on2)) +allocate( on2_unc_mod(nlon_on2,nlat_on2,nscan_on2)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_on2(24,nlon_on2,nlat_on2,nscan_on2)) + +! Allocate arrays for nemax +allocate( lat_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( lon_nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_ran(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_sys(nlon_nemax,nlat_nemax,nscan_nemax)) +allocate( nemax_unc_mod(nlon_nemax,nlat_nemax,nscan_nemax)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs_nemax(24,nlon_nemax,nscan_nemax)) + +! read in the data arrays for tdisk +call getvar_real_3d(ncid_tdisk, "latitude", lat_tdisk) ! latitudes +call getvar_real_3d(ncid_tdisk, "longitude", lon_tdisk) ! longitudes +call getvar_real_3d(ncid_tdisk, "tdisk", tdisk, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_ran", tdisk_unc_ran, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_sys", tdisk_unc_sys, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid_tdisk, "tdisk_unc_mod", tdisk_unc_mod, tdisk_miss) ! maximum electron concentration + +! read in the data arrays for on2 +call getvar_real_3d(ncid_on2, "latitude", lat_on2) ! latitudes +call getvar_real_3d(ncid_on2, "longitude", lon_on2) ! longitudes +call getvar_real_3d(ncid_on2, "on2", on2, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_ran", on2_unc_ran, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_sys", on2_unc_sys, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid_on2, "on2_unc_mod", on2_unc_mod, on2_miss) ! maximum electron concentration + +! read in the data arrays for nemax +call getvar_real_3d(ncid_nemax, "latitude", lat_nemax) ! latitudes +call getvar_real_3d(ncid_nemax, "longitude", lon_nemax) ! longitudes +call getvar_real_3d(ncid_nemax, "nmax", nemax, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_ran", nemax_unc_ran, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_sys", nemax_unc_sys, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid_nemax, "nmax_unc_mod", nemax_unc_mod, nemax_miss) ! maximum electron concentration + +! read the data for the time array tdisk +call nc_check( nf90_inq_varid(ncid_tdisk, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_tdisk, varid, tobs_tdisk, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_tdisk, nlat_tdisk, nscan_tdisk /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array on2 +call nc_check( nf90_inq_varid(ncid_on2, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_on2, varid, tobs_on2, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon_on2, nlat_on2, nscan_on2 /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +! read the data for the time array nemax +call nc_check( nf90_inq_varid(ncid_nemax, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid_nemax, varid, tobs_nemax, & + start = (/ 1, 1, 1 /), count = (/ 24, nlon_nemax, nscan_nemax /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid_tdisk), & + 'convert_gold_combined', 'closing file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_close(ncid_on2), & + 'convert_gold_combined', 'closing file '//trim(gold_tdisk_netcdf_file) ) +call nc_check( nf90_close(ncid_on2), & + 'convert_gold_combined', 'closing file '//trim(gold_on2_netcdf_file) ) +call nc_check( nf90_close(ncid_nemax), & + 'convert_gold_combined', 'closing file '//trim(gold_nemax_netcdf_file) ) + +! either read existing obs_seq or create a new one +call static_init_obs_sequence() +call init_obs(obs, num_copies, num_qc) +call init_obs(prev_obs, num_copies, num_qc) + +inquire(file=gold_out_file, exist=file_exist) + +if ( file_exist ) then + + ! existing file found, append to it + call read_obs_seq(gold_out_file, 0, 0, nvars*(nobs_tdisk + nobs_on2 + nobs_nemax), obs_seq) + +else + + ! create a new one + call init_obs_sequence(obs_seq, num_copies, num_qc, nvars*(nobs_tdisk + nobs_on2 + nobs_nemax)) + do i = 1, num_copies + call set_copy_meta_data(obs_seq, i, 'GOLD observation') + end do + do i = 1, num_qc + call set_qc_meta_data(obs_seq, i, 'Data QC') + end do + +endif + +! Set the DART data quality control. Be consistent with NCEP codes; +! 0 is 'must use', 1 is good, no reason not to use it. +qc = 1.0_r8 + +year_obs = 1970 +month_obs = 1 +day_obs = 1 +hour_obs = 0 +minute_obs = 0 +second_obs = 0 + +nused = 0 +scanloop_tdisk: do k = 1, nscan_tdisk + lonloop_tdisk: do l = 1, nlon_tdisk + latloop_tdisk: do m = 1, nlat_tdisk + + if ('*' == tobs_tdisk(1,l,m,k)) cycle latloop_tdisk + do j = 1, 24 + tobs_string(j:j) = tobs_tdisk(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon_tdisk(l,m,k) < 180.0_r8 .and. lon_tdisk(l,m,k) > -180.0_r8)) cycle latloop_tdisk + if (.not. (lat_tdisk(l,m,k) < 90.0_r8 .and. lat_tdisk(l,m,k) > -90.0_r8)) cycle latloop_tdisk + + if ( lon_tdisk(l,m,k) < 0.0_r8 ) lon_tdisk(l,m,k) = lon_tdisk(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Fixed height of 150 km + height = 1.5E2 + + oerr = (tdisk_unc_ran(l,m,k)**2.0 + tdisk_unc_sys(l,m,k)**2.0)**0.5 + + if (not(isnan(tdisk(l,m,k)))) then + call create_3d_obs(lat_tdisk(l,m,k), lon_tdisk(l,m,k), height, VERTISHEIGHT, tdisk(l,m,k), & + GOLD_TEMPERATURE, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_tdisk + end do lonloop_tdisk +end do scanloop_tdisk + +scanloop_on2: do k = 1, nscan_on2 + lonloop_on2: do l = 1, nlon_on2 + latloop_on2: do m = 1, nlat_on2 + + if ('*' == tobs_on2(1,l,m,k)) cycle latloop_on2 + do j = 1, 24 + tobs_string(j:j) = tobs_on2(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon_on2(l,m,k) < 180.0_r8 .and. lon_on2(l,m,k) > -180.0_r8)) cycle latloop_on2 + if (.not. (lat_on2(l,m,k) < 90.0_r8 .and. lat_on2(l,m,k) > -90.0_r8)) cycle latloop_on2 + + if ( lon_on2(l,m,k) < 0.0_r8 ) lon_on2(l,m,k) = lon_on2(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + pres = 5.0E-5 + + oerr = (on2_unc_ran(l,m,k)**2.0 + on2_unc_sys(l,m,k)**2.0)**0.5 + + if (not(isnan(on2(l,m,k)))) then + call create_3d_obs(lat_on2(l,m,k), lon_on2(l,m,k), pres, VERTISPRESSURE, on2(l,m,k), & + GOLD_ON2COLUMN, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_on2 + end do lonloop_on2 +end do scanloop_on2 + +scanloop_nemax: do k = 1, nscan_nemax + lonloop_nemax: do l = 1, nlon_nemax + + if ('*' == tobs_nemax(1,l,k)) cycle lonloop_nemax + do j = 1, 24 + tobs_string(j:j) = tobs_nemax(j,l,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + latloop_nemax: do m = 1, nlat_nemax + + if (.not. (lon_nemax(l,m,k) < 180.0_r8 .and. lon_nemax(l,m,k) > -180.0_r8)) cycle latloop_nemax + if (.not. (lat_nemax(l,m,k) < 90.0_r8 .and. lat_nemax(l,m,k) > -90.0_r8)) cycle latloop_nemax + + if ( lon_nemax(l,m,k) < 0.0_r8 ) lon_nemax(l,m,k) = lon_nemax(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + pres = 5.0E-5 + + oerr = (nemax_unc_ran(l,m,k)**2.0 + nemax_unc_sys(l,m,k)**2.0)**0.5 + + if (not(isnan(nemax(l,m,k)))) then + call create_3d_obs(lat_nemax(l,m,k), lon_nemax(l,m,k), pres, VERTISPRESSURE, nemax(l,m,k), & + GOLD_NEMAX, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop_nemax + end do lonloop_nemax +end do scanloop_nemax + +100 continue + +print*,"Finished processing, about to write" + +! if we added any obs to the sequence, write it now. +if ( get_num_obs(obs_seq) > 0 ) call write_obs_seq(obs_seq, gold_out_file) + +! end of main program +call finalize_utilities() + + +end program convert_gold_combined + +! +! $URL$ +! $Id$ +! $Revision$ +! $Date$ diff --git a/observations/GOLD/convert_gold_nemax.f90 b/observations/GOLD/convert_gold_nemax.f90 new file mode 100644 index 0000000000..b5b8bacafa --- /dev/null +++ b/observations/GOLD/convert_gold_nemax.f90 @@ -0,0 +1,259 @@ +! 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_gold_nemax + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! convert_gold_nmax - program that reads a GOLD netCDF NMAX +! observation file and writes a DART +! obs_seq file using the DART library routines. +! +! created Dec. 2007 Ryan Torn, NCAR/MMM (MADIS) +! modified Dec. 2008 Soyoung Ha and David Dowell, NCAR/MMM (MADIS) +! modified Jun. 2020 George Bowden, UNSW Canberra +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISPRESSURE, VERTISHEIGHT, VERTISUNDEF +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_NEMAX +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_netcdf_file = 'gold_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: debug = .true. + +namelist /GOLD_nemax_nc_to_obs_nml/ & + gold_netcdf_file, & + gold_out_file, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid, nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs, nlat, nlon, nscan, nmsl +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: pres, height, qc, qerr, oerr, nemax_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs(:,:,:) +real(r8), allocatable :: lat(:,:,:), lon(:,:,:) +real(r8), allocatable :: nemax(:,:,:), nemax_unc_ran(:,:,:), & + nemax_unc_sys(:,:,:), nemax_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_nemax') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_nemax_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_nemax_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_nemax_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_netcdf_file, nf90_nowrite, ncid), & + 'convert_gold_nemax', 'opening file '//trim(gold_netcdf_file) ) + +call getdimlen(ncid, "nlats", nlat) +call getdimlen(ncid, "nlons", nlon) +call getdimlen(ncid, "nscans", nscan) +call getdimlen(ncid, "max_string_len ", nmsl) +call set_missing_name("missing_value") + +!print*,"nlat = ",nlat +!print*,"nlon = ",nlon +!print*,"nscan = ",nscan +!print*,"nmsl = ",nmsl + +nobs = nlat * nlon * nscan +nvars = 1 + +!allocate( lat(nobs)) ; allocate( lon(nobs)) +!allocate( nemax(nobs)) ; allocate( nemax_unc_ran(nobs)) +!allocate( nemax_unc_sys(nobs)) ; allocate( nemax_unc_mod(nobs)) +!allocate( tobs(nmsl * nlon * nscan)) + +allocate( lat(nlon,nlat,nscan)) +allocate( lon(nlon,nlat,nscan)) +allocate( nemax(nlon,nlat,nscan)) +allocate( nemax_unc_ran(nlon,nlat,nscan)) +allocate( nemax_unc_sys(nlon,nlat,nscan)) +allocate( nemax_unc_mod(nlon,nlat,nscan)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs(24,nlon,nscan)) + +! read in the data arrays +call getvar_real_3d(ncid, "latitude", lat) ! latitudes +call getvar_real_3d(ncid, "longitude", lon) ! longitudes +call getvar_real_3d(ncid, "nmax", nemax, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "nmax_unc_ran", nemax_unc_ran, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "nmax_unc_sys", nemax_unc_sys, nemax_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "nmax_unc_mod", nemax_unc_mod, nemax_miss) ! maximum electron concentration + +! read the data for the time array +call nc_check( nf90_inq_varid(ncid, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +!call nc_check( nf90_get_var(ncid, varid, tobs), & +! 'getvar_char', 'getting var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid, varid, tobs, & + start = (/ 1, 1, 1 /), count = (/ 24, nlon, nscan /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid), & + 'convert_gold_nemax', 'closing file '//trim(gold_netcdf_file) ) + +! either read existing obs_seq or create a new one +call static_init_obs_sequence() +call init_obs(obs, num_copies, num_qc) +call init_obs(prev_obs, num_copies, num_qc) + +inquire(file=gold_out_file, exist=file_exist) + +if ( file_exist ) then + + ! existing file found, append to it + call read_obs_seq(gold_out_file, 0, 0, nvars*nobs, obs_seq) + +else + + ! create a new one + call init_obs_sequence(obs_seq, num_copies, num_qc, nvars*nobs) + do i = 1, num_copies + call set_copy_meta_data(obs_seq, i, 'GOLD observation') + end do + do i = 1, num_qc + call set_qc_meta_data(obs_seq, i, 'Data QC') + end do + +endif + +! Set the DART data quality control. Be consistent with NCEP codes; +! 0 is 'must use', 1 is good, no reason not to use it. +qc = 1.0_r8 + +year_obs = 1970 +month_obs = 1 +day_obs = 1 +hour_obs = 0 +minute_obs = 0 +second_obs = 0 + +nused = 0 +scanloop: do k = 1, nscan + lonloop: do l = 1, nlon + + if ('*' == tobs(1,l,k)) cycle lonloop + do j = 1, 24 + tobs_string(j:j) = tobs(j,l,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + latloop: do m = 1, nlat + + if (.not. (lon(l,m,k) < 180.0_r8 .and. lon(l,m,k) > -180.0_r8)) cycle latloop + if (.not. (lat(l,m,k) < 90.0_r8 .and. lat(l,m,k) > -90.0_r8)) cycle latloop + + if ( lon(l,m,k) < 0.0_r8 ) lon(l,m,k) = lon(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + !pres = 5.0E-5 + ! Fixed height of 150 km + height = 1.5E5 + + !oerr = (nemax_unc_ran(l,m,k)**2.0 + nemax_unc_sys(l,m,k)**2.0 + nemax_unc_mod(l,m,k)**2.0)**0.5 + oerr = (nemax_unc_ran(l,m,k)**2.0 + nemax_unc_sys(l,m,k)**2.0)**0.5 + !oerr = nemax_unc_ran(l,m,k) + + !if (not(isnan(nemax(l,m,k)))) then + if ((not(isnan(nemax(l,m,k)))) .and. (not(isnan(oerr)))) then + !call create_3d_obs(lat(l,m,k), lon(l,m,k), pres, VERTISPRESSURE, nemax(l,m,k), & + ! GOLD_NEMAX, oerr, oday, osec, qc, obs) + call create_3d_obs(lat(l,m,k), lon(l,m,k), height, VERTISUNDEF, nemax(l,m,k), & + GOLD_NEMAX, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop + end do lonloop +end do scanloop + +100 continue + +print*,"Finished processing, about to write" + +! if we added any obs to the sequence, write it now. +if ( get_num_obs(obs_seq) > 0 ) call write_obs_seq(obs_seq, gold_out_file) + +! end of main program +call finalize_utilities() + + +end program convert_gold_nemax + +! +! $URL$ +! $Id$ +! $Revision$ +! $Date$ diff --git a/observations/GOLD/convert_gold_on2.f90 b/observations/GOLD/convert_gold_on2.f90 new file mode 100644 index 0000000000..f321a0e87e --- /dev/null +++ b/observations/GOLD/convert_gold_on2.f90 @@ -0,0 +1,247 @@ +! 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_gold_on2 + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! convert_gold_nmax - program that reads a GOLD netCDF NMAX +! observation file and writes a DART +! obs_seq file using the DART library routines. +! +! created Dec. 2007 Ryan Torn, NCAR/MMM (MADIS) +! modified Dec. 2008 Soyoung Ha and David Dowell, NCAR/MMM (MADIS) +! modified Jun. 2020 George Bowden, UNSW Canberra +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISPRESSURE, VERTISHEIGHT, VERTISUNDEF +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_ON2COLUMN +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_netcdf_file = 'gold_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: debug = .true. + +namelist /GOLD_on2_nc_to_obs_nml/ & + gold_netcdf_file, & + gold_out_file, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid, nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs, nlat, nlon, nscan, nmsl +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: pres, height, qc, qerr, oerr, on2_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs(:,:,:,:) +real(r8), allocatable :: lat(:,:,:), lon(:,:,:) +real(r8), allocatable :: on2(:,:,:), on2_unc_ran(:,:,:), & + on2_unc_sys(:,:,:), on2_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_on2') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_on2_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_on2_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_on2_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_netcdf_file, nf90_nowrite, ncid), & + 'convert_gold_on2', 'opening file '//trim(gold_netcdf_file) ) + +call getdimlen(ncid, "nlats", nlat) +call getdimlen(ncid, "nlons", nlon) +call getdimlen(ncid, "nscans", nscan) +call getdimlen(ncid, "max_string_len ", nmsl) +call set_missing_name("missing_value") + +nobs = nlat * nlon * nscan +nvars = 1 + +allocate( lat(nlon,nlat,nscan)) +allocate( lon(nlon,nlat,nscan)) +allocate( on2(nlon,nlat,nscan)) +allocate( on2_unc_ran(nlon,nlat,nscan)) +allocate( on2_unc_sys(nlon,nlat,nscan)) +allocate( on2_unc_mod(nlon,nlat,nscan)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs(24,nlon,nlat,nscan)) + +! read in the data arrays +call getvar_real_3d(ncid, "latitude", lat) ! latitudes +call getvar_real_3d(ncid, "longitude", lon) ! longitudes +call getvar_real_3d(ncid, "on2", on2, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "on2_unc_ran", on2_unc_ran, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "on2_unc_sys", on2_unc_sys, on2_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "on2_unc_mod", on2_unc_mod, on2_miss) ! maximum electron concentration + +! read the data for the time array +call nc_check( nf90_inq_varid(ncid, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +!call nc_check( nf90_get_var(ncid, varid, tobs), & +! 'getvar_char', 'getting var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid, varid, tobs, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon, nlat, nscan /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid), & + 'convert_gold_on2', 'closing file '//trim(gold_netcdf_file) ) + +! either read existing obs_seq or create a new one +call static_init_obs_sequence() +call init_obs(obs, num_copies, num_qc) +call init_obs(prev_obs, num_copies, num_qc) + +inquire(file=gold_out_file, exist=file_exist) + +if ( file_exist ) then + + ! existing file found, append to it + call read_obs_seq(gold_out_file, 0, 0, nvars*nobs, obs_seq) + +else + + ! create a new one + call init_obs_sequence(obs_seq, num_copies, num_qc, nvars*nobs) + do i = 1, num_copies + call set_copy_meta_data(obs_seq, i, 'GOLD observation') + end do + do i = 1, num_qc + call set_qc_meta_data(obs_seq, i, 'Data QC') + end do + +endif + +! Set the DART data quality control. Be consistent with NCEP codes; +! 0 is 'must use', 1 is good, no reason not to use it. +qc = 1.0_r8 + +year_obs = 1970 +month_obs = 1 +day_obs = 1 +hour_obs = 0 +minute_obs = 0 +second_obs = 0 + +nused = 0 +scanloop: do k = 1, nscan + lonloop: do l = 1, nlon + latloop: do m = 1, nlat + + if ('*' == tobs(1,l,m,k)) cycle latloop + do j = 1, 24 + tobs_string(j:j) = tobs(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon(l,m,k) < 180.0_r8 .and. lon(l,m,k) > -180.0_r8)) cycle latloop + if (.not. (lat(l,m,k) < 90.0_r8 .and. lat(l,m,k) > -90.0_r8)) cycle latloop + + if ( lon(l,m,k) < 0.0_r8 ) lon(l,m,k) = lon(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Not sure what to do about altitude coordinate, not included in GOLD file + !pres = 5.0E-5 + ! Fixed height of 150 km + height = 1.5E5 + + !oerr = (on2_unc_ran(l,m,k)**2.0 + on2_unc_sys(l,m,k)**2.0 + on2_unc_mod(l,m,k)**2.0)**0.5 + oerr = (on2_unc_ran(l,m,k)**2.0 + on2_unc_sys(l,m,k)**2.0)**0.5 + !oerr = on2_unc_ran(l,m,k) + + if ((not(isnan(on2(l,m,k)))) .and. (not(isnan(oerr)))) then + !call create_3d_obs(lat(l,m,k), lon(l,m,k), pres, VERTISPRESSURE, on2(l,m,k), & + ! GOLD_ON2COLUMN, oerr, oday, osec, qc, obs) + call create_3d_obs(lat(l,m,k), lon(l,m,k), height, VERTISUNDEF, on2(l,m,k), & + GOLD_ON2COLUMN, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop + end do lonloop +end do scanloop + +100 continue + +print*,"Finished processing, about to write" + +! if we added any obs to the sequence, write it now. +if ( get_num_obs(obs_seq) > 0 ) call write_obs_seq(obs_seq, gold_out_file) + +! end of main program +call finalize_utilities() + + +end program convert_gold_on2 + +! +! $URL$ +! $Id$ +! $Revision$ +! $Date$ diff --git a/observations/GOLD/convert_gold_tdisk.f90 b/observations/GOLD/convert_gold_tdisk.f90 new file mode 100644 index 0000000000..0dd4ac4ff9 --- /dev/null +++ b/observations/GOLD/convert_gold_tdisk.f90 @@ -0,0 +1,244 @@ +! 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_gold_tdisk + +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +! +! convert_gold_nmax - program that reads a GOLD netCDF TDISK +! observation file and writes a DART +! obs_seq file using the DART library routines. +! +! created Dec. 2007 Ryan Torn, NCAR/MMM (MADIS) +! modified Dec. 2008 Soyoung Ha and David Dowell, NCAR/MMM (MADIS) +! modified Jun. 2020 George Bowden, UNSW Canberra +! +! modified to use a common set of utilities, better netcdf error checks, +! able to insert obs with any time correctly (not only monotonically +! increasing times) nancy collins, ncar/image 11 march 2010 +! +! keep original obs times, make source for all converters as similar +! as possbile. nancy collins, ncar/image 26 march 2010 +! +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +use types_mod, only : r8, missing_r8 +use location_mod, only : VERTISHEIGHT +use utilities_mod, only : nc_check, initialize_utilities, finalize_utilities, & + find_namelist_in_file, check_namelist_read +use time_manager_mod, only : time_type, set_calendar_type, set_date, operator(>=), & + increment_time, get_time, operator(-), GREGORIAN +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 : GOLD_TEMPERATURE +use obs_utilities_mod, only : getvar_real, get_or_fill_QC, add_obs_to_seq, & + getvar_real_3d, & + create_3d_obs, getvar_int, getdimlen, set_missing_name + +use netcdf + +implicit none + +!character(len=13), parameter :: gold_netcdf_file = 'gold_input.nc' +!character(len=129), parameter :: gold_out_file = 'obs_seq.gold' + +! things which can/should be in the nc_to_obs_nml +character(len=128) :: gold_netcdf_file = 'gold_input.nc' +character(len=128) :: gold_out_file = 'obs_seq.gold' +logical :: debug = .true. + +namelist /GOLD_tdisk_nc_to_obs_nml/ & + gold_netcdf_file, & + gold_out_file, & + debug + +logical, parameter :: use_input_qc = .true. + +integer, parameter :: num_copies = 1, & ! number of copies in sequence + num_qc = 1 ! number of QC entries + +integer :: ncid, nvars +integer :: i, oday, osec, nused, iunit, rcio +integer :: nobs, nlat, nlon, nscan, nmsl +integer :: k, l, m, n, j +integer :: varid + +logical :: file_exist, first_obs + +real(r8) :: height, qc, qerr, oerr, tdisk_miss + +integer :: year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs + +character, allocatable :: tobs(:,:,:,:) +real(r8), allocatable :: lat(:,:,:), lon(:,:,:) +real(r8), allocatable :: tdisk(:,:,:), tdisk_unc_ran(:,:,:), & + tdisk_unc_sys(:,:,:), tdisk_unc_mod(:,:,:) + +type(obs_sequence_type) :: obs_seq +type(obs_type) :: obs, prev_obs +type(time_type) :: time_obs, prev_time + +character(len = 8), parameter :: varname_time_utc = 'time_utc' +character(len = 24) :: tobs_string = '1970-01-01T00:00:00.000Z' + + +call initialize_utilities('convert_gold_tdisk') + +! Read the DART namelist for this model +call find_namelist_in_file('input.nml', 'GOLD_tdisk_nc_to_obs_nml', iunit) +read(iunit, nml = GOLD_tdisk_nc_to_obs_nml, iostat = rcio) +call check_namelist_read(iunit, rcio, 'GOLD_tdisk_nc_to_obs_nml') + +!print*,gold_netcdf_file + +! put the reference date into DART format +call set_calendar_type(GREGORIAN) + +first_obs = .true. + +call nc_check( nf90_open(gold_netcdf_file, nf90_nowrite, ncid), & + 'convert_gold_tdisk', 'opening file '//trim(gold_netcdf_file) ) + +call getdimlen(ncid, "nlats", nlat) +call getdimlen(ncid, "nlons", nlon) +call getdimlen(ncid, "nscans", nscan) +call getdimlen(ncid, "max_string_len ", nmsl) +call set_missing_name("missing_value") + +nobs = nlat * nlon * nscan +nvars = 1 + +allocate( lat(nlon,nlat,nscan)) +allocate( lon(nlon,nlat,nscan)) +allocate( tdisk(nlon,nlat,nscan)) +allocate( tdisk_unc_ran(nlon,nlat,nscan)) +allocate( tdisk_unc_sys(nlon,nlat,nscan)) +allocate( tdisk_unc_mod(nlon,nlat,nscan)) +!allocate( tobs(nmsl,nlon,nscan)) +allocate( tobs(24,nlon,nlat,nscan)) + +! read in the data arrays +call getvar_real_3d(ncid, "latitude", lat) ! latitudes +call getvar_real_3d(ncid, "longitude", lon) ! longitudes +call getvar_real_3d(ncid, "tdisk", tdisk, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "tdisk_unc_ran", tdisk_unc_ran, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "tdisk_unc_sys", tdisk_unc_sys, tdisk_miss) ! maximum electron concentration +call getvar_real_3d(ncid, "tdisk_unc_mod", tdisk_unc_mod, tdisk_miss) ! maximum electron concentration + +! read the data for the time array +call nc_check( nf90_inq_varid(ncid, varname_time_utc, varid), & + 'getvar_char', 'inquire var '// trim(varname_time_utc)) +!call nc_check( nf90_get_var(ncid, varid, tobs), & +! 'getvar_char', 'getting var '// trim(varname_time_utc)) +call nc_check( nf90_get_var(ncid, varid, tobs, & + start = (/ 1, 1, 1, 1 /), count = (/ 24, nlon, nlat, nscan /)), & + 'getvar_char', 'getting var '// trim(varname_time_utc)) + +call nc_check( nf90_close(ncid), & + 'convert_gold_tdisk', 'closing file '//trim(gold_netcdf_file) ) + +! either read existing obs_seq or create a new one +call static_init_obs_sequence() +call init_obs(obs, num_copies, num_qc) +call init_obs(prev_obs, num_copies, num_qc) + +inquire(file=gold_out_file, exist=file_exist) + +if ( file_exist ) then + + ! existing file found, append to it + call read_obs_seq(gold_out_file, 0, 0, nvars*nobs, obs_seq) + +else + + ! create a new one + call init_obs_sequence(obs_seq, num_copies, num_qc, nvars*nobs) + do i = 1, num_copies + call set_copy_meta_data(obs_seq, i, 'GOLD observation') + end do + do i = 1, num_qc + call set_qc_meta_data(obs_seq, i, 'Data QC') + end do + +endif + +! Set the DART data quality control. Be consistent with NCEP codes; +! 0 is 'must use', 1 is good, no reason not to use it. +qc = 1.0_r8 + +year_obs = 1970 +month_obs = 1 +day_obs = 1 +hour_obs = 0 +minute_obs = 0 +second_obs = 0 + +nused = 0 +scanloop: do k = 1, nscan + lonloop: do l = 1, nlon + latloop: do m = 1, nlat + + if ('*' == tobs(1,l,m,k)) cycle latloop + do j = 1, 24 + tobs_string(j:j) = tobs(j,l,m,k) + end do + + read(tobs_string(1:4),*) year_obs + read(tobs_string(6:7),*) month_obs + read(tobs_string(9:10),*) day_obs + read(tobs_string(12:13),*) hour_obs + read(tobs_string(15:16),*) minute_obs + read(tobs_string(18:23),*) second_obs + + time_obs = set_date(year_obs, month_obs, day_obs, hour_obs, minute_obs, second_obs) + + if (.not. (lon(l,m,k) < 180.0_r8 .and. lon(l,m,k) > -180.0_r8)) cycle latloop + if (.not. (lat(l,m,k) < 90.0_r8 .and. lat(l,m,k) > -90.0_r8)) cycle latloop + + if ( lon(l,m,k) < 0.0_r8 ) lon(l,m,k) = lon(l,m,k) + 360.0_r8 + + ! extract actual time of observation in file into oday, osec. + call get_time(time_obs, osec, oday) + + ! Fixed height of 150 km + height = 1.5E5 + + !oerr = (tdisk_unc_ran(l,m,k)**2.0 + tdisk_unc_sys(l,m,k)**2.0 + tdisk_unc_mod(l,m,k)**2.0)**0.5 + !oerr = (tdisk_unc_ran(l,m,k)**2.0 + tdisk_unc_sys(l,m,k)**2.0)**0.5 + oerr = tdisk_unc_ran(l,m,k) + + !if (not(isnan(tdisk(l,m,k)))) then + if ((not(isnan(tdisk(l,m,k)))) .and. (not(isnan(oerr)))) then + call create_3d_obs(lat(l,m,k), lon(l,m,k), height, VERTISHEIGHT, tdisk(l,m,k), & + GOLD_TEMPERATURE, oerr, oday, osec, qc, obs) + call add_obs_to_seq(obs_seq, obs, time_obs, prev_obs, prev_time, first_obs) + endif + + end do latloop + end do lonloop +end do scanloop + +100 continue + +print*,"Finished processing, about to write" + +! if we added any obs to the sequence, write it now. +if ( get_num_obs(obs_seq) > 0 ) call write_obs_seq(obs_seq, gold_out_file) + +! end of main program +call finalize_utilities() + + +end program convert_gold_tdisk + +! +! $URL$ +! $Id$ +! $Revision$ +! $Date$ diff --git a/observations/GOLD/work/Makefile b/observations/GOLD/work/Makefile new file mode 100644 index 0000000000..4ca8a6af53 --- /dev/null +++ b/observations/GOLD/work/Makefile @@ -0,0 +1,77 @@ +# Makefile created by mkmf $Id$ + +include ../../../mkmf/mkmf.template + + +.DEFAULT: + -touch $@ +all: fixsys obs_sequence_tool +fixsys: + @ (cd ../../../mpi_utilities; ./fixsystem $(FC) ) +utilities_mod.o: ../../../utilities/utilities_mod.f90 types_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../utilities/utilities_mod.f90 +model_mod.o: ../../../models/lorenz_63/model_mod.f90 types_mod.o time_manager_mod.o location_mod.o utilities_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../models/lorenz_63/model_mod.f90 +cov_cutoff_mod.o: ../../../cov_cutoff/cov_cutoff_mod.f90 types_mod.o utilities_mod.o location_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../cov_cutoff/cov_cutoff_mod.f90 +types_mod.o: ../../../common/types_mod.f90 + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../common/types_mod.f90 +obs_kind_mod.o: ../../../obs_kind/obs_kind_mod.f90 utilities_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../obs_kind/obs_kind_mod.f90 +assim_model_mod.o: ../../../assim_model/assim_model_mod.f90 types_mod.o location_mod.o time_manager_mod.o utilities_mod.o model_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../assim_model/assim_model_mod.f90 +null_mpi_utilities_mod.o: ../../../mpi_utilities/null_mpi_utilities_mod.f90 types_mod.o utilities_mod.o time_manager_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../mpi_utilities/null_mpi_utilities_mod.f90 +random_seq_mod.o: ../../../random_seq/random_seq_mod.f90 types_mod.o utilities_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../random_seq/random_seq_mod.f90 +time_manager_mod.o: ../../../time_manager/time_manager_mod.f90 types_mod.o utilities_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../time_manager/time_manager_mod.f90 +location_mod.o: ../../../location/oned/location_mod.f90 types_mod.o utilities_mod.o random_seq_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../location/oned/location_mod.f90 +obs_def_mod.o: ../../../obs_def/obs_def_mod.f90 types_mod.o utilities_mod.o location_mod.o assim_model_mod.o obs_kind_mod.o time_manager_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../obs_def/obs_def_mod.f90 +obs_sequence_mod.o: ../../../obs_sequence/obs_sequence_mod.f90 types_mod.o location_mod.o obs_def_mod.o obs_kind_mod.o time_manager_mod.o utilities_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../obs_sequence/obs_sequence_mod.f90 +obs_sequence_tool.o: ../../../obs_sequence/obs_sequence_tool.f90 types_mod.o utilities_mod.o location_mod.o obs_def_mod.o obs_kind_mod.o time_manager_mod.o obs_sequence_mod.o + $(FC) $(FFLAGS) $(OTHERFLAGS) -c ../../../obs_sequence/obs_sequence_tool.f90 +./assim_model_mod.f90: ../../../assim_model/assim_model_mod.f90 + cp ../../../assim_model/assim_model_mod.f90 . +./null_mpi_utilities_mod.f90: ../../../mpi_utilities/null_mpi_utilities_mod.f90 + cp ../../../mpi_utilities/null_mpi_utilities_mod.f90 . +./utilities_mod.f90: ../../../utilities/utilities_mod.f90 + cp ../../../utilities/utilities_mod.f90 . +./time_manager_mod.f90: ../../../time_manager/time_manager_mod.f90 + cp ../../../time_manager/time_manager_mod.f90 . +./cov_cutoff_mod.f90: ../../../cov_cutoff/cov_cutoff_mod.f90 + cp ../../../cov_cutoff/cov_cutoff_mod.f90 . +./model_mod.f90: ../../../models/lorenz_63/model_mod.f90 + cp ../../../models/lorenz_63/model_mod.f90 . +./obs_kind_mod.f90: ../../../obs_kind/obs_kind_mod.f90 + cp ../../../obs_kind/obs_kind_mod.f90 . +./obs_sequence_tool.f90: ../../../obs_sequence/obs_sequence_tool.f90 + cp ../../../obs_sequence/obs_sequence_tool.f90 . +./random_seq_mod.f90: ../../../random_seq/random_seq_mod.f90 + cp ../../../random_seq/random_seq_mod.f90 . +./location_mod.f90: ../../../location/oned/location_mod.f90 + cp ../../../location/oned/location_mod.f90 . +./obs_def_mod.f90: ../../../obs_def/obs_def_mod.f90 + cp ../../../obs_def/obs_def_mod.f90 . +./types_mod.f90: ../../../common/types_mod.f90 + cp ../../../common/types_mod.f90 . +./obs_sequence_mod.f90: ../../../obs_sequence/obs_sequence_mod.f90 + cp ../../../obs_sequence/obs_sequence_mod.f90 . +SRC = ../../../utilities/utilities_mod.f90 ../../../models/lorenz_63/model_mod.f90 ../../../cov_cutoff/cov_cutoff_mod.f90 ../../../common/types_mod.f90 ../../../obs_kind/obs_kind_mod.f90 ../../../assim_model/assim_model_mod.f90 ../../../mpi_utilities/null_mpi_utilities_mod.f90 ../../../random_seq/random_seq_mod.f90 ../../../time_manager/time_manager_mod.f90 ../../../location/oned/location_mod.f90 ../../../obs_def/obs_def_mod.f90 ../../../obs_sequence/obs_sequence_mod.f90 ../../../obs_sequence/obs_sequence_tool.f90 +OBJ = utilities_mod.o model_mod.o cov_cutoff_mod.o types_mod.o obs_kind_mod.o assim_model_mod.o null_mpi_utilities_mod.o random_seq_mod.o time_manager_mod.o location_mod.o obs_def_mod.o obs_sequence_mod.o obs_sequence_tool.o +OFF = ../../../assim_model/assim_model_mod.f90 ../../../mpi_utilities/null_mpi_utilities_mod.f90 ../../../utilities/utilities_mod.f90 ../../../time_manager/time_manager_mod.f90 ../../../cov_cutoff/cov_cutoff_mod.f90 ../../../models/lorenz_63/model_mod.f90 ../../../obs_kind/obs_kind_mod.f90 ../../../obs_sequence/obs_sequence_tool.f90 ../../../random_seq/random_seq_mod.f90 ../../../location/oned/location_mod.f90 ../../../obs_def/obs_def_mod.f90 ../../../common/types_mod.f90 ../../../obs_sequence/obs_sequence_mod.f90 +clean: neat + -rm -f .cppdefs $(OBJ) obs_sequence_tool +neat: + -rm -f $(TMPFILES) +localize: $(OFF) + cp $(OFF) . +TAGS: $(SRC) + etags $(SRC) +tags: $(SRC) + ctags $(SRC) +obs_sequence_tool: $(OBJ) + $(LD) $(OBJ) -o obs_sequence_tool $(LDFLAGS) diff --git a/observations/GOLD/work/dart_log.nml b/observations/GOLD/work/dart_log.nml new file mode 100644 index 0000000000..4314e6808b --- /dev/null +++ b/observations/GOLD/work/dart_log.nml @@ -0,0 +1,11017 @@ + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_combined + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program obs_sequence_tool + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &OBS_SEQUENCE_TOOL_NML + NUM_INPUT_FILES = 0, + FILENAME_SEQ = obs_seq.out.gold.nemax + obs_seq.out.gold.on2 + obs_seq.out.gold.tdisk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + FILENAME_SEQ_LIST = + , + FILENAME_OUT = obs_seq.out.gold.ostcom + , + FIRST_OBS_DAYS = -1, + FIRST_OBS_SECONDS = -1, + LAST_OBS_DAYS = -1, + LAST_OBS_SECONDS = -1, + OBS_TYPES = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + KEEP_TYPES = T, + MIN_BOX = 4*-888888.000000000 , + MAX_BOX = 4*-888888.000000000 , + PRINT_ONLY = F, + MIN_LAT = -90.0000000000000 , + MAX_LAT = 90.0000000000000 , + MIN_LON = 0.000000000000000E+000, + MAX_LON = 360.000000000000 , + MIN_QC = -888888.000000000 , + MAX_QC = -888888.000000000 , + QC_METADATA = , + MIN_COPY = -888888.000000000 , + MAX_COPY = -888888.000000000 , + COPY_METADATA = , + COPY_TYPE = , + GREGORIAN_CAL = F, + MIN_GPS_HEIGHT = -888888.000000000 , + EDIT_COPY_METADATA = F, + NEW_COPY_INDEX = 256*-1, + EDIT_QC_METADATA = F, + NEW_QC_INDEX = 256*-1, + SYNONYMOUS_COPY_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + SYNONYMOUS_QC_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + EDIT_COPIES = F, + EDIT_QCS = F, + NEW_COPY_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_QC_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_COPY_DATA = 256*-888888.000000000 , + NEW_QC_DATA = 256*-888888.000000000 + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_combined + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program obs_sequence_tool + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &OBS_SEQUENCE_TOOL_NML + NUM_INPUT_FILES = 0, + FILENAME_SEQ = obs_seq.out.gold.nemax + obs_seq.out.gold.on2 + obs_seq.out.gold.tdisk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + FILENAME_SEQ_LIST = + , + FILENAME_OUT = obs_seq.out.gold.ostcom + , + FIRST_OBS_DAYS = -1, + FIRST_OBS_SECONDS = -1, + LAST_OBS_DAYS = -1, + LAST_OBS_SECONDS = -1, + OBS_TYPES = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + KEEP_TYPES = T, + MIN_BOX = 4*-888888.000000000 , + MAX_BOX = 4*-888888.000000000 , + PRINT_ONLY = F, + MIN_LAT = -90.0000000000000 , + MAX_LAT = 90.0000000000000 , + MIN_LON = 0.000000000000000E+000, + MAX_LON = 360.000000000000 , + MIN_QC = -888888.000000000 , + MAX_QC = -888888.000000000 , + QC_METADATA = , + MIN_COPY = -888888.000000000 , + MAX_COPY = -888888.000000000 , + COPY_METADATA = , + COPY_TYPE = , + GREGORIAN_CAL = F, + MIN_GPS_HEIGHT = -888888.000000000 , + EDIT_COPY_METADATA = F, + NEW_COPY_INDEX = 256*-1, + EDIT_QC_METADATA = F, + NEW_QC_INDEX = 256*-1, + SYNONYMOUS_COPY_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + SYNONYMOUS_QC_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + EDIT_COPIES = F, + EDIT_QCS = F, + NEW_COPY_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_QC_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_COPY_DATA = 256*-888888.000000000 , + NEW_QC_DATA = 256*-888888.000000000 + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_combined + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_combined + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_combined + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program obs_sequence_tool + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &OBS_SEQUENCE_TOOL_NML + NUM_INPUT_FILES = 0, + FILENAME_SEQ = obs_seq.out.gold.nemax + obs_seq.out.gold.on2 + obs_seq.out.gold.tdisk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + FILENAME_SEQ_LIST = + , + FILENAME_OUT = obs_seq.out.gold.ostcom + , + FIRST_OBS_DAYS = -1, + FIRST_OBS_SECONDS = -1, + LAST_OBS_DAYS = -1, + LAST_OBS_SECONDS = -1, + OBS_TYPES = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + KEEP_TYPES = T, + MIN_BOX = 4*-888888.000000000 , + MAX_BOX = 4*-888888.000000000 , + PRINT_ONLY = F, + MIN_LAT = -90.0000000000000 , + MAX_LAT = 90.0000000000000 , + MIN_LON = 0.000000000000000E+000, + MAX_LON = 360.000000000000 , + MIN_QC = -888888.000000000 , + MAX_QC = -888888.000000000 , + QC_METADATA = , + MIN_COPY = -888888.000000000 , + MAX_COPY = -888888.000000000 , + COPY_METADATA = , + COPY_TYPE = , + GREGORIAN_CAL = F, + MIN_GPS_HEIGHT = -888888.000000000 , + EDIT_COPY_METADATA = F, + NEW_COPY_INDEX = 256*-1, + EDIT_QC_METADATA = F, + NEW_QC_INDEX = 256*-1, + SYNONYMOUS_COPY_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + SYNONYMOUS_QC_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + EDIT_COPIES = F, + EDIT_QCS = F, + NEW_COPY_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_QC_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_COPY_DATA = 256*-888888.000000000 , + NEW_QC_DATA = 256*-888888.000000000 + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program obs_sequence_tool + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &OBS_SEQUENCE_TOOL_NML + NUM_INPUT_FILES = 0, + FILENAME_SEQ = obs_seq.out.gold.nemax + obs_seq.out.gold.on2 + obs_seq.out.gold.tdisk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + FILENAME_SEQ_LIST = + , + FILENAME_OUT = obs_seq.out.gold.ostcom + , + FIRST_OBS_DAYS = -1, + FIRST_OBS_SECONDS = -1, + LAST_OBS_DAYS = -1, + LAST_OBS_SECONDS = -1, + OBS_TYPES = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + KEEP_TYPES = T, + MIN_BOX = 4*-888888.000000000 , + MAX_BOX = 4*-888888.000000000 , + PRINT_ONLY = F, + MIN_LAT = -90.0000000000000 , + MAX_LAT = 90.0000000000000 , + MIN_LON = 0.000000000000000E+000, + MAX_LON = 360.000000000000 , + MIN_QC = -888888.000000000 , + MAX_QC = -888888.000000000 , + QC_METADATA = , + MIN_COPY = -888888.000000000 , + MAX_COPY = -888888.000000000 , + COPY_METADATA = , + COPY_TYPE = , + GREGORIAN_CAL = F, + MIN_GPS_HEIGHT = -888888.000000000 , + EDIT_COPY_METADATA = F, + NEW_COPY_INDEX = 256*-1, + EDIT_QC_METADATA = F, + NEW_QC_INDEX = 256*-1, + SYNONYMOUS_COPY_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + SYNONYMOUS_QC_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + EDIT_COPIES = F, + EDIT_QCS = F, + NEW_COPY_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_QC_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_COPY_DATA = 256*-888888.000000000 , + NEW_QC_DATA = 256*-888888.000000000 + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + NUM_TASKS_INSENSITIVE = F, + MAINTAIN_ORIGINAL_VERT = F + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + !Starting Program convert_gold_tdisk + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program preprocess + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + !Finished Program preprocess + !Starting Program convert_gold_nemax + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program + !Starting Program convert_gold_on2 + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program + !Starting Program obs_sequence_tool + &UTILITIES_NML + TERMLEVEL = 2, + LOGFILENAME = dart_log.out + + , + MODULE_DETAILS = F, + NMLFILENAME = dart_log.nml + + , + PRINT_DEBUG = F, + WRITE_NML = file + / + &OBS_SEQUENCE_NML + WRITE_BINARY_OBS_SEQUENCE = F + / + &OBS_SEQUENCE_TOOL_NML + NUM_INPUT_FILES = 0, + FILENAME_SEQ = obs_seq.out.gold.nemax + + obs_seq.out.gold.on2 + + obs_seq.out.gold.tdisk + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + FILENAME_SEQ_LIST = + + , + FILENAME_OUT = obs_seq.out.gold.ostcom + + , + FIRST_OBS_DAYS = -1, + FIRST_OBS_SECONDS = -1, + LAST_OBS_DAYS = -1, + LAST_OBS_SECONDS = -1, + OBS_TYPES = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + KEEP_TYPES = T, + MIN_BOX = 4*-888888.000000000 , + MAX_BOX = 4*-888888.000000000 , + PRINT_ONLY = F, + MIN_LAT = -90.0000000000000 , + MAX_LAT = 90.0000000000000 , + MIN_LON = 0.000000000000000E+000, + MAX_LON = 360.000000000000 , + MIN_QC = -888888.000000000 , + MAX_QC = -888888.000000000 , + QC_METADATA = , + MIN_COPY = -888888.000000000 , + MAX_COPY = -888888.000000000 , + COPY_METADATA = , + COPY_TYPE = , + GREGORIAN_CAL = F, + MIN_GPS_HEIGHT = -888888.000000000 , + EDIT_COPY_METADATA = F, + NEW_COPY_INDEX = 256*-1, + EDIT_QC_METADATA = F, + NEW_QC_INDEX = 256*-1, + SYNONYMOUS_COPY_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + SYNONYMOUS_QC_LIST = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + EDIT_COPIES = F, + EDIT_QCS = F, + NEW_COPY_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_QC_METADATA = + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + NEW_COPY_DATA = 256*-888888.000000000 , + NEW_QC_DATA = 256*-888888.000000000 + / + &LOCATION_NML + HORIZ_DIST_ONLY = T, + VERT_NORMALIZATION_PRESSURE = 100000.000000000 , + VERT_NORMALIZATION_HEIGHT = 10000.0000000000 , + VERT_NORMALIZATION_LEVEL = 20.0000000000000 , + VERT_NORMALIZATION_SCALE_HEIGHT = 5.00000000000000 , + APPROXIMATE_DISTANCE = F, + NLON = 71, + NLAT = 36, + OUTPUT_BOX_INFO = F, + PRINT_BOX_LEVEL = 0, + MAINTAIN_ORIGINAL_VERT = F, + SPECIAL_VERT_NORMALIZATION_OBS_TYPES = null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null null null nu + ll null null null null + null null null null + null null null null + null null null null + null null null null + null null null null + null null , + SPECIAL_VERT_NORMALIZATION_PRESSURES = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_HEIGHTS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_LEVELS = 500*-888888.000000000 , + SPECIAL_VERT_NORMALIZATION_SCALE_HEIGHTS = 500*-888888.000000000 + / + !Finished Program diff --git a/observations/GOLD/work/input.nml b/observations/GOLD/work/input.nml new file mode 100644 index 0000000000..550cacad8a --- /dev/null +++ b/observations/GOLD/work/input.nml @@ -0,0 +1,59 @@ + +&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_GOLD_mod.f90', + / + +&obs_kind_nml + / + +&location_nml + / + +&utilities_nml + module_details = .false. + / + +&obs_sequence_nml + write_binary_obs_sequence = .false. + / + +&GOLD_nemax_nc_to_obs_nml + gold_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_NMAX_2018_305_v01_r01_c01.nc' + gold_out_file = 'obs_seq.out.gold.nemax' + debug = .false. + / + +&GOLD_on2_nc_to_obs_nml + gold_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_ON2_2018_305_v02_r01_c01.nc' + gold_out_file = 'obs_seq.out.gold.on2' + debug = .false. + / + +&GOLD_tdisk_nc_to_obs_nml + gold_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_TDISK_2018_305_v02_r01_c01.nc' + gold_out_file = 'obs_seq.out.gold.tdisk' + debug = .false. + / + +&GOLD_combined_nc_to_obs_nml + gold_tdisk_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_TDISK_2018_305_v02_r01_c01.nc' + gold_on2_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_ON2_2018_305_v02_r01_c01.nc' + gold_nemax_netcdf_file = '/scratch/n23/gwb112/swm_project/GOLD_Data/2018/305/GOLD_L2_NMAX_2018_305_v01_r01_c01.nc' + gold_out_file = 'obs_seq.out.gold' + use_tdisk = .true. + use_on2 = .true. + use_nemax = .true. + debug = .false. + / + +&obs_sequence_tool_nml + filename_seq = 'obs_seq.out.gold.nemax', + 'obs_seq.out.gold.on2', + 'obs_seq.out.gold.tdisk', + filename_out = 'obs_seq.out.gold.ostcom', + gregorian_cal = .false. +/ \ No newline at end of file diff --git a/observations/GOLD/work/mkmf_convert_gold_combined b/observations/GOLD/work/mkmf_convert_gold_combined new file mode 100644 index 0000000000..1c73f8c351 --- /dev/null +++ b/observations/GOLD/work/mkmf_convert_gold_combined @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p convert_gold_combined -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_convert_gold_combined + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/mkmf_convert_gold_nemax b/observations/GOLD/work/mkmf_convert_gold_nemax new file mode 100644 index 0000000000..b301d478cd --- /dev/null +++ b/observations/GOLD/work/mkmf_convert_gold_nemax @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p convert_gold_nemax -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_convert_gold_nemax + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/mkmf_convert_gold_on2 b/observations/GOLD/work/mkmf_convert_gold_on2 new file mode 100644 index 0000000000..47908b3074 --- /dev/null +++ b/observations/GOLD/work/mkmf_convert_gold_on2 @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p convert_gold_on2 -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_convert_gold_on2 + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/mkmf_convert_gold_tdisk b/observations/GOLD/work/mkmf_convert_gold_tdisk new file mode 100644 index 0000000000..ecaa011e17 --- /dev/null +++ b/observations/GOLD/work/mkmf_convert_gold_tdisk @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p convert_gold_tdisk -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_convert_gold_tdisk + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/mkmf_obs_sequence_tool b/observations/GOLD/work/mkmf_obs_sequence_tool new file mode 100755 index 0000000000..60964dba07 --- /dev/null +++ b/observations/GOLD/work/mkmf_obs_sequence_tool @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p obs_sequence_tool -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_obs_sequence_tool + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/mkmf_preprocess b/observations/GOLD/work/mkmf_preprocess new file mode 100755 index 0000000000..341dee439d --- /dev/null +++ b/observations/GOLD/work/mkmf_preprocess @@ -0,0 +1,18 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ + +../../../mkmf/mkmf -p preprocess -t ../../../mkmf/mkmf.template \ + -a "../../.." path_names_preprocess + +exit $status + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/GOLD/work/path_names_convert_gold_combined b/observations/GOLD/work/path_names_convert_gold_combined new file mode 100644 index 0000000000..567a09d277 --- /dev/null +++ b/observations/GOLD/work/path_names_convert_gold_combined @@ -0,0 +1,13 @@ +observations/GOLD/convert_gold_combined.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 +obs_def/obs_def_mod.f90 +assim_model/assim_model_mod.f90 +models/template/model_mod.f90 +common/types_mod.f90 +random_seq/random_seq_mod.f90 +utilities/utilities_mod.f90 +time_manager/time_manager_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 diff --git a/observations/GOLD/work/path_names_convert_gold_nemax b/observations/GOLD/work/path_names_convert_gold_nemax new file mode 100644 index 0000000000..762605c6b5 --- /dev/null +++ b/observations/GOLD/work/path_names_convert_gold_nemax @@ -0,0 +1,13 @@ +observations/GOLD/convert_gold_nemax.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 +obs_def/obs_def_mod.f90 +assim_model/assim_model_mod.f90 +models/template/model_mod.f90 +common/types_mod.f90 +random_seq/random_seq_mod.f90 +utilities/utilities_mod.f90 +time_manager/time_manager_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 diff --git a/observations/GOLD/work/path_names_convert_gold_on2 b/observations/GOLD/work/path_names_convert_gold_on2 new file mode 100644 index 0000000000..7a52ee7c0e --- /dev/null +++ b/observations/GOLD/work/path_names_convert_gold_on2 @@ -0,0 +1,13 @@ +observations/GOLD/convert_gold_on2.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 +obs_def/obs_def_mod.f90 +assim_model/assim_model_mod.f90 +models/template/model_mod.f90 +common/types_mod.f90 +random_seq/random_seq_mod.f90 +utilities/utilities_mod.f90 +time_manager/time_manager_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 diff --git a/observations/GOLD/work/path_names_convert_gold_tdisk b/observations/GOLD/work/path_names_convert_gold_tdisk new file mode 100644 index 0000000000..8ecc02d5b9 --- /dev/null +++ b/observations/GOLD/work/path_names_convert_gold_tdisk @@ -0,0 +1,13 @@ +observations/GOLD/convert_gold_tdisk.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 +obs_def/obs_def_mod.f90 +assim_model/assim_model_mod.f90 +models/template/model_mod.f90 +common/types_mod.f90 +random_seq/random_seq_mod.f90 +utilities/utilities_mod.f90 +time_manager/time_manager_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 diff --git a/observations/GOLD/work/path_names_obs_sequence_tool b/observations/GOLD/work/path_names_obs_sequence_tool new file mode 100644 index 0000000000..9c310c23e5 --- /dev/null +++ b/observations/GOLD/work/path_names_obs_sequence_tool @@ -0,0 +1,13 @@ +assim_model/assim_model_mod.f90 +common/types_mod.f90 +cov_cutoff/cov_cutoff_mod.f90 +location/oned/location_mod.f90 +models/lorenz_63/model_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 +obs_def/obs_def_mod.f90 +obs_kind/obs_kind_mod.f90 +obs_sequence/obs_sequence_mod.f90 +obs_sequence/obs_sequence_tool.f90 +random_seq/random_seq_mod.f90 +time_manager/time_manager_mod.f90 +utilities/utilities_mod.f90 diff --git a/observations/GOLD/work/path_names_preprocess b/observations/GOLD/work/path_names_preprocess new file mode 100644 index 0000000000..049487695a --- /dev/null +++ b/observations/GOLD/work/path_names_preprocess @@ -0,0 +1,5 @@ +preprocess/preprocess.f90 +common/types_mod.f90 +utilities/utilities_mod.f90 +mpi_utilities/null_mpi_utilities_mod.f90 +time_manager/time_manager_mod.f90 diff --git a/observations/GOLD/work/quickbuild.csh b/observations/GOLD/work/quickbuild.csh new file mode 100755 index 0000000000..8543cbd94e --- /dev/null +++ b/observations/GOLD/work/quickbuild.csh @@ -0,0 +1,69 @@ +#!/bin/csh +# +# 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 +# +# DART $Id$ +# +# compile all converter programs + +#---------------------------------------------------------------------- +# 'preprocess' is a program that culls the appropriate sections of the +# observation module for the observations types in 'input.nml'; the +# resulting source file is used by all the remaining programs, +# so this MUST be run first. +#---------------------------------------------------------------------- + +\rm -f preprocess *.o *.mod +\rm -f ../../../obs_def/obs_def_mod.f90 +\rm -f ../../../obs_kind/obs_kind_mod.f90 + +set MODEL = "GOLD converters" + +@ n = 1 + +echo +echo +echo "---------------------------------------------------------------" +echo "${MODEL} build number ${n} is preprocess" + +csh mkmf_preprocess +make || exit $n + +./preprocess || exit 99 + +#---------------------------------------------------------------------- +# Build all the single-threaded targets +#---------------------------------------------------------------------- + +foreach TARGET ( mkmf_* ) + + set PROG = `echo $TARGET | sed -e 's#mkmf_##'` + + switch ( $TARGET ) + case mkmf_preprocess: + breaksw + default: + @ n = $n + 1 + echo + echo "---------------------------------------------------" + echo "${MODEL} build number ${n} is ${PROG}" + \rm -f ${PROG} + csh $TARGET || exit $n + make || exit $n + breaksw + endsw +end + +\rm -f *.o *.mod input.nml*_default + +echo "Success: All ${MODEL} programs compiled." + +exit 0 + +# +# $URL$ +# $Revision$ +# $Date$ + diff --git a/observations/utilities/obs_utilities_mod.f90 b/observations/utilities/obs_utilities_mod.f90 index 43c7198562..bfc711fd38 100644 --- a/observations/utilities/obs_utilities_mod.f90 +++ b/observations/utilities/obs_utilities_mod.f90 @@ -38,6 +38,8 @@ module obs_utilities_mod get_or_fill_QC, & getvar_real_2d, & getvar_int_2d, & + getvar_real_3d, & + getvar_int_3d, & getvar_real_1d_1val, & getvar_int_1d_1val, & getvar_real_2d_slice, & @@ -866,6 +868,163 @@ subroutine getvar_int_2d(ncid, varname, darray, dmiss) end subroutine getvar_int_2d +!-------------------------------------------------------------------- +! +!> getvar_real_3d - 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. +!> this version assumes you are reading an entire 2d array. +!> see the slice versions for reading 1d from a 2d array. +!> +!> ncid - open netcdf file handle +!> varname - string name of netcdf variable +!> darray - 2d output array. real(r8) +!> dmiss - value that signals a missing value real(r8), optional +!> +!> created 11 Mar 2010, nancy collins, ncar/image +!> modified 13 Jul 2020, George Bowden, UNSW Canberra + +subroutine getvar_real_3d(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_3d', 'inquire var '// trim(varname)) +call nc_check( nf90_get_var(ncid, varid, darray), & + 'getvar_real_3d', '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_3d', '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_3d + + +!-------------------------------------------------------------------- +!> +!> getvar_int_3d - 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. +!> this version assumes you are reading an entire 3d array. +!> see the slice versions for reading 1d from a 3d array. +!> +!> ncid - open netcdf file handle +!> varname - string name of netcdf variable +!> darray - 3d output array. integer +!> dmiss - value that signals a missing value integer, optional +!> +!> created 11 Mar 2010, nancy collins, ncar/image +!> modified 13 Jul 2020, George Bowden, UNSW Canberra + +subroutine getvar_int_3d(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_3d', 'inquire var '// trim(varname)) +call nc_check( nf90_get_var(ncid, varid, darray), & + 'getvar_int_3d', '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_int_3d', '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_3d + + !-------------------------------------------------------------------- !> getvar_real_1d_1val - subroutine that inquires, gets the variable, and fills !> in the missing value attribute if that arg is present.