Geophysical Inversion and Modelling Library v1.5.4
Loading...
Searching...
No Matches
GIMLI::ModellingBase Class Reference

#include <modellingbase.h>

Inherited by GIMLI::DC1dModelling, GIMLI::DCMultiElectrodeModelling, GIMLI::FDEM1dModelling, GIMLI::GravimetryModelling, GIMLI::HarmonicModelling, GIMLI::LinearModelling, GIMLI::MRSModelling, GIMLI::MT1dModelling, GIMLI::PolynomialModelling, and GIMLI::TravelTimeDijkstraModelling.

Public Member Functions

 ModellingBase (bool verbose=false)
 
 ModellingBase (DataContainer &dataContainer, bool verbose=false)
 
 ModellingBase (const Mesh &mesh, bool verbose=false)
 
 ModellingBase (const Mesh &mesh, DataContainer &dataContainer, bool verbose=false)
 
void setVerbose (bool verbose)
 
bool verbose () const
 
virtual RVector response (const RVector &model)
 
virtual RVector response_mt (const RVector &model, Index i=0) const
 
RVector operator() (const RVector &model)
 
void setData (DataContainer &data)
 
DataContainerdata () const
 
virtual RVector createDefaultStartModel ()
 
virtual RVector startModel ()
 
virtual void setStartModel (const RVector &startModel)
 
void setMesh (const Mesh &mesh, bool ignoreRegionManager=false)
 
Meshmesh ()
 
void createRefinedForwardMesh (bool refine=true, bool pRefine=false)
 
void deleteMesh ()
 
virtual void setJacobian (MatrixBase *J)
 
virtual void createJacobian (const RVector &model)
 
virtual void createJacobian (const RVector &model, const RVector &resp)
 
virtual void createJacobian_mt (const RVector &model, const RVector &resp)
 
virtual void initJacobian ()
 
MatrixBasejacobian ()
 
MatrixBasejacobian () const
 
virtual RMatrixjacobianRef () const
 
virtual RMatrixjacobianRef ()
 
virtual void clearJacobian ()
 
virtual void setConstraints (MatrixBase *C)
 
virtual void clearConstraints ()
 
virtual void initConstraints ()
 
virtual void createConstraints ()
 
virtual MatrixBaseconstraints ()
 
virtual MatrixBaseconstraints () const
 
virtual RSparseMapMatrixconstraintsRef () const
 
virtual RSparseMapMatrixconstraintsRef ()
 
const RMatrixsolution () const
 
void mapModel (const RVector &model, double background=0)
 
RVector createMappedModel (const RVector &model, double background=-9e99) const
 
void setRegionManager (RegionManager *reg)
 
const RegionManagerregionManager () const
 
RegionManagerregionManager ()
 
RegionManagerregionManagerRef ()
 
bool verbose ()
 
Regionregion (int marker)
 
RVector createStartModel ()
 
RVector createStartVector ()
 
void initRegionManager ()
 
void setThreadCount (Index nThreads)
 
Index threadCount ()
 
void setMultiThreadJacobian (Index nThreads)
 
Index multiThreadJacobian () const
 

Protected Member Functions

virtual void init_ ()
 
virtual void deleteMeshDependency_ ()
 
virtual void updateMeshDependency_ ()
 
virtual void updateDataDependency_ ()
 
void setMesh_ (const Mesh &mesh, bool update=true)
 

Protected Attributes

Meshmesh_
 
DataContainerdataContainer_
 
MatrixBasejacobian_
 
bool ownJacobian_
 
MatrixBaseconstraints_
 
bool ownConstraints_
 
RMatrix solutions_
 
RVector startModel_
 
bool verbose_
 
bool regionManagerInUse_
 
bool ownRegionManager_
 
Index nThreads_
 
Index nThreadsJacobian_
 

Detailed Description

General modelling interface class.

Member Function Documentation

◆ clearJacobian()

virtual void GIMLI::ModellingBase::clearJacobian ( )
inlinevirtual

Clear Jacobian matrix.

◆ createDefaultStartModel()

virtual RVector GIMLI::ModellingBase::createDefaultStartModel ( )
inlinevirtual

◆ createJacobian() [1/2]

◆ createJacobian() [2/2]

void GIMLI::ModellingBase::createJacobian ( const RVector & model,
const RVector & resp )
virtual

Create and fill the Jacobian matrix with a given model vector and a prior calculated response for this model. The Jacobian matrix need to by initialized and resized. If unsure take createJacobian(const RVector & model).

References createJacobian(), GIMLI::Stopwatch::duration(), initJacobian(), GIMLI::Matrix< ValueType >::resize(), GIMLI::Matrix< ValueType >::rows(), and GIMLI::Matrix< ValueType >::setCol().

◆ createJacobian_mt()

void GIMLI::ModellingBase::createJacobian_mt ( const RVector & model,
const RVector & resp )
virtual

Create and fill the Jacobian matrix with a given model vector. Multi-threaded version. Will be called if setMultiThreadJacobian has been set > 1. For thread safe reasons response_mt, a read only variant of the response method need to be implemented.

References createJacobian_mt(), GIMLI::Stopwatch::duration(), initJacobian(), GIMLI::Matrix< ValueType >::resize(), and GIMLI::Matrix< ValueType >::rows().

Referenced by createJacobian(), and createJacobian_mt().

◆ createMappedModel()

RVector GIMLI::ModellingBase::createMappedModel ( const RVector & model,
double background = -9e99 ) const

