BELFEM 0.9.3
Berkeley Lab Finite Element Framework
Loading...
Searching...
No Matches
belfem::fem::IWG_Timestep Class Reference

Base class for transient problems. More...

#include <cl_IWG_Timestep.hpp>

Inheritance diagram for belfem::fem::IWG_Timestep:
[legend]
Collaboration diagram for belfem::fem::IWG_Timestep:
[legend]

Public Member Functions

 IWG_Timestep (const IwgType aType, const ModelDimensionality aDimensionality, const IwgMode aMode=IwgMode::Iterative, const SymmetryMode aSymmetryMode=SymmetryMode::Unsymmetric, const DofMode aDofMode=DofMode::AllBlocksEqual, const SideSetDofLinkMode aSideSetDofLinkMode=SideSetDofLinkMode::FacetOnly)
 ~IWG_Timestep () override
void set_timestepping_method (const EulerMethod aMethod, const bool aHaveStiffness=true) override
EulerMethod method () const override
uint order_active () const
uint order_pending () const
void compute_jacobian_and_rhs (Element *aElement, Matrix< real > &aJacobian, Vector< real > &aRHS) override
void shift_fields () override
 called by main file to copy fields into last timestep eg.
void compute_bdf_coefficients ()
 compute BDF coefficients (alpha, beta) for variable-step BDF and select the scheme for the upcoming step (startup ramp).
const Vector< real > & collect_qhist ()
 The beta-weighted dof history of the scheme running this step:
void reset_fields () override
 called by main file to copy fields from last timestep eg.
void make_savepoint ()
 save a deep copy of all dof fields, the step-size history and the step counter.
void restore_savepoint ()
 restore the state stored by make_savepoint
void save_history_state (Vector< real > &aH, uint &aStepCount, real &aLastDeltaTime) const
 Export the multi-step integrator state for the memdump, so a warm restart can resume at full BDF order instead of re-anchoring the ramp at order 1.
void history_field_labels (Cell< string > &aParents, Cell< string > &aHistory, const uint aDepth=0) const
 the dof labels ( aParents ) and their numbered history labels ( aHistory, label + "0".."order-1" ) — the fields shift_fields() rotates.
bool restore_history_state (const Vector< real > &aH, const uint aStepCount, const real aLastDeltaTime)
 Counterpart of save_history_state.
TimestepMatrices * matrices () override
 A timestep IWG returns the work matrices it owns.
Public Member Functions inherited from belfem::fem::IWG
 IWG (const IWG &)=delete
IWG & operator= (const IWG &)=delete
 IWG (IWG &&)=delete
IWG & operator= (IWG &&)=delete
 IWG (const IwgType aType, const ModelDimensionality aDimensionality, const IwgMode aMode=IwgMode::Iterative, const SymmetryMode aSymmetryMode=SymmetryMode::Unsymmetric, const DofMode aDofMode=DofMode::AllBlocksEqual, const SideSetDofLinkMode aSideSetDofLinkMode=SideSetDofLinkMode::FacetOnly)
virtual ~IWG ()
void select_blocks (const Vector< id_t > &aBlockIDs)
 the blocks are selected over the IWG object.
void select_block (const id_t aBlockID)
void select_sidesets (const Vector< id_t > &aSidesetIDs)
 the sidesets are selected over the IWG object.
const Vector< id_t > & selected_blocks () const
 returns the list of selected blocks
const Vector< id_t > & selected_sidesets () const
 returns the list of selected sidesets
virtual void compute_jacobian (Element *aElement, Matrix< real > &aJacobian)
 The caller provides aJacobian, sized number_of_dofs_per_element() squared, in the element's local dof order and in column-major order.
virtual void compute_convection (Element *aElement, Vector< real > &aConvection)
virtual void compute_alpha_boundary_condition (Element *aElement, Matrix< real > &aJacobian, Vector< real > &aRHS)
virtual void compute_rhs (Element *aElement, Vector< real > &aRHS)
virtual void compute_rhs (Element *aElement, Matrix< real > &aRHS)
virtual void link_to_group (Group *aGroup)
 The IWG borrows the group, its calculator and the pointers reachable from them.
const Cell< string > & dof_fields () const
const Cell< string > & flux_fields () const
const Cell< string > & tensor_fields () const
 special purpose if RHS is a matrix
const Cell< string > & other_fields () const
const Cell< string > & all_fields () const
const string & field (const index_t aIndex) const
index_t number_of_fields () const
uint number_of_dofs_per_node () const
 TODO(cm): retire number_of_dofs_per_node() for the block-scoped overload below.
uint number_of_dofs_per_node (const id_t aBlockID) const
uint number_of_dofs_per_node_on_sideset (const id_t aSideSetID) const
uint number_of_dofs_per_edge (const id_t aBlockID) const
uint number_of_dofs_per_face (const id_t aBlockID) const
uint number_of_dofs_per_cell (const id_t aBlockID) const
virtual uint number_of_dofs_per_element (Block *aBlock) const
uint number_of_nodes_per_element (SideSet *aSideSet) const
uint number_of_edges_per_element (SideSet *aSideSet) const
uint number_of_faces_per_element (SideSet *aSideSet) const
virtual uint number_of_dofs_per_element (SideSet *aSideSet) const
uint number_of_lambda_dofs (const id_t aSideSetID) const
const Vector< index_t > & dofs_per_node (const id_t aBlockID) const
const Vector< index_t > & dofs_per_edge (const id_t aBlockID) const
const Vector< index_t > & dofs_per_face (const id_t aBlockID) const
const Vector< index_t > & dofs_per_cell (const id_t aBlockID) const
const Vector< index_t > & lambda_dofs (const id_t aSideSetID) const
const Vector< index_t > & dofs_per_node_on_sideset (const id_t aSideSetID, const bool aSideSetOnly=false) const
const Vector< index_t > & dofs_per_edge_on_sideset (const id_t aSideSetID, const bool aSideSetOnly=false) const
const Vector< index_t > & dofs_per_face_on_sideset (const id_t aSideSetID, const bool aSideSetOnly=false) const
const Vector< index_t > & dofs_per_cell_on_sideset (const id_t, const bool aSideSetOnly=false) const
const Vector< index_t > & dof_entity_types () const
const Vector< index_t > & default_dof_types () const
index_t edge_multiplicity () const
 tells how many dofs sit on one edge
index_t face_multiplicity () const
 tells how many dofs sit on one face
index_t cell_multiplicity () const
 tells how many dofs sit on one cell
index_t edge_field_index (const index_t aDofType) const
index_t face_field_index (const index_t aDofType) const
const Vector< index_t > & dofs_per_sideset (const id_t aSidesetID) const
 intended to be used for interface dof creation
uint num_rhs_cols () const
void detach_field (const DofManagerBase *aField)
 forgets aField if it is the linked one.
IwgType type () const
ModelDimensionality model_dimensionality () const
void set_interpolation_type (const InterpolationType aType)
InterpolationType interpolation_type () const
IwgMode mode () const
real omega () const
 The Newton relaxation factor, dimensionless; 1 is an undamped step.
void set_omega (const real &aOmega)
 All ranks must call it.
void set_penalty (const real aPsi, const uint aIndex=0)
 All ranks must call it.
real penalty (const uint aIndex) const
SymmetryMode symmetry_mode () const
 flag telling if matrices are symmetric
void set_num_rhs_cols (const uint &aNumRhsCols)
 special function, must be called before init->jacobian() is called
virtual void set_wetted_sidesets (const Vector< id_t > &aSideSets)
const Vector< id_t > & wetted_sidesets () const
real & delta_time ()
uint & time_loop ()
void add_fields (const Cell< string > &aFieldLabels)
 add additional non-dof fields to mOtherFields and mAllFields; a label "alpha" also sets mHasConvection
bool has_convection () const
 tells if this field has an alpha boundary condition
virtual void compute_boundary_flux_matrix (Element *aElement, const uint aDirection, Matrix< real > &aJacobian)
 special function to compute the boundary flux in magnetics impose zero as weak BC
void set_blocks (const Vector< id_t > &aBlockIDs, const Cell< DomainType > &aBlockTypes)
void set_sidesets (const Vector< id_t > &aSideSetIDs, const Cell< DomainType > &aSideSetTypes)
DomainType block_type (const id_t aID) const
DomainType sideset_type (const id_t aID) const
GroupActivationMode block_activation_mode (const DomainType aType) const
 returns the activation mode for a block based on its domain type
GroupActivationMode sideset_activation_mode (const DomainType aType) const
 returns the activation mode for a sideset based on its domain type
virtual void initialize ()
virtual void initialize (const IwgType aType)
bool is_initialized () const
bool enrich_sidesets () const
virtual int check_mesh (Mesh *aMesh, const proc_t aMasterRank=0)
 This routine makes sure that the mesh fulfills the requirements.
