Skip to content
Snippets Groups Projects
Commit 898ea068 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Use NodebyCellData to define ljr and njr

parent 70ba9550
No related branches found
No related tags found
1 merge request!6Feature/crs
......@@ -24,8 +24,8 @@ public:
private:
const MeshType& m_mesh;
NodeByCellData<Rd> m_Cjr;
Kokkos::View<double**> m_ljr;
Kokkos::View<Rd**> m_njr;
NodeByCellData<double> m_ljr;
NodeByCellData<Rd> m_njr;
Kokkos::View<Rd*> m_xj;
Kokkos::View<double*> m_Vj;
......@@ -88,22 +88,16 @@ private:
}
});
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){
const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j);
for (size_t R=0; R<cell_nodes.length; ++R) {
const Rd& Cjr = m_Cjr(j,R);
m_ljr(j,R) = l2Norm(Cjr);
}
const NodeByCellData<Rd>& Cjr = m_Cjr;
Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){
m_ljr.value(j) = l2Norm(Cjr.value(j));
});
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){
const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j);
for (size_t R=0; R<cell_nodes.length; ++R) {
const Rd& Cjr = m_Cjr(j,R);
const double inv_ljr = 1./m_ljr(j,R);
m_njr(j,R) = inv_ljr*Cjr;
}
const NodeByCellData<double>& ljr = m_ljr;
Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){
m_njr.value(j) = (1./ljr.value(j))*Cjr.value(j);
});
} else if (dimension ==3) {
const Kokkos::View<const Rd*> xr = m_mesh.xr();
......@@ -155,21 +149,14 @@ private:
}
});
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j);
for (size_t R=0; R<cell_nodes.length; ++R) {
const Rd& Cjr = m_Cjr(j,R);
m_ljr(j,R) = l2Norm(Cjr);
}
const NodeByCellData<Rd>& Cjr = m_Cjr;
Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){
m_ljr.value(j) = l2Norm(Cjr.value(j));
});
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j);
for (size_t R=0; R<cell_nodes.length; ++R) {
const Rd& Cjr = m_Cjr(j,R);
const double inv_ljr = 1./m_ljr(j,R);
m_njr(j,R) = inv_ljr*Cjr;
}
const NodeByCellData<double>& ljr = m_ljr;
Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){
m_njr.value(j) = (1./ljr.value(j))*Cjr.value(j);
});
}
static_assert((dimension<=3), "only 1d, 2d and 3d are implemented");
......@@ -186,12 +173,12 @@ public:
return m_Cjr;
}
const Kokkos::View<const double**> ljr() const
const NodeByCellData<double>& ljr() const
{
return m_ljr;
}
const Kokkos::View<const Rd**> njr() const
const NodeByCellData<Rd>& njr() const
{
return m_njr;
}
......@@ -216,8 +203,8 @@ public:
MeshData(const MeshType& mesh)
: m_mesh(mesh),
m_Cjr(mesh.connectivity().m_node_id_per_cell_matrix),
m_ljr("ljr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()),
m_njr("njr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()),
m_ljr(mesh.connectivity().m_node_id_per_cell_matrix),
m_njr(mesh.connectivity().m_node_id_per_cell_matrix),
m_xj("xj", mesh.numberOfCells()),
m_Vj("Vj", mesh.numberOfCells())
{
......@@ -228,6 +215,7 @@ public:
m_Cjr(j,1)= 1;
});
// in 1d njr=Cjr
#warning set equality between njr and Cjr
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
m_njr(j,0)=-1;
m_njr(j,1)= 1;
......
......@@ -82,10 +82,10 @@ private:
KOKKOS_INLINE_FUNCTION
void computeAjr(const Kokkos::View<const double*>& rhocj,
const Kokkos::View<const double**>& ljr,
const Kokkos::View<const Rd**>& njr)
const NodeByCellData<Rd>& Cjr,
const NodeByCellData<double>& ljr,
const NodeByCellData<Rd>& njr)
{
const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr();
Kokkos::parallel_for("new nested Ajr", m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) {
const size_t& nb_nodes =m_Ajr.numberOfSubValues(j);
const double& rho_c = rhocj(j);
......@@ -222,11 +222,10 @@ private:
const Kokkos::View<const double*>& cj,
const Kokkos::View<const double*>& Vj,
const NodeByCellData<Rd>& Cjr,
const Kokkos::View<const double**>& ljr,
const Kokkos::View<const Rd**>& njr) {
const NodeByCellData<double>& ljr,
const NodeByCellData<Rd>& njr) {
const Kokkos::View<const double*> rhocj = computeRhoCj(rhoj, cj);
// const Kokkos::View<const Rdd**> Ajr =
computeAjr(rhocj, ljr, njr);
computeAjr(rhocj, Cjr, ljr, njr);
const Kokkos::View<const Rdd*> Ar = computeAr(m_Ajr);
const Kokkos::View<const Rd*> br = computeBr(m_Ajr, Cjr, uj, pj);
......@@ -271,7 +270,7 @@ public:
double acoustic_dt(const Kokkos::View<const double*>& Vj,
const Kokkos::View<const double*>& cj) const
{
const Kokkos::View<const double**> ljr = m_mesh_data.ljr();
const NodeByCellData<double>& ljr = m_mesh_data.ljr();
Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){
const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j);
......@@ -305,8 +304,8 @@ public:
const Kokkos::View<const Rd*> xj = m_mesh_data.xj();
const Kokkos::View<const double*> Vj = m_mesh_data.Vj();
const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr();
const Kokkos::View<const double**> ljr = m_mesh_data.ljr();
const Kokkos::View<const Rd**> njr = m_mesh_data.njr();
const NodeByCellData<double>& ljr = m_mesh_data.ljr();
const NodeByCellData<Rd>& njr = m_mesh_data.njr();
Kokkos::View<Rd*> xr = m_mesh.xr();
computeExplicitFluxes(xr, xj, rhoj, uj, pj, cj, Vj, Cjr, ljr, njr);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment