NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble::ModelDataBase Class Referenceabstract

#include <nimble_model_data_base.h>

Inheritance diagram for nimble::ModelDataBase:
nimble::ModelData nimble_kokkos::ModelData

Public Member Functions

 ModelDataBase ()=default
 Constructor.
 
virtual ~ModelDataBase ()=default
 Destructor.
 
virtual int AllocateNodeData (Length length, std::string label, int num_objects)=0
 Allocate data storage for a node-based quantity.
 
int GetFieldIdChecked (const std::string &field_label) const
 
virtual int GetFieldId (const std::string &field_label) const =0
 Returns the field ID for a specific label.
 
virtual void InitializeBlocks (nimble::DataManager &data_manager, const std::shared_ptr< nimble::MaterialFactoryBase > &material_factory_base)=0
 Initialize the different blocks in the mesh.
 
virtual void UpdateStates (const nimble::DataManager &data_manager)=0
 Copy time state (n+1) into time state (n)
 
nimble::Viewify< 1 > GetScalarNodeData (const std::string &label)
 Get view of scalar quantity defined on nodes.
 
virtual nimble::Viewify< 1 > GetScalarNodeData (int field_id)=0
 Get view of scalar quantity defined on nodes.
 
nimble::Viewify< 2 > GetVectorNodeData (const std::string &label)
 Get view of vector quantity defined on nodes.
 
virtual nimble::Viewify< 2 > GetVectorNodeData (int field_id)=0
 Get view of scalar quantity defined on nodes.
 
virtual void ComputeLumpedMass (nimble::DataManager &data_manager)=0
 Compute the lumped mass.
 
virtual void InitializeExodusOutput (nimble::DataManager &data_manager)
 
virtual void WriteExodusOutput (nimble::DataManager &data_manager, double time_current)
 Write output of simulation in Exodus format.
 
virtual void ComputeExternalForce (nimble::DataManager &data_manager, double time_previous, double time_current, bool is_output_step)
 Compute the external force.
 
virtual void ComputeInternalForce (nimble::DataManager &data_manager, double time_previous, double time_current, bool is_output_step, const nimble::Viewify< 2 > &displacement, nimble::Viewify< 2 > &force)
 Compute the internal force.
 
virtual void ApplyInitialConditions (nimble::DataManager &data_manager)
 Apply initial conditions.
 
virtual void ApplyKinematicConditions (nimble::DataManager &data_manager, double time_current, double time_previous)
 Apply kinematic conditions.
 
virtual void UpdateWithNewVelocity (nimble::DataManager &data_manager, double dt)
 Update model with new velocity.
 
virtual void UpdateWithNewDisplacement (nimble::DataManager &data_manager, double dt)
 Update model with new displacement.
 
int GetDimension () const
 Get the spatial dimension.
 
void SetCriticalTimeStep (double time_step)
 Set the critical time step.
 
void SetDimension (int dim)
 Set spatial dimension.
 
void SetReferenceCoordinates (const nimble::GenesisMesh &mesh)
 Set reference coordinates.
 
double GetCriticalTimeStep () const
 Get the critical time step.
 
const std::vector< std::string > & GetNodeDataLabelsForOutput () const
 
const std::map< int, std::vector< std::string > > & GetElementDataLabels () const
 
const std::map< int, std::vector< std::string > > & GetElementDataLabelsForOutput () const
 
const std::map< int, std::vector< std::string > > & GetDerivedElementDataLabelsForOutput () const
 

Protected Attributes

int dim_ = 3
 Problem dimension, either 2 or 3.
 
double critical_time_step_ = 0.0
 Critical time step.
 
std::vector< std::string > output_node_component_labels_
 Output labels for node data that will be written to disk.
 
std::map< int, std::vector< std::string > > element_component_labels_
 
std::map< int, std::vector< std::string > > output_element_component_labels_
 Output labels for element data that will be written to disk.
 
std::map< int, std::vector< std::string > > derived_output_element_data_labels_
 Output labels for derived element data that will be written to disk.
 

Constructor & Destructor Documentation

◆ ModelDataBase()

nimble::ModelDataBase::ModelDataBase ( )
default

Constructor.

◆ ~ModelDataBase()

virtual nimble::ModelDataBase::~ModelDataBase ( )
virtualdefault