void hide_fields_from_exodus (Mesh *aMesh)
 hides fields that are not to be saved to exodus
virtual bool has_edge_dofs () const
 flag telling if the IWG has edge dofs
uint lambda_multiplicity () const
 if this number is > 0, we have langrande dofs such as contact
SideSetDofLinkMode sideset_dof_link_mode () const
 return the dof linking mode for sideset
void set_algorithm (const SolverAlgorithm aAlgorithm)
 sets the mode for the solver algorithm
SolverAlgorithm algorithm () const
 returns the solver algorithm
void collect_node_data (Element *aElement, Cell< string > &aFieldLabels, Matrix< real > &aData)
 The caller pre-sizes aData.
void collect_node_data (Element *aElement, const string &aFieldLabel)
void collect_node_data (Element *aElement, const Cell< string > &aFieldLabels)
void collect_node_data (Element *aElement, const string &aFieldLabel, Vector< real > &aData)
void collect_node_data (Element *aElement, const string &aFieldLabel, Vector< real > &aData, uint &aOffset)
void collect_edge_data (Element *aElement, const string &aEdgeFieldLabel, Vector< real > &aData)
void collect_edge_data (Element *aElement, const string &aEdgeFieldLabel, const string &aFaceFieldLabel, Vector< real > &aData)
void collect_lambda_data (Element *aElement, const string &aFieldLabel, real &aData)
uint doftype (const string &aDofLabel) const
 return the type id of a dof
void unique_and_rearrange (Cell< string > &aDofs, const bool aMakeMap=false)
 makes sure that dof list is unique and also creares dofmap must be accessible by Mawell_FieldList as well
bool compute_jacobian_on_sideset () const
bool compute_jacobian_on_block () const
void print_dofs (Element *aElement, const bool aLocal=false)
 for debugging
const string & dof_label (const index_t aDofIndex)
 for debugging
Calculator * calc ()
 The group's calculator, borrowed and re-pointed by every link_to_group().
void set_abstract_nodes (Cell< mesh::Node * > &aNodes)
void set_orphaned_nodes (Cell< mesh::Node * > &aNodes)
Cell< mesh::Node * > & abstract_nodes ()
Cell< mesh::Node * > & orphaned_nodes ()
index_t abstract_dof_type () const
virtual void collect_abstract_node_dofs ()
virtual void create_custom_vectors_and_matrices (Calculator *aCalc)
uint get_field_index (const uint aDofType) const
virtual void custom_postprocess ()
void set_abstract_dof_type (const uint aDofType)

Protected Member Functions

void compute_mkf (Element *aElement) override
 a default interface to compute the matrices of a timestepping scheme of shape of \( M \, \dot q + K \, q = f \)
void compute_timestep (Matrix< real > &aJ, Vector< real > &aRHS)
void set_field (DofManagerBase *aField) override
Protected Member Functions inherited from belfem::fem::IWG
void delete_boundary_conditions ()
 Reserved; not defined and not called by the destructor.
void delete_block_dof_tables ()
void delete_sideset_dof_tables ()
virtual void assign_dofs_per_block (const Vector< id_t > &aBlockIDs)
 this function assumes that all blocks are treated equally.
virtual void assign_dofs_per_sideset (const Vector< id_t > &aSideSetIDs)
 this function assumes that all sidesets are treated equally.
virtual void init_activation_maps ()
 populates the activation mode maps for blocks and sidesets based on domain types.
virtual void allocate_work_matrices (Group *aGroup)
 Sizes the group's node-coordinate work matrix before its element loop.
void collect_nodes_on_wetted_sitdesets (Mesh *aMesh, const Vector< id_t > &aSideSets)
 populate the node indices for the nodes that sit on wetted sidesets
void count_dofs_per_block ()
void count_dofs_per_sideset ()
void collect_node_coords (Element *aElement, Matrix< real > &aX)
 Sizes aX to number_of_nodes x mNumberOfSpatialDimensions, the problem dimension the derived IWG's constructor sets ( 2 or 3; link_to_group() does not set it, and an IWG that leaves the sentinel trips the assert ), and fills row k with node k's coordinates.

Protected Attributes

uint mOrder = 1
TimestepMatrices * mTimeStepMatrices
Protected Attributes inherited from belfem::fem::IWG
const proc_t mCommRank
real mOmega = 0.9
Vector< real > mPenalty
bool mIsInitialized = false
 flag telling if we have been initialized
