Select Git revision
entity_data.cpp 1.49 KiB
#include "entity_data.h"
entity_data_gpu::entity_data_gpu()
{
}
entity_data_gpu::entity_data_gpu(const entity_data_cpu& ed)
{
g_order = ed.g_order;
a_order = ed.a_order;
num_all_elems = num_elems_all_orientations(ed);
std::vector<int32_t> eo;
eo.reserve(num_all_elems);
for (int32_t iO = 0; iO < ed.num_orientations; iO++)
{
for (size_t iT = 0; iT < ed.num_elems[iO]; iT++)
eo.push_back(iO);
}
assert(eo.size() == num_all_elems);
element_orientation.copyin(eo.data(), eo.size());
num_bf = ed.num_bf;
dof_base = ed.dof_base;
flux_base = ed.flux_base;
auto rows = ed.num_bf*ed.num_orientations;
auto cols = ed.num_bf*3;
MatxRM<double> dm = MatxRM<double>::Zero(rows, cols);
for (size_t i = 0; i < ed.num_orientations; i++)
{
dm.block(i*num_bf, 0, num_bf, num_bf) =
ed.differentiation_matrices.block(i*num_bf, 0, num_bf, num_bf).transpose();
dm.block(i*num_bf, num_bf, num_bf, num_bf) =
ed.differentiation_matrices.block(i*num_bf, num_bf, num_bf, num_bf).transpose();
dm.block(i*num_bf, 2*num_bf, num_bf, num_bf) =
ed.differentiation_matrices.block(i*num_bf, 2*num_bf, num_bf, num_bf).transpose();
}
differentiation_matrices.init(dm.data(), dm.size());
jacobians.copyin(ed.jacobians.data(), ed.jacobians.size());
cell_determinants.copyin(ed.cell_determinants.data(), ed.cell_determinants.size());
}
entity_data_gpu::~entity_data_gpu()
{
}