Skip to content

Commit

Permalink
Add 3DVar and error covariance toolbox (dirac test) main programs.
Browse files Browse the repository at this point in the history
  • Loading branch information
frld committed Jul 26, 2024
1 parent 010eaf3 commit 0a98ddb
Show file tree
Hide file tree
Showing 13 changed files with 325 additions and 1 deletion.
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ ecbuild_debug( " atlas_orca_FEATURES: [${atlas_orca_FEATURES}]" )
find_package( oops REQUIRED )
ecbuild_debug( " oops_FEATURES : [${oops_FEATURES}]" )

find_package( saber REQUIRED)
ecbuild_debug( " saber_FEATURES : [${saber_FEATURES}]" )

find_package( ufo REQUIRED)
ecbuild_debug( " ufo_FEATURES : [${ufo_FEATURES}]" )

Expand Down
19 changes: 19 additions & 0 deletions src/mains/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ if( ${nemo-feedback_FOUND} )
LIBS orcamodel nemo_feedback
DEFINITIONS NEMO_FEEDBACK_EXISTS
)

ecbuild_add_executable( TARGET orcamodel_3DVar.x
SOURCES orcamodel3DVar.cc
LIBS orcamodel nemo_feedback
DEFINITIONS NEMO_FEEDBACK_EXISTS
)
else()
message(" compiling without feedback file support")
ecbuild_add_executable( TARGET orcamodel_hofx.x
Expand All @@ -22,6 +28,19 @@ else()
SOURCES orcamodelHofX3D.cc
LIBS orcamodel
)

ecbuild_add_executable( TARGET orcamodel_3DVar.x
SOURCES orcamodel3DVar.cc
LIBS orcamodel
)
endif()

ecbuild_add_executable( TARGET orcamodel_ErrorCovarianceToolbox.x
SOURCES orcamodelErrorCovarianceToolbox.cc
LIBS orcamodel
)

oops_output_json_schema( "orcamodel_hofx.x" )
oops_output_json_schema( "orcamodel_hofx3D.x" )
oops_output_json_schema( "orcamodel_3DVar.x" )
oops_output_json_schema( "orcamodel_ErrorCovarianceToolbox.x" )
36 changes: 36 additions & 0 deletions src/mains/orcamodel3DVar.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* (C) British Crown Copyright 2024 MetOffice
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/

#include "atlas/library/Library.h"
#include "oops/generic/instantiateModelFactory.h"

#include "oops/runs/Run.h"
#include "oops/runs/Variational.h"
#include "saber/oops/instantiateCovarFactory.h"

#include "ufo/ObsTraits.h"
#include "ufo/instantiateObsFilterFactory.h"
#if defined(NEMO_FEEDBACK_EXISTS)
#include "nemo-feedback/instantiateObsFilterFactory.h"
#endif

#include "orca-jedi/utilities/OrcaModelTraits.h"

int main(int argc, char ** argv) {
oops::Run run(argc, argv);
oops::instantiateModelFactory<orcamodel::OrcaModelTraits>();
atlas::Library::instance().initialise();
saber::instantiateCovarFactory<orcamodel::OrcaModelTraits>();
ufo::instantiateObsFilterFactory();
#if defined(NEMO_FEEDBACK_EXISTS)
nemo_feedback::instantiateObsFilterFactory<ufo::ObsTraits>();
#endif
oops::Variational<orcamodel::OrcaModelTraits , ufo::ObsTraits> var;
int i = run.execute(var);
atlas::Library::instance().finalise();
return i;
}
25 changes: 25 additions & 0 deletions src/mains/orcamodelErrorCovarianceToolbox.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
* (C) British Crown Copyright 2024 MetOffice
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/

#include "atlas/library/Library.h"

#include "saber/oops/ErrorCovarianceToolbox.h"
#include "saber/oops/instantiateCovarFactory.h"

#include "oops/runs/Run.h"
#include "orca-jedi/utilities/OrcaModelTraits.h"