Destructor.

Member Function Documentation

◆ AllocateNodeData()

virtual int nimble::ModelDataBase::AllocateNodeData ( Length length,
std::string label,
int num_objects )
pure virtual

Allocate data storage for a node-based quantity.

Parameters
length
label
num_objects
Returns
Field ID for the data allocated

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ ApplyInitialConditions()

void nimble::ModelDataBase::ApplyInitialConditions ( nimble::DataManager & data_manager)
virtual

Apply initial conditions.

85{
86 auto bc = data_manager.GetBoundaryConditionManager();
87 auto reference_coordinate = GetVectorNodeData("reference_coordinate");
88 auto velocity = GetVectorNodeData("velocity");
89 bc->ApplyInitialConditions(reference_coordinate, velocity);
90}
std::shared_ptr< nimble::BoundaryConditionManager > GetBoundaryConditionManager()
Return shared pointer to BoundaryConditionManager object.
Definition nimble_data_manager.h:180
nimble::Viewify< 2 > GetVectorNodeData(const std::string &label)
Get view of vector quantity defined on nodes.
Definition nimble_model_data_base.h:163

◆ ApplyKinematicConditions()

void nimble::ModelDataBase::ApplyKinematicConditions ( nimble::DataManager & data_manager,
double time_current,
double time_previous )
virtual

Apply kinematic conditions.

94{
95 auto bc = data_manager.GetBoundaryConditionManager();
96 auto reference_coordinate = GetVectorNodeData("reference_coordinate");
97 auto velocity = GetVectorNodeData("velocity");
98 auto displacement = GetVectorNodeData("displacement");
99 bc->ApplyKinematicBC(time_current, time_previous, reference_coordinate, displacement, velocity);
100}

◆ ComputeExternalForce()

virtual void nimble::ModelDataBase::ComputeExternalForce ( nimble::DataManager & data_manager,
double time_previous,
double time_current,
bool is_output_step )
inlinevirtual

Compute the external force.

Parameters
data_managerReference to the DataManager object
time_previous
time_current
is_output_step
Note
This routine is a placeholder.

Reimplemented in nimble::ModelData.

210 {};

◆ ComputeInternalForce()

virtual void nimble::ModelDataBase::ComputeInternalForce ( nimble::DataManager & data_manager,
double time_previous,
double time_current,
bool is_output_step,
const nimble::Viewify< 2 > & displacement,
nimble::Viewify< 2 > & force )
inlinevirtual

Compute the internal force.

Parameters
[in]data_manager
[in]time_previous
[in]time_current
[in]is_output_step
[in]displacement
[out]internal_forceOutput for internal force

Reimplemented in nimble::ModelData, and nimble_kokkos::ModelData.

227 {};

◆ ComputeLumpedMass()

virtual void nimble::ModelDataBase::ComputeLumpedMass ( nimble::DataManager & data_manager)
pure virtual

Compute the lumped mass.

Parameters
data_managerReference to the data manager

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ GetCriticalTimeStep()

double nimble::ModelDataBase::GetCriticalTimeStep ( ) const
inline

Get the critical time step.

Returns
Time step
298 {
299 return critical_time_step_;
300 }
double critical_time_step_
Critical time step.
Definition nimble_model_data_base.h:331

◆ GetDerivedElementDataLabelsForOutput()

const std::map< int, std::vector< std::string > > & nimble::ModelDataBase::GetDerivedElementDataLabelsForOutput ( ) const
inline
322 {
324 }
std::map< int, std::vector< std::string > > derived_output_element_data_labels_
Output labels for derived element data that will be written to disk.
Definition nimble_model_data_base.h:344

◆ GetDimension()

int nimble::ModelDataBase::GetDimension ( ) const
inline

Get the spatial dimension.

Returns
Spatial dimension
268 {
269 return dim_;
270 }
int dim_
Problem dimension, either 2 or 3.
Definition nimble_model_data_base.h:328

◆ GetElementDataLabels()

const std::map< int, std::vector< std::string > > & nimble::ModelDataBase::GetElementDataLabels ( ) const
inline
310 {
312 }
std::map< int, std::vector< std::string > > element_component_labels_
Definition nimble_model_data_base.h:338

◆ GetElementDataLabelsForOutput()

