Skip to content
Snippets Groups Projects
Commit 24374806 authored by akbib's avatar akbib Committed by akbib@FU-BERLIN.DE
Browse files

store local linearization and hessian in shared_ptr and add a setup method

[[Imported from SVN: r11183]]
parent 8f3d8d99
Branches
Tags
No related merge requests found
...@@ -36,6 +36,10 @@ private: ...@@ -36,6 +36,10 @@ private:
typedef typename GridType::template Codim<0>::LeafIterator ElementIterator; typedef typename GridType::template Codim<0>::LeafIterator ElementIterator;
public: public:
GeomExactStVenantMaterial() :
E_(1.0),
nu_(0.3)
{}
GeomExactStVenantMaterial(const Basis& basis, ctype E, ctype nu) : GeomExactStVenantMaterial(const Basis& basis, ctype E, ctype nu) :
localLinearization_(E,nu), localLinearization_(E,nu),
...@@ -45,6 +49,20 @@ public: ...@@ -45,6 +49,20 @@ public:
nu_(nu) nu_(nu)
{} {}
void setup(ctype E, ctype nu)
{
E_ = E;
nu_ = nu;
if (localLinearization_)
localLinearization_.reset();
if (localHessian_)
localHessian_.reset();
localLinearization_ = Dune::shared_ptr<LocalLinearization>(new LocalLinearization(E,nu));
localHessian_ = Dune::shared_ptr<LocalHessian>(new LocalHessian(E,nu));
}
//! Evaluate the strain energy //! Evaluate the strain energy
template <class CoeffType> template <class CoeffType>
ctype energy(const CoeffType& coeff) ctype energy(const CoeffType& coeff)
...@@ -100,20 +118,20 @@ public: ...@@ -100,20 +118,20 @@ public:
} }
//! Return the local assembler of the first derivative of the strain energy //! Return the local assembler of the first derivative of the strain energy
LocalLinearization& firstDerivative() {return localLinearization_;} LocalLinearization& firstDerivative() {return *localLinearization_;}
//! Return the local assembler of the second derivative of the strain energy //! Return the local assembler of the second derivative of the strain energy
LocalHessian& secondDerivative() {return localHessian_;} LocalHessian& secondDerivative() {return *localHessian_;}
//! Return the global basis //! Return the global basis
const Basis& basis() {return basis_;} const Basis& basis() {return basis_;}
private: private:
//! First derivative of the strain energy //! First derivative of the strain energy
LocalLinearization localLinearization_; Dune::shared_ptr<LocalLinearization> localLinearization_;
//! Second derivative of the strain energy //! Second derivative of the strain energy
LocalHessian localHessian_; Dune::shared_ptr<LocalHessian> localHessian_;
//! Global basis used for the spatial discretization //! Global basis used for the spatial discretization
const Basis& basis_; const Basis& basis_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment