forked from stanfordhpccenter/HTR-solver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
prometeo_macro.rg
128 lines (106 loc) · 4.29 KB
/
prometeo_macro.rg
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
-- Copyright (c) "2019, by Stanford University
-- Developer: Mario Di Renzo
-- Affiliation: Center for Turbulence Research, Stanford University
-- URL: https://ctr.stanford.edu
-- Citation: Di Renzo, M., Lin, F., and Urzay, J. (2020).
-- HTR solver: An open-source exascale-oriented task-based
-- multi-GPU high-order code for hypersonic aerothermodynamics.
-- Computer Physics Communications 255, 107262"
-- All rights reserved.
--
-- Redistribution and use in source and binary forms, with or without
-- modification, are permitted provided that the following conditions are met:
-- * Redistributions of source code must retain the above copyright
-- notice, this list of conditions and the following disclaimer.
-- * Redistributions in binary form must reproduce the above copyright
-- notice, this list of conditions and the following disclaimer in the
-- documentation and/or other materials provided with the distribution.
--
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import "regent"
local Exports = {}
-------------------------------------------------------------------------------
-- IMPORTS
-------------------------------------------------------------------------------
local C = regentlib.c
-------------------------------------------------------------------------------
-- MACROS
-------------------------------------------------------------------------------
__demand(__inline)
task Exports.is_xNegGhost(c : int3d, Grid_xBnum : int)
return c.x < Grid_xBnum
end
__demand(__inline)
task Exports.is_yNegGhost(c : int3d, Grid_yBnum : int)
return c.y < Grid_yBnum
end
__demand(__inline)
task Exports.is_zNegGhost(c : int3d, Grid_zBnum : int)
return c.z < Grid_zBnum
end
__demand(__inline)
task Exports.is_xPosGhost(c : int3d, Grid_xBnum : int, Grid_xNum : int)
return c.x >= Grid_xNum + Grid_xBnum
end
__demand(__inline)
task Exports.is_yPosGhost(c : int3d, Grid_yBnum : int, Grid_yNum : int)
return c.y >= Grid_yNum + Grid_yBnum
end
__demand(__inline)
task Exports.is_zPosGhost(c : int3d, Grid_zBnum : int, Grid_zNum : int)
return c.z >= Grid_zNum + Grid_zBnum
end
__demand(__inline)
task Exports.in_interior(c : int3d,
Grid_xBnum : int, Grid_xNum : int,
Grid_yBnum : int, Grid_yNum : int,
Grid_zBnum : int, Grid_zNum : int)
return
Grid_xBnum <= c.x and c.x < Grid_xNum + Grid_xBnum and
Grid_yBnum <= c.y and c.y < Grid_yNum + Grid_yBnum and
Grid_zBnum <= c.z and c.z < Grid_zNum + Grid_zBnum
end
__demand(__inline)
task Exports.drand48_r(rngState : &C.drand48_data)
var res : double
C.drand48_r(rngState, &res)
return res
end
__demand(__inline)
task Exports.vs_mul(a : double[3], b : double)
return array(a[0] * b, a[1] * b, a[2] * b)
end
__demand(__inline)
task Exports.vs_div(a : double[3], b : double)
return array(a[0] / b, a[1] / b, a[2] / b)
end
__demand(__inline)
task Exports.dot(a : double[3], b : double[3])
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]
end
__demand(__inline)
task Exports.vv_add(a : double[3], b : double[3])
return array(a[0] + b[0], a[1] + b[1], a[2] + b[2])
end
__demand(__inline)
task Exports.vv_sub(a : double[3], b : double[3])
return array(a[0] - b[0], a[1] - b[1], a[2] - b[2])
end
__demand(__inline)
task Exports.vv_mul(a : double[3], b : double[3])
return array(a[0] * b[0], a[1] * b[1], a[2] * b[2])
end
__demand(__inline)
task Exports.vv_div(a : double[3], b : double[3])
return array(a[0] / b[0], a[1] / b[1], a[2] / b[2])
end
return Exports