Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QCEFF Table #545

Closed
wants to merge 62 commits into from
Closed
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
ef152a1
draft program to experiment with reading table values into correspond…
Aug 14, 2023
ebdbf31
prototype table data file that uses CAM-FV QTYs
Aug 14, 2023
262965b
adding new subroutine init_qcf_table to return number of rows in table
Aug 14, 2023
715875d
Adding a new namelist variable to the assim_tools_nml
Aug 14, 2023
1f9dcc3
Adding QCF table type definitions to algorithm_info_mod
Aug 14, 2023
e8ff87f
adding type defs to use statement for algorithm_info_mod in assim_too…
Aug 14, 2023
7024e2b
Adding allocatable variables for table data, allocating after determi…
Aug 14, 2023
935bcb5
New subroutine to read through the values in the QCF table and assign…
Aug 14, 2023
be4ee63
Removing qcf table data types from assim_tools_mod and reorganizing s…
Aug 14, 2023
66356a6
Fixing small inconsistencies/typos
Aug 14, 2023
b62339e
moving the location of draft program outside /assimilation_code/modul…
Aug 14, 2023
7659472
Adding draft subroutine write_qcf_table to test that values are being…
Aug 15, 2023
e995563
replaicing conditionals and hardcoded values in probit_dist_info
Aug 15, 2023
fa514c2
using get_name_for_quantity to get generic quantity from integer index
Aug 16, 2023
f291025
Replacing conditionals and hard coded values with qcf_table_data in o…
Aug 16, 2023
5a26816
Replacing conditionals and hard coded values with qcf_table_data in o…
Aug 16, 2023
2376bbc
add subroutine to deallocate qcf table data structures
Aug 16, 2023
90c9beb
making dealloc subroutine available to assim_tools_mod
Aug 17, 2023
b1c0658
Merge branch 'quantile_methods' of https://github.com/NCAR/DART into …
Aug 17, 2023
6de99ba
removing comment blocks of old code
Aug 17, 2023
c5e0eb1
Adding call to deallocate routine, removing unused var and old commen…
Aug 21, 2023
d61382e
Fixing typo in subroutine names
Aug 21, 2023
e842a2b
Moving the allocation and deallocation of qcf table data from assim_t…
Aug 22, 2023
a78be83
uncommenting call to end_alg_info_mod
Aug 22, 2023
dc0c617
moving call to init_algortihm_info_mod out of conditional
Aug 23, 2023
2d6808e
Reorganizing the subroutines so that init_algorithm_info_mod is at th…
Aug 23, 2023
19b6150
Adding qcf_table_listed logical and module_initialized checks
Aug 23, 2023
efa929b
Moving location of qcf_table_listed check to before data access from …
Aug 23, 2023
16354ab
Using error_handler from utilities_mod; adding check for correct tabl…
Aug 28, 2023
8595523
adding qcf_table_file_listed logical to two remaining subrountines; w…
Sep 5, 2023
e3f3131
commenting out prints; remove these lines later
Sep 5, 2023
05c5fff
Moving initialize_modules call to be after read of filter_nml
Sep 11, 2023
2719226
Adding check that all QTYs in the table exist in DART using get_index…
Sep 11, 2023
8f79b3c
Replacing open and close of qcf_table file with open_file and close_f…
Sep 11, 2023
c0b00e0
Making quotations consistent - using single quote only
Sep 11, 2023
0ace5e9
Adding checks for duplicate QTYs in the table
Sep 12, 2023
b32ac93
Switching to real(r8); experimenting in the log_qcf_table subroutine
Sep 13, 2023
1c5cfa4
reading in character strings from QCF table for filter_kind instead o…
Sep 13, 2023
844a811
Reading in dist_type from the table as a character string instead of int
Sep 14, 2023
5ebb793
Fixing log format; cleaning code
Sep 19, 2023
8eed1d8
Merge branch 'quantile_methods' of https://github.com/NCAR/DART into …
Sep 25, 2023
2be50ef
Removing unnecessary files
Sep 25, 2023
399b62b
Adding the yaml_to_table.py script and example yaml file qcf_table_te…
Sep 25, 2023
1911ed0
Fixing deallocation by adding conditional to check if data types were…
Sep 25, 2023
41ffe95
Adjusting the YAML template file; removing trailing spaces from possi…
Sep 25, 2023
f5fa29b
Adding documentaion file to repo
Sep 25, 2023
b37cf76
Removing unused routines from utilities_mod use list
Sep 26, 2023
6681875
Adding &probit_transform_nml to input.nml files for lorenz 63 and 96 …
Sep 26, 2023
3e39cf2
Removing the use_algorithm_info_mod logical from assim_tools_mod and …
Sep 26, 2023
80305c7
Fixing unintentional additions to lorenx 96 and 63 input.nml files; r…
Sep 26, 2023
eb38d48
Adding spaces back in from unintentional removal
Sep 26, 2023
528e162
Adding &probit_transform_nml and qcf_table_filename option to model's…
Sep 26, 2023
caf5dac
Fixing missing commas in nml files
Sep 27, 2023
c184e90
add test cases for reading qcf table
hkershaw-brown Sep 28, 2023
2e07008
test script to check return codes for various qcf_table cases
hkershaw-brown Sep 28, 2023
200a8f4
remove stray /dev/null left in accidentally
hkershaw-brown Sep 28, 2023
46f238f
add tests for various bounds options
hkershaw-brown Sep 28, 2023
ca99e8b
test for bounds set to false, but bounds values in the table
hkershaw-brown Sep 28, 2023
22f86c4
fix: need to check that a qty is bounded above and below before check…
hkershaw-brown Sep 29, 2023
38353bb
fix: remove extra call to test_table read from runall.sh
hkershaw-brown Sep 29, 2023
a4723e7
replace kind with qty
hkershaw-brown Oct 2, 2023
bd4dbab
add two tests for table read: incorrect filter kind, incorrect distri…
hkershaw-brown Oct 2, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ stacktest
obs_rwtest
test_quad_irreg_interp
test_quad_reg_interp
test_table_read

