diff --git a/src/gsMaterialMatrixBase.h b/src/gsMaterialMatrixBase.h index 6f2147e..cef3f66 100644 --- a/src/gsMaterialMatrixBase.h +++ b/src/gsMaterialMatrixBase.h @@ -196,6 +196,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void pstretch_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } /** @@ -205,6 +206,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void pstretchDir_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } /** @@ -214,6 +216,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void pstress_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } /** @@ -223,6 +226,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void pstressDir_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } /** @@ -242,6 +246,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void parameters_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } @@ -252,6 +257,7 @@ class gsMaterialMatrixBase * @param[in] u The in-plane shell coordinates to be eveluated on * @param result The result */ + GISMO_DEPRECATED virtual void transform_into(const index_t /*patch*/, const gsMatrix& /*u*/, gsMatrix& /*result*/) const { GISMO_NO_IMPLEMENTATION; } diff --git a/src/gsMaterialMatrixBaseDim.hpp b/src/gsMaterialMatrixBaseDim.hpp index eb8d3cb..8ca1bfc 100644 --- a/src/gsMaterialMatrixBaseDim.hpp +++ b/src/gsMaterialMatrixBaseDim.hpp @@ -178,7 +178,6 @@ gsMatrix gsMaterialMatrixBaseDim::eval3D_deformation(const index_t pat this->_computePoints(patch,u); gsMatrix result(9, u.cols() * z.rows()); - std::pair,gsMatrix> res; index_t colIdx; for (index_t k=0; k!=u.cols(); k++) { diff --git a/src/gsMaterialMatrixNonlinear.h b/src/gsMaterialMatrixNonlinear.h index c57569e..41d3238 100644 --- a/src/gsMaterialMatrixNonlinear.h +++ b/src/gsMaterialMatrixNonlinear.h @@ -159,6 +159,9 @@ class gsMaterialMatrixNonlinear : public gsMaterialMatrixBaseDim /// See \ref gsMaterialMatrixBase for details gsMatrix eval3D_CauchyVector(const index_t patch, const gsMatrix & u, const gsMatrix& z, enum MaterialOutput out = MaterialOutput::Generic) const override; + /// See \ref gsMaterialMatrixBase for details + gsMatrix eval3D_pstretch(const index_t patch, const gsMatrix & u, const gsMatrix& z) const override; + /// See \ref gsMaterialMatrixBase for details gsMatrix eval3D_pstress(const index_t patch, const gsMatrix & u, const gsMatrix& z, enum MaterialOutput out = MaterialOutput::Generic) const override; @@ -569,6 +572,14 @@ class gsMaterialMatrixNonlinear : public gsMaterialMatrixBaseDim template typename std::enable_if>::type _eval3D_pstress_impl(const index_t patch, const gsMatrix & u, const gsMatrix& z) const; + // Stretch overrides + template + typename std::enable_if<_com, gsMatrix>::type + eval3D_pstretch_impl(const index_t patch, const gsMatrix & u, const gsMatrix& z) const; + template + typename std::enable_if>::type + eval3D_pstretch_impl(const index_t patch, const gsMatrix & u, const gsMatrix& z) const; + template typename std::enable_if<_mat==Material::MR, void>::type _setRatio_impl(const gsFunctionSet & Ratio); template diff --git a/src/gsMaterialMatrixNonlinear.hpp b/src/gsMaterialMatrixNonlinear.hpp index 34ba047..488a24c 100644 --- a/src/gsMaterialMatrixNonlinear.hpp +++ b/src/gsMaterialMatrixNonlinear.hpp @@ -563,6 +563,56 @@ gsMatrix gsMaterialMatrixNonlinear::eval3D_CauchyVe return this->eval3D_CauchyStress(patch,u,z,out); } +template +gsMatrix gsMaterialMatrixNonlinear::eval3D_pstretch(const index_t patch, const gsMatrix & u, const gsMatrix & z) const +{ + return eval3D_pstretch_impl(patch,u,z); +} + +template +template +typename std::enable_if< _comp, gsMatrix>::type +gsMaterialMatrixNonlinear::eval3D_pstretch_impl(const index_t patch, const gsMatrix & u, const gsMatrix & z) const +{ + this->_computePoints(patch,u); + + gsMatrix result(3, u.cols() * z.rows()); + std::pair,gsMatrix> res; + index_t colIdx; + + gsMatrix C33s = _eval3D_Compressible_C33(patch,u,z); + T C33; + + gsMatrix c; + for (index_t k=0; k!= u.cols(); k++) + { + for( index_t j=0; j < z.rows(); ++j ) // through-thickness points + { + colIdx = j*u.cols()+k; + this->_getMetric(k, z(j, k) * m_data.mine().m_Tmat(0, k)); // on point i, on height z(0,j) + + C33 = C33s(0,k); + + // Compute c + c.setZero(); + c.block(0,0,2,2) = m_data.mine().m_Gcov_def.block(0,0,2,2); + c(2,2) = C33; // c33 + + res = this->_evalStretch(c,m_data.mine().m_gcon_ori); + result.col(colIdx) = res.first; + } + } + return result; +} + +template +template +typename std::enable_if>::type +gsMaterialMatrixNonlinear::eval3D_pstretch_impl(const index_t patch, const gsMatrix & u, const gsMatrix & z) const +{ + return Base::eval3D_pstretch(patch,u,z); +} + template gsMatrix gsMaterialMatrixNonlinear::eval3D_pstress(const index_t patch, const gsMatrix & u, const gsMatrix & z, enum MaterialOutput out) const { diff --git a/src/gsThinShellUtils.h b/src/gsThinShellUtils.h index 57ede7f..eec8b42 100644 --- a/src/gsThinShellUtils.h +++ b/src/gsThinShellUtils.h @@ -26,7 +26,7 @@ #include #include -#include +#include # define MatExprType auto