OGS
ProcessLib::CompareJacobiansJacobianAssembler Class Referencefinal

Detailed Description

Assembles the Jacobian matrix using two different Jacobian assemblers and compares the assembled local Jacobian matrices.

If the provided tolerances are exceeded, debugging information is logged in the form of a Python script.

Definition at line 26 of file CompareJacobiansJacobianAssembler.h.

#include <CompareJacobiansJacobianAssembler.h>

Inheritance diagram for ProcessLib::CompareJacobiansJacobianAssembler:
[legend]
Collaboration diagram for ProcessLib::CompareJacobiansJacobianAssembler:
[legend]

Classes

struct  Key

Public Member Functions

 CompareJacobiansJacobianAssembler (std::unique_ptr< AbstractJacobianAssembler > &&asm1, std::unique_ptr< AbstractJacobianAssembler > &&asm2, double abs_tol_Jac, double rel_tol_Jac, double abs_tol_res, double rel_tol_res, bool fail_on_error, std::string const &log_file_path)
 CompareJacobiansJacobianAssembler (std::shared_ptr< detail::CompareJacobiansJacobianAssemblerImpl > impl, Key)
void assembleWithJacobian (std::size_t const mesh_item_id, LocalAssemblerInterface &local_assembler, double const t, double const dt, std::vector< double > const &local_x, std::vector< double > const &local_x_prev, std::vector< double > &local_b_data, std::vector< double > &local_Jac_data) override
std::unique_ptr< AbstractJacobianAssemblercopy () const override
void checkPerturbationSize (int const max_non_deformation_dofs_per_node) const override
void setNonDeformationComponentIDs (std::vector< int > const &non_deformation_component_ids) override
void setNonDeformationComponentIDsNoSizeCheck (std::vector< int > const &non_deformation_component_ids) override
bool needsPicardAssembly () const override
virtual void preIteration (const unsigned iter) override
Public Member Functions inherited from ProcessLib::AbstractJacobianAssembler
virtual void assembleWithJacobianForStaggeredScheme (LocalAssemblerInterface &, double const, double const, Eigen::VectorXd const &, Eigen::VectorXd const &, int const, std::vector< double > &, std::vector< double > &)
virtual ~AbstractJacobianAssembler ()=default

Private Attributes

std::shared_ptr< detail::CompareJacobiansJacobianAssemblerImplimpl_

Constructor & Destructor Documentation

◆ CompareJacobiansJacobianAssembler() [1/2]

ProcessLib::CompareJacobiansJacobianAssembler::CompareJacobiansJacobianAssembler ( std::unique_ptr< AbstractJacobianAssembler > && asm1,
std::unique_ptr< AbstractJacobianAssembler > && asm2,
double abs_tol_Jac,
double rel_tol_Jac,
double abs_tol_res,
double rel_tol_res,
bool fail_on_error,
std::string const & log_file_path )

Definition at line 438 of file CompareJacobiansJacobianAssembler.cpp.

443 : impl_{std::make_shared<detail::CompareJacobiansJacobianAssemblerImpl>(
444 std::move(asm1), std::move(asm2), abs_tol_Jac, rel_tol_Jac,
445 abs_tol_res, rel_tol_res, fail_on_error, log_file_path)}
446{
447}
std::shared_ptr< detail::CompareJacobiansJacobianAssemblerImpl > impl_

References impl_.

◆ CompareJacobiansJacobianAssembler() [2/2]

ProcessLib::CompareJacobiansJacobianAssembler::CompareJacobiansJacobianAssembler ( std::shared_ptr< detail::CompareJacobiansJacobianAssemblerImpl > impl,
CompareJacobiansJacobianAssembler::Key  )
explicit

Definition at line 449 of file CompareJacobiansJacobianAssembler.cpp.

452 : impl_{std::move(impl)}
453{
454}

References impl_.

Member Function Documentation

◆ assembleWithJacobian()

