G+Smo  24.08.0
Geometry + Simulation Modules
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
gsThinShellAssembler.h
Go to the documentation of this file.
1 
16 #pragma once
17 
21 
22 #include <gsPde/gsPointLoads.h>
23 
26 
27 namespace gismo
28 {
29 
34 {
35  enum type
36  {
37  automatic = -1, // (applies weak_penalty when needed, strong_Dpatch elsewhere)
38  weak_penalty = 0,
39  weak_nitsche = 1,
40  strong_C0 = 2,
41  strong_Dpatch = 3,
42  strong_ASG1 = 4,
43  };
44 
45  enum continuity
46  {
47  Cminus1 = -1,
48  C0 = 0,
49  C1 = 1,
50  };
51 };
52 
54 {
55  Success,
58 };
59 
60 
61 template<class T> class gsThinShellAssemblerBase;
75 template <short_t d, class T, bool bending>
77 {
78 public:
79  typedef gsBoxTopology::ifContainer ifContainer;
80 
81 public:
82 
92  gsThinShellAssembler(const gsMultiPatch<T> & patches,
93  const gsMultiBasis<T> & basis,
94  const gsBoundaryConditions<T> & bconditions,
95  const gsFunction<T> & surface_force,
96  const gsMaterialMatrixContainer<T> & materialmatrices);
97 
107  gsThinShellAssembler(const gsMultiPatch<T> & patches,
108  const gsMultiBasis<T> & basis,
109  const gsBoundaryConditions<T> & bconditions,
110  const gsFunction<T> & surface_force,
111  gsMaterialMatrixBase<T> * materialmatrix);
112 
122  // gsThinShellAssembler(const gsMultiPatch<T> & patches,
123  // const gsMultiBasis<T> & basis,
124  // const gsBoundaryConditions<T> & bconditions,
125  // const gsFunction<T> & surface_force,
126  // const gsPiecewiseFunction<T> & materialmatrices);
127 
130 
133  {
134  operator=(other);
135  }
136 
139  {
140  operator=(give(other));
141  }
142 
145 
148 
150  gsOptionList & options() {return m_options;}
151 
153  gsExprAssembler<T> assembler() {return m_assembler; }
154 
157 
158  //--------------------- PROBLEM FORMULATION-------------------------------//
160  void setPointLoads(const gsPointLoads<T> & pLoads){ m_pLoads = pLoads; }
161  const gsPointLoads<T> & getPointLoads(){ return m_pLoads; }
162  void setPointMass(const gsPointLoads<T> & pMass){ m_pMass = pMass; }
163  const gsPointLoads<T> & getPointMass(){ return m_pMass; }
164 
166  void setFoundation(const gsFunction<T> & foundation) { m_foundFun = &foundation; m_foundInd = true; }
167 
169  void setPressure(const gsFunction<T> & pressure) { m_pressFun = &pressure; m_pressInd = true; }
170 
172  void updateBCs(const gsBoundaryConditions<T> & bconditions)
173  {
174  m_bcs = bconditions;
175  space m_space = m_assembler.trialSpace(0);
176  this->_assembleDirichlet();
177 
178  m_ddofs = m_space.fixedPart();
179  m_mapper = m_space.mapper();
180  }
181 
183  void homogenizeDirichlet();
184 
186  index_t numDofs() const {return m_assembler.numDofs();}
187 
189  ThinShellAssemblerStatus status() const { return m_status; }
190 
192  //--------------------- SYSTEM ASSEMBLY ----------------------------------//
194 
197 
199  const gsFunctionSet<T> & getSpaceBasis() { return *m_spaceBasis; }
200 
202  gsDofMapper getMapper() const { return m_mapper; } ;
203 
204 private:
206  template<short_t _d, bool _bending>
207  typename std::enable_if<(_d==3) && _bending, ThinShellAssemblerStatus>::type assemble_impl();
208 
210  template<short_t _d, bool _bending>
211  typename std::enable_if<!(_d==3 && _bending), ThinShellAssemblerStatus>::type assemble_impl();
212 
213 public:
215  ThinShellAssemblerStatus assembleMass(const bool lumped = false);
216 
219 
221  ThinShellAssemblerStatus assemble(const gsFunctionSet<T> & deformed, const bool matrix = true, const bool homogenize = true);
222 
224  ThinShellAssemblerStatus assemble(const gsMatrix<T> & solVector, const bool matrix = true, const bool homogenize = true);
225 
228 
231 
233  ThinShellAssemblerStatus assembleMatrix(const gsFunctionSet<T> & deformed, const gsFunctionSet<T> & previous, gsMatrix<T> & update);
234 
236  ThinShellAssemblerStatus assembleMatrix(const gsMatrix<T> & solVector, const gsMatrix<T> & prevVector);
237 
240 
243 
246 
248  ThinShellAssemblerStatus assemblePressureMatrix(const T pressure, const gsFunctionSet<T> & deformed);
249 
250 private:
252  template<short_t _d, bool _bending>
253  typename std::enable_if<(_d==3) && _bending, ThinShellAssemblerStatus>::type
254  assembleMatrix_impl(const gsFunctionSet<T> & deformed );
255 
257  template<short_t _d, bool _bending>
258  typename std::enable_if<!(_d==3 && _bending), ThinShellAssemblerStatus>::type
259  assembleMatrix_impl(const gsFunctionSet<T> & deformed );
260 
262  template<short_t _d, bool _bending>
263  typename std::enable_if<(_d==3) && _bending, ThinShellAssemblerStatus>::type
264  assembleMatrix_impl(const gsFunctionSet<T> & deformed, const gsFunctionSet<T> & previous, gsMatrix<T> & update);
265 
267  template<short_t _d, bool _bending>
268  typename std::enable_if<!(_d==3 && _bending), ThinShellAssemblerStatus>::type
269  assembleMatrix_impl(const gsFunctionSet<T> & deformed, const gsFunctionSet<T> & previous, gsMatrix<T> & update)
271 
272 public:
274  ThinShellAssemblerStatus assembleVector(const gsFunctionSet<T> & deformed, const bool homogenize = true);
275 
277  ThinShellAssemblerStatus assembleVector(const gsMatrix<T> & solVector, const bool homogenize = true);
278 
281 
284 
287 
289  ThinShellAssemblerStatus assemblePressureVector(const T pressure, const gsFunctionSet<T> & deformed);
290 
293 
296 
299 
300 private:
302  template<short_t _d, bool _bending>
303  typename std::enable_if<(_d==3) && _bending, ThinShellAssemblerStatus>::type
304  assembleVector_impl(const gsFunctionSet<T> & deformed, const bool homogenize);
305 
307  template<short_t _d, bool _bending>
308  typename std::enable_if<!(_d==3 && _bending), ThinShellAssemblerStatus>::type
309  assembleVector_impl(const gsFunctionSet<T> & deformed, const bool homogenize);
310 
311 public:
313  gsMatrix<T> boundaryForce(const gsFunctionSet<T> & deformed, const std::vector<patchSide> & patchSides) const;
315  gsMatrix<T> boundaryForce(const gsFunctionSet<T> & deformed, const patchSide & ps) const
316  {
317  std::vector<patchSide> patchSides(1);
318  patchSides[0] = ps;
319  return boundaryForce(deformed,patchSides);
320  }
321 
322 
323 private:
325  template<short_t _d, bool _bending>
326  typename std::enable_if<(_d==3) && _bending, gsMatrix<T> >::type
327  boundaryForce_impl(const gsFunctionSet<T> & deformed, const std::vector<patchSide> & patchSides) const;
328 
330  template<short_t _d, bool _bending>
331  typename std::enable_if<!(_d==3 && _bending), gsMatrix<T> >::type
332  boundaryForce_impl(const gsFunctionSet<T> & deformed, const std::vector<patchSide> & patchSides) const;
333 
334 public:
335 
336  //--------------------- GEOMETRY ACCESS --------------------------------//
338  const gsMultiPatch<T> & geometry() const {return m_patches;}
339  gsMultiPatch<T> & geometry() {return m_patches;}
340  void setGeometry(const gsMultiPatch<T> & patches)
341  {
342  this->_getOptions();
343  m_patches = patches;
344  this->_initialize();
345  }
346 
348  void setUndeformed(const gsMultiPatch<T> & patches)
349  {
350  this->setGeometry(patches);
351  }
352 
353  //--------------------- BASIS ACCESS --------------------------------//
355  const gsMultiBasis<T> & basis() const {return m_basis;}
356  const gsMultiBasis<T> & getBasis() const { return this->basis(); }
357 
358  gsMultiBasis<T> & basis() {return m_basis;}
359  gsMultiBasis<T> & getBasis() { return this->basis(); }
360 
361  void setBasis(const gsMultiBasis<T> & basis)
362  {
363  m_basis = basis;
364  this->_getOptions();
365  this->_initialize();
366  }
367 
369  void setSpaceBasis(const gsFunctionSet<T> & spaceBasis)
370  {
371  m_spaceBasis = &spaceBasis;
372  this->_getOptions();
373  this->_initialize();
374  }
375 
376  // / See \ref gsThinShellAssemblerBase for details
377  // const gsFunctionSet<T> & defGeometry() const {return *m_defpatches;}
378 
380  T getArea(const gsFunctionSet<T> & geometry);
381 
383  T getDisplacementNorm(const gsFunctionSet<T> & deformed);
384 
386  T getElasticEnergy(const gsFunctionSet<T> & deformed);
387 
388  //--------------------- MATERIAL ACCESS --------------------------------//
389  gsMaterialMatrixContainer<T> materials() const {return m_materialMatrices;}
390  gsMaterialMatrixBase<T> * material(const index_t p) const {return m_materialMatrices.piece(p);}
391 
392  //--------------------- SYSTEM ACCESS ----------------------------------//
393  const gsSparseMatrix<T> & matrix() const {return m_assembler.matrix();}
394  gsSparseMatrix<T> & massMatrix() {return m_mass;}
395 
396  const gsMatrix<T> & rhs() const {return m_rhs.size()==0 ? m_assembler.rhs() : m_rhs;}
397  // const gsMatrix<T> & rhs() const {return m_assembler.rhs();}
398 
399  //--------------------- INTERFACE HANDLING -----------------------------//
400  void addStrongC0(const gsBoxTopology::ifContainer & interfaces);
401  void addStrongC1(const gsBoxTopology::ifContainer & interfaces);
402  void addWeakC0(const gsBoxTopology::ifContainer & interfaces);
403  void addWeakC1(const gsBoxTopology::ifContainer & interfaces);
404  void addUncoupled(const gsBoxTopology::ifContainer & interfaces);
405  void initInterfaces();
406 
407  //--------------------- SOLUTION CONSTRUCTION --------------------------//
408  gsMultiPatch<T> constructMultiPatch(const gsMatrix<T> & solVector) const;
409  void updateMultiPatch(const gsMatrix<T> & solVector, gsMultiPatch<T> & mp) const;
410 
412 protected:
413  gsMultiPatch<T> _constructSolution(const gsMatrix<T> & solVector, const gsMultiPatch<T> & undeformed) const;
414 public:
415  // gsMultiPatch<T> constructSolution(const gsMatrix<T> & solVector, const gsMultiPatch<T> & undeformed) const;
416  gsMultiPatch<T> constructSolution(const gsMatrix<T> & solVector) const;
417 
419  void constructSolution(const gsMatrix<T> & solVector, gsMultiPatch<T> & deformed) const;
420 
422  gsMultiPatch<T> constructDisplacement(const gsMatrix<T> & solVector) const;
423 
425  gsMatrix<T> fullSolutionVector(const gsMatrix<T> & vector) const;
426 
428  void constructDisplacement(const gsMatrix<T> & solVector, gsMultiPatch<T> & deformed) const;
429 
431  gsVector<T> constructSolutionVector(const gsMultiPatch<T> & deformed) const;
432 
433  //--------------------- SPECIALS ----------------------------------//
435  void constructStress( const gsFunctionSet<T> & deformed,
436  gsPiecewiseFunction<T> & result,
437  stress_type::type type);
438 
440  void constructStress( const gsFunctionSet<T> & original,
441  const gsFunctionSet<T> & deformed,
442  gsPiecewiseFunction<T> & result,
443  stress_type::type type);
444 
446  gsMatrix<T> computePrincipalStretches(const gsMatrix<T> & points, const gsFunctionSet<T> & deformed, const T z=0);
447 
449  gsMatrix<T> computePrincipalStresses(const gsMatrix<T> & points, const gsFunctionSet<T> & deformed, const T z=0);
450 
452  void projectL2_into(const gsFunction<T> &fun, gsMatrix<T> & result);
453 
455  void projectL2_into(const gsFunction<T> &fun, gsMultiPatch<T> & result);
456 
458  gsMatrix<T> projectL2(const gsFunction<T> &fun);
459 
461  void plotSolution(std::string string, const gsMatrix<T> & solVector);
462 
464  T deformationNorm(const gsMultiPatch<T> & deformed, const gsMultiPatch<T> & original);
465 
467  gsDofMapper getMapper() { return m_mapper; };
468 
470  T interfaceErrorC0(const gsFunctionSet<T> & deformed)
471  { return interfaceErrorC0(deformed,m_patches.interfaces()); }
472  T interfaceErrorC0(const gsFunctionSet<T> & deformed, const ifContainer & iFaces);
473 
475  T interfaceErrorG1(const gsFunctionSet<T> & deformed)
476  { return interfaceErrorG1(deformed,m_patches.interfaces()); }
477  T interfaceErrorG1(const gsFunctionSet<T> & deformed, const ifContainer & iFaces);
478 
481  { return interfaceErrorNormal(deformed,m_patches.interfaces()); }
482  T interfaceErrorNormal(const gsFunctionSet<T> & deformed, const ifContainer & iFaces);
483 
486  { return interfaceErrorGaussCurvature(deformed,m_patches.interfaces()); }
487  T interfaceErrorGaussCurvature(const gsFunctionSet<T> & deformed, const ifContainer & iFaces);
488 
491  { return interfaceErrorMeanCurvature(deformed,m_patches.interfaces()); }
492  T interfaceErrorMeanCurvature(const gsFunctionSet<T> & deformed, const ifContainer & iFaces);
493 
494 protected:
496  void _initialize();
497  void _defaultOptions();
498  void _getOptions();
499 
500  void _assembleNeumann();
501 
502  template <bool _matrix>
503  void _assemblePressure(const gsFunction<T> & pressFun);
504  template <bool _matrix>
505  void _assemblePressure(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed);
506 
507  template <bool _matrix>
508  void _assembleFoundation(const gsFunction<T> & foundFun);
509  template <bool _matrix>
510  void _assembleFoundation(const gsFunction<T> & foundFun, const gsFunctionSet<T> & deformed);
511 
512  template <bool _matrix>
513  void _assembleWeakBCs();
514  template <bool _matrix>
515  void _assembleWeakBCs(const gsFunctionSet<T> & deformed);
516 
517  template <bool _matrix>
518  void _assembleWeakIfc();
519  template <bool _matrix>
520  void _assembleWeakIfc(const gsFunctionSet<T> & deformed);
521 
522  void _assembleDirichlet();
523 
524  void _applyLoads();
525  void _applyMass();
526 
527  void _ifcTest(const T tol = 1e-2);
528  bool _isInPlane(const boundaryInterface & ifc, const T tol = 1e-2);
529 
530 private:
531  template<short_t _d>
532  typename std::enable_if<(_d==3), void>::type
533  _assembleNeumann_impl();
534 
535  template<short_t _d>
536  typename std::enable_if<!(_d==3), void>::type
537  _assembleNeumann_impl();
538 
539  template<short_t _d, bool _matrix>
540  typename std::enable_if<(_d==3) && _matrix, void>::type
541  _assemblePressure_impl(const gsFunction<T> & pressFun);
542 
543  template<short_t _d, bool _matrix>
544  typename std::enable_if<(_d==3) && !_matrix, void>::type
545  _assemblePressure_impl(const gsFunction<T> & pressFun);
546 
547  template<short_t _d, bool _matrix>
548  typename std::enable_if<!(_d==3), void>::type
549  _assemblePressure_impl(const gsFunction<T> & pressFun);
550 
551  template<short_t _d, bool _matrix>
552  typename std::enable_if<(_d==3) && _matrix, void>::type
553  _assemblePressure_impl(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed);
554 
555  template<short_t _d, bool _matrix>
556  typename std::enable_if<(_d==3) && !_matrix, void>::type
557  _assemblePressure_impl(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed);
558 
559  template<short_t _d, bool _matrix>
560  typename std::enable_if<!(_d==3), void>::type
561  _assemblePressure_impl(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed);
562 
563  template<short_t _d, bool _matrix>
564  typename std::enable_if<(_d==3) && _matrix, void>::type
565  _assembleFoundation_impl(const gsFunction<T> & foundFun);
566 
567  template<short_t _d, bool _matrix>
568  typename std::enable_if<(_d==3) && !_matrix, void>::type
569  _assembleFoundation_impl(const gsFunction<T> & foundFun);
570 
571  template<short_t _d, bool _matrix>
572  typename std::enable_if<!(_d==3), void>::type
573  _assembleFoundation_impl(const gsFunction<T> & foundFun);
574 
575  template<short_t _d, bool _matrix>
576  typename std::enable_if<(_d==3) && _matrix, void>::type
577  _assembleFoundation_impl(const gsFunction<T> & foundFun, const gsFunctionSet<T> & deformed);
578 
579  template<short_t _d, bool _matrix>
580  typename std::enable_if<(_d==3) && !_matrix, void>::type
581  _assembleFoundation_impl(const gsFunction<T> & foundFun, const gsFunctionSet<T> & deformed);
582 
583  template<short_t _d, bool _matrix>
584  typename std::enable_if<!(_d==3), void>::type
585  _assembleFoundation_impl(const gsFunction<T> & foundFun, const gsFunctionSet<T> & deformed);
586 
587  template<short_t _d, bool _matrix>
588  typename std::enable_if<(_d==3) && _matrix, void>::type
589  _assembleWeakBCs_impl();
590 
591  template<short_t _d, bool _matrix>
592  typename std::enable_if<(_d==3) && !_matrix, void>::type
593  _assembleWeakBCs_impl();
594 
595  template<short_t _d, bool _matrix>
596  typename std::enable_if<!(_d==3) && _matrix, void>::type
597  _assembleWeakBCs_impl();
598 
599  template<short_t _d, bool _matrix>
600  typename std::enable_if<!(_d==3) && !_matrix, void>::type
601  _assembleWeakBCs_impl();
602 
603  template<short_t _d, bool _matrix>
604  typename std::enable_if<(_d==3) && _matrix, void>::type
605  _assembleWeakBCs_impl(const gsFunctionSet<T> & deformed);
606 
607  template<short_t _d, bool _matrix>
608  typename std::enable_if<(_d==3) && !_matrix, void>::type
609  _assembleWeakBCs_impl(const gsFunctionSet<T> & deformed);
610 
611  template<short_t _d, bool _matrix>
612  typename std::enable_if<!(_d==3) && _matrix, void>::type
613  _assembleWeakBCs_impl(const gsFunctionSet<T> & deformed);
614 
615  template<short_t _d, bool _matrix>
616  typename std::enable_if<!(_d==3) && !_matrix, void>::type
617  _assembleWeakBCs_impl(const gsFunctionSet<T> & deformed);
618 
619  template<short_t _d, bool _matrix>
620  typename std::enable_if<(_d==3) && _matrix, void>::type
621  _assembleWeakIfc_impl();
622 
623  template<short_t _d, bool _matrix>
624  typename std::enable_if<(_d==3) && !_matrix, void>::type
625  _assembleWeakIfc_impl();
626 
627  template<short_t _d, bool _matrix>
628  typename std::enable_if<!(_d==3) && _matrix, void>::type
629  _assembleWeakIfc_impl();
630 
631  template<short_t _d, bool _matrix>
632  typename std::enable_if<!(_d==3) && !_matrix, void>::type
633  _assembleWeakIfc_impl();
634 
635  template<short_t _d, bool _matrix>
636  typename std::enable_if<(_d==3) && _matrix, void>::type
637  _assembleWeakIfc_impl(const gsFunctionSet<T> & deformed);
638 
639  template<short_t _d, bool _matrix>
640  typename std::enable_if<(_d==3) && !_matrix, void>::type
641  _assembleWeakIfc_impl(const gsFunctionSet<T> & deformed);
642 
643  template<short_t _d, bool _matrix>
644  typename std::enable_if<!(_d==3) && _matrix, void>::type
645  _assembleWeakIfc_impl(const gsFunctionSet<T> & deformed);
646 
647  template<short_t _d, bool _matrix>
648  typename std::enable_if<!(_d==3) && !_matrix, void>::type
649  _assembleWeakIfc_impl(const gsFunctionSet<T> & deformed);
650 
651 protected:
652  typedef gsExprAssembler<>::geometryMap geometryMap;
653  typedef gsExprAssembler<>::space space;
654  typedef gsExprAssembler<>::solution solution;
655  typedef gsExprAssembler<>::element element;
656 
657  gsDofMapper m_mapper;
658 
659  gsExprAssembler<> m_assembler;
660  gsExprEvaluator<> m_evaluator;
661 
662  gsMultiPatch<T> m_patches;
663  // const gsFunctionSet<T> * m_defpatches;
664  const gsFunctionSet<T> * m_itpatches;
665  mutable gsMultiBasis<T> m_basis;
666  const gsFunctionSet<T> * m_spaceBasis;
668 
669  mutable gsMatrix<T> m_ddofs;
670 
671  gsSparseMatrix<T> m_mass;
672 
673  const gsFunction<T> * m_forceFun;
674  const gsFunction<T> * m_foundFun;
675  const gsFunction<T> * m_pressFun;
676 
677  gsMaterialMatrixContainer<T> m_materialMatrices;
678 
679  gsPointLoads<T> m_pLoads, m_pMass;
680 
681  mutable gsMatrix<T> m_solvector;
682 
683  gsMatrix<T> m_rhs;
684 
685  mutable gsOptionList m_options;
686 
687  mutable bool m_foundInd;
688  mutable bool m_pressInd;
689 
690  mutable index_t m_continuity;
691 
692  mutable T m_alpha_d_bc,m_alpha_r_bc,m_alpha_d_ifc,m_alpha_r_ifc;
693  mutable index_t m_IfcDefault;
694 
695  mutable ifContainer m_inPlane, m_outPlane, m_uncoupled, m_strongC0, m_weakC0, m_strongC1, m_weakC1, m_unassigned;
696 
697  mutable ThinShellAssemblerStatus m_status;
698 };
699 
700 #ifdef GISMO_WITH_PYBIND11
701 
705  void pybind11_init_gsThinShellAssembler2(pybind11::module &m);
706  void pybind11_init_gsThinShellAssembler3(pybind11::module &m);
707  void pybind11_init_gsThinShellAssembler3nb(pybind11::module &m);
708 
709 #endif // GISMO_WITH_PYBIND11
710 
718 template <class T>
719 class gsThinShellAssemblerBase
720 {
721 public:
723  typedef gsBoxTopology::ifContainer ifContainer;
724 
725 public:
726 
729 
732 
734  virtual gsOptionList & options() = 0;
735 
737  virtual gsExprAssembler<T> assembler() =0;
738 
740  virtual void setOptions(gsOptionList & options) = 0;
741 
743  virtual void setPointLoads(const gsPointLoads<T> & pLoads) = 0;
745  virtual const gsPointLoads<T> & getPointLoads() = 0;
747  virtual void setPointMass(const gsPointLoads<T> & pLoads) = 0;
749  virtual const gsPointLoads<T> & getPointMass() = 0;
750 
756  virtual void setFoundation(const gsFunction<T> & foundation) = 0;
757 
765  virtual void setPressure(const gsFunction<T> & pressure) = 0;
766 
772  virtual void updateBCs(const gsBoundaryConditions<T> & bconditions) = 0;
773 
779  virtual void setBasis(const gsMultiBasis<T> & basis) = 0;
780 
785  virtual const gsMultiBasis<T> & getBasis() = 0;
786 
792  virtual void setUndeformed(const gsMultiPatch<T> & patches) = 0;
793 
795  virtual void homogenizeDirichlet() = 0;
796 
798  virtual index_t numDofs() const = 0;
799 
801  virtual ThinShellAssemblerStatus status() const = 0;
802 
804  virtual ThinShellAssemblerStatus assemble() = 0;
805 
807  virtual void setSpaceBasis(const gsFunctionSet<T> & spaceBasis) = 0;
808 
810  virtual const gsFunctionSet<T> & getSpaceBasis() = 0;
811  // virtual const gsMultiBasis<T> & getSpaceBasis() = 0;
812 
814  virtual ThinShellAssemblerStatus assembleMass(const bool lumped = false) = 0;
815 
818 
827  virtual ThinShellAssemblerStatus assemble(const gsFunctionSet<T> & deformed, const bool matrix = true, const bool homogenize = true) = 0;
828 
837  virtual ThinShellAssemblerStatus assemble(const gsMatrix<T> & solVector, const bool matrix = true, const bool homogenize = true) = 0;
838 
844  virtual ThinShellAssemblerStatus assembleMatrix(const gsFunctionSet<T> & deformed ) = 0;
845 
851  virtual ThinShellAssemblerStatus assembleMatrix(const gsMatrix<T> & solVector ) = 0;
852 
866  virtual ThinShellAssemblerStatus assembleMatrix(const gsFunctionSet<T> & deformed, const gsFunctionSet<T> & previous, gsMatrix<T> & update) = 0;
867 
880  virtual ThinShellAssemblerStatus assembleMatrix(const gsMatrix<T> & solVector, const gsMatrix<T> & prevVector) = 0;
881 
887  virtual ThinShellAssemblerStatus assembleVector(const gsFunctionSet<T> & deformed, const bool homogenize = true) = 0;
888 
894  virtual ThinShellAssemblerStatus assembleVector(const gsMatrix<T> & solVector, const bool homogenize = true) = 0;
895 
901  virtual ThinShellAssemblerStatus assemblePressureMatrix(const gsFunction<T> & pressFun ) = 0;
902 
908  virtual ThinShellAssemblerStatus assemblePressureMatrix(const T pressure) = 0;
909 
916  virtual ThinShellAssemblerStatus assemblePressureMatrix(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed) = 0;
917 
924  virtual ThinShellAssemblerStatus assemblePressureMatrix(const T pressure, const gsFunctionSet<T> & deformed) = 0;
925 
931  virtual ThinShellAssemblerStatus assemblePressureVector(const gsFunction<T> & pressFun ) = 0;
932 
938  virtual ThinShellAssemblerStatus assemblePressureVector(const T pressure) = 0;
939 
946  virtual ThinShellAssemblerStatus assemblePressureVector(const gsFunction<T> & pressFun, const gsFunctionSet<T> & deformed) = 0;
947 
954  virtual ThinShellAssemblerStatus assemblePressureVector(const T pressure, const gsFunctionSet<T> & deformed) = 0;
955 
967  virtual gsMatrix<T> boundaryForce(const gsFunctionSet<T> & deformed , const std::vector<patchSide>& patchSides) const = 0;
968  virtual gsMatrix<T> boundaryForce(const gsFunctionSet<T> & deformed , const patchSide & ps) const = 0;
969 
971  virtual const gsMultiPatch<T> & geometry() const = 0;
972  virtual gsMultiPatch<T> & geometry() = 0;
973 
975  virtual const gsMultiBasis<T> & basis() const = 0;
976  virtual gsMultiBasis<T> & basis() = 0;
977 
978  virtual void setGeometry(const gsMultiPatch<T> & patches) = 0;
979 
980  // /// Returns the deformed geometry
981  // virtual const gsFunctionSet<T> & defGeometry() const = 0;
982 
984  virtual gsMaterialMatrixContainer<T> materials() const = 0;
986  virtual gsMaterialMatrixBase<T> * material(const index_t p) const = 0;
987 
989  virtual T getArea(const gsFunctionSet<T> & geometry) = 0;
990 
992  virtual T getDisplacementNorm(const gsFunctionSet<T> & deformed) = 0;
993 
995  virtual T getElasticEnergy(const gsFunctionSet<T> & deformed) = 0;
996 
998  virtual const gsSparseMatrix<T> & matrix() const = 0;
999 
1001  virtual gsSparseMatrix<T> & massMatrix() = 0;
1002 
1004  virtual const gsMatrix<T> & rhs() const = 0;
1005 
1006  //--------------------- INTERFACE HANDLING -----------------------------//
1007  virtual void addStrongC0(const gsBoxTopology::ifContainer & interfaces) = 0;
1008  virtual void addStrongC1(const gsBoxTopology::ifContainer & interfaces) = 0;
1009  virtual void addWeakC0(const gsBoxTopology::ifContainer & interfaces) = 0;
1010  virtual void addWeakC1(const gsBoxTopology::ifContainer & interfaces) = 0;
1011  virtual void addUncoupled(const gsBoxTopology::ifContainer & interfaces) = 0;
1012  virtual void initInterfaces() = 0;
1013 
1015  virtual gsMultiPatch<T> constructMultiPatch(const gsMatrix<T> & solVector) const = 0;
1016  virtual void updateMultiPatch(const gsMatrix<T> & solVector, gsMultiPatch<T> & mp) const =0;
1017 
1019  virtual gsMultiPatch<T> constructSolution(const gsMatrix<T> & solVector) const = 0;
1020 
1022  virtual void constructSolution(const gsMatrix<T> & solVector, gsMultiPatch<T> & deformed) const = 0;
1023 
1025  virtual gsMultiPatch<T> constructDisplacement(const gsMatrix<T> & solVector) const = 0;
1026 
1028  virtual void constructDisplacement(const gsMatrix<T> & solVector, gsMultiPatch<T> & deformed) const = 0;
1029 
1031  virtual gsMatrix<T> fullSolutionVector(const gsMatrix<T> & vector) const = 0;
1032 
1034  virtual gsVector<T> constructSolutionVector(const gsMultiPatch<T> & deformed) const = 0;
1035 
1037  virtual void constructStress(const gsFunctionSet<T> & deformed,gsPiecewiseFunction<T> & result,stress_type::type type) = 0;
1038 
1040  virtual gsMatrix<T> computePrincipalStretches(const gsMatrix<T> & points, const gsFunctionSet<T> & deformed, const T z=0) = 0;
1041 
1043  virtual gsMatrix<T> computePrincipalStresses(const gsMatrix<T> & points, const gsFunctionSet<T> & deformed, const T z=0) = 0;
1044 
1046  virtual gsDofMapper getMapper() = 0;
1047 
1049  virtual T interfaceErrorC0(const gsFunctionSet<T> & deformed) = 0;
1050  virtual T interfaceErrorC0(const gsFunctionSet<T> & deformed, const ifContainer & iFaces) = 0;
1051 
1053  virtual T interfaceErrorG1(const gsFunctionSet<T> & deformed) = 0;
1054  virtual T interfaceErrorG1(const gsFunctionSet<T> & deformed, const ifContainer & iFaces) = 0;
1055 
1057  virtual T interfaceErrorNormal(const gsFunctionSet<T> & deformed) = 0;
1058  virtual T interfaceErrorNormal(const gsFunctionSet<T> & deformed, const ifContainer & iFaces) = 0;
1059 
1061  virtual T interfaceErrorGaussCurvature(const gsFunctionSet<T> & deformed) = 0;
1062  virtual T interfaceErrorGaussCurvature(const gsFunctionSet<T> & deformed, const ifContainer & iFaces) = 0;
1063 
1065  virtual T interfaceErrorMeanCurvature(const gsFunctionSet<T> & deformed) = 0;
1066  virtual T interfaceErrorMeanCurvature(const gsFunctionSet<T> & deformed, const ifContainer & iFaces) = 0;
1067 
1069  virtual void projectL2_into(const gsFunction<T> &fun, gsMatrix<T> & result) = 0;
1070 
1072  virtual void projectL2_into(const gsFunction<T> &fun, gsMultiPatch<T> & result) = 0;
1073 
1075  virtual gsMatrix<T> projectL2(const gsFunction<T> &fun) = 0;
1076 
1077  virtual void plotSolution(std::string string, const gsMatrix<T> & solVector) = 0;
1078 
1079  virtual T deformationNorm(const gsMultiPatch<T> & deformed, const gsMultiPatch<T> & original) = 0;
1080 
1081  virtual gsDofMapper getMapper() const = 0;
1082 
1083 
1084 };
1085 
1086 #ifdef GISMO_WITH_PYBIND11
1087 
1091  void pybind11_init_gsThinShellAssemblerBase(pybind11::module &m);
1092  void pybind11_enum_gsThinShellAssemblerStatus(pybind11::module &m);
1093 
1094 #endif // GISMO_WITH_PYBIND11
1095 
1096 } // namespace gismo
1097 
1098 
1101 
1102 
1103 #ifndef GISMO_BUILD_LIB
1104 #include GISMO_HPP_HEADER(gsThinShellAssembler.hpp)
1105 #endif
virtual ThinShellAssemblerStatus assemble()=0
Assembles the linear system and corresponding right-hand side.
void constructStress(const gsFunctionSet< T > &deformed, gsPiecewiseFunction< T > &result, stress_type::type type)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2752
virtual void setPressure(const gsFunction< T > &pressure)=0
Registers a scalar function acting as pressure (in normal direction) in normal direction.
const gsPointLoads< T > & getPointMass()
Gets the registered point masses.
Definition: gsThinShellAssembler.h:163
Definition: gsExprAssembler.h:30
std::enable_if<(_d==3)&&_bending, ThinShellAssemblerStatus >::type assembleVector_impl(const gsFunctionSet< T > &deformed, const bool homogenize)
Implementation of assembleVector for surfaces (3D)
Definition: gsThinShellAssembler.hpp:1965
gsMultiBasis< T > & getBasis()
Gets the basis.
Definition: gsThinShellAssembler.h:359
ThinShellAssemblerStatus
Definition: gsThinShellAssembler.h:53
T getArea(const gsFunctionSet< T > &geometry)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2463
#define GISMO_NO_IMPLEMENTATION
Definition: gsDebug.h:129
virtual gsMatrix< T > fullSolutionVector(const gsMatrix< T > &vector) const =0
Reconstruct the solution vector based on the currently stored boundary conditions (thus the mapper)...
gsExprHelper< T >::geometryMap geometryMap
Geometry map type.
Definition: gsExprAssembler.h:58
Struct which represents a certain side of a patch.
Definition: gsBoundary.h:231
gsMatrix< T > boundaryForce(const gsFunctionSet< T > &deformed, const patchSide &ps) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:315
gsDofMapper getMapper()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:467
ThinShellAssemblerStatus assembleMatrix(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1676
virtual const gsPointLoads< T > & getPointMass()=0
Gets the registered point masses.
virtual const gsFunctionSet< T > & getSpaceBasis()=0
Get the basis that is used for assembly (but not for quadrature!)
void _initialize()
Initializes the method.
Definition: gsThinShellAssembler.hpp:226
void setPointMass(const gsPointLoads< T > &pMass)
Registers a gsPointLoads object for a point mass acting on the shell. The point masss must be 1-dimen...
Definition: gsThinShellAssembler.h:162
gsMultiPatch< T > _constructSolution(const gsMatrix< T > &solVector, const gsMultiPatch< T > &undeformed) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2434
virtual const gsMultiPatch< T > & geometry() const =0
Returns the undeformed geometry.
gsMaterialMatrixContainer< T > materials() const
Returns the material matrices used in the class.
Definition: gsThinShellAssembler.h:389
T interfaceErrorC0(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:470
This class serves as the evaluator of material matrices, based on gsMaterialMatrixBase.
Definition: gsMaterialMatrixContainer.h:33
std::enable_if<(_d==3)&&_bending, ThinShellAssemblerStatus >::type assemble_impl()
Specialisation of assemble() for surfaces (3D)
Definition: gsThinShellAssembler.hpp:1517
virtual void setFoundation(const gsFunction< T > &foundation)=0
Registers a stiffness function to be used for handling an elastic foundation, only relevant for 3D sh...
virtual gsMultiPatch< T > constructMultiPatch(const gsMatrix< T > &solVector) const =0
Construct solution field from computed solution vector solVector and returns a multipatch.
virtual void constructStress(const gsFunctionSet< T > &deformed, gsPiecewiseFunction< T > &result, stress_type::type type)=0
Construct Cauchy stress tensor for visualization.
T interfaceErrorNormal(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:480
S give(S &x)
Definition: gsMemory.h:266
Assembly failed due to an error in the expression (e.g. overflow)
Defines the coupling type over interfaces.
Definition: gsThinShellAssembler.h:33
#define index_t
Definition: gsConfig.h:32
Provides a simple container for point loads on multi-patch domains.
A function from a n-dimensional domain to an m-dimensional image.
Definition: gsFunction.h:59
std::enable_if<(_d==3)&&_bending, gsMatrix< T > >::type boundaryForce_impl(const gsFunctionSet< T > &deformed, const std::vector< patchSide > &patchSides) const
Implementation of the boundary force vector for surfaces (3D)
Definition: gsThinShellAssembler.hpp:2265
index_t numDofs() const
Returns the number of degrees of freedom (after initialization)
Definition: gsExprAssembler.h:85
gsMatrix< T > computePrincipalStresses(const gsMatrix< T > &points, const gsFunctionSet< T > &deformed, const T z=0)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2720
ThinShellAssemblerStatus assembleMass(const bool lumped=false)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1415
virtual gsExprAssembler< T > assembler()=0
Returns the internal expression assembler.
space trialSpace(const index_t id) const
Definition: gsExprAssembler.h:232
gsExprAssembler< T > assembler()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:153
void setFoundation(const gsFunction< T > &foundation)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:166
const gsMatrix< T > & rhs() const
Returns a reference to the right-hand side vector that is assembled.
Definition: gsThinShellAssembler.h:396
gsThinShellAssemblerBase()
Default deconstructor.
Definition: gsThinShellAssembler.h:728
Maintains a mapping from patch-local dofs to global dof indices and allows the elimination of individ...
Definition: gsDofMapper.h:68
virtual gsMultiPatch< T > constructSolution(const gsMatrix< T > &solVector) const =0
Construct deformed shell geometry from computed solution vector solVector and returns a multipatch...
This class defines the base class for material matrices.
Definition: gsMaterialMatrixBase.h:32
T interfaceErrorGaussCurvature(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:485
gsVector< T > constructSolutionVector(const gsMultiPatch< T > &deformed) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2654
virtual T interfaceErrorGaussCurvature(const gsFunctionSet< T > &deformed)=0
Returns the Gaussian curvature error over the interface.
T getElasticEnergy(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2496
gsMultiPatch< T > constructMultiPatch(const gsMatrix< T > &solVector) const
Construct solution field from computed solution vector solVector and returns a multipatch.
Definition: gsThinShellAssembler.hpp:2580
ThinShellAssemblerStatus assemblePressureVector(const gsFunction< T > &pressFun)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2150
void projectL2_into(const gsFunction< T > &fun, gsMatrix< T > &result)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2789
const gsMatrix< T > & rhs() const
Returns the right-hand side vector(s)
Definition: gsExprAssembler.h:129
Generic expressions evaluator.
gsMatrix< T > boundaryForce(const gsFunctionSet< T > &deformed, const std::vector< patchSide > &patchSides) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2257
const gsSparseMatrix< T > & matrix() const
Returns the left-hand global matrix.
Definition: gsExprAssembler.h:116
virtual void setUndeformed(const gsMultiPatch< T > &patches)=0
Overwrites the undeformed geometry.
virtual void setPointLoads(const gsPointLoads< T > &pLoads)=0
Registers a gsPointLoads object for point loads acting on the shell.
void setBasis(const gsMultiBasis< T > &basis)
Overwrites the basis.
Definition: gsThinShellAssembler.h:361
std::enable_if<!(_d==3 &&_bending), ThinShellAssemblerStatus >::type assembleMatrix_impl(const gsFunctionSet< T > &deformed, const gsFunctionSet< T > &previous, gsMatrix< T > &update)
Implementation of assembleMatrix for planar geometries (2D)
Definition: gsThinShellAssembler.h:269
ThinShellAssemblerStatus assembleFoundation()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1473
void setPressure(const gsFunction< T > &pressure)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:169
const gsMultiBasis< T > & basis() const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:355
Holds a set of patch-wise bases and their topology information.
Definition: gsMultiBasis.h:36
virtual gsMultiPatch< T > constructDisplacement(const gsMatrix< T > &solVector) const =0
Construct displacement field from computed solution vector solVector and returns a multipatch...
void updateBCs(const gsBoundaryConditions< T > &bconditions)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:172
T interfaceErrorG1(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:475
gsSparseMatrix< T > & massMatrix()
Returns a reference to the mass matrix that is assembled.
Definition: gsThinShellAssembler.h:394
ThinShellAssemblerStatus assembleVector(const gsFunctionSet< T > &deformed, const bool homogenize=true)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1957
virtual ThinShellAssemblerStatus assembleMass(const bool lumped=false)=0
Assembles the mass matrix (including density and thickness!); if lumped=true, a lumped mass matrix wi...
gsMultiPatch< T > constructDisplacement(const gsMatrix< T > &solVector) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2636
Assembles the system matrix and vectors for 2D and 3D shell problems, including geometric nonlinearit...
Definition: gsThinShellAssembler.h:76
virtual T getArea(const gsFunctionSet< T > &geometry)=0
Returns the area of geometry.
gsMaterialMatrixBase< T > * material(const index_t p) const
Returns the material matrix on patch p used in the class.
Definition: gsThinShellAssembler.h:390
void setPointLoads(const gsPointLoads< T > &pLoads)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:160
T deformationNorm(const gsMultiPatch< T > &deformed, const gsMultiPatch< T > &original)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2852
virtual T getElasticEnergy(const gsFunctionSet< T > &deformed)=0
Returns the elastic energy norm, i.e. norm = 0.5 * u&#39;*F_int.
void setUndeformed(const gsMultiPatch< T > &patches)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:348
virtual index_t numDofs() const =0
Returns the number of degrees of freedom in the assembler.
virtual gsMaterialMatrixContainer< T > materials() const =0
Returns the material matrices used in the class.
Definition: gsDirichletValues.h:23
Class containing a set of points on a multi-patch isogeometric domain, together with boundary conditi...
Definition: gsPointLoads.h:64
Interface for the set of functions defined on a domain (the total number of functions in the set equa...
Definition: gsFuncData.h:23
virtual ThinShellAssemblerStatus assembleVector(const gsFunctionSet< T > &deformed, const bool homogenize=true)=0
Assembles the residual vector.
virtual gsSparseMatrix< T > & massMatrix()=0
Returns a reference to the mass matrix that is assembled.
virtual void setPointMass(const gsPointLoads< T > &pLoads)=0
Registers a gsPointLoads object for a point mass acting on the shell. The point masss must be 1-dimen...
virtual ThinShellAssemblerStatus status() const =0
Returns the assembler status.
index_t numDofs() const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:186
Container class for a set of geometry patches and their topology, that is, the interface connections ...
Definition: gsMultiPatch.h:33
virtual ~gsThinShellAssemblerBase()
Default empty constructor.
Definition: gsThinShellAssembler.h:731
Generic evaluator of isogeometric expressions.
Definition: gsExprEvaluator.h:38
Base class for the gsThinShellAssembler.
Definition: gsThinShellAssembler.h:61
void setSpaceBasis(const gsFunctionSet< T > &spaceBasis)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:369
ThinShellAssemblerStatus assembleFoundationVector(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2227
virtual void setOptions(gsOptionList &options)=0
Sets the options of the assembler.
Assembly failed due to a dimension error.
virtual const gsSparseMatrix< T > & matrix() const =0
Returns a reference to the system matrix that is assembled.
virtual gsDofMapper getMapper()=0
Returns the gsDofMapper.
virtual T interfaceErrorMeanCurvature(const gsFunctionSet< T > &deformed)=0
Returns the mean curvature error over the interface.
type
Definition: gsThinShellFunctions.h:40
virtual gsMatrix< T > computePrincipalStresses(const gsMatrix< T > &points, const gsFunctionSet< T > &deformed, const T z=0)=0
Compute the principal stretches in points given a deformed geometry. Optionally, the stretches can be...
void setOptions(gsOptionList &options)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:212
virtual ThinShellAssemblerStatus assemblePressureVector(const gsFunction< T > &pressFun)=0
Assembles the pressure contribution in the system vector (linear)
virtual void projectL2_into(const gsFunction< T > &fun, gsMatrix< T > &result)=0
Projects function fun on the basis and geometry stored in the class and returns the coefficients in r...
const gsMultiPatch< T > & geometry() const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:338
const gsPointLoads< T > & getPointLoads()
Gets the registered point loads.
Definition: gsThinShellAssembler.h:161
gsThinShellAssembler(gsThinShellAssembler &&other)
Move constructor.
Definition: gsThinShellAssembler.h:138
gsThinShellAssembler(const gsThinShellAssembler &other)
Copy constructor (makes deep copy)
Definition: gsThinShellAssembler.h:132
ThinShellAssemblerStatus status() const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:189
gsThinShellAssembler & operator=(const gsThinShellAssembler &other)
Assignment operator.
Definition: gsThinShellAssembler.hpp:84
ThinShellAssemblerStatus assemblePressureMatrix(const gsFunction< T > &pressFun)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2088
virtual void setSpaceBasis(const gsFunctionSet< T > &spaceBasis)=0
Set the basis that is used for assembly (but not for quadrature!)
virtual T getDisplacementNorm(const gsFunctionSet< T > &deformed)=0
Returns the displacement norm, i.e. norm = sqrt(u&#39;*u/area)
Class containing a set of boundary conditions.
Definition: gsBoundaryConditions.h:341
virtual T interfaceErrorG1(const gsFunctionSet< T > &deformed)=0
Returns the G1 error over the interface.
gsMatrix< T > computePrincipalStretches(const gsMatrix< T > &points, const gsFunctionSet< T > &deformed, const T z=0)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2690
virtual void updateBCs(const gsBoundaryConditions< T > &bconditions)=0
Overwrites the boundary conditions.
T getDisplacementNorm(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2477
ThinShellAssemblerStatus assemble()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1502
Provides a container for material matrices for thin shells.
Provides a base class for material matrices.
gsMatrix< T > projectL2(const gsFunction< T > &fun)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2842
virtual gsMatrix< T > boundaryForce(const gsFunctionSet< T > &deformed, const std::vector< patchSide > &patchSides) const =0
Computes the force on a set of boundaries.
virtual ThinShellAssemblerStatus assembleMatrix(const gsFunctionSet< T > &deformed)=0
Assembles the tangential stiffness matrix (nonlinear)
virtual gsMatrix< T > projectL2(const gsFunction< T > &fun)=0
Projects function fun on the basis and geometry stored in the class and returns the coefficients as a...
gsExprHelper< T >::element element
Current element.
Definition: gsExprAssembler.h:57
virtual ThinShellAssemblerStatus assemblePressureMatrix(const gsFunction< T > &pressFun)=0
Assembles the pressure contribution in the system matrix (linear)
virtual const gsMatrix< T > & rhs() const =0
Returns a reference to the right-hand side vector that is assembled.
Struct which represents an interface between two patches.
Definition: gsBoundary.h:649
virtual gsMatrix< T > computePrincipalStretches(const gsMatrix< T > &points, const gsFunctionSet< T > &deformed, const T z=0)=0
Compute the principal stretches in points given a deformed geometry. Optionally, the stretches can be...
virtual ThinShellAssemblerStatus assembleFoundation()=0
Assembles the elastic foundation matrix.
Class which holds a list of parameters/options, and provides easy access to them. ...
Definition: gsOptionList.h:32
T interfaceErrorMeanCurvature(const gsFunctionSet< T > &deformed)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:490
virtual gsVector< T > constructSolutionVector(const gsMultiPatch< T > &deformed) const =0
Reconstruct the solution vector based on the currently stored boundary conditions (thus the mapper)...
virtual gsMaterialMatrixBase< T > * material(const index_t p) const =0
Returns the material matrix on patch p used in the class.
A function depending on an index i, typically referring to a patch/sub-domain. On each patch a differ...
Definition: gsPiecewiseFunction.h:28
gsThinShellAssembler()
Constructor for te shell assembler.
Definition: gsThinShellAssembler.h:129
gsMatrix< T > fullSolutionVector(const gsMatrix< T > &vector) const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2642
gsMultiPatch< T > constructSolution(const gsMatrix< T > &solVector) const
Construct deformed shell geometry from computed solution vector solVector and returns a multipatch...
Definition: gsThinShellAssembler.hpp:2445
expr::gsFeSolution< T > solution
Solution type.
Definition: gsExprAssembler.h:61
virtual T interfaceErrorC0(const gsFunctionSet< T > &deformed)=0
Returns the C1 error over the interface.
gsDofMapper getMapper() const
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:202
std::enable_if<(_d==3)&&_bending, ThinShellAssemblerStatus >::type assembleMatrix_impl(const gsFunctionSet< T > &deformed)
Implementation of assembleMatrix for surfaces (3D)
Definition: gsThinShellAssembler.hpp:1684
virtual void setBasis(const gsMultiBasis< T > &basis)=0
Overwrites the basis.
gsOptionList & options()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:150
Generic expressions matrix assembly.
virtual gsOptionList & options()=0
Returns the options of the assembler.
virtual void homogenizeDirichlet()=0
Sets the Dirichlet BCs to zero.
virtual const gsMultiBasis< T > & getBasis()=0
Gets the basis.
Provides evaluation function for stresses.
gsBoxTopology::ifContainer ifContainer
Default deconstructor.
Definition: gsThinShellAssembler.h:723
const gsFunctionSet< T > & getSpaceBasis()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.h:199
virtual T interfaceErrorNormal(const gsFunctionSet< T > &deformed)=0
Returns the normal vector error over the interface.
virtual const gsPointLoads< T > & getPointLoads()=0
Gets the registered point loads.
void plotSolution(std::string string, const gsMatrix< T > &solVector)
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:2520
void homogenizeDirichlet()
See gsThinShellAssemblerBase for details.
Definition: gsThinShellAssembler.hpp:1293
const gsSparseMatrix< T > & matrix() const
Returns a reference to the system matrix that is assembled.
Definition: gsThinShellAssembler.h:393