PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
Public Member Functions | Protected Attributes | List of all members
pism::inverse::IPDesignVariableParameterization Class Referenceabstract

#include <IPDesignVariableParameterization.hh>

+ Inheritance diagram for pism::inverse::IPDesignVariableParameterization:

Public Member Functions

 IPDesignVariableParameterization ()
 
virtual ~IPDesignVariableParameterization ()
 
virtual void set_scales (const Config &config, const std::string &design_var_name)
 Initializes the scale parameters of the parameterization. More...
 
virtual void toDesignVariable (double zeta, double *value, double *derivative)=0
 Converts from parameterization value \(\zeta\) to \(d=g(\zeta)\). More...
 
virtual void fromDesignVariable (double d, double *OUTPUT)=0
 Converts from \(d\) to a parameterization value \(\zeta\) such that \(d=g(\zeta)\).
More...
 
virtual void convertToDesignVariable (array::Scalar &zeta, array::Scalar &d, bool communicate=true)
 Transforms a vector of \(\zeta\) values to a vector of \(d\) values. More...
 
virtual void convertFromDesignVariable (array::Scalar &d, array::Scalar &zeta, bool communicate=true)
 Transforms a vector of \(d\) values to a vector of \(\zeta\) values. More...
 

Protected Attributes

double m_d_scale
 Value of \(d\) in PISM units that equals 1 for IPDesignVariableParameterization's units. More...
 

Detailed Description

Encapsulates a parameterization of a design variable (e.g. \(\tau_c\) for SSA inversions) as a function of a different parameter \(\zeta\).

When solving an inverse problem for a design variable \(d\) (think of \(\tau_c\) or hardness for SSA inversions), one frequently does not work with \(d\) directly but with a different variable \(\zeta\), and a relationship \(d=g(\zeta)\). A common choice in the glaciology literature for \(\tau_c\) is \(\tau_c=g(\zeta)=\zeta^2\), which ensures that \(\tau_c\) is non-negative, but has the disadvantage that it is a 2-1 parameterization. A potentially more satisfactory choice is \(g(\zeta)=e^\zeta\), which ensures positivitiy, is 1-1, and respects the wide scale variations of \(\tau_c\).

An IPDesignVariableParameterization implements such a parameterization map.

This method of encoding mathematical expressions is flexible and convenient, but is also slow; it has the overhead that many virtual function calls are needed if the expression is being called over and over again. If this proves to be a significant source of slowness, we could look at using the Expression Template idiom, http://drdobbs.com/184401627.

For certain Tikhonov inversions, it is important to mainain well-scaled variables. If the design parameter name is 'foo', internally the parameterizations use units of \(d\) such that the config parameter design_param_foo_scale equals one. I.e. if 'foo' is 'tauc', then for a conversion function \(g(\zeta)=\zeta^2\),

\[ \frac{d} = d_{\rm scale}g(\zeta^2). \]

where \(d_{\rm scale}={\tt design_param_tauc_scale}\).

Definition at line 62 of file IPDesignVariableParameterization.hh.


The documentation for this class was generated from the following files: