Skip to content

Commit

Permalink
Address reviewer comments
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidNew-NOAA committed Feb 12, 2025
1 parent 166cad4 commit 5e7e1ae
Show file tree
Hide file tree
Showing 9 changed files with 144 additions and 137 deletions.
5 changes: 4 additions & 1 deletion parm/aero/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ analysis_variables: [mass_fraction_of_sulfate_in_air,
mass_fraction_of_dust005_in_air, mass_fraction_of_sea_salt001_in_air,
mass_fraction_of_sea_salt002_in_air, mass_fraction_of_sea_salt003_in_air,
mass_fraction_of_sea_salt004_in_air]
iau_hours: {{ IAUFHRS }}

# Model things
# ------------
Expand Down Expand Up @@ -72,6 +71,10 @@ aero_cycle_time_fv3: "{{ current_cycle | to_fv3time }}"
aero_background_error_time_iso: "{{ background_time | to_isotime }}"
aero_background_error_time_fv3: "{{ background_time | to_fv3time }}"

# IAU times
aero_iau_hours: {{ IAUFHRS }}
aero_iau_times_iso: {{ iau_times_iso }}

# Background error
aero_berror_data_directory: "{{ DATA }}/berror"
aero_berror_diffusion_directory: "{{ DATA }}/diffusion"
Expand Down
5 changes: 4 additions & 1 deletion parm/atm/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ final_diagnostics_departures: anlmob
final_prints_frequency: PT3H
analysis_variables: [ua,va,t,ps,sphum,ice_wat,liq_wat,o3mr]
number_of_outer_loops: 2
iau_hours: {{ IAUFHRS }}

# Model things
# ------------
Expand All @@ -50,6 +49,10 @@ atmosphere_background_ensemble_path: ./ens/mem%mem%
# Default background time is for 3D applications
atmosphere_background_time_iso: "{{ current_cycle | to_isotime }}"

# IAU times
atmosphere_iau_hours: {{ IAUFHRS }}
atmosphere_iau_times_iso: {{ iau_times_iso }}

# Background error
atmosphere_bump_data_directory: "{{ DATA }}/berror"
atmosphere_gsibec_path: "{{ DATA }}/berror"
Expand Down
4 changes: 3 additions & 1 deletion parm/snow/jcb-base.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ snow_background_time_fv3: "{{ bkg_time_fv3 }}"
snow_increment_time_iso: "{{ bkg_time_iso }}"
snow_increment_time_fv3: "{{ bkg_time_fv3 }}"

iau_hours: {{ IAUFHRS }}
# IAU times
snow_iau_hours: {{ IAUFHRS }}
snow_iau_times_iso: {{ iau_times_iso }}

# Analysis standard things
# ------------------------
Expand Down
8 changes: 4 additions & 4 deletions utils/fv3jedi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ target_compile_features( fv3jedi_fv3inc.x PUBLIC cxx_std_17)
target_link_libraries( fv3jedi_fv3inc.x PUBLIC NetCDF::NetCDF_CXX oops fv3jedi)

# Ensemble increment recentering
ecbuild_add_executable( TARGET fv3jedi_ecen.x
SOURCES fv3jedi_ecen.cc fv3jedi_ecen.h)
target_compile_features( fv3jedi_ecen.x PUBLIC cxx_std_17)
target_link_libraries( fv3jedi_ecen.x PUBLIC NetCDF::NetCDF_CXX oops fv3jedi)
ecbuild_add_executable( TARGET fv3jedi_ensemble_recenter.x
SOURCES fv3jedi_ensemble_recenter.cc fv3jedi_ensemble_recenter.h)
target_compile_features( fv3jedi_ensemble_recenter.x PUBLIC cxx_std_17)
target_link_libraries( fv3jedi_ensemble_recenter.x PUBLIC NetCDF::NetCDF_CXX oops fv3jedi)
8 changes: 0 additions & 8 deletions utils/fv3jedi/fv3jedi_ecen.cc

This file was deleted.

121 changes: 0 additions & 121 deletions utils/fv3jedi/fv3jedi_ecen.h

This file was deleted.

8 changes: 8 additions & 0 deletions utils/fv3jedi/fv3jedi_ensemble_recenter.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "fv3jedi_ensemble_recenter.h"
#include "oops/runs/Run.h"

