From d32c89f1baec2bd86659682c48aa6c1f386d01de Mon Sep 17 00:00:00 2001 From: Sebastien Gilles <sebastien.gilles@inria.fr> Date: Thu, 22 Oct 2015 09:28:57 +0200 Subject: [PATCH] #718 FSI/hyperelasticity: cut references to static iteration. --- .../Hyperelasticity/Policy.hxx | 30 ++-- .../VariationalFormulation.hpp | 10 +- .../VariationalFormulation.hxx | 149 +++--------------- 3 files changed, 39 insertions(+), 150 deletions(-) diff --git a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/Policy.hxx b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/Policy.hxx index 741255a3e1..05c0b82355 100644 --- a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/Policy.hxx +++ b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/Policy.hxx @@ -53,8 +53,6 @@ namespace HappyHeart } - - template < class LawPolicyT, @@ -92,21 +90,19 @@ namespace HappyHeart auto& variational_formulation = GetNonCstVariationalFormulation(); const auto& numbering_subset = variational_formulation.GetNumberingSubset(); - - - static bool first = true; - - if (first) - { - std::cout << "IMPLICIT SOLID MATRIX = " << std::endl; - variational_formulation.GetSystemMatrix(numbering_subset, numbering_subset).View(variational_formulation.MpiHappyHeart(), "/Users/sebastien/Desktop/ImplicitSolid.m", - __FILE__, __LINE__, - PETSC_VIEWER_ASCII_MATLAB - ); - - first = false; - } - +// static bool first = true; +// +// if (first) +// { +// std::cout << "IMPLICIT SOLID MATRIX = " << std::endl; +// variational_formulation.GetSystemMatrix(numbering_subset, numbering_subset).View(variational_formulation.MpiHappyHeart(), "/Users/sebastien/Desktop/ImplicitSolid.m", +// __FILE__, __LINE__, +// PETSC_VIEWER_ASCII_MATLAB +// ); +// +// first = false; +// } +// variational_formulation.SolveNonLinear(numbering_subset, numbering_subset); } diff --git a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hpp b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hpp index ec102e028c..699ea16bb2 100644 --- a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hpp +++ b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hpp @@ -222,15 +222,7 @@ namespace HappyHeart */ void ComputeResidual(); - - void ComputeStaticTangent(); - - void ComputeStaticResidual(); - - void ComputeDynamicTangent(); - - void ComputeDynamicResidual(); - + //! Prepare vectors and matrices before assembling. void PrepareMatricesAndVectorsBeforeAssembling(); diff --git a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hxx b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hxx index 8885d711c7..eebcf5445d 100644 --- a/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hxx +++ b/Sources/ModelInstances/FSI_EI/SolidVariationalFormulationPolicy/Hyperelasticity/VariationalFormulation.hxx @@ -304,7 +304,7 @@ namespace HappyHeart // Assemble stiffness (depends upon the time scheme; vm types is used here to call the proper // assembling operation(s)). HyperelasticityNS::Private::AssembleStiffness(this->GetStiffnessOperator(), - this->GetTimeManager().GetStaticOrDynamic() == StaticOrDynamic::static_, + false, is_first_dynamic_call, vm); @@ -323,123 +323,6 @@ namespace HappyHeart const auto& numbering_subset = GetNumberingSubset(); this->GetNonCstSystemRhs(numbering_subset).ZeroEntries(__FILE__, __LINE__); - switch(this->GetTimeManager().GetStaticOrDynamic()) - { - case StaticOrDynamic::static_: - ComputeStaticResidual(); - break; - case StaticOrDynamic::dynamic_: - ComputeDynamicResidual(); - break; - } - - this->template ApplyEssentialBoundaryCondition<OperatorNS::Nature::linear>(numbering_subset, - numbering_subset); - } - - - template - < - class LawPolicyT, - HyperelasticityNS::TimeScheme TimeSchemeT - > - inline void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> - ::ComputeTangent() - { - const auto& numbering_subset = GetNumberingSubset(); - this->GetNonCstSystemMatrix(numbering_subset, numbering_subset).ZeroEntries(__FILE__, __LINE__); - - switch(this->GetTimeManager().GetStaticOrDynamic()) - { - case StaticOrDynamic::static_: - ComputeStaticTangent(); - break; - case StaticOrDynamic::dynamic_: - ComputeDynamicTangent(); - break; - } - - this->template ApplyEssentialBoundaryCondition<OperatorNS::Nature::bilinear>(numbering_subset, - numbering_subset); - - static bool first = true; - - if (first) - { - std::cout << "IMPLICIT SOLID MATRIX = " << std::endl; - this->GetSystemMatrix(numbering_subset, numbering_subset).View(this->MpiHappyHeart(), "/Users/sebastien/Desktop/ImplicitSolid.m", - __FILE__, __LINE__, - PETSC_VIEWER_ASCII_MATLAB - ); - - first = false; - } - - } - - - - - template - < - class LawPolicyT, - HyperelasticityNS::TimeScheme TimeSchemeT - > - void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> - ::ComputeStaticResidual() - { - using namespace HyperelasticityNS; - - const auto& numbering_subset = this->GetNumberingSubset(); - - auto& rhs = this->GetNonCstSystemRhs(numbering_subset); - rhs.ZeroEntries(__FILE__, __LINE__); - const auto& vectors_and_matrices = this->GetNonCstVectorsAndMatrices(); - - Wrappers::Petsc::AXPY(-1., - vectors_and_matrices.GetForce(), - rhs, - __FILE__, __LINE__); - - dof_source_parent::AddToRhs(rhs); - - HyperelasticityNS::Private::ComputeStaticTimeSchemeResidualContribution(vectors_and_matrices, rhs); - } - - - - template - < - class LawPolicyT, - HyperelasticityNS::TimeScheme TimeSchemeT - > - void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> - ::ComputeStaticTangent() - { - const auto& numbering_subset = this->GetNumberingSubset(); - const auto& vectors_and_matrices = this->GetVectorsAndMatrices(); - - auto& system_matrix = this->GetNonCstSystemMatrix(numbering_subset, numbering_subset); - - system_matrix.Copy(vectors_and_matrices.GetMatrixNewStiffness(), - __FILE__, __LINE__, SAME_NONZERO_PATTERN); - - HyperelasticityNS::Private::ComputeStaticTimeSchemeTangentContribution(vectors_and_matrices, system_matrix); - } - - - - - template - < - class LawPolicyT, - HyperelasticityNS::TimeScheme TimeSchemeT - > - void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> - ::ComputeDynamicResidual() - { - const auto& numbering_subset = this->GetNumberingSubset(); - auto& rhs = this->GetNonCstSystemRhs(numbering_subset); auto& vectors_and_matrices = this->GetNonCstVectorsAndMatrices(); @@ -469,6 +352,9 @@ namespace HappyHeart HyperelasticityNS::Private::ComputeDynamicTimeSchemeResidualContribution(vectors_and_matrices, rhs); dof_source_parent::AddToRhs(rhs); + + this->template ApplyEssentialBoundaryCondition<OperatorNS::Nature::linear>(numbering_subset, + numbering_subset); } @@ -477,27 +363,42 @@ namespace HappyHeart class LawPolicyT, HyperelasticityNS::TimeScheme TimeSchemeT > - void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> - ::ComputeDynamicTangent() + inline void VariationalFormulationHyperElasticity<LawPolicyT, TimeSchemeT> + ::ComputeTangent() { - const auto& numbering_subset = this->GetNumberingSubset(); + const auto& numbering_subset = GetNumberingSubset(); + this->GetNonCstSystemMatrix(numbering_subset, numbering_subset).ZeroEntries(__FILE__, __LINE__); auto& system_matrix = this->GetNonCstSystemMatrix(numbering_subset, numbering_subset); const auto& vectors_and_matrices = this->GetVectorsAndMatrices(); // Now all elements are settled to build the system. { - // Tangent - system_matrix.Copy(vectors_and_matrices.GetMassPerSquareTime(), __FILE__, __LINE__); - HyperelasticityNS::Private::ComputeDynamicTimeSchemeTangentContribution(vectors_and_matrices, system_matrix); } + this->template ApplyEssentialBoundaryCondition<OperatorNS::Nature::bilinear>(numbering_subset, + numbering_subset); + + static bool first = true; + + if (first) + { + std::cout << "IMPLICIT SOLID MATRIX = " << std::endl; + this->GetSystemMatrix(numbering_subset, numbering_subset).View(this->MpiHappyHeart(), "/Users/sebastien/Desktop/ImplicitSolid.m", + __FILE__, __LINE__, + PETSC_VIEWER_ASCII_MATLAB + ); + + first = false; + } + } + template < class LawPolicyT, -- GitLab