NiHu  2.0
lib_shape.hpp
Go to the documentation of this file.
1 // This file is a part of NiHu, a C++ BEM template library.
2 //
3 // Copyright (C) 2012-2019 Peter Fiala <fiala@hit.bme.hu>
4 // Copyright (C) 2012-2019 Peter Rucz <rucz@hit.bme.hu>
5 //
6 // This program is free software: you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation, either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
23 #ifndef LIB_SHAPE_HPP_INCLUDED
24 #define LIB_SHAPE_HPP_INCLUDED
25 
26 #include "../core/shapeset.hpp"
27 #include "lib_domain.hpp"
28 
30 #include "quad_1_gauss_shape_set.hpp"
31 #include "tria_1_gauss_shape_set.hpp"
32 
33 
34 namespace NiHu
35 {
36 
45 
46 
49 
50 namespace shape_set_traits
51 {
52  template <>
54  {
55  enum { value = 0 };
56  };
57 
58  template <>
60 
61  template <>
63 
64  template <>
66 }
67 
76 template<>
78 {
79  typedef shape_set_traits::shape_value_type<line_1_shape_set, 0>::type shape_t;
81 public:
82  static shape_t eval(xi_t const &xi)
83  {
84  return (shape_t() <<
85  1.0 - xi[0],
86  1.0 + xi[0]
87  ).finished() / 2.0;
88  }
89 };
90 
98 template<>
100 {
101  typedef shape_set_traits::shape_value_type<line_1_shape_set, 1>::type shape_t;
103 public:
104  static shape_t eval(xi_t const &)
105  {
106  return (shape_t() <<
107  -0.5,
108  +0.5
109  ).finished();
110  }
111 };
112 
113 
121 template<>
123 {
124  typedef shape_set_traits::shape_value_type<line_1_shape_set, 2>::type shape_t;
126 public:
127  static shape_t eval(xi_t const &)
128  {
129  return shape_t::Zero();
130  }
131 };
132 
133 
136 
137 namespace shape_set_traits
138 {
139  template <>
141  {
142  enum { value = 0 };
143  };
144 
145  template <>
147 
148  template <>
150 
151  template <>
153 }
154 
155 
164 template<>
166 {
167  typedef shape_set_traits::shape_value_type<tria_1_shape_set, 0>::type shape_t;
169 public:
170  static shape_t eval(xi_t const &xi)
171  {
172  return (shape_t() <<
173  1.0 - xi[0] - xi[1],
174  xi[0],
175  xi[1]
176  ).finished();
177  }
178 };
179 
184 template<>
186 {
187  typedef shape_set_traits::shape_value_type<tria_1_shape_set, 1>::type shape_t;
189 public:
190  static shape_t eval(xi_t const &)
191  {
192  return (shape_t() <<
193  -1.0, -1.0,
194  +1.0, 0.0,
195  0.0, +1.0
196  ).finished();
197  }
198 };
199 
200 
205 template<>
207 {
208  typedef shape_set_traits::shape_value_type<tria_1_shape_set, 2>::type shape_t;
210 public:
211  static shape_t eval(xi_t const &)
212  {
213  return shape_t::Zero();
214  }
215 };
216 
217 
218 
221 
222 namespace shape_set_traits
223 {
224  template <>
226  {
227  enum { value = 1 };
228  };
229 
230  template <>
232 
233  template <>
235 
236  template <>
238 }
239 
240 
252 template<>
254 {
255  typedef shape_set_traits::shape_value_type<quad_1_shape_set, 0>::type shape_t;
257 public:
258  static shape_t eval(xi_t const &xi)
259  {
260  return (shape_t() <<
261  (1.0 - xi[0])*(1.0 - xi[1]),
262  (1.0 + xi[0])*(1.0 - xi[1]),
263  (1.0 + xi[0])*(1.0 + xi[1]),
264  (1.0 - xi[0])*(1.0 + xi[1])
265  ).finished() / 4.0;
266  }
267 };
268 
273 template<>
275 {
276  typedef shape_set_traits::shape_value_type<quad_1_shape_set, 1>::type shape_t;
278 public:
279  static shape_t eval(xi_t const &xi)
280  {
281  return (shape_t() <<
282  -(1.0 - xi[1]), -(1.0 - xi[0]),
283  +(1.0 - xi[1]), -(1.0 + xi[0]),
284  +(1.0 + xi[1]), +(1.0 + xi[0]),
285  -(1.0 + xi[1]), +(1.0 - xi[0])
286  ).finished() / 4.0;
287  }
288 };
289 
294 template<>
296 {
297  typedef shape_set_traits::shape_value_type<quad_1_shape_set, 2>::type shape_t;
299 public:
300  static shape_t eval(xi_t const &)
301  {
302  return (shape_t() <<
303  0.0, +.25, 0.0,
304  0.0, -.25, 0.0,
305  0.0, +.25, 0.0,
306  0.0, -.25, 0.0
307  ).finished();
308  }
309 };
310 
311 
314 
315 namespace shape_set_traits
316 {
317  template <>
319  {
320  enum { value = 1 };
321  };
322 
323  template <unsigned Order>
325 }
326 
327 
343 template<>
345 {
346  typedef shape_set_traits::shape_value_type<brick_1_shape_set, 0>::type shape_t;
348 public:
349  static shape_t eval(xi_t const &xi)
350  {
351  return (shape_t() <<
352  (1.0 - xi[0])*(1.0 - xi[1])*(1.0 - xi[2]),
353  (1.0 + xi[0])*(1.0 - xi[1])*(1.0 - xi[2]),
354  (1.0 + xi[0])*(1.0 + xi[1])*(1.0 - xi[2]),
355  (1.0 - xi[0])*(1.0 + xi[1])*(1.0 - xi[2]),
356  (1.0 - xi[0])*(1.0 - xi[1])*(1.0 + xi[2]),
357  (1.0 + xi[0])*(1.0 - xi[1])*(1.0 + xi[2]),
358  (1.0 + xi[0])*(1.0 + xi[1])*(1.0 + xi[2]),
359  (1.0 - xi[0])*(1.0 + xi[1])*(1.0 + xi[2])
360  ).finished() / 8.0;
361  }
362 };
363 
369 template<>
371 {
372  typedef shape_set_traits::shape_value_type<brick_1_shape_set, 1>::type shape_t;
374 public:
375  static shape_t eval(xi_t const &xi)
376  {
377  return (shape_t() <<
378  (-1.0)*(1.0 - xi[1])*(1.0 - xi[2]), (1.0 - xi[0])*(-1.0)*(1.0 - xi[2]), (1.0 - xi[0])*(1.0 - xi[1])*(-1.0),
379  (+1.0)*(1.0 - xi[1])*(1.0 - xi[2]), (1.0 + xi[0])*(-1.0)*(1.0 - xi[2]), (1.0 + xi[0])*(1.0 - xi[1])*(-1.0),
380  (+1.0)*(1.0 + xi[1])*(1.0 - xi[2]), (1.0 + xi[0])*(+1.0)*(1.0 - xi[2]), (1.0 + xi[0])*(1.0 + xi[1])*(-1.0),
381  (-1.0)*(1.0 + xi[1])*(1.0 - xi[2]), (1.0 - xi[0])*(+1.0)*(1.0 - xi[2]), (1.0 - xi[0])*(1.0 + xi[1])*(-1.0),
382  (-1.0)*(1.0 - xi[1])*(1.0 + xi[2]), (1.0 - xi[0])*(-1.0)*(1.0 + xi[2]), (1.0 - xi[0])*(1.0 - xi[1])*(+1.0),
383  (+1.0)*(1.0 - xi[1])*(1.0 + xi[2]), (1.0 + xi[0])*(-1.0)*(1.0 + xi[2]), (1.0 + xi[0])*(1.0 - xi[1])*(+1.0),
384  (+1.0)*(1.0 + xi[1])*(1.0 + xi[2]), (1.0 + xi[0])*(+1.0)*(1.0 + xi[2]), (1.0 + xi[0])*(1.0 + xi[1])*(+1.0),
385  (-1.0)*(1.0 + xi[1])*(1.0 + xi[2]), (1.0 - xi[0])*(+1.0)*(1.0 + xi[2]), (1.0 - xi[0])*(1.0 + xi[1])*(+1.0)
386  ).finished() / 8.0;
387  }
388 };
389 
395 template<>
397 {
398  typedef shape_set_traits::shape_value_type<brick_1_shape_set, 2>::type shape_t;
400 public:
401  static shape_t eval(xi_t const &xi)
402  {
403  return (shape_t() <<
404  0.0, 1.0 - xi[2], 1.0 - xi[1], 0.0, 1.0 - xi[0], 0.0,
405  0.0, xi[2] - 1.0, xi[1] - 1.0, 0.0, xi[0] + 1.0, 0.0,
406  0.0, 1.0 - xi[2], -xi[1] - 1.0, 0.0, -xi[0] - 1.0, 0.0,
407  0.0, xi[2] - 1.0, xi[1] + 1.0, 0.0, xi[0] - 1.0, 0.0,
408  0.0, xi[2] + 1.0, xi[1] - 1.0, 0.0, xi[0] - 1.0, 0.0,
409  0.0, -xi[2] - 1.0, 1.0 - xi[1], 0.0, -xi[0] - 1.0, 0.0,
410  0.0, xi[2] + 1.0, xi[1] + 1.0, 0.0, xi[0] + 1.0, 0.0,
411  0.0, -xi[2] - 1.0, -xi[1] - 1.0, 0.0, 1.0 - xi[0], 0.0
412  ).finished() / 8.0;
413  }
414 };
415 
416 
417 // Forward declaration
418 class line_2_shape_set;
419 
420 namespace shape_set_traits
421 {
422  template <>
424 
425  template <>
427  {
428  enum { value = 3 };
429  };
430 
431  template <>
433  {
434  enum { value = 2 };
435  };
436 
437  template <>
439  {
440  enum { value = 1 };
441  };
442 
443  template <unsigned Order>
445  {
447  };
448 
449  template <>
451  {
453  };
454 
455  template <>
457  {
459  };
460 
461  template <>
463  {
465  };
466 }
467 
469 class line_2_shape_set : public shape_set_base<line_2_shape_set>
470 {
471 public:
473  typedef typename base_t::corners_t corners_t;
474  typedef typename base_t::corner_iterator_t corner_iterator_t;
475 
479  static corner_iterator_t corner_begin_impl()
480  {
481  return m_corners.cbegin();
482  }
483 
484 protected:
486  static const corners_t m_corners;
487 };
488 
489 
495 template<>
497 {
498  typedef shape_set_traits::shape_value_type<line_2_shape_set, 0>::type shape_t;
500 public:
501  static shape_t eval(xi_t const &xi)
502  {
503  return (shape_t() <<
504  -xi[0]*(1.0 - xi[0]) / 2.0,
505  1.0 - xi[0] * xi[0],
506  xi[0] * (1.0 + xi[0]) / 2.0
507  ).finished();
508  }
509 };
510 
516 template<>
518 {
519  typedef shape_set_traits::shape_value_type<line_2_shape_set, 1>::type shape_t;
521 public:
522  static shape_t eval(xi_t const &xi)
523  {
524  return (shape_t() <<
525  xi[0] - 0.5,
526  -2.0*xi[0],
527  xi[0] + 0.5
528  ).finished();
529  }
530 };
531 
536 template<>
538 {
539  typedef shape_set_traits::shape_value_type<line_2_shape_set, 2>::type shape_t;
541 public:
542  static shape_t eval(xi_t const &)
543  {
544  return shape_t(1.0, -2.0, 1.0);
545  }
546 };
547 
548 
549 // Forward declaration
550 class tria_2_shape_set;
551 
552 namespace shape_set_traits
553 {
554  template <>
556 
557  template <>
559  {
560  enum { value = 6 };
561  };
562 
563  template <>
565  {
566  enum { value = 2 };
567  };
568 
569  template <>
571  {
572  enum { value = 2 };
573  };
574 
575  template <unsigned Order>
577  {
579  };
580 
581  template <>
583  {
585  };
586 
587  template <>
589  {
591  };
592 }
593 
594 
598 class tria_2_shape_set : public shape_set_base<tria_2_shape_set>
599 {
600 public:
602  typedef typename base_t::corners_t corners_t;
603  typedef typename base_t::corner_iterator_t corner_iterator_t;
604 
605 
609  static corner_iterator_t corner_begin_impl()
610  {
611  return m_corners.cbegin();
612  }
613 
614 protected:
616  static const corners_t m_corners;
617 };
618 
624 template<>
626 {
627  typedef shape_set_traits::shape_value_type<tria_2_shape_set, 0>::type shape_t;
629 public:
630  static shape_t eval(xi_t const &_xi)
631  {
632  auto xi = _xi[0], eta = _xi[1];
633  return (shape_t() <<
634  (eta + xi - 1.0)*(2.0*eta + 2.0*xi - 1.0),
635  -4.0*xi*(eta + xi - 1),
636  xi*(2.0*xi - 1.0),
637  4.0*eta*xi,
638  eta*(2.0*eta - 1.0),
639  -4.0*eta*(eta + xi - 1.0)
640  ).finished();
641  }
642 };
643 
649 template<>
651 {
652  typedef shape_set_traits::shape_value_type<tria_2_shape_set, 1>::type shape_t;
654 public:
655  static shape_t eval(xi_t const &_xi)
656  {
657  auto xi = _xi[0], eta = _xi[1];
658  return (shape_t() <<
659  4.0*eta + 4 * xi - 3, 4.0*eta + 4 * xi - 3.0,
660  4.0 - 8 * xi - 4 * eta, -4.0*xi,
661  4.0*xi - 1.0, 0.0,
662  4.0*eta, 4.0*xi,
663  0.0, 4.0*eta - 1.0,
664  -4.0*eta, 4.0 - 4.0*xi - 8.0*eta
665  ).finished();
666  }
667 };
668 
673 template<>
675 {
676  typedef shape_set_traits::shape_value_type<tria_2_shape_set, 2>::type shape_t;
678 public:
679  static shape_t eval(xi_t const &)
680  {
681  return (shape_t() <<
682  4.0, 4.0, 4.0,
683  -8.0, -4.0, 0.0,
684  4.0, 0.0, 0.0,
685  0.0, 4.0, 0.0,
686  0.0, 0.0, 4.0,
687  0.0, -4.0, -8.0
688  ).finished();
689  }
690 };
691 
692 
693 // Forward declaration
694 class quad_2_shape_set;
695 
696 namespace shape_set_traits
697 {
698  template <>
700 
701  template <>
703  {
704  enum { value = 9 };
705  };
706 
707  template <>
709  {
710  enum { value = 2 };
711  };
712 
713  template <>
715  {
716  enum { value = 3 };
717  };
718 
719  template <unsigned Order>
721  {
723  };
724 
725  template <>
727  {
729  };
730 
731  template <>
733  {
735  };
736 }
737 
738 
742 class quad_2_shape_set : public shape_set_base<quad_2_shape_set>
743 {
744 public:
746  typedef typename base_t::corners_t corners_t;
747  typedef typename base_t::corner_iterator_t corner_iterator_t;
748 
752  static corner_iterator_t corner_begin_impl()
753  {
754  return m_corners.cbegin();
755  }
756 
757 protected:
759  static corners_t const m_corners;
760 };
761 
762 
768 template<>
770 {
771  typedef shape_set_traits::shape_value_type<quad_2_shape_set, 0>::type shape_t;
773 public:
774  static shape_t eval(xi_t const &_xi)
775  {
776  auto xi = _xi[0], eta = _xi[1];
777  auto _1mxi = 1 - xi, _1pxi = 1 + xi;
778  auto _1meta = 1 - eta, _1peta = 1 + eta;
779  return (shape_t() <<
780  _1mxi*xi * _1meta*eta / 4.0,
781  _1mxi*_1pxi * _1meta*(-eta) / 2.0,
782  _1pxi*xi * _1meta*(-eta) / 4.0,
783  _1pxi*xi * _1meta*_1peta / 2.0,
784  _1pxi*xi * _1peta*eta / 4.0,
785  _1mxi*_1pxi * _1peta*eta / 2.0,
786  _1mxi*(-xi) * _1peta*eta / 4.0,
787  _1mxi*(-xi) * _1meta*_1peta / 2.0,
788  _1mxi*_1pxi * _1meta*_1peta
789  ).finished();
790  }
791 };
792 
798 template<>
800 {
801  typedef shape_set_traits::shape_value_type<quad_2_shape_set, 1>::type shape_t;
803 public:
804  static shape_t eval(xi_t const &_xi)
805  {
806  auto xi = _xi[0], eta = _xi[1], xi2 = xi*xi, eta2 = eta*eta;
807  return (shape_t() <<
808  eta*(2.0*xi - 1.0)*(eta - 1.0) / 4.0, xi*(2.0*eta - 1.0)*(xi - 1.0) / 4.0,
809  -xi*eta*(eta - 1.0), -(xi2 - 1.0)*(2.0*eta - 1.0) / 2.0,
810  eta*(2.0*xi + 1.0)*(eta - 1.0) / 4.0, xi*(2.0*eta - 1.0)*(xi + 1.0) / 4.0,
811  -(2.0*xi + 1.0)*(eta2 - 1.0) / 2.0, -xi*eta*(xi + 1.0),
812  eta*(2.0*xi + 1.0)*(eta + 1.0) / 4.0, xi*(2.0*eta + 1.0)*(xi + 1.0) / 4.0,
813  -xi*eta*(eta + 1.0), -(xi2 - 1.0)*(2.0*eta + 1.0) / 2.0,
814  eta*(2.0*xi - 1.0)*(eta + 1.0) / 4.0, xi*(2.0*eta + 1.0)*(xi - 1.0) / 4.0,
815  -(2.0*xi - 1.0)*(eta2 - 1.0) / 2.0, -xi*eta*(xi - 1.0),
816  2.0*xi*(eta2 - 1.0), 2.0*eta*(xi2 - 1.0)
817  ).finished();
818  }
819 };
820 
826 template<>
828 {
829  typedef shape_set_traits::shape_value_type<quad_2_shape_set, 2>::type shape_t;
831 public:
832  static shape_t eval(xi_t const &_xi)
833  {
834  auto xi = _xi[0], eta = _xi[1], xi2 = xi*xi, eta2 = eta*eta;
835  return (shape_t() <<
836  eta2 / 2.0 - eta / 2.0, eta*xi - xi / 2.0 - eta / 2.0 + 1.0 / 4.0, xi2 / 2.0 - xi / 2.0,
837  -eta2 + eta, xi - 2 * eta*xi, 1.0 - xi2,
838  eta2 / 2.0 - eta / 2.0, eta / 2.0 - xi / 2.0 + eta*xi - 1.0 / 4.0, xi2 / 2.0 + xi / 2.0,
839  1.0 - eta2, -eta - 2 * eta*xi, -xi2 - xi,
840  eta2 / 2.0 + eta / 2.0, eta / 2.0 + xi / 2.0 + eta*xi + 1.0 / 4.0, xi2 / 2.0 + xi / 2.0,
841  -eta2 - eta, -xi - 2 * eta*xi, 1.0 - xi2,
842  eta2 / 2.0 + eta / 2.0, xi / 2.0 - eta / 2.0 + eta*xi - 1.0 / 4.0, xi2 / 2.0 - xi / 2.0,
843  1.0 - eta2, eta - 2 * eta*xi, -xi2 + xi,
844  2 * eta2 - 2.0, 4 * eta*xi, 2 * xi2 - 2.0
845  ).finished();
846  }
847 };
848 
849 
850 // Forward declaration
851 class quad_28_shape_set;
852 
853 namespace shape_set_traits
854 {
855  template <>
857 
858  template <>
860  {
861  enum { value = 8 };
862  };
863 
864  template <>
866  {
867  enum { value = 2 };
868  };
869 
870  template <>
872  {
873  enum { value = 3 };
874  };
875 
876  template <unsigned Order>
878  {
880  };
881 
882  template <>
884  {
886  };
887 
888  template <>
890  {
892  };
893 }
894 
896 class quad_28_shape_set : public shape_set_base<quad_28_shape_set>
897 {
898 public:
900  typedef typename base_t::corners_t corners_t;
901  typedef typename base_t::corner_iterator_t corner_iterator_t;
902 
906  static corner_iterator_t corner_begin_impl()
907  {
908  return m_corners.cbegin();
909  }
910 
911 protected:
913  static corners_t const m_corners;
914 };
915 
916 
922 template<>
924 {
925  typedef shape_set_traits::shape_value_type<quad_28_shape_set, 0>::type shape_t;
927 public:
928  static shape_t eval(xi_t const &_xi)
929  {
930  auto xi = _xi[0], eta = _xi[1], xi2 = xi*xi, eta2 = eta*eta;
931  return (shape_t() <<
932  -((xi - 1.0)*(eta - 1.0)*(xi + eta + 1.0)) / 4.0,
933  ((xi2 - 1.0)*(eta - 1.0)) / 2.0,
934  ((xi + 1.0)*(eta - 1.0)*(eta - xi + 1.0)) / 4.0,
935  -((eta2 - 1.0)*(xi + 1.0)) / 2.0,
936  ((xi + 1.0)*(eta + 1.0)*(xi + eta - 1.0)) / 4.0,
937  -((xi2 - 1.0)*(eta + 1.0)) / 2.0,
938  ((xi - 1.0)*(eta + 1.0)*(xi - eta + 1.0)) / 4.0,
939  ((eta2 - 1.0)*(xi - 1.0)) / 2.0
940  ).finished();
941  }
942 };
943 
949 template<>
951 {
952  typedef shape_set_traits::shape_value_type<quad_28_shape_set, 1>::type shape_t;
954 public:
955  static shape_t eval(xi_t const &_xi)
956  {
957  auto x = _xi[0], y = _xi[1], x2 = x*x, y2 = y*y;
958  return (shape_t() <<
959  -((2.0*x + y)*(y - 1.0)) / 4.0, -((x + 2 * y)*(x - 1.0)) / 4.0,
960  x*(y - 1.0), (x2 - 1.0) / 2.0,
961  -((2.0*x - y)*(y - 1.0)) / 4.0, -((x - 2 * y)*(x + 1.0)) / 4.0,
962  (1.0 - y2) / 2.0, -y*(x + 1.0),
963  ((2.0*x + y)*(y + 1.0)) / 4.0, ((x + 2 * y)*(x + 1.0)) / 4.0,
964  -x*(y + 1.0), (1.0 - x2) / 2.0,
965  ((2.0*x - y)*(y + 1.0)) / 4.0, ((x - 2 * y)*(x - 1.0)) / 4.0,
966  (y2 - 1.0) / 2.0, y*(x - 1.0)
967  ).finished();
968  }
969 };
970 
976 template<>
978 {
979  typedef shape_set_traits::shape_value_type<quad_28_shape_set, 2>::type shape_t;
981 public:
982  static shape_t eval(xi_t const &_xi)
983  {
984  auto xi(_xi[0]), eta(_xi[1]);
985  return (shape_t() <<
986  .5 - eta / 2.0, 1 / 4.0 - xi / 2.0 - eta / 2.0, .5 - xi / 2.0,
987  eta - 1.0, xi, 0.0,
988  .5 - eta / 2.0, eta / 2.0 - xi / 2.0 - 1 / 4.0, xi / 2.0 + .5,
989  0.0, -eta, -xi - 1.0,
990  eta / 2.0 + .5, eta / 2.0 + xi / 2.0 + 1 / 4.0, xi / 2.0 + .5,
991  -eta - 1.0, -xi, 0.0,
992  eta / 2.0 + .5, xi / 2.0 - eta / 2.0 - 1 / 4.0, .5 - xi / 2.0,
993  0.0, eta, xi - 1.0
994  ).finished();
995  }
996 };
997 
998 } // namespace NiHu
999 
1000 
1001 #endif // LIB_SHAPE_HPP_INCLUDED
1002 
NiHu::quad_28_shape_set::m_corners
static const corners_t m_corners
the corner nodes of the shape set
Definition: lib_shape.hpp:913
NiHu::line_2_shape_set::m_corners
static const corners_t m_corners
the corner nodes of the shape set
Definition: lib_shape.hpp:486
NiHu::quad_28_shape_set
quadratic 8-noded quad shape function set
Definition: lib_shape.hpp:896
NiHu::tria_domain
a 2D triangle domain
Definition: lib_domain.hpp:101
NiHu::quad_2_shape_set
quadratic 9-noded quad shape function set
Definition: lib_shape.hpp:742
NiHu::quad_2_shape_set::m_corners
static const corners_t m_corners
the corner nodes of the shape set
Definition: lib_shape.hpp:759
NiHu::shape_set_traits::domain
Defines the domain where the shape function set is defined.
Definition: shapeset.hpp:106
NiHu::corner_index
Definition: shapeset.hpp:76
NiHu::shape_set_traits::position_dof_vector
defines the nodal degrees of freedoms of the shape functions
Definition: shapeset.hpp:164
tmp::vector
Compile time vector with an arbitrary number of arguments.
Definition: vector.hpp:42
NiHu::quad_2_shape_set::corner_begin_impl
static corner_iterator_t corner_begin_impl()
return begin iterator to the corner nodes
Definition: lib_shape.hpp:752
NiHu::line_2_shape_set::corner_begin_impl
static corner_iterator_t corner_begin_impl()
return begin iterator to the corner nodes
Definition: lib_shape.hpp:479
NiHu::quad_28_shape_set::corner_begin_impl
static corner_iterator_t corner_begin_impl()
return begin iterator to the corner nodes
Definition: lib_shape.hpp:906
NiHu::line_2_shape_set
quadratic 3-noded line shape function set
Definition: lib_shape.hpp:469
NiHu::line_domain
a 1D line domain
Definition: lib_domain.hpp:53
NiHu::shape_set_base
Shapeset base class for CRTP.
Definition: shapeset.hpp:195
NiHu::shape_set_traits::corner_index_vector
Definition: shapeset.hpp:176
NiHu::constant_shape_set
Constant interpolation functions.
Definition: shapeset.hpp:290
NiHu::shape_set_traits::jacobian_order
Defines the polynomial order of the shape set's Jacobian.
Definition: shapeset.hpp:130
NiHu::matrix_function_complexity::constant
the returned matrix is constant and can be stored
Definition: conditional_precompute.hpp:38
NiHu::matrix_function_complexity::general
the returned matrix should be computed on the fly
Definition: conditional_precompute.hpp:40
NiHu::tria_2_shape_set::corner_begin_impl
static corner_iterator_t corner_begin_impl()
return begin iterator to the corner nodes
Definition: lib_shape.hpp:609
NiHu::matrix_function_complexity::zero
the returned matrix is a zero expression
Definition: conditional_precompute.hpp:36
NiHu::tria_2_shape_set::m_corners
static const corners_t m_corners
the corner nodes of the shape set
Definition: lib_shape.hpp:616
lib_domain.hpp
implementation of library domains
NiHu::tria_2_shape_set
quadratic 6-noded tria shape function set
Definition: lib_shape.hpp:598
NiHu::shape_set_traits::polynomial_order
Defines the polynomial order of the shape set.
Definition: shapeset.hpp:124
NiHu::isoparam_shape_set
Isoparametric shape sets.
Definition: shapeset.hpp:409
NiHu::shape_set_traits::num_nodes
Defines the number of shape functions in the set.
Definition: shapeset.hpp:110
line_1_gauss_shape_set.hpp
implementation of shape set NiHu::line_1_gauss_shape_set
NiHu::quad_domain
a 2D quad domain
Definition: lib_domain.hpp:157
NiHu::shape_function
Definition: shapeset.hpp:82
NiHu::shape_set_traits::shape_complexity
Defines the complexity to determine if the shape functions can be precomputed or not.
Definition: shapeset.hpp:134