-
Notifications
You must be signed in to change notification settings - Fork 0
/
CFluidOpt.h
66 lines (53 loc) · 1.27 KB
/
CFluidOpt.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
#ifndef CFLUIDOPT_H_
#define CFLUIDOP_H_
#include <stdio.h>
#include <algorithm>
class CFluidOpt
{
private:
float *data;
int N, size;
float h;
void SwapU();
void SwapV();
void SwapDens();
void SetBnd(int b, float * x);
void AddSource(float * x, float * s, float dt);
void Diffuse(int b, float * x, float * x0, float diff, float dt);
void Project(float * u, float * v, float * p, float * div);
void Advect(int b, float * d, float * d0, float * u, float * v, float dt);
public:
float *u, *v, *u_prev, *v_prev;
float *dens, *dens_prev;
CFluidOpt(int N)
{
this->N = N;
size = (N+2)*(N+2);
h = 1.0/N;
data = new float[size*6];
u = data;
v = data + size;
u_prev = data + 2*size;
v_prev = data + 3*size;
dens = data + 4*size;
dens_prev = data + 5*size;
}
~CFluidOpt()
{
delete [] data;
u = v = u_prev = v_prev = dens = dens_prev = NULL;
}
int GetN()
{
return N;
}
int IX(int i, int j)
{
return i+(N+2)*j;
}
void AddBlow(int x, int y);
void AddGas(int x, int y, int r);
void VelStep (float visc, float dt);
void DensStep(float diff, float dt);
};
#endif // CFLUIDOPT_H_