bool mEnrichSideSets = false
uint mTimeLoop = 0
 value for timeloop, needed if we don't want to write every timestep
bool mComputeJacobianOnBlock = true
bool mComputeJacobianOnSideset = false
const IwgType mType
 this enum tells which equation object is used
const ModelDimensionality mDimensionality
 this enum tells which dimensionality we have
const IwgMode mMode
 this enum tells if we have to perform a Newton-Raphson
SymmetryMode mSymmetryMode
 needed for the solver
const DofMode mDofMode
 except maxwell, most IWGs are AllBlocksEqual
const SideSetDofLinkMode mSideSetDofLinkMode
 mode how sidesets are linked
SolverAlgorithm mSolverAlgorithm = SolverAlgorithm::UNDEFINED
Mesh * mMesh = nullptr
DofManagerBase * mField = nullptr
Group * mGroup = nullptr
Calculator * mCalc = nullptr
const Material * mMaterial = nullptr
uint mNumberOfDofsPerNode = 0
uint mNumberOfDofsPerEdge = 0
uint mNumberOfDofsPerFace = 0
uint mNumberOfRhsDofsPerEdge = 0
uint mNumberOfRhsDofsPerFace = 0
uint mNumberOfThinShellLayers = 0
uint mNumberOfSpatialDimensions = BELFEM_UINT_MAX
uint mNumberOfDerivativeDimensions = 0
uint mNumberOfNodesPerElement = BELFEM_UINT_MAX
uint mNumberOfNodesPerMaster = BELFEM_UINT_MAX
uint mNumberOfNodesPerSlave = BELFEM_UINT_MAX
uint mNumberOfEdgesPerElement = 0
uint mNumberOfFacesPerElement = 0
uint mNumberOfDofsPerElement = BELFEM_UINT_MAX
uint mNumberOfNodeDofsPerElement = 0
uint mNumberOfEdgeDofsPerElement = 0
uint mNumberOfRhsEdgeDofsPerElement = 0
Cell< string > mDofFields
Cell< string > mFluxFields
Cell< string > mTensorFields
Cell< string > mOtherFields
Cell< string > mAllFields
Cell< string > mHiddenFields
uint mNumberOfRhsCols = 1
Vector< id_t > mWettedSidesets
real mDeltaTime = 1.0
Vector< index_t > mNodesOnWettedSidesets
bool mHasConvection = false
Vector< id_t > mBlockIDs
Vector< id_t > mSideSetIDs
Map< id_t, index_t > mBlockIndices
Map< id_t, index_t > mSideSetIndices
Map< string, uint > mDofTypeMap
Map< uint, uint > mDofFieldMap
Vector< index_t > mDefaultDofTypes
Vector< index_t > mDofEntityTypes
Cell< Vector< index_t > > mDofsPerBlock
Cell< Vector< index_t > > mDofsPerSideSet
Cell< DofTable * > mBlockDofs
 contains the block dofs
Cell< DofTable * > mSideSetDofs
 contains the sideset dofs
Cell< DofTable * > mSideSetOnlyDofs
Vector< index_t > mEdgeFieldIndices
Vector< index_t > mFaceFieldIndices
index_t mEdgeDofMultiplicity = 0
index_t mFaceDofMultiplicity = 0
index_t mCellDofMultiplicity = 0
index_t mLambdaDofMultiplicity = 0
Map< string, uint > mDofMap
Cell< string > mDofLabels
 needed for debug output
Map< id_t, DomainType > mBlockTypes
Map< id_t, DomainType > mSideSetTypes
 links sideset IDs with the designated types
Map< id_t, DomainType > mSideSetSubTypes
 links sideset IDs with the designated types
Map< DomainType, GroupActivationMode > mBlockActivationModes
 maps domain types to activation modes for blocks
Map< DomainType, GroupActivationMode > mSideSetActivationModes
 maps domain types to activation modes for sidesets
Vector< real > mNormal2D = { 0., 0. }
 TODO(cm): mNormal2D and mNormal3D have no reader; delete both.
Vector< real > mNormal3D = { 0., 0., 0. }
InterpolationType mInterpolationType = InterpolationType::LAGRANGE
Cell< mesh::Node * > mAbstractNodes
 abstract nodes needed for cut BCs in MAXWELL
Cell< mesh::Node * > mOrphanedNodes
 nodes that belong to no active element but still carry a phi dof ( see Mesh::orphaned_nodes() )
Cell< Dof * > mAbstractNodeDofs
 list with special dofs that sit on abstract nodes
