NCAR / DART

Data Assimilation Research Testbed
https://dart.ucar.edu/
Apache License 2.0
189 stars 142 forks source link

QCEFF Table #545

Closed mjs2369 closed 11 months ago

mjs2369 commented 11 months ago

Description:

Previously the QCF code required an algorithm_info_mod specific to the model, which meant editing algorithm_info_mod.f90 to specify which distribution should be used for which quantity.

This code implements a QCF input table, which reads in the algorithm info choices (QCF options) at runtime and stores them in algorithm_info_mod module storage.

This replaces the former functionality of algorithm_info_mod if statements with the table information.

The observation, state, and inflation variables are read in from a single table. Each field keeps its own column, having 28 total in the table.

The full list of QCF input options and information of the structure of the table can be found in the documentation at DART/guide/qcf_table.rst

More info on the background of the issue can be read in the specification here: https://docs.google.com/document/d/1MnvEFfgj5SfFbnIahGHwjy1XJ5IWBvPS8NB1nrIjc8k/edit

Fixes issue

Fixes #503

Types of changes

Documentation changes needed?

While I have included new documentation on how to use the input table at DART/guide/qcf_table.rst , we may want to edit Jeff’s documentation at https://docs.dart.ucar.edu/en/quantile_methods/models/lorenz_96_tracer_advection/work/readme.html to reflect the difference in workflow for the tests listed. I think we should also add to this page the need to include the &probit_transform_nml when running on quantile_methods.

Tests

Compiled and ran filter with full debugging flags with Intel, CCE, gfortran Bitwise identical to quantile_methods, tested with Intel

Information on how to use the QCF input table with the quantile code is in the documentation at DART/guide/qcf_table.rst

build_everything now passes for all models:

RESULT: 0  models/null_model/work/ finished
RESULT: 1  models/POP/work/ finished
RESULT: 2  models/lorenz_63/work/ finished
RESULT: 3  models/9var/work/ finished
RESULT: 4  models/gitm/work/ finished
RESULT: 5  models/simple_advection/work/ finished
RESULT: 6  models/lorenz_96/work/ finished
RESULT: 7  models/ikeda/work/ finished
RESULT: 8  models/ROMS/work/ finished
RESULT: 9  models/lorenz_84/work/ finished
RESULT: 10 models/cam-fv/work/ finished
RESULT: 11  models/mpas_atm/work/ finished
RESULT: 12  models/forced_lorenz_96/work/ finished
RESULT: 13  models/wrf/work/ finished
RESULT: 14  models/cice/work/ finished
RESULT: 15  models/cm1/work/ finished
RESULT: 16  models/lorenz_04/work/ finished
RESULT: 17  models/bgrid_solo/work/ finished
RESULT: 18  models/noah/work/ finished
RESULT: 19  models/wrf_hydro/work/ finished
RESULT: 20  models/lorenz_96_2scale/work/ finished
RESULT: 21 observations/obs_converters/GOES/work/ failed
RESULT: 22  observations/obs_converters/tec/work/ finished
RESULT: 23  observations/obs_converters/GRACE/work/ finished
RESULT: 24  observations/obs_converters/CNOFS/work/ finished
RESULT: 25  observations/obs_converters/GPSPW/work/ finished
RESULT: 26  observations/obs_converters/SSEC/work/ finished
RESULT: 27  observations/obs_converters/text_GITM/work/ finished
RESULT: 28  observations/obs_converters/GTSPP/work/ finished
RESULT: 29 observations/obs_converters/gps/work/ failed
RESULT: 30  observations/obs_converters/GSI2DART/work/ finished
RESULT: 31  observations/obs_converters/SABER/work/ finished
RESULT: 32  observations/obs_converters/SIF/work/ finished
RESULT: 33  observations/obs_converters/WOD/work/ finished
RESULT: 34  observations/obs_converters/tpw/work/ finished
RESULT: 35  observations/obs_converters/ROMS/work/ finished
RESULT: 36  observations/obs_converters/COSMOS/work/ finished
RESULT: 37 observations/obs_converters/var/work/ failed
RESULT: 38  observations/obs_converters/tropical_cyclone/work/ finished
RESULT: 39  observations/obs_converters/CONAGUA/work/ finished
RESULT: 40  observations/obs_converters/Ameriflux/work/ finished
RESULT: 41  observations/obs_converters/CHAMP/work/ finished
RESULT: 42  observations/obs_converters/cice/work/ finished
RESULT: 43 observations/obs_converters/GMI/work/ failed
RESULT: 44  observations/obs_converters/DWL/work/ finished
RESULT: 45  observations/obs_converters/MIDAS/work/ finished
RESULT: 46  observations/obs_converters/USGS/work/ finished
RESULT: 47  observations/obs_converters/SST/work/ finished
RESULT: 48  observations/obs_converters/MPD/work/ finished
RESULT: 49  observations/obs_converters/even_sphere/work/ finished
RESULT: 50  observations/obs_converters/MODIS/work/ finished
RESULT: 51  observations/obs_converters/NCEP/prep_bufr/work/ finished
RESULT: 52  observations/obs_converters/NCEP/ascii_to_obs/work/ finished
RESULT: 53  observations/obs_converters/NCEP/netcdf/work/ finished
RESULT: 54  observations/obs_converters/gnd_gps_vtec/work/ finished
RESULT: 55  observations/obs_converters/SSUSI/work/ finished
RESULT: 56  observations/obs_converters/ok_mesonet/work/ finished
RESULT: 57  observations/obs_converters/snow/work/ finished
RESULT: 58  observations/obs_converters/text/work/ finished
RESULT: 59  observations/obs_converters/AURA/work/ finished
RESULT: 60  observations/obs_converters/radar/work/ finished
RESULT: 61  observations/obs_converters/MADIS/work/ finished
RESULT: 62 observations/obs_converters/quikscat/work/ failed
RESULT: 63 observations/obs_converters/AIRS/work/ failed
RESULT: 64  observations/obs_converters/AVISO/work/ finished

