Loading [MathJax]/extensions/tex2jax.js
MAIA bb96820c
Multiphysics at AIA
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
lptcollision.h
Go to the documentation of this file.
1// Copyright (C) 2024 The m-AIA AUTHORS
2//
3// This file is part of m-AIA (https://git.rwth-aachen.de/aia/m-AIA/m-AIA)
4//
5// SPDX-License-Identifier: LGPL-3.0-only
6
7#ifndef MAIA_PARTICLECOLLISION_H
8#define MAIA_PARTICLECOLLISION_H
9
10#include <vector>
12#include "INCLUDE/maiatypes.h"
13#include "lptcollisiondata.h"
14#include "lptlib.h"
15template <MInt nDim>
17 private:
19 friend class LPT<nDim>;
22
23 public:
24 ParticleCollision(LPT<nDim>* lptSolver, MInt collisionModel, const MInt solverId, const MInt domainId,
25 const MInt noDomains, const MPI_Comm comm);
26
27 void init();
28
29 void detectPartColl(std::vector<LPTSpherical<nDim>>& partList, std::vector<LPTEllipsoidal<nDim>>& partListEllipsoid,
30 const MFloat timeStep, const MFloat time);
31
33
34 void writeCollData();
35
36 private:
38
39 LPT<nDim>* m_lpt = nullptr;
40
44 MPI_Comm m_mpiComm;
45
46 MInt domainId() const { return m_domainId; }
47 MInt solverId() const { return m_solverId; }
48 MInt noDomains() const { return m_noDomains; }
49 MPI_Comm mpiComm() const { return m_mpiComm; }
50
51 std::list<collStruct<nDim>> collList;
52
57
60
62 MFloat m_offset = -1000.0;
66
68
70
72
74
76
78
80
82
84
86
87 void createMatrix_CCD(const MFloat (&MA)[16], const MFloat (&u1)[3], const MFloat (&invMB)[16], const MFloat (&u2)[3],
88 const MFloat& a_2, const MFloat& c_2, MFloat (&n)[16], MFloat (&m)[5]);
89
90 MFloat checkStaticOverlap_CCD(const MFloat (&b_Matrix)[16], const MFloat (&A)[16], const MFloat (&m)[5],
91 const MFloat& detMinusB, MFloat& t1);
92
93 MBool checkCSI_CCD(const MFloat (&A)[16], const MFloat (&b_Matrix)[16], const MFloat (&m)[5], const MFloat& detMinusB,
94 MFloat& t1, MFloat& t2, MFloat& positive1, MFloat& positive2, MInt& iteration);
95
96 MFloat testU_CCD(const MFloat& u, const MFloat& t4, const MFloat& t3, const MFloat& t2, const MFloat& t1,
97 const MFloat& t0);
98
99 MFloat checkDynamicOverlap_CCD(const MFloat (&n)[16], const MFloat (&m)[5], MFloat t1, MFloat t2);
100
101 void writeCollEvent(MFloat collisionTime, MInt particle0, MInt particle1, MFloat diam0, MFloat diam1, MFloat dens0,
102 MFloat dens1, MFloat relVel, MFloat meanVel, MFloat* x);
103
104 // structure for collision queue element and collision queue, used to save collision datas
105 // for collective writing into a Netcdf file.
106
120 };
121
122 std::queue<collQueueElem> collQueue;
123
137 };
138
139 std::queue<collQueueElemEllipsoid> collQueueEllipsoid;
140};
141
142template <MInt nDim>
144 public:
145 explicit compareParticleIds(typename std::vector<LPTSpherical<nDim>>::const_iterator aPartId) : partId(aPartId) {}
146
148 return ((obj.returnParticle0() == partId) || (obj.returnParticle1() == partId));
149 }
150
151 private:
152 typename std::vector<LPTSpherical<nDim>>::const_iterator partId;
153};
154
155#endif // MAIA_PARTICLECOLLISION_H
Definition: lpt.h:82
maia::lpt::subDomainCollectorEllipsoid< nDim > * subDomainContentEllipsoid
Definition: lptcollision.h:59
void collisionCheckEECCD(lptEllipticleI, lptEllipticleI)
checks continuously for the overlaps of the two ellipsoids i2 and i3 assuming that they do not rotate...
MInt solverId() const
Definition: lptcollision.h:47
MFloat checkBndryCross(MInt, lptParticleI, MFloat)
Checks crossing of boundary surface of the boundary cell.
LPT< nDim > * m_lpt
Definition: lptcollision.h:39
void collisionCheckSphereEllipsoid(lptParticleI, lptEllipticleI)
Collision check for ellipsoids i2 and i3 calls the corresponding proactive or retroactive method.
void collisionCheckEEProActive(lptEllipticleI, lptEllipticleI)
Collision check for ellipsoids i2 and i3 checks and stores collision event this method works proactiv...
void detectPartColl(std::vector< LPTSpherical< nDim > > &partList, std::vector< LPTEllipsoidal< nDim > > &partListEllipsoid, const MFloat timeStep, const MFloat time)
Disables the following warnings with gcc: -Warray-bounds.
MInt domainId() const
Definition: lptcollision.h:46
void writeCollData()
write collision data queue to Netcdf file (using parallel output)
void collisionCheckSECCD(lptParticleI, lptEllipticleI)
checks continuously for the overlaps of the sphere i2 and the ellipsoid i3 assuming that they do not ...
typename maia::lpt::ellipsListIteratorConst< nDim > lptEllipticleI
Definition: lptcollision.h:21
void collisionCheckSEP(lptParticleI, lptEllipticleI)
Collision check for sphere i1 and ellipsoid i2, specialized version of ellips ellips checks and store...
MFloat collisionCheck(lptParticleI, lptParticleI, MFloat)
Checks whether particles i and j collide after currCollTime, and returns collision time.
MFloat m_subDomainSize[3]
Definition: lptcollision.h:55
MPI_Comm mpiComm() const
Definition: lptcollision.h:49
std::queue< collQueueElem > collQueue
Definition: lptcollision.h:122
MPI_Comm m_mpiComm
Definition: lptcollision.h:44
void collisionCheckEERetroActive(lptEllipticleI, lptEllipticleI)
Collision check for ellipsoids i2 and i3 based on overlap criterion, and store collision event when f...
maia::lpt::subDomainCollector< nDim > * subDomainContent
Definition: lptcollision.h:58
void createMatrix_CCD(const MFloat(&MA)[16], const MFloat(&u1)[3], const MFloat(&invMB)[16], const MFloat(&u2)[3], const MFloat &a_2, const MFloat &c_2, MFloat(&n)[16], MFloat(&m)[5])
calculates M_A^T*(M_B^(-1))^T*B*(M_B^(-1))*M_A, write it the part independent of t in n and the other...
typename maia::grid::Proxy< nDim > GridProxy
Definition: lptcollision.h:18
MFloat testU_CCD(const MFloat &u, const MFloat &t4, const MFloat &t3, const MFloat &t2, const MFloat &t1, const MFloat &t0)
calculates the value of the forth order polynomial and returns it if positive other returns -1
typename maia::lpt::partListIteratorConst< nDim > lptParticleI
Definition: lptcollision.h:20
MInt m_noOfSubDomains[3]
Definition: lptcollision.h:53
std::queue< collQueueElemEllipsoid > collQueueEllipsoid
Definition: lptcollision.h:139
void collisionCheckEllipsoidEllipsoid(lptEllipticleI, lptEllipticleI)
Collision check for ellipsoids i2 and i3 calls the corresponding proactive or retroactive method.
void collisionCheckSERetroActive(lptParticleI, lptEllipticleI)
Collision check for sphere i1 and ellipsoid i2 based on overlap criterion, and store collision event ...
std::list< collStruct< nDim > > collList
Definition: lptcollision.h:51
void writeCollEvent(MFloat collisionTime, MInt particle0, MInt particle1, MFloat diam0, MFloat diam1, MFloat dens0, MFloat dens1, MFloat relVel, MFloat meanVel, MFloat *x)
Add collision data to queue which is to be written.
MFloat checkStaticOverlap_CCD(const MFloat(&b_Matrix)[16], const MFloat(&A)[16], const MFloat(&m)[5], const MFloat &detMinusB, MFloat &t1)
calculates if there is a local maximum of det(A*(u-1)-u*B) in u for a fixed value of t and if the val...
void init()
Initialisation of collision model.
MFloat checkDynamicOverlap_CCD(const MFloat(&n)[16], const MFloat(&m)[5], MFloat t1, MFloat t2)
Performes BezierShot from "side", returns the first zero-crossing results in finding the roots of the...
MInt noDomains() const
Definition: lptcollision.h:48
MBool checkCSI_CCD(const MFloat(&A)[16], const MFloat(&b_Matrix)[16], const MFloat(&m)[5], const MFloat &detMinusB, MFloat &t1, MFloat &t2, MFloat &positive1, MFloat &positive2, MInt &iteration)
checks recursively if the ellipsoids are separated by subdividing the time intervals in smaller CSIs....
MFloat m_subDomainCoordOffset[3]
Definition: lptcollision.h:54
MBool m_includeEllipsoids
Definition: lptcollision.h:64
std::vector< LPTSpherical< nDim > >::iterator returnParticle1() const
std::vector< LPTSpherical< nDim > >::iterator returnParticle0() const
std::vector< LPTSpherical< nDim > >::const_iterator partId
Definition: lptcollision.h:152
MBool operator()(const collStruct< nDim > &obj)
Definition: lptcollision.h:147
compareParticleIds(typename std::vector< LPTSpherical< nDim > >::const_iterator aPartId)
Definition: lptcollision.h:145
int32_t MInt
Definition: maiatypes.h:62
double MFloat
Definition: maiatypes.h:52
bool MBool
Definition: maiatypes.h:58
typename std::vector< LPTSpherical< nDim > >::const_iterator partListIteratorConst
Definition: lptlib.h:37
typename std::vector< LPTEllipsoidal< nDim > >::const_iterator ellipsListIteratorConst
Definition: lptlib.h:32