forked from martinjrobins/SPH-DEM
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetupSod.cpp
executable file
·99 lines (90 loc) · 2.52 KB
/
setupSod.cpp
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
#include "constants.h"
#include "particle.h"
#include "io_data.h"
#include <vector>
#include <iostream>
int main() {
const double psep = 1.0/NX;
const double dr = 0.125; //density on the right
const double dl = 1.0; // density on the far left
const double gam1 = GAMMA-1.0;
const double psepr = psep;
const double psepl = psep*dr/dl;
const double xmin = -2.0;
const double xmax = 2.0;
const double xminstill = xmin+4*HFAC*psepr;
const double xmaxstill = xmax-4*HFAC*psepr;
const double ur = 0.1/(dr*gam1); // utherm on right
const double ul = 1.0/(dl*gam1); // utherm on left
const double al = 0.5*psepr;
const double pmref = dr*psepr;
cout << "adding first particle" << endl;
vector<Cparticle> ps;
Cparticle p;
cout << "adding first particle" << endl;
p.r[0] = xmin;
p.dens = dl;
p.mass = dr*psepr;
p.h = HFAC*psepl;
p.u = ul;
p.v[0] = 0.0;
p.alpha = 0.5;
p.iam = immovable;
p.colour = 2;
p.tag = 1;
cout << "adding first particle" << endl;
ps.push_back(p);
cout << "adding first particle" << endl;
cout << ps.size();
cout << "adding second particle" << endl;
cout << "adding second particle" << endl;
p.r[0] = xmin+psepl;
p.dens = dl;
p.mass = dr*psepr;
p.h = HFAC*psepl;
p.u = ul;
p.iam = immovable;
p.colour = 2;
p.v[0] = 0.0;
p.alpha = 0.5;
p.tag = 2;
cout << "adding second particle" << endl;
ps.push_back(p);
cout << "adding the rest" << endl;
while(ps.back().r[0] < xmax) {
cout << "there is currently " << ps.size() << "particles in the ps" << endl;
p.r[0] = ps[ps.size()-2].r[0] + 2.0*pmref/ps[ps.size()-1].dens;
cout << "added particle at x = " << p.r[0] << endl;
if ((p.r[0]<xminstill) || (p.r[0]>xmaxstill)) {
p.iam = immovable;
p.colour = 2;
} else {
p.iam = sph;
p.colour = 1;
}
double diff = p.r[0]/al;
if (diff<-10) {
p.dens = dl;
p.u = ul;
p.h = HFAC*psepl;
} else if (diff>10) {
p.dens = dr;
p.u = ur;
p.h = HFAC*psepr;
} else {
double exx = exp(diff);
p.dens = (dl + dr*exx)/(1+exx);
p.u = (ul + ur*exx)/(1.+exx);
p.h = HFAC*psep*dr/p.dens;
}
p.mass = dr*psepr;
p.v[0] = 0.0;
p.alpha = 0.5;
p.tag = ps.size()+1;
ps.push_back(p);
}
cout << "Total number of particles = " << ps.size() << endl;
Cio_data ioFile("ssod.vtk");
cout <<"boo"<<endl;
ioFile.write(1,ps);
}