# Directories to NOT IGNORE ... same as executable names
# as far as I know, these must be listed after the executables
Expand Down
559 changes: 475 additions & 84 deletions assimilation_code/modules/assimilation/algorithm_info_mod.f90

Large diffs are not rendered by default.

12 changes: 5 additions & 7 deletions assimilation_code/modules/assimilation/assim_tools_mod.f90
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,6 @@ module assim_tools_mod
! special_localization_obs_types -> Special treatment for the specified observation types
! special_localization_cutoffs -> Different cutoff value for each specified obs type
!
logical :: use_algorithm_info_mod = .true.
integer :: filter_kind = 1
real(r8) :: cutoff = 0.2_r8
logical :: sort_obs_inc = .false.
Expand Down Expand Up @@ -203,8 +202,7 @@ module assim_tools_mod
! compared to previous versions of this namelist item.
logical :: distribute_mean = .false.

namelist / assim_tools_nml / use_algorithm_info_mod, &
filter_kind, cutoff, sort_obs_inc, &
namelist / assim_tools_nml / filter_kind, cutoff, sort_obs_inc, &
spread_restoration, sampling_error_correction, &
adaptive_localization_threshold, adaptive_cutoff_floor, &
print_every_nth_obs, rectangular_quadrature, gaussian_likelihood_tails, &
Expand Down Expand Up @@ -976,7 +974,8 @@ subroutine obs_increment(ens_in, ens_size, obs, obs_var, obs_kind, obs_inc, &
!--------------------------begin algorithm_info control block-----------------
! More flexible abilities to control the observation space increments are
! available with this code block. It gets information about the increment method
! for the current observation is use_algorithm_info_mod is set to true in the namelist.
! for the current observation.

! This is not an extensible mechanism for doing this as the number of
! obs increments distributions and associated information goes up
! Implications for sorting increments and for spread restoration need to be examined
Expand All @@ -988,9 +987,8 @@ subroutine obs_increment(ens_in, ens_size, obs, obs_var, obs_kind, obs_inc, &
bounded_below = .false.; lower_bound = 0.0_r8
bounded_above = .false.; upper_bound = 0.0_r8

if(use_algorithm_info_mod) &
call obs_inc_info(obs_kind, filter_kind, rectangular_quadrature, gaussian_likelihood_tails, &
sort_obs_inc, spread_restoration, bounded_below, bounded_above, lower_bound, upper_bound)
call obs_inc_info(obs_kind, filter_kind, rectangular_quadrature, gaussian_likelihood_tails, &
sort_obs_inc, spread_restoration, bounded_below, bounded_above, lower_bound, upper_bound)

! Could add logic to check on sort being true when not needed.
! Could also add logic to limit the use of spread_restoration to EAKF. It will fail
Expand Down
30 changes: 15 additions & 15 deletions assimilation_code/modules/assimilation/filter_mod.f90
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ module filter_mod

use probit_transform_mod, only : transform_to_probit, transform_from_probit

use algorithm_info_mod, only : probit_dist_info
use algorithm_info_mod, only : probit_dist_info, init_algorithm_info_mod, end_algorithm_info_mod

use distribution_params_mod, only : distribution_params_type, NORMAL_DISTRIBUTION

Expand Down Expand Up @@ -166,7 +166,7 @@ module filter_mod
!----------------------------------------------------------------
! Namelist input with default values
!
logical :: use_algorithm_info_mod = .true.
character(len = 129) :: qcf_table_filename = ''
integer :: async = 0, ens_size = 20
integer :: tasks_per_model_advance = 1
! if init_time_days and seconds are negative initial time is 0, 0
Expand Down Expand Up @@ -261,7 +261,7 @@ module filter_mod


namelist /filter_nml/ async, &
use_algorithm_info_mod, &
qcf_table_filename, &
adv_ens_command, &
ens_size, &
tasks_per_model_advance, &
Expand Down Expand Up @@ -361,13 +361,13 @@ subroutine filter_main()

real(r8), allocatable :: prior_qc_copy(:)

call filter_initialize_modules_used() ! static_init_model called in here

! Read the namelist entry
call find_namelist_in_file("input.nml", "filter_nml", iunit)
read(iunit, nml = filter_nml, iostat = io)
call check_namelist_read(iunit, io, "filter_nml")

call filter_initialize_modules_used() ! static_init_model called in here

! Record the namelist values used for the run ...
if (do_nml_file()) write(nmlfileunit, nml=filter_nml)
if (do_nml_term()) write( * , nml=filter_nml)
Expand Down Expand Up @@ -1150,6 +1150,9 @@ subroutine filter_main()
call end_assim_model()
call trace_message('After end_model call')

! deallocate qcf_table_data structures
call end_algorithm_info_mod()

call trace_message('Before ensemble and obs memory cleanup')
call end_ensemble_manager(state_ens_handle)

Expand Down Expand Up @@ -1272,6 +1275,10 @@ subroutine filter_initialize_modules_used()
call static_init_assim_model()
call state_vector_io_init()
call initialize_qc()

! Initialize algorothm_info_mod and read in QCF table data
call init_algorithm_info_mod(qcf_table_filename)

call trace_message('After filter_initialize_module_used call')

end subroutine filter_initialize_modules_used
Expand Down Expand Up @@ -1599,16 +1606,9 @@ subroutine filter_ensemble_inflate(ens_handle, inflate_copy, inflate, ENS_MEAN_C
call get_state_meta_data(ens_handle%my_vars(j), my_state_loc, my_state_kind)

! Need to specify what kind of prior to use for each
! Use default of untransformed if use_algorithm_info_mod is not true
if(use_algorithm_info_mod) then
call probit_dist_info(my_state_kind, .true., .true., dist_type, &
bounded_below, bounded_above, lower_bound, upper_bound)
else
! Default is just a normal which does nothing
dist_type = NORMAL_DISTRIBUTION
bounded_below = .false. ; bounded_above = .false.
lower_bound = 0.0_r8; upper_bound = 0.0_r8
endif
call probit_dist_info(my_state_kind, .true., .true., dist_type, &
bounded_below, bounded_above, lower_bound, upper_bound)

call transform_to_probit(grp_size, ens_handle%copies(grp_bot:grp_top, j), &
dist_type, dist_params, probit_ens(1:grp_size), .false., &
bounded_below, bounded_above, lower_bound, upper_bound)
Expand Down
1 change: 1 addition & 0 deletions assimilation_code/modules/assimilation/filter_mod.nml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
&filter_nml
qcf_table_filename = ''
use_algorithm_info_mod = .true.,
single_file_in = .false.,
input_state_files = ''
Expand Down
69 changes: 69 additions & 0 deletions assimilation_code/programs/qcf_table/qcf_table_template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
QCF table version: 1
QTY_TEMPLATE:
obs_error_info:
bounded_below
bounded_above
lower_bound
upper_bound
probit_inflation:
dist_type
bounded_below
bounded_above
lower_bound
upper_bound
probit_state:
dist_type
bounded_below
bounded_above
lower_bound
upper_bound
probit_extended_state:
dist_type
bounded_below
bounded_above
lower_bound
upper_bound
obs_inc_info:
filter_kind
rectangular_quadrature
gaussian_likelihood_tails
sort_obs_inc
spread_restoration
bounded_below
bounded_above
lower_bound
upper_bound
QTY_STATE_VARIABLE:
obs_error_info:
bounded_below: .false.
bounded_above: .false.
lower_bound: -888888.0
upper_bound: -888888.0
probit_inflation:
dist_type: BOUNDED_NORMAL_RH_DISTRIBUTION
bounded_below: .false.
bounded_above: .false.
lower_bound: -888888.0
upper_bound: -888888.0
probit_state:
dist_type: BOUNDED_NORMAL_RH_DISTRIBUTION
bounded_below: .false.
bounded_above: .false.
lower_bound: -888888.0
upper_bound: -888888.0
probit_extended_state:
dist_type: BOUNDED_NORMAL_RH_DISTRIBUTION
bounded_below: .false.
bounded_above: .false.
lower_bound: -888888.0
upper_bound: -888888.0
obs_inc_info:
filter_kind: BOUNDED_NORMAL_RHF
rectangular_quadrature: .false.
gaussian_likelihood_tails: .false.
sort_obs_inc: .false.
spread_restoration: .false.
bounded_below: .false.
bounded_above: .false.
lower_bound: -888888.0
upper_bound: -888888.0
77 changes: 77 additions & 0 deletions assimilation_code/programs/qcf_table/yaml_to_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import yaml

#Prompt user for name of input and output files
input_yaml = input('Please enter the name of your input yaml file (filename must end in ".yaml") OR press enter/return to use the default filename "qcf_table.yaml"\n')
output_txt = input('Please enter the name for the output file for the table (filename must end in ".txt") OR press enter/return to use the default filename "qcf_table.txt"\n')

#Using deault names for input/output files if not specified
if (input_yaml == ''):
input_yaml = 'qcf_table.yaml'

if (output_txt == ''):
output_txt = 'qcf_table.txt'

#Open and load yaml file
with open(input_yaml) as file:
dict = yaml.safe_load(file)

column_headers = list(dict.keys())
column_data = list(dict.values())

obs_errror_info_header = dict['QTY_TEMPLATE']['obs_error_info']
probit_inflation_header = dict['QTY_TEMPLATE']['probit_inflation']
probit_state_header = dict['QTY_TEMPLATE']['probit_state']
probit_extended_state_header = dict['QTY_TEMPLATE']['probit_extended_state']
obs_inc_info_header = dict['QTY_TEMPLATE']['obs_inc_info']

f = open(output_txt, "w")

#Write the table's headers to the output file
f.write(column_headers[0] + ": " + str(column_data[0]) + "\n")

f.write(column_headers[1] + ": ")
for name in obs_errror_info_header:
f.write(name)
f.write(" ")
for name in probit_inflation_header:
f.write(name)
f.write(" ")
for name in probit_state_header:
f.write(name)
f.write(" ")
for name in probit_extended_state_header:
f.write(name)
f.write(" ")
for name in obs_inc_info_header:
f.write(name)
f.write("\n")

#Writing table data to the output file
for i in range(2, len(column_headers)):
f.write(column_headers[i] + " ")

obs_error_info = dict[column_headers[i]]['obs_error_info'].items()
for key, value in obs_error_info:
f.write(str(value) + " ")

probit_inflation = dict[column_headers[i]]['probit_inflation'].items()
for key, value in probit_inflation:
f.write(str(value) + " ")

probit_state = dict[column_headers[i]]['probit_state'].items()
for key, value in probit_state:
f.write(str(value) + " ")

probit_extended_state = dict[column_headers[i]]['probit_extended_state'].items()
for key, value in probit_extended_state:
f.write(str(value) + " ")

obs_inc_info = dict[column_headers[i]]['obs_inc_info'].items()
for key, value in obs_inc_info:
f.write(str(value) + " ")

f.write("\n")

f.close

print('QCF table produced in ' + output_txt)
24 changes: 24 additions & 0 deletions developer_tests/qceff/test_table_read.f90
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
! 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

! qcf_table_filename expected as command line arguement
program test_table_read

use algorithm_info_mod, only : init_algorithm_info_mod, end_algorithm_info_mod
use utilities_mod, only : initialize_utilities

implicit none

character(len=129) :: qcf_table_filename

call initialize_utilities('test_table_read')

call get_command_argument(1,qcf_table_filename)

call init_algorithm_info_mod(qcf_table_filename)

call end_algorithm_info_mod()


end program test_table_read
28 changes: 28 additions & 0 deletions developer_tests/qceff/work/input.nml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
&utilities_nml
TERMLEVEL = 1,
module_details = .false.
logfilename = 'dart_log.out'
/

# pick a random set of inputs
&preprocess_nml
overwrite_output = .true.
input_obs_qty_mod_file = '../../../assimilation_code/modules/observations/DEFAULT_obs_kind_mod.F90'
output_obs_qty_mod_file = '../../../assimilation_code/modules/observations/obs_kind_mod.f90'
input_obs_def_mod_file = '../../../observations/forward_operators/DEFAULT_obs_def_mod.F90'
output_obs_def_mod_file = '../../../observations/forward_operators/obs_def_mod.f90'
obs_type_files = '../../../observations/forward_operators/obs_def_reanalysis_bufr_mod.f90',
'../../../observations/forward_operators/obs_def_radar_mod.f90',
'../../../observations/forward_operators/obs_def_metar_mod.f90',
'../../../observations/forward_operators/obs_def_dew_point_mod.f90',
'../../../observations/forward_operators/obs_def_rel_humidity_mod.f90',
'../../../observations/forward_operators/obs_def_altimeter_mod.f90',
'../../../observations/forward_operators/obs_def_gps_mod.f90',
'../../../observations/forward_operators/obs_def_vortex_mod.f90',
'../../../observations/forward_operators/obs_def_gts_mod.f90',
'../../../observations/forward_operators/obs_def_QuikSCAT_mod.f90'
quantity_files = '../../../assimilation_code/modules/observations/default_quantities_mod.f90',
/

&obs_kind_nml
/
3 changes: 3 additions & 0 deletions developer_tests/qceff/work/qcf_table.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound
QTY_STATE_VARIABLE .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
3 changes: 3 additions & 0 deletions developer_tests/qceff/work/qcf_table_bad_qty.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound
QTY_HAIRCUT .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
3 changes: 3 additions & 0 deletions developer_tests/qceff/work/qcf_table_broke.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound
QTY_STATE_VARIABLE .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
6 changes: 6 additions & 0 deletions developer_tests/qceff/work/qcf_table_duplicates.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound
QTY_VEGETATED_AREA_FRACTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_AQUIFER_WATER .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_SEAICE_SALINITY008 .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_VEGETATED_AREA_FRACTION .true. .false. 0 1000 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
3 changes: 3 additions & 0 deletions developer_tests/qceff/work/qcf_table_extra_columns.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound frog
QTY_STATE_VARIABLE .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0 toad newt
6 changes: 6 additions & 0 deletions developer_tests/qceff/work/qcf_table_lower_bound_only.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
QCF table version: 1
QTY_TEMPLATE: bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound dist_type bounded_below bounded_above lower_bound upper_bound filter_kind rectangular_quadrature gaussian_likelihood_tails sort_obs_inc spread_restoration bounded_below bounded_above lower_bound upper_bound
QTY_STATE_VARIABLE .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_AQUIFER_WATER .true. .false. 0.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_SEAICE_SALINITY008 .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
QTY_VEGETATED_AREA_FRACTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RH_DISTRIBUTION .false. .false. -888888.0 -888888.0 BOUNDED_NORMAL_RHF .false. .false. .false. .false. .false. .false. -888888.0 -888888.0
Loading