From a915cd5ca2f45628d56c7f43902f64d3ae5b45d7 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Thu, 24 Sep 2026 14:40:25 +0100 Subject: [PATCH 1/9] Spawn branch From c498e55b203d0f1b0f19a89b011d5248fbb08c64 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Thu, 24 Sep 2026 14:55:20 +0100 Subject: [PATCH 2/9] Added empty Norm --- src/orca-jedi/CMakeLists.txt | 2 + src/orca-jedi/norm/Norm.cc | 39 ++++++++++++++++++ src/orca-jedi/norm/Norm.h | 48 +++++++++++++++++++++++ src/orca-jedi/utilities/OrcaModelTraits.h | 2 + 4 files changed, 91 insertions(+) create mode 100644 src/orca-jedi/norm/Norm.cc create mode 100644 src/orca-jedi/norm/Norm.h diff --git a/src/orca-jedi/CMakeLists.txt b/src/orca-jedi/CMakeLists.txt index 39bee20a..0f60b529 100644 --- a/src/orca-jedi/CMakeLists.txt +++ b/src/orca-jedi/CMakeLists.txt @@ -20,6 +20,8 @@ model/ModelBiasCovariance.h model/ModelBias.h model/ModelBiasIncrement.h model/Model.h +norm/Norm.h +norm/Norm.cc state/State.h state/State.cc nemo_io/NemoFieldReader.h diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc new file mode 100644 index 00000000..ad7c08ff --- /dev/null +++ b/src/orca-jedi/norm/Norm.cc @@ -0,0 +1,39 @@ +/* + * (C) British Crown Copyright 2026 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 "orca-jedi/norm/Norm.h" + +#include "eckit/exception/Exceptions.h" + +namespace orcamodel { + +Norm::Norm(const Geometry & resol, + const oops::Variables & vars, + const util::DateTime & validTime, + const eckit::Configuration & conf) { + throw eckit::NotImplemented(Here()); +} + +Norm::~Norm() {} + +void Norm::calculate(const State & xx) { + throw eckit::NotImplemented(Here()); +} + +void Norm::apply(Increment & dx) const { + throw eckit::NotImplemented(Here()); +} + +void Norm::applyInverse(Increment & dx) const { + throw eckit::NotImplemented(Here()); +} + +void Norm::print(std::ostream & os) const { + throw eckit::NotImplemented(Here()); +} + +} // namespace orcamodel diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h new file mode 100644 index 00000000..c2f9f110 --- /dev/null +++ b/src/orca-jedi/norm/Norm.h @@ -0,0 +1,48 @@ +/* + * (C) British Crown Copyright 2026 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 + +#include "eckit/config/Configuration.h" + +#include "oops/base/Variables.h" +#include "oops/util/DateTime.h" +#include "oops/util/ObjectCounter.h" +#include "oops/util/Printable.h" + +#include "orca-jedi/geometry/Geometry.h" +#include "orca-jedi/increment/Increment.h" +#include "orca-jedi/state/State.h" + +namespace orcamodel { + +class Norm : public util::Printable, + private util::ObjectCounter { + public: + static const std::string classname() {return "orcamodel::Norm";} + +// Constructor, destructor + Norm(const Geometry &, + const oops::Variables &, + const util::DateTime &, + const eckit::Configuration &); + ~Norm(); + +// Compute values for norm + void calculate(const State &); + +// Apply norm to increment + void apply(Increment &) const; + void applyInverse(Increment &) const; + + private: + void print(std::ostream &) const override; +}; + +} // namespace orcamodel diff --git a/src/orca-jedi/utilities/OrcaModelTraits.h b/src/orca-jedi/utilities/OrcaModelTraits.h index d9a2b33e..02f7ef5c 100644 --- a/src/orca-jedi/utilities/OrcaModelTraits.h +++ b/src/orca-jedi/utilities/OrcaModelTraits.h @@ -16,6 +16,7 @@ #include "orca-jedi/model/ModelBias.h" #include "orca-jedi/model/ModelBiasIncrement.h" #include "orca-jedi/model/ModelBiasCovariance.h" +#include "orca-jedi/norm/Norm.h" #include "orca-jedi/state/State.h" #include "orca-jedi/utilities/ModelData.h" #include "orca-jedi/variablechanges/VariableChange.h" @@ -38,6 +39,7 @@ struct OrcaModelTraits { typedef orcamodel::ModelBiasIncrement ModelAuxIncrement; typedef orcamodel::ModelBiasCovariance ModelAuxCovariance; typedef orcamodel::Model Model; + typedef orcamodel::Norm Norm; typedef orcamodel::State State; typedef orcamodel::LinearModel LinearModel; typedef orcamodel::VariableChange VariableChange; From 3c22e4bf41f4917c3796b6d487e260bf0dd84f4e Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Wed, 30 Sep 2026 13:46:10 +0100 Subject: [PATCH 3/9] Simplified interface --- src/orca-jedi/norm/Norm.cc | 4 +--- src/orca-jedi/norm/Norm.h | 6 +----- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index ad7c08ff..2d6607f1 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -11,9 +11,7 @@ namespace orcamodel { -Norm::Norm(const Geometry & resol, - const oops::Variables & vars, - const util::DateTime & validTime, +Norm::Norm(const oops::Variables & vars, const eckit::Configuration & conf) { throw eckit::NotImplemented(Here()); } diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h index c2f9f110..e16fbe6b 100644 --- a/src/orca-jedi/norm/Norm.h +++ b/src/orca-jedi/norm/Norm.h @@ -12,11 +12,9 @@ #include "eckit/config/Configuration.h" #include "oops/base/Variables.h" -#include "oops/util/DateTime.h" #include "oops/util/ObjectCounter.h" #include "oops/util/Printable.h" -#include "orca-jedi/geometry/Geometry.h" #include "orca-jedi/increment/Increment.h" #include "orca-jedi/state/State.h" @@ -28,9 +26,7 @@ class Norm : public util::Printable, static const std::string classname() {return "orcamodel::Norm";} // Constructor, destructor - Norm(const Geometry &, - const oops::Variables &, - const util::DateTime &, + Norm(const oops::Variables &, const eckit::Configuration &); ~Norm(); From 0aadc6642b08ef20a7da579ad89dd5cc5bff980c Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Wed, 7 Oct 2026 14:29:54 +0100 Subject: [PATCH 4/9] Used default destructor --- src/orca-jedi/norm/Norm.cc | 2 -- src/orca-jedi/norm/Norm.h | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index 2d6607f1..f5174347 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -16,8 +16,6 @@ Norm::Norm(const oops::Variables & vars, throw eckit::NotImplemented(Here()); } -Norm::~Norm() {} - void Norm::calculate(const State & xx) { throw eckit::NotImplemented(Here()); } diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h index e16fbe6b..3eb76a56 100644 --- a/src/orca-jedi/norm/Norm.h +++ b/src/orca-jedi/norm/Norm.h @@ -28,7 +28,7 @@ class Norm : public util::Printable, // Constructor, destructor Norm(const oops::Variables &, const eckit::Configuration &); - ~Norm(); + ~Norm() = default; // Compute values for norm void calculate(const State &); From ceafc90f509af3fc9bca6934218aeb2f7dc07deb Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Fri, 9 Oct 2026 09:28:26 +0100 Subject: [PATCH 5/9] Removed unused variable names --- src/orca-jedi/norm/Norm.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index f5174347..9aa81633 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -11,24 +11,24 @@ namespace orcamodel { -Norm::Norm(const oops::Variables & vars, - const eckit::Configuration & conf) { +Norm::Norm(const oops::Variables &, + const eckit::Configuration &) { throw eckit::NotImplemented(Here()); } -void Norm::calculate(const State & xx) { +void Norm::calculate(const State &) { throw eckit::NotImplemented(Here()); } -void Norm::apply(Increment & dx) const { +void Norm::apply(Increment &) const { throw eckit::NotImplemented(Here()); } -void Norm::applyInverse(Increment & dx) const { +void Norm::applyInverse(Increment &) const { throw eckit::NotImplemented(Here()); } -void Norm::print(std::ostream & os) const { +void Norm::print(std::ostream &) const { throw eckit::NotImplemented(Here()); } From 8cbfb2e4864e8e6da6402e26d0b976fcc75784f8 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Fri, 16 Oct 2026 08:50:51 +0100 Subject: [PATCH 6/9] Moved state to constructor --- src/orca-jedi/norm/Norm.cc | 7 ++----- src/orca-jedi/norm/Norm.h | 6 ++---- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index 9aa81633..d3e6c7b3 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -12,11 +12,8 @@ namespace orcamodel { Norm::Norm(const oops::Variables &, - const eckit::Configuration &) { - throw eckit::NotImplemented(Here()); -} - -void Norm::calculate(const State &) { + const eckit::Configuration &, + const State &) { throw eckit::NotImplemented(Here()); } diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h index 3eb76a56..0cb0b045 100644 --- a/src/orca-jedi/norm/Norm.h +++ b/src/orca-jedi/norm/Norm.h @@ -27,12 +27,10 @@ class Norm : public util::Printable, // Constructor, destructor Norm(const oops::Variables &, - const eckit::Configuration &); + const eckit::Configuration &, + const State &); ~Norm() = default; -// Compute values for norm - void calculate(const State &); - // Apply norm to increment void apply(Increment &) const; void applyInverse(Increment &) const; From 8a2fea1775eadfd19476f6fa4486f9d16a9cd583 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:18:34 +0000 Subject: [PATCH 7/9] Update interface --- src/orca-jedi/norm/Norm.cc | 4 ++++ src/orca-jedi/norm/Norm.h | 1 + 2 files changed, 5 insertions(+) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index d3e6c7b3..72f16887 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -25,6 +25,10 @@ void Norm::applyInverse(Increment &) const { throw eckit::NotImplemented(Here()); } +const double Norm::computeNorm(Increment &) const { + throw eckit::NotImplemented(Here()); +} + void Norm::print(std::ostream &) const { throw eckit::NotImplemented(Here()); } diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h index 0cb0b045..b9b6430f 100644 --- a/src/orca-jedi/norm/Norm.h +++ b/src/orca-jedi/norm/Norm.h @@ -34,6 +34,7 @@ class Norm : public util::Printable, // Apply norm to increment void apply(Increment &) const; void applyInverse(Increment &) const; + const double computeNorm(Increment &) const; private: void print(std::ostream &) const override; From f8660c8afb377d28ea091d4b8bfa7dcc886f6f66 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:24:33 +0000 Subject: [PATCH 8/9] Should be const --- src/orca-jedi/norm/Norm.cc | 2 +- src/orca-jedi/norm/Norm.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index 72f16887..13f61f85 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -25,7 +25,7 @@ void Norm::applyInverse(Increment &) const { throw eckit::NotImplemented(Here()); } -const double Norm::computeNorm(Increment &) const { +const double Norm::computeNorm(const Increment &) const { throw eckit::NotImplemented(Here()); } diff --git a/src/orca-jedi/norm/Norm.h b/src/orca-jedi/norm/Norm.h index b9b6430f..3e96ff7e 100644 --- a/src/orca-jedi/norm/Norm.h +++ b/src/orca-jedi/norm/Norm.h @@ -34,7 +34,7 @@ class Norm : public util::Printable, // Apply norm to increment void apply(Increment &) const; void applyInverse(Increment &) const; - const double computeNorm(Increment &) const; + const double computeNorm(const Increment &) const; private: void print(std::ostream &) const override; From fd3cc7a97cf53f720c9141a9fedb6cacae042182 Mon Sep 17 00:00:00 2001 From: DrTVockerodtMO <114994380+DrTVockerodtMO@users.noreply.github.com> Date: Wed, 28 Oct 2026 08:46:00 +0000 Subject: [PATCH 9/9] Add return --- src/orca-jedi/norm/Norm.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/orca-jedi/norm/Norm.cc b/src/orca-jedi/norm/Norm.cc index 13f61f85..d6a2b65b 100644 --- a/src/orca-jedi/norm/Norm.cc +++ b/src/orca-jedi/norm/Norm.cc @@ -27,6 +27,7 @@ void Norm::applyInverse(Increment &) const { const double Norm::computeNorm(const Increment &) const { throw eckit::NotImplemented(Here()); + return 0.0; } void Norm::print(std::ostream &) const {