17 for(
int i = 0; i < 12; i++) {
_pOrderEdge[i] = order; }
18 for(
int j = 0; j < 6; j++) {
46 case(1):
return 0.5 * (1 + u);
47 case(2):
return 0.5 * (1 - u);
48 case(3):
return 0.5 * (1 + v);
49 case(4):
return 0.5 * (1 - v);
50 case(5):
return 0.5 * (1 + w);
51 case(6):
return 0.5 * (1 - w);
52 default:
throw std::runtime_error(
"j must be : 1<=j<=6");
57 double const &u,
double const &v,
double const &w,
58 std::vector<std::vector<double> > &edgeBasis,
59 std::vector<std::vector<double> > &faceBasis,
60 std::vector<std::vector<double> > &bubbleBasis)
62 std::vector<std::vector<double> > lobattoVector(3);
63 lobattoVector[0] = std::vector<double>(
_pb1);
64 lobattoVector[1] = std::vector<double>(
_pb2);
65 lobattoVector[2] = std::vector<double>(
_pb3);
66 for(
int it = 2; it <=
_pb1 + 1; it++) {
69 for(
int it = 2; it <=
_pb2 + 1; it++) {
72 for(
int it = 2; it <=
_pb3 + 1; it++) {
75 std::vector<std::vector<double> > legendreVector(3);
76 legendreVector[0] = std::vector<double>(
_pb1 + 1);
77 legendreVector[1] = std::vector<double>(
_pb2 + 1);
78 legendreVector[2] = std::vector<double>(
_pb3 + 1);
79 for(
unsigned int k = 0; k < legendreVector[0].size(); k++) {
82 for(
unsigned int k = 0; k < legendreVector[1].size(); k++) {
85 for(
unsigned int k = 0; k < legendreVector[2].size(); k++) {
88 std::vector<double> lambda(6, 0);
95 std::vector<double> product(12, 0);
96 product[0] = lambda[3] * lambda[5];
97 product[1] = lambda[1] * lambda[5];
98 product[2] = lambda[1] * lambda[3];
99 product[3] = lambda[0] * lambda[5];
100 product[4] = lambda[3] * lambda[0];
101 product[5] = lambda[2] * lambda[5];
102 product[6] = lambda[2] * lambda[0];
103 product[7] = lambda[2] * lambda[1];
104 product[8] = lambda[3] * lambda[4];
105 product[9] = lambda[4] * lambda[1];
106 product[10] = lambda[4] * lambda[0];
107 product[11] = lambda[4] * lambda[2];
108 int indexEdgeBasis = 0;
109 for(
int iEdge = 0; iEdge <
_nedge; iEdge++) {
135 for(
int indexEdgeFunc = 0; indexEdgeFunc <
_pOrderEdge[iEdge] + 1;
137 for(
int j = 0; j < 3; j++) {
138 edgeBasis[indexEdgeBasis][j] =
139 direction[j] * legendreVector[uvw][indexEdgeFunc] * product[iEdge];
146 int indexFaceFunction = 0;
147 for(
int iFace = 0; iFace <
_nfaceQuad; iFace++) {
149 std::vector<double> direction1(3, 0);
150 std::vector<double> direction2(3, 0);
197 for(
int index1 = 0; index1 <
_pOrderFace1[iFace] + 1; index1++) {
198 for(
int index2 = 0; index2 <
_pOrderFace2[iFace]; index2++) {
199 for(
int j = 0; j < 3; j++) {
200 faceBasis[indexFaceFunction][j] =
201 lambda[indexLambda] * legendreVector[uvw1][index1] *
202 lobattoVector[uvw2][index2] * direction1[j];
208 for(
int index1 = 0; index1 <
_pOrderFace1[iFace]; index1++) {
209 for(
int index2 = 0; index2 <
_pOrderFace2[iFace] + 1; index2++) {
210 for(
int j = 0; j < 3; j++) {
211 faceBasis[indexFaceFunction][j] =
212 lambda[indexLambda] * lobattoVector[uvw1][index1] *
213 legendreVector[uvw2][index2] * direction2[j];
221 int indexBubbleBasis = 0;
222 for(
int ipb1 = 0; ipb1 <
_pb1 + 1; ipb1++) {
223 for(
int ipb2 = 0; ipb2 <
_pb2; ipb2++) {
224 for(
int ipb3 = 0; ipb3 <
_pb3; ipb3++) {
225 bubbleBasis[indexBubbleBasis][0] = legendreVector[0][ipb1] *
226 lobattoVector[1][ipb2] *
227 lobattoVector[2][ipb3];
228 bubbleBasis[indexBubbleBasis][1] = 0;
229 bubbleBasis[indexBubbleBasis][2] = 0;
234 for(
int ipb1 = 0; ipb1 <
_pb1; ipb1++) {
235 for(
int ipb2 = 0; ipb2 <
_pb2 + 1; ipb2++) {
236 for(
int ipb3 = 0; ipb3 <
_pb3; ipb3++) {
237 bubbleBasis[indexBubbleBasis][0] = 0;
238 bubbleBasis[indexBubbleBasis][1] = lobattoVector[0][ipb1] *
239 legendreVector[1][ipb2] *
240 lobattoVector[2][ipb3];
241 bubbleBasis[indexBubbleBasis][2] = 0;
246 for(
int ipb1 = 0; ipb1 <
_pb1; ipb1++) {
247 for(
int ipb2 = 0; ipb2 <
_pb2; ipb2++) {
248 for(
int ipb3 = 0; ipb3 <
_pb3 + 1; ipb3++) {
249 bubbleBasis[indexBubbleBasis][0] = 0;
250 bubbleBasis[indexBubbleBasis][1] = 0;
251 bubbleBasis[indexBubbleBasis][2] = lobattoVector[0][ipb1] *
252 lobattoVector[1][ipb2] *
253 legendreVector[2][ipb3];
261 int const &flagOrientation,
int const &edgeNumber,
262 std::vector<std::vector<double> > &edgeFunctions,
263 const std::vector<std::vector<double> > &eTablePositiveFlag,
264 const std::vector<std::vector<double> > &eTableNegativeFlag)
266 if(flagOrientation == -1) {
269 for(
int i = 0; i <= edgeNumber; i++) { constant2 +=
_pOrderEdge[i] + 1; }
270 constant2 = constant2 - 1;
272 for(
int k = constant1; k <= constant2; k++) {
273 edgeFunctions[k][0] = eTableNegativeFlag[k][0];
274 edgeFunctions[k][1] = eTableNegativeFlag[k][1];
275 edgeFunctions[k][2] = eTableNegativeFlag[k][2];
281 for(
int i = 0; i <= edgeNumber; i++) { constant2 +=
_pOrderEdge[i] + 1; }
282 constant2 = constant2 - 1;
284 for(
int k = constant1; k <= constant2; k++) {
285 edgeFunctions[k][0] = eTablePositiveFlag[k][0];
286 edgeFunctions[k][1] = eTablePositiveFlag[k][1];
287 edgeFunctions[k][2] = eTablePositiveFlag[k][2];
292 std::vector<std::vector<double> > &edgeFunctions)
296 for(
int edgeNumber = 0; edgeNumber <
_nedge; edgeNumber++) {
299 for(
int i = 0; i <= edgeNumber; i++) { constant2 +=
_pOrderEdge[i] + 1; }
300 constant2 = constant2 - 1;
302 for(
int k = constant1; k <= constant2; k++) {
303 if((k - constant1) % 2 == 0) {
304 edgeFunctions[k][0] = edgeFunctions[k][0] * (-1);
305 edgeFunctions[k][1] = edgeFunctions[k][1] * (-1);
306 edgeFunctions[k][2] = edgeFunctions[k][2] * (-1);
312 double const &u,
double const &v,
double const &w,
int const &flag1,
313 int const &flag2,
int const &flag3,
int const &faceNumber,
314 std::vector<std::vector<double> > &faceFunctions, std::string typeFunction)
316 if(!(flag1 == 1 && flag2 == 1 && flag3 == 1)) {
318 for(
int i = 0; i < faceNumber; i++) {
323 for(
int it1 = 0; it1 <
_pOrderFace1[faceNumber] + 1; it1++) {
324 for(
int it2 = 0; it2 <
_pOrderFace2[faceNumber]; it2++) {
327 if(flag1 == -1 && it1 % 2 == 0) { impactFlag1 = -1; }
328 if(flag2 == -1 && it2 % 2 != 0) { impactFlag2 = -1; }
329 faceFunctions[iterator][0] =
330 faceFunctions[iterator][0] * impactFlag1 * impactFlag2;
331 faceFunctions[iterator][1] =
332 faceFunctions[iterator][1] * impactFlag1 * impactFlag2;
333 faceFunctions[iterator][2] =
334 faceFunctions[iterator][2] * impactFlag1 * impactFlag2;
338 for(
int it1 = 0; it1 <
_pOrderFace1[faceNumber]; it1++) {
339 for(
int it2 = 0; it2 <
_pOrderFace2[faceNumber] + 1; it2++) {
342 if(flag1 == -1 && it1 % 2 != 0) { impactFlag1 = -1; }
343 if(flag2 == -1 && it2 % 2 == 0) { impactFlag2 = -1; }
344 faceFunctions[iterator][0] =
345 faceFunctions[iterator][0] * impactFlag1 * impactFlag2;
346 faceFunctions[iterator][1] =
347 faceFunctions[iterator][1] * impactFlag1 * impactFlag2;
348 faceFunctions[iterator][2] =
349 faceFunctions[iterator][2] * impactFlag1 * impactFlag2;
355 if(typeFunction ==
"HcurlLegendre") {
356 std::vector<double> uvw(3);
395 std::vector<double> lkVector1(
_pOrderFace2[faceNumber]);
396 std::vector<double> lkVector2(
_pOrderFace1[faceNumber]);
397 std::vector<double> legendreVector1(
_pOrderFace1[faceNumber] + 1);
398 std::vector<double> legendreVector2(
_pOrderFace2[faceNumber] + 1);
399 for(
int it = 2; it <=
_pOrderFace2[faceNumber] + 1; it++) {
402 for(
int it = 2; it <=
_pOrderFace1[faceNumber] + 1; it++) {
411 std::vector<double> direction1(3, 0);
412 direction1[var1] = 1;
413 std::vector<double> direction2(3, 0);
414 direction2[var2] = 1;
415 for(
int it1 = 0; it1 <
_pOrderFace2[faceNumber] + 1; it1++) {
416 for(
int it2 = 0; it2 <
_pOrderFace1[faceNumber]; it2++) {
419 if(flag2 == -1 && it1 % 2 == 0) { impactFlag1 = -1; }
420 if(flag1 == -1 && it2 % 2 != 0) { impactFlag2 = -1; }
421 for(
int itVector = 0; itVector < 3; itVector++) {
422 faceFunctions[iterator][itVector] =
423 lambda * legendreVector2[it1] * lkVector2[it2] * impactFlag1 *
424 impactFlag2 * direction2[itVector];
429 for(
int it1 = 0; it1 <
_pOrderFace2[faceNumber]; it1++) {
430 for(
int it2 = 0; it2 <
_pOrderFace1[faceNumber] + 1; it2++) {
433 if(flag2 == -1 && it1 % 2 != 0) { impactFlag1 = -1; }
434 if(flag1 == -1 && it2 % 2 == 0) { impactFlag2 = -1; }
435 for(
int itVector = 0; itVector < 3; itVector++) {
436 faceFunctions[iterator][itVector] =
437 lambda * legendreVector1[it2] * lkVector1[it1] * impactFlag1 *
438 impactFlag2 * direction1[itVector];
444 else if(typeFunction ==
"CurlHcurlLegendre") {
445 std::vector<double> vec1(3, 0);
446 std::vector<double>
vec2(3, 0);
447 std::vector<double> uvw(3);
531 std::vector<double> lkVector1(
_pOrderFace2[faceNumber]);
532 std::vector<double> lkVector2(
_pOrderFace1[faceNumber]);
533 std::vector<double> dlkVector1(
_pOrderFace2[faceNumber]);
534 std::vector<double> dlkVector2(
_pOrderFace1[faceNumber]);
535 std::vector<double> legendreVector1(
_pOrderFace1[faceNumber] + 1);
536 std::vector<double> legendreVector2(
_pOrderFace2[faceNumber] + 1);
537 for(
int it = 2; it <=
_pOrderFace2[faceNumber] + 1; it++) {
541 for(
int it = 2; it <=
_pOrderFace1[faceNumber] + 1; it++) {
551 for(
int it1 = 0; it1 <
_pOrderFace2[faceNumber] + 1; it1++) {
552 for(
int it2 = 0; it2 <
_pOrderFace1[faceNumber]; it2++) {
555 if(flag2 == -1 && it1 % 2 == 0) { impactFlag1 = -1; }
556 if(flag1 == -1 && it2 % 2 != 0) { impactFlag2 = -1; }
557 for(
int j = 0; j < 3; j++) {
559 faceFunctions[iterator][j] =
vec2[j] * lkVector2[it2] *
560 legendreVector2[it1] *
561 impactFlag1 * impactFlag2;
564 faceFunctions[iterator][j] =
vec2[j] * dlkVector2[it2] *
565 legendreVector2[it1] *
566 impactFlag1 * impactFlag2;
569 faceFunctions[iterator][j] = 0;
575 for(
int it1 = 0; it1 <
_pOrderFace2[faceNumber]; it1++) {
576 for(
int it2 = 0; it2 <
_pOrderFace1[faceNumber] + 1; it2++) {
579 if(flag2 == -1 && it1 % 2 != 0) { impactFlag1 = -1; }
580 if(flag1 == -1 && it2 % 2 == 0) { impactFlag2 = -1; }
581 for(
int j = 0; j < 3; j++) {
583 faceFunctions[iterator][j] = vec1[j] * legendreVector1[it2] *
584 lkVector1[it1] * impactFlag1 *
589 faceFunctions[iterator][j] = vec1[j] * legendreVector1[it2] *
590 dlkVector1[it1] * impactFlag1 *
594 faceFunctions[iterator][j] = 0;
602 throw std::runtime_error(
"unknown typeFunction");
608 int const &flag1,
int const &flag2,
int const &flag3,
int const &faceNumber,
609 const std::vector<std::vector<double> > &quadFaceFunctionsAllOrientation,
610 const std::vector<std::vector<double> > &triFaceFunctionsAllOrientation,
611 std::vector<std::vector<double> > &fTableCopy)
614 for(
int i = 0; i < faceNumber; i++) {
618 int numFaceFunctions =
623 int offset2 = iterator + numFaceFunctions;
624 for(
int i = iterator; i < offset2; i++) {
625 fTableCopy[i][0] = quadFaceFunctionsAllOrientation[i + offset][0];
626 fTableCopy[i][1] = quadFaceFunctionsAllOrientation[i + offset][1];
627 fTableCopy[i][2] = quadFaceFunctionsAllOrientation[i + offset][2];
632 double const &u,
double const &v,
double const &w,
633 std::vector<std::vector<double> > &edgeBasis,
634 std::vector<std::vector<double> > &faceBasis,
635 std::vector<std::vector<double> > &bubbleBasis)
637 std::vector<std::vector<double> > lobattoVector(3);
638 lobattoVector[0] = std::vector<double>(
_pb1);
639 lobattoVector[1] = std::vector<double>(
_pb2);
640 lobattoVector[2] = std::vector<double>(
_pb3);
641 std::vector<std::vector<double> > dlobattoVector(3);
642 dlobattoVector[0] = std::vector<double>(
_pb1);
643 dlobattoVector[1] = std::vector<double>(
_pb2);
644 dlobattoVector[2] = std::vector<double>(
_pb3);
645 for(
int it = 2; it <=
_pb1 + 1; it++) {
649 for(
int it = 2; it <=
_pb2 + 1; it++) {
653 for(
int it = 2; it <=
_pb3 + 1; it++) {
658 std::vector<std::vector<double> > legendreVector(3);
659 legendreVector[0] = std::vector<double>(
_pb1 + 1);
660 legendreVector[1] = std::vector<double>(
_pb2 + 1);
661 legendreVector[2] = std::vector<double>(
_pb3 + 1);
662 for(
unsigned int k = 0; k < legendreVector[0].size(); k++) {
665 for(
unsigned int k = 0; k < legendreVector[1].size(); k++) {
668 for(
unsigned int k = 0; k < legendreVector[2].size(); k++) {
671 std::vector<double> lambda(6, 0);
679 std::vector<double> dlambda(6, 0);
687 std::vector<std::vector<double> > curlProduct(12, std::vector<double>(3, 0));
688 curlProduct[0][1] = lambda[3] * dlambda[5];
689 curlProduct[0][2] = -dlambda[3] * lambda[5];
690 curlProduct[5][1] = lambda[2] * dlambda[5];
691 curlProduct[5][2] = -dlambda[2] * lambda[5];
692 curlProduct[8][1] = lambda[3] * dlambda[4];
693 curlProduct[8][2] = -dlambda[3] * lambda[4];
694 curlProduct[11][1] = lambda[2] * dlambda[4];
695 curlProduct[11][2] = -dlambda[2] * lambda[4];
697 curlProduct[1][0] = -lambda[1] * dlambda[5];
698 curlProduct[1][2] = dlambda[1] * lambda[5];
699 curlProduct[3][0] = -lambda[0] * dlambda[5];
700 curlProduct[3][2] = dlambda[0] * lambda[5];
701 curlProduct[9][0] = -lambda[1] * dlambda[4];
702 curlProduct[9][2] = dlambda[1] * lambda[4];
703 curlProduct[10][0] = -lambda[0] * dlambda[4];
704 curlProduct[10][2] = dlambda[0] * lambda[4];
706 curlProduct[2][0] = lambda[1] * dlambda[3];
707 curlProduct[2][1] = -dlambda[1] * lambda[3];
708 curlProduct[4][0] = lambda[0] * dlambda[3];
709 curlProduct[4][1] = -dlambda[0] * lambda[3];
710 curlProduct[6][0] = lambda[0] * dlambda[2];
711 curlProduct[6][1] = -dlambda[0] * lambda[2];
712 curlProduct[7][0] = lambda[1] * dlambda[2];
713 curlProduct[7][1] = -dlambda[1] * lambda[2];
715 int indexEdgeBasis = 0;
716 for(
int iEdge = 0; iEdge <
_nedge; iEdge++) {
722 case(11): uvw = 0;
break;
726 case(10): uvw = 1;
break;
730 case(7): uvw = 2;
break;
732 for(
int indexEdgeFunc = 0; indexEdgeFunc <
_pOrderEdge[iEdge] + 1;
734 for(
int j = 0; j < 3; j++) {
735 edgeBasis[indexEdgeBasis][j] =
736 curlProduct[iEdge][j] * legendreVector[uvw][indexEdgeFunc];
742 int indexFaceFunction = 0;
743 for(
int iFace = 0; iFace <
_nfaceQuad; iFace++) {
744 std::vector<double> vec1(3, 0);
745 std::vector<double>
vec2(3, 0);
756 vec1[1] = dlambda[5];
757 vec1[2] = -lambda[5];
760 vec2[0] = -dlambda[5];
769 vec1[2] = -dlambda[3];
772 vec2[0] = dlambda[3];
773 vec2[1] = -lambda[3];
780 vec1[0] = -lambda[1];
781 vec1[2] = dlambda[1];
785 vec2[1] = -dlambda[1];
792 vec1[0] = -lambda[0];
793 vec1[2] = dlambda[0];
797 vec2[1] = -dlambda[0];
805 vec1[2] = -dlambda[2];
808 vec2[0] = dlambda[2];
809 vec2[1] = -lambda[2];
816 vec1[1] = dlambda[4];
817 vec1[2] = -lambda[4];
820 vec2[0] = -dlambda[4];
826 for(
int index1 = 0; index1 <
_pOrderFace1[iFace] + 1; index1++) {
827 for(
int index2 = 0; index2 <
_pOrderFace2[iFace]; index2++) {
828 for(
int j = 0; j < 3; j++) {
830 faceBasis[indexFaceFunction][j] = vec1[j] *
831 legendreVector[uvw1][index1] *
832 lobattoVector[uvw2][index2];
835 faceBasis[indexFaceFunction][j] = vec1[j] *
836 legendreVector[uvw1][index1] *
837 dlobattoVector[uvw2][index2];
840 faceBasis[indexFaceFunction][j] = 0;
846 for(
int index1 = 0; index1 <
_pOrderFace1[iFace]; index1++) {
847 for(
int index2 = 0; index2 <
_pOrderFace2[iFace] + 1; index2++) {
848 for(
int j = 0; j < 3; j++) {
850 faceBasis[indexFaceFunction][j] =
vec2[j] *
851 lobattoVector[uvw1][index1] *
852 legendreVector[uvw2][index2];
855 faceBasis[indexFaceFunction][j] =
vec2[j] *
856 dlobattoVector[uvw1][index1] *
857 legendreVector[uvw2][index2];
860 faceBasis[indexFaceFunction][j] = 0;
868 int indexBubbleBasis = 0;
869 for(
int ipb1 = 0; ipb1 <
_pb1 + 1; ipb1++) {
870 for(
int ipb2 = 0; ipb2 <
_pb2; ipb2++) {
871 for(
int ipb3 = 0; ipb3 <
_pb3; ipb3++) {
872 bubbleBasis[indexBubbleBasis][0] = 0;
873 bubbleBasis[indexBubbleBasis][1] = legendreVector[0][ipb1] *
874 lobattoVector[1][ipb2] *
875 dlobattoVector[2][ipb3];
876 bubbleBasis[indexBubbleBasis][2] = -legendreVector[0][ipb1] *
877 dlobattoVector[1][ipb2] *
878 lobattoVector[2][ipb3];
883 for(
int ipb1 = 0; ipb1 <
_pb1; ipb1++) {
884 for(
int ipb2 = 0; ipb2 <
_pb2 + 1; ipb2++) {
885 for(
int ipb3 = 0; ipb3 <
_pb3; ipb3++) {
886 bubbleBasis[indexBubbleBasis][0] = -lobattoVector[0][ipb1] *
887 legendreVector[1][ipb2] *
888 dlobattoVector[2][ipb3];
889 bubbleBasis[indexBubbleBasis][1] = 0;
890 bubbleBasis[indexBubbleBasis][2] = dlobattoVector[0][ipb1] *
891 legendreVector[1][ipb2] *
892 lobattoVector[2][ipb3];
897 for(
int ipb1 = 0; ipb1 <
_pb1; ipb1++) {
898 for(
int ipb2 = 0; ipb2 <
_pb2; ipb2++) {
899 for(
int ipb3 = 0; ipb3 <
_pb3 + 1; ipb3++) {
900 bubbleBasis[indexBubbleBasis][0] = lobattoVector[0][ipb1] *
901 dlobattoVector[1][ipb2] *
902 legendreVector[2][ipb3];
903 bubbleBasis[indexBubbleBasis][1] = -dlobattoVector[0][ipb1] *
904 lobattoVector[1][ipb2] *
905 legendreVector[2][ipb3];
906 bubbleBasis[indexBubbleBasis][2] = 0;
915 std::vector<int> &functionTypeInfo, std::vector<int> &orderInfo)
918 for(
int numEdge = 0; numEdge < 12; numEdge++) {
920 functionTypeInfo[it] = 1;
925 for(
int iFace = 0; iFace <
_nfaceQuad; iFace++) {
926 for(
int index1 = 0; index1 <=
_pOrderFace1[iFace]; index1++) {
927 for(
int index2 = 2; index2 <=
_pOrderFace2[iFace] + 1; index2++) {
928 functionTypeInfo[it] = 2;
929 orderInfo[it] = std::max(index1, index2);
933 for(
int index1 = 2; index1 <=
_pOrderFace1[iFace] + 1; index1++) {
934 for(
int index2 = 0; index2 <=
_pOrderFace2[iFace]; index2++) {
935 functionTypeInfo[it] = 2;
936 orderInfo[it] = std::max(index1, index2);
941 for(
int ipb1 = 0; ipb1 <
_pb1 + 1; ipb1++) {
942 for(
int ipb2 = 2; ipb2 <=
_pb2 + 1; ipb2++) {
943 for(
int ipb3 = 2; ipb3 <=
_pb3 + 1; ipb3++) {
944 functionTypeInfo[it] = 3;
945 orderInfo[it] = std::max(std::max(ipb1, ipb2), ipb3);
950 for(
int ipb1 = 2; ipb1 <=
_pb1 + 1; ipb1++) {
951 for(
int ipb2 = 0; ipb2 <
_pb2 + 1; ipb2++) {
952 for(
int ipb3 = 2; ipb3 <=
_pb3 + 1; ipb3++) {
953 functionTypeInfo[it] = 3;
954 orderInfo[it] = std::max(std::max(ipb1, ipb2), ipb3);
959 for(
int ipb1 = 2; ipb1 <=
_pb1 + 1; ipb1++) {
960 for(
int ipb2 = 2; ipb2 <=
_pb2 + 1; ipb2++) {
961 for(
int ipb3 = 0; ipb3 <
_pb3 + 1; ipb3++) {
962 functionTypeInfo[it] = 3;
963 orderInfo[it] = std::max(std::max(ipb1, ipb2), ipb3);