changa 3.5
Loading...
Searching...
No Matches
collision.h
1#ifndef COLLISION_HINCLUDED
2#define COLLISION_HINCLUDED
3
4#include <float.h>
5
7class ColliderInfo {
8public:
9 Vector3D<double> position;
10 Vector3D<double> velocity;
11 Vector3D<double> acceleration;
12 Vector3D<double> w;
13 double mass;
14 double dtCol;
15 double radius;
16 int64_t iOrder;
17 int64_t iOrderCol;
18 int rung;
19 /* If true, this collider is flagged for deletion and will merge with
20 its more massive partner */
21 int bMergerDelete;
22 ColliderInfo() {
23 dtCol = DBL_MAX;
24 iOrderCol = -1;
25 bMergerDelete = 0;
26 }
27 void pup(PUP::er &p) {
28 p | position;
29 p | velocity;
30 p | acceleration;
31 p | w;
32 p | mass;
33 p | dtCol;
34 p | radius;
35 p | iOrder;
36 p | iOrderCol;
37 p | rung;
38 p | bMergerDelete;
39 }
40};
41
43class Collision {
44public:
45 double dBallFac; /* scale factor for collision search radius */
46 double dRadInf; /* inflation factor for particle radius, used for calculating v_crit */
47 double dAlphaColl; /* multiplier for critical velocity when using Takashi collision model */
48 int bCollStep; /* near-colliding particles placed on iCollStepRung */
49 int iCollStepRung; /* rung to place nearly-colliding particles on*/
50 double dCollStepFac; /* inflation factor for particle radius when searching for near-collisions*/
51 int bLogOverlaps; /* check for overlaps between particles and print to a file */
52 int bWall; /* particles will bounce off a wall in the z plane */
53 double dWallPos; /* location of wall along z axis */
54 int iCollModel; /* collision model to use, 0 = merge only, 1 = bounce only, 2 = merge/bounce v_esc,
55 3 = merge/bounce Takashi21, 4 = merge/bounce Canup95 */
56 int iMRCollMin; /* ignore multi-rung collisions before this step number */
57 double dEpsN, dEpsT; /* normal and transverse coefficients of restitution */
58 int bDelEjected; /* delete particles if they travel too far from the origin */
59 double dDelDist; /* max distance from origin before particles are deleted */
60 int bSkipP0; /* Don't do a collision check for the first particle */
62 std::vector<std::string> collBuffer;
63
64 void AddParams(PRM prm);
65 void CheckParams(PRM prm, struct parameters &param);
66 int doCollision(GravityParticle* p, const ColliderInfo &c, double dCentMass);
67 void doMerger(GravityParticle* p, const ColliderInfo &c);
68 void doBounce(GravityParticle* p, const ColliderInfo &c);
69 int doMergeOrBounce(GravityParticle* p, const ColliderInfo &c);
70 int doTakashi(GravityParticle* p, const ColliderInfo &c);
71 int doTidalAcc(GravityParticle *p, const ColliderInfo &c, double dCentMass);
72 GravityParticle* makeFragment();
73 int checkMerger(const ColliderInfo &c1, const ColliderInfo &c2);
74 double LastKickTime(int rung, double baseTime, double timeNow);
75 void setMergerRung(GravityParticle *p, const ColliderInfo &c, const ColliderInfo &cMerge,
76 double baseStep, double timeNow);
77 void doWallCollision(GravityParticle *p);
78 void mergeCalc(double r, double m, Vector3D<double> pos,
79 Vector3D<double> vel, Vector3D<double> acc,
80 Vector3D<double> w, Vector3D<double> *posNew,
81 Vector3D<double> *velNew, Vector3D<double> *wNew,
82 Vector3D<double> *aNew, double *radNew, const ColliderInfo &c);
83 void bounceCalc(double r, double m, Vector3D<double> pos,
84 Vector3D<double> vel, Vector3D<double> w,
85 Vector3D<double> *velNew, Vector3D<double> *wNew,
86 const ColliderInfo &c);
87 Collision() {}
88 inline void pup(PUP::er &p);
89 };
90
91inline void Collision::pup(PUP::er &p) {
92 p | bCollStep;
93 p | bLogOverlaps;
94 p | iCollStepRung;
95 p | dCollStepFac;
96 p | bWall;
97 p | iCollModel;
98 p | iMRCollMin;
99 p | dBallFac;
100 p | dWallPos;
101 p | dEpsN;
102 p | dEpsT;
103 p | bSkipP0;
104 p | bDelEjected;
105 p | dDelDist;
106 p | dRadInf;
107 p | dRadInf;
108 p | dAlphaColl;
109 }
110
111#include "smoothparams.h"
112
116
117class CollisionSmoothParams : public SmoothParams
118{
119 int bWall;
120 int iCollModel;
121 int bNearCollSearch;
122 double dWallPos;
123 double dTime, dDelta;
124 Collision coll;
125 virtual void fcnSmooth(GravityParticle *p, int nSmooth,
126 pqSmoothNode *nList);
127 virtual int isSmoothActive(GravityParticle *p);
128 virtual void initSmoothParticle(GravityParticle *p);
129 virtual void initTreeParticle(GravityParticle *p) {}
130 virtual void postTreeParticle(GravityParticle *p) {}
131 virtual void initSmoothCache(GravityParticle *p);
132 virtual void combSmoothCache(GravityParticle *p1,
134public:
135 CollisionSmoothParams() {}
136 CollisionSmoothParams(int _iType, int am, double _dTime, double _dDelta,
137 int _bWall, double _dWallPos, int _iCollModel,
138 int _bNearCollSearch, Collision _coll) {
139 coll = _coll;
140 iType = _iType;
141 activeRung = am;
142 bUseBallMax = 0;
143 dTime = _dTime;
144 dDelta = _dDelta;
145 bWall = _bWall;
146 dWallPos = _dWallPos;
147 iCollModel = _iCollModel;
148 bNearCollSearch = _bNearCollSearch;
149 }
150 PUPable_decl(CollisionSmoothParams);
151 CollisionSmoothParams(CkMigrateMessage *m) : SmoothParams(m) {}
152 virtual void pup(PUP::er &p) {
154 p | coll;
155 p | activeRung;
156 p | dDelta;
157 p | dTime;
158 p | bWall;
159 p | iCollModel;
160 p | dWallPos;
161 p | bNearCollSearch;
162 }
163 };
164
165#endif
Used to pass information about collision partners between processes.
Definition collision.h:7
virtual void pup(PUP::er &p)
required method for remote entry call.
Definition collision.h:152
Collision parameters and routines.
Definition collision.h:43
std::vector< std::string > collBuffer
Buffer to write collision events to log file.
Definition collision.h:62
Class for cross processor data needed for smooth operations.
Definition GravityParticle.h:649
Fundamental type for a particle.
Definition GravityParticle.h:364
int iType
Particle type to smooth over; "TreeActive".
Definition smoothparams.h:11
virtual void pup(PUP::er &p)
required method for remote entry call.
Definition smoothparams.h:45
int activeRung
Currently active rung.
Definition smoothparams.h:12
int bUseBallMax
Definition smoothparams.h:14
Object for priority queue entry.
Definition smooth.h:13
Hold parameters of the run.
Definition parameters.h:15