const std::map< int, std::vector< std::string > > & nimble::ModelDataBase::GetElementDataLabelsForOutput ( ) const
inline
316 {
318 }
std::map< int, std::vector< std::string > > output_element_component_labels_
Output labels for element data that will be written to disk.
Definition nimble_model_data_base.h:341

◆ GetFieldId()

virtual int nimble::ModelDataBase::GetFieldId ( const std::string & field_label) const
pure virtual

Returns the field ID for a specific label.

Parameters
field_labelLabel for a stored quantity
Returns
Field ID to identify the data storage

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ GetFieldIdChecked()

int nimble::ModelDataBase::GetFieldIdChecked ( const std::string & field_label) const
inline
109 {
110 int id = GetFieldId(field_label);
111 if (id < 0) {
112 std::ostringstream errc;
113 errc << "Field \"" << field_label << "\" not allocated";
114 NIMBLE_ABORT(errc.str());
115 }
116 return id;
117 }
virtual int GetFieldId(const std::string &field_label) const =0
Returns the field ID for a specific label.
#define NIMBLE_ABORT(...)
Definition nimble_macros.h:87

◆ GetNodeDataLabelsForOutput()

const std::vector< std::string > & nimble::ModelDataBase::GetNodeDataLabelsForOutput ( ) const
inline
304 {
306 }
std::vector< std::string > output_node_component_labels_
Output labels for node data that will be written to disk.
Definition nimble_model_data_base.h:334

◆ GetScalarNodeData() [1/2]

nimble::Viewify< 1 > nimble::ModelDataBase::GetScalarNodeData ( const std::string & label)
inline

Get view of scalar quantity defined on nodes.

Parameters
labelthe data label
Returns
Viewify<1> object for scalar quantity
147 {
149 };
nimble::Viewify< 1 > GetScalarNodeData(const std::string &label)
Get view of scalar quantity defined on nodes.
Definition nimble_model_data_base.h:146
int GetFieldIdChecked(const std::string &field_label) const
Definition nimble_model_data_base.h:108

◆ GetScalarNodeData() [2/2]

virtual nimble::Viewify< 1 > nimble::ModelDataBase::GetScalarNodeData ( int field_id)
pure virtual

Get view of scalar quantity defined on nodes.

Parameters
field_idthe field id (see DataManager::GetFieldIDs())
Returns
Viewify<1> object for scalar quantity

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ GetVectorNodeData() [1/2]

nimble::Viewify< 2 > nimble::ModelDataBase::GetVectorNodeData ( const std::string & label)
inline

Get view of vector quantity defined on nodes.

Parameters
labelthe data label
Returns
Viewify<2> object for vector quantity
164 {
166 }

◆ GetVectorNodeData() [2/2]

virtual nimble::Viewify< 2 > nimble::ModelDataBase::GetVectorNodeData ( int field_id)
pure virtual

Get view of scalar quantity defined on nodes.

Parameters
field_idthe field id (see DataManager::GetFieldIDs())
Returns
Viewify<2> object for vector quantity

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ InitializeBlocks()

virtual void nimble::ModelDataBase::InitializeBlocks ( nimble::DataManager & data_manager,
const std::shared_ptr< nimble::MaterialFactoryBase > & material_factory_base )
pure virtual

Initialize the different blocks in the mesh.

Parameters
data_managerReference to the data manager
material_factory_baseShared pointer to the material factory

Implemented in nimble::ModelData.

◆ InitializeExodusOutput()

virtual void nimble::ModelDataBase::InitializeExodusOutput ( nimble::DataManager & data_manager)
inlinevirtual

Reimplemented in nimble::ModelData, and nimble_kokkos::ModelData.

183 {
184 NIMBLE_ABORT(" Exodus Output Not Implemented \n");
185 }

◆ SetCriticalTimeStep()

void nimble::ModelDataBase::SetCriticalTimeStep ( double time_step)
inline

Set the critical time step.

Parameters
time_stepCritical time step to use.
277 {
278 critical_time_step_ = time_step;
279 }

◆ SetDimension()

void nimble::ModelDataBase::SetDimension ( int dim)

Set spatial dimension.

Parameters
dimSpatial dimension
53{
54 if (dim != 2 && dim != 3) throw std::invalid_argument("\nError: Invalid dimension in ModelData\n");
55 dim_ = dim;
56}