DofTable mAbstractNodeTable
index_t mAbstractDofType = gNoIndex

Detailed Description

Base class for transient problems.

See also
IWG Module Usage Guide

Constructor & Destructor Documentation

◆ IWG_Timestep()

belfem::fem::IWG_Timestep::IWG_Timestep ( const IwgType aType,
const ModelDimensionality aDimensionality,
const IwgMode aMode = IwgMode::Iterative,
const SymmetryMode aSymmetryMode = SymmetryMode::Unsymmetric,
const DofMode aDofMode = DofMode::AllBlocksEqual,
const SideSetDofLinkMode aSideSetDofLinkMode = SideSetDofLinkMode::FacetOnly )

◆ ~IWG_Timestep()

belfem::fem::IWG_Timestep::~IWG_Timestep ( )
override

Member Function Documentation

◆ collect_qhist()

const Vector< real > & belfem::fem::IWG_Timestep::collect_qhist ( )

The beta-weighted dof history of the scheme running this step:

qhist = beta0*q0 - beta1*q1 + beta2*q2 - beta3*q3 + beta4*q4

truncated to the order actually running, where q0 is the previous step, q1 the one before it, and so on.

WHAT IT IS FOR. A BDF step evaluates the time derivative as ( alpha*q - qhist ) / 1, so the residual contracts the mass matrix against exactly that combination. Anything that differentiates the mass term must therefore differentiate against THIS vector, or the Jacobian silently stops being the tangent of the residual it is paired with. That is why this function exists rather than each producer assembling its own history: it is the single source of truth, used by the bdf2-5 right-hand sides and by every nonlinear-mass producer ( maxwell::phi_ferro_newton and the maxwell / thermal h-kernels ).

FOUR THINGS THAT ARE EASY TO GET WRONG:

  1. The alternating SIGNS live here, not in mBeta. compute_bdf_ coeffs_* store beta as positive magnitudes; this function applies the +-+- pattern. Do not re-apply it at a call site.
  2. alpha is NOT included. qhist is only the history half; the caller pairs it with alpha*q for the current state.
  3. The order used is mOrderActive, not mOrder. During the startup ramp a BDF-p run executes at reduced order for its first steps, so the number of history terms — and the beta values, which also depend on the variable step sizes — change from step to step. At order <= 1 the result is exactly q0, with no beta applied.
  4. The returned reference aliases the calculator's qswap() scratch buffer, which belongs to the CURRENTLY LINKED ELEMENT. It stays valid only until the next collect_qhist() call or the next element link. Read it, use it, do not store it: caching it across elements, or holding it across anything that may touch qswap(), reads another element's history.
Returns
reference to the calculator's qswap() buffer, filled with the history combination described above

◆ compute_bdf_coefficients()

void belfem::fem::IWG_Timestep::compute_bdf_coefficients ( )

compute BDF coefficients (alpha, beta) for variable-step BDF and select the scheme for the upcoming step (startup ramp).

Must be called AFTER delta_time is set to the upcoming step and AFTER shift_fields has been called. Called lazily from compute_jacobian_and_rhs when shift_fields/reset_fields have flagged the coefficients as dirty.

◆ compute_jacobian_and_rhs()

void belfem::fem::IWG_Timestep::compute_jacobian_and_rhs ( Element * aElement,
Matrix< real > & aJacobian,
Vector< real > & aRHS )
overridevirtual

Reimplemented from belfem::fem::IWG.

◆ compute_mkf()

void belfem::fem::IWG_Timestep::compute_mkf ( Element * aElement)
overrideprotectedvirtual

a default interface to compute the matrices of a timestepping scheme of shape of \( M \, \dot q + K \, q = f \)

The results are written into the TimestepMatrices object returned by matrices(): the mass matrix M, the stiffness matrix K, the load vector f, and — for Newton — the contracted derivative blocks dMdX_times_x, dMdX_times_h, dKdX_times_x and dFdX from which assemble_dJdx() builds the Newton correction.

Parameters
aElementelement the matrices are computed for

Reimplemented from belfem::fem::IWG.

Reimplemented in belfem::fem::IWG_TransientHeatConduction.

◆ compute_timestep()

void belfem::fem::IWG_Timestep::compute_timestep ( Matrix< real > & aJ,
Vector< real > & aRHS )
protected

◆ history_field_labels()

void belfem::fem::IWG_Timestep::history_field_labels ( Cell< string > & aParents,
Cell< string > & aHistory,
const uint aDepth = 0 ) const

