19 std::vector<double> alpha;
20 alpha.resize(nx * ny * nz * (basisSize) * (basisSize) * (basisSize));
21 kernels::initGaussLegendreNodesAndWeights(std::set<int>());
35 for (
int node = 0; node < basisSize; node++) {
46 for (
int cell_z = 0; cell_z <
patch_cells; cell_z++) {
48 for (
int cell_y = 0; cell_y <
patch_cells; cell_y++) {
50 for (
int cell_x = 0; cell_x <
patch_cells; cell_x++) {
52 for (
int node_z = 0; node_z < basisSize; node_z++) {
54 for (
int node_y = 0; node_y < basisSize; node_y++) {
56 for (
int node_x = 0; node_x < basisSize; node_x++) {
58 patch[idx(cell_z, cell_y, cell_x, node_z, node_y, node_x)] =
testFunction(x, y, z);
73 std::vector<double> patch_x;
74 std::vector<double> patch_z;
75 std::vector<double> patch_y;
93 for (
int node = 0; node < basisSize; node++) {
99 topography->topography_onPatch(patch_x, patch_z, patch_y);
101 std::vector<double> topography_heaviside;
119 const double*
const x, std::vector<double>& patch_y, std::vector<double>& topography_heaviside
126 for (
int cell_z = 0; cell_z <
patch_cells; cell_z++) {
127 for (
int node_z = 0; node_z < basisSize; node_z++) {
128 for (
int cell_x = 0; cell_x <
patch_cells; cell_x++) {
129 for (
int node_x = 0; node_x < basisSize; node_x++) {
130 for (
int cell_y = 0; cell_y <
patch_cells; cell_y++) {
132 for (
int node_y = 0; node_y < basisSize; node_y++) {
134 topography_heaviside[idx(
135 cell_z, cell_y, cell_x, node_z, node_y, node_x
136 )] = patch_y[idx2(cell_z * basisSize + node_z, cell_x * basisSize + node_x)] < y ? 1 : 0;
148 for (
int cell_z = 0; cell_z <
patch_cells; cell_z++) {
149 for (
int node_z = 0; node_z < basisSize; node_z++) {
150 for (
int cell_x = 0; cell_x <
patch_cells; cell_x++) {
151 for (
int node_x = 0; node_x < basisSize; node_x++) {
152 for (
int cell_y = 0; cell_y <
patch_cells; cell_y++) {
153 for (
int node_y = 0; node_y < basisSize; node_y++) {
156 alpha += topography_heaviside[idx(cell_z, cell_y, cell_x, node_z, node_y, node_x)]
157 *
patch[idx(cell_z, cell_y, cell_x, node_z, node_y, node_x)] * weight;
168 std::vector<double> x;
169 std::vector<double> y;
170 std::vector<double> z;
180 for (
int node = 0; node < basisSize; node++) {
187 double min = std::numeric_limits<double>::max();
188 double max = std::numeric_limits<double>::min();
189 for (
int node = 0; node < basisSize * basisSize; node++) {
190 min = std::min(min, y[node]);
191 max = std::max(max, y[node]);