From 626a094538cb772a1f709fffe5b6f991ac3b25de Mon Sep 17 00:00:00 2001
From: "laura.stengel" <laura.stengel@kit.edu>
Date: Thu, 28 Nov 2024 15:13:26 +0100
Subject: [PATCH] adapted call of discretizations

---
 src/coupled/solvers/SegregatedSolver.cpp      |  4 ++--
 src/coupled/transfers/MultiPartTransfer.cpp   |  6 +++---
 src/elasticity/assemble/IElasticity.cpp       |  2 +-
 .../solvers/IterativePressureSolver.cpp       |  2 +-
 src/electrophysiology/assemble/Monodomain.cpp | 19 ++++++++++---------
 src/electrophysiology/solvers/ElphySolver.cpp |  2 +-
 6 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/coupled/solvers/SegregatedSolver.cpp b/src/coupled/solvers/SegregatedSolver.cpp
index ea9fd8f3b..b302d0527 100644
--- a/src/coupled/solvers/SegregatedSolver.cpp
+++ b/src/coupled/solvers/SegregatedSolver.cpp
@@ -353,11 +353,11 @@ bool SegregatedSolverOnCells::Method(IElphyAssemble &elphyAssemble, IElasticity
                               Vector &potential,
                               Vector &displacement) {
   const Meshes &M = displacement.GetMeshes();
-  LagrangeDiscretization disc0(M, 0, 1);
+  auto disc0 = std::make_shared<LagrangeDiscretization>(M, 0, 1);
   Vector gamma_f_c(disc0);
   gamma_f_c = 0;
   const Meshes &Mpot = potential.GetMeshes();
-  LagrangeDiscretization disc0pot(Mpot, 0, 1);
+  auto disc0pot = std::make_shared<LagrangeDiscretization>(Mpot, 0, 1);
   Vector gamma_f_c_pot(disc0pot);
   gamma_f_c_pot = 0;
 
diff --git a/src/coupled/transfers/MultiPartTransfer.cpp b/src/coupled/transfers/MultiPartTransfer.cpp
index 3f5345816..2a3a7e29f 100644
--- a/src/coupled/transfers/MultiPartTransfer.cpp
+++ b/src/coupled/transfers/MultiPartTransfer.cpp
@@ -111,7 +111,7 @@ void MultiPartLagrangeTransfer::ProlongateCell(const Vector &coarse, Vector &fin
   const Meshes &M_coarse = coarse.GetMeshes();
   int fineLevel=M_fine.Level();
   int coarseLevel=M_coarse.Level();
-  LagrangeDiscretization discFine (M_fine, 0, 1);
+  auto discFine = std::make_shared<LagrangeDiscretization>(M_fine, 0, 1);
   fine = 0.0;
   if(fineLevel!=coarseLevel){
     std::unique_ptr<Vector> fineNew;
@@ -211,8 +211,8 @@ void MultiPartLagrangeTransfer::ProjectCells(Vector &coarse, const Vector &fine)
 
   coarse = 0.0;
   if(fineLevel!=coarseLevel){
-    LagrangeDiscretization discFine (M_fine, 0, 1);
-    LagrangeDiscretization discCoarse (M_coarse, 0, 1);
+    auto discFine = std::make_shared<LagrangeDiscretization>(M_fine, 0, 1);
+    auto discCoarse = std::make_shared<LagrangeDiscretization>(M_coarse, 0, 1);
 
     std::unique_ptr<Vector> finePerStep;
     std::unique_ptr<Vector> fineCoarsePerStep;
diff --git a/src/elasticity/assemble/IElasticity.cpp b/src/elasticity/assemble/IElasticity.cpp
index 6e4ed0dcd..3f715729e 100644
--- a/src/elasticity/assemble/IElasticity.cpp
+++ b/src/elasticity/assemble/IElasticity.cpp
@@ -25,7 +25,7 @@ void IElasticity::SetInitialValue(Vector &u) {
   eProblem.Initialize(StepSize(), Time(), ChamberVolume(u));
   const Meshes &M = u.GetMeshes();
   auto disc03 = std::make_shared<LagrangeDiscretization>(M, 0, 3);
-  gamma_c= !Prestress ? std::make_unique<Vector>(*disc03,prestressLevel) : std::make_unique<Vector>(*disc03);
+  gamma_c= !Prestress ? std::make_unique<Vector>(disc03,prestressLevel) : std::make_unique<Vector>(disc03);
 
   if (!Prestress) {
     Prestress = std::make_unique<Vector>(0.0, u);
diff --git a/src/elasticity/solvers/IterativePressureSolver.cpp b/src/elasticity/solvers/IterativePressureSolver.cpp
index 5b0cd9d57..d3299f74e 100644
--- a/src/elasticity/solvers/IterativePressureSolver.cpp
+++ b/src/elasticity/solvers/IterativePressureSolver.cpp
@@ -89,7 +89,7 @@ void CalculatePrestress(IElasticity &assemble, Vector &u) {
   Config::Get("PrestressSteps", prestressSteps);
   int prestressLevel=0;
   Config::Get("PrestressLevel", prestressLevel);
-  Vector uPrestressLevel(assemble.GetDisc(),prestressLevel);
+  Vector uPrestressLevel(assemble.GetSharedDisc(),prestressLevel);
   uPrestressLevel.Accumulate();
   IterativePressureSolver prestressSolver(assemble.GetElasticityProblem(), prestressSteps);
   prestressSolver.Method(assemble, uPrestressLevel);
diff --git a/src/electrophysiology/assemble/Monodomain.cpp b/src/electrophysiology/assemble/Monodomain.cpp
index 3c2bb6a1a..aba40c5c7 100644
--- a/src/electrophysiology/assemble/Monodomain.cpp
+++ b/src/electrophysiology/assemble/Monodomain.cpp
@@ -43,7 +43,7 @@ void Monodomain::updateExternalCurrent(const Vector &V) {
     double tNew = Time() + timeUpdateIext;
     double tHalve = Time() + (StepSize() * 0.5);
     for (row r = V.rows(); r != V.rows_end(); ++r) {
-      for (int j = 0; j < r.n(); ++j) {
+      for (int j = 0; j < r.NumberOfDofs(); ++j) {
         (*Iext)(r, j) = excitationFunc(elphyModel.TimeScale() * tNew, Amplitude(excData, r, j),
                                        elphyModel.TimeScale() * Excitation(excData, r, j),
                                        elphyModel.TimeScale() * Duration(excData, r, j));
@@ -204,7 +204,7 @@ void MonodomainLINodes::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion and DVIion");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -218,7 +218,7 @@ void MonodomainLINodes::updateIionVecs(const Vectors &VCW) {
 void MonodomainLINodes::updateIion(const Vectors &VCW) {
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -232,7 +232,7 @@ void MonodomainLINodes::updateDVIion(const Vectors &VCW) {
 
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -487,7 +487,7 @@ void MonodomainFullNewton::Jacobi(const cell &c, const Vector &V, Matrix &jacobi
 
 void MonodomainFullNewton::updateVCW(const Vectors &VCW) {
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         (*VACAW)[i](r, j) = VCW[i](r, j);
       }
@@ -548,7 +548,7 @@ void MonodomainSemiImplicitNodes::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -610,7 +610,7 @@ void MonodomainSemiImplicitCells::updateIionVecs(const Vectors &VCW) {
   vout(10).StartBlock("Update Iion ");
   std::vector<double> vcw(elphyModel.ElphySize());
   for (row r = VCW[0].rows(); r != VCW[0].rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       for (int i = 0; i < elphyModel.ElphySize(); i++) {
         vcw[i] = VCW[i](r, j);
       }
@@ -655,13 +655,14 @@ void MonodomainSemiImplicitCellsIextPerCell::updateExternalCurrent(const Vector
 }
 void MonodomainSemiImplicitCellsIextPerCell::SetInitialValue(Vector &V) {
 
-  Iext_cells=std::make_unique<Vector>(0.0,*disc0);
+  Iext_cells=std::make_unique<Vector>(0.0,disc0);//stimmt das?
+  // vorher: Iext_cells=std::make_unique<Vector>(0.0,*disc0);
 
   Vector amplitude( V);
   Vector excitation(V);
   Vector duration( V);
   for (row r = (V).rows(); r != (V).rows_end(); ++r) {
-    for (int j = 0; j < r.n(); ++j) {
+    for (int j = 0; j < r.NumberOfDofs(); ++j) {
       amplitude(r,j)=Amplitude(ExcitationData(), r, j);
       excitation(r,j)=Excitation(ExcitationData(), r, j);
       duration(r,j)=Duration(ExcitationData(), r, j);
diff --git a/src/electrophysiology/solvers/ElphySolver.cpp b/src/electrophysiology/solvers/ElphySolver.cpp
index 75627c182..40eea2d4a 100644
--- a/src/electrophysiology/solvers/ElphySolver.cpp
+++ b/src/electrophysiology/solvers/ElphySolver.cpp
@@ -74,7 +74,7 @@ GetElphySolver(MCellModel &cellModel, const Vector &excitationData) {
 
 void ElphySolver::printVariableOnCells(IElphyAssemble &A,const Vector &var,const std::string &varname) const{
   const Meshes &mesh = var.GetMeshes();
-  LagrangeDiscretization disc0_var(mesh, 0, 1);
+  auto disc0_var = std::make_shared<LagrangeDiscretization>(mesh, 0, 1);
   Vector variable(disc0_var);
   variable=0;
   for(cell c= var.cells(); c != var.cells_end(); ++c){
-- 
GitLab