From 8c239f035d71582df8a5ac3398bbe654851f38ee Mon Sep 17 00:00:00 2001 From: Alexandre GANGLOFF <alexandre.gangloff@cea.fr> Date: Fri, 15 Nov 2024 15:57:00 +0100 Subject: [PATCH] Add br and Fjr order 2 functions on LocalDtHyperelasticSolver --- .../Order2LocalDtHyperelasticSolver.cpp | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/scheme/Order2LocalDtHyperelasticSolver.cpp b/src/scheme/Order2LocalDtHyperelasticSolver.cpp index e809d74be..824790cec 100644 --- a/src/scheme/Order2LocalDtHyperelasticSolver.cpp +++ b/src/scheme/Order2LocalDtHyperelasticSolver.cpp @@ -190,12 +190,13 @@ class Order2LocalDtHyperelasticSolverHandler::Order2LocalDtHyperelasticSolver fi NodeValue<Rd> _computeBr(const Mesh<Dimension>& mesh, const NodeValuePerCell<const Rdxd>& Ajr, - const DiscreteVectorFunction& u, - const DiscreteTensorFunction& sigma) const + DiscreteFunctionDPk<Dimension, const Rd> DPk_u, + NodeValuePerCell<const Rdxd> DPk_sigma) const { MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(mesh); const NodeValuePerCell<const Rd>& Cjr = mesh_data.Cjr(); + const auto& xr = mesh.xr(); const auto& node_to_cell_matrix = mesh.connectivity().nodeToCellMatrix(); const auto& node_local_numbers_in_their_cells = mesh.connectivity().nodeLocalNumbersInTheirCells(); @@ -211,7 +212,7 @@ class Order2LocalDtHyperelasticSolverHandler::Order2LocalDtHyperelasticSolver fi for (size_t j = 0; j < node_to_cell.size(); ++j) { const CellId J = node_to_cell[j]; const unsigned int R = node_local_number_in_its_cells[j]; - br += Ajr(J, R) * u[J] - sigma[J] * Cjr(J, R); + br += Ajr(J, R) * DPk_u[J](xr[r]) - DPk_sigma(J, R) * Cjr(J, R); } b[r] = br; @@ -367,22 +368,27 @@ class Order2LocalDtHyperelasticSolverHandler::Order2LocalDtHyperelasticSolver fi _computeFjr(const MeshType& mesh, const NodeValuePerCell<const Rdxd>& Ajr, const NodeValue<const Rd>& ur, - const DiscreteVectorFunction& u, - const DiscreteTensorFunction& sigma) const + DiscreteFunctionDPk<Dimension,const Rd> DPk_uh, + NodeValuePerCell<const Rdxd> DPk_sigma) const { MeshDataType& mesh_data = MeshDataManager::instance().getMeshData(mesh); const NodeValuePerCell<const Rd> Cjr = mesh_data.Cjr(); + const NodeValue<const Rd>& xr = mesh.xr(); - const auto& cell_to_node_matrix = mesh.connectivity().cellToNodeMatrix(); + const auto& node_to_cell_matrix = mesh.connectivity().nodeToCellMatrix(); + const auto& node_local_numbers_in_their_cells = mesh.connectivity().nodeLocalNumbersInTheirCells(); NodeValuePerCell<Rd> F{mesh.connectivity()}; parallel_for( - mesh.numberOfCells(), PUGS_LAMBDA(CellId j) { - const auto& cell_nodes = cell_to_node_matrix[j]; + mesh.numberOfNodes(), PUGS_LAMBDA(NodeId r) { + const auto& node_to_cell = node_to_cell_matrix[r]; + const auto& node_local_number_in_its_cells = node_local_numbers_in_their_cells.itemArray(r); - for (size_t r = 0; r < cell_nodes.size(); ++r) { - F(j, r) = -Ajr(j, r) * (u[j] - ur[cell_nodes[r]]) + sigma[j] * Cjr(j, r); + for(size_t j = 0; j < node_to_cell.size(); ++j){ + const CellId J = node_to_cell[j]; + const unsigned int R = node_local_number_in_its_cells[j]; + F(J,R) = -Ajr(J,R) * (DPk_uh[J](xr[r]) - ur[r]) + DPk_sigma(J,R) * Cjr(J,R); } }); -- GitLab