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

Add JEDI-based diagnostic analysis calculation utillity #1293

Draft
wants to merge 41 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
d167649
Initial commit
DavidNew-NOAA Sep 8, 2024
d3d2bcf
update jcb-gdas hash
DavidNew-NOAA Sep 8, 2024
40523d9
Redo calcanl
DavidNew-NOAA Sep 11, 2024
41fbc19
Initial commit
DavidNew-NOAA Sep 11, 2024
12014a4
Update JCB stuff
DavidNew-NOAA Sep 11, 2024
452bcf7
Update FV3-JEDI hash
DavidNew-NOAA Sep 11, 2024
45b2030
Update JCB-GDAS hash
DavidNew-NOAA Sep 11, 2024
f186953
Update FV3-JEDI hash
DavidNew-NOAA Sep 11, 2024
87c5c3c
Update FV3-JEDI hash
DavidNew-NOAA Sep 11, 2024
fbacc57
Update JCB-GDAS and FV3-JEDI hashes
DavidNew-NOAA Sep 12, 2024
81adbda
Forgot FV3-JEDI hash
DavidNew-NOAA Sep 12, 2024
1b13907
Merge branch 'develop' into feature/cubeinc
DavidNew-NOAA Sep 12, 2024
07e6528
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Sep 12, 2024
1e3c90c
Update JCB stuff
DavidNew-NOAA Sep 13, 2024
fd7410a
Revert accidental obs changes
DavidNew-NOAA Sep 13, 2024
42601f1
Update jcb-gdas hash
DavidNew-NOAA Sep 13, 2024
5eb57a7
Update jcb-gdas hash
DavidNew-NOAA Sep 13, 2024
80377a9
coding norms
DavidNew-NOAA Sep 13, 2024
e0f4547
coding norms
DavidNew-NOAA Sep 13, 2024
4404b7d
coding norms
DavidNew-NOAA Sep 13, 2024
49ddc0d
Merge branch 'feature/cubeinc' into feature/calcanl
DavidNew-NOAA Sep 13, 2024
9d863f0
Make hydrostatic_delz just delz
DavidNew-NOAA Sep 17, 2024
b5b006e
Update JCB-GDAS hash
DavidNew-NOAA Sep 17, 2024
5659d1d
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Sep 17, 2024
1e9031a
Update hashes
DavidNew-NOAA Sep 18, 2024
4c8657d
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Sep 19, 2024
fd29763
Update FV3-JEDI hash
DavidNew-NOAA Sep 19, 2024
9228759
Update JCB-GDAS hash and update calcanl util
DavidNew-NOAA Sep 23, 2024
c3aab82
Coding norms
DavidNew-NOAA Sep 23, 2024
76daa87
Update FV3-JEDI hash
DavidNew-NOAA Sep 23, 2024
d61cfd0
Rename some stuff per Rahul's comment
DavidNew-NOAA Sep 23, 2024
885c0b5
More renaming
DavidNew-NOAA Sep 23, 2024
d8b4743
Update JCB-GDAS hash
DavidNew-NOAA Sep 23, 2024
09b60c1
Update jcb-gdas hash
DavidNew-NOAA Sep 25, 2024
d9f10d9
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Sep 25, 2024
233ab2a
Add temporary Guassian increment write option to FV3 increment conver…
DavidNew-NOAA Sep 25, 2024
be3c4df
Revert changes to fv3 increment converter and update jcb-gdas hash
DavidNew-NOAA Sep 26, 2024
b1d90f2
Minor comment change
DavidNew-NOAA Sep 26, 2024
7bae01e
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Sep 27, 2024
65bcffc
Merge branch 'develop' into feature/calcanl
DavidNew-NOAA Oct 2, 2024
7fc8a9b
Update fv3-jedi hash
DavidNew-NOAA Oct 2, 2024
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
3 changes: 1 addition & 2 deletions parm/atm/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ app_path_observation_chronicle: "{{PARMgfs}}/gdas/jcb-gdas/observation_chronicle

# Places where we deviate from the generic file name of a yaml
# ------------------------------------------------------------
#final_increment_file: final_increment_gaussian
final_increment_file: atmosphere_final_increment_cubed_sphere
final_increment_file: atmosphere_final_increment_fms_nonrestart
output_ensemble_increments_file: atmosphere_output_ensemble_increments_cubed_sphere
model_file: atmosphere_model_pseudo
initial_condition_file: atmosphere_background # Initial conditions for 4D apps is background
Expand Down
1 change: 0 additions & 1 deletion parm/io/fv3jedi_fieldmetadata_fv3inc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,3 @@ field metadata:

- long name: layer_thickness
io name: delz_inc

2 changes: 1 addition & 1 deletion sorc/fv3-jedi
Submodule fv3-jedi updated 102 files
6 changes: 6 additions & 0 deletions utils/fv3jedi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,9 @@ ecbuild_add_executable( TARGET fv3jedi_fv3inc.x
SOURCES fv3jedi_fv3inc.cc fv3jedi_fv3inc.h)
target_compile_features( fv3jedi_fv3inc.x PUBLIC cxx_std_17)
target_link_libraries( fv3jedi_fv3inc.x PUBLIC NetCDF::NetCDF_CXX oops fv3jedi)

