GEOSX
DataLayouts.hpp
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------------------------------
3  * SPDX-License-Identifier: LGPL-2.1-only
4  *
5  * Copyright (c) 2018-2020 Lawrence Livermore National Security LLC
6  * Copyright (c) 2018-2020 The Board of Trustees of the Leland Stanford Junior University
7  * Copyright (c) 2018-2020 TotalEnergies
8  * Copyright (c) 2019- GEOSX Contributors
9  * All rights reserved
10  *
11  * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
12  * ------------------------------------------------------------------------------------------------------------
13  */
14 
19 #ifndef GEOS_COMMON_DATALAYOUTS_HPP_
20 #define GEOS_COMMON_DATALAYOUTS_HPP_
21 
22 #include "common/GeosxConfig.hpp"
23 
24 #include "LvArray/src/Array.hpp"
25 #include "RAJA/RAJA.hpp"
26 
27 namespace geos
28 {
29 
35 template< int NDIM >
36 using defaultLayout = camp::make_idx_seq_t< NDIM >;
37 
43 template< typename PERM >
44 static constexpr int getUSD = LvArray::typeManipulation::getStrideOneDimension( PERM {} );
45 
46 namespace nodes
47 {
48 
49 #if defined( GEOS_USE_DEVICE )
50 
52 using REFERENCE_POSITION_PERM = RAJA::PERM_JI;
53 
55 using TOTAL_DISPLACEMENT_PERM = RAJA::PERM_JI;
56 
58 using INCR_DISPLACEMENT_PERM = RAJA::PERM_JI;
59 
61 using VELOCITY_PERM = RAJA::PERM_JI;
62 
64 using ACCELERATION_PERM = RAJA::PERM_JI;
65 
66 #else
67 
69 using REFERENCE_POSITION_PERM = RAJA::PERM_IJ;
70 
72 using TOTAL_DISPLACEMENT_PERM = RAJA::PERM_IJ;
73 
75 using INCR_DISPLACEMENT_PERM = RAJA::PERM_IJ;
76 
78 using VELOCITY_PERM = RAJA::PERM_IJ;
79 
81 using ACCELERATION_PERM = RAJA::PERM_IJ;
82 
83 #endif
84 
86 static constexpr int REFERENCE_POSITION_USD = LvArray::typeManipulation::getStrideOneDimension( REFERENCE_POSITION_PERM {} );
87 
89 static constexpr int TOTAL_DISPLACEMENT_USD = LvArray::typeManipulation::getStrideOneDimension( TOTAL_DISPLACEMENT_PERM {} );
90 
92 static constexpr int INCR_DISPLACEMENT_USD = LvArray::typeManipulation::getStrideOneDimension( INCR_DISPLACEMENT_PERM {} );
93 
95 static constexpr int VELOCITY_USD = LvArray::typeManipulation::getStrideOneDimension( VELOCITY_PERM {} );
96 
98 static constexpr int ACCELERATION_USD = LvArray::typeManipulation::getStrideOneDimension( ACCELERATION_PERM {} );
99 
100 } // namespace nodes
101 
102 namespace particles
103 {
104 
105 #if defined( GEOSX_USE_CUDA )
106 
108 using REFERENCE_POSITION_PERM = RAJA::PERM_JI;
109 
111 using TOTAL_DISPLACEMENT_PERM = RAJA::PERM_JI;
112 
114 using VELOCITY_PERM = RAJA::PERM_JI;
115 
117 using ACCELERATION_PERM = RAJA::PERM_JI;
118 
119 #else
120 
122 using REFERENCE_POSITION_PERM = RAJA::PERM_IJ;
123 
125 using TOTAL_DISPLACEMENT_PERM = RAJA::PERM_IJ;
126 
128 using VELOCITY_PERM = RAJA::PERM_IJ;
129 
131 using ACCELERATION_PERM = RAJA::PERM_IJ;
132 
133 #endif
134 
136 static constexpr int REFERENCE_POSITION_USD = LvArray::typeManipulation::getStrideOneDimension( REFERENCE_POSITION_PERM {} );
137 
139 static constexpr int TOTAL_DISPLACEMENT_USD = LvArray::typeManipulation::getStrideOneDimension( TOTAL_DISPLACEMENT_PERM {} );
140 
142 static constexpr int VELOCITY_USD = LvArray::typeManipulation::getStrideOneDimension( VELOCITY_PERM {} );
143 
145 static constexpr int ACCELERATION_USD = LvArray::typeManipulation::getStrideOneDimension( ACCELERATION_PERM {} );
146 
147 } // namespace particles
148 
149 namespace cells
150 {
151 
152 #if defined( GEOS_USE_DEVICE )
153 
155 using NODE_MAP_PERMUTATION = RAJA::PERM_JI;
156 
157 #else
158 
160 using NODE_MAP_PERMUTATION = RAJA::PERM_IJ;
161 
162 #endif
163 
165 static constexpr int NODE_MAP_USD = LvArray::typeManipulation::getStrideOneDimension( NODE_MAP_PERMUTATION {} );
166 
167 } // namespace cells
168 
169 namespace solid
170 {
171 
172 #if defined( GEOS_USE_DEVICE )
173 
175 using STRESS_PERMUTATION = RAJA::PERM_KJI;
176 
178 using STIFFNESS_PERMUTATION = RAJA::PERM_KJI;
179 
180 #else
181 
183 using STRESS_PERMUTATION = RAJA::PERM_IJK;
184 
186 using STIFFNESS_PERMUTATION = RAJA::PERM_IJK;
187 
188 #endif
189 
191 static constexpr int STRESS_USD = LvArray::typeManipulation::getStrideOneDimension( STRESS_PERMUTATION {} );
192 
194 static constexpr int STIFFNESS_USD = LvArray::typeManipulation::getStrideOneDimension( STIFFNESS_PERMUTATION {} );
195 
196 } // namespace solid
197 
198 namespace compflow
199 {
200 
201 #if defined( GEOS_USE_DEVICE )
202 
204 using LAYOUT_COMP = RAJA::PERM_JI;
205 
207 using LAYOUT_COMP_DC = RAJA::PERM_JKI;
208 
210 using LAYOUT_PHASE = RAJA::PERM_JI;
211 
213 using LAYOUT_PHASE_DC = RAJA::PERM_JKI;
214 
216 using LAYOUT_PHASE_COMP = RAJA::PERM_JKI;
217 
219 using LAYOUT_FLUID_DC = RAJA::PERM_JI;
220 
222 using LAYOUT_OBL_OPERATOR_VALUES = RAJA::PERM_JI;
223 
225 using LAYOUT_OBL_OPERATOR_DERIVATIVES = RAJA::PERM_JKI;
226 
227 #else
228 
230 using LAYOUT_COMP = RAJA::PERM_IJ;
231 
233 using LAYOUT_COMP_DC = RAJA::PERM_IJK;
234 
236 using LAYOUT_PHASE = RAJA::PERM_IJ;
237 
239 using LAYOUT_PHASE_DC = RAJA::PERM_IJK;
240 
242 using LAYOUT_PHASE_COMP = RAJA::PERM_IJK;
243 
245 using LAYOUT_FLUID_DC = RAJA::PERM_IJ;
246 
248 using LAYOUT_OBL_OPERATOR_VALUES = RAJA::PERM_IJ;
249 
251 using LAYOUT_OBL_OPERATOR_DERIVATIVES = RAJA::PERM_IJK;
252 
253 #endif
254 
256 static constexpr int USD_COMP = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_COMP{} );
257 
259 static constexpr int USD_COMP_DC = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_COMP_DC{} );
260 
262 static constexpr int USD_PHASE = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_PHASE{} );
263 
265 static constexpr int USD_PHASE_DC = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_PHASE_DC{} );
266 
268 static constexpr int USD_PHASE_COMP = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_PHASE_COMP{} );
269 
271 static constexpr int USD_FLUID_DC = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_FLUID_DC{} );
272 
274 static constexpr int USD_OBL_VAL = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_OBL_OPERATOR_VALUES{} );
275 
277 static constexpr int USD_OBL_DER = LvArray::typeManipulation::getStrideOneDimension( LAYOUT_OBL_OPERATOR_DERIVATIVES{} );
278 
279 } // namespace compflow
280 
281 } // namespace geos
282 
283 #endif // GEOS_COMMON_DATALAYOUTS_HPP_
RAJA::PERM_IJ REFERENCE_POSITION_PERM
Particle reference position permutation when not using cuda.
RAJA::PERM_IJK STIFFNESS_PERMUTATION
Constitutive model stiffness permutation when not using cuda.
RAJA::PERM_IJ REFERENCE_POSITION_PERM
Node reference position permutation when not using cuda.
Definition: DataLayouts.hpp:69
RAJA::PERM_IJ LAYOUT_COMP
Component global density/fraction array layout.
RAJA::PERM_IJ LAYOUT_OBL_OPERATOR_VALUES
OBL operator values array layout.
RAJA::PERM_IJ TOTAL_DISPLACEMENT_PERM
Particle total displacement permutation when not using cuda.
static constexpr int USD_OBL_VAL
OBL operator values unit stride dimension.
RAJA::PERM_IJ ACCELERATION_PERM
Particle acceleration permutation when not using cuda.
static constexpr int NODE_MAP_USD
Cell node map unit stride dimension.
RAJA::PERM_IJK LAYOUT_COMP_DC
Component global fraction compositional derivative array layout.
static constexpr int TOTAL_DISPLACEMENT_USD
Node total displacement unit stride dimension.
Definition: DataLayouts.hpp:89
static constexpr int REFERENCE_POSITION_USD
Node reference position unit stride dimension.
Definition: DataLayouts.hpp:86
static constexpr int ACCELERATION_USD
Node acceleration unit stride dimension.
Definition: DataLayouts.hpp:98
static constexpr int USD_OBL_DER
OBL operator derivatives unit stride dimension.
RAJA::PERM_IJ INCR_DISPLACEMENT_PERM
Node incremental displacement permutation when not using cuda.
Definition: DataLayouts.hpp:75
RAJA::PERM_IJ VELOCITY_PERM
Node velocity permutation when not using cuda.
Definition: DataLayouts.hpp:78
static constexpr int INCR_DISPLACEMENT_USD
Node incremental displacement unit stride dimension.
Definition: DataLayouts.hpp:92
static constexpr int USD_COMP_DC
Component global fraction compositional derivative unit stride dimension.
RAJA::PERM_IJ TOTAL_DISPLACEMENT_PERM
Node total displacement permutation when not using cuda.
Definition: DataLayouts.hpp:72
static constexpr int VELOCITY_USD
Node velocity unit stride dimension.
Definition: DataLayouts.hpp:95
RAJA::PERM_IJ VELOCITY_PERM
Particle velocity permutation when not using cuda.
static constexpr int USD_FLUID_DC
Fluid property compositional derivative unit stride dimension.
RAJA::PERM_IJK STRESS_PERMUTATION
Constitutive model stress permutation when not using cuda.
static constexpr int USD_COMP
Component global density/fraction unit stride dimension.
static constexpr int USD_PHASE_COMP
Phase property unit stride dimension.
RAJA::PERM_IJ LAYOUT_FLUID_DC
Fluid property compositional derivative array layout.
static constexpr int USD_PHASE_DC
Phase property compositional derivative unit stride dimension.
RAJA::PERM_IJK LAYOUT_OBL_OPERATOR_DERIVATIVES
OBL operator derivatives derivative array layout.
RAJA::PERM_IJ LAYOUT_PHASE
Phase property array layout.
static constexpr int STRESS_USD
Constitutive model stress unit stride dimension.
RAJA::PERM_IJK LAYOUT_PHASE_COMP
Phase composition array layout.
static constexpr int STIFFNESS_USD
Constitutive model stiffness unit stride dimension.
RAJA::PERM_IJK LAYOUT_PHASE_DC
Phase property array layout.
RAJA::PERM_IJ ACCELERATION_PERM
Node acceleration permutation when not using cuda.
Definition: DataLayouts.hpp:81
static constexpr int USD_PHASE
Phase property unit stride dimension.
RAJA::PERM_IJ NODE_MAP_PERMUTATION
Cell node map permutation when not using cuda.
static constexpr int getUSD
Just a handy shortcut for LvArray::typeManipulation::getStrideOneDimension.
Definition: DataLayouts.hpp:44
camp::make_idx_seq_t< NDIM > defaultLayout
Defaul permutation type for NDIM-dimensional array.
Definition: DataLayouts.hpp:36