Read only extrapolation of model values given per cell marker to values given per cell. Exterior values will be set to background or prolongated for background != -9e99.

References createMappedModel(), and GIMLI::unique().

Referenced by createMappedModel(), GIMLI::DCMultiElectrodeModelling::mapERTModel(), and GIMLI::TravelTimeDijkstraModelling::response().

◆ createStartVector()

RVector GIMLI::ModellingBase::createStartVector ( )

DEPRECATED use createStartModel

References createStartVector().

Referenced by createStartVector().

◆ data()

DataContainer & GIMLI::ModellingBase::data ( ) const

Return the associated data container.

References data().

Referenced by data(), GIMLI::DC1dModelling::DC1dModelling(), and setData().

◆ deleteMesh()

void GIMLI::ModellingBase::deleteMesh ( )

Delete the actual mesh.

References deleteMesh().

Referenced by deleteMesh().

◆ init_()

void GIMLI::ModellingBase::init_ ( )
protectedvirtual

Reimplemented in GIMLI::DC1dModelling.

◆ initJacobian()

void GIMLI::ModellingBase::initJacobian ( )
virtual

Here you should initialize your Jacobian matrix. Default is RMatrix()

Reimplemented in GIMLI::GravimetryModelling, GIMLI::TravelTimeDijkstraModelling, and GIMLI::TTModellingWithOffset.

References initJacobian().

Referenced by createJacobian(), createJacobian(), createJacobian_mt(), and initJacobian().

◆ jacobian() [1/2]

MatrixBase * GIMLI::ModellingBase::jacobian ( )
inline

Return the pointer to the Jacobian matrix associated with this forward operator.

Referenced by GIMLI::HarmonicModelling::createJacobian(), GIMLI::MRSModelling::createJacobian(), and GIMLI::TTModellingWithOffset::createJacobian().

◆ jacobian() [2/2]

MatrixBase * GIMLI::ModellingBase::jacobian ( ) const
inline

Return the pointer to the Jacobian matrix associated with this forward operator.

◆ jacobianRef()

virtual RMatrix & GIMLI::ModellingBase::jacobianRef ( ) const
inlinevirtual

Return the Jacobian Matrix (read only) associated with this forward operator. Throws an exception if the jacobian is not initialized. Cannot yet be overloaded by pyplusplus (return virtual reference)(Warning 1049).

◆ multiThreadJacobian()

Index GIMLI::ModellingBase::multiThreadJacobian ( ) const
inline

Return number of threads used for Jacobian generation.

◆ region()

Region * GIMLI::ModellingBase::region ( int marker)

Syntactic sugar for this->regionManager().region(marker).

References region().

Referenced by region().

◆ response()

◆ response_mt()

virtual RVector GIMLI::ModellingBase::response_mt ( const RVector & model,
Index i = 0 ) const
inlinevirtual

Read only response function for multi threading purposes. Index i is use thread counter.

Referenced by createJacobian().

◆ setConstraints()

void GIMLI::ModellingBase::setConstraints ( MatrixBase * C)
virtual

Set and get constraint matrix

Clear Constraints matrix

References setConstraints().

Referenced by setConstraints().

◆ setData()

void GIMLI::ModellingBase::setData ( DataContainer & data)

Change the associated data container

References data(), and setData().

Referenced by GIMLI::DC1dModelling::DC1dModelling(), and setData().

◆ setJacobian()

void GIMLI::ModellingBase::setJacobian ( MatrixBase * J)
virtual

Set external Jacobian matrix

References setJacobian().

Referenced by setJacobian().

◆ setMesh()

◆ setMultiThreadJacobian()

void GIMLI::ModellingBase::setMultiThreadJacobian ( Index nThreads)

Set number of threads used for brute force Jacobian generation. 1 is default. If nThreads is greater than 1 you need to implement response_mt with a read only response function. Maybe its worth set the single setThreadCount to 1 than, that you don't find yourself in a threading overkill.

References setMultiThreadJacobian().

Referenced by setMultiThreadJacobian().

◆ setThreadCount()

void GIMLI::ModellingBase::setThreadCount ( Index nThreads)

Set the maximum number of allowed threads for MT calculation. Have to be greater than 0. Will also set ENV(OPENBLAS_NUM_THREADS) .. if used.

References setThreadCount(), and GIMLI::setThreadCount().

Referenced by setThreadCount().

◆ setVerbose()

void GIMLI::ModellingBase::setVerbose ( bool verbose)

Set verbose state.

References setVerbose(), and verbose().

Referenced by setVerbose().

◆ startModel()

RVector GIMLI::ModellingBase::startModel ( )
virtual

Return the start model. If there is no model defined createDefaultStartModel is called which can be overloaded by child classes. !

Reimplemented in GIMLI::HarmonicModelling, and GIMLI::PolynomialModelling.

References createDefaultStartModel(), and startModel().

Referenced by startModel().

◆ threadCount()

Index GIMLI::ModellingBase::threadCount ( )

Return the maximum number of allowed threads for MT calculation based on local setting. GIMLI_NUM_THREADS will be used first. Give some verbose output.

References GIMLI::numberOfCPU(), threadCount(), and verbose().

Referenced by GIMLI::TravelTimeDijkstraModelling::response(), and threadCount().

◆ updateMeshDependency_()

virtual void GIMLI::ModellingBase::updateMeshDependency_ ( )
inlineprotectedvirtual

◆ verbose()