https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Classes | Namespaces | Functions
PenetrationInfo.h File Reference

Go to the source code of this file.

Classes

class  PenetrationInfo
 Data structure used to hold penetration information. More...
 

Namespaces

namespace  libMesh
 The following methods are specializations for using the libMesh::Parallel::packed_range_* routines for std::strings.
 

Functions

template<>
void dataStore (std::ostream &stream, PenetrationInfo *&pinfo, void *context)
 
template<>
void dataLoad (std::istream &stream, PenetrationInfo *&pinfo, void *context)
 

Function Documentation

◆ dataLoad()

template<>
void dataLoad ( std::istream &  stream,
PenetrationInfo *&  pinfo,
void *  context 
)

Definition at line 208 of file PenetrationInfo.C.

209{
210 if (!context)
211 mooseError("Can only load PenetrationInfo objects using a MooseMesh context!");
212
213 // First, see if this is supposed to be NULL
214 unsigned int i = 0;
215 dataLoad(stream, i, context);
216 if (i)
217 {
218 pinfo = new PenetrationInfo();
219
220 dataLoad(stream, pinfo->_elem, context);
221 dataLoad(stream, pinfo->_side_num, context);
222 // Rebuild the side element.
223 pinfo->_side = pinfo->_elem->build_side_ptr(pinfo->_side_num).release();
224
225 dataLoad(stream, pinfo->_normal, context);
226 dataLoad(stream, pinfo->_distance, context);
227 dataLoad(stream, pinfo->_tangential_distance, context);
228 dataLoad(stream, pinfo->_closest_point, context);
229 dataLoad(stream, pinfo->_closest_point_ref, context);
230 dataLoad(stream, pinfo->_closest_point_on_face_ref, context);
231 dataLoad(stream, pinfo->_off_edge_nodes, context);
232 dataLoad(stream, pinfo->_side_phi, context);
233 dataLoad(stream, pinfo->_side_grad_phi, context);
234 dataLoad(stream, pinfo->_dxyzdxi, context);
235 dataLoad(stream, pinfo->_dxyzdeta, context);
236 dataLoad(stream, pinfo->_d2xyzdxideta, context);
237 dataLoad(stream, pinfo->_starting_elem, context);
238 dataLoad(stream, pinfo->_starting_side_num, context);
239 dataLoad(stream, pinfo->_starting_closest_point_ref, context);
240 dataLoad(stream, pinfo->_incremental_slip, context);
241 dataLoad(stream, pinfo->_accumulated_slip, context);
242 dataLoad(stream, pinfo->_frictional_energy, context);
243 dataLoad(stream, pinfo->_contact_force, context);
244 dataLoad(stream, pinfo->_lagrange_multiplier, context);
245 dataLoad(stream, pinfo->_lagrange_multiplier_slip, context);
246 dataLoad(stream, pinfo->_mech_status, context);
247 dataLoad(stream, pinfo->_mech_status_old, context);
248
249 // Don't need frictional_energy_old, accumulated_slip_old, contact_force_old, or
250 // locked_this_step
251 // because they are always set by the constraints at the beginning of a new time step.
252 }
253 else
254 pinfo = NULL;
255}
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
void dataLoad(std::istream &stream, PenetrationInfo *&pinfo, void *context)
Data structure used to hold penetration information.
std::vector< const Node * > _off_edge_nodes
const Elem * _side
MECH_STATUS_ENUM _mech_status
std::vector< RealGradient > _d2xyzdxideta
MECH_STATUS_ENUM _mech_status_old
Point _closest_point_on_face_ref
RealVectorValue _contact_force
std::vector< RealGradient > _dxyzdeta
std::vector< RealGradient > _dxyzdxi
unsigned int _starting_side_num
std::vector< std::vector< Real > > _side_phi
const Elem * _elem
const Elem * _starting_elem
std::vector< std::vector< RealGradient > > _side_grad_phi
Point _starting_closest_point_ref
unsigned int _side_num
RealVectorValue _lagrange_multiplier_slip
RealVectorValue _normal

Referenced by dataLoad().

◆ dataStore()

template<>
void dataStore ( std::ostream &  stream,
PenetrationInfo *&  pinfo,
void *  context 
)

Definition at line 156 of file PenetrationInfo.C.

157{
158 if (!context)
159 mooseError("Can only store PenetrationInfo objects using a MooseMesh context!");
160
161 if (pinfo)
162 {
163 // Store 1 so that we know that this pinfo really exists!
164 unsigned int i = 1;
165 dataStore(stream, i, context);
166
167 dataStore(stream, pinfo->_elem, context);
168 // Not storing the side element as we will need to recreate it on load
169 dataStore(stream, pinfo->_side_num, context);
170 dataStore(stream, pinfo->_normal, context);
171 dataStore(stream, pinfo->_distance, context);
172 dataStore(stream, pinfo->_tangential_distance, context);
173 dataStore(stream, pinfo->_closest_point, context);
174 dataStore(stream, pinfo->_closest_point_ref, context);
175 dataStore(stream, pinfo->_closest_point_on_face_ref, context);
176 dataStore(stream, pinfo->_off_edge_nodes, context);
177 dataStore(stream, pinfo->_side_phi, context);
178 dataStore(stream, pinfo->_side_grad_phi, context);
179 dataStore(stream, pinfo->_dxyzdxi, context);
180 dataStore(stream, pinfo->_dxyzdeta, context);
181 dataStore(stream, pinfo->_d2xyzdxideta, context);
182 dataStore(stream, pinfo->_starting_elem, context);
183 dataStore(stream, pinfo->_starting_side_num, context);
184 dataStore(stream, pinfo->_starting_closest_point_ref, context);
185 dataStore(stream, pinfo->_incremental_slip, context);
186 dataStore(stream, pinfo->_accumulated_slip, context);
187 dataStore(stream, pinfo->_frictional_energy, context);
188 dataStore(stream, pinfo->_contact_force, context);
189 dataStore(stream, pinfo->_lagrange_multiplier, context);
190 dataStore(stream, pinfo->_lagrange_multiplier_slip, context);
191 dataStore(stream, pinfo->_mech_status, context);
192 dataStore(stream, pinfo->_mech_status_old, context);
193
194 // Don't need frictional_energy_old, accumulated_slip_old, contact_force_old, or
195 // locked_this_step
196 // because they are always set by the constraints at the beginning of a new time step.
197 }
198 else
199 {
200 // Store 0 so that we know that this pinfo is NULL
201 unsigned int i = 0;
202 dataStore(stream, i, context);
203 }
204}
void dataStore(std::ostream &stream, PenetrationInfo *&pinfo, void *context)

Referenced by dataStore().