![]() |
v0.14.0 |
Calculate directional derivative of the right hand side and compare it with tangent matrix derivative. More...
#include <src/interfaces/OperatorsTester.hpp>
Public Types | |
using | RandomFieldData = std::pair< std::string, std::array< double, 2 > > |
Public Member Functions | |
MoFEMErrorCode | query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const |
OperatorsTester (const MoFEM::Core &core) | |
virtual | ~OperatorsTester ()=default |
SmartPetscObj< Vec > | setRandomFields (SmartPetscObj< DM > dm, std::vector< RandomFieldData > random_fields, boost::shared_ptr< Range > ents=nullptr) |
Generate random fileds. More... | |
SmartPetscObj< Vec > | assembleVec (SmartPetscObj< DM > dm, std::string fe_name, boost::shared_ptr< FEMethod > pipeline, SmartPetscObj< Vec > x, SmartPetscObj< Vec > delta_x, SmartPetscObj< Vec > delta2_x, double time, double delta_t, CacheTupleWeakPtr cache_ptr) |
Assemble the right hand side vector. More... | |
SmartPetscObj< Mat > | assembleMat (SmartPetscObj< DM > dm, std::string fe_name, boost::shared_ptr< FEMethod > pipeline, SmartPetscObj< Vec > x, SmartPetscObj< Vec > delta_x, SmartPetscObj< Vec > delta2_x, double time, double delta_t, CacheTupleWeakPtr cache_ptr) |
Assemble the left hand side vector. More... | |
SmartPetscObj< Vec > | directionalCentralFiniteDifference (SmartPetscObj< DM > dm, std::string fe_name, boost::shared_ptr< FEMethod > pipeline, SmartPetscObj< Vec > x, SmartPetscObj< Vec > delta_x, SmartPetscObj< Vec > delta2_x, SmartPetscObj< Vec > diff_x, double time, double delta_t, double eps, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr()) |
Calculate directional directive using finite difference. More... | |
SmartPetscObj< Vec > | checkCentralFiniteDifference (SmartPetscObj< DM > dm, std::string fe_name, boost::shared_ptr< FEMethod > pipeline_rhs, boost::shared_ptr< FEMethod > pipeline_lhs, SmartPetscObj< Vec > x, SmartPetscObj< Vec > delta_x, SmartPetscObj< Vec > delta2_x, SmartPetscObj< Vec > diff_x, double time, double delta_t, double eps, CacheTupleWeakPtr cache_ptr=CacheTupleSharedPtr()) |
Check consistency between directional derivative with matrix. More... | |
![]() | |
virtual MoFEMErrorCode | query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const =0 |
template<class IFACE > | |
MoFEMErrorCode | registerInterface (bool error_if_registration_failed=true) |
Register interface. More... | |
template<class IFACE > | |
MoFEMErrorCode | getInterface (IFACE *&iface) const |
Get interface refernce to pointer of interface. More... | |
template<class IFACE > | |
MoFEMErrorCode | getInterface (IFACE **const iface) const |
Get interface pointer to pointer of interface. More... | |
template<class IFACE , typename boost::enable_if< boost::is_pointer< IFACE >, int >::type = 0> | |
IFACE | getInterface () const |
Get interface pointer to pointer of interface. More... | |
template<class IFACE , typename boost::enable_if< boost::is_reference< IFACE >, int >::type = 0> | |
IFACE | getInterface () const |
Get reference to interface. More... | |
template<class IFACE > | |
IFACE * | getInterface () const |
Function returning pointer to interface. More... | |
virtual | ~UnknownInterface ()=default |
Private Member Functions | |
std::pair< SmartPetscObj< Vec >, SmartPetscObj< Vec > > | setPipelineX (boost::shared_ptr< FEMethod > pipeline, SmartPetscObj< Vec > x, SmartPetscObj< Vec > delta_x, SmartPetscObj< Vec > delta2_x, double delta_t) |
Set vectors, x, x_t, and x_tt to finite element instance. More... | |
Private Attributes | |
MoFEM::Core & | cOre |
Additional Inherited Members | |
![]() | |
static MoFEMErrorCode | getLibVersion (Version &version) |
Get library version. More... | |
static MoFEMErrorCode | getFileVersion (moab::Interface &moab, Version &version) |
Get database major version. More... | |
static MoFEMErrorCode | setFileVersion (moab::Interface &moab, Version version=Version(MoFEM_VERSION_MAJOR, MoFEM_VERSION_MINOR, MoFEM_VERSION_BUILD)) |
Get database major version. More... | |
static MoFEMErrorCode | getInterfaceVersion (Version &version) |
Get database major version. More... | |
Calculate directional derivative of the right hand side and compare it with tangent matrix derivative.
Definition at line 21 of file OperatorsTester.hpp.
using MoFEM::OperatorsTester::RandomFieldData = std::pair<std::string, std::array<double, 2> > |
Definition at line 29 of file OperatorsTester.hpp.
MoFEM::OperatorsTester::OperatorsTester | ( | const MoFEM::Core & | core | ) |
Definition at line 13 of file OperatorsTester.cpp.
|
virtualdefault |
SmartPetscObj< Mat > MoFEM::OperatorsTester::assembleMat | ( | SmartPetscObj< DM > | dm, |
std::string | fe_name, | ||
boost::shared_ptr< FEMethod > | pipeline, | ||
SmartPetscObj< Vec > | x, | ||
SmartPetscObj< Vec > | delta_x, | ||
SmartPetscObj< Vec > | delta2_x, | ||
double | time, | ||
double | delta_t, | ||
CacheTupleWeakPtr | cache_ptr | ||
) |
Assemble the left hand side vector.
dm | |
fe_name | // fe name |
pipeline | // pipeline, i.e. fe instance |
x | // problem (dm) vector |
delta_x | // vector for x rate, can be null, i.e, SmartPetscObj<Vec>() |
delta2_x | // vector for x second rate, i.e. acceleration |
time | // time |
delta_t | // time increment |
cache_ptr | // finite element data cache, can be null |
Definition at line 120 of file OperatorsTester.cpp.
SmartPetscObj< Vec > MoFEM::OperatorsTester::assembleVec | ( | SmartPetscObj< DM > | dm, |
std::string | fe_name, | ||
boost::shared_ptr< FEMethod > | pipeline, | ||
SmartPetscObj< Vec > | x, | ||
SmartPetscObj< Vec > | delta_x, | ||
SmartPetscObj< Vec > | delta2_x, | ||
double | time, | ||
double | delta_t, | ||
CacheTupleWeakPtr | cache_ptr | ||
) |
Assemble the right hand side vector.
dm | |
fe_name | // fe name |
pipeline | // pipeline, i.e. fe instance |
x | // problem (dm) vector |
delta_x | // vector for x rate, can be null, i.e, SmartPetscObj<Vec>() |
delta2_x | // vector for x second rate, i.e. acceleration |
time | // time |
delta_t | // time increment |
cache_ptr | // finite element data cache, can be null |
Definition at line 83 of file OperatorsTester.cpp.
SmartPetscObj< Vec > MoFEM::OperatorsTester::checkCentralFiniteDifference | ( | SmartPetscObj< DM > | dm, |
std::string | fe_name, | ||
boost::shared_ptr< FEMethod > | pipeline_rhs, | ||
boost::shared_ptr< FEMethod > | pipeline_lhs, | ||
SmartPetscObj< Vec > | x, | ||
SmartPetscObj< Vec > | delta_x, | ||
SmartPetscObj< Vec > | delta2_x, | ||
SmartPetscObj< Vec > | diff_x, | ||
double | time, | ||
double | delta_t, | ||
double | eps, | ||
CacheTupleWeakPtr | cache_ptr = CacheTupleSharedPtr() |
||
) |
Check consistency between directional derivative with matrix.
dm | |
fe_name | |
pipeline_rhs | |
pipeline_lhs | |
x | |
delta_x | |
delta2_x | |
diff_x | |
time | |
delta_t | |
eps | |
cache_ptr |
Definition at line 210 of file OperatorsTester.cpp.
SmartPetscObj< Vec > MoFEM::OperatorsTester::directionalCentralFiniteDifference | ( | SmartPetscObj< DM > | dm, |
std::string | fe_name, | ||
boost::shared_ptr< FEMethod > | pipeline, | ||
SmartPetscObj< Vec > | x, | ||
SmartPetscObj< Vec > | delta_x, | ||
SmartPetscObj< Vec > | delta2_x, | ||
SmartPetscObj< Vec > | diff_x, | ||
double | time, | ||
double | delta_t, | ||
double | eps, | ||
CacheTupleWeakPtr | cache_ptr = CacheTupleSharedPtr() |
||
) |
Calculate directional directive using finite difference.
dm | |
fe_name | |
pipeline | |
x | |
delta_x | |
delta2_x | |
diff_x | // direction of derivative |
time | |
delta_t | |
eps | |
cache_ptr |
Definition at line 153 of file OperatorsTester.cpp.
|
virtual |
Implements MoFEM::UnknownInterface.
Definition at line 17 of file OperatorsTester.cpp.
|
private |
Set vectors, x, x_t, and x_tt to finite element instance.
Finite element instance is a pipeline. x_t and x_tt are evaluated for given delta_x, delta2_x and delta_t.
pipeline | |
x | |
delta_x | |
delta2_x | |
delta_t |
Definition at line 233 of file OperatorsTester.cpp.
SmartPetscObj< Vec > MoFEM::OperatorsTester::setRandomFields | ( | SmartPetscObj< DM > | dm, |
std::vector< RandomFieldData > | random_fields, | ||
boost::shared_ptr< Range > | ents = nullptr |
||
) |
Generate random fileds.
Example: generate random vector for DM (problem) from simple interface, where FIELD random values of DOFs are in range from -1 to 1, and FIELD2 random values are in range from 0 to 1.
TODO: Set random field to specific entities, and potentially order for testing proposes to dissect error in tangent matrix.
dm | |
random_fields | look at definition RandomFieldData |
Definition at line 24 of file OperatorsTester.cpp.
|
private |
Definition at line 145 of file OperatorsTester.hpp.