From a352996e9753559345fa0c61f3773f5c4370712a Mon Sep 17 00:00:00 2001
From: labourasse <labourassee@gmail.com>
Date: Sun, 21 May 2023 00:23:09 +0200
Subject: [PATCH] add link to language

---
 src/language/modules/SchemeModule.cpp | 123 ++++++++++++++++++++++++++
 src/scheme/CMakeLists.txt             |   1 +
 src/scheme/HypoelasticSolver.cpp      |  37 ++++----
 src/scheme/HypoelasticSolver.hpp      |   6 +-
 4 files changed, 149 insertions(+), 18 deletions(-)

diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp
index d4d269794..3e9d9ce99 100644
--- a/src/language/modules/SchemeModule.cpp
+++ b/src/language/modules/SchemeModule.cpp
@@ -35,6 +35,7 @@
 #include <scheme/FourierBoundaryConditionDescriptor.hpp>
 #include <scheme/FreeBoundaryConditionDescriptor.hpp>
 #include <scheme/HyperelasticSolver.hpp>
+#include <scheme/HypoelasticSolver.hpp>
 #include <scheme/IBoundaryConditionDescriptor.hpp>
 #include <scheme/IDiscreteFunctionDescriptor.hpp>
 #include <scheme/NeumannBoundaryConditionDescriptor.hpp>
@@ -578,6 +579,120 @@ SchemeModule::SchemeModule()
 
                               ));
 
+  this->_addBuiltinFunction("hypoelastic_eucclhyd_fluxes",
+                            std::function(
+
+                              [](const std::shared_ptr<const DiscreteFunctionVariant>& rho,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aL,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aT,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& u,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& p,
+                                 const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
+                                   bc_descriptor_list)
+                                -> std::tuple<std::shared_ptr<const ItemValueVariant>,
+                                              std::shared_ptr<const SubItemValuePerItemVariant>> {
+                                return HypoelasticSolverHandler{getCommonMesh({rho, aL, aT, u, sigma, p})}
+                                  .solver()
+                                  .compute_fluxes(HypoelasticSolverHandler::SolverType::Eucclhyd, rho, aL, aT, u, sigma,
+                                                  p, bc_descriptor_list);
+                              }
+
+                              ));
+
+  this->_addBuiltinFunction("hypoelastic_eucclhyd_solver",
+                            std::function(
+
+                              [](const std::shared_ptr<const DiscreteFunctionVariant>& rho,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& u,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& E,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aL,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aT,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& p,
+                                 const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
+                                   bc_descriptor_list,
+                                 const double& dt) -> std::tuple<std::shared_ptr<const IMesh>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>> {
+                                return HypoelasticSolverHandler{getCommonMesh({rho, u, E, CG, aL, aT, sigma, p})}
+                                  .solver()
+                                  .apply(HypoelasticSolverHandler::SolverType::Eucclhyd, dt, rho, u, E, CG, aL, aT,
+                                         sigma, p, bc_descriptor_list);
+                              }
+
+                              ));
+
+  this->_addBuiltinFunction("hypoelastic_glace_fluxes",
+                            std::function(
+
+                              [](const std::shared_ptr<const DiscreteFunctionVariant>& rho,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aL,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aT,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& u,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+                                 const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
+                                   bc_descriptor_list)
+                                -> std::tuple<std::shared_ptr<const ItemValueVariant>,
+                                              std::shared_ptr<const SubItemValuePerItemVariant>> {
+                                return HypoelasticSolverHandler{getCommonMesh({rho, aL, aT, u, sigma})}
+                                  .solver()
+                                  .compute_fluxes(HypoelasticSolverHandler::SolverType::Glace,   //
+                                                  rho, aL, aT, u, sigma, bc_descriptor_list);
+                              }
+
+                              ));
+
+  this->_addBuiltinFunction("hypoelastic_glace_solver",
+                            std::function(
+
+                              [](const std::shared_ptr<const DiscreteFunctionVariant>& rho,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& u,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& E,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aL,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& aT,
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+                                 const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>&
+                                   bc_descriptor_list,
+                                 const double& dt) -> std::tuple<std::shared_ptr<const IMesh>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>> {
+                                return HypoelasticSolverHandler{getCommonMesh({rho, u, E, CG, aL, aT, sigma})}
+                                  .solver()
+                                  .apply(HypoelasticSolverHandler::SolverType::Glace, dt, rho, u, E, CG, aL, aT, sigma,
+                                         p, bc_descriptor_list);
+                              }
+
+                              ));
+
+  this->_addBuiltinFunction("apply_hypoelastic_fluxes",
+                            std::function(
+
+                              [](const std::shared_ptr<const DiscreteFunctionVariant>& rho,      //
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& u,        //
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& E,        //
+                                 const std::shared_ptr<const DiscreteFunctionVariant>& CG,       //
+                                 const std::shared_ptr<const ItemValueVariant>& ur,              //
+                                 const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr,   //
+                                 const double& dt) -> std::tuple<std::shared_ptr<const IMesh>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>,
+                                                                 std::shared_ptr<const DiscreteFunctionVariant>> {
+                                return HypoelasticSolverHandler{getCommonMesh({rho, u, E, CG})}   //
+                                  .solver()
+                                  .apply_fluxes(dt, rho, u, E, CG, ur, Fjr);
+                              }
+
+                              ));
+
   this->_addBuiltinFunction("lagrangian",
                             std::function(
 
@@ -643,6 +758,14 @@ SchemeModule::SchemeModule()
                                                  }
 
                                                  ));
