BG_Flood  0.8
Documentation (Work-in-progress)
Arrays.h
Go to the documentation of this file.
1 
2 #ifndef ARRAYS_H
3 #define ARRAYS_H
4 
5 #include "General.h"
6 #include "Input.h"
7 
8 
9 template <class T>
10 struct GradientsP
11 {
12  T* dzsdx;
13  T* dhdx;
14  T* dudx;
15  T* dvdx;
16 
17  T* dzsdy;
18  T* dhdy;
19  T* dudy;
20  T* dvdy;
21 
22  T* dzbdx;
23  T* dzbdy;
24 };
25 
26 template <class T>
28 {
29 
30  T* dhdx;
31  T* dudx;
32  T* dvdx;
33 
34 
35  T* dhdy;
36  T* dudy;
37  T* dvdy;
38 };
39 
40 
41 template <class T>
42 struct EvolvingP
43 {
44  T* zs;
45  T* h;
46  T* u;
47  T* v;
48 };
49 
50 template <class T>
52 {
53  T* h;
54  T* u;
55  T* v;
56 };
57 
58 //subclass inheriting from EvolvingP for Mean/Max
59 template <class T>
60 struct EvolvingP_M : public EvolvingP<T>
61 {
62  T* U; //Norm of the velocity
63  T* hU; //h*sqrt(u^2+v^2)
64 };
65 
66 template <class T>
67 struct FluxP
68 {
69  T* Su,* Sv;
70  T* Fqux, * Fquy;
71  T* Fqvx, * Fqvy;
72  T* Fhu, * Fhv;
73 };
74 
75 template <class T>
76 struct FluxMLP
77 {
78  //
79  T* hu, * hv;
80  T* hfu, * hfv;
81  T* hau, * hav;
82  T* Fux, * Fvy;
83  T* Fuy, * Fvx;
84 
85 };
86 
87 template <class T>
88 struct AdvanceP
89 {
90  T* dh;
91  T* dhu;
92  T* dhv;
93 };
94 
95 
96 struct outP
97 {
98  float* z;
99  short* z_s;
100  int level;
101  double xmin, xmax, ymin, ymax;
102 };
103 
104 
105 struct maskinfo
106 {
107 
108  int nblk = 0; //number of blocks where this bnd applies
109 
110  int* blks; // array of block where bnd applies
111  // 8 digit binary where 1 is a mask and 0 is not a mask with the first digit represent the left bottom side the rest is clockwise (i.e.left-bot left-top, top-left, top-right, right-top, right-bot, bot-right, bot-left)
112  int* side; // e.g. 11000000 for the entire left side being a mask
113 
114  int type = 0;
115 
116 
117 };
118 
119 template <class T>
120 struct RiverInfo
121 {
122  int nbir;
123  int nburmax; // size of (max number of) unique block with rivers
124  int nribmax; // size of (max number of) rivers in one block
125  int* Xbidir; // array of block id for each river size(nburmax,nribmax)
126  int* Xridib; // array of river id in each block size(nburmax,nribmax)
127  T* xstart;
128  T* xend;
129  T* ystart;
130  T *yend;
131  T* qnow; // qnow is a pin mapped and so both pointers are needed here
132  T* qnow_g; // this simplify the code later
133 
134 };
135 
136 
137 // outzone info used to actually write the nc files (one nc file by zone, the default zone is the full domain)
138 struct outzoneB
139 {
140  int nblk; //number of blocks concerned
141  int* blk; // one zone will spread across multiple blocks (entire blocks containing a part of the area will be output)
142  double xo, xmax, yo, ymax; // Real zone for output (because we output full blocks)(corner of cells, as Xparam.xo)
143  std::string outname; // name for the output file (one for each zone)
144  int maxlevel; // maximum level in the zone
145  int minlevel; //minimum level in the zone
146  std::vector<double> OutputT; //Next time for the output of this zone
147  int index_next_OutputT = 0; //Index of next time output
148 };
149 
150 
151 template <class T>
152 struct BlockP
153 {
154  T* xo, *yo;
157  int* LeftBot, *LeftTop;
159 
160  int* level;
161  int* active; // active blocks
162  int* activeCell; //To apply forcings (rain) only on these
163 
165 
166  std::vector<outzoneB> outZone;
167 };
168 
169 
170 struct AdaptP
171 {
172  int *newlevel;
173  int *availblk, * csumblk;
174  int *invactive;
175  bool * coarsen, *refine;
176 
177 };
178 
179 
180 
181 template <class T>
182 struct BndblockP
183 {
185  int* river;
186  int* Tsout;
187  //int * DrainSink;
188  //int * DrainSource;
189  //int * Bridges;
190 
191  int* left;
192  int* right;
193  int* top;
194  int* bot;
195 
197 
198 
199 };
200 
201 struct RiverBlk
202 {
203  std::vector<int> block;
204 };
205 
206 
207 
208 
209 
210 template <class T>
211 struct TimeP
212 {
214  T dt;
215  T* dtmax;
217 };
218 
219 template <class T>
220 struct Model
221 {
224 
229 
230  //external forcing
231  T* zb;
232  T* cf;
233  T* il;
234  T* cl;
235 
236  //GroundWater elevation (due to the accumulation of water by infiltration during the simulation)
237  T* hgw;
238 
239  // Used for external forcing too
240  // May need a better placeholder
242 
244 
245 
246 
247  //
248  std::map<std::string, T *> OutputVarMap;
249  std::map<std::string, std::string> Outvarlongname;
250  std::map<std::string, std::string> Outvarstdname;
251  std::map<std::string, std::string> Outvarunits;
252  std::vector<double> OutputT;
253 
254  //other output
255  //std::vector< std::vector< Pointout > > TSallout;
256  T* TSstore;//buffer for TS data so not to save to disk too often
257  //T* vort;
258  //T* U;
261  T* wettime; //Inundation duration (h > 0.1)
262 
263  //Block information
265 
267 
269 
270 
271 
272 
273 };
274 
275 
276 // structure of useful variable for runing the main loop
277 template <class T>
278 struct Loop
279 {
281  double dt;
282  double dtmax;
283  double totaltime;
284 
285 
286  // Needed to average mean varable for output
287  int nstep = 0;
288  //useful for calculating avg timestep
289  int nstepout = 0;
290  // Needed to identify next output time
292 
293  // usefull for Time series output
294  int nTSsteps = 0;
295  std::vector< std::vector< Pointout > > TSAllout;
296 
297  int windstep = 1;
298  int atmpstep = 1;
299  int rainstep = 1;
300 
304 
305  T uwinduni = T(0.0);
306  T vwinduni = T(0.0);
308  T rainuni = T(0.0);
309 
310  // CUDA specific stuff
311 
312  dim3 blockDim;// (16, 16, 1);
313  dim3 gridDim;
314 
315  const int num_streams = 4;
316 
317  cudaStream_t streams[4];
318 
322 
323 };
324 
325 
326 
327 // End of global definition
328 #endif
Definition: Arrays.h:171
int * newlevel
Definition: Arrays.h:172
int * availblk
Definition: Arrays.h:173
int * invactive
Definition: Arrays.h:174
bool * coarsen
Definition: Arrays.h:175
bool * refine
Definition: Arrays.h:175
int * csumblk
Definition: Arrays.h:173
Definition: Arrays.h:89
T * dhv
Definition: Arrays.h:92
T * dhu
Definition: Arrays.h:91
T * dh
Definition: Arrays.h:90
Definition: Arrays.h:153
int * active
Definition: Arrays.h:161
int * LeftBot
Definition: Arrays.h:157
int * activeCell
Definition: Arrays.h:162
int * RightBot
Definition: Arrays.h:158
int * TopRight
Definition: Arrays.h:156
T * xo
Definition: Arrays.h:154
int * BotRight
Definition: Arrays.h:155
T * yo
Definition: Arrays.h:154
int * level
Definition: Arrays.h:160
int * BotLeft
Definition: Arrays.h:155
std::vector< outzoneB > outZone
Definition: Arrays.h:166
int * LeftTop
Definition: Arrays.h:157
int * RightTop
Definition: Arrays.h:158
int * TopLeft
Definition: Arrays.h:156
maskinfo mask
Definition: Arrays.h:164
Definition: Arrays.h:183
int * right
Definition: Arrays.h:192
int * river
Definition: Arrays.h:185
int * top
Definition: Arrays.h:193
int * bot
Definition: Arrays.h:194
int nbndblkright
Definition: Arrays.h:184
int * left
Definition: Arrays.h:191
RiverInfo< T > Riverinfo
Definition: Arrays.h:196
int nbndblkleft
Definition: Arrays.h:184
int nbndblktop
Definition: Arrays.h:184
int * Tsout
Definition: Arrays.h:186
int nblkTs
Definition: Arrays.h:184
int nblkriver
Definition: Arrays.h:184
int nbndblkbot
Definition: Arrays.h:184
Definition: Arrays.h:52
T * u
Definition: Arrays.h:54
T * v
Definition: Arrays.h:55
T * h
Definition: Arrays.h:53
Definition: Arrays.h:61
T * hU
Definition: Arrays.h:63
T * U
Definition: Arrays.h:62
Definition: Arrays.h:43
T * h
Definition: Arrays.h:45
T * v
Definition: Arrays.h:47
T * zs
Definition: Arrays.h:44
T * u
Definition: Arrays.h:46
Definition: Arrays.h:77
T * Fuy
Definition: Arrays.h:83
T * hv
Definition: Arrays.h:79
T * hau
Definition: Arrays.h:81
T * Fvx
Definition: Arrays.h:83
T * hav
Definition: Arrays.h:81
T * hu
Definition: Arrays.h:79
T * hfv
Definition: Arrays.h:80
T * Fvy
Definition: Arrays.h:82
T * Fux
Definition: Arrays.h:82
T * hfu
Definition: Arrays.h:80
Definition: Arrays.h:68
T * Fhu
Definition: Arrays.h:72
T * Fhv
Definition: Arrays.h:72
T * Fqvy
Definition: Arrays.h:71
T * Su
Definition: Arrays.h:69
T * Sv
Definition: Arrays.h:69
T * Fqux
Definition: Arrays.h:70
T * Fquy
Definition: Arrays.h:70
T * Fqvx
Definition: Arrays.h:71
Definition: Arrays.h:28
T * dvdy
Definition: Arrays.h:37
T * dhdy
Definition: Arrays.h:35
T * dudx
Definition: Arrays.h:31
T * dhdx
Definition: Arrays.h:30
T * dvdx
Definition: Arrays.h:32
T * dudy
Definition: Arrays.h:36
Definition: Arrays.h:11
T * dudx
Definition: Arrays.h:14
T * dhdx
Definition: Arrays.h:13
T * dzbdx
Definition: Arrays.h:22
T * dzsdy
Definition: Arrays.h:17
T * dvdx
Definition: Arrays.h:15
T * dhdy
Definition: Arrays.h:18
T * dudy
Definition: Arrays.h:19
T * dzsdx
Definition: Arrays.h:12
T * dvdy
Definition: Arrays.h:20
T * dzbdy
Definition: Arrays.h:23
Definition: Arrays.h:279
T atmpuni
Definition: Arrays.h:307
int indNextoutputtime
Definition: Arrays.h:291
double dtmax
Definition: Arrays.h:282
T hugeposval
Definition: Arrays.h:320
bool atmpuniform
Definition: Arrays.h:303
T hugenegval
Definition: Arrays.h:321
int nstepout
Definition: Arrays.h:289
int nstep
Definition: Arrays.h:287
dim3 gridDim
Definition: Arrays.h:313
double totaltime
Definition: Arrays.h:283
bool winduniform
Definition: Arrays.h:301
int rainstep
Definition: Arrays.h:299
bool rainuniform
Definition: Arrays.h:302
dim3 blockDim
Definition: Arrays.h:312
double dt
Definition: Arrays.h:281
T vwinduni
Definition: Arrays.h:306
T uwinduni
Definition: Arrays.h:305
double nextoutputtime
Definition: Arrays.h:280
cudaStream_t streams[4]
Definition: Arrays.h:317
int nTSsteps
Definition: Arrays.h:294
T rainuni
Definition: Arrays.h:308
T epsilon
Definition: Arrays.h:319
std::vector< std::vector< Pointout > > TSAllout
Definition: Arrays.h:295
int windstep
Definition: Arrays.h:297
const int num_streams
Definition: Arrays.h:315
int atmpstep
Definition: Arrays.h:298
Definition: Arrays.h:221
EvolvingP_M< T > evmax
Definition: Arrays.h:260
T * datmpdy
Definition: Arrays.h:241
std::map< std::string, std::string > Outvarunits
Definition: Arrays.h:251
std::vector< double > OutputT
Definition: Arrays.h:252
T * Patm
Definition: Arrays.h:241
T * hgw
Definition: Arrays.h:237
GradientsP< T > grad
Definition: Arrays.h:225
EvolvingP< T > evolv_o
Definition: Arrays.h:223
AdaptP adapt
Definition: Arrays.h:266
T * il
Definition: Arrays.h:233
T * wettime
Definition: Arrays.h:261
std::map< std::string, std::string > Outvarstdname
Definition: Arrays.h:250
TimeP< T > time
Definition: Arrays.h:243
AdvanceP< T > adv
Definition: Arrays.h:228
BndblockP< T > bndblk
Definition: Arrays.h:268
std::map< std::string, T * > OutputVarMap
Definition: Arrays.h:248
EvolvingP_M< T > evmean
Definition: Arrays.h:259
T * TSstore
Definition: Arrays.h:256
std::map< std::string, std::string > Outvarlongname
Definition: Arrays.h:249
T * datmpdx
Definition: Arrays.h:241
T * cl
Definition: Arrays.h:234
BlockP< T > blocks
Definition: Arrays.h:264
T * cf
Definition: Arrays.h:232
FluxMLP< T > fluxml
Definition: Arrays.h:227
FluxP< T > flux
Definition: Arrays.h:226
EvolvingP< T > evolv
Definition: Arrays.h:222
T * zb
Definition: Arrays.h:231
Definition: Arrays.h:202
std::vector< int > block
Definition: Arrays.h:203
Definition: Arrays.h:121
int nburmax
Definition: Arrays.h:123
int nbir
Definition: Arrays.h:122
T * qnow_g
Definition: Arrays.h:132
T * ystart
Definition: Arrays.h:129
T * yend
Definition: Arrays.h:130
int * Xbidir
Definition: Arrays.h:125
T * xend
Definition: Arrays.h:128
int nribmax
Definition: Arrays.h:124
T * qnow
Definition: Arrays.h:131
T * xstart
Definition: Arrays.h:127
int * Xridib
Definition: Arrays.h:126
Definition: Arrays.h:212
T * dtmax
Definition: Arrays.h:215
T totaltime
Definition: Arrays.h:213
T dt
Definition: Arrays.h:214
T * arrmin
Definition: Arrays.h:216
T * arrmax
Definition: Arrays.h:216
Definition: Arrays.h:106
int * blks
Definition: Arrays.h:110
int type
Definition: Arrays.h:114
int nblk
Definition: Arrays.h:108
int * side
Definition: Arrays.h:112
Definition: Arrays.h:97
double xmax
Definition: Arrays.h:101
double xmin
Definition: Arrays.h:101
float * z
Definition: Arrays.h:98
double ymax
Definition: Arrays.h:101
double ymin
Definition: Arrays.h:101
short * z_s
Definition: Arrays.h:99
int level
Definition: Arrays.h:100
Definition: Arrays.h:139
int index_next_OutputT
Definition: Arrays.h:147
int * blk
Definition: Arrays.h:141
double xo
Definition: Arrays.h:142
std::vector< double > OutputT
Definition: Arrays.h:146
int nblk
Definition: Arrays.h:140
double ymax
Definition: Arrays.h:142
int minlevel
Definition: Arrays.h:145
double yo
Definition: Arrays.h:142
std::string outname
Definition: Arrays.h:143
int maxlevel
Definition: Arrays.h:144
double xmax
Definition: Arrays.h:142