◆ SetReferenceCoordinates()

void nimble::ModelDataBase::SetReferenceCoordinates ( const nimble::GenesisMesh & mesh)

Set reference coordinates.

Parameters
meshMesh
60{
61 const double* const ref_coord_x = mesh.GetCoordinatesX();
62 const double* const ref_coord_y = mesh.GetCoordinatesY();
63 const double* const ref_coord_z = mesh.GetCoordinatesZ();
64 //
65 auto reference_coordinate = GetVectorNodeData("reference_coordinate");
66 int num_nodes = static_cast<int>(mesh.GetNumNodes());
67 if (dim_ == 2) {
68 for (int i = 0; i < num_nodes; i++) {
69 reference_coordinate(i, 0) = ref_coord_x[i];
70 reference_coordinate(i, 1) = ref_coord_y[i];
71 }
72 } else if (dim_ == 3) {
73 for (int i = 0; i < num_nodes; i++) {
74 reference_coordinate(i, 0) = ref_coord_x[i];
75 reference_coordinate(i, 1) = ref_coord_y[i];
76 reference_coordinate(i, 2) = ref_coord_z[i];
77 }
78 } else {
79 throw std::invalid_argument(" -- Inappropriate Spatial Dimension");
80 }
81}
const double * GetCoordinatesX() const
Definition nimble_genesis_mesh.h:201
const double * GetCoordinatesY() const
Definition nimble_genesis_mesh.h:207
unsigned int GetNumNodes() const
Definition nimble_genesis_mesh.h:90
const double * GetCoordinatesZ() const
Definition nimble_genesis_mesh.h:213

◆ UpdateStates()

virtual void nimble::ModelDataBase::UpdateStates ( const nimble::DataManager & data_manager)
pure virtual

Copy time state (n+1) into time state (n)

Parameters
data_managerReference to the data manager

Implemented in nimble::ModelData, and nimble_kokkos::ModelData.

◆ UpdateWithNewDisplacement()

virtual void nimble::ModelDataBase::UpdateWithNewDisplacement ( nimble::DataManager & data_manager,
double dt )
inlinevirtual

Update model with new displacement.

Parameters
[in]data_managerReference to the data manager
[in]dtCurrent time step
Note
This routine is usually empty. The UQ model data is one case using this routine.

Reimplemented in nimble_kokkos::ModelData.

258 {
259 }

◆ UpdateWithNewVelocity()

virtual void nimble::ModelDataBase::UpdateWithNewVelocity ( nimble::DataManager & data_manager,
double dt )
inlinevirtual

Update model with new velocity.

Parameters
[in]data_managerReference to the data manager
[in]dtCurrent time step
Note
This routine is usually empty. The UQ model data is one case using this routine.

Reimplemented in nimble_kokkos::ModelData.

246 {
247 }

◆ WriteExodusOutput()

virtual void nimble::ModelDataBase::WriteExodusOutput ( nimble::DataManager & data_manager,
double time_current )
inlinevirtual

Write output of simulation in Exodus format.

Parameters
[in]data_managerReference to data manager
[in]time_currentTime value

Reimplemented in nimble::ModelData, and nimble_kokkos::ModelData.

193 {
194 NIMBLE_ABORT(" Exodus Output Not Implemented \n");
195 }

Member Data Documentation

◆ critical_time_step_

double nimble::ModelDataBase::critical_time_step_ = 0.0
protected

Critical time step.

◆ derived_output_element_data_labels_

std::map<int, std::vector<std::string> > nimble::ModelDataBase::derived_output_element_data_labels_
protected

Output labels for derived element data that will be written to disk.

◆ dim_

int nimble::ModelDataBase::dim_ = 3
protected

Problem dimension, either 2 or 3.

◆ element_component_labels_

std::map<int, std::vector<std::string> > nimble::ModelDataBase::element_component_labels_
protected

Map key is the block_id, vector contains component-wise label for each scalar entry in the data array.

◆ output_element_component_labels_

std::map<int, std::vector<std::string> > nimble::ModelDataBase::output_element_component_labels_
protected

Output labels for element data that will be written to disk.

◆ output_node_component_labels_

std::vector<std::string> nimble::ModelDataBase::output_node_component_labels_
protected

Output labels for node data that will be written to disk.


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