b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2element_continuum_integrate.H
1//------------------------------------------------------------------------
2// b2element_continuum_integrate.H --
3//
4// Integration schemes for 1D, 2D, and 3D continuum elements.
5//
6// written by Thomas Ludwig
7//
8// Copyright (c) 2007-2013,2016,2017
9// SMR Engineering & Development SA
10// 2502 Bienne, Switzerland
11//
12// All Rights Reserved. Proprietary source code. The contents of
13// this file may not be disclosed to third parties, copied or
14// duplicated in any form, in whole or in part, without the prior
15// written permission of SMR.
16//
17// CONTENTS:
18//
19// - Several parameter classes for one-dimensional Gauss-Legendre
20// integration, for integration over triangles, and for integration
21// over tetrahedrons. These classes can be used to implement own
22// integration routines, re-using the tested/verified parameters.
23// These parameter classes are of purely static, that is, they need
24// no constructor nor per-object data.
25//
26// - A class IS_* for each element shape. Instances of these classes
27// can be configured for different integration schemes and for
28// different integration order/number of points.
29//------------------------------------------------------------------------
30
31#ifndef __B2ELEMENT_CONTINUUM_INTEGRATE_H__
32#define __B2ELEMENT_CONTINUUM_INTEGRATE_H__
33
34#include <map>
35
36#include "elements/properties/b2solid_mechanics.H"
37#include "elements/smr/b2element_continuum_util.H"
38#include "utils/b2linear_algebra.H"
39
40namespace b2000 {
41
42//----------------------------------------------------------------------
43// Parameters for 1-dimensional Gauss-Legendre integration.
44//----------------------------------------------------------------------
45
46class GL_Param_1 {
47public:
48 static const int n = 1;
49 static const int o = 1;
50 static const double r[1];
51 static const double w[1];
52};
53
54class GL_Param_2 {
55public:
56 static const int n = 2;
57 static const int o = 3;
58 static const double r[2];
59 static const double w[2];
60};
61
62class GL_Param_3 {
63public:
64 static const int n = 3;
65 static const int o = 5;
66 static const double r[3];
67 static const double w[3];
68};
69
70class GL_Param_4 {
71public:
72 static const int n = 4;
73 static const int o = 7;
74 static const double r[4];
75 static const double w[4];
76};
77
78class GL_Param_5 {
79public:
80 static const int n = 5;
81 static const int o = 9;
82 static const double r[5];
83 static const double w[5];
84};
85
86class GL_Param_6 {
87public:
88 static const int n = 6;
89 static const int o = 11;
90 static const double r[6];
91 static const double w[6];
92};
93
94class GL_Param_7 {
95public:
96 static const int n = 7;
97 static const int o = 13;
98 static const double r[7];
99 static const double w[7];
100};
101
102class GL_Param_8 {
103public:
104 static const int n = 8;
105 static const int o = 15;
106 static const double r[8];
107 static const double w[8];
108};
109
110class GL_Param_9 {
111public:
112 static const int n = 9;
113 static const int o = 17;
114 static const double r[9];
115 static const double w[9];
116};
117
118class GL_Param_10 {
119public:
120 static const int n = 10;
121 static const int o = 19;
122 static const double r[10];
123 static const double w[10];
124};
125
126class GL_Param_11 {
127public:
128 static const int n = 11;
129 static const int o = 21;
130 static const double r[11];
131 static const double w[11];
132};
133
134class GL_Param_12 {
135public:
136 static const int n = 12;
137 static const int o = 23;
138 static const double r[12];
139 static const double w[12];
140};
141
142class GL_Param_13 {
143public:
144 static const int n = 13;
145 static const int o = 25;
146 static const double r[13];
147 static const double w[13];
148};
149
150class GL_Param_14 {
151public:
152 static const int n = 14;
153 static const int o = 27;
154 static const double r[14];
155 static const double w[14];
156};
157
158class GL_Param_15 {
159public:
160 static const int n = 15;
161 static const int o = 29;
162 static const double r[15];
163 static const double w[15];
164};
165
166class GL_Param_16 {
167public:
168 static const int n = 16;
169 static const int o = 31;
170 static const double r[16];
171 static const double w[16];
172};
173
174class GL_Param_17 {
175public:
176 static const int n = 17;
177 static const int o = 33;
178 static const double r[17];
179 static const double w[17];
180};
181
182class GL_Param_18 {
183public:
184 static const int n = 18;
185 static const int o = 35;
186 static const double r[18];
187 static const double w[18];
188};
189
190class GL_Param_19 {
191public:
192 static const int n = 19;
193 static const int o = 37;
194 static const double r[19];
195 static const double w[19];
196};
197
198class GL_Param_20 {
199public:
200 static const int n = 20;
201 static const int o = 39;
202 static const double r[20];
203 static const double w[20];
204};
205
206class GL_Param_21 {
207public:
208 static const int n = 21;
209 static const int o = 41;
210 static const double r[21];
211 static const double w[21];
212};
213
214class GL_Param_22 {
215public:
216 static const int n = 22;
217 static const int o = 43;
218 static const double r[22];
219 static const double w[22];
220};
221
222class GL_Param_23 {
223public:
224 static const int n = 23;
225 static const int o = 45;
226 static const double r[23];
227 static const double w[23];
228};
229
230class GL_Param_24 {
231public:
232 static const int n = 24;
233 static const int o = 47;
234 static const double r[24];
235 static const double w[24];
236};
237
238class GL_Param_25 {
239public:
240 static const int n = 25;
241 static const int o = 49;
242 static const double r[25];
243 static const double w[25];
244};
245
246class GL_Param_26 {
247public:
248 static const int n = 26;
249 static const int o = 51;
250 static const double r[26];
251 static const double w[26];
252};
253
254class GL_Param_27 {
255public:
256 static const int n = 27;
257 static const int o = 53;
258 static const double r[27];
259 static const double w[27];
260};
261
262class GL_Param_28 {
263public:
264 static const int n = 28;
265 static const int o = 55;
266 static const double r[28];
267 static const double w[28];
268};
269
270class GL_Param_29 {
271public:
272 static const int n = 29;
273 static const int o = 57;
274 static const double r[29];
275 static const double w[29];
276};
277
278class GL_Param_30 {
279public:
280 static const int n = 30;
281 static const int o = 59;
282 static const double r[30];
283 static const double w[30];
284};
285
286class GL_Param_31 {
287public:
288 static const int n = 31;
289 static const int o = 61;
290 static const double r[31];
291 static const double w[31];
292};
293
294class GL_Param_32 {
295public:
296 static const int n = 32;
297 static const int o = 63;
298 static const double r[32];
299 static const double w[32];
300};
301
302//----------------------------------------------------------------------
303// Parameters for 1-dimensional Gauss-Legendre-Lobatto integration.
304//----------------------------------------------------------------------
305
306class GLL_Param_1 {
307public:
308 static const int n = 1;
309 static const int o = 1;
310 static const double r[1];
311 static const double w[1];
312};
313
314class GLL_Param_2 {
315public:
316 static const int n = 2;
317 static const int o = 1;
318 static const double r[2];
319 static const double w[2];
320};
321
322class GLL_Param_3 {
323public:
324 static const int n = 3;
325 static const int o = 3;
326 static const double r[3];
327 static const double w[3];
328};
329
330class GLL_Param_4 {
331public:
332 static const int n = 4;
333 static const int o = 5;
334 static const double r[4];
335 static const double w[4];
336};
337
338class GLL_Param_5 {
339public:
340 static const int n = 5;
341 static const int o = 7;
342 static const double r[5];
343 static const double w[5];
344};
345
346class GLL_Param_6 {
347public:
348 static const int n = 6;
349 static const int o = 9;
350 static const double r[6];
351 static const double w[6];
352};
353
354class GLL_Param_7 {
355public:
356 static const int n = 7;
357 static const int o = 11;
358 static const double r[7];
359 static const double w[7];
360};
361
362class GLL_Param_8 {
363public:
364 static const int n = 8;
365 static const int o = 13;
366 static const double r[8];
367 static const double w[8];
368};
369
370class GLL_Param_9 {
371public:
372 static const int n = 9;
373 static const int o = 15;
374 static const double r[9];
375 static const double w[9];
376};
377
378class GLL_Param_10 {
379public:
380 static const int n = 10;
381 static const int o = 17;
382 static const double r[10];
383 static const double w[10];
384};
385
386class GLL_Param_11 {
387public:
388 static const int n = 11;
389 static const int o = 19;
390 static const double r[11];
391 static const double w[11];
392};
393
394class GLL_Param_12 {
395public:
396 static const int n = 12;
397 static const int o = 21;
398 static const double r[12];
399 static const double w[12];
400};
401
402class GLL_Param_13 {
403public:
404 static const int n = 13;
405 static const int o = 23;
406 static const double r[13];
407 static const double w[13];
408};
409
410class GLL_Param_14 {
411public:
412 static const int n = 14;
413 static const int o = 25;
414 static const double r[14];
415 static const double w[14];
416};
417
418class GLL_Param_15 {
419public:
420 static const int n = 15;
421 static const int o = 27;
422 static const double r[15];
423 static const double w[15];
424};
425
426class GLL_Param_16 {
427public:
428 static const int n = 16;
429 static const int o = 29;
430 static const double r[16];
431 static const double w[16];
432};
433
434class GLL_Param_17 {
435public:
436 static const int n = 17;
437 static const int o = 31;
438 static const double r[17];
439 static const double w[17];
440};
441
442class GLL_Param_18 {
443public:
444 static const int n = 18;
445 static const int o = 33;
446 static const double r[18];
447 static const double w[18];
448};
449
450class GLL_Param_19 {
451public:
452 static const int n = 19;
453 static const int o = 35;
454 static const double r[19];
455 static const double w[19];
456};
457
458class GLL_Param_20 {
459public:
460 static const int n = 20;
461 static const int o = 37;
462 static const double r[20];
463 static const double w[20];
464};
465
466class GLL_Param_21 {
467public:
468 static const int n = 21;
469 static const int o = 39;
470 static const double r[21];
471 static const double w[21];
472};
473
474class GLL_Param_22 {
475public:
476 static const int n = 22;
477 static const int o = 41;
478 static const double r[22];
479 static const double w[22];
480};
481
482class GLL_Param_23 {
483public:
484 static const int n = 23;
485 static const int o = 43;
486 static const double r[23];
487 static const double w[23];
488};
489
490class GLL_Param_24 {
491public:
492 static const int n = 24;
493 static const int o = 45;
494 static const double r[24];
495 static const double w[24];
496};
497
498class GLL_Param_25 {
499public:
500 static const int n = 25;
501 static const int o = 47;
502 static const double r[25];
503 static const double w[25];
504};
505
506class GLL_Param_26 {
507public:
508 static const int n = 26;
509 static const int o = 49;
510 static const double r[26];
511 static const double w[26];
512};
513
514class GLL_Param_27 {
515public:
516 static const int n = 27;
517 static const int o = 51;
518 static const double r[27];
519 static const double w[27];
520};
521
522class GLL_Param_28 {
523public:
524 static const int n = 28;
525 static const int o = 53;
526 static const double r[28];
527 static const double w[28];
528};
529
530class GLL_Param_29 {
531public:
532 static const int n = 29;
533 static const int o = 55;
534 static const double r[29];
535 static const double w[29];
536};
537
538class GLL_Param_30 {
539public:
540 static const int n = 30;
541 static const int o = 57;
542 static const double r[30];
543 static const double w[30];
544};
545
546class GLL_Param_31 {
547public:
548 static const int n = 31;
549 static const int o = 59;
550 static const double r[31];
551 static const double w[31];
552};
553
554class GLL_Param_32 {
555public:
556 static const int n = 32;
557 static const int o = 61;
558 static const double r[32];
559 static const double w[32];
560};
561
562//----------------------------------------------------------------------
563// Parameters for 1-dimensional Clenshaw-Curtis integration.
564//----------------------------------------------------------------------
565
566class CC_Param_1 {
567public:
568 static const int n = 1;
569 static const int o = 1;
570 static const double r[1];
571 static const double w[1];
572};
573
574class CC_Param_2 {
575public:
576 static const int n = 2;
577 static const int o = 1;
578 static const double r[2];
579 static const double w[2];
580};
581
582class CC_Param_3 {
583public:
584 static const int n = 3;
585 static const int o = 3;
586 static const double r[3];
587 static const double w[3];
588};
589
590class CC_Param_4 {
591public:
592 static const int n = 4;
593 static const int o = n - 1;
594 static const double r[4];
595 static const double w[4];
596};
597
598class CC_Param_5 {
599public:
600 static const int n = 5;
601 static const int o = n - 1;
602 static const double r[5];
603 static const double w[5];
604};
605
606class CC_Param_6 {
607public:
608 static const int n = 6;
609 static const int o = n - 1;
610 static const double r[6];
611 static const double w[6];
612};
613
614class CC_Param_7 {
615public:
616 static const int n = 7;
617 static const int o = n - 1;
618 static const double r[7];
619 static const double w[7];
620};
621
622class CC_Param_8 {
623public:
624 static const int n = 8;
625 static const int o = n - 1;
626 static const double r[8];
627 static const double w[8];
628};
629
630class CC_Param_9 {
631public:
632 static const int n = 9;
633 static const int o = n - 1;
634 static const double r[9];
635 static const double w[9];
636};
637
638class CC_Param_10 {
639public:
640 static const int n = 10;
641 static const int o = n - 1;
642 static const double r[10];
643 static const double w[10];
644};
645
646class CC_Param_11 {
647public:
648 static const int n = 11;
649 static const int o = n - 1;
650 static const double r[11];
651 static const double w[11];
652};
653
654class CC_Param_12 {
655public:
656 static const int n = 12;
657 static const int o = n - 1;
658 static const double r[12];
659 static const double w[12];
660};
661
662class CC_Param_13 {
663public:
664 static const int n = 13;
665 static const int o = n - 1;
666 static const double r[13];
667 static const double w[13];
668};
669
670class CC_Param_14 {
671public:
672 static const int n = 14;
673 static const int o = n - 1;
674 static const double r[14];
675 static const double w[14];
676};
677
678class CC_Param_15 {
679public:
680 static const int n = 15;
681 static const int o = n - 1;
682 static const double r[15];
683 static const double w[15];
684};
685
686class CC_Param_16 {
687public:
688 static const int n = 16;
689 static const int o = n - 1;
690 static const double r[16];
691 static const double w[16];
692};
693
694class CC_Param_17 {
695public:
696 static const int n = 17;
697 static const int o = n - 1;
698 static const double r[17];
699 static const double w[17];
700};
701
702class CC_Param_18 {
703public:
704 static const int n = 18;
705 static const int o = n - 1;
706 static const double r[18];
707 static const double w[18];
708};
709
710class CC_Param_19 {
711public:
712 static const int n = 19;
713 static const int o = n - 1;
714 static const double r[19];
715 static const double w[19];
716};
717
718class CC_Param_20 {
719public:
720 static const int n = 20;
721 static const int o = n - 1;
722 static const double r[20];
723 static const double w[20];
724};
725
726class CC_Param_21 {
727public:
728 static const int n = 21;
729 static const int o = n - 1;
730 static const double r[21];
731 static const double w[21];
732};
733
734class CC_Param_22 {
735public:
736 static const int n = 22;
737 static const int o = n - 1;
738 static const double r[22];
739 static const double w[22];
740};
741
742class CC_Param_23 {
743public:
744 static const int n = 23;
745 static const int o = n - 1;
746 static const double r[23];
747 static const double w[23];
748};
749
750class CC_Param_24 {
751public:
752 static const int n = 24;
753 static const int o = n - 1;
754 static const double r[24];
755 static const double w[24];
756};
757
758class CC_Param_25 {
759public:
760 static const int n = 25;
761 static const int o = n - 1;
762 static const double r[25];
763 static const double w[25];
764};
765
766class CC_Param_26 {
767public:
768 static const int n = 26;
769 static const int o = n - 1;
770 static const double r[26];
771 static const double w[26];
772};
773
774class CC_Param_27 {
775public:
776 static const int n = 27;
777 static const int o = n - 1;
778 static const double r[27];
779 static const double w[27];
780};
781
782class CC_Param_28 {
783public:
784 static const int n = 28;
785 static const int o = n - 1;
786 static const double r[28];
787 static const double w[28];
788};
789
790class CC_Param_29 {
791public:
792 static const int n = 29;
793 static const int o = n - 1;
794 static const double r[29];
795 static const double w[29];
796};
797
798class CC_Param_30 {
799public:
800 static const int n = 30;
801 static const int o = n - 1;
802 static const double r[30];
803 static const double w[30];
804};
805
806class CC_Param_31 {
807public:
808 static const int n = 31;
809 static const int o = n - 1;
810 static const double r[31];
811 static const double w[31];
812};
813
814class CC_Param_32 {
815public:
816 static const int n = 32;
817 static const int o = n - 1;
818 static const double r[32];
819 static const double w[32];
820};
821
822class CC_Param_33 {
823public:
824 static const int n = 33;
825 static const int o = n - 1;
826 static const double r[33];
827 static const double w[33];
828};
829
830//----------------------------------------------------------------------
831// Parameters for integration over triangles.
832//----------------------------------------------------------------------
833
834class T_Param_1 {
835public:
836 static const int n = 1;
837 static const int o = 1;
838 static const double r[1];
839 static const double s[1];
840 static const double w[1];
841};
842
843class T_Param_3 {
844public:
845 static const int n = 3;
846 static const int o = 2;
847 static const double r[3];
848 static const double s[3];
849 static const double w[3];
850};
851
852class T_Param_6 {
853public:
854 static const int n = 6;
855 static const int o = 3;
856 static const double r[6];
857 static const double s[6];
858 static const double w[6];
859};
860
861class T_Param_7 {
862public:
863 static const int n = 7;
864 static const int o = 5;
865 static const double r[7];
866 static const double s[7];
867 static const double w[7];
868};
869
870class T_Param_12 {
871public:
872 static const int n = 12;
873 static const int o = 6;
874 static const double r[12];
875 static const double s[12];
876 static const double w[12];
877};
878
879class T_Param_15 {
880public:
881 static const int n = 15;
882 static const int o = 7;
883 static const double r[15];
884 static const double s[15];
885 static const double w[15];
886};
887
888class T_Param_16 {
889public:
890 static const int n = 16;
891 static const int o = 8;
892 static const double r[16];
893 static const double s[16];
894 static const double w[16];
895};
896
897class T_Param_19 {
898public:
899 static const int n = 19;
900 static const int o = 9;
901 static const double r[19];
902 static const double s[19];
903 static const double w[19];
904};
905
906class T_Param_25 {
907public:
908 static const int n = 25;
909 static const int o = 10;
910 static const double r[25];
911 static const double s[25];
912 static const double w[25];
913};
914
915class T_Param_28 {
916public:
917 static const int n = 28;
918 static const int o = 11;
919 static const double r[28];
920 static const double s[28];
921 static const double w[28];
922};
923
924class T_Param_33 {
925public:
926 static const int n = 33;
927 static const int o = 12;
928 static const double r[33];
929 static const double s[33];
930 static const double w[33];
931};
932
933class T_Param_37 {
934public:
935 static const int n = 37;
936 static const int o = 13;
937 static const double r[37];
938 static const double s[37];
939 static const double w[37];
940};
941
942class T_Param_42 {
943public:
944 static const int n = 42;
945 static const int o = 14;
946 static const double r[42];
947 static const double s[42];
948 static const double w[42];
949};
950
951class T_Param_49 {
952public:
953 static const int n = 49;
954 static const int o = 15;
955 static const double r[49];
956 static const double s[49];
957 static const double w[49];
958};
959
960class T_Param_55 {
961public:
962 static const int n = 55;
963 static const int o = 16;
964 static const double r[55];
965 static const double s[55];
966 static const double w[55];
967};
968
969class T_Param_60 {
970public:
971 static const int n = 60;
972 static const int o = 17;
973 static const double r[60];
974 static const double s[60];
975 static const double w[60];
976};
977
978class T_Param_67 {
979public:
980 static const int n = 67;
981 static const int o = 18;
982 static const double r[67];
983 static const double s[67];
984 static const double w[67];
985};
986
987class T_Param_73 {
988public:
989 static const int n = 73;
990 static const int o = 19;
991 static const double r[73];
992 static const double s[73];
993 static const double w[73];
994};
995
996class T_Param_79 {
997public:
998 static const int n = 79;
999 static const int o = 20;
1000 static const double r[79];
1001 static const double s[79];
1002 static const double w[79];
1003};
1004
1005class T_Param_87 {
1006public:
1007 static const int n;
1008 static const int o;
1009 static const double r[87];
1010 static const double s[87];
1011 static const double w[87];
1012};
1013
1014class T_Param_96 {
1015public:
1016 static const int n;
1017 static const int o;
1018 static const double r[96];
1019 static const double s[96];
1020 static const double w[96];
1021};
1022
1023class T_Param_103 {
1024public:
1025 static const int n;
1026 static const int o;
1027 static const double r[103];
1028 static const double s[103];
1029 static const double w[103];
1030};
1031
1032class T_Param_112 {
1033public:
1034 static const int n;
1035 static const int o;
1036 static const double r[112];
1037 static const double s[112];
1038 static const double w[112];
1039};
1040
1041class T_Param_120 {
1042public:
1043 static const int n;
1044 static const int o;
1045 static const double r[120];
1046 static const double s[120];
1047 static const double w[120];
1048};
1049
1050class T_Param_130 {
1051public:
1052 static const int n;
1053 static const int o;
1054 static const double r[130];
1055 static const double s[130];
1056 static const double w[130];
1057};
1058
1059class T_Param_141 {
1060public:
1061 static const int n;
1062 static const int o;
1063 static const double r[141];
1064 static const double s[141];
1065 static const double w[141];
1066};
1067
1068class T_Param_150 {
1069public:
1070 static const int n;
1071 static const int o;
1072 static const double r[150];
1073 static const double s[150];
1074 static const double w[150];
1075};
1076
1077class T_Param_159 {
1078public:
1079 static const int n;
1080 static const int o;
1081 static const double r[159];
1082 static const double s[159];
1083 static const double w[159];
1084};
1085
1086class T_Param_171 {
1087public:
1088 static const int n;
1089 static const int o;
1090 static const double r[171];
1091 static const double s[171];
1092 static const double w[171];
1093};
1094
1095class T_Param_181 {
1096public:
1097 static const int n;
1098 static const int o;
1099 static const double r[181];
1100 static const double s[181];
1101 static const double w[181];
1102};
1103
1104class T_Param_193 {
1105public:
1106 static const int n;
1107 static const int o;
1108 static const double r[193];
1109 static const double s[193];
1110 static const double w[193];
1111};
1112
1113class T_Param_204 {
1114public:
1115 static const int n;
1116 static const int o;
1117 static const double r[204];
1118 static const double s[204];
1119 static const double w[204];
1120};
1121
1122class T_Param_214 {
1123public:
1124 static const int n;
1125 static const int o;
1126 static const double r[214];
1127 static const double s[214];
1128 static const double w[214];
1129};
1130
1131class T_Param_228 {
1132public:
1133 static const int n;
1134 static const int o;
1135 static const double r[228];
1136 static const double s[228];
1137 static const double w[228];
1138};
1139
1140class T_Param_243 {
1141public:
1142 static const int n;
1143 static const int o;
1144 static const double r[243];
1145 static const double s[243];
1146 static const double w[243];
1147};
1148
1149class T_Param_252 {
1150public:
1151 static const int n;
1152 static const int o;
1153 static const double r[252];
1154 static const double s[252];
1155 static const double w[252];
1156};
1157
1158class T_Param_267 {
1159public:
1160 static const int n;
1161 static const int o;
1162 static const double r[267];
1163 static const double s[267];
1164 static const double w[267];
1165};
1166
1167class T_Param_282 {
1168public:
1169 static const int n;
1170 static const int o;
1171 static const double r[282];
1172 static const double s[282];
1173 static const double w[282];
1174};
1175
1176class T_Param_295 {
1177public:
1178 static const int n;
1179 static const int o;
1180 static const double r[295];
1181 static const double s[295];
1182 static const double w[295];
1183};
1184
1185class T_Param_309 {
1186public:
1187 static const int n;
1188 static const int o;
1189 static const double r[309];
1190 static const double s[309];
1191 static const double w[309];
1192};
1193
1194class T_Param_324 {
1195public:
1196 static const int n;
1197 static const int o;
1198 static const double r[324];
1199 static const double s[324];
1200 static const double w[324];
1201};
1202
1203class T_Param_339 {
1204public:
1205 static const int n;
1206 static const int o;
1207 static const double r[339];
1208 static const double s[339];
1209 static const double w[339];
1210};
1211
1212class T_Param_354 {
1213public:
1214 static const int n;
1215 static const int o;
1216 static const double r[354];
1217 static const double s[354];
1218 static const double w[354];
1219};
1220
1221class T_Param_370 {
1222public:
1223 static const int n;
1224 static const int o;
1225 static const double r[370];
1226 static const double s[370];
1227 static const double w[370];
1228};
1229
1230class T_Param_385 {
1231public:
1232 static const int n;
1233 static const int o;
1234 static const double r[385];
1235 static const double s[385];
1236 static const double w[385];
1237};
1238
1239class T_Param_399 {
1240public:
1241 static const int n;
1242 static const int o;
1243 static const double r[399];
1244 static const double s[399];
1245 static const double w[399];
1246};
1247
1248class T_Param_423 {
1249public:
1250 static const int n;
1251 static const int o;
1252 static const double r[423];
1253 static const double s[423];
1254 static const double w[423];
1255};
1256
1257class T_Param_435 {
1258public:
1259 static const int n;
1260 static const int o;
1261 static const double r[435];
1262 static const double s[435];
1263 static const double w[435];
1264};
1265
1266class T_Param_453 {
1267public:
1268 static const int n;
1269 static const int o;
1270 static const double r[453];
1271 static const double s[453];
1272 static const double w[453];
1273};
1274
1275//----------------------------------------------------------------------
1276// Parameters for integration over tetrahedrons.
1277//----------------------------------------------------------------------
1278
1279// 1-point integration scheme for tetrahedrons (up to order 1 precise).
1280class TE_Param_1 {
1281public:
1282 static const int o = 1;
1283 static const int n = 1;
1284 static const double r[1];
1285 static const double s[1];
1286 static const double t[1];
1287 static const double w[1];
1288
1289private:
1290 static const double a1;
1291};
1292
1293// 4-point integration scheme for tetrahedrons (up to order 2 precise).
1294class TE_Param_4 {
1295public:
1296 static const int o = 2;
1297 static const int n = 4;
1298 static const double r[4];
1299 static const double s[4];
1300 static const double t[4];
1301 static const double w[4];
1302
1303private:
1304 static const double a1;
1305 static const double a2;
1306 static const double w1;
1307};
1308
1309// 5-point integration scheme for tetrahedrons (up to order 3 precise).
1310class TE_Param_5 {
1311public:
1312 static const int o = 3;
1313 static const int n = 5;
1314 static const double r[5];
1315 static const double s[5];
1316 static const double t[5];
1317 static const double w[5];
1318
1319private:
1320 static const double a1;
1321 static const double a2;
1322 static const double a3;
1323 static const double w1;
1324 static const double w2;
1325};
1326
1327// 14-point integration scheme for tetrahedrons (up to order 4 precise).
1328class TE_Param_14 {
1329public:
1330 static const int o = 4;
1331 static const int n = 14;
1332 static const double r[14];
1333 static const double s[14];
1334 static const double t[14];
1335 static const double w[14];
1336};
1337
1338// 15-point integration scheme for tetrahedrons (up to order 5 precise).
1339class TE_Param_15 {
1340public:
1341 static const int o = 5;
1342 static const int n = 15;
1343 static const double r[15];
1344 static const double s[15];
1345 static const double t[15];
1346 static const double w[15];
1347};
1348
1349// 24-point integration scheme for tetrahedrons (up to order 6 precise).
1350class TE_Param_24 {
1351public:
1352 static const int o = 6;
1353 static const int n = 24;
1354 static const double r[24];
1355 static const double s[24];
1356 static const double t[24];
1357 static const double w[24];
1358};
1359
1360//----------------------------------------------------------------------
1361// Parameters for 15-point Irons volume integration scheme (up to
1362// order 5 precise).
1363//----------------------------------------------------------------------
1364
1365class Irons_Param_15 {
1366public:
1367 static const int o = 5;
1368 static const int n = 15;
1369 static const double r[15];
1370 static const double s[15];
1371 static const double t[15];
1372 static const double w[15];
1373
1374 static const double r1;
1375 static const double w1;
1376 static const double w2;
1377 static const double w3;
1378};
1379
1380//----------------------------------------------------------------------
1381// Parameters for 9-point volume reduced integration scheme for
1382// hexahedrons.
1383//----------------------------------------------------------------------
1384
1385class Hex_Reduced_Param_9 {
1386public:
1387 static const int o = 3;
1388 static const int n = 9;
1389 static const double r[9];
1390 static const double s[9];
1391 static const double t[9];
1392 static const double w[9];
1393
1394 static const double r1;
1395 static const double w0;
1396 static const double w1;
1397};
1398
1399//----------------------------------------------------------------------
1400// Point elements.
1401//----------------------------------------------------------------------
1402
1403class IS_P {
1404public:
1405 int get_num() const { return 1; }
1406
1407 void get_point(const int point_index, double& r, double& weight) const {
1408 assert(point_index == 0);
1409 r = 0.;
1410 weight = 1.;
1411 }
1412
1413 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1414 std::fill(rst.data(), rst.data() + 3, 0.);
1415 get_point(point_index, rst[0], weight);
1416 }
1417};
1418
1419//----------------------------------------------------------------------
1420// Integration schemes for line elements.
1421//----------------------------------------------------------------------
1422
1423class IS_L {
1424public:
1425 IS_L() : scheme(0), index(0) {}
1426
1427 int get_num_schemes() const;
1428
1429 int get_scheme() const { return scheme; }
1430
1431 void set_scheme(const int scheme);
1432
1433 void set_scheme_name(const std::string& scheme_name);
1434
1435 const char* get_scheme_name() const { return scheme_names[scheme]; }
1436
1437 void set_order(const int order);
1438
1439 int get_max_order() const;
1440
1441 int get_order() const;
1442
1443 void set_num(const int num_);
1444
1445 int get_num() const;
1446
1447 void get_point(const int point_index, double& r, double& weight) const;
1448
1449 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1450 std::fill(rst.data(), rst.data() + 3, 0.);
1451 get_point(point_index, rst[0], weight);
1452 }
1453
1454 void init(ElementProperty& property);
1455
1456private:
1457 typedef struct {
1458 enum { GL = 0, GLL = 1, CC = 2, EVENLYSPACED = 3 };
1459 } SCHEME;
1460
1461 static const char* scheme_names[4];
1462
1463 int scheme;
1464 int index;
1465
1466 static const int gl_nn = 32;
1467 static const int gl_n[gl_nn];
1468 static const int gl_o[gl_nn];
1469 static const double* gl_r[gl_nn];
1470 static const double* gl_w[gl_nn];
1471 static const int gll_nn = 32;
1472 static const int gll_n[gll_nn];
1473 static const int gll_o[gll_nn];
1474 static const double* gll_r[gll_nn];
1475 static const double* gll_w[gll_nn];
1476 static const int cc_nn = 32;
1477 static const int cc_n[cc_nn];
1478 static const int cc_o[cc_nn];
1479 static const double* cc_r[cc_nn];
1480 static const double* cc_w[cc_nn];
1481};
1482
1483//----------------------------------------------------------------------
1484// Integration schemes for triangular elements.
1485//----------------------------------------------------------------------
1486
1487class IS_T {
1488public:
1489 IS_T() : scheme(0), index(0) {}
1490
1491 int get_num_schemes() const { return 1; }
1492
1493 int get_scheme() const { return scheme; }
1494
1495 void set_scheme(const int scheme);
1496
1497 void set_scheme_name(const std::string& scheme);
1498
1499 const char* get_scheme_name() const { return scheme_names[scheme]; }
1500
1501 void set_order(const int order);
1502
1503 int get_max_order() const;
1504
1505 int get_order() const;
1506
1507 void set_num(const int num_);
1508
1509 int get_num() const;
1510
1511 void get_point(const int point_index, double rst[2], double& weight) const;
1512
1513 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1514 std::fill(rst.data(), rst.data() + 3, 0.);
1515 get_point(point_index, rst.data(), weight);
1516 }
1517
1518 void init(ElementProperty& property);
1519
1520private:
1521 typedef struct {
1522 enum { P = 0 };
1523 } SCHEME;
1524
1525 static const char* scheme_names[1];
1526
1527 static const int pt_nn = 50;
1528 static const int pt_n[pt_nn];
1529 static const int pt_o[pt_nn];
1530 static const double* pt_r[pt_nn];
1531 static const double* pt_s[pt_nn];
1532 static const double* pt_w[pt_nn];
1533
1534 int scheme;
1535 int index;
1536};
1537
1538//----------------------------------------------------------------------
1539// Integration schemes for quadrilateral elements.
1540//----------------------------------------------------------------------
1541
1542class IS_Q {
1543public:
1544 const IS_L& operator[](const int direction) const { return is_l[direction]; }
1545
1546 IS_L& operator[](const int direction) { return is_l[direction]; }
1547
1548 void set_order(const int order) {
1549 int o = 0;
1550 switch (order) {
1551 case 2:
1552 o = 1;
1553 break;
1554 case 4:
1555 o = 2;
1556 break;
1557 case 6:
1558 o = 3;
1559 break;
1560 case 8:
1561 o = 4;
1562 break;
1563 case 10:
1564 o = 5;
1565 break;
1566 case 12:
1567 o = 6;
1568 break;
1569 default:
1570 Exception() << THROW;
1571 break;
1572 }
1573 for (int i = 0; i != 2; ++i) { is_l[i].set_order(o); }
1574 }
1575
1576 int get_order() const { return is_l[0].get_order() + is_l[1].get_order(); }
1577
1578 void set_num(const int num) {
1579 int n = 0;
1580 switch (num) {
1581 case 1:
1582 n = 1;
1583 break;
1584 case 4:
1585 n = 2;
1586 break;
1587 case 9:
1588 n = 3;
1589 break;
1590 case 16:
1591 n = 4;
1592 break;
1593 case 25:
1594 n = 5;
1595 break;
1596 case 36:
1597 n = 6;
1598 break;
1599 case 49:
1600 n = 7;
1601 break;
1602 case 64:
1603 n = 8;
1604 break;
1605 case 81:
1606 n = 9;
1607 break;
1608 case 100:
1609 n = 10;
1610 break;
1611 case 121:
1612 n = 11;
1613 break;
1614 case 144:
1615 n = 12;
1616 break;
1617 case 169:
1618 n = 13;
1619 break;
1620 case 196:
1621 n = 14;
1622 break;
1623 case 225:
1624 n = 15;
1625 break;
1626 case 256:
1627 n = 16;
1628 break;
1629 case 289:
1630 n = 17;
1631 break;
1632 default:
1633 Exception() << THROW;
1634 break;
1635 }
1636 for (int i = 0; i != 2; ++i) { is_l[i].set_num(n); }
1637 }
1638
1639 int get_num() const { return is_l[0].get_num() * is_l[1].get_num(); }
1640
1641 void get_point(const int point_index, double rst[2], double& weight) const {
1642 const int n0 = is_l[0].get_num();
1643 const int index[2] = {point_index % n0, point_index / n0};
1644 double w[2] = {};
1645 for (int i = 0; i != 2; ++i) { is_l[i].get_point(index[i], rst[i], w[i]); }
1646 weight = w[0] * w[1];
1647 }
1648
1649 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1650 std::fill(rst.data(), rst.data() + 3, 0.);
1651 get_point(point_index, rst.data(), weight);
1652 }
1653
1654 void init(ElementProperty& property);
1655
1656private:
1657 IS_L is_l[2];
1658};
1659
1660//----------------------------------------------------------------------
1661// Integration schemes for tetrahedral elements.
1662//----------------------------------------------------------------------
1663
1664class IS_TE {
1665public:
1666 IS_TE() : scheme(0), order(0) {}
1667
1668 int get_num_schemes() const { return 1; }
1669
1670 int get_scheme() const { return scheme; }
1671
1672 void set_scheme(const int scheme);
1673
1674 void set_scheme_name(const std::string& scheme);
1675
1676 const char* get_scheme_name() const { return scheme_names[scheme]; }
1677
1678 void set_order(const int order);
1679
1680 int get_max_order() const;
1681
1682 int get_order() const;
1683
1684 void set_num(const int num_);
1685
1686 int get_num() const;
1687
1688 void get_point(const int index, double rst[3], double& weight) const;
1689
1690 void get_point(const int index, Natural_Coor& rst, double& weight) const {
1691 get_point(index, rst.data(), weight);
1692 }
1693
1694 void init(ElementProperty& property);
1695
1696private:
1697 typedef struct {
1698 enum { P = 0 };
1699 } SCHEME;
1700
1701 static const char* scheme_names[1];
1702
1703 static const int pte_nn = 6;
1704 static const int pte_n[pte_nn];
1705 static const double* pte_r[pte_nn];
1706 static const double* pte_s[pte_nn];
1707 static const double* pte_t[pte_nn];
1708 static const double* pte_w[pte_nn];
1709
1710 static const int pt_nn = 7;
1711 static const int pt_n[pt_nn];
1712 static const double* pt_r[pt_nn];
1713 static const double* pt_s[pt_nn];
1714 static const double* pt_w[pt_nn];
1715
1716 static const int pgl_nn = 7;
1717 static const int pgl_gn[pgl_nn];
1718 static const double* pgl_gr[pgl_nn];
1719 static const double* pgl_gw[pgl_nn];
1720
1721 int scheme;
1722 int order;
1723};
1724
1725//----------------------------------------------------------------------
1726// Integration schemes for prismatic elements.
1727//----------------------------------------------------------------------
1728
1729class IS_PR {
1730public:
1731 IS_T triangle;
1732 IS_L line;
1733
1734 void set_num(const int num) {
1735 switch (num) {
1736 case 2:
1737 triangle.set_num(1);
1738 line.set_num(2);
1739 break;
1740 case 6:
1741 triangle.set_num(3);
1742 line.set_num(2);
1743 break;
1744 case 9:
1745 triangle.set_num(3);
1746 line.set_num(3);
1747 break;
1748 case 21:
1749 triangle.set_num(7);
1750 line.set_num(3);
1751 break;
1752 default:
1753 Exception() << THROW;
1754 break;
1755 }
1756 }
1757
1758 int get_num() const { return triangle.get_num() * line.get_num(); }
1759
1760 void get_point(const int point_index, double rst[3], double& weight) const {
1761 const int n = triangle.get_num();
1762 double w[2] = {};
1763 triangle.get_point(point_index % n, rst, w[0]);
1764 line.get_point(point_index / n, rst[2], w[1]);
1765 weight = w[0] * w[1];
1766 }
1767
1768 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1769 get_point(point_index, rst.data(), weight);
1770 }
1771
1772 void init(ElementProperty& property);
1773};
1774
1775//----------------------------------------------------------------------
1776// Integration schemes for hexahedral elements.
1777//----------------------------------------------------------------------
1778
1779class IS_HE {
1780public:
1781 const IS_L& operator[](const int direction) const { return is_l[direction]; }
1782
1783 IS_L& operator[](const int direction) { return is_l[direction]; }
1784
1785 void set_order(const int order) {
1786 int o = 0;
1787 switch (order) {
1788 case 3:
1789 o = 1;
1790 break;
1791 case 6:
1792 o = 2;
1793 break;
1794 case 9:
1795 o = 3;
1796 break;
1797 case 12:
1798 o = 4;
1799 break;
1800 case 15:
1801 o = 5;
1802 break;
1803 default:
1804 Exception() << THROW;
1805 break;
1806 }
1807 for (int i = 0; i != 3; ++i) { is_l[i].set_order(o); }
1808 }
1809
1810 int get_order() const {
1811 return is_l[0].get_order() + is_l[1].get_order() + is_l[2].get_order();
1812 }
1813
1814 void set_num(const int num) {
1815 int n = 0;
1816 switch (num) {
1817 case 1:
1818 n = 1;
1819 break;
1820 case 8:
1821 n = 2;
1822 break;
1823 case 27:
1824 n = 3;
1825 break;
1826 case 64:
1827 n = 4;
1828 break;
1829 case 125:
1830 n = 5;
1831 break;
1832 default:
1833 Exception() << THROW;
1834 break;
1835 }
1836 for (int i = 0; i != 3; ++i) { is_l[i].set_num(n); }
1837 }
1838
1839 int get_num() const { return is_l[0].get_num() * is_l[1].get_num() * is_l[2].get_num(); }
1840
1841 void get_point(const int point_index, double rst[3], double& weight) const {
1842 const int n0 = is_l[0].get_num();
1843 const int n1 = is_l[1].get_num();
1844 const int index[3] = {point_index % n0, (point_index / n0) % n1, point_index / (n0 * n1)};
1845 double w[3] = {};
1846 for (int i = 0; i != 3; ++i) { is_l[i].get_point(index[i], rst[i], w[i]); }
1847 weight = w[0] * w[1] * w[2];
1848 }
1849
1850 void get_point(const int point_index, Natural_Coor& rst, double& weight) const {
1851 get_point(point_index, rst.data(), weight);
1852 }
1853
1854 void init(ElementProperty& property);
1855
1856private:
1857 IS_L is_l[3];
1858};
1859
1860} // namespace b2000
1861
1862#endif /* __B2ELEMENT_CONTINUUM_INTEGRATE_H__ */
#define THROW
Definition b2exception.H:198
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32