G+Smo  25.01.0
Geometry + Simulation Modules
 
Loading...
Searching...
No Matches
gsMaterialMatrixNonlinear.h
Go to the documentation of this file.
1
16#pragma once
17
20#include <gsIO/gsOptionList.h>
21#include <gsCore/gsFuncData.h>
22
23namespace gismo
24{
25
26
39template < short_t dim,
40 class T,
41 short_t matId,
42 bool comp,
43 enum Material mat = decodeMat_id<matId>::material,
44 enum Implementation imp = decodeMat_id<matId>::implementation
45 >
47{
48public:
49
50 GISMO_OVERRIDE_CLONE_FUNCTION(gsMaterialMatrixNonlinear);
51
53
54 typedef typename Base::function_ptr function_ptr;
55
63 const gsFunctionSet<T> & thickness);
64
73 const gsFunctionSet<T> & thickness,
74 const std::vector<gsFunctionSet<T> *> &pars);
75
83 const std::vector<gsFunctionSet<T> *> &pars);
84
92 const std::vector<gsFunctionSet<T> *> &pars,
93 const gsFunctionSet<T> & Density);
94
104 const gsFunctionSet<T> & thickness,
105 const std::vector<gsFunctionSet<T> *> &pars,
106 const gsFunctionSet<T> & Density);
107
108protected:
118 const gsFunctionSet<T> * thickness,
119 const std::vector<gsFunctionSet<T> *> &pars,
120 const gsFunctionSet<T> * Density);
121
122public:
125
127 inline enum MatIntegration isMatIntegrated() const override {return MatIntegration::NotIntegrated; }
128
130 inline enum MatIntegration isVecIntegrated() const override {return MatIntegration::NotIntegrated; }
131
133 void defaultOptions() override;
134
136 void pstretch_into(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const override;
137
139 void pstretchDir_into(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const override;
140
142 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;
151
153 gsMatrix<T> eval3D_vector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
155
157 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;
158
160 gsMatrix<T> eval3D_CauchyVector(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
161
163 gsMatrix<T> eval3D_pstress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
164
166 gsMatrix<T> eval3D_pstressDir(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
167
169 gsMatrix<T> eval3D_CauchyPStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z, enum MaterialOutput out = MaterialOutput::Generic) const override;
170
172 gsMatrix<T> eval3D_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
174
176 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;
177
179 gsMatrix<T> eval3D_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
180
182 gsMatrix<T> eval3D_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T> & z, enum MaterialOutput out) const override;
184
186 void setYoungsModulus(const gsFunctionSet<T> & YoungsModulus) override;
187
189 const function_ptr getYoungsModulus() const override;
190
192 void setPoissonsRatio(const gsFunctionSet<T> & PoissonsRatio) override;
194 const function_ptr getPoissonsRatio() const override;
195
197 void setRatio(const gsFunctionSet<T> & Ratio) override { _setRatio_impl<mat>(Ratio);}
199 const function_ptr getRatio() const override { return _getRatio_impl<mat>(); }
200
202 void setMu(const index_t & i, const gsFunctionSet<T> & Mu_i) override { _setMu_impl<mat>(i,Mu_i); }
203
205 const function_ptr getMu(const index_t & i) const override {return _getMu_impl<mat>(i);}
206
208 void setAlpha(const index_t & i, const gsFunctionSet<T> & Alpha_i) override { _setAlpha_impl<mat>(i,Alpha_i); }
209
211 const function_ptr getAlpha(const index_t & i) const override {return _getAlpha_impl<mat>(i);}
212
214 std::ostream &print(std::ostream &os) const override;
215
216public:
218 typedef memory::shared_ptr< gsMaterialMatrixNonlinear > Ptr;
219
221 typedef memory::unique_ptr< gsMaterialMatrixNonlinear > uPtr;
222
223protected:
230 void _initialize();
231
232private:
242 template<bool _com>
243 typename std::enable_if<_com, void>::type _pstretch_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
244
254 template<bool _com>
255 typename std::enable_if<!_com, void>::type _pstretch_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
256
266 template<bool _com>
267 typename std::enable_if<_com, void>::type _pstretchDir_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
268
278 template<bool _com>
279 typename std::enable_if<!_com, void>::type _pstretchDir_into_impl(const index_t patch, const gsMatrix<T>& u, gsMatrix<T>& result) const;
280
281protected:
282
292 gsMatrix<T> _eval3D_Incompressible_matrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
293 gsMatrix<T> _eval3D_Incompressible_matrix_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
294
304 gsMatrix<T> _eval3D_Incompressible_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
305 gsMatrix<T> _eval3D_Incompressible_stress_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
306
307 gsMatrix<T> _eval3D_Incompressible_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
308
311
321 gsMatrix<T> _eval3D_Compressible_C33(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
322 gsMatrix<T> _eval3D_Compressible_C33(const gsMatrix<T> & Cmat, const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
323
333 gsMatrix<T> _eval3D_Compressible_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
334
344 gsMatrix<T> _eval3D_Incompressible_detF(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
345
348
358 gsMatrix<T> _eval3D_Compressible_matrix(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
359 gsMatrix<T> _eval3D_Compressible_matrix_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
360
370 gsMatrix<T> _eval3D_Compressible_stress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
371 gsMatrix<T> _eval3D_Compressible_stress_C(const gsMatrix<T> & Cmat, const index_t patch, const gsVector<T> & u, const T z) const;
372
373 gsMatrix<T> _eval3D_Compressible_CauchyStress(const index_t patch, const gsMatrix<T> & u, const gsMatrix<T>& z) const;
374
375 // TODO: Add docs and add implementations to private member functions
376 inline gsMatrix<T> dCijkl(const index_t patch, const gsVector<T> & u, const T z) const;
377
378 inline 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;
379
380 inline T _dgconij_dCkl(const gsMatrix<T> & gcon, const index_t i, const index_t j, const index_t k, const index_t l) const;
381
382private:
383
384 template <enum Material _mat, bool _comp>
385 inline 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;
386
387 template <enum Material _mat, bool _comp>
388 inline 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;
389
390 template <enum Material _mat, bool _comp>
391 inline 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;
392
393 template <enum Material _mat, bool _comp>
394 inline 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;
395
396private:
397
410 template<enum Material _mat, bool _com>
411 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;
412 template<enum Material _mat, bool _com>
413 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;
414
427 template<enum Material _mat, bool _com>
428 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;
429 template<enum Material _mat, bool _com>
430 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;
431
444 template<enum Material _mat, bool _com>
445 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;
446 template<enum Material _mat, bool _com>
447 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;
448
449
463 template <enum Material _mat, bool _comp>
464 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;
465
466 template <enum Material _mat, bool _comp>
467 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;
468
470 template<enum Material _mat, bool _com>
471 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;
472
485 template<enum Material _mat, bool _com>
486 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;
487 template<enum Material _mat, bool _com>
488 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;
489 template<enum Material _mat, bool _com>
490 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;
491
493 template<enum Material _mat, bool _com>
494 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;
495
508 template<enum Material _mat, bool _com>
509 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;
510 template<enum Material _mat, bool _com>
511 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;
512 template<enum Material _mat, bool _com>
513 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;
514
516 template<enum Material _mat, bool _com>
517 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;
518
531 template<enum Material _mat, bool _com>
532 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;
533 template<enum Material _mat, bool _com>
534 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;
535 template<enum Material _mat, bool _com>
536 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;
537
550 template<enum Material _mat, bool _com>
551 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;
552 template<enum Material _mat, bool _com>
553 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;
554 template<enum Material _mat, bool _com>
555 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;
556
569 template<enum Material _mat, bool _com>
570 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;
571
572 template<enum Material _mat>
573 typename std::enable_if<_mat==Material::MR, void>::type _setRatio_impl(const gsFunctionSet<T> & Ratio);
574 template<enum Material _mat>
575 typename std::enable_if<_mat!=Material::MR, void>::type _setRatio_impl(const gsFunctionSet<T> & Ratio);
576
577 template<enum Material _mat>
578 typename std::enable_if<_mat==Material::MR, const function_ptr>::type _getRatio_impl() const;
579 template<enum Material _mat>
580 typename std::enable_if<_mat!=Material::MR, const function_ptr>::type _getRatio_impl() const;
581
582 template<enum Material _mat>
583 typename std::enable_if<_mat==Material::OG, void>::type _setMu_impl(const index_t & i, const gsFunctionSet<T> & Mu_i);
584 template<enum Material _mat>
585 typename std::enable_if<_mat!=Material::OG, void>::type _setMu_impl(const index_t & i, const gsFunctionSet<T> & Mu_i);
586
587 template<enum Material _mat>
588 typename std::enable_if<_mat==Material::OG, const function_ptr>::type _getMu_impl(const index_t & i) const;
589 template<enum Material _mat>
590 typename std::enable_if<_mat!=Material::OG, const function_ptr>::type _getMu_impl(const index_t & i) const;
591
592 template<enum Material _mat>
593 typename std::enable_if<_mat==Material::OG, void>::type _setAlpha_impl(const index_t & i, const gsFunctionSet<T> & Alpha_i);
594 template<enum Material _mat>
595 typename std::enable_if<_mat!=Material::OG, void>::type _setAlpha_impl(const index_t & i, const gsFunctionSet<T> & Alpha_i);
596
597 template<enum Material _mat>
598 typename std::enable_if<_mat==Material::OG, const function_ptr>::type _getAlpha_impl(const index_t & i) const;
599 template<enum Material _mat>
600 typename std::enable_if<_mat!=Material::OG, const function_ptr>::type _getAlpha_impl(const index_t & i) const;
601
602protected:
603
611 inline T _Cijkl (const index_t i, const index_t j, const index_t k, const index_t l) const;
612
622 inline 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;
623
633 inline 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;
634
642 inline T _Sij (const index_t i, const index_t j) const;
643
653 inline T _Sij (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
654
662 inline T _Sii (const index_t i) const;
663
672 inline T _Sii (const index_t i, const gsMatrix<T> & c) const;
673
674private:
676 // Incompressible formulations //
679 template<enum Material _mat, enum Implementation _imp>
680 inline typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
681 _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
682
684 template<enum Material _mat, enum Implementation _imp>
685 inline typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
686 _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
687
689 template<enum Material _mat, enum Implementation _imp>
690 inline typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
691 _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
692
694 template<enum Material _mat, enum Implementation _imp>
695 inline typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
696 _Cijkl_impl(const index_t /*i*/, const index_t /*j*/, const index_t /*k*/, const index_t /*l*/) const
698
700 template<enum Material _mat, enum Implementation _imp>
701 inline typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
702 _Cijkl_impl(const index_t /*i*/, const index_t /*j*/, const index_t /*k*/, const index_t /*l*/) const
704
706 template<enum Material _mat, enum Implementation _imp>
707 inline typename std::enable_if<_imp==Implementation::Spectral , T>::type
708 _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
709
711 template<enum Material _mat, enum Implementation _imp>
712 inline typename std::enable_if<_imp==Implementation::Generalized , T>::type
713 _Cijkl_impl(const index_t i, const index_t j, const index_t k, const index_t l) const;
714
715
717 // Compressible formulations //
719
725 template<enum Implementation _imp>
726 inline typename std::enable_if<_imp==Implementation::Spectral, T>::type
727 _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;
728
730 template<enum Implementation _imp>
731 inline typename std::enable_if<!(_imp==Implementation::Spectral),T>::type
732 _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;
733
735 template<enum Material _mat, enum Implementation _imp>
736 inline typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
737 _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;
738
740 template<enum Material _mat, enum Implementation _imp>
741 inline typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
742 _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;
743
745 template<enum Material _mat, enum Implementation _imp>
746 inline typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
747 _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;
748
750 template<enum Material _mat, enum Implementation _imp>
751 inline typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
752 _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
754
756 template<enum Material _mat, enum Implementation _imp>
757 inline typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
758 _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;
759
761 template<enum Material _mat, enum Implementation _imp>
762 inline typename std::enable_if<_imp==Implementation::Spectral , T>::type
763 _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;
764
766 template<enum Material _mat, enum Implementation _imp>
767 inline typename std::enable_if<_imp==Implementation::Generalized , T>::type
768 _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;
769
770
772 template<enum Material _mat, enum Implementation _imp>
773 inline typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
774 _Sij_impl(const index_t i, const index_t j) const;
775
777 template<enum Material _mat, enum Implementation _imp>
778 inline typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
779 _Sij_impl(const index_t i, const index_t j) const;
780
782 template<enum Material _mat, enum Implementation _imp>
783 inline typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
784 _Sij_impl(const index_t i, const index_t j) const;
785
787 template<enum Material _mat, enum Implementation _imp>
788 inline typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
789 _Sij_impl(const index_t /*i*/, const index_t /*j*/) const
791
793 template<enum Material _mat, enum Implementation _imp>
794 inline typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
795 _Sij_impl(const index_t /*i*/, const index_t /*j*/) const
797
799 template<enum Material _mat, enum Implementation _imp>
800 inline typename std::enable_if<_imp==Implementation::Spectral , T>::type
801 _Sij_impl(const index_t i, const index_t j) const;
802
804 template<enum Material _mat, enum Implementation _imp>
805 inline typename std::enable_if<_imp==Implementation::Generalized , T>::type
806 _Sij_impl(const index_t i, const index_t j) const;
807
808
810 template<enum Material _mat, enum Implementation _imp>
811 inline typename std::enable_if<_mat==Material::SvK && _imp==Implementation::Analytical, T>::type
812 _Sij_impl(const index_t /*i*/, const index_t /*j*/, const gsMatrix<T> & /*c*/, const gsMatrix<T> & /*cinv*/) const
814
816 template<enum Material _mat, enum Implementation _imp>
817 inline typename std::enable_if<_mat==Material::NH && _imp==Implementation::Analytical, T>::type
818 _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
819
821 template<enum Material _mat, enum Implementation _imp>
822 inline typename std::enable_if<_mat==Material::MR && _imp==Implementation::Analytical, T>::type
823 _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
824
826 template<enum Material _mat, enum Implementation _imp>
827 inline typename std::enable_if<_mat==Material::OG && _imp==Implementation::Analytical, T>::type
828 _Sij_impl(const index_t /*i*/, const index_t /*j*/, const gsMatrix<T> & /*c*/, const gsMatrix<T> & /*cinv*/) const
830
832 template<enum Material _mat, enum Implementation _imp>
833 inline typename std::enable_if<_mat==Material::NH_ext && _imp==Implementation::Analytical, T>::type
834 _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
835
837 template<enum Material _mat, enum Implementation _imp>
838 inline typename std::enable_if<_imp==Implementation::Spectral , T>::type
839 _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
840
842 template<enum Material _mat, enum Implementation _imp>
843 inline typename std::enable_if<_imp==Implementation::Generalized , T>::type
844 _Sij_impl(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
845
846protected:
854 inline T _dPsi (const index_t i, const index_t j) const;
855
865 inline T _dPsi (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
866
876 inline T _dPsi_vol(const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
877
886 inline T _d2Psi (const index_t i, const index_t j, const index_t k, const index_t l) const;
887
898 inline 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;
899
910 inline 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;
911
921 inline T _dI_1 (const index_t i, const index_t j) const;
922
934 inline T _dI_2 (const index_t i, const index_t j, const gsMatrix<T> & c, const gsMatrix<T> & cinv) const;
935
936
937
938private:
939 /*
940 Note: when adding a new implementation, make sure to add the condition in the 'other' implementation : !(_mat==xx || ...)
941 */
942
944 template<enum Material _mat>
945 inline typename std::enable_if<_mat==Material::NH, T>::type _dPsi_impl(const index_t i, const index_t j) const;
946
948 template<enum Material _mat>
949 inline typename std::enable_if<_mat==Material::MR, T>::type _dPsi_impl(const index_t i, const index_t j) const;
950 // other
951 template<enum Material _mat>
952 inline typename std::enable_if<!(_mat==Material::NH || _mat==Material::MR), T>::type _dPsi_impl(const index_t /*i*/, const index_t /*j*/) const
954 // add other
955
957 template<enum Material _mat>
958 inline 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;
959
961 template<enum Material _mat>
962 inline 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;
963
965 template<enum Material _mat>
966 inline 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;
967 // other
968 template<enum Material _mat>
969 inline 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
971
973 template<enum Material _mat>
974 inline 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;
975
977 template<enum Material _mat>
978 inline 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;
979 // other
980 template<enum Material _mat>
981 inline 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
983
985 template<enum Material _mat>
986 inline 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;
987
989 template<enum Material _mat>
990 inline 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;
991
993 template<enum Material _mat>
994 inline 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;
995 // other
996 template<enum Material _mat>
997 inline 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
999protected:
1001 // Stretch based formulation //
1003
1010 inline T _dPsi_da (const index_t a) const;
1011
1018 inline T _d2Psi_dab (const index_t a, const index_t b) const;
1019
1025 inline T _dPsi_da_vol(const index_t a) const;
1026
1032 inline T _d2Psi_dab_vol(const index_t a, const index_t b) const;
1033
1039 inline T _dJ_da (const index_t a) const;
1040
1046 inline T _d2J_dab (const index_t a, const index_t b) const;
1047
1051 inline T _p() const;
1052
1058 inline T _dp_da (const index_t a) const;
1059
1065 inline T _Sa (const index_t a) const;
1066
1072 inline T _dSa_db (const index_t a, const index_t b) const;
1073
1079 inline T _Cabcd (const index_t a, const index_t b, const index_t c, const index_t d) const;
1080
1081private:
1082 // ----------------------------------------------------------------------------------
1083
1085 template<enum Material _mat, bool _com>
1086 inline 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 inline typename std::enable_if<!_com && (_mat==Material::NH), T>::type _dPsi_da_impl(const index_t a) const;
1091
1093 template<enum Material _mat, bool _com>
1094 inline 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 inline typename std::enable_if<!_com && (_mat==Material::MR), T>::type _dPsi_da_impl(const index_t a) const;
1099
1101 template<enum Material _mat, bool _com>
1102 inline 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 inline typename std::enable_if<!_com && (_mat==Material::OG), T>::type _dPsi_da_impl(const index_t a) const;
1107
1109 template<enum Material _mat, bool _com>
1110 inline typename std::enable_if<_com && (_mat==Material::NH_ext), T>::type _dPsi_da_impl(const index_t a) const;
1111
1113 template<enum Material _mat, bool _com>
1114 inline typename std::enable_if<!_com && (_mat==Material::NH_ext), T>::type _dPsi_da_impl(const index_t /*a*/) const
1116
1117 // other
1118 template<enum Material _mat, bool _com>
1119 inline typename std::enable_if<
1120 !( _mat==Material::NH
1121 || _mat==Material::MR
1122 || _mat==Material::OG
1123 || _mat==Material::NH_ext
1124 )
1125 , T>::type _dPsi_da_impl(const index_t /*a*/) const
1127
1128 // ----------------------------------------------------------------------------------
1129
1131 template<enum Material _mat, bool _com>
1132 inline 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 inline typename std::enable_if<!_com && (_mat==Material::NH), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1137
1139 template<enum Material _mat, bool _com>
1140 inline 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 inline typename std::enable_if<!_com && (_mat==Material::MR), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1145
1147 template<enum Material _mat, bool _com>
1148 inline 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 inline typename std::enable_if<!_com && (_mat==Material::OG), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1153
1155 template<enum Material _mat, bool _com>
1156 inline typename std::enable_if<_com && (_mat==Material::NH_ext), T>::type _d2Psi_dab_impl(const index_t a, const index_t b) const;
1157
1159 template<enum Material _mat, bool _com>
1160 inline typename std::enable_if<!_com && (_mat==Material::NH_ext), T>::type _d2Psi_dab_impl(const index_t /*a*/, const index_t /*b*/) const
1162
1163 // other
1164 template<enum Material _mat, bool _com>
1165 inline typename std::enable_if<
1166 !( _mat==Material::NH
1167 || _mat==Material::MR
1168 || _mat==Material::OG
1169 || _mat==Material::NH_ext
1170 )
1171 , T>::type _d2Psi_dab_impl(const index_t /*a*/, const index_t /*b*/) const
1173
1174 // ----------------------------------------------------------------------------------
1175
1177 template<bool _com>
1178 inline typename std::enable_if<_com , T>::type _Sa_impl(const index_t a) const;
1179
1181 template<bool _com>
1182 inline typename std::enable_if<!_com, T>::type _Sa_impl(const index_t a) const;
1183
1184 // ----------------------------------------------------------------------------------
1185
1187 template<bool _com>
1188 inline typename std::enable_if<_com , T>::type _dSa_db_impl(const index_t a, const index_t b) const;
1189
1191 template<bool _com>
1192 inline typename std::enable_if<!_com, T>::type _dSa_db_impl(const index_t a, const index_t b) const;
1193
1194 // ----------------------------------------------------------------------------------
1195
1197 template<bool _com>
1198 inline 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
1201 template<bool _com>
1202 inline 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;
1203
1204 // ----------------------------------------------------------------------------------
1205
1206protected:
1207 using Base::m_thickness;
1208 using Base::m_pars;
1209 using Base::m_density;
1210
1211 // Geometric data
1212 using Base::m_data;
1213
1214 using Base::m_options;
1215
1216private:
1217 static index_t delta(const index_t a, const index_t b)
1218 {
1219 return (a==b) ? 1 : 0;
1220 }
1221
1222 static index_t idelta(const index_t a, const index_t b)
1223 {
1224 return (a!=b) ? 1 : 0;
1225 }
1226};
1227
1228#ifdef GISMO_WITH_PYBIND11
1229
1233 void pybind11_init_gsMaterialMatrixNH2i(pybind11::module &m);
1234 void pybind11_init_gsMaterialMatrixNH2c(pybind11::module &m);
1235
1236 void pybind11_init_gsMaterialMatrixNH3i(pybind11::module &m);
1237 void pybind11_init_gsMaterialMatrixNH3c(pybind11::module &m);
1238
1239 void pybind11_init_gsMaterialMatrixMR2i(pybind11::module &m);
1240 void pybind11_init_gsMaterialMatrixMR2c(pybind11::module &m);
1241
1242 void pybind11_init_gsMaterialMatrixMR3i(pybind11::module &m);
1243 void pybind11_init_gsMaterialMatrixMR3c(pybind11::module &m);
1244
1245 void pybind11_init_gsMaterialMatrixOG2i(pybind11::module &m);
1246 void pybind11_init_gsMaterialMatrixOG2c(pybind11::module &m);
1247
1248 void pybind11_init_gsMaterialMatrixOG3i(pybind11::module &m);
1249 void pybind11_init_gsMaterialMatrixOG3c(pybind11::module &m);
1250
1251#endif // GISMO_WITH_PYBIND11
1252
1253} // namespace
1254
1255
1256#ifndef GISMO_BUILD_LIB
1257#include GISMO_HPP_HEADER(gsMaterialMatrixNonlinear.hpp)
1258#endif
Interface for the set of functions defined on a domain (the total number of functions in the set equa...
Definition gsFunctionSet.h:219
This class defines the base class for material matrices.
Definition gsMaterialMatrixBaseDim.h:37
virtual gsMatrix< T > eval3D_CauchyStress(const index_t, const gsMatrix< T > &, const gsMatrix< T > &, enum MaterialOutput) const
{ function_description }
Definition gsMaterialMatrixBase.h:581
virtual gsMatrix< T > eval3D_dmatrix(const index_t, const gsMatrix< T > &, const gsMatrix< T > &, enum MaterialOutput) const
Evaluates the derivative of the matrix on patch on in-plane points u with height z.
Definition gsMaterialMatrixBase.h:398
virtual gsMatrix< T > eval3D_stress(const index_t, const gsMatrix< T > &, const gsMatrix< T > &, enum MaterialOutput) const
{ function_description }
Definition gsMaterialMatrixBase.h:549
virtual gsMatrix< T > eval3D_matrix(const index_t, const gsMatrix< T > &, const gsMatrix< T > &, enum MaterialOutput) const
Evaluates the matrix on patch on in-plane points u with height z.
Definition gsMaterialMatrixBase.h:367
virtual gsMatrix< T > eval3D_vector(const index_t, const gsMatrix< T > &, const gsMatrix< T > &, enum MaterialOutput) const
Evaluates the vector on patch on in-plane points u with height z.
Definition gsMaterialMatrixBase.h:422
This class defines hyperelastic material matrices.
Definition gsMaterialMatrixNonlinear.h:47
memory::unique_ptr< gsMaterialMatrixNonlinear > uPtr
Unique pointer for gsMaterialMatrixNonlinear.
Definition gsMaterialMatrixNonlinear.h:221
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
std::enable_if<!_com &&(_mat==Material::NH_ext), T >::type _d2Psi_dab_impl(const index_t, const index_t) const
Specialization of _d2Psi_dab(a,b) for incompressible Extended NH materials (not implemented)
Definition gsMaterialMatrixNonlinear.h:1160
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
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
std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Cijkl3D_impl(const index_t, const index_t, const index_t, const index_t, 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:752
T _dJ_da(const index_t a) const
First derivative of the compressibilty function w.r.t. the stretche .
Definition gsMaterialMatrixNonlinear.hpp:2605
memory::shared_ptr< gsMaterialMatrixNonlinear > Ptr
Shared pointer for gsMaterialMatrixNonlinear.
Definition gsMaterialMatrixNonlinear.h:218
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
Implementation of _d2Psi(i,j,c,cinv) for MR materials.
std::enable_if< _mat==Material::MR &&_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 MR materials implemented analytically.
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
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
std::enable_if<!_com &&(_mat==Material::OG), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for incompressible OG materials.
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
Implementation of _d2Psi(i,j,c,cinv) for Extended NH materials.
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.
Definition gsMaterialMatrixNonlinear.hpp:2674
T _dPsi_da_vol(const index_t a) const
First derivative of the volumetric part of a strain energy density function w.r.t....
Definition gsMaterialMatrixNonlinear.hpp:2436
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
void pstretch_into(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.hpp:209
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
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.
Definition gsMaterialMatrixNonlinear.hpp:2330
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.
Definition gsMaterialMatrixNonlinear.hpp:2704
T _p() const
Lagrange multiplier for incompressible materials.
Definition gsMaterialMatrixNonlinear.hpp:2621
enum MatIntegration isMatIntegrated() const override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.h:127
T _dPsi(const index_t i, const index_t j) const
Provides the derivative of the incompressible strain energy density function w.r.t....
Definition gsMaterialMatrixNonlinear.hpp:2067
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 incompressible materials.
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
std::enable_if< _mat==Material::MR &&_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 MR materials implemented analytically.
void _initialize()
Initializes the object.
Definition gsMaterialMatrixNonlinear.hpp:202
void setYoungsModulus(const gsFunctionSet< T > &YoungsModulus) override
Sets the YoungsModulus.
Definition gsMaterialMatrixNonlinear.hpp:1032
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
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
std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t, const index_t) const
Specialization for incompressible Sij(i,j) for OG materials implemented analytically (not implemented...
Definition gsMaterialMatrixNonlinear.h:789
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
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 }
std::enable_if< _mat==Material::NH &&_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 NH materials implemented analytically.
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.
Definition gsMaterialMatrixNonlinear.hpp:218
std::enable_if< _mat==Material::NH_ext &&_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 Extended NH materials implemented analyti...
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.
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
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
void setRatio(const gsFunctionSet< T > &Ratio) override
Sets the Ratio for the MR material.
Definition gsMaterialMatrixNonlinear.h:197
void setAlpha(const index_t &i, const gsFunctionSet< T > &Alpha_i) override
Sets Alpha_i.
Definition gsMaterialMatrixNonlinear.h:208
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
Implementation of _dPsi(i,j,c,cinv) for MR materials.
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
Same as _eval3D_vector_impl for the Cauchy stress.
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
std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t, const index_t, const gsMatrix< T > &, const gsMatrix< T > &) const
Specialization for compressible Sij(i,j,c,cinv) for OG materials implemented analytically (not implem...
Definition gsMaterialMatrixNonlinear.h:828
std::enable_if< _mat==Material::NH &&_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 NH materials implemented analytically.
enum MatIntegration isVecIntegrated() const override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.h:130
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
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
Implementation of the 3D (in-plane+thickness) evaluator of the material matrix, specialization compre...
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 incompressible materials.
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
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
std::enable_if< _mat==Material::NH_ext &&_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 Extended NH materials implemented analytically.
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...
std::enable_if<!_com &&(_mat==Material::MR), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for incompressible MR materials.
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.
Definition gsMaterialMatrixNonlinear.hpp:266
void defaultOptions() override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.hpp:195
T _Sa(const index_t a) const
Component of the stress.
Definition gsMaterialMatrixNonlinear.hpp:2642
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
std::ostream & print(std::ostream &os) const override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.hpp:153
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
Implementation of _dPsi(i,j,c,cinv) for Extended NH materials.
std::enable_if< _com &&(_mat==Material::NH_ext), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for compressible Extended NH materials.
const function_ptr getMu(const index_t &i) const override
Gets Mu_i.
Definition gsMaterialMatrixNonlinear.h:205
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.
std::enable_if< _com, T >::type _Sa_impl(const index_t a) const
Specialization of _Sa(a) for compressible materials.
Definition gsMaterialMatrixNonlinear.hpp:2650
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
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 compressible Extended NH materials.
std::enable_if< _mat==Material::NH &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for NH materials implemented analytically.
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
std::enable_if< _imp==Implementation::Spectral, 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 all materials implemented spectrally.
void setMu(const index_t &i, const gsFunctionSet< T > &Mu_i) override
Sets Mu_i.
Definition gsMaterialMatrixNonlinear.h:202
std::enable_if< _mat==Material::NH_ext &&_imp==Implementation::Analytical, T >::type _Cijkl_impl(const index_t, const index_t, const index_t, const index_t) const
Specialization for incompressible Cijkl(i,j,k,l) for Extended NH materials implemented analytically (...
Definition gsMaterialMatrixNonlinear.h:702
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
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
std::enable_if< _com &&(_mat==Material::MR), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for compressible MR materials.
std::enable_if<!(_imp==Implementation::Spectral), T >::type _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
Specialization for compressible Cijkl(i,j,k,l,c,cinv) for all materials implemented not spectrally.
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 incompressible materials.
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::MR &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for MR materials implemented analytically.
std::enable_if< _mat==Material::OG &&_imp==Implementation::Analytical, T >::type _Cijkl_impl(const index_t, const index_t, const index_t, const index_t) const
Specialization for incompressible Cijkl(i,j,k,l) for OG materials implemented analytically (not imple...
Definition gsMaterialMatrixNonlinear.h:696
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
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
Implementation of the 3D (in-plane+thickness) evaluator of the stress vector, specialization for comp...
const function_ptr getRatio() const override
Gets the Ratio for the MR material.
Definition gsMaterialMatrixNonlinear.h:199
std::enable_if< _imp==Implementation::Spectral, 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 all materials implemented spectrally.
void pstretchDir_into(const index_t patch, const gsMatrix< T > &u, gsMatrix< T > &result) const override
See gsMaterialMatrixBase for details.
Definition gsMaterialMatrixNonlinear.hpp:257
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
const function_ptr getAlpha(const index_t &i) const override
Gets Alpha_i.
Definition gsMaterialMatrixNonlinear.h:211
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.
Definition gsMaterialMatrixNonlinear.hpp:2456
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
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
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
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
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
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....
Definition gsMaterialMatrixNonlinear.hpp:2592
void setPoissonsRatio(const gsFunctionSet< T > &PoissonsRatio) override
Sets the Poisson's Ratio.
Definition gsMaterialMatrixNonlinear.hpp:1044
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 incompressible NH materials.
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
std::enable_if< _com &&(_mat==Material::OG), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for compressible OG materials.
std::enable_if< _mat==Material::MR &&_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 MR materials implemented analytically.
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_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
const function_ptr getYoungsModulus() const override
Gets the YoungsModulus.
Definition gsMaterialMatrixNonlinear.hpp:1038
std::enable_if< _imp==Implementation::Spectral, T >::type _Sij_impl(const index_t i, const index_t j) const
Specialization for incompressible Sij(i,j) for all materials implemented spectrally.
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
Implementation of the 3D (in-plane+thickness) evaluator of the stress vector, specialization for inco...
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:124
const function_ptr getPoissonsRatio() const override
Gets the Poisson's Ratio.
Definition gsMaterialMatrixNonlinear.hpp:1050
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
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
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
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
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
Same as _eval3D_vector_impl for the Cauchy stress.
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
Implementation of the 3D (in-plane+thickness) evaluator of the material matrix, specialization for in...
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 incompressible materials.
std::enable_if< _com &&(_mat==Material::OG), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for compressible OG materials.
std::enable_if< _mat==Material::NH &&_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 NH materials implemented analytically.
std::enable_if< _com &&(_mat==Material::MR), T >::type _d2Psi_dab_impl(const index_t a, const index_t b) const
Specialization of _d2Psi_dab(a,b) for compressible MR materials.
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
std::enable_if< _imp==Implementation::Generalized, 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 all materials implemented generally.
std::enable_if<!_com, T >::type _Sa_impl(const index_t a) const
Specialization of _Sa(a) for incompressible materials.
std::enable_if<!_com &&(_mat==Material::OG), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for incompressible OG materials.
std::enable_if< _imp==Implementation::Spectral, 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 all materials implemented spectrally.
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_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
std::enable_if<!_com &&(_mat==Material::NH), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for incompressible NH materials.
std::enable_if< _mat==Material::SvK &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t, const index_t, const gsMatrix< T > &, const gsMatrix< T > &) const
Specialization for compressible Sij(i,j,c,cinv) for SvK materials implemented analytically.
Definition gsMaterialMatrixNonlinear.h:812
std::enable_if<!_com &&(_mat==Material::MR), T >::type _dPsi_da_impl(const index_t a) const
Specialization of _dPsi_da(a) for incompressible MR materials.
std::enable_if< _mat==Material::NH_ext &&_imp==Implementation::Analytical, T >::type _Sij_impl(const index_t, const index_t) const
Specialization for incompressible Sij(i,j) for Extended NH materials implemented analytically (not im...
Definition gsMaterialMatrixNonlinear.h:795
std::enable_if<!_com &&(_mat==Material::NH_ext), T >::type _dPsi_da_impl(const index_t) const
Specialization of _dPsi_da(a) for incompressible Extended NH materials (not implemented)
Definition gsMaterialMatrixNonlinear.h:1114
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.
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
A matrix with arbitrary coefficient type and fixed or dynamic size.
Definition gsMatrix.h:41
A vector with arbitrary coefficient type and fixed or dynamic size.
Definition gsVector.h:37
Material
This class describes a material model.
Definition gsMaterialMatrixUtils.h:51
Implementation
This class describes the way material models are implemented.
Definition gsMaterialMatrixUtils.h:71
MaterialOutput
This class describes the output type.
Definition gsMaterialMatrixUtils.h:99
MatIntegration
This class describes if an object is integrated through-thickness or not.
Definition gsMaterialMatrixUtils.h:36
#define short_t
Definition gsConfig.h:35
#define index_t
Definition gsConfig.h:32
#define GISMO_NO_IMPLEMENTATION
Definition gsDebug.h:129
This object is a cache for computed values from an evaluator.
Base class with dimension in template; used for metric computations.
Provides material matrix utilities.
Provides a list of labeled parameters/options that can be set and accessed easily.
The G+Smo namespace, containing all definitions for the library.