-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdomain.h
179 lines (131 loc) · 4.61 KB
/
domain.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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
//----------------------------------------------------------------------------------||
//------------------- domain.h -------------------||
//----------------------------------------------------------------------------------||
// ||
// __ ___ _ _ ____ ____ ___ ____ ||
// \ \ / / \ | \ | | _ \ | _ \_ _/ ___| ||
// \ \ /\ / / _ \ | \| | | | |_____| |_) | | | ||
// \ V V / ___ \| |\ | |_| |_____| __/| | |___ ||
// \_/\_/_/ \_\_| \_|____/ |_| |___\____| ||
// ||
//----------------------------------------------------------------------------------||
//-- (W)akefield (A)cceleration a(n)d (D)LA - (P)article (i)n (C)ell Simulation --||
//----------------------------------------------------------------------------------||
//---Author----------- : Tianhong Wang --------------------||
//---Starting--------- : Jan-11-2019 --------------------||
//---Email------------ : [email protected] --------------------||
//---Group------------ : Dr. Gennady Shvets' Group --------------------||
//---Copyright-------- : (C) 2019 by Tianhong Wang --------------------||
//----------------------------------------------------------------------------------||
//----------------------------------------------------------------------------------||
#ifndef H_DOMAIN
#define H_DOMAIN
//=====include======//
#include <stdio.h>
#include <iostream>
#include <fstream>
#define PI 3.1415926536
//=====Domain class=====//
class Partition;
class Pulse;
class Mesh;
class Commute;
class MultiGrid;
class Specie;
class Domain : public NList{
public:
static Domain *p_Domain;
std::ofstream Rank_cout;
private:
//variables
WDOUBLE dx;
WDOUBLE dy;
WDOUBLE dz;
WDOUBLE dt;
// for variable mesh size
int MeshType;
WDOUBLE delta;
WDOUBLE dxRefine;
WDOUBLE radius0;
WDOUBLE order;
int Adap_dt;
int Ndt;
WDOUBLE Xmax;
WDOUBLE Ymax;
WDOUBLE Zmax;
int XGridN;
int YGridN;
int ZGridN;
WDOUBLE Tmax;
WDOUBLE OutDt;
WDOUBLE Time;
// int Tstep;
int savedim;
int Npulse;
int Nbeam;
int BC;
WDOUBLE Buffersize;
int IfRestart;
int trajorder;
int Rank;
int NSpecie;
int *SpecieType;
FILE *p_File;
Partition *p_MPP;
Pulse **pp_Pulses;
Specie **pp_Species;
Mesh *p_Meshes;
Commute *p_Comm;
MultiGrid *p_Multi;
public: // Public functions
int *ifAx;
int *ifAy;
WDOUBLE *OmegaL;
int NFreqs;
WDOUBLE Q1;
WDOUBLE Get_dx() {return dx;};
WDOUBLE Get_dy() {return dy;};
WDOUBLE Get_dz() {return dz;};
WDOUBLE Get_dt() {return dt;};
void set_new_dt(WDOUBLE newdt) {dt=newdt;};
int Get_SubCycle() {return Ndt;};
WDOUBLE Get_Xmax() {return Xmax;};
WDOUBLE Get_Ymax() {return Ymax;};
WDOUBLE Set_Xmax(WDOUBLE x) {return Xmax=x;};
WDOUBLE Set_Ymax(WDOUBLE y) {return Ymax=y;};
WDOUBLE Get_Zmax() {return Zmax;};
WDOUBLE Get_RunTime() {return Time;};
// int Get_Step() {return Tstep;};
int Get_BC() {return BC;}
WDOUBLE Get_Buffersize() {return Buffersize;}
int Get_Nbeam() {return Nbeam;};
// ========run===========
int RK1(WDOUBLE &k0, int &k);
int RK2(WDOUBLE &k0, int &k);
int Boris(WDOUBLE &k0, int &k);
int PushWakeFields(WDOUBLE k0, int k);
int PushWakeFieldsE(WDOUBLE k0, int k);
int PushWakeFieldsEz(WDOUBLE k0, int k);
int PushWakeFieldsB(WDOUBLE k0, int k);
int PushPulses(int k, int NF);
void Run();
Partition *p_Partition() {return p_MPP;};
Mesh *p_Mesh() {return p_Meshes;};
MultiGrid *p_MG() {return p_Multi;};
Pulse **GetPulses(void) {return pp_Pulses;};
Commute *p_Com() {return p_Comm;}
int Save(int nt);
int Save2D(int nt, int savedim, bool part);
int SaveP(int nt);
int SaveT(int nt, int k);
int SaveXray(int nt);
int LoadPulse(int nt);
int LoadParti(int nt);
void AddSpecie(int P_type);
int Get_NSpecie(int SpecieType);
WDOUBLE CustomGrid(WDOUBLE r);
//=====constructor-destructor=====//
Domain(char *infile, int rank);
~Domain();
};
#endif