the dof labels ( aParents ) and their numbered history labels ( aHistory, label + "0".."order-1" ) — the fields shift_fields() rotates.

Single source of the naming convention shared with create_old_dof_fields(); the controller's warm-restart field synch is the consumer ( these labels are deliberately NOT in all_fields )

◆ make_savepoint()

void belfem::fem::IWG_Timestep::make_savepoint ( )

save a deep copy of all dof fields, the step-size history and the step counter.

Call at the start of a timestep, BEFORE shift_fields. Unlike reset_fields ( which reverses exactly one shift ), restore_savepoint undoes any number of shifts — needed for the thermal equation, which sub-steps several times within one magnetic timestep.

◆ matrices()

TimestepMatrices * belfem::fem::IWG_Timestep::matrices ( )
overridevirtual

A timestep IWG returns the work matrices it owns.

The base implementation aborts with BELFEM_ERROR.

Reimplemented from belfem::fem::IWG.

◆ method()

EulerMethod belfem::fem::IWG_Timestep::method ( ) const
inlineoverridevirtual

Reimplemented from belfem::fem::IWG.

◆ order_active()

uint belfem::fem::IWG_Timestep::order_active ( ) const
inline

◆ order_pending()

uint belfem::fem::IWG_Timestep::order_pending ( ) const
inline

◆ reset_fields()

void belfem::fem::IWG_Timestep::reset_fields ( )
overridevirtual

called by main file to copy fields from last timestep eg.

T = T0

Reimplemented from belfem::fem::IWG.

◆ restore_history_state()

bool belfem::fem::IWG_Timestep::restore_history_state ( const Vector< real > & aH,
const uint aStepCount,
const real aLastDeltaTime )

Counterpart of save_history_state.

Validates and restores; returns false — leaving the cold-start ramp untouched — when the data does not validate:

  • aH must match mH in length, all entries finite and >= 0
  • aStepCount == 0 is a reject ( it would silently ramp to BDF1 behind a full history )
  • aLastDeltaTime must be finite and > 0; it is HISTORY and is deliberately NOT clamped to the deck's Δt window
  • the slots a resumed step and its possible retry read must be positive: aH( 0 .. r-1 ) with r = min( aStepCount - 1, mOrder - 1, 4 ); note mH( 4 ) is the never-written spare slot and zero there is NORMAL On success mStepCount restores capped at mOrder ( the ramp saturates there ), mDeltaTime takes aLastDeltaTime, and the coefficients are marked dirty for the lazy recompute. mOrder and mMethod stay deck authority. mHDropped stays NAN: it is unreachable before the first shift refills it from mH( 3 ).

◆ restore_savepoint()

void belfem::fem::IWG_Timestep::restore_savepoint ( )

restore the state stored by make_savepoint

◆ save_history_state()

void belfem::fem::IWG_Timestep::save_history_state ( Vector< real > & aH,
uint & aStepCount,
real & aLastDeltaTime ) const

Export the multi-step integrator state for the memdump, so a warm restart can resume at full BDF order instead of re-anchoring the ramp at order 1.

A BDF1 re-entry into an active state has a different tangent and breaks the Newton promotion.

The triple is ( mH, mStepCount, mDeltaTime ) and the third member is load-bearing: at save time this object's mDeltaTime still holds the LAST COMPLETED step size h_n — the controller assigns the upcoming step only AFTER shift_fields — and the first post-restore shift pushes exactly this value into mH( 0 ). The controller's own ( already dumped ) delta_time is the NEXT step and must not be confused with it.

◆ set_field()

void belfem::fem::IWG_Timestep::set_field ( DofManagerBase * aField)
overrideprotectedvirtual

Reimplemented from belfem::fem::IWG.

◆ set_timestepping_method()

void belfem::fem::IWG_Timestep::set_timestepping_method ( const EulerMethod aMethod,
const bool aHaveStiffness = true )
overridevirtual

Reimplemented from belfem::fem::IWG.

◆ shift_fields()

void belfem::fem::IWG_Timestep::shift_fields ( )
overridevirtual

called by main file to copy fields into last timestep eg.

T0 = T

Reimplemented from belfem::fem::IWG.

Member Data Documentation

◆ mOrder

uint belfem::fem::IWG_Timestep::mOrder = 1
protected

◆ mTimeStepMatrices

TimestepMatrices* belfem::fem::IWG_Timestep::mTimeStepMatrices
protected

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