+  this->_addBuiltinFunction("hypoelastic_dt", std::function(
+
+                                                [](const std::shared_ptr<const DiscreteFunctionVariant>& c) -> double {
+                                                  return hypoelastic_dt(c);
+                                                }
+
+                                                ));
+
   this->_addBuiltinFunction("fluxing_advection",
                             std::function(
 
diff --git a/src/scheme/CMakeLists.txt b/src/scheme/CMakeLists.txt
index 1379aea67..e7c777d08 100644
--- a/src/scheme/CMakeLists.txt
+++ b/src/scheme/CMakeLists.txt
@@ -4,6 +4,7 @@ add_library(
   PugsScheme
   AcousticSolver.cpp
   HyperelasticSolver.cpp
+  HypoelasticSolver.cpp
   DiscreteFunctionIntegrator.cpp
   DiscreteFunctionInterpoler.cpp
   DiscreteFunctionUtils.cpp
diff --git a/src/scheme/HypoelasticSolver.cpp b/src/scheme/HypoelasticSolver.cpp
index adf548b24..044c8978c 100644
--- a/src/scheme/HypoelasticSolver.cpp
+++ b/src/scheme/HypoelasticSolver.cpp
@@ -1,4 +1,4 @@
-#include <scheme/HyperelasticSolver.hpp>
+#include <scheme/HypoelasticSolver.hpp>
 
 #include <language/utils/InterpolateItemValue.hpp>
 #include <mesh/ItemValueUtils.hpp>
@@ -400,6 +400,7 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
                  const std::shared_ptr<const DiscreteFunctionVariant>& aT_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& u_v,
                  const std::shared_ptr<const DiscreteFunctionVariant>& sigma_v,
+                 const std::shared_ptr<const DiscreteFunctionVariant>& p_v,
                  const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list) const
   {
     std::shared_ptr i_mesh = getCommonMesh({rho_v, aL_v, aT_v, u_v, sigma_v});
@@ -446,7 +447,8 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
                const DiscreteScalarFunction& rho,
                const DiscreteVectorFunction& u,
                const DiscreteScalarFunction& E,
-               const DiscreteTensorFunction& CG,
+               const DiscreteTensorFunction& sigma,
+               const DiscreteScalarFunction& p,
                const NodeValue<const Rd>& ur,
                const NodeValuePerCell<const Rd>& Fjr) const
   {
@@ -469,7 +471,7 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
     CellValue<double> new_rho = copy(rho.cellValues());
     CellValue<Rd> new_u       = copy(u.cellValues());
     CellValue<double> new_E   = copy(E.cellValues());
-    CellValue<Rdxd> new_CG    = copy(CG.cellValues());
+    CellValue<Rdxd> new_sigma = copy(sigma.cellValues());
 
     parallel_for(
       mesh.numberOfCells(), PUGS_LAMBDA(CellId j) {
@@ -484,14 +486,15 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
           momentum_fluxes += Fjr(j, R);
           energy_fluxes += dot(Fjr(j, R), ur[r]);
         }
-        const Rdxd cauchy_green_fluxes = gradv * CG[j] + CG[j] * transpose(gradv);
-        const double dt_over_Mj        = dt / (rho[j] * Vj[j]);
-        const double dt_over_Vj        = dt / Vj[j];
+        // TODO
+        // const Rdxd cauchy_green_fluxes = gradv * CG[j] + CG[j] * transpose(gradv);
+        const double dt_over_Mj = dt / (rho[j] * Vj[j]);
+        const double dt_over_Vj = dt / Vj[j];
         new_u[j] += dt_over_Mj * momentum_fluxes;
         new_E[j] += dt_over_Mj * energy_fluxes;
-        new_CG[j] += dt_over_Vj * cauchy_green_fluxes;
-        new_CG[j] += transpose(new_CG[j]);
-        new_CG[j] *= 0.5;
+        // new_CG[j] += dt_over_Vj * cauchy_green_fluxes;
+        // new_CG[j] += transpose(new_CG[j]);
+        // new_CG[j] *= 0.5;
       });
 
     CellValue<const double> new_Vj = MeshDataManager::instance().getMeshData(*new_mesh).Vj();
@@ -502,7 +505,7 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
     return {new_mesh, std::make_shared<DiscreteFunctionVariant>(DiscreteScalarFunction(new_mesh, new_rho)),
             std::make_shared<DiscreteFunctionVariant>(DiscreteVectorFunction(new_mesh, new_u)),
             std::make_shared<DiscreteFunctionVariant>(DiscreteScalarFunction(new_mesh, new_E)),
-            std::make_shared<DiscreteFunctionVariant>(DiscreteTensorFunction(new_mesh, new_CG))};
+            std::make_shared<DiscreteFunctionVariant>(DiscreteTensorFunction(new_mesh, new_sigma))};
   }
 
   std::tuple<std::shared_ptr<const IMesh>,