A developer test for the table read is in progress.

Checklist for merging

Checklist for release

Testing Datasets

Open Issues/Questions

There are two input options for obs_inc_info (rectangular_quadrature and gaussian_likelihood_tails) that are only compatible with the original RHF implementation. Currently, these variables are unused in algorithm_info_mod.f90. These could either be removed from alg_info_mod and the namelist, or we can implement a conditional: if (filter_kind == RHF) then rectangular_quadrature: .true. gaussian_likelihood_tails: .false. https://github.com/NCAR/DART/blob/fc48d9d8cca1dce1b4e4fafe4983dac66bd6c5e8/assimilation_code/modules/assimilation/algorithm_info_mod.f90#L233

Currently, the only check on the bounds that is implemented is a simple check to ensure that the lower bound is not less than the upper bound. Do we know if we want to put more explicit limits on the bounds?

There are differences in the formatting of log_qcf_info to dart_log.out with the cce compiler. This PR https://github.com/NCAR/DART/pull/491 describes this general issue with cce.

Currently, I am logging the headers of the QCF table to dart_log.out. Do we want these in the log? Similarly, is writing the data straight to the dart_log sufficient, or do we want to format this more cleanly (i.e. make it look like a table)?

hkershaw-brown commented 11 months ago

@mjs2369 do you have any developer tests for reading the qcf table?

hkershaw-brown commented 11 months ago

Code to be removed:

models/cam-fv/work/algorithm_info_mod.f90
assimilation_code/modules/assimilation/all_eakf_algorithm_info_mod
assimilation_code/modules/assimilation/neg_algorithm_info_mod
assimilation_code/modules/assimilation/state_eakf_tracer_bnrhf_algorithm_info_mod
assimilation_code/modules/assimilation/one_above_algorithm_info_mod
hkershaw-brown commented 11 months ago

obs_kind is outdated terminology. qty (quantity) is the term that has replaced kind. I'll go ahead and switch this out.

mjs2369 commented 11 months ago

@hkershaw-brown great suggestions. I'll commit them after we change the author on the previous commits

hkershaw-brown commented 11 months ago

Note on:

RESULT: 10 models/cam-fv/work/ finished

Possibly the local algorithm_info_mod.f90 was removed for your test but not committed, because the branch as-is the cam-fv build fails because there is an algorithm_info_mod.f90 in cam-fv/work

/Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90(93): error #6580: Name in only-list does not exist or is not accessible.   [INIT_ALGORITHM_INFO_MOD]
use algorithm_info_mod, only : probit_dist_info, init_algorithm_info_mod, end_algorithm_info_mod
-------------------------------------------------^
/Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90(93): error #6580: Name in only-list does not exist or is not accessible.   [END_ALGORITHM_INFO_MOD]
use algorithm_info_mod, only : probit_dist_info, init_algorithm_info_mod, end_algorithm_info_mod
--------------------------------------------------------------------------^
compilation aborted for /Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90 (code 1)
make: *** [filter_mod.o] Error 1
mjs2369 commented 11 months ago

Note on:

RESULT: 10 models/cam-fv/work/ finished

Possibly the local algorithm_info_mod.f90 was removed for your test but not committed, because the branch as-is the cam-fv build fails because there is an algorithm_info_mod.f90 in cam-fv/work

/Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90(93): error #6580: Name in only-list does not exist or is not accessible.   [INIT_ALGORITHM_INFO_MOD]
use algorithm_info_mod, only : probit_dist_info, init_algorithm_info_mod, end_algorithm_info_mod
-------------------------------------------------^
/Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90(93): error #6580: Name in only-list does not exist or is not accessible.   [END_ALGORITHM_INFO_MOD]
use algorithm_info_mod, only : probit_dist_info, init_algorithm_info_mod, end_algorithm_info_mod
--------------------------------------------------------------------------^
compilation aborted for /Users/hkershaw/DART/pull_requests/pull_545/assimilation_code/modules/assimilation/filter_mod.f90 (code 1)
make: *** [filter_mod.o] Error 1

@hkershaw-brown yes, cam-fv finished for me because I removed the algorithm_info_mod in work locally, but forgot to commit and push this change.

This has now been pushed to the remote qcf_table branch.

hkershaw-brown commented 11 months ago

closing this pull request in favour of https://github.com/NCAR/DART/pull/553 which this request, but with commits correctly attributed to Marlee.

Do not merge this use #553