5 #ifndef MPIINTERACTION_H
6 #define MPIINTERACTION_H
18 template<
class NormalForceSpecies,
class FrictionForceSpecies,
class AdhesiveForceSpecies>
25 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
40 typename std::conditional<
46 typename std::conditional<
50 typename std::conditional<
55 typename std::conditional<
63 typename std::conditional<
68 typename std::conditional<
73 typename std::conditional<
82 const bool resetPointers);
85 template<
class DUMMY= FrictionForceInteraction>
90 slidingSpring = interaction->FrictionForceInteraction::getSlidingSpring();
94 template<
class DUMMY= FrictionForceInteraction>
99 interaction->FrictionForceInteraction::setSlidingSpring(
slidingSpring);
103 template<
class DUMMY = FrictionForceInteraction>
111 template<
class DUMMY = FrictionForceInteraction>
120 template<
class DUMMY= FrictionForceInteraction>
125 rollingSpring = interaction->FrictionForceInteraction::getRollingSpring();
126 torsionSpring = interaction->FrictionForceInteraction::getTorsionSpring();
130 template<
class DUMMY= FrictionForceInteraction>
135 interaction->FrictionForceInteraction::setRollingSpring(
rollingSpring);
136 interaction->FrictionForceInteraction::setTorsionSpring(
torsionSpring);
140 template<
class DUMMY = FrictionForceInteraction>
148 template<
class DUMMY = FrictionForceInteraction>
156 template<
class DUMMY = AdhesiveForceInteraction>
157 typename std::enable_if<(
164 wasInContact = interaction->AdhesiveForceInteraction::getWasInContact();
168 template<
class DUMMY = AdhesiveForceInteraction>
169 typename std::enable_if<(
176 interaction->AdhesiveForceInteraction::setWasInContact(
wasInContact);
180 template<
class DUMMY = AdhesiveForceInteraction>
181 typename std::enable_if<!(
191 template<
class DUMMY = AdhesiveForceInteraction>
192 typename std::enable_if<!(
202 template<
class DUMMY = AdhesiveForceInteraction>
207 bonded = interaction->AdhesiveForceInteraction::getBonded();
211 template<
class DUMMY = AdhesiveForceInteraction>
215 interaction->AdhesiveForceInteraction::setBonded(
bonded);
219 template<
class DUMMY = AdhesiveForceInteraction>
227 template<
class DUMMY = AdhesiveForceInteraction>
234 template<
class DUMMY = AdhesiveForceInteraction>
243 template<
class DUMMY = AdhesiveForceInteraction>
252 template<
class DUMMY = AdhesiveForceInteraction>
260 template<
class DUMMY = AdhesiveForceInteraction>
268 template<
class DUMMY = NormalForceInteraction>
273 maxOverlap = interaction->NormalForceInteraction::getMaxOverlap();
277 template<
class DUMMY = NormalForceInteraction>
282 interaction->NormalForceInteraction::setMaxOverlap(
maxOverlap);
286 template<
class DUMMY = NormalForceInteraction>
294 template<
class DUMMY = NormalForceInteraction>
303 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
308 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
315 if (interaction->
getP() ==
nullptr)
logger(
WARN,
"P is not defined!!");
316 if (interaction->
getI() ==
nullptr)
logger(
WARN,
"I is not defined!!");
322 isWallInteraction =
true;
326 isWallInteraction =
false;
332 getSlidingSpring(interaction);
333 getFrictionSprings(interaction);
334 getWasInContact(interaction);
335 getBonded(interaction);
336 getLiquidBridge(interaction);
337 getMaximumOverlap(interaction);
341 template<
class NormalForceInteraction,
class FrictionForceInteraction,
class AdhesiveForceInteraction>
344 const bool resetPointers)
351 setSlidingSpring(interaction);
352 setFrictionSprings(interaction);
353 setWasInContact(interaction);
354 setBonded(interaction);
355 setLiquidBridge(interaction);
356 setMaximumOverlap(interaction);
double Mdouble
Definition: GeneralDefine.h:13
Logger< MERCURYDPM_LOGLEVEL > logger("MercuryKernel")
Definition of different loggers with certain modules. A user can define its own custom logger here.
LL< Log::WARN > WARN
Warning log level.
Definition: Logger.cc:33
Stores information about interactions between two interactable objects; often particles but could be ...
Definition: BaseInteraction.h:39
void setBasicMPIInteractionValues(int P, int I, unsigned timeStamp, Vec3D force, Vec3D torque, bool isWallInteraction, bool resetPointers)
Definition: BaseInteraction.cc:944
const Vec3D & getForce() const
Gets the current force (vector) between the two interacting objects.
Definition: BaseInteraction.h:189
const Vec3D & getTorque() const
Gets the current torque (vector) between the two interacting objects.
Definition: BaseInteraction.h:197
Mdouble getTimeStamp() const
Returns an Mdouble which is the time stamp of the interaction.
Definition: BaseInteraction.h:298
BaseInteractable * getI()
Returns a pointer to the second object involved in the interaction (often a wall or a particle).
Definition: BaseInteraction.h:264
BaseInteractable * getP()
Returns a pointer to first object involved in the interaction (normally a particle).
Definition: BaseInteraction.h:253
unsigned int getId() const
Returns the unique identifier of any particular object.
Definition: BaseObject.h:104
Definition: BaseParticle.h:33
Data class to send an empty class over MPI.
Definition: MpiDataClass.h:110
Contains information about the contact between two interactables, BaseInteraction::P_ and BaseInterac...
Definition: Interaction.h:95
Definition: MPIInteraction.h:27
bool isWallInteraction
Definition: MPIInteraction.h:34
unsigned int P
Definition: MPIInteraction.h:31
std::enable_if<(std::is_base_of< BondedInteraction, DUMMY >::value), void >::type getBonded(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:204
std::enable_if< std::is_base_of< FrictionInteraction, DUMMY >::value, void >::type getFrictionSprings(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:122
unsigned timeStamp
Definition: MPIInteraction.h:35
Vec3D torque
Definition: MPIInteraction.h:37
std::enable_if<(std::is_base_of< LinearPlasticViscoelasticInteraction, DUMMY >::value), void >::type setMaximumOverlap(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:279
std::enable_if< std::is_base_of< SlidingFrictionInteraction, DUMMY >::value, void >::type setSlidingSpring(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:96
void copyToInteraction(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction, const bool resetPointers)
Definition: MPIInteraction.h:342
std::enable_if<(std::is_base_of< BondedInteraction, DUMMY >::value), void >::type setBonded(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:213
std::enable_if<(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value||std::is_base_of< LiquidBridgeWilletInteraction, DUMMY >::value||std::is_base_of< IrreversibleAdhesiveInteraction, DUMMY >::value), void >::type setWasInContact(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:173
std::enable_if<!(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value), void >::type getLiquidBridge(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:254
std::conditional< std::is_base_of< FrictionInteraction, FrictionForceInteraction >::value, Vec3D, Empty >::type rollingSpring
Definition: MPIInteraction.h:48
std::enable_if<(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value), void >::type setLiquidBridge(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:245
Vec3D force
Definition: MPIInteraction.h:36
std::enable_if<!(std::is_base_of< LinearPlasticViscoelasticInteraction, DUMMY >::value), void >::type getMaximumOverlap(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:288
std::enable_if<!(std::is_base_of< FrictionInteraction, DUMMY >::value), void >::type getFrictionSprings(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:142
std::enable_if<!(std::is_base_of< LinearPlasticViscoelasticInteraction, DUMMY >::value), void >::type setMaximumOverlap(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:296
std::enable_if<!(std::is_base_of< FrictionInteraction, DUMMY >::value), void >::type setFrictionSprings(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:150
std::conditional< std::is_base_of< FrictionInteraction, FrictionForceInteraction >::value, Vec3D, Empty >::type torsionSpring
Definition: MPIInteraction.h:52
std::enable_if<!(std::is_base_of< SlidingFrictionInteraction, DUMMY >::value), void >::type getSlidingSpring(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:105
std::conditional< std::is_base_of< SlidingFrictionInteraction, FrictionForceInteraction >::value, Vec3D, Empty >::type slidingSpring
Definition: MPIInteraction.h:43
std::conditional< std::is_base_of< BondedInteraction, AdhesiveForceInteraction >::value, bool, Empty >::type bonded
Definition: MPIInteraction.h:65
std::conditional<(std::is_base_of< LiquidMigrationWilletInteraction, AdhesiveForceInteraction >::value||std::is_base_of< LiquidBridgeWilletInteraction, AdhesiveForceInteraction >::value||std::is_base_of< IrreversibleAdhesiveInteraction, AdhesiveForceInteraction >::value), bool, Empty >::type wasInContact
Definition: MPIInteraction.h:60
void copyFromInteraction(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:309
std::enable_if<!(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value||std::is_base_of< LiquidBridgeWilletInteraction, DUMMY >::value||std::is_base_of< IrreversibleAdhesiveInteraction, DUMMY >::value), void >::type getWasInContact(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:185
unsigned int speciesId
Definition: MPIInteraction.h:33
std::enable_if< std::is_base_of< SlidingFrictionInteraction, DUMMY >::value, void >::type getSlidingSpring(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:87
std::conditional< std::is_base_of< LinearPlasticViscoelasticInteraction, NormalForceInteraction >::value, Mdouble, Empty >::type maxOverlap
Definition: MPIInteraction.h:75
std::enable_if<(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value||std::is_base_of< LiquidBridgeWilletInteraction, DUMMY >::value||std::is_base_of< IrreversibleAdhesiveInteraction, DUMMY >::value), void >::type getWasInContact(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:161
std::enable_if<(std::is_base_of< LinearPlasticViscoelasticInteraction, DUMMY >::value), void >::type getMaximumOverlap(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:270
std::enable_if<!(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value), void >::type setLiquidBridge(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:262
std::enable_if< std::is_base_of< FrictionInteraction, DUMMY >::value, void >::type setFrictionSprings(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:132
std::enable_if<!(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value||std::is_base_of< LiquidBridgeWilletInteraction, DUMMY >::value||std::is_base_of< IrreversibleAdhesiveInteraction, DUMMY >::value), void >::type setWasInContact(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:196
unsigned int I
Definition: MPIInteraction.h:32
std::enable_if<(std::is_base_of< LiquidMigrationWilletInteraction, DUMMY >::value), void >::type getLiquidBridge(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:236
std::enable_if<!(std::is_base_of< BondedInteraction, DUMMY >::value), void >::type getBonded(const Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:221
MPIInteraction()
Definition: MPIInteraction.h:304
std::enable_if<!(std::is_base_of< SlidingFrictionInteraction, DUMMY >::value), void >::type setSlidingSpring(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:113
std::conditional< std::is_base_of< LiquidMigrationWilletInteraction, AdhesiveForceInteraction >::value, Mdouble, Empty >::type liquidbridgeVolume
Definition: MPIInteraction.h:70
std::enable_if<!(std::is_base_of< BondedInteraction, DUMMY >::value), void >::type setBonded(Interaction< NormalForceInteraction, FrictionForceInteraction, AdhesiveForceInteraction > *interaction)
Definition: MPIInteraction.h:229
Definition: Kernel/Math/Vector.h:30
#define I
Definition: main.h:127
squared absolute value
Definition: GlobalFunctions.h:87
double P
Uniform pressure.
Definition: TwenteMeshGluing.cpp:77
type
Definition: compute_granudrum_aor.py:141