int main(int argc, char ** argv) {
oops::Run run(argc, argv);
atlas::Library::instance().initialise();
saber::instantiateCovarFactory<orcamodel::OrcaModelTraits>();

saber::ErrorCovarianceToolbox<orcamodel::OrcaModelTraits> var;
int i = run.execute(var);
atlas::Library::instance().finalise();
return i;
}
7 changes: 6 additions & 1 deletion src/orca-jedi/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,20 @@ utilities/Types.h
utilities/Types.cc
utilities/IOUtils.h
utilities/IOUtils.cc
utilities/ModelData.h
utilities/ModelData.cc
variablechanges/VariableChangeParameters.h
variablechanges/VariableChange.h
variablechanges/LinearVariableChange.h
variablechanges/LinearVariableChange.cc
variablechanges/LinearVariableChangeParameters.h
)



ecbuild_add_library( TARGET orcamodel
SOURCES ${oops_orcamodel_src_files}
PUBLIC_LIBS oops ufo atlas atlas-orca eckit netcdf
PUBLIC_LIBS oops saber ufo atlas atlas-orca eckit netcdf
INSTALL_HEADERS LISTED
LINKER_LANGUAGE ${OOPS_LINKER_LANGUAGE}
)
Expand Down
27 changes: 27 additions & 0 deletions src/orca-jedi/state/State.cc
Original file line number Diff line number Diff line change
Expand Up @@ -359,4 +359,31 @@ atlas::Field State::getField(int i) const {
return stateFields_[i];
}

/// \brief Output state fieldset as an atlas fieldset.
/// \param fset Atlas fieldset to output to.
void State::toFieldSet(atlas::FieldSet & fset) const {
oops::Log::debug() << "State toFieldSet starting" << std::endl;

fset = atlas::FieldSet();

for (size_t i=0; i < vars_.size(); ++i) {
// copy variable from increments to new field set
atlas::Field field = stateFields_[i];
std::string fieldName = field.name();
oops::Log::debug() << "Copy state toFieldSet " << fieldName << std::endl;

fset->add(field);
}
oops::Log::debug() << "State toFieldSet done" << std::endl;
}

void State::accumul(const double & zz, const State & xx) {

std::string err_message =
"orcamodel::State::accumul not implemented";
throw eckit::NotImplemented(err_message, Here());

}


} // namespace orcamodel
3 changes: 3 additions & 0 deletions src/orca-jedi/state/State.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ class State : public util::Printable,
oops::Variables & variables() {return vars_;}

atlas::Field getField(int) const;
void toFieldSet(atlas::FieldSet &) const;

void accumul(const double &, const State &);

private:
void setupStateFields();
Expand Down
35 changes: 35 additions & 0 deletions src/orca-jedi/utilities/ModelData.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* (C) Crown Copyright 2023 Met Office.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/


#include <ostream>

#include "orca-jedi/utilities/ModelData.h"


namespace orcamodel {


const eckit::LocalConfiguration ModelData::modelData() const {
eckit::LocalConfiguration model_data;

//
// retrieve data that need to be shared with other system components
// and stored them into the data structure 'model_data'
//

return model_data;
}


void ModelData::print(std::ostream & os) const {
os << "orcamodel::ModelData::ModelData(): " << modelData();
}


} // namespace orcamodel

40 changes: 40 additions & 0 deletions src/orca-jedi/utilities/ModelData.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* (C) Crown Copyright 2023 Met Office.
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/


#pragma once

#include <ostream>
#include <string>

#include "eckit/config/LocalConfiguration.h"

#include "oops/util/Printable.h"

#include "orca-jedi/geometry/Geometry.h"


namespace orcamodel {

class Geometry;


class ModelData : public util::Printable {
public:
explicit ModelData(const Geometry &) {}
~ModelData() {}

static const std::string classname() {return "orcamodel::ModelData";}

const eckit::LocalConfiguration modelData() const;

private:
void print(std::ostream &) const override;
};


} // namespace orcamodel
4 changes: 4 additions & 0 deletions src/orca-jedi/utilities/OrcaModelTraits.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@
#include "orca-jedi/model/ModelBiasIncrement.h"
#include "orca-jedi/model/ModelBiasCovariance.h"
#include "orca-jedi/state/State.h"
#include "orca-jedi/utilities/ModelData.h"
#include "orca-jedi/variablechanges/VariableChange.h"
#include "orca-jedi/variablechanges/LinearVariableChange.h"

