-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlcs.h
158 lines (121 loc) · 3.54 KB
/
lcs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/**********************************************
File : lcs.h
Author : Mingcheng Chen
Last Update : December 22nd, 2012
***********************************************/
#ifndef __LCS_H
#define __LCS_H
#include "lcsGeometry.h"
namespace lcs {
class Frame {
public:
Frame(double timePoint, const char *dataFile);
Frame(double timePoint, const char *geometryFile, const char *velocityFile);
~Frame();
TetrahedralGrid *GetTetrahedralGrid() const {
return tetrahedralGrid;
}
double GetTimePoint() const {
return timePoint;
}
private:
TetrahedralGrid *tetrahedralGrid;
double timePoint;
};
class ParticleRecord {
public:
static const int FE = 0;
static const int RK4 = 1;
static const int RK45 = 2;
ParticleRecord();
ParticleRecord(int stage, int gridPointID, void *data);
~ParticleRecord();
static void SetDataType(int type);
static int GetDataType();
lcs::Vector GetPositionInInterest() const;
int GetStage() const;
int GetGridPointID() const;
void *GetData() const;
void SetStage(int stage);
private:
static int dataType;
int stage; // It may be used for sorting in order to reduce GPU thread divergency in a warp.
int gridPointID;
void *data;
};
class ParticleRecordDataForRK4 {
public:
static const int COMPUTING_K1 = 0;
static const int COMPUTING_K2 = 1;
static const int COMPUTING_K3 = 2;
static const int COMPUTING_K4 = 3;
void SetLastPosition(const lcs::Vector &lastPosition);
void SetK1(const lcs::Vector &k1);
void SetK2(const lcs::Vector &k2);
void SetK3(const lcs::Vector &k3);
void SetLastPosition(const double *);
void SetK1(const double *);
void SetK2(const double *);
void SetK3(const double *);
void SetLastPosition(const float *);
void SetK1(const float *);
void SetK2(const float *);
void SetK3(const float *);
lcs::Vector GetLastPosition() const;
lcs::Vector GetK1() const;
lcs::Vector GetK2() const;
lcs::Vector GetK3() const;
private:
lcs::Vector lastPosition, k1, k2, k3;
};
class BlockRecord {
public:
BlockRecord();
~BlockRecord();
int GetLocalNumOfCells() const;
int GetLocalNumOfPoints() const;
void SetLocalNumOfCells(int localNumOfCells);
void SetLocalNumOfPoints(int localNumOfPoints);
void CreateGlobalCellIDs(int *cellIDs);
void CreateGlobalPointIDs(int *pointIDs);
void CreateLocalConnectivities(int *connectivities);
void CreateLocalLinks(int *links);
int EvaluateNumOfBytes() const;
int GetGlobalCellID(int localCellID) const;
int GetGlobalPointID(int localPointID) const;
int *GetGlobalCellIDs() const;
int *GetGlobalPointIDs() const;
int *GetLocalConnectivities() const;
int *GetLocalLinks() const;
private:
int *globalCellIDs, *globalPointIDs;
int *localConnectivities, *localLinks;
int localNumOfCells, localNumOfPoints;
};
class BlockTetrahedronPair {
public:
BlockTetrahedronPair(int blockID, int tetrahedronID);
int GetBlockID() const;
int GetTetrahedronID() const;
bool operator == (const BlockTetrahedronPair &anotherPair) const;
private:
int blockID, tetrahedronID;
};
class HashForBlockTetrahedronPair {
public:
int operator () (const lcs::BlockTetrahedronPair &btPair) const;
};
class ExecutionBlock {
public:
ExecutionBlock();
~ExecutionBlock();
void SetNumOfParticles(int numOfParticles);
void SetParticleID(int index, int particleID);
void SetBlockRecord(const lcs::BlockRecord *blockRecord);
private:
int *particleIDs;
const lcs::BlockRecord *blockRecord;
int numOfParticles;
};
}
#endif