private GaussLegendre2D(int orderXi, int orderEta) { GaussLegendre1D quadratureXi = GaussLegendre1D.GetQuadratureWithOrder(orderXi); GaussLegendre1D quadratureEta = GaussLegendre1D.GetQuadratureWithOrder(orderEta); var points2D = new List <GaussPoint>(); // Combine the integration rules of each axis. The order is Xi minor - Eta major // WARNING: Do not change their order. Other classes, such as ExtrapolationGaussLegendre2x2 depend on it. foreach (var pointEta in quadratureEta.IntegrationPoints) { foreach (var pointXi in quadratureXi.IntegrationPoints) { points2D.Add(new GaussPoint(pointXi.Xi, pointEta.Xi, pointXi.Weight * pointEta.Weight)); } } this.IntegrationPoints = points2D; }
static GaussLegendre1D() { // In practice having an initial capacity of 10 is more than enough. quadratures = new Dictionary <int, GaussLegendre1D>(10); // Order 1 quadratures[1] = new GaussLegendre1D(new GaussPoint(0.0, weight: 2.0)); // Order 2 quadratures[2] = new GaussLegendre1D( new GaussPoint(-0.5773502691896257645091488, 1.0), new GaussPoint(+0.5773502691896257645091488, 1.0)); // Order 3 quadratures[3] = new GaussLegendre1D( new GaussPoint(-0.7745966692414833770358531, 0.5555555555555555555555556), new GaussPoint(0.0, 0.8888888888888888888888889), new GaussPoint(+0.7745966692414833770358531, 0.5555555555555555555555556)); // Order 4 quadratures[4] = new GaussLegendre1D( new GaussPoint(-0.8611363115940525752239465, 0.3478548451374538573730639), new GaussPoint(-0.3399810435848562648026658, 0.6521451548625461426269361), new GaussPoint(+0.3399810435848562648026658, 0.6521451548625461426269361), new GaussPoint(+0.8611363115940525752239465, 0.3478548451374538573730639)); // Order 5 quadratures[5] = new GaussLegendre1D( new GaussPoint(-0.9061798459386639927976269, 0.2369268850561890875142640), new GaussPoint(-0.5384693101056830910363144, 0.4786286704993664680412915), new GaussPoint(0, 0.5688888888888888888888889), new GaussPoint(+0.5384693101056830910363144, 0.4786286704993664680412915), new GaussPoint(+0.9061798459386639927976269, 0.2369268850561890875142640)); // Order 6 quadratures[6] = new GaussLegendre1D( new GaussPoint(-0.9324695142031520278123016, 0.1713244923791703450402961), new GaussPoint(-0.6612093864662645136613996, 0.3607615730481386075698335), new GaussPoint(-0.2386191860831969086305017, 0.4679139345726910473898703), new GaussPoint(+0.2386191860831969086305017, 0.4679139345726910473898703), new GaussPoint(+0.6612093864662645136613996, 0.3607615730481386075698335), new GaussPoint(+0.9324695142031520278123016, 0.1713244923791703450402961)); // Order 7 quadratures[7] = new GaussLegendre1D( new GaussPoint(-0.9491079123427585245261897, 0.1294849661688696932706114), new GaussPoint(-0.7415311855993944398638648, 0.2797053914892766679014678), new GaussPoint(-0.4058451513773971669066064, 0.3818300505051189449503698), new GaussPoint(0.0, 0.4179591836734693877551020), new GaussPoint(+0.4058451513773971669066064, 0.3818300505051189449503698), new GaussPoint(+0.7415311855993944398638648, 0.2797053914892766679014678), new GaussPoint(+0.9491079123427585245261897, 0.1294849661688696932706114)); // Order 8 quadratures[8] = new GaussLegendre1D( new GaussPoint(-0.9602898564975362316835609, 0.1012285362903762591525314), new GaussPoint(-0.7966664774136267395915539, 0.2223810344533744705443560), new GaussPoint(-0.5255324099163289858177390, 0.3137066458778872873379622), new GaussPoint(-0.1834346424956498049394761, 0.3626837833783619829651504), new GaussPoint(+0.1834346424956498049394761, 0.3626837833783619829651504), new GaussPoint(+0.5255324099163289858177390, 0.3137066458778872873379622), new GaussPoint(+0.7966664774136267395915539, 0.2223810344533744705443560), new GaussPoint(+0.9602898564975362316835609, 0.1012285362903762591525314)); // Order 9 quadratures[9] = new GaussLegendre1D( new GaussPoint(-0.9681602395076260898355762, 0.0812743883615744119718922), new GaussPoint(-0.8360311073266357942994298, 0.1806481606948574040584720), new GaussPoint(-0.6133714327005903973087020, 0.2606106964029354623187429), new GaussPoint(-0.3242534234038089290385380, 0.3123470770400028400686304), new GaussPoint(0, 0.3302393550012597631645251), new GaussPoint(+0.3242534234038089290385380, 0.3123470770400028400686304), new GaussPoint(+0.6133714327005903973087020, 0.2606106964029354623187429), new GaussPoint(+0.8360311073266357942994298, 0.1806481606948574040584720), new GaussPoint(+0.9681602395076260898355762, 0.0812743883615744119718922)); // Order 10 quadratures[10] = new GaussLegendre1D( new GaussPoint(-0.9739065285171717200779640, 0.0666713443086881375935688), new GaussPoint(-0.8650633666889845107320967, 0.1494513491505805931457763), new GaussPoint(-0.6794095682990244062343274, 0.2190863625159820439955349), new GaussPoint(-0.1488743389816312108848260, 0.2955242247147528701738930), new GaussPoint(-0.4333953941292471907992659, 0.2692667193099963550912269), new GaussPoint(+0.1488743389816312108848260, 0.2955242247147528701738930), new GaussPoint(+0.4333953941292471907992659, 0.2692667193099963550912269), new GaussPoint(+0.6794095682990244062343274, 0.2190863625159820439955349), new GaussPoint(+0.8650633666889845107320967, 0.1494513491505805931457763), new GaussPoint(+0.9739065285171717200779640, 0.0666713443086881375935688)); }