NimbleSM
NimbleSM is a solid mechanics simulation code for dynamic systems
Loading...
Searching...
No Matches
nimble_kokkos::BlockMaterialInterface Class Reference

#include <nimble_kokkos_block_material_interface.h>

Inheritance diagram for nimble_kokkos::BlockMaterialInterface:
nimble::BlockMaterialInterfaceBase

Public Member Functions

 BlockMaterialInterface (double time_n_, double time_np1_, const nimble::FieldIds &field_ids_, const std::vector< nimble::BlockData > &blocks_, nimble::ModelDataBase *model_data_)
 
 ~BlockMaterialInterface () override=default
 
void ComputeStress () const override
 
- Public Member Functions inherited from nimble::BlockMaterialInterfaceBase
 BlockMaterialInterfaceBase ()=default
 
virtual ~BlockMaterialInterfaceBase ()=default
 

Protected Attributes

const double time_n
 
const double time_np1
 
const nimble::FieldIdsfield_ids
 
nimble_kokkos::ModelDatamodel_data
 
std::vector< nimble::BlockDatablocks
 

Constructor & Destructor Documentation

◆ BlockMaterialInterface()

nimble_kokkos::BlockMaterialInterface::BlockMaterialInterface ( double time_n_,
double time_np1_,
const nimble::FieldIds & field_ids_,
const std::vector< nimble::BlockData > & blocks_,
nimble::ModelDataBase * model_data_ )
129 : nimble::BlockMaterialInterfaceBase(),
130 time_n(time_n_),
131 time_np1(time_np1_),
132 field_ids(field_ids_),
133 model_data(dynamic_cast<nimble_kokkos::ModelData*>(model_data_)),
134 blocks(blocks_)
135{
136}
const double time_n
Definition nimble_kokkos_block_material_interface.h:87
const double time_np1
Definition nimble_kokkos_block_material_interface.h:88
const nimble::FieldIds & field_ids
Definition nimble_kokkos_block_material_interface.h:89
nimble_kokkos::ModelData * model_data
Definition nimble_kokkos_block_material_interface.h:90
std::vector< nimble::BlockData > blocks
Definition nimble_kokkos_block_material_interface.h:91

◆ ~BlockMaterialInterface()

nimble_kokkos::BlockMaterialInterface::~BlockMaterialInterface ( )
overridedefault

Member Function Documentation

◆ ComputeStress()

void nimble_kokkos::BlockMaterialInterface::ComputeStress ( ) const
overridevirtual

Implements nimble::BlockMaterialInterfaceBase.

140{
141 for (auto&& block_data : blocks) {
142 auto deformation_gradient_step_n_d = model_data->GetDeviceFullTensorIntegrationPointData(
143 block_data.id, field_ids.deformation_gradient, nimble::STEP_N);
144 auto deformation_gradient_step_np1_d = model_data->GetDeviceFullTensorIntegrationPointData(
145 block_data.id, field_ids.deformation_gradient, nimble::STEP_NP1);
146 auto stress_step_n_d =
147 model_data->GetDeviceSymTensorIntegrationPointData(block_data.id, field_ids.stress, nimble::STEP_N);
148 auto stress_step_np1_d =
149 model_data->GetDeviceSymTensorIntegrationPointData(block_data.id, field_ids.stress, nimble::STEP_NP1);
150 //
151 auto material_device = block_data.material_device;
152 DeviceElemStateView elem_state_n, elem_state_np1;
153 if (material_device->NumStateVariables() > 0) {
154 if (field_ids.state_scalar >= 0) {
155 elem_state_n.scalar =
156 model_data->GetDeviceScalarIntegrationPointData(block_data.id, field_ids.state_scalar, nimble::STEP_N);
157 elem_state_np1.scalar =
158 model_data->GetDeviceScalarIntegrationPointData(block_data.id, field_ids.state_scalar, nimble::STEP_NP1);
159 }
160 //
161 if (field_ids.state_vec3D >= 0) {
162 elem_state_n.vec3D =
163 model_data->GetDeviceVectorIntegrationPointData(block_data.id, field_ids.state_vec3D, nimble::STEP_N);
164 elem_state_np1.vec3D =
165 model_data->GetDeviceVectorIntegrationPointData(block_data.id, field_ids.state_vec3D, nimble::STEP_NP1);
166 }
167 //
168 if (field_ids.state_sym_tensor >= 0) {
169 elem_state_n.sym_tensor = model_data->GetDeviceSymTensorIntegrationPointData(
170 block_data.id, field_ids.state_sym_tensor, nimble::STEP_N);
171 elem_state_np1.sym_tensor = model_data->GetDeviceSymTensorIntegrationPointData(
172 block_data.id, field_ids.state_sym_tensor, nimble::STEP_NP1);
173 }
174 //
175 if (field_ids.state_full_tensor >= 0) {
176 elem_state_n.full_tensor = model_data->GetDeviceFullTensorIntegrationPointData(
177 block_data.id, field_ids.state_full_tensor, nimble::STEP_N);
178 elem_state_np1.full_tensor = model_data->GetDeviceFullTensorIntegrationPointData(
179 block_data.id, field_ids.state_full_tensor, nimble::STEP_NP1);
180 }
181 }
182 //
183 compute_block_stress(
184 block_data,
185 deformation_gradient_step_n_d,
186 deformation_gradient_step_np1_d,
187 stress_step_n_d,
188 stress_step_np1_d,
189 elem_state_n,
190 elem_state_np1,
191 time_n,
192 time_np1);
193 } // for (auto&& block_data : blocks)
194}
@ STEP_NP1
Definition nimble_data_utils.h:99
@ STEP_N
Definition nimble_data_utils.h:98

Member Data Documentation

◆ blocks

std::vector<nimble::BlockData> nimble_kokkos::BlockMaterialInterface::blocks
protected

◆ field_ids

const nimble::FieldIds& nimble_kokkos::BlockMaterialInterface::field_ids
protected

◆ model_data

nimble_kokkos::ModelData* nimble_kokkos::BlockMaterialInterface::model_data
protected

◆ time_n

const double nimble_kokkos::BlockMaterialInterface::time_n
protected

◆ time_np1

const double nimble_kokkos::BlockMaterialInterface::time_np1
protected

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