namespace orcamodel {

Expand All @@ -35,6 +37,8 @@ struct OrcaModelTraits {
typedef orcamodel::ModelBiasCovariance ModelAuxCovariance;
typedef orcamodel::State State;
typedef orcamodel::VariableChange VariableChange;
typedef orcamodel::LinearVariableChange LinearVariableChange;
typedef orcamodel::ModelData ModelData;
};

} // namespace orcamodel
43 changes: 43 additions & 0 deletions src/orca-jedi/variablechanges/LinearVariableChange.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* (C) British Crown Copyright 2021 Met Office
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/

#include <string>

#include "eckit/exception/Exceptions.h"

#include "orca-jedi/variablechanges/LinearVariableChange.h"

#include "oops/util/Printable.h"
#include "orca-jedi/geometry/Geometry.h"
#include "orca-jedi/state/State.h"
#include "orca-jedi/variablechanges/LinearVariableChangeParameters.h"

namespace orcamodel {

// -----------------------------------------------------------------------------
//LinearVariableChange::LinearVariableChange(const Parameters_ &, const Geometry &) {}
LinearVariableChange::LinearVariableChange(const Geometry &, const Parameters_ &) {}
LinearVariableChange::LinearVariableChange(const Geometry &, const eckit::Configuration &) {}
// -----------------------------------------------------------------------------
//LinearVariableChange::~LinearVariableChange() {}

void LinearVariableChange::changeVarTL(Increment & dx, const oops::Variables & vars)
const { }

void LinearVariableChange::changeVarInverseTL(Increment & dx, const oops::Variables & vars)
const { }

void LinearVariableChange::changeVarAD(Increment & dx, const oops::Variables & vars)
const { }

void LinearVariableChange::changeVarInverseAD(Increment & dx, const oops::Variables & vars)
const { }

void LinearVariableChange::changeVarTraj(const State & xbg, const oops::Variables & xfg)
{ }

}
56 changes: 56 additions & 0 deletions src/orca-jedi/variablechanges/LinearVariableChange.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* (C) British Crown Copyright 2021 Met Office
*
* This software is licensed under the terms of the Apache Licence Version 2.0
* which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
*/

#pragma once

#include <memory>
#include <ostream>
#include <string>

#include "eckit/config/Configuration.h"

#include "oops/util/Printable.h"
#include "orca-jedi/geometry/Geometry.h"
#include "orca-jedi/state/State.h"
#include "orca-jedi/variablechanges/LinearVariableChangeParameters.h"

// Forward declarations
namespace oops {
class Variables;
}

namespace orcamodel {

// -----------------------------------------------------------------------------

class LinearVariableChange: public util::Printable {
// private util::ObjectCounter<LinearVariableChange>
public:
typedef LinearVariableChangeParameters Parameters_;
static const std::string classname() {
return "orcamodel::LinearVariableChange";
}

LinearVariableChange(const Geometry &, const Parameters_ &);
LinearVariableChange(const Geometry &, const eckit::Configuration &);

void changeVarTL(Increment &, const oops::Variables &) const;
void changeVarInverseTL(Increment &, const oops::Variables &) const;
void changeVarAD(Increment &, const oops::Variables &) const;
void changeVarInverseAD(Increment &, const oops::Variables &) const;

void changeVarTraj(const State &, const oops::Variables &);


private:
void print(std::ostream & out) const override {
out << "orcamodel::LinearVariableChange::print Not Implemented"; };
};

} // namespace orcamodel


28 changes: 28 additions & 0 deletions src/orca-jedi/variablechanges/LinearVariableChangeParameters.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* (C) Crown Copyright 2021, the Met Office. All rights reserved.
*
* Refer to COPYRIGHT.txt of this distribution for details.
*/

#pragma once

#include <string>
#include <vector>

#include "eckit/exception/Exceptions.h"
#include "oops/util/DateTime.h"
#include "oops/base/Variables.h"
#include "oops/base/LinearVariableChangeParametersBase.h"
#include "oops/util/parameters/Parameter.h"
#include "oops/util/parameters/RequiredParameter.h"
#include "oops/util/parameters/OptionalParameter.h"


class LinearVariableChangeParameters :
public oops::LinearVariableChangeParametersBase {
OOPS_CONCRETE_PARAMETERS(LinearVariableChangeParameters,
oops::LinearVariableChangeParametersBase)
public:
// No linear variable change. No additional parameters
};

0 comments on commit 0a98ddb

Please sign in to comment.