# Analysis calculation
ecbuild_add_executable( TARGET fv3jedi_analcalc.x
SOURCES fv3jedi_analcalc.cc fv3jedi_analcalc.h)
target_compile_features( fv3jedi_analcalc.x PUBLIC cxx_std_17)
target_link_libraries( fv3jedi_analcalc.x PUBLIC NetCDF::NetCDF_CXX oops fv3jedi)
8 changes: 8 additions & 0 deletions utils/fv3jedi/fv3jedi_analcalc.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "fv3jedi_analcalc.h"
#include "oops/runs/Run.h"

int main(int argc, char ** argv) {
oops::Run run(argc, argv);
gdasapp::analcalc analcalc;
return run.execute(analcalc);
}
105 changes: 105 additions & 0 deletions utils/fv3jedi/fv3jedi_analcalc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
#pragma once

#include <iostream>
#include <memory>
#include <string>
#include <vector>

#include "eckit/config/LocalConfiguration.h"

#include "fv3jedi/Geometry/Geometry.h"
#include "fv3jedi/Increment/Increment.h"
#include "fv3jedi/State/State.h"

#include "oops/mpi/mpi.h"
#include "oops/runs/Application.h"
#include "oops/util/ConfigFunctions.h"
#include "oops/util/DateTime.h"
#include "oops/util/Logger.h"

namespace gdasapp {

// Main application class
class analcalc : public oops::Application {
public:
explicit analcalc(const eckit::mpi::Comm & comm = oops::mpi::world())
: Application(comm) {}
static const std::string classname() {return "gdasapp::analcalc";}

int execute(const eckit::Configuration & fullConfig, bool validate) const {
// Get geometry configurations
const eckit::LocalConfiguration bkgGeomConfig(fullConfig, "background geometry");
const eckit::LocalConfiguration incrGeomConfig(fullConfig, "increment geometry");
const eckit::LocalConfiguration anlFullResGeomConfig(fullConfig, \
"full resolution analysis geometry");
const eckit::LocalConfiguration anlEnsResGeomConfig(fullConfig, \
"ensemble resolution analysis geometry");

// Setup geometries
const fv3jedi::Geometry incrGeom(incrGeomConfig, this->getComm());
const fv3jedi::Geometry bkgGeom(bkgGeomConfig, this->getComm());
const fv3jedi::Geometry anlFullResGeom(anlFullResGeomConfig, this->getComm());
const fv3jedi::Geometry anlEnsResGeom(anlEnsResGeomConfig, this->getComm());

// Get additions configuration
int nhrs;
std::vector<eckit::LocalConfiguration> additionsConfig;
if ( fullConfig.has("additions") ) {
fullConfig.get("additions", additionsConfig);
nhrs = additionsConfig.size();
} else {
eckit::LocalConfiguration additionsFromTemplateConfig(fullConfig, \
"additions from template");
eckit::LocalConfiguration templateConfig(additionsFromTemplateConfig, "template");
std::string pattern;
std::vector<std::string> fcstHours;
additionsFromTemplateConfig.get("pattern", pattern);
additionsFromTemplateConfig.get("forecast hours", fcstHours);

nhrs = fcstHours.size();
for ( int ihrs = 0; ihrs < nhrs; ihrs++ ) {
eckit::LocalConfiguration thisAdditionsConfig(templateConfig);
util::seekAndReplace(thisAdditionsConfig, pattern, fcstHours[ihrs]);
additionsConfig.push_back(thisAdditionsConfig);
}
}

// Loops through forecast hours
for ( int ihrs = 0; ihrs < nhrs; ihrs++ ) {
// Get elements of individual additions configurations
const eckit::LocalConfiguration bkgConfig(additionsConfig[ihrs], "background");
const eckit::LocalConfiguration incrConfig(additionsConfig[ihrs], "increment");
const eckit::LocalConfiguration anlFullResConfig(additionsConfig[ihrs], \
"full resolution analysis");
const eckit::LocalConfiguration anlEnsResConfig(additionsConfig[ihrs], \
"ensemble resolution analysis");

// Initialize background
fv3jedi::State xxBkg(bkgGeom, bkgConfig);

// Initialize increment
oops::Variables incrVars(incrConfig, "added variables");
fv3jedi::Increment dx(incrGeom, incrVars, xxBkg.validTime());
dx.read(incrConfig);

// Add increment to background state
fv3jedi::State xxAnlFullRes(anlFullResGeom, xxBkg);
xxAnlFullRes += dx;

// Interpolate full resolution analysis to ensemble resolution
fv3jedi::State xxAnlEnsRes(anlEnsResGeom, xxAnlFullRes);

// Write analysis state
xxAnlFullRes.write(anlFullResConfig);
xxAnlEnsRes.write(anlEnsResConfig);
}

return 0;
}

private:
std::string appname() const {
return "gdasapp::analcalc";
}
};
} // namespace gdasapp
2 changes: 1 addition & 1 deletion utils/fv3jedi/fv3jedi_fv3inc.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ namespace gdasapp {
// Inputs setup
// ---------------------------------------------------------------------------------

// Get input configurations
// Get I/O configurations
eckit::LocalConfiguration stateInputConfig(membersConfig[imem], "background input");
eckit::LocalConfiguration jediIncrInputConfig(membersConfig[imem], "jedi increment input");
eckit::LocalConfiguration fv3IncrOuputConfig(membersConfig[imem], "fv3 increment output");
Expand Down
Loading