G+Smo  24.08.0
Geometry + Simulation Modules
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gsMaterialMatrixNonlinear.h
Go to the documentation of this file.
1 
16 #pragma once
17 
21 #include <gsIO/gsOptionList.h>
22 #include <gsCore/gsFuncData.h>
23 
24 namespace gismo
25 {
26 
27 
40 template < short_t dim,
41  class T,
42  short_t matId,
43  bool comp,
44  enum Material mat = decodeMat_id<matId>::material,
45  enum Implementation imp = decodeMat_id<matId>::implementation
46  >
48 {
49 public:
50 
51  GISMO_OVERRIDE_CLONE_FUNCTION(gsMaterialMatrixNonlinear)
52 
54 
55  typedef typename Base::function_ptr function_ptr;
56 
64  const gsFunctionSet<T> & thickness);
65 
74  const gsFunctionSet<T> & thickness,
75  const std::vector<gsFunctionSet<T> *> &pars);
76 
84  const std::vector<gsFunctionSet<T> *> &pars);
85 
93  const std::vector<gsFunctionSet<T> *> &pars,
94  const gsFunctionSet<T> & Density);
95 
105  const gsFunctionSet<T> & thickness,
106  const std::vector<gsFunctionSet<T> *> &pars,
107  const gsFunctionSet<T> & Density);
108 
109 protected:
119  const gsFunctionSet<T> * thickness,
120  const std::vector<gsFunctionSet<T> *> &pars,
121  const gsFunctionSet<T> * Density);
122 
123 public:
126 
128  inline enum MatIntegration isMatIntegrated() const override {return MatIntegration::NotIntegrated; }
129 
131  inline enum MatIntegration isVecIntegrated() const override {return MatIntegration::NotIntegrated; }
132 
134  void defaultOptions() override;
135 
137  void pstretch_into(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const override;
138 
140  void pstretchDir_into(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const override;
141 
143  gsMatrix<T> eval3D_matrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
144 
146  gsMatrix<T> eval3D_matrix_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z, enum MaterialOutput out = MaterialOutput::Generic) const override;
147 
149  gsMatrix<T> eval3D_dmatrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
150 
152  gsMatrix<T> eval3D_vector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
153 
155  gsMatrix<T> eval3D_vector_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z, enum MaterialOutput out = MaterialOutput::Generic) const override;
156 
158  gsMatrix<T> eval3D_CauchyVector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
159 
161  gsMatrix<T> eval3D_pstress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
162 
164  gsMatrix<T> eval3D_pstressDir(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
165 
167  gsMatrix<T> eval3D_CauchyPStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
168 
170  gsMatrix<T> eval3D_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
171 
173  gsMatrix<T> eval3D_stress_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z, enum MaterialOutput out = MaterialOutput::Generic) const;
174 
176  gsMatrix<T> eval3D_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
177 
179  gsMatrix<T> eval3D_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
180 
182  void setYoungsModulus(const gsFunctionSet<T> & YoungsModulus) override;
183 
185  const function_ptr getYoungsModulus() const override;
186 
188  void setPoissonsRatio(const gsFunctionSet<T> & PoissonsRatio) override;
190  const function_ptr getPoissonsRatio() const override;
191 
193  void setRatio(const gsFunctionSet<T> & Ratio) override { _setRatio_impl<mat>(Ratio);}
195  const function_ptr getRatio() const override { return _getRatio_impl<mat>(); }
196 
198  void setMu(const index_t & i, const gsFunctionSet<T> & Mu_i) override { _setMu_impl<mat>(i,Mu_i); }
199 
201  const function_ptr getMu(const index_t & i) const override {return _getMu_impl<mat>(i);}
202 
204  void setAlpha(const index_t & i, const gsFunctionSet<T> & Alpha_i) override { _setAlpha_impl<mat>(i,Alpha_i); }
205 
207  const function_ptr getAlpha(const index_t & i) const override {return _getAlpha_impl<mat>(i);}
208 
210  std::ostream &print(std::ostream &os) const override;
211 
212 public:
214  typedef memory::shared_ptr< gsMaterialMatrixNonlinear > Ptr;
215 
217  typedef memory::unique_ptr< gsMaterialMatrixNonlinear > uPtr;
218 
219 protected:
226  void _initialize();
227 
228 private:
238  template<bool _com>
239  typename std::enable_if<_com, void>::type _pstretch_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
240 
250  template<bool _com>
251  typename std::enable_if<!_com, void>::type _pstretch_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
252 
262  template<bool _com>
263  typename std::enable_if<_com, void>::type _pstretchDir_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
264 
274  template<bool _com>
275  typename std::enable_if<!_com, void>::type _pstretchDir_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
276 
277 protected:
278 
288  gsMatrix<T> _eval3D_Incompressible_matrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
289  gsMatrix<T> _eval3D_Incompressible_matrix_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
290 
300  gsMatrix<T> _eval3D_Incompressible_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
301  gsMatrix<T> _eval3D_Incompressible_stress_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
302 
303  gsMatrix<T> _eval3D_Incompressible_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
304 
306  gsMatrix<T> _eval_Incompressible_CauchyVector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
307 
317  gsMatrix<T> _eval3D_Compressible_C33(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
318  gsMatrix<T> _eval3D_Compressible_C33(const gsMatrix<T> & Cmat, const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
319 
329  gsMatrix<T> _eval3D_Compressible_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
330 
340  gsMatrix<T> _eval3D_Incompressible_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
341 
343  gsMatrix<T> _eval_Compressible_CauchyVector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
344 
354  gsMatrix<T> _eval3D_Compressible_matrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
355  gsMatrix<T> _eval3D_Compressible_matrix_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
356 
366  gsMatrix<T> _eval3D_Compressible_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
367  gsMatrix<T> _eval3D_Compressible_stress_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
368 
369  gsMatrix<T> _eval3D_Compressible_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
370 
371  // TODO: Add docs and add implementations to private member functions
372  constexpr gsMatrix<T> dCijkl(const index_t patch, const gsVector<T> & u, const T z) const;
373 
374  constexpr T dCijkl_dCmn(const index_t i, const index_t j, const index_t k, const index_t l, const index_t m, const index_t n) const;
375 
376  constexpr T _dgconij_dCkl(const gsMatrix<T> & gcon, const index_t i, const index_t j, const index_t k, const index_t l) const;
377 
378 private:
379 
380  template <enum Material _mat, bool _comp>
381  constexpr typename std::enable_if< (!_comp && _mat==Material::NH), gsMatrix<T>>::type dCijkl_impl(const index_t patch, const gsVector<T> & u, const T z) const;
382 
383  template <enum Material _mat, bool _comp>
384  constexpr typename std::enable_if<!(!_comp && _mat==Material::NH), gsMatrix<T>>::type dCijkl_impl(const index_t patch, const gsVector<T> & u, const T z) const;
385 
386  template <enum Material _mat, bool _comp>
387  constexpr typename std::enable_if< (!_comp && _mat==Material::NH), T>::type dCijkl_dCmn_impl(const index_t i, const index_t j, const index_t k, const index_t l, const index_t m, const index_t n) const;
388 
389  template <enum Material _mat, bool _comp>
390  constexpr typename std::enable_if<!(!_comp && _mat==Material::NH), T>::type dCijkl_dCmn_impl(const index_t i, const index_t j, const index_t k, const index_t l, const index_t m, const index_t n) const;
391 
392 private:
393 
406  template<enum Material _mat, bool _com>
407  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_matrix_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
408  template<enum Material _mat, bool _com>
409  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_matrix_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
410 
423  template<enum Material _mat, bool _com>
424  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_matrix_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
425  template<enum Material _mat, bool _com>
426  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_matrix_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
427 
440  template<enum Material _mat, bool _com>
441  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_matrix_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
442  template<enum Material _mat, bool _com>
443  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_matrix_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
444 
445 
459  template <enum Material _mat, bool _comp>
460  typename std::enable_if<!(!_comp && _mat==Material::NH), gsMatrix<T>>::type _eval3D_dmatrix_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const;
461 
462  template <enum Material _mat, bool _comp>
463  typename std::enable_if< (!_comp && _mat==Material::NH), gsMatrix<T>>::type _eval3D_dmatrix_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const;
464 
466  template<enum Material _mat, bool _com>
467  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_CauchyVector_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
468 
481  template<enum Material _mat, bool _com>
482  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_detF_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
483  template<enum Material _mat, bool _com>
484  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_detF_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
485  template<enum Material _mat, bool _com>
486  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_detF_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
487 
489  template<enum Material _mat, bool _com>
490  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_CauchyVector_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
491 
504  template<enum Material _mat, bool _com>
505  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_stress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
506  template<enum Material _mat, bool _com>
507  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_stress_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
508  template<enum Material _mat, bool _com>
509  typename std::enable_if<_mat==Material::SvK, gsMatrix<T>>::type _eval3D_CauchyStress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
510 
512  template<enum Material _mat, bool _com>
513  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_CauchyVector_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
514 
527  template<enum Material _mat, bool _com>
528  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_stress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
529  template<enum Material _mat, bool _com>
530  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_stress_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z)const;
531  template<enum Material _mat, bool _com>
532  typename std::enable_if<_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_CauchyStress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
533 
546  template<enum Material _mat, bool _com>
547  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_stress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
548  template<enum Material _mat, bool _com>
549  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_stress_C_impl(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
550  template<enum Material _mat, bool _com>
551  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_CauchyStress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
552 
565  template<enum Material _mat, bool _com>
566  typename std::enable_if<!_com && !(_mat==Material::SvK), gsMatrix<T>>::type _eval3D_pstress_impl(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
567 
568  template<enum Material _mat>
569  typename std::enable_if<_mat==Material::MR, void>::type _setRatio_impl(const gsFunctionSet<T> & Ratio);
570  template<enum Material _mat>
571  typename std::enable_if<_mat!=Material::MR, void>::type _setRatio_impl(const gsFunctionSet<T> & Ratio);
572 
573  template<enum Material _mat>
574  typename std::enable_if<_mat==Material::MR, const function_ptr>::type _getRatio_impl() const;
575  template<enum Material _mat>
576  typename std::enable_if<_mat!=Material::MR, const function_ptr>::type _getRatio_impl() const;
577 
578  template<enum Material _mat>
579  typename std::enable_if<_mat==Material::OG, void>::type _setMu_impl(const index_t & i, const gsFunctionSet<T> & Mu_i);
580  template<enum Material _mat>
581  typename std::enable_if<_mat!=Material::OG, void>::type _setMu_impl(const index_t & i, const gsFunctionSet<T> & Mu_i);
582 
583  template<enum Material _mat>
584  typename std::enable_if<_mat==Material::OG, const function_ptr>::type _getMu_impl(const index_t & i) const;
585  template<enum Material _mat>
586  typename std::enable_if<_mat!=Material::OG, const function_ptr>::type _getMu_impl(const index_t & i) const;
587 
588  template<enum Material _mat>
589  typename std::enable_if<_mat==Material::OG, void>::type _setAlpha_impl(const index_t & i, const gsFunctionSet<T> & Alpha_i);
590  template<enum Material _mat>
591  typename std::enable_if<_mat!=Material::OG, void>::type _setAlpha_impl(const index_t & i, const gsFunctionSet<T> & Alpha_i);
592 
593  template<enum Material _mat>
594  typename std::enable_if<_mat==Material::OG, const function_ptr>::type _getAlpha_impl(const index_t & i) const;
595  template<enum Material _mat>
596  typename std::enable_if<_mat!=Material::OG, const function_ptr>::type _getAlpha_impl(const index_t & i) const;
597 
598 protected:
599 
607  constexpr T _Cijkl (const index_t i, const index_t j, const index_t k, const index_t l) const;
608 
618  constexpr T _Cijkl3D(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
619 
629  constexpr T _Cijkl (const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
630 
638  constexpr T _Sij (const index_t i, const index_t j) const;
639 
649  constexpr T _Sij (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
650 
658  constexpr T _Sii (const index_t i) const;
659 
668  constexpr T _Sii (const index_t i, const gsMatrix<T> & c) const;
669 
670 private:
672  // Incompressible formulations //
675  template<enum Material _mat, enum Implementation _imp>
676  constexpr typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
677  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
678 
680  template<enum Material _mat, enum Implementation _imp>
681  constexpr typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
682  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
683 
685  template<enum Material _mat, enum Implementation _imp>
686  constexpr typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
687  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
688 
690  template<enum Material _mat, enum Implementation _imp>
691  constexpr typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
692  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
694 
696  template<enum Material _mat, enum Implementation _imp>
697  constexpr typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
698  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
700 
702  template<enum Material _mat, enum Implementation _imp>
703  constexpr typename std::enable_if<_imp==Implementation::Spectral , T>::type
704  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
705 
707  template<enum Material _mat, enum Implementation _imp>
708  constexpr typename std::enable_if<_imp==Implementation::Generalized , T>::type
709  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
710 
711 
713  // Compressible formulations //
715 
721  template<enum Implementation _imp>
722  constexpr typename std::enable_if<_imp==Implementation::Spectral, T>::type
723  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
724 
726  template<enum Implementation _imp>
727  constexpr typename std::enable_if<!(_imp==Implementation::Spectral),T>::type
728  _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
729 
731  template<enum Material _mat, enum Implementation _imp>
732  constexpr typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
733  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
734 
736  template<enum Material _mat, enum Implementation _imp>
737  constexpr typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
738  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
739 
741  template<enum Material _mat, enum Implementation _imp>
742  constexpr typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
743  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
744 
746  template<enum Material _mat, enum Implementation _imp>
747  constexpr typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
748  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const
750 
752  template<enum Material _mat, enum Implementation _imp>
753  constexpr typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
754  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
755 
757  template<enum Material _mat, enum Implementation _imp>
758  constexpr typename std::enable_if<_imp==Implementation::Spectral , T>::type
759  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
760 
762  template<enum Material _mat, enum Implementation _imp>
763  constexpr typename std::enable_if<_imp==Implementation::Generalized , T>::type
764  _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
765 
766 
768  template<enum Material _mat, enum Implementation _imp>
769  constexpr typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
770  _Sij_impl(const index_t i, const index_t j) const;
771 
773  template<enum Material _mat, enum Implementation _imp>
774  constexpr typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
775  _Sij_impl(const index_t i, const index_t j) const;
776 
778  template<enum Material _mat, enum Implementation _imp>
779  constexpr typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
780  _Sij_impl(const index_t i, const index_t j) const;
781 
783  template<enum Material _mat, enum Implementation _imp>
784  constexpr typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
785  _Sij_impl(const index_t i, const index_t j) const
787 
789  template<enum Material _mat, enum Implementation _imp>
790  constexpr typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
791  _Sij_impl(const index_t i, const index_t j) const
793 
795  template<enum Material _mat, enum Implementation _imp>
796  constexpr typename std::enable_if<_imp==Implementation::Spectral , T>::type
797  _Sij_impl(const index_t i, const index_t j) const;
798 
800  template<enum Material _mat, enum Implementation _imp>
801  constexpr typename std::enable_if<_imp==Implementation::Generalized , T>::type
802  _Sij_impl(const index_t i, const index_t j) const;
803 
804 
806  template<enum Material _mat, enum Implementation _imp>
807  constexpr typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
808  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const
810 
812  template<enum Material _mat, enum Implementation _imp>
813  constexpr typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
814  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
815 
817  template<enum Material _mat, enum Implementation _imp>
818  constexpr typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
819  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
820 
822  template<enum Material _mat, enum Implementation _imp>
823  constexpr typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
824  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const
826 
828  template<enum Material _mat, enum Implementation _imp>
829  constexpr typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
830  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
831 
833  template<enum Material _mat, enum Implementation _imp>
834  constexpr typename std::enable_if<_imp==Implementation::Spectral , T>::type
835  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
836 
838  template<enum Material _mat, enum Implementation _imp>
839  constexpr typename std::enable_if<_imp==Implementation::Generalized , T>::type
840  _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
841 
842 protected:
850  constexpr T _dPsi (const index_t i, const index_t j) const;
851 
861  constexpr T _dPsi (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
862 
872  constexpr T _dPsi_vol(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
873 
882  constexpr T _d2Psi (const index_t i, const index_t j, const index_t k, const index_t l) const;
883 
894  constexpr T _d2Psi (const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
895 
906  constexpr T _d2Psi_vol(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
907 
917  constexpr T _dI_1 (const index_t i, const index_t j) const;
918 
930  constexpr T _dI_2 (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
931 
932 
933 
934 private:
935  /*
936  Note: when adding a new implementation, make sure to add the condition in the 'other' implementation : !(_mat==xx || ...)
937  */
938 
940  template<enum Material _mat>
941  constexpr typename std::enable_if<_mat==Material::NH, T>::type _dPsi_impl(const index_t i, const index_t j) const;
942 
944  template<enum Material _mat>
945  constexpr typename std::enable_if<_mat==Material::MR, T>::type _dPsi_impl(const index_t i, const index_t j) const;
946  // other
947  template<enum Material _mat>
948  constexpr typename std::enable_if<!(_mat==Material::NH || _mat==Material::MR), T>::type _dPsi_impl(const index_t i, const index_t j) const
950  // add other
951 
953  template<enum Material _mat>
954  constexpr typename std::enable_if<_mat==Material::NH, T>::type _dPsi_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
955 
957  template<enum Material _mat>
958  constexpr typename std::enable_if<_mat==Material::MR, T>::type _dPsi_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
959 
961  template<enum Material _mat>
962  constexpr typename std::enable_if<_mat==Material::NH_ext, T>::type _dPsi_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
963  // other
964  template<enum Material _mat>
965  constexpr typename std::enable_if<!(_mat==Material::NH || _mat==Material::MR || _mat==Material::NH_ext), T>::type _dPsi_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const
967 
969  template<enum Material _mat>
970  constexpr typename std::enable_if<_mat==Material::NH, T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
971 
973  template<enum Material _mat>
974  constexpr typename std::enable_if<_mat==Material::MR, T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
975  // other
976  template<enum Material _mat>
977  constexpr typename std::enable_if<!(_mat==Material::NH || _mat==Material::MR), T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
979 
981  template<enum Material _mat>
982  constexpr typename std::enable_if<_mat==Material::NH, T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
983 
985  template<enum Material _mat>
986  constexpr typename std::enable_if<_mat==Material::MR, T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
987 
989  template<enum Material _mat>
990  constexpr typename std::enable_if<_mat==Material::NH_ext, T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
991  // other
992  template<enum Material _mat>
993  constexpr typename std::enable_if<!(_mat==Material::NH || _mat==Material::MR || _mat==Material::NH_ext), T>::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const
995 protected:
997  // Stretch based formulation //
999 
1006  constexpr T _dPsi_da (const index_t a) const;
1007 
1014  constexpr T _d2Psi_dab (const index_t a, const index_t b) const;
1015 
1021  constexpr T _dPsi_da_vol(const index_t a) const;
1022 
1028  constexpr T _d2Psi_dab_vol(const index_t a, const index_t b) const;
1029 
1035  constexpr T _dJ_da (const index_t a) const;
1036 
1042  constexpr T _d2J_dab (const index_t a, const index_t b) const;
1043 
1047  constexpr T _p() const;
1048 
1054  constexpr T _dp_da (const index_t a) const;
1055 
1061  constexpr T _Sa (const index_t a) const;
1062 
1068  constexpr T _dSa_db (const index_t a, const index_t b) const;
1069 
1075  constexpr T _Cabcd (const index_t a, const index_t b, const index_t c, const index_t d) const;
1076 
1077 private:
1078  // ----------------------------------------------------------------------------------
1079 
1081  template<enum Material _mat, bool _com>
1082  constexpr typename std::enable_if<_com && (_mat==Material::NH), T>::type _dPsi_da_impl(const index_t a) const;
1083 
1085  template<enum Material _mat, bool _com>
1086  constexpr typename std::enable_if<!_com && (_mat==Material::NH), T>::type _dPsi_da_impl(const index_t a) const;
1087 
1089  template<enum Material _mat, bool _com>
1090  constexpr typename std::enable_if<_com && (_mat==Material::MR), T>::type _dPsi_da_impl(const index_t a) const;
1091 
1093  template<enum Material _mat, bool _com>
1094  constexpr typename std::enable_if<!_com && (_mat==Material::MR), T>::type _dPsi_da_impl(const index_t a) const;
1095 
1097  template<enum Material _mat, bool _com>
1098  constexpr typename std::enable_if<_com && (_mat==Material::OG), T>::type _dPsi_da_impl(const index_t a) const;
1099 
1101  template<enum Material _mat, bool _com>
1102  constexpr typename std::enable_if<!_com && (_mat==Material::OG), T>::type _dPsi_da_impl(const index_t a) const;
1103 
1105  template<enum Material _mat, bool _com>
1106  constexpr typename std::enable_if<_com && (_mat==Material::NH_ext), T>::type _dPsi_da_impl(const index_t a) const;
1107 
1109  template<enum Material _mat, bool _com>
1110  constexpr typename std::enable_if<!_com && (_mat==Material::NH_ext), T>::type _dPsi_da_impl(const index_t a) const
1112 
1113  // other
1114  template<enum Material _mat, bool _com>
1115  constexpr typename std::enable_if<
1116  !( _mat==Material::NH
1117  || _mat==Material::MR
1118  || _mat==Material::OG
1119  || _mat==Material::NH_ext
1120  )
1121  , T>::type _dPsi_da_impl(const index_t a) const
1123 
1124  // ----------------------------------------------------------------------------------
1125 
1127  template<enum Material _mat, bool _com>
1128  constexpr typename std::enable_if<_com && (_mat==Material::NH), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1129 
1131  template<enum Material _mat, bool _com>
1132  constexpr typename std::enable_if<!_com && (_mat==Material::NH), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1133 
1135  template<enum Material _mat, bool _com>
1136  constexpr typename std::enable_if<_com && (_mat==Material::MR), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1137 
1139  template<enum Material _mat, bool _com>
1140  constexpr typename std::enable_if<!_com && (_mat==Material::MR), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1141 
1143  template<enum Material _mat, bool _com>
1144  constexpr typename std::enable_if<_com && (_mat==Material::OG), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1145 
1147  template<enum Material _mat, bool _com>
1148  constexpr typename std::enable_if<!_com && (_mat==Material::OG), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1149 
1151  template<enum Material _mat, bool _com>
1152  constexpr typename std::enable_if<_com && (_mat==Material::NH_ext), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1153 
1155  template<enum Material _mat, bool _com>
1156  constexpr typename std::enable_if<!_com && (_mat==Material::NH_ext), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const
1158 
1159  // other
1160  template<enum Material _mat, bool _com>
1161  constexpr typename std::enable_if<
1162  !( _mat==Material::NH
1163  || _mat==Material::MR
1164  || _mat==Material::OG
1165  || _mat==Material::NH_ext
1166  )
1167  , T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const
1169 
1170  // ----------------------------------------------------------------------------------
1171 
1173  template<bool _com>
1174  constexpr typename std::enable_if<_com , T>::type _Sa_impl(const index_t a) const;
1175 
1177  template<bool _com>
1178  constexpr typename std::enable_if<!_com, T>::type _Sa_impl(const index_t a) const;
1179 
1180  // ----------------------------------------------------------------------------------
1181 
1183  template<bool _com>
1184  constexpr typename std::enable_if<_com , T>::type _dSa_db_impl(const index_t a, const index_t b) const;
1185 
1187  template<bool _com>
1188  constexpr typename std::enable_if<!_com, T>::type _dSa_db_impl(const index_t a, const index_t b) const;
1189 
1190  // ----------------------------------------------------------------------------------
1191 
1193  template<bool _com>
1194  constexpr typename std::enable_if<_com , T>::type _Cabcd_impl(const index_t a, const index_t b, const index_t c, const index_t d) const;
1195 
1197  template<bool _com>
1198  constexpr typename std::enable_if<!_com, T>::type _Cabcd_impl(const index_t a, const index_t b, const index_t c, const index_t d) const;
1199 
1200  // ----------------------------------------------------------------------------------
1201 
1202 protected:
1203  using Base::m_thickness;
1204  using Base::m_pars;
1205  using Base::m_density;
1206 
1207  // Geometric data
1208  using Base::m_data;
1209 
1210  using Base::m_options;
1211 
1212 private:
1213  static index_t delta(const index_t a, const index_t b)
1214  {
1215  return (a==b) ? 1 : 0;
1216  }
1217 
1218  static index_t idelta(const index_t a, const index_t b)
1219  {
1220  return (a!=b) ? 1 : 0;
1221  }
1222 };
1223 
1224 #ifdef GISMO_WITH_PYBIND11
1225 
1229  void pybind11_init_gsMaterialMatrixNH2i(pybind11::module &m);
1230  void pybind11_init_gsMaterialMatrixNH2c(pybind11::module &m);
1231 
1232  void pybind11_init_gsMaterialMatrixNH3i(pybind11::module &m);
1233  void pybind11_init_gsMaterialMatrixNH3c(pybind11::module &m);
1234 
1235  void pybind11_init_gsMaterialMatrixMR2i(pybind11::module &m);
1236  void pybind11_init_gsMaterialMatrixMR2c(pybind11::module &m);
1237 
1238  void pybind11_init_gsMaterialMatrixMR3i(pybind11::module &m);
1239  void pybind11_init_gsMaterialMatrixMR3c(pybind11::module &m);
1240 
1241  void pybind11_init_gsMaterialMatrixOG2i(pybind11::module &m);
1242  void pybind11_init_gsMaterialMatrixOG2c(pybind11::module &m);
1243 
1244  void pybind11_init_gsMaterialMatrixOG3i(pybind11::module &m);
1245  void pybind11_init_gsMaterialMatrixOG3c(pybind11::module &m);
1246 
1247 #endif // GISMO_WITH_PYBIND11
1248 
1249 } // namespace
1250 
1251 
1252 #ifndef GISMO_BUILD_LIB
1253 #include GISMO_HPP_HEADER(gsMaterialMatrixNonlinear.hpp)
1254 #endif
constexpr T _d2Psi_vol(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Provides the second (mixed) derivative of the volumetric part of the compressible strain energy densi...
Definition: gsMaterialMatrixNonlinear.hpp:2307
MaterialOutput
This class describes the output type.
Definition: gsMaterialMatrixUtils.h:98
void setPoissonsRatio(const gsFunctionSet< T > &PoissonsRatio) override
Sets the Poisson&#39;s Ratio.
Definition: gsMaterialMatrixNonlinear.hpp:1044
constexpr std::enable_if< _mat==Material::SvK &&_imp==Implementation::Analytical, T >::type _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Specialization for compressible Cijkl3D(i,j,k,l,c,cinv) for SvK materials implemented analytically...
Definition: gsMaterialMatrixNonlinear.hpp:1423
constexpr std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
Specialization for incompressible Cijkl(i,j,k,l) for OG materials implemented analytically (not imple...
Definition: gsMaterialMatrixNonlinear.h:692
std::enable_if< _com, void >::type _pstretchDir_into_impl(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const
Implementation of stretchDir_into, specialization for compressible materials.
void setAlpha(const index_t &i, const gsFunctionSet< T > &Alpha_i) override
Sets Alpha_i.
Definition: gsMaterialMatrixNonlinear.h:204
constexpr std::enable_if<!_com &&(_mat==Material::NH_ext), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for incompressible Extended NH materials (not implemented) ...
Definition: gsMaterialMatrixNonlinear.h:1110
void pstretch_into(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:209
This class defines hyperelastic material matrices.
Definition: gsMaterialMatrixNonlinear.h:47
#define GISMO_NO_IMPLEMENTATION
Definition: gsDebug.h:129
gsMatrix< T > eval3D_matrix_C(const gsMatrix< T > &Cmat, const index_t patch, const gsVector< T > &u, const T z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:304
constexpr std::enable_if< _mat==Material::NH, T >::type _dPsi_impl(const index_t i, const index_t j) const
Implementation of _dPsi(i,j) for NH materials.
Definition: gsMaterialMatrixNonlinear.hpp:2078
gsMatrix< T > eval3D_detF(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:892
constexpr T _dp_da(const index_t a) const
First derivative of the Lagrange multiplier for incompressible materials w.r.t. the stretch ...
Definition: gsMaterialMatrixNonlinear.hpp:2629
#define short_t
Definition: gsConfig.h:35
gsMatrix< T > _eval3D_Compressible_matrix(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evalluates the compressible material matrix.
Definition: gsMaterialMatrixNonlinear.hpp:2012
const function_ptr getRatio() const override
Gets the Ratio for the MR material.
Definition: gsMaterialMatrixNonlinear.h:195
void defaultOptions() override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:195
constexpr std::enable_if< _com, T >::type _dSa_db_impl(const index_t a, const index_t b) const
Specialization of _dSa_db(a,b) for compressible materials.
std::enable_if<!(!_comp &&_mat==Material::NH), gsMatrix< T > >::type _eval3D_dmatrix_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out) const
{ function_description }
constexpr T _Cijkl3D(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Returns an entry of the material tensor C for compressible materials without static condensation...
Definition: gsMaterialMatrixNonlinear.hpp:1414
constexpr T _dPsi_da(const index_t a) const
First derivative of a strain energy density function w.r.t. the stretch .
Definition: gsMaterialMatrixNonlinear.hpp:2321
gsMatrix< T > eval3D_matrix(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:509
void setMu(const index_t &i, const gsFunctionSet< T > &Mu_i) override
Sets Mu_i.
Definition: gsMaterialMatrixNonlinear.h:198
gsMatrix< T > eval3D_pstress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:567
constexpr T _Cabcd(const index_t a, const index_t b, const index_t c, const index_t d) const
The material matrix for stretch-based implementations.
Definition: gsMaterialMatrixNonlinear.hpp:2696
constexpr T _Sa(const index_t a) const
Component of the stress.
Definition: gsMaterialMatrixNonlinear.hpp:2642
constexpr T _Cijkl(const index_t i, const index_t j, const index_t k, const index_t l) const
Returns an entry of the material tensor C for incompressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:1231
memory::unique_ptr< gsMaterialMatrixNonlinear > uPtr
Unique pointer for gsMaterialMatrixNonlinear.
Definition: gsMaterialMatrixNonlinear.h:217
#define index_t
Definition: gsConfig.h:32
constexpr T _d2Psi_dab(const index_t a, const index_t b) const
Second derivative of a strain energy density function w.r.t. the stretches and .
Definition: gsMaterialMatrixNonlinear.hpp:2447
void setYoungsModulus(const gsFunctionSet< T > &YoungsModulus) override
Sets the YoungsModulus.
Definition: gsMaterialMatrixNonlinear.hpp:1032
std::enable_if< _mat==Material::SvK, gsMatrix< T > >::type _eval3D_detF_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Implementation of jacobina determinant (detF)
Definition: gsMaterialMatrixNonlinear.hpp:901
constexpr std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Cijkl3D_impl(const index_t i, const index_t j, const index_t k, const index_t l, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Specialization for compressible Cijkl3D(i,j,k,l,c,cinv) for OG materials implemented analytically (no...
Definition: gsMaterialMatrixNonlinear.h:748
enum MatIntegration isVecIntegrated() const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.h:131
gsMatrix< T > _eval3D_Compressible_C33(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evaluates the C33 (through thickness) component of the deformation tensor C for compressible material...
Definition: gsMaterialMatrixNonlinear.hpp:1815
gsMatrix< T > eval3D_stress_C(const gsMatrix< T > &Cmat, const index_t patch, const gsVector< T > &u, const T z, enum MaterialOutput out=MaterialOutput::Generic) const
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:693
Implementation
This class describes the way material models are implemented.
Definition: gsMaterialMatrixUtils.h:70
Base class with dimension in template; used for metric computations.
void setRatio(const gsFunctionSet< T > &Ratio) override
Sets the Ratio for the MR material.
Definition: gsMaterialMatrixNonlinear.h:193
constexpr T _dI_2(const index_t i, const index_t j, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Provides the derivative of the second invariant for compressible materials w.r.t. component C_{ij} of...
Definition: gsMaterialMatrixNonlinear.hpp:2163
gsMatrix< T > eval3D_vector(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:549
constexpr std::enable_if< _mat==Material::SvK &&_imp==Implementation::Analytical, T >::type _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
Specialization for incompressible Cijkl(i,j,k,l) for SvK materials implemented analytically.
Definition: gsMaterialMatrixNonlinear.hpp:1242
Provides a list of labeled parameters/options that can be set and accessed easily.
constexpr T _dPsi_vol(const index_t i, const index_t j, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Provides the derivative of the volumetric part of the compressible strain energy density function w...
Definition: gsMaterialMatrixNonlinear.hpp:2229
constexpr std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Specialization for compressible Sij(i,j,c,cinv) for OG materials implemented analytically (not implem...
Definition: gsMaterialMatrixNonlinear.h:824
gsMatrix< T > eval3D_CauchyStress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:961
const function_ptr getPoissonsRatio() const override
Gets the Poisson&#39;s Ratio.
Definition: gsMaterialMatrixNonlinear.hpp:1050
constexpr T _d2J_dab(const index_t a, const index_t b) const
First derivative of the compressibilty function w.r.t. the stretches and .
Definition: gsMaterialMatrixNonlinear.hpp:2613
constexpr T _dSa_db(const index_t a, const index_t b) const
First derivative of the component of the stress w.r.t. the stretch .
Definition: gsMaterialMatrixNonlinear.hpp:2666
constexpr std::enable_if< _mat==Material::SvK &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for SvK materials implemented analytically.
Definition: gsMaterialMatrixNonlinear.hpp:1627
const function_ptr getMu(const index_t &i) const override
Gets Mu_i.
Definition: gsMaterialMatrixNonlinear.h:201
constexpr T _d2Psi(const index_t i, const index_t j, const index_t k, const index_t l) const
Provides the second (mixed) derivative of the incompressible strain energy density function w...
Definition: gsMaterialMatrixNonlinear.hpp:2109
constexpr std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for OG materials implemented analytically (not implemented...
Definition: gsMaterialMatrixNonlinear.h:785
gsMatrix< T > eval3D_pstressDir(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:597
constexpr T _p() const
Lagrange multiplier for incompressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:2621
const function_ptr getAlpha(const index_t &i) const override
Gets Alpha_i.
Definition: gsMaterialMatrixNonlinear.h:207
gsMatrix< T > _eval_Compressible_CauchyVector(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Equivalent to _eval_Compressible_vector but for the Cauchy Vector.
constexpr std::enable_if< _com, T >::type _Cabcd_impl(const index_t a, const index_t b, const index_t c, const index_t d) const
Specialization of _Cabcd(a,b,c,d) for compressible materials.
enum MatIntegration isMatIntegrated() const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.h:128
std::enable_if<!_com &&!(_mat==Material::SvK), gsMatrix< T > >::type _eval3D_pstress_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Implementation of the 3D (in-plane+thickness) evaluator of the stress vector, specialization for comp...
constexpr std::enable_if< _mat==Material::NH, T >::type _d2Psi_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
Implementation of _d2Psi(i,j) for NH materials.
Definition: gsMaterialMatrixNonlinear.hpp:2120
Interface for the set of functions defined on a domain (the total number of functions in the set equa...
Definition: gsFuncData.h:23
const function_ptr getYoungsModulus() const override
Gets the YoungsModulus.
Definition: gsMaterialMatrixNonlinear.hpp:1038
std::enable_if< _mat==Material::SvK, gsMatrix< T > >::type _eval3D_matrix_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Implementation of the 3D (in-plane+thickness) evaluator of the material matrix, specialization for Sv...
Definition: gsMaterialMatrixNonlinear.hpp:521
gsMatrix< T > eval3D_CauchyPStress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:627
constexpr T _Sii(const index_t i) const
Returns an entry of the diagonal of the stress tensor S for incompressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:1798
gsMaterialMatrixNonlinear()
Destructor.
Definition: gsMaterialMatrixNonlinear.h:125
gsMatrix< T > _eval3D_Incompressible_matrix(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evalluates the incompressible material matrix.
Definition: gsMaterialMatrixNonlinear.hpp:1190
Provides material matrix utilities.
constexpr std::enable_if<!_com &&(_mat==Material::NH_ext), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for incompressible Extended NH materials (not implemented) ...
Definition: gsMaterialMatrixNonlinear.h:1156
This class defines the base class for material matrices.
Definition: gsMaterialMatrixBaseDim.h:35
gsMatrix< T > _eval3D_Incompressible_stress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evalluates the incompressible stress vector.
Definition: gsMaterialMatrixNonlinear.hpp:825
constexpr T _dI_1(const index_t i, const index_t j) const
Provides the derivative of the first invariant compressible materials w.r.t. component C_{ij} of the ...
Definition: gsMaterialMatrixNonlinear.hpp:2155
constexpr std::enable_if< _mat==Material::NH_ext &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for Extended NH materials implemented analytically (not im...
Definition: gsMaterialMatrixNonlinear.h:791
void _initialize()
Initializes the object.
Definition: gsMaterialMatrixNonlinear.hpp:202
constexpr T _dPsi_da_vol(const index_t a) const
First derivative of the volumetric part of a strain energy density function w.r.t. the stretch .
Definition: gsMaterialMatrixNonlinear.hpp:2436
constexpr std::enable_if< _mat==Material::NH_ext &&_imp==Implementation::Analytical, T >::type _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const
Specialization for incompressible Cijkl(i,j,k,l) for Extended NH materials implemented analytically (...
Definition: gsMaterialMatrixNonlinear.h:698
constexpr T _d2Psi_dab_vol(const index_t a, const index_t b) const
Second derivative of the volumetric part of a strain energy density function w.r.t. the stretches and .
Definition: gsMaterialMatrixNonlinear.hpp:2592
std::enable_if< _mat==Material::SvK, gsMatrix< T > >::type _eval3D_stress_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Implementation of the 3D (in-plane+thickness) evaluator of the stress vector, specialization for SvK ...
Definition: gsMaterialMatrixNonlinear.hpp:668
void pstretchDir_into(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:257
gsMatrix< T > _eval3D_Compressible_stress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evalluates the compressible stress vector.
Definition: gsMaterialMatrixNonlinear.hpp:727
gsMatrix< T > eval3D_dmatrix(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:344
constexpr std::enable_if< _mat==Material::SvK &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j, const gsMatrix< T > &c, const gsMatrix< T > &cinv) const
Specialization for compressible Sij(i,j,c,cinv) for SvK materials implemented analytically.
Definition: gsMaterialMatrixNonlinear.h:808
Provides a base class for material matrices.
memory::shared_ptr< gsMaterialMatrixNonlinear > Ptr
Shared pointer for gsMaterialMatrixNonlinear.
Definition: gsMaterialMatrixNonlinear.h:214
constexpr std::enable_if< _com &&(_mat==Material::NH), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for compressible NH materials.
std::enable_if< _com, void >::type _pstretch_into_impl(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const
Implementation of pstretch_into, specialization for compressible materials.
gsMatrix< T > eval3D_stress(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:659
gsMatrix< T > eval3D_vector_C(const gsMatrix< T > &Cmat, const index_t patch, const gsVector< T > &u, const T z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:555
gsMatrix< T > eval3D_CauchyVector(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z, enum MaterialOutput out=MaterialOutput::Generic) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:561
std::enable_if< _mat==Material::SvK, gsMatrix< T > >::type _eval3D_CauchyVector_impl(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Same as _eval3D_vector_impl for the Cauchy stress.
constexpr T _dJ_da(const index_t a) const
First derivative of the compressibilty function w.r.t. the stretche .
Definition: gsMaterialMatrixNonlinear.hpp:2605
gsMatrix< T > _eval3D_Compressible_detF(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evaluates the jacobian determinant for compressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:926
std::ostream & print(std::ostream &os) const override
See gsMaterialMatrixBase for details.
Definition: gsMaterialMatrixNonlinear.hpp:153
Material
This class describes a material model.
Definition: gsMaterialMatrixUtils.h:50
constexpr std::enable_if< _com &&(_mat==Material::NH), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for compressible NH materials.
This object is a cache for computed values from an evaluator.
gsMatrix< T > _eval_Incompressible_CauchyVector(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Equivalent to _eval_Incompressible_vector but for the Cauchy Vector.
gsMatrix< T > _eval3D_Incompressible_detF(const index_t patch, const gsMatrix< T > &u, const gsMatrix< T > &z) const
Evaluates the jacobian determinant for compressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:953
constexpr T _Sij(const index_t i, const index_t j) const
Returns an entry of the stress tensor S for incompressible materials.
Definition: gsMaterialMatrixNonlinear.hpp:1619
MatIntegration
This class describes if an object is integrated through-thickness or not.
Definition: gsMaterialMatrixUtils.h:35
constexpr T _dPsi(const index_t i, const index_t j) const
Provides the derivative of the incompressible strain energy density function w.r.t. component C_{ij} of the deformation tensor.
Definition: gsMaterialMatrixNonlinear.hpp:2067
constexpr std::enable_if< _com, T >::type _Sa_impl(const index_t a) const
Specialization of _Sa(a) for compressible materials.