int main(int argc, char ** argv) {
oops::Run run(argc, argv);
gdasapp::EnsembleRecenter EnsembleRecenter;
return run.execute(EnsembleRecenter);
}
120 changes: 120 additions & 0 deletions utils/fv3jedi/fv3jedi_ensemble_recenter.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
#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/Duration.h"
#include "oops/util/Logger.h"
#include "oops/util/parameters/OptionalParameter.h"
#include "oops/util/parameters/Parameter.h"
#include "oops/util/parameters/Parameters.h"
#include "oops/util/parameters/RequiredParameter.h"

class ForecastHourParameters : public oops::Parameters {
OOPS_CONCRETE_PARAMETERS(ForecastHourParameters, Parameters)
public:
oops::RequiredParameter<std::string> fcstTimeStr{"forecast time", \
this};
oops::RequiredParameter<eckit::LocalConfiguration> detBkgConfig{"deterministic background", \
this};
oops::RequiredParameter<eckit::LocalConfiguration> varIncrConfig{"variational increment", \
this};
oops::RequiredParameter<eckit::LocalConfiguration> ensMeanAnlConfig{"ensemble mean analysis", \
this};
oops::RequiredParameter<eckit::LocalConfiguration> corIncrConfig{"correction increment", \
this};
};

class EnsembleRecenterParameters : public oops::Parameters {
OOPS_CONCRETE_PARAMETERS(EnsembleRecenterParameters, Parameters)
public:
oops::RequiredParameter<oops::Variables> \
incrVars{"increment variables", this};
oops::RequiredParameter<eckit::LocalConfiguration> \
varIncrGeomConfig{"variational increment geometry", this};
oops::RequiredParameter<eckit::LocalConfiguration> \
detBkgGeomConfig{"deterministic background geometry", this};
oops::RequiredParameter<eckit::LocalConfiguration> \
ensMeanAnlGeomConfig{"ensemble mean analysis geometry", this};
oops::RequiredParameter<eckit::LocalConfiguration> \
corIncrGeomConfig{"correction increment geometry", this};
oops::RequiredParameter<std::vector<ForecastHourParameters>> \
fcstHourParams{"forecast hours", this};
};

namespace gdasapp {

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

int execute(const eckit::Configuration & fullConfig) const {
// Deserialize parameters
EnsembleRecenterParameters params;
params.deserialize(fullConfig);

// Setup geometries
const fv3jedi::Geometry varIncrGeom(params.varIncrGeomConfig.value(), this->getComm());
const fv3jedi::Geometry detBkgGeom(params.detBkgGeomConfig.value(), this->getComm());
const fv3jedi::Geometry ensMeanAnlGeom(params.ensMeanAnlGeomConfig.value(), this->getComm());
const fv3jedi::Geometry corIncrGeom(params.corIncrGeomConfig.value(), this->getComm());

// Loop through forecast hours ("recenterings")
const int nhours = params.fcstHourParams.value().size();
for ( int ihour = 0; ihour < nhours; ihour++ ) {
const ForecastHourParameters fcstHourParams = params.fcstHourParams.value()[ihour];

// Get forecast time
const util::DateTime fcstTime(fcstHourParams.fcstTimeStr.value());

// Initialize background
fv3jedi::State xxBkgDet(detBkgGeom, params.incrVars.value(), fcstTime);
xxBkgDet.read(fcstHourParams.detBkgConfig.value());

// Initialize increment
fv3jedi::Increment dxVar(varIncrGeom, params.incrVars.value(), fcstTime);
dxVar.read(fcstHourParams.varIncrConfig.value());

// Initialize ensemble mean analysis
fv3jedi::State xxAnlEnsMean(ensMeanAnlGeom, params.incrVars.value(), fcstTime);
xxAnlEnsMean.read(fcstHourParams.ensMeanAnlConfig.value());

// Compute analysis
fv3jedi::State xxAnlVar(detBkgGeom, xxBkgDet);
xxAnlVar += dxVar;

// Interpolate full resolution analysis to ensemble resolution
fv3jedi::State xxAnlVarEnsRes(corIncrGeom, xxAnlVar);

// Compute correction increment
fv3jedi::Increment dxCor(corIncrGeom, params.incrVars.value(), fcstTime);
dxCor.diff(xxAnlVarEnsRes, xxAnlEnsMean);

// Write correction increment
dxCor.write(fcstHourParams.corIncrConfig.value());
}

return 0;
}

private:
std::string appname() const {
return "gdasapp::EnsembleRecenter";
}
};
} // namespace gdasapp

0 comments on commit 5e7e1ae

Please sign in to comment.