Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 0 additions & 15 deletions src/soca/LinearVariableChange/Balance/Balance.cc
Original file line number Diff line number Diff line change
Expand Up @@ -60,28 +60,13 @@ namespace soca {
soca_balance_mult_f90(keyFtnConfig_, dxa.toFortran(), dxm.toFortran());
}
// -----------------------------------------------------------------------------
void Balance::multiplyInverse(const Increment & dxm, Increment & dxa) const {
// dxa = K^-1 dxm
oops::Log::trace() << "soca::Balance::multiplyInverse " << std::endl;
util::Timer timer("soca::Balance", "multiplyInverse");
soca_balance_multinv_f90(keyFtnConfig_, dxm.toFortran(), dxa.toFortran());
}
// -----------------------------------------------------------------------------
void Balance::multiplyAD(const Increment & dxm, Increment & dxa) const {
// dxa = K^T dxm
oops::Log::trace() << "soca::Balance::multiplyAD " << std::endl;
util::Timer timer("soca::Balance", "multiplyAD");
soca_balance_multad_f90(keyFtnConfig_, dxm.toFortran(), dxa.toFortran());
}
// -----------------------------------------------------------------------------
void Balance::multiplyInverseAD(const Increment & dxa,
Increment & dxm) const {
// dxm = (K^-1)^T dxa
oops::Log::trace() << "soca::Balance::multiplyInverseAD " << std::endl;
util::Timer timer("soca::Balance", "multiplyInverseAD");
soca_balance_multinvad_f90(keyFtnConfig_, dxa.toFortran(), dxm.toFortran());
}
// -----------------------------------------------------------------------------
void Balance::print(std::ostream & os) const {
os << "SOCA linear change variable: Balance";
}
Expand Down
2 changes: 0 additions & 2 deletions src/soca/LinearVariableChange/Balance/Balance.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ class Balance: public LinearVariableChangeBase {

/// Perform linear transforms
void multiply(const Increment &, Increment &) const override;
void multiplyInverse(const Increment &, Increment &) const override;
void multiplyAD(const Increment &, Increment &) const override;
void multiplyInverseAD(const Increment &, Increment &) const override;

private:
void print(std::ostream &) const override;
Expand Down
2 changes: 2 additions & 0 deletions src/soca/LinearVariableChange/Balance/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ soca_target_sources(
Balance.cc
Balance.h
BalanceFortran.h
InverseBalance.cc
InverseBalance.h
soca_balance_mod.F90
soca_balance.interface.F90
soca_ksshts_mod.F90
Expand Down
75 changes: 75 additions & 0 deletions src/soca/LinearVariableChange/Balance/InverseBalance.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* (C) Copyright 2017-2021 UCAR.
*
* 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 <string>

#include "eckit/config/Configuration.h"

#include "oops/util/Logger.h"
#include "oops/util/Timer.h"

#include "soca/Geometry/Geometry.h"
#include "soca/Increment/Increment.h"
#include "soca/State/State.h"
#include "soca/LinearVariableChange/Balance/InverseBalance.h"
#include "soca/LinearVariableChange/Balance/BalanceFortran.h"

using oops::Log;

namespace soca {

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

static LinearVariableChangeMaker<InverseBalance>
makerLinearVariableChangeBalance_("Inverse BalanceSOCA");

// -----------------------------------------------------------------------------
InverseBalance::InverseBalance(const State & bkg,
const State & traj,
const Geometry & geom,
const eckit::Configuration & conf) {
oops::Log::trace() << "soca::InverseBalance::setup " << std::endl;
util::Timer timer("soca::InverseBalance", "InverseBalance");

const eckit::Configuration * configc = &conf;

// Interpolate trajectory to the geom resolution
State traj_at_geomres(geom, traj);

// Compute Jacobians of the balance wrt traj
soca_balance_setup_f90(keyFtnConfig_,
&configc,
traj_at_geomres.toFortran(),
geom.toFortran());
}
// -----------------------------------------------------------------------------
InverseBalance::~InverseBalance() {
oops::Log::trace() << "soca::InverseBalance::delete " << std::endl;
soca_balance_delete_f90(keyFtnConfig_);
}
// -----------------------------------------------------------------------------
void InverseBalance::multiply(const Increment & dxm, Increment & dxa) const {
// dxa = K^-1 dxm
oops::Log::trace() << "soca::InverseBalance::multiply " << std::endl;
util::Timer timer("soca::InverseBalance", "multiply");
soca_balance_multinv_f90(keyFtnConfig_, dxm.toFortran(), dxa.toFortran());
}
// -----------------------------------------------------------------------------
void InverseBalance::multiplyAD(const Increment & dxa,
Increment & dxm) const {
// dxm = (K^-1)^T dxa
oops::Log::trace() << "soca::InverseBalance::multiplyAD " << std::endl;
util::Timer timer("soca::InverseBalance", "multiplyAD");
soca_balance_multinvad_f90(keyFtnConfig_, dxa.toFortran(), dxm.toFortran());
}
// -----------------------------------------------------------------------------
void InverseBalance::print(std::ostream & os) const {
os << "SOCA linear change variable: inverse Balance";
}
// -----------------------------------------------------------------------------
} // namespace soca
51 changes: 51 additions & 0 deletions src/soca/LinearVariableChange/Balance/InverseBalance.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* (C) Copyright 2017-2021 UCAR.
*
* 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 "oops/util/DateTime.h"
#include "oops/util/Printable.h"

#include "soca/LinearVariableChange/Base/LinearVariableChangeBase.h"

// Forward declarations
namespace eckit {
class Configuration;
}
namespace soca {
class State;
class Increment;
class Geometry;
}

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

namespace soca {

/// SOCA balance: inverse
class InverseBalance: public LinearVariableChangeBase {
public:
static const std::string classname() {return "soca::Balance";}

explicit InverseBalance(const State &, const State &,
const Geometry &, const eckit::Configuration &);
~InverseBalance();

/// Perform linear transforms
void multiply(const Increment &, Increment &) const override;
void multiplyAD(const Increment &, Increment &) const override;

private:
void print(std::ostream &) const override;
int keyFtnConfig_;
};
// -----------------------------------------------------------------------------

} // namespace soca
2 changes: 0 additions & 2 deletions src/soca/LinearVariableChange/Base/LinearVariableChangeBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,7 @@ class LinearVariableChangeBase : public util::Printable,
LinearVariableChangeBase() {}
virtual ~LinearVariableChangeBase() {}
virtual void multiply(const Increment &, Increment &) const = 0;
virtual void multiplyInverse(const Increment &, Increment &) const = 0;
virtual void multiplyAD(const Increment &, Increment &) const = 0;
virtual void multiplyInverseAD(const Increment &, Increment &) const = 0;

private:
virtual void print(std::ostream &) const = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,6 @@ void LinearModel2GeoVaLs::multiply(const Increment &dxin,

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

void LinearModel2GeoVaLs::multiplyInverse(const Increment &dxin,
Increment &dxout) const {
util::Timer timer("soca::LinearModel2GeoVaLs", "multiplyInverse");
multiply(dxin, dxout);
}

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

void LinearModel2GeoVaLs::multiplyAD(const Increment &dxin,
Increment &dxout) const {
util::Timer timer("soca::LinearModel2GeoVaLs", "multiplyAD");
Expand Down Expand Up @@ -106,14 +98,6 @@ void LinearModel2GeoVaLs::multiplyAD(const Increment &dxin,

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

void LinearModel2GeoVaLs::multiplyInverseAD(const Increment &dxin,
Increment &dxout) const {
util::Timer timer("soca::LinearModel2GeoVaLs", "multiplyInverseAD");
multiplyAD(dxin, dxout);
}

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

void LinearModel2GeoVaLs::print(std::ostream & os) const {
os << "SOCA linear change variable: LinearModel2GeoVaLs";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,7 @@ class LinearModel2GeoVaLs: public LinearVariableChangeBase {
~LinearModel2GeoVaLs();

void multiply(const Increment &, Increment &) const;
void multiplyInverse(const Increment &, Increment &) const;
void multiplyAD(const Increment &, Increment &) const;
void multiplyInverseAD(const Increment &, Increment &) const;

private:
const Geometry & geom_;
Expand Down
42 changes: 0 additions & 42 deletions src/soca/LinearVariableChange/LinearVariableChange.cc
Original file line number Diff line number Diff line change
Expand Up @@ -109,27 +109,6 @@ void LinearVariableChange::changeVarTL(Increment & dx,

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

void LinearVariableChange::changeVarInverseTL(Increment & dx,
const oops::Variables & vars) const {
Log::trace() << "LinearVariableChange::multiplyInverse starting"
<< vars << std::endl;

// Create output state
Increment dxout(dx.geometry(), vars, dx.validTime());

// Call variable change(s)
for (ircst_ it = linVarChas_.rbegin(); it != linVarChas_.rend(); ++it) {
dxout.zero();
it->multiplyInverse(dx, dxout);
dx.updateFields(vars);
dx = dxout;
}

Log::trace() << "LinearVariableChange::multiplyInverse done" << std::endl;
}

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

void LinearVariableChange::changeVarAD(Increment & dx,
const oops::Variables & vars) const {
Log::trace() << "LinearVariableChange::multiplyAD starting" << std::endl;
Expand All @@ -148,27 +127,6 @@ void LinearVariableChange::changeVarAD(Increment & dx,

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

void LinearVariableChange::changeVarInverseAD(Increment & dx,
const oops::Variables & vars) const {
Log::trace() << "LinearVariableChange::multiplyInverseAD starting"
<< std::endl;

// Create output state
Increment dxout(dx.geometry(), vars, dx.validTime());

// Call variable change(s)
for (icst_ it = linVarChas_.begin(); it != linVarChas_.end(); ++it) {
dxout.zero();
it->multiplyInverseAD(dx, dxout);
dx.updateFields(vars);
dx = dxout;
}

Log::trace() << "LinearVariableChange::multiplyInverseAD done" << std::endl;
}

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

void LinearVariableChange::print(std::ostream & os) const {
for (icst_ it = linVarChas_.begin(); it != linVarChas_.end(); ++it) {
os << *it;
Expand Down
2 changes: 0 additions & 2 deletions src/soca/LinearVariableChange/LinearVariableChange.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@ class LinearVariableChange : public util::Printable {
void changeVarTraj(const State &, const oops::Variables &);

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;

private:
void print(std::ostream &) const override;
Expand Down
1 change: 0 additions & 1 deletion src/soca/VariableChange/Base/VariableChangeBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ class VariableChangeBase : public util::Printable, private boost::noncopyable {
virtual ~VariableChangeBase() {}

virtual void changeVar(const State &, State &) const = 0;
virtual void changeVarInverse(const State &, State &) const = 0;

virtual const std::string classname() = 0;

Expand Down
2 changes: 0 additions & 2 deletions src/soca/VariableChange/Model2Ana/Model2Ana.cc
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ void Model2Ana::changeVar(const State & xm,
std::endl;
util::Timer timer("soca::Model2Ana", "changeVar");

util::DateTime * vtime = &xa.validTime();
xa = xm;

// Rotate from the logical grid to meridional/zonal
Expand All @@ -81,7 +80,6 @@ void Model2Ana::changeVarInverse(const State & xa,
std::endl;
util::Timer timer("soca::Model2Ana", "changeVarInverse");

util::DateTime * vtime = &xm.validTime();
xm = xa;

// Rotate from meridional/zonal to the logical grid
Expand Down
2 changes: 1 addition & 1 deletion src/soca/VariableChange/Model2Ana/Model2Ana.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class Model2Ana: public VariableChangeBase {
~Model2Ana();

void changeVar(const State &, State &) const override;
void changeVarInverse(const State &, State &) const override;
void changeVarInverse(const State &, State &) const;

std::vector<std::string> initRotate(const eckit::Configuration & conf,
const std::string & uv) const
Expand Down
6 changes: 0 additions & 6 deletions src/soca/VariableChange/Model2GeoVaLs/Model2GeoVaLs.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,4 @@ void Model2GeoVaLs::changeVar(const State & xin, State & xout) const {

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

void Model2GeoVaLs::changeVarInverse(const State &, State &) const {
util::abor1_cpp("Model2GeoVaLs::changeVarInverse not implemented");
}

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

} // namespace soca
1 change: 0 additions & 1 deletion src/soca/VariableChange/Model2GeoVaLs/Model2GeoVaLs.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class Model2GeoVaLs: public VariableChangeBase {
~Model2GeoVaLs();

void changeVar(const State &, State &) const override;
void changeVarInverse(const State &, State &) const override;

private:
const Geometry & geom_;
Expand Down
6 changes: 0 additions & 6 deletions src/soca/VariableChange/Soca2Cice/Soca2Cice.cc
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,4 @@ void Soca2Cice::changeVar(const State & xin, State & xout) const

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

void Soca2Cice::changeVarInverse(const State &, State &) const {
util::Timer timer("soca::Soca2Cice", "changeVarInverse");
}

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

} // namespace soca
1 change: 0 additions & 1 deletion src/soca/VariableChange/Soca2Cice/Soca2Cice.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ class Soca2Cice: public VariableChangeBase {
~Soca2Cice();

void changeVar(const State &, State &) const override;
void changeVarInverse(const State &, State &) const override;

private:
const Geometry & geom_;
Expand Down
3 changes: 0 additions & 3 deletions src/soca/VariableChange/Soca2Cice/soca_soca2cice_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ module soca_soca2cice_mod
!!
!! - forward: deaggregates a 2D analysis of sea-ice and inserts
!! analysis in CICE restarts
!! - inverse: TODO(G), aggregates seaice variables along CICE sea-ice
!! categories, save the aggregated variables in a file
!! readable by soca

type, public :: soca_soca2cice_params
real(kind=kind_real) :: seaice_edge
Expand Down
8 changes: 0 additions & 8 deletions src/soca/VariableChange/VariableChange.cc
Original file line number Diff line number Diff line change
Expand Up @@ -125,14 +125,6 @@ void VariableChange::changeVar(State & x, const oops::Variables & vars) const {

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

void VariableChange::changeVarInverse(State & x,
const oops::Variables & vars) const {
util::Timer timer("soca::VariableChange", "changeVarInverse");
changeVar(x, vars);
}

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

void VariableChange::print(std::ostream & os) const {
os << *variableChange_;
}
Expand Down
1 change: 0 additions & 1 deletion src/soca/VariableChange/VariableChange.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ class VariableChange : public util::Printable {
~VariableChange();

void changeVar(State &, const oops::Variables &) const;
void changeVarInverse(State &, const oops::Variables &) const;

private:
void print(std::ostream &) const override;
Expand Down
Loading
Loading