https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Functions
PenetrationInfo.C File Reference

Go to the source code of this file.

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 210 of file PenetrationInfo.C.

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

◆ dataStore()

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

Definition at line 158 of file PenetrationInfo.C.

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