20 template<
class NormalForceSpecies,
class FrictionForceSpecies,
class AdhesiveForceSpecies>
93 template<
class NormalForceInteraction,
class FrictionForceInteraction=EmptyFrictionInteraction,
class AdhesiveForceInteraction=EmptyAdhesiveInteraction>
120 void read(std::istream& is)
final;
123 void write(std::ostream& os)
const final;
150 void setMPIInteraction(
void* historyDataArray,
unsigned int index, const
bool resetPointers) final;
152 void getInteractionDetails(
void* interactionDataArray,
unsigned int index,
unsigned int& identificationP,
166 FrictionForceInteraction(
P,
I, timeStamp), AdhesiveForceInteraction(
P,
I, timeStamp)
168 #ifdef DEBUG_CONSTRUCTOR
169 std::cout<<
"Interaction::Interaction() finished"<<std::endl;
174 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
178 #ifdef DEBUG_CONSTRUCTOR
179 std::cout<<
"Interaction::Interaction() finished"<<std::endl;
183 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
188 #ifdef DEBUG_CONSTRUCTOR
189 std::cout<<
"Interaction::Interaction(const Interaction &p finished"<<std::endl;
193 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
196 #ifdef DEBUG_DESTRUCTOR
197 std::cout<<
"Interaction::~Interaction() finished"<<std::endl;
204 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
215 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
229 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
242 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
245 NormalForceInteraction::reverseHistory();
246 FrictionForceInteraction::reverseHistory();
247 AdhesiveForceInteraction::reverseHistory();
250 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
254 NormalForceInteraction::rotateHistory(rotationMatrix);
255 FrictionForceInteraction::rotateHistory(rotationMatrix);
256 AdhesiveForceInteraction::rotateHistory(rotationMatrix);
263 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
266 return NormalForceInteraction::getBaseName() + FrictionForceInteraction::getBaseName() +
267 AdhesiveForceInteraction::getBaseName() +
"Interaction";
275 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
279 FrictionForceInteraction::integrate(timeStep);
290 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
293 NormalForceInteraction::computeNormalForce();
294 FrictionForceInteraction::computeFrictionForce();
295 AdhesiveForceInteraction::computeAdhesionForce();
304 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
308 return NormalForceInteraction::getElasticEnergy() + FrictionForceInteraction::getElasticEnergy() +
309 AdhesiveForceInteraction::getElasticEnergy();
312 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
315 NormalForceInteraction::actionsAfterTimeStep();
316 FrictionForceInteraction::actionsAfterTimeStep();
317 AdhesiveForceInteraction::actionsAfterTimeStep();
323 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
328 return NormalForceInteraction::getElasticEnergyAtEquilibrium(adhesiveForce);
332 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
334 void* interactionDataArray,
unsigned int index)
const
341 array[index] = interactionData;
344 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
346 void* interactionDataArray,
unsigned int index,
const bool resetPointers)
355 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
357 void* interactionDataArray,
unsigned int index,
unsigned int& identificationP,
unsigned int& identificationI,
358 bool& isWallInteraction,
unsigned& timeStamp)
363 identificationP = interactionData.
P;
364 identificationI = interactionData.
I;
370 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
373 unsigned int numberOfInteractions)
const
376 void* interactionArray =
static_cast<void*
>(
array);
377 return interactionArray;
380 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
389 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
392 #ifdef MERCURYDPM_USE_MPI
@ INTERACTION
Definition: MpiContainer.h:46
float * p
Definition: Tutorial_Map_using.cpp:9
Defines the basic properties that a interactable object can have.
Definition: BaseInteractable.h:34
Stores information about interactions between two interactable objects; often particles but could be ...
Definition: BaseInteraction.h:39
bool isWallInteraction()
Definition: BaseInteraction.cc:938
Contains information about the contact between two interactables, BaseInteraction::P_ and BaseInterac...
Definition: Interaction.h:95
Interaction()
Empty constructor.
Definition: Interaction.h:175
void createMPIType() final
Definition: Interaction.h:390
void setMPIInteraction(void *historyDataArray, unsigned int index, const bool resetPointers) final
Definition: Interaction.h:345
void * createMPIInteractionDataArray(unsigned int numberOfInteractions) const final
Definition: Interaction.h:372
Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > * copy() const final
Creates a copy of this Interaction.
Definition: Interaction.h:206
void rotateHistory(Matrix3D &rotationMatrix) final
When periodic particles are used, some interactions need certain history properties rotated (e....
Definition: Interaction.h:251
void getMPIInteraction(void *historyDataArray, unsigned int index) const final
copies the history interactions into the data array
Definition: Interaction.h:333
std::string getName() const final
Returns the name of the Interaction.
Definition: Interaction.h:264
Mdouble getElasticEnergy() const final
Returns the elastic energy stored in the Interaction.
Definition: Interaction.h:306
void getInteractionDetails(void *interactionDataArray, unsigned int index, unsigned int &identificationP, unsigned int &identificationI, bool &isWallInteraction, unsigned &timeStamp)
Definition: Interaction.h:356
void read(std::istream &is) final
Read Interaction properties from a file.
Definition: Interaction.h:230
void computeInteraction()
Computes the interaction parameters based on the forces and torques.
void deleteMPIInteractionDataArray(void *dataArray) final
Definition: Interaction.h:382
void computeForce() final
Computes the normal, tangential, and adhesive forces.
Definition: Interaction.h:291
void reverseHistory() final
Reverses the parameters of the contact force.
Definition: Interaction.h:243
void integrate(Mdouble timeStep) final
Integrates the time-dependent parameters of the contact force.
Definition: Interaction.h:277
Mdouble getElasticEnergyAtEquilibrium(Mdouble adhesiveForce) const
returns the overlap at which the repulsive elastic force equals a given adhesive force; to be impleme...
Definition: Interaction.h:325
void actionsAfterTimeStep()
Definition: Interaction.h:313
void write(std::ostream &os) const final
Writes Interaction properties to a file.
Definition: Interaction.h:217
virtual ~Interaction()
The default destructor.
Definition: Interaction.h:194
This class contains all information and functions required for communication between processors.
Definition: MpiContainer.h:109
static MPIContainer & Instance()
fetch the instance to be used for communication
Definition: MpiContainer.h:113
void createMercuryMPIType(T t, MercuryMPIType type)
Get the communicator used for MPI commands.
Definition: MpiContainer.h:543
Definition: MPIInteraction.h:27
bool isWallInteraction
Definition: MPIInteraction.h:34
unsigned int P
Definition: MPIInteraction.h:31
unsigned timeStamp
Definition: MPIInteraction.h:35
void copyToInteraction(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction, const bool resetPointers)
Definition: MPIInteraction.h:342
void copyFromInteraction(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:309
unsigned int I
Definition: MPIInteraction.h:32
Implementation of a 3D matrix.
Definition: Kernel/Math/Matrix.h:17
Contains material and contact force properties.
Definition: Species.h:14
#define I
Definition: main.h:127
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< dt !=data_source::global_mem, void > write(PacketType &packet_data, DataScalar ptr)
write, a template function used for storing the data to local memory. This function is used to guaran...
Definition: TensorContractionSycl.h:221
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< PacketLoad, PacketType > read(const TensorMapper &tensorMapper, const StorageIndex &NCIndex, const StorageIndex &CIndex, const StorageIndex &ld)
read, a template function used for loading the data from global memory. This function is used to guar...
Definition: TensorContractionSycl.h:162
std::array< T, N > array
Definition: EmulateArray.h:231
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286