@@ -514,7 +517,8 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
                const std::shared_ptr<const DiscreteFunctionVariant>& rho,
                const std::shared_ptr<const DiscreteFunctionVariant>& u,
                const std::shared_ptr<const DiscreteFunctionVariant>& E,
-               const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+               const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+               const std::shared_ptr<const DiscreteFunctionVariant>& p,
                const std::shared_ptr<const ItemValueVariant>& ur,
                const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr) const
   {
@@ -532,7 +536,8 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
                               rho->get<DiscreteScalarFunction>(),       //
                               u->get<DiscreteVectorFunction>(),         //
                               E->get<DiscreteScalarFunction>(),         //
-                              CG->get<DiscreteTensorFunction>(),        //
+                              sigma->get<DiscreteTensorFunction>(),     //
+                              p->get<DiscreteScalarFunction>(),         //
                               ur->get<NodeValue<const Rd>>(),           //
                               Fjr->get<NodeValuePerCell<const Rd>>());
   }
@@ -547,14 +552,14 @@ class HypoelasticSolverHandler::HypoelasticSolver final : public HypoelasticSolv
         const std::shared_ptr<const DiscreteFunctionVariant>& rho,
         const std::shared_ptr<const DiscreteFunctionVariant>& u,
         const std::shared_ptr<const DiscreteFunctionVariant>& E,
-        const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+        const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
         const std::shared_ptr<const DiscreteFunctionVariant>& aL,
         const std::shared_ptr<const DiscreteFunctionVariant>& aT,
-        const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+        const std::shared_ptr<const DiscreteFunctionVariant>& p,
         const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list) const
   {
-    auto [ur, Fjr] = compute_fluxes(solver_type, rho, aL, aT, u, sigma, bc_descriptor_list);
-    return apply_fluxes(dt, rho, u, E, CG, ur, Fjr);
+    auto [ur, Fjr] = compute_fluxes(solver_type, rho, aL, aT, u, sigma, p, bc_descriptor_list);
+    return apply_fluxes(dt, rho, u, E, sigma, p, ur, Fjr);
   }
 
   HypoelasticSolver()                    = default;
diff --git a/src/scheme/HypoelasticSolver.hpp b/src/scheme/HypoelasticSolver.hpp
index 8664f47eb..aa2501f3a 100644
--- a/src/scheme/HypoelasticSolver.hpp
+++ b/src/scheme/HypoelasticSolver.hpp
@@ -34,6 +34,7 @@ class HypoelasticSolverHandler
       const std::shared_ptr<const DiscreteFunctionVariant>& aT,
       const std::shared_ptr<const DiscreteFunctionVariant>& u,
       const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+      const std::shared_ptr<const DiscreteFunctionVariant>& p,
       const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list) const = 0;
 
     virtual std::tuple<std::shared_ptr<const IMesh>,
@@ -45,7 +46,8 @@ class HypoelasticSolverHandler
                  const std::shared_ptr<const DiscreteFunctionVariant>& rho,
                  const std::shared_ptr<const DiscreteFunctionVariant>& u,
                  const std::shared_ptr<const DiscreteFunctionVariant>& E,
-                 const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+                 const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
+                 const std::shared_ptr<const DiscreteFunctionVariant>& p,
                  const std::shared_ptr<const ItemValueVariant>& ur,
                  const std::shared_ptr<const SubItemValuePerItemVariant>& Fjr) const = 0;
 
@@ -59,7 +61,7 @@ class HypoelasticSolverHandler
           const std::shared_ptr<const DiscreteFunctionVariant>& rho,
           const std::shared_ptr<const DiscreteFunctionVariant>& u,
           const std::shared_ptr<const DiscreteFunctionVariant>& E,
-          const std::shared_ptr<const DiscreteFunctionVariant>& CG,
+          const std::shared_ptr<const DiscreteFunctionVariant>& sigma,
           const std::shared_ptr<const DiscreteFunctionVariant>& aL,
           const std::shared_ptr<const DiscreteFunctionVariant>& aT,
           const std::shared_ptr<const DiscreteFunctionVariant>& p,
-- 
GitLab