void ProcessLib::CompareJacobiansJacobianAssembler::assembleWithJacobian ( std::size_t const mesh_item_id,
LocalAssemblerInterface & local_assembler,
double const t,
double const dt,
std::vector< double > const & local_x,
std::vector< double > const & local_x_prev,
std::vector< double > & local_b_data,
std::vector< double > & local_Jac_data )
overridevirtual

Assembles the Jacobian, the matrices \(M\) and \(K\), and the vector \(b\).

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 456 of file CompareJacobiansJacobianAssembler.cpp.

461{
462 impl_->assembleWithJacobian(mesh_item_id, local_assembler, t, dt, local_x,
463 local_x_prev, local_b_data, local_Jac_data);
464}

References impl_.

◆ checkPerturbationSize()

void ProcessLib::CompareJacobiansJacobianAssembler::checkPerturbationSize ( int const max_non_deformation_dofs_per_node) const
overridevirtual

Checks that the number of specified perturbations is not smaller than the maximum number of non-deformation degrees of freedom per node.

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 482 of file CompareJacobiansJacobianAssembler.cpp.

484{
485 impl_->asm1_->checkPerturbationSize(max_non_deformation_dofs_per_node);
486 impl_->asm2_->checkPerturbationSize(max_non_deformation_dofs_per_node);
487}

References impl_.

◆ copy()

std::unique_ptr< AbstractJacobianAssembler > ProcessLib::CompareJacobiansJacobianAssembler::copy ( ) const
overridevirtual

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 467 of file CompareJacobiansJacobianAssembler.cpp.

468{
469#ifdef _OPENMP
470 if (omp_get_thread_num() != 0)
471 {
472 OGS_FATAL(
473 "CompareJacobiansJacobianAssembler cannot be used concurrently. "
474 "Please restrict yourself to one assembly thread "
475 "(OGS_ASM_THREADS=1).");
476 }
477#endif
478
479 return std::make_unique<CompareJacobiansJacobianAssembler>(impl_, Key{});
480}
#define OGS_FATAL(...)
Definition Error.h:10

References impl_, and OGS_FATAL.

◆ needsPicardAssembly()

bool ProcessLib::CompareJacobiansJacobianAssembler::needsPicardAssembly ( ) const
overridevirtual

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 506 of file CompareJacobiansJacobianAssembler.cpp.

507{
508 return impl_->asm1_->needsPicardAssembly() ||
509 impl_->asm2_->needsPicardAssembly();
510}

References impl_.

◆ preIteration()

void ProcessLib::CompareJacobiansJacobianAssembler::preIteration ( const unsigned iter)
overridevirtual

Reimplemented from ProcessLib::AbstractJacobianAssembler.

Definition at line 512 of file CompareJacobiansJacobianAssembler.cpp.

513{
514 impl_->iter_ = iter;
515}

References impl_.

◆ setNonDeformationComponentIDs()

void ProcessLib::CompareJacobiansJacobianAssembler::setNonDeformationComponentIDs ( std::vector< int > const & non_deformation_component_ids)
overridevirtual

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 489 of file CompareJacobiansJacobianAssembler.cpp.

491{
492 impl_->asm1_->setNonDeformationComponentIDs(non_deformation_component_ids);
493 impl_->asm2_->setNonDeformationComponentIDs(non_deformation_component_ids);
494}

References impl_.

◆ setNonDeformationComponentIDsNoSizeCheck()

void ProcessLib::CompareJacobiansJacobianAssembler::setNonDeformationComponentIDsNoSizeCheck ( std::vector< int > const & non_deformation_component_ids)
overridevirtual

Implements ProcessLib::AbstractJacobianAssembler.

Definition at line 496 of file CompareJacobiansJacobianAssembler.cpp.

499{
500 impl_->asm1_->setNonDeformationComponentIDsNoSizeCheck(
501 non_deformation_component_ids);
502 impl_->asm2_->setNonDeformationComponentIDsNoSizeCheck(
503 non_deformation_component_ids);
504}

References impl_.

Member Data Documentation

◆ impl_


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