00001
00002
00003
00004
00005
00006
00007
00008 #include "SundanceGaussLobattoQuadrature.hpp"
00009 #include "SundanceCurveIntegralCalc.hpp"
00010 #include "SundancePolygon2D.hpp"
00011 #include "SundanceSurf3DCalc.hpp"
00012 #include "PlayaTabs.hpp"
00013
00014 using namespace Sundance;
00015
00016
00017 int const GaussLobattoQuadrature::quadsEdgesPoints[4][2] = { {0,1} , {0,2} , {1,3} , {2,3} };
00018
00019 int const GaussLobattoQuadrature::edge3DProjection[12] = { 0 , 1 , 2 , 1 , 2 , 0 , 2 , 2 , 0 , 1 , 1 , 0};
00020
00021
00022 GaussLobattoQuadrature::GaussLobattoQuadrature(int order) :
00023 QuadratureFamilyBase(order) {
00024 nrPointin1D_ = order+1;
00025 verb_ = 0;
00026 }
00027
00028 XMLObject GaussLobattoQuadrature::toXML() const
00029 {
00030 XMLObject rtn("GaussLobattoQuadrature");
00031 rtn.addAttribute("order", Teuchos::toString(order()));
00032 return rtn;
00033 }
00034
00035
00036 void GaussLobattoQuadrature::getTriangleRule(
00037 Array<Point>& quadPoints,
00038 Array<double>& quadWeights) const {
00039
00040 SUNDANCE_ERROR("Triangle rule not available for " << toXML());
00041 }
00042
00043 void GaussLobattoQuadrature::getQuadRule(
00044 Array<Point>& quadPoints,
00045 Array<double>& quadWeights) const {
00046 Array<Point> quadPointsLine;
00047 Array<double> quadWeightsLine;
00048
00049 this->getLineRule( quadPointsLine, quadWeightsLine );
00050
00051 int nrPointPerAxis = quadPointsLine.size();
00052
00053 quadPoints.resize(nrPointPerAxis*nrPointPerAxis);
00054 quadWeights.resize(nrPointPerAxis*nrPointPerAxis);
00055
00056 int pcount = 0;
00057 for (int ix = 0 ; ix < nrPointPerAxis ; ix ++){
00058 for (int iy = 0 ; iy < nrPointPerAxis ; iy ++){
00059
00060 quadPoints[pcount] = Point( quadPointsLine[ix][0] , quadPointsLine[iy][0] );
00061 quadWeights[pcount] = quadWeightsLine[ix] * quadWeightsLine[iy];
00062 pcount++;
00063 }
00064 }
00065 }
00066
00067
00068 void GaussLobattoQuadrature::getTetRule(
00069 Array<Point>& quadPoints,
00070 Array<double>& quadWeights) const {
00071
00072 SUNDANCE_ERROR("Tet rule not available for " << toXML());
00073 }
00074
00075
00076 void GaussLobattoQuadrature::getBrickRule(
00077 Array<Point>& quadPoints,
00078 Array<double>& quadWeights) const {
00079 Array<Point> quadPointsLine;
00080 Array<double> quadWeightsLine;
00081
00082 this->getLineRule( quadPointsLine, quadWeightsLine );
00083
00084 int nrPointPerAxis = quadPointsLine.size();
00085
00086 quadPoints.resize(nrPointPerAxis*nrPointPerAxis*nrPointPerAxis);
00087 quadWeights.resize(nrPointPerAxis*nrPointPerAxis*nrPointPerAxis);
00088
00089 int pcount = 0;
00090 for (int iz = 0 ; iz < nrPointPerAxis ; iz ++){
00091 for (int iy = 0 ; iy < nrPointPerAxis ; iy ++){
00092 for (int ix = 0 ; ix < nrPointPerAxis ; ix ++){
00093
00094 quadPoints[pcount] = Point( quadPointsLine[ix][0] , quadPointsLine[iy][0] , quadPointsLine[iz][0]);
00095 quadWeights[pcount] = quadWeightsLine[ix] * quadWeightsLine[iy] * quadWeightsLine[iz];
00096 pcount++;
00097 }
00098 }
00099 }
00100 }
00101
00102
00103 void GaussLobattoQuadrature::getAdaptedWeights(
00104 const CellType& cellType, int cellDim,
00105 int cellLID, int facetIndex, const Mesh& mesh,
00106 const ParametrizedCurve& globalCurve,
00107 Array<Point>& quadPoints, Array<double>& quadWeights,
00108 bool &weightsChanged) const {
00109
00110 Tabs tabs;
00111
00112 weightsChanged = true;
00113 if (mesh.IsSpecialWeightValid() && mesh.hasSpecialWeight(cellDim, cellLID))
00114 {
00115 mesh.getSpecialWeight(cellDim, cellLID, quadWeights);
00116
00117 return;
00118 }
00119
00120 if (quadPoints.size() <= 1) getPoints(cellType, quadPoints, quadWeights);
00121
00122
00123 CellType maxCellType = mesh.cellType(mesh.spatialDim());
00124
00125 switch (maxCellType)
00126 {
00127
00128 case TriangleCell:
00129 {
00130 switch (cellType)
00131 {
00132 case TriangleCell:
00133 {
00134
00135 break;
00136 }
00137 default:
00138 #ifndef TRILINOS_7
00139 SUNDANCE_ERROR ("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for submaximal cell " << maxCellType << " in a triangle mesh")
00140 ;
00141 #else
00142 SUNDANCE_ERROR7("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for submaximal cell " << maxCellType << " in a triangle mesh");
00143 #endif
00144 }
00145 break;
00146 }
00147 case QuadCell:
00148 {
00149 switch(cellType)
00150 {
00151 case QuadCell:
00152 {
00153
00154
00155 if (CurveIntegralCalc::usePolygoneCurveQuadrature( cellType , mesh , globalCurve)){
00156
00157 getAdaptedQuadWeights_polygon(cellLID, mesh, globalCurve, quadPoints, quadWeights, weightsChanged);
00158 }
00159 else
00160 {
00161 getAdaptedQuadWeights(cellLID, mesh, globalCurve, quadPoints, quadWeights, weightsChanged);
00162 }
00163 break;
00164 }
00165 default:
00166 #ifndef TRILINOS_7
00167 SUNDANCE_ERROR ("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for submaximal cell " << maxCellType << " in a triangle mesh")
00168 ;
00169 #else
00170 SUNDANCE_ERROR7("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for submaximal cell " << maxCellType << " in a triangle mesh");
00171 #endif
00172 }
00173 break;
00174 }
00175 case BrickCell:
00176 {
00177 switch(cellType)
00178 {
00179 case BrickCell:
00180 {
00181
00182 getAdaptedQuadWeights_surf(cellLID, mesh, globalCurve, quadPoints, quadWeights, weightsChanged);
00183 break;
00184 }
00185 default: {}
00186 }
00187 break;
00188 }
00189 default:
00190 #ifndef TRILINOS_7
00191 SUNDANCE_ERROR("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for cell type " << cellType)
00192 ;
00193 #else
00194 SUNDANCE_ERROR7("getAdaptedWeights rule for ACI(Adaptive Cell Integration) not available for cell type " << cellType);
00195 #endif
00196 }
00197
00198
00199 mesh.setSpecialWeight(cellDim, cellLID, quadWeights);
00200 }
00201
00202
00203
00204 void GaussLobattoQuadrature::getAdaptedQuadWeights_polygon(int cellLID, const Mesh& mesh,
00205 const ParametrizedCurve& globalCurve, Array<Point>& quadPoints,
00206 Array<double>& quadWeights, bool& weightsChanged) const {
00207
00208
00209 const Polygon2D* poly = dynamic_cast<const Polygon2D* > ( globalCurve.ptr().get()->getUnderlyingCurveObj() );
00210 if ( poly == 0 ) {
00211 TEUCHOS_TEST_FOR_EXCEPTION( true , std::runtime_error , " getAdaptedQuadWeights_polygon , paramCurve must be a Polygon and the cell must be a quad" );
00212 return;
00213 }
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229 Array<Point> quadOfPoints(4);
00230 Array<Point> intesectPoints(8);
00231 Array<Point> pointStack(0);
00232 Array<bool> isInnerPoint(0);
00233 Array<Point> pointStackTmp(0);
00234 Array<Point> allPolygonPoints(0);
00235 int nrIPoints , pointsNr , polyNrPoint ;
00236 double eps = 1e-14;
00237
00238 SUNDANCE_MSG3(verb_, " ---------- START METHOD ----------- ");
00239
00240
00241 for (int i = 0 ; i < 4 ; i++){
00242 quadOfPoints[i] = mesh.nodePosition( mesh.facetLID(2,cellLID , 0 , i , nrIPoints ) );
00243 }
00244
00245
00246 pointsNr = 0;
00247 for (int i = 0 ; i < 4 ; i++)
00248 {
00249
00250 globalCurve.returnIntersectPoints( quadOfPoints[quadsEdgesPoints[i][0]] , quadOfPoints[quadsEdgesPoints[i][1]],
00251 nrIPoints , intesectPoints );
00252
00253 for (int j = 0 ; j < nrIPoints ; j++){
00254 bool addThisPoint = true;
00255
00256 for (int tmpP = 0 ; tmpP < pointsNr ; tmpP++){
00257 double dist = ::sqrt( (pointStackTmp[tmpP] - intesectPoints[j])*(pointStackTmp[tmpP] - intesectPoints[j]) );
00258 if ( dist < eps) addThisPoint = false;
00259 }
00260
00261 if (addThisPoint) {
00262 pointStack.resize( pointsNr + 1 );
00263 pointStackTmp.resize( pointsNr + 1 );
00264 isInnerPoint.resize( pointsNr + 1 );
00265
00266 pointStack[pointsNr] = Point( ( intesectPoints[j][0] - quadOfPoints[0][0])/( quadOfPoints[3][0]-quadOfPoints[0][0] ) ,
00267 ( intesectPoints[j][1] - quadOfPoints[0][1])/( quadOfPoints[3][1]-quadOfPoints[0][1] ) );
00268
00269 pointStackTmp[pointsNr] = intesectPoints[j];
00270 isInnerPoint[pointsNr] = false;
00271
00272
00273 pointsNr = pointsNr + 1;
00274 }
00275 }
00276 }
00277
00278
00279 poly->getCellsPolygonesPoint( cellLID ,allPolygonPoints);
00280 polyNrPoint = allPolygonPoints.size();
00281
00282
00283 for (int j = 0 ; j < polyNrPoint ; j++){
00284 bool addThisPoint = true;
00285
00286 for (int tmpP = 0 ; tmpP < pointsNr ; tmpP++){
00287 double dist = ::sqrt( (pointStackTmp[tmpP] - allPolygonPoints[j])*(pointStackTmp[tmpP] - allPolygonPoints[j]) );
00288 if ( dist < eps) addThisPoint = false;
00289 }
00290
00291 if (addThisPoint) {
00292 pointStack.resize( pointsNr + 1 );
00293 pointStackTmp.resize( pointsNr + 1 );
00294 isInnerPoint.resize( pointsNr + 1 );
00295
00296 pointStack[pointsNr] = Point( ( allPolygonPoints[j][0] - quadOfPoints[0][0])/( quadOfPoints[3][0]-quadOfPoints[0][0] ) ,
00297 ( allPolygonPoints[j][1] - quadOfPoints[0][1])/( quadOfPoints[3][1]-quadOfPoints[0][1] ) );
00298
00299 pointStackTmp[pointsNr] = allPolygonPoints[j];
00300 isInnerPoint[pointsNr] = true;
00301
00302
00303 pointsNr = pointsNr + 1;
00304 }
00305 }
00306
00307
00308
00309 double dist = 1e+100 , firstind = -1;
00310 for (int tmpP = 0 ; tmpP < pointsNr ; tmpP++){
00311
00312 if ( (pointStack[tmpP][0] + pointStack[tmpP][1] < dist) && (!isInnerPoint[tmpP])){
00313 dist = pointStack[tmpP][0] + pointStack[tmpP][1];
00314 firstind = tmpP;
00315 }
00316 }
00317
00318 Array<Point> orderedPoints(1);
00319 Array<Point> orderedPointsRealCoords(1);
00320 Array<bool> orderedPointsIsIntersection(1);
00321 orderedPoints[0] = pointStack[firstind];
00322 orderedPointsRealCoords[0] = pointStackTmp[firstind];
00323 orderedPointsIsIntersection[0] = (!isInnerPoint[firstind]);
00324
00325
00326 int orderedP = 1;
00327
00328
00329 for (int tmpP = 0 ; tmpP < pointsNr ; tmpP++){
00330
00331 if (tmpP == firstind) continue;
00332
00333
00334 double dist = 1e+100 , dist_tmp;
00335 int ind = -1;
00336
00337 for (int p = 0 ; p <= orderedP ; p++){
00338 dist_tmp = dist;
00339
00340 if (( p == orderedP ) || (p == 0) ){
00341 if (!isInnerPoint[tmpP]){
00342 Point poin = orderedPoints[(p == orderedP)?p-1:p] - pointStack[tmpP];
00343
00344 dist_tmp = 1.0 * ::sqrt(poin*poin);
00345 }
00346 }
00347 else {
00348 Point poin1 = orderedPoints[p-1] - pointStack[tmpP];
00349 Point poin2 = orderedPoints[p] - pointStack[tmpP];
00350 Point prev_dist = orderedPoints[p] - orderedPoints[p-1];
00351 dist_tmp = ::sqrt(poin1*poin1) + ::sqrt(poin2*poin2) - ::sqrt(prev_dist*prev_dist);
00352 }
00353
00354
00355 if (dist_tmp < dist){
00356 dist = dist_tmp;
00357 ind = p;
00358 }
00359 }
00360
00361
00362 if ( (ind == 0) && ( orderedP <= 1) ){ ind = 1;}
00363
00364
00365 TEUCHOS_TEST_FOR_EXCEPTION( ind < 0 , std::runtime_error , " GaussLobattoQuadrature::getAdaptedQuadWeights_polygon ind < 0 ind:"<<ind );
00366
00367 orderedPoints.resize(orderedP+1);
00368 orderedPointsRealCoords.resize(orderedP+1);
00369 orderedPointsIsIntersection.resize(orderedP+1);
00370 for (int p = orderedP-1 ; p >= ind ; p--){
00371 orderedPoints[p+1] = orderedPoints[p];
00372 orderedPointsRealCoords[p+1] = orderedPointsRealCoords[p];
00373 orderedPointsIsIntersection[p+1] = orderedPointsIsIntersection[p];
00374 }
00375
00376
00377 orderedPoints[ind] = pointStack[tmpP];
00378 orderedPointsRealCoords[ind] = pointStackTmp[tmpP];
00379 orderedPointsIsIntersection[ind] = (!isInnerPoint[tmpP]);
00380 orderedP = orderedP + 1;
00381 }
00382
00383
00384 for (int pi = 0 ; pi < orderedP ; pi++){
00385
00386 }
00387
00388
00389 bool increaseX = true;
00390 bool increaseY = true;
00391 double minX = orderedPoints[0][0], maxX = orderedPoints[0][0], minY = orderedPoints[0][1], maxY = orderedPoints[0][1];
00392 for (int p = 1 ; p < orderedP ; p++){
00393 if ( orderedPoints[p-1][0] - eps > orderedPoints[p][0]) increaseX = false;
00394 if ( orderedPoints[p-1][1] - eps > orderedPoints[p][1]) increaseY = false;
00395 minX = (orderedPoints[p][0] < minX) ? orderedPoints[p][0] : minX;
00396 maxX = (orderedPoints[p][0] > maxX) ? orderedPoints[p][0] : maxX;
00397 minY = (orderedPoints[p][1] < minY) ? orderedPoints[p][1] : minY;
00398 maxY = (orderedPoints[p][1] > maxY) ? orderedPoints[p][1] : maxY;
00399 }
00400
00401
00402 Array<Point> linePoints;
00403 Array<double> lineWeights;
00404 getLineRule( linePoints , lineWeights);
00405 int nr1DPoints = linePoints.size();
00406 int nr2DPoints = nr1DPoints * nr1DPoints;
00407 Array<Point> quadQuadPoints;
00408 Array<double> quadQuadWeights;
00409 getQuadRule( quadQuadPoints , quadQuadWeights);
00410 Array<Point> trianglePoints;
00411 Array<double> triangleWeights;
00412 getTriangleQuadPoints( trianglePoints , triangleWeights);
00413
00414
00415 double alphaLeft , alphaRight;
00416 Point curvderi = orderedPointsRealCoords[0] - orderedPointsRealCoords[1];
00417 Point norm_vec = Point( -curvderi[1] , curvderi[0] );
00418 norm_vec = norm_vec / ::sqrt(norm_vec*norm_vec);
00419 double relative_length = 1e-2 * ::sqrt(curvderi*curvderi);
00420
00421
00422
00423 alphaLeft = globalCurve.integrationParameter( (0.5*orderedPointsRealCoords[0] + 0.5*orderedPointsRealCoords[1]) + relative_length*norm_vec );
00424 alphaRight = globalCurve.integrationParameter( (0.5*orderedPointsRealCoords[0] + 0.5*orderedPointsRealCoords[1]) - relative_length*norm_vec );
00425
00426
00427
00428
00429
00430
00431 Array<double> wholeWeightsQuad( quadWeights.size() , 0.0 );
00432 makeInterpolantQuad( 0.0, 0.0 , 1.0 , 1.0, nr1DPoints , nr2DPoints ,linePoints ,
00433 quadQuadPoints , quadQuadWeights ,wholeWeightsQuad , 1.0 );
00434
00435 Array<double> leftWeightsQuad( quadWeights.size() , 0.0 );
00436
00437 if ( (increaseX) || (increaseY == false)){
00438
00439
00440
00441 makeInterpolantQuad( 0.0, orderedPoints[0][1] ,
00442 minX , 1.0-orderedPoints[0][1],
00443 nr1DPoints , nr2DPoints ,linePoints ,
00444 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00445
00446
00447 for (int seg = 1 ; seg < orderedP ; seg++){
00448
00449 Point p0 = orderedPoints[seg-1];
00450 Point p1 = orderedPoints[seg];
00451 if (p0[0] < p1[0] ){
00452
00453 if (p0[1] < p1[1]){
00454
00455 makeInterpolantQuad( p0[0] , p1[1] ,
00456 p1[0] - p0[0] , 1.0-p1[1] ,
00457 nr1DPoints , nr2DPoints ,linePoints ,
00458 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00459 makeInterpolantQuad( p0[0] , p1[1] ,
00460 p1[0] - p0[0] , p0[1] - p1[1] ,
00461 nr1DPoints , nr2DPoints ,linePoints ,
00462 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00463 }else{
00464
00465 makeInterpolantQuad( p0[0] , p0[1] ,
00466 p1[0] - p0[0] , 1.0-p0[1] ,
00467 nr1DPoints , nr2DPoints ,linePoints ,
00468 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00469 makeInterpolantQuad( p1[0] , p0[1] ,
00470 p0[0] - p1[0] , p1[1] - p0[1] ,
00471 nr1DPoints , nr2DPoints ,linePoints ,
00472 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00473 }
00474 }
00475 else{
00476
00477 if (p0[1] < p1[1]){
00478
00479 makeInterpolantQuad( p1[0] , 0.0 ,
00480 p1[0] - p0[0] , p0[1] ,
00481 nr1DPoints , nr2DPoints ,linePoints ,
00482 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00483 makeInterpolantQuad( p1[0] , p0[1] ,
00484 p0[0] - p1[0] , p1[1] - p0[1] ,
00485 nr1DPoints , nr2DPoints ,linePoints ,
00486 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00487 }else{
00488
00489 makeInterpolantQuad( p1[0] , 0.0 ,
00490 p0[0] - p1[0] , p1[1] ,
00491 nr1DPoints , nr2DPoints ,linePoints ,
00492 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00493 makeInterpolantQuad( p0[0] , p1[1] ,
00494 p1[0] - p0[0] , p0[1] - p1[1] ,
00495 nr1DPoints , nr2DPoints ,linePoints ,
00496 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00497 }
00498 }
00499 }
00500
00501
00502
00503 makeInterpolantQuad( maxX , orderedPoints[orderedP-1][1] ,
00504 1.0-maxX , 1.0-orderedPoints[orderedP-1][1] ,
00505 nr1DPoints , nr2DPoints ,linePoints ,
00506 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00507 }
00508 else{
00509
00510
00511
00512 makeInterpolantQuad( 0.0 , 0.0 ,
00513 orderedPoints[0][0] , minY,
00514 nr1DPoints , nr2DPoints ,linePoints ,
00515 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00516
00517
00518 for (int seg = 1 ; seg < orderedP ; seg++){
00519
00520 Point p0 = orderedPoints[seg-1];
00521 Point p1 = orderedPoints[seg];
00522
00523 if (p0[0] < p1[0]){
00524
00525 makeInterpolantQuad( 0.0 , p0[1] ,
00526 p0[0] , p1[1]-p0[1] ,
00527 nr1DPoints , nr2DPoints ,linePoints ,
00528 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00529 makeInterpolantQuad( p0[0] , p1[1] ,
00530 p1[0] - p0[0] , p0[1] - p1[1] ,
00531 nr1DPoints , nr2DPoints ,linePoints ,
00532 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00533 }else{
00534
00535 makeInterpolantQuad( 0.0 , p0[1] ,
00536 p1[0] , p1[1]-p0[1] ,
00537 nr1DPoints , nr2DPoints ,linePoints ,
00538 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00539 makeInterpolantQuad( p1[0] , p0[1] ,
00540 p0[0] - p1[0] , p1[1] - p0[1] ,
00541 nr1DPoints , nr2DPoints ,linePoints ,
00542 trianglePoints , triangleWeights ,leftWeightsQuad , 2.0 );
00543 }
00544 }
00545
00546
00547
00548 makeInterpolantQuad( 0.0 , maxY ,
00549 orderedPoints[orderedP-1][0] , 1.0-maxY ,
00550 nr1DPoints , nr2DPoints ,linePoints ,
00551 quadQuadPoints , quadQuadWeights ,leftWeightsQuad , 1.0 );
00552 }
00553
00554
00555
00556 double sumWeights = 0.0;
00557 for (int q = 0 ; q < quadPoints.size() ; q++ ){
00558 quadWeights[q] = alphaLeft * leftWeightsQuad[q] + alphaRight*( wholeWeightsQuad[q]- leftWeightsQuad[q] );
00559 sumWeights = sumWeights + quadWeights[q];
00560 }
00561 SUNDANCE_MSG3(verb_, " ---------- END METHOD ----------- sum weights = " << sumWeights);
00562 }
00563
00564
00565
00566 void GaussLobattoQuadrature::getAdaptedQuadWeights(int cellLID, const Mesh& mesh,
00567 const ParametrizedCurve& globalCurve, Array<Point>& quadPoints,
00568 Array<double>& quadWeights, bool& weightsChanged) const{
00569
00570 int maxStack = 1000;
00571
00572 int stackIndex = 0;
00573 Tabs tabs;
00574
00575 Array< Array<Point> > pointStack(maxStack);
00576 Array< Array<Point> > quadPointStack(maxStack);
00577 Array< Array<int> > intersectionPointStack(maxStack);
00578 Array<int> levelStack(maxStack);
00579 Array<int> refinedStack(maxStack,-1);
00580 Array<int> intersectioncaseStack(maxStack,-1);
00581 Array<double> alpha1(maxStack);
00582 Array<double> alpha2(maxStack);
00583
00584 Array<Point> quadOfPoints(4);
00585 Array<Point> intesectPoints(8);
00586 int nrIPoints , tmp;
00587
00588
00589 for (int i = 0 ; i < 4 ; i++){
00590 quadOfPoints[i] = mesh.nodePosition( mesh.facetLID(2,cellLID , 0 , i , nrIPoints ) );
00591 }
00592
00593
00594 pointStack[0].resize(0);
00595 quadPointStack[0].resize(4);
00596 quadPointStack[0][0] = Point(0.0,0.0); quadPointStack[0][1] = Point(1.0,0.0);
00597 quadPointStack[0][2] = Point(0.0,1.0); quadPointStack[0][3] = Point(1.0,1.0);
00598 intersectionPointStack[0].resize(0);
00599 levelStack[0] = 0;
00600 tmp = 0;
00601
00602 for (int i = 0 ; i < 4 ; i++)
00603 {
00604
00605 globalCurve.returnIntersectPoints( quadOfPoints[quadsEdgesPoints[i][0]] , quadOfPoints[quadsEdgesPoints[i][1]],
00606 nrIPoints , intesectPoints );
00607 SUNDANCE_MSG3(verb_, " Test edge: "<< quadOfPoints[quadsEdgesPoints[i][0]] << " -- " << quadOfPoints[quadsEdgesPoints[i][1]] );
00608 pointStack[0].resize( tmp + nrIPoints );
00609 intersectionPointStack[0].resize( tmp + nrIPoints );
00610 for (int j = 0 ; j < nrIPoints ; j++){
00611
00612 pointStack[0][tmp+j] = Point( ( intesectPoints[j][0] - quadOfPoints[0][0])/( quadOfPoints[3][0]-quadOfPoints[0][0] ) ,
00613 ( intesectPoints[j][1] - quadOfPoints[0][1])/( quadOfPoints[3][1]-quadOfPoints[0][1] ) );
00614 intersectionPointStack[0][tmp+j] = i;
00615 SUNDANCE_MSG3(verb_, " adding Ints Points:"<< tmp+j << " edge:" << intersectionPointStack[0][tmp+j] << " P:"
00616 << pointStack[0][tmp+j] << " Real P:" << intesectPoints[j] );
00617 }
00618 tmp = tmp + nrIPoints;
00619 }
00620
00621
00622 intersectioncaseStack[0] = -1;
00623 if (intersectionPointStack[0].size() == 0){
00624 intersectioncaseStack[0] = 6;
00625 alpha1[0] = alpha2[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00626 }
00627 if (intersectionPointStack[0].size() == 2){
00628 if ((intersectionPointStack[0][0] == 0 ) && (intersectionPointStack[0][1] == 1 )) {
00629 intersectioncaseStack[0] = 0;
00630 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00631 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[3]);
00632 }
00633 if ((intersectionPointStack[0][0] == 0 ) && (intersectionPointStack[0][1] == 2 )) {
00634 intersectioncaseStack[0] = 2;
00635 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00636 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[1]);
00637 }
00638 if ((intersectionPointStack[0][0] == 0 ) && (intersectionPointStack[0][1] == 3 )) {
00639 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00640 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[3]);
00641 if (pointStack[0][0][0] > pointStack[0][1][0]) intersectioncaseStack[0] = 41;
00642 else intersectioncaseStack[0] = 42;
00643 }
00644 if ((intersectionPointStack[0][0] == 1 ) && (intersectionPointStack[0][1] == 2 )) {
00645 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00646 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[3]);
00647 if (pointStack[0][0][1] > pointStack[0][1][1]) intersectioncaseStack[0] = 51;
00648 else intersectioncaseStack[0] = 52;
00649 }
00650 if ((intersectionPointStack[0][0] == 1 ) && (intersectionPointStack[0][1] == 3 )) {
00651 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00652 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[2]);
00653 intersectioncaseStack[0] = 1;
00654 }
00655 if ((intersectionPointStack[0][0] == 2 ) && (intersectionPointStack[0][1] == 3 )) {
00656 alpha1[0] = globalCurve.integrationParameter(quadOfPoints[0]);
00657 alpha2[0] = globalCurve.integrationParameter(quadOfPoints[3]);
00658 intersectioncaseStack[0] = 3;
00659 }
00660 }
00661 SUNDANCE_MSG3(verb_, " intersectioncaseStack[0]:"<< intersectioncaseStack[0] << " , alpha1[0]:" << alpha1[0]
00662 << " , alpha2[0]" << alpha2[0]);
00663 stackIndex = 1;
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674 Array<Point> linePoints;
00675 Array<double> lineWeights;
00676 getLineRule( linePoints , lineWeights);
00677 Array<Point> quadQuadPoints;
00678 Array<double> quadQuadWeights;
00679 getQuadRule( quadQuadPoints , quadQuadWeights);
00680 Array<Point> trianglePoints;
00681 Array<double> triangleWeights;
00682 getTriangleQuadPoints( trianglePoints , triangleWeights);
00683 double summWeights = 0.0;
00684
00685 int nr1DPoints = linePoints.size();
00686 int nr2DPoints = quadQuadPoints.size();
00687
00688
00689 TEUCHOS_TEST_FOR_EXCEPTION( quadPoints.size() != quadQuadPoints.size() , std::runtime_error ,
00690 "quadPoints.size() != quadQuadPoints.size() , size1:" << quadPoints.size() << " , size2:" << quadQuadPoints.size());
00691 for (int q = 0; q < nr2DPoints; q++) {
00692 SUNDANCE_MSG3(verb_, " Quad point quadWeights["<<q<<"]="<<quadWeights[q]);
00693 summWeights = summWeights + quadWeights[q];
00694 quadWeights[q] = 0.0;
00695 }
00696 SUNDANCE_MSG3(verb_, " Summ old weights = " << summWeights );
00697
00698
00699 for (int listI = 0 ; listI < stackIndex ; listI++){
00700
00701 if (refinedStack[listI] < 0 ){
00702 SUNDANCE_MSG3(verb_, tabs << "getAdaptedQuadWeights Integrate quad listI:" << listI <<
00703 ",intersectioncaseStack[listI]:" << intersectioncaseStack[listI]);
00704
00705 Array<double> tmpWeightsQuad( quadWeights.size() , 0.0 );
00706 double ofx , ofy , px , py;
00707
00708 ofx = (quadPointStack[listI][1][0] - quadPointStack[listI][0][0]);
00709 ofy = (quadPointStack[listI][2][1] - quadPointStack[listI][0][1]);
00710 px = quadPointStack[listI][0][0]; py = quadPointStack[listI][0][1];
00711
00712 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00713 quadQuadPoints , quadQuadWeights ,tmpWeightsQuad , 1.0 );
00714 SUNDANCE_MSG3(verb_, tabs << " end quadring the whole quad, now quadring the remaining parts " );
00715 switch (intersectioncaseStack[listI]){
00716
00717 case 0:{
00718 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00719
00720 ofx = (pointStack[listI][0][0] - quadPointStack[listI][0][0]);
00721 ofy = (pointStack[listI][1][1] - quadPointStack[listI][0][1]);
00722 px = quadPointStack[listI][0][0]; py = quadPointStack[listI][0][1];
00723
00724 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00725 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00726
00727 for (int i = 0 ; i < nr2DPoints ; i++){
00728 SUNDANCE_MSG3(verb_, tabs << "i=" << i << ",Wquad[i]:" << tmpWeightsQuad[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00729 quadWeights[i] = alpha1[listI]*tmpWeightsTriangle[i] + alpha2[listI]*( tmpWeightsQuad[i] - tmpWeightsTriangle[i] );
00730 }
00731 break;}
00732
00733 case 1:{
00734 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00735
00736 ofx = (pointStack[listI][1][0] - quadPointStack[listI][0][0]);
00737 ofy = (pointStack[listI][0][1] - quadPointStack[listI][2][1]);
00738 px = quadPointStack[listI][2][0]; py = quadPointStack[listI][2][1];
00739
00740 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00741 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00742
00743 for (int i = 0 ; i < nr2DPoints ; i++){
00744 SUNDANCE_MSG3(verb_, tabs << "i=" << i << ",Wquad[i]:" << tmpWeightsQuad[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00745 quadWeights[i] = alpha2[listI]*tmpWeightsTriangle[i] + alpha1[listI]*( tmpWeightsQuad[i] - tmpWeightsTriangle[i] );
00746 }
00747 break;}
00748
00749 case 2:{
00750 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00751
00752 ofx = (pointStack[listI][0][0] - quadPointStack[listI][1][0]);
00753 ofy = (pointStack[listI][1][1] - quadPointStack[listI][1][1]);
00754 px = quadPointStack[listI][1][0]; py = quadPointStack[listI][1][1];
00755
00756 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00757 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00758
00759 for (int i = 0 ; i < nr2DPoints ; i++){
00760 SUNDANCE_MSG3(verb_, tabs << "i=" << i << ",Wquad[i]:" << tmpWeightsQuad[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00761 quadWeights[i] = alpha2[listI]*tmpWeightsTriangle[i] + alpha1[listI]*( tmpWeightsQuad[i] - tmpWeightsTriangle[i] );
00762 }
00763 break;}
00764
00765 case 3:{
00766 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00767
00768 ofx = (pointStack[listI][1][0] - quadPointStack[listI][3][0]);
00769 ofy = (pointStack[listI][0][1] - quadPointStack[listI][3][1]);
00770 px = quadPointStack[listI][3][0]; py = quadPointStack[listI][3][1];
00771
00772 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00773 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00774
00775 for (int i = 0 ; i < nr2DPoints ; i++){
00776 SUNDANCE_MSG3(verb_, tabs << "i=" << i << ",Wquad[i]:" << tmpWeightsQuad[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00777 quadWeights[i] = alpha2[listI]*tmpWeightsTriangle[i] + alpha1[listI]*( tmpWeightsQuad[i] - tmpWeightsTriangle[i] );
00778 }
00779 break;}
00780
00781 case 41: case 42:{
00782
00783 Array<double> tmpWeightsQuad2( quadWeights.size() , 0.0 );
00784 if (intersectioncaseStack[listI] == 41){
00785 ofx = ( pointStack[listI][1][0] - quadPointStack[listI][0][0]);
00786 } else {
00787 ofx = ( pointStack[listI][0][0] - quadPointStack[listI][0][0]);
00788 }
00789 ofy = (quadPointStack[listI][2][1] - quadPointStack[listI][0][1]);
00790 px = quadPointStack[listI][0][0]; py = quadPointStack[listI][0][1];
00791
00792 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00793 quadQuadPoints , quadQuadWeights ,tmpWeightsQuad2 , 1.0 );
00794
00795 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00796 if (intersectioncaseStack[listI] == 41){
00797 ofx = ( pointStack[listI][0][0] - pointStack[listI][1][0]);
00798 ofy = ( quadPointStack[listI][3][1] - quadPointStack[listI][0][1] );
00799 px = pointStack[listI][1][0]; py = pointStack[listI][0][1];
00800 } else {
00801 ofx = ( pointStack[listI][1][0] - pointStack[listI][0][0]);
00802 ofy = -( quadPointStack[listI][3][1] - quadPointStack[listI][0][1] );
00803 px = pointStack[listI][0][0]; py = pointStack[listI][1][1];
00804 }
00805
00806 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00807 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00808
00809 for (int i = 0 ; i < nr2DPoints ; i++){
00810 SUNDANCE_MSG3(verb_, tabs << "i=" << i << " , Wquad[i]:" << tmpWeightsQuad[i] <<
00811 " , Wquad2[i]:" << tmpWeightsQuad2[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00812 quadWeights[i] = alpha1[listI]*( tmpWeightsQuad2[i] + tmpWeightsTriangle[i] ) +
00813 alpha2[listI]*( tmpWeightsQuad[i] - tmpWeightsQuad2[i] - tmpWeightsTriangle[i]);
00814 }
00815 break;}
00816
00817 case 51: case 52:{
00818
00819 Array<double> tmpWeightsQuad2( quadWeights.size() , 0.0 );
00820 if (intersectioncaseStack[listI] == 52){
00821 ofy = ( pointStack[listI][0][1] - quadPointStack[listI][0][1]);
00822 } else {
00823 ofy = ( pointStack[listI][1][1] - quadPointStack[listI][0][1]);
00824 }
00825 ofx = (quadPointStack[listI][1][0] - quadPointStack[listI][0][0]);
00826 px = quadPointStack[listI][0][0]; py = quadPointStack[listI][0][1];
00827
00828 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00829 quadQuadPoints , quadQuadWeights ,tmpWeightsQuad2 , 1.0 );
00830
00831 Array<double> tmpWeightsTriangle( quadWeights.size() , 0.0 );
00832 if (intersectioncaseStack[listI] == 51){
00833 ofx = ( quadPointStack[listI][3][0] - quadPointStack[listI][0][0] );
00834 ofy = ( pointStack[listI][0][1] - pointStack[listI][1][1]);
00835 px = pointStack[listI][0][0]; py = pointStack[listI][1][1];
00836 } else {
00837 ofx = -( quadPointStack[listI][3][0] - quadPointStack[listI][0][0] );
00838 ofy = ( pointStack[listI][1][1] - pointStack[listI][0][1]);
00839 px = pointStack[listI][1][0]; py = pointStack[listI][0][1];
00840 }
00841
00842 makeInterpolantQuad( px, py, ofx, ofy, nr1DPoints , nr2DPoints ,linePoints ,
00843 trianglePoints , triangleWeights ,tmpWeightsTriangle , 2.0 );
00844
00845 for (int i = 0 ; i < nr2DPoints ; i++){
00846 SUNDANCE_MSG3(verb_, tabs << "i=" << i << " , Wquad[i]:" << tmpWeightsQuad[i] <<
00847 " , Wquad2[i]:" << tmpWeightsQuad2[i] << " , Wtriag[i]:"<< tmpWeightsTriangle[i] );
00848 quadWeights[i] = alpha1[listI]*(tmpWeightsQuad2[i]+tmpWeightsTriangle[i]) +
00849 alpha2[listI]*(tmpWeightsQuad[i] - tmpWeightsQuad2[i] - tmpWeightsTriangle[i]);
00850 }
00851 break;}
00852
00853 case 6:{
00854
00855 for (int i = 0 ; i < nr2DPoints ; i++){
00856 SUNDANCE_MSG3(verb_, tabs << "i=" << i << " , Wquad[i]:" << tmpWeightsQuad[i] );
00857 quadWeights[i] = quadWeights[i] + alpha1[listI]*tmpWeightsQuad[i];
00858 }
00859 break;}
00860 default:{
00861
00862 TEUCHOS_TEST_FOR_EXCEPTION( true , std::runtime_error , "Quad cell not integrable:" << intersectioncaseStack[listI]);
00863 break; }
00864 }
00865 }
00866 }
00867
00868 summWeights = 0.0;
00869 for (int q = 0; q < nr2DPoints; q++) {
00870 summWeights = summWeights + quadWeights[q];
00871 SUNDANCE_MSG3(verb_, " New weights quadWeights["<<q<<"]="<<quadWeights[q]);
00872 }
00873 SUNDANCE_MSG3(verb_, " Summ new weights = " << summWeights );
00874 }
00875
00876
00877
00878
00879 void GaussLobattoQuadrature::getAdaptedQuadWeights_surf(
00880 int cellLID, const Mesh& mesh,
00881 const ParametrizedCurve& globalCurve, Array<Point>& quadPoints,
00882 Array<double>& quadWeights, bool& weightsChanged) const {
00883
00884
00885 int verb = 1;
00886 int nr_point = mesh.numFacets( mesh.spatialDim() , 0 , 0);
00887 Array<Point> maxCellsPoints(nr_point);
00888 int tmp_i , point_LID;
00889 weightsChanged = true;
00890
00891
00892 SUNDANCE_MSG3(verb, "CurveIntegralCalc::getCurveQuadPoints nr points per cell: " << nr_point)
00893 for (int jj = 0 ; jj < nr_point ; jj++){
00894 point_LID = mesh.facetLID( mesh.spatialDim() , cellLID , 0 , jj , tmp_i );
00895 maxCellsPoints[jj] = mesh.nodePosition(point_LID);
00896 SUNDANCE_MSG3(verb, " max cell point p[" << jj << "]:"<< maxCellsPoints[jj]);
00897 }
00898
00899
00900 Array<Point> intersectPoints;
00901 Array<int> edgeIndex;
00902 Array<int> triangleIndex;
00903
00904 SundanceSurf3DCalc::getCurveQuadPoints( BrickCell , cellLID , mesh , globalCurve, maxCellsPoints,
00905 intersectPoints , edgeIndex , triangleIndex );
00906
00907
00908 getBrickRule(quadPoints,quadWeights);
00909
00910
00911 if (intersectPoints.size() < 1){
00912 double intCoeff = globalCurve.integrationParameter( 0.5*(maxCellsPoints[0]+maxCellsPoints[7]) );
00913 SUNDANCE_MSG1(verb, " WARNING cel has not been intersected , alpha = " << intCoeff );
00914 for (int ii = 0 ; ii < quadWeights.size() ; ii++ ) { quadWeights[ii] = quadWeights[ii] * intCoeff;}
00915 return;
00916 }
00917
00918
00919 int nrIntPoint = intersectPoints.size() , projDir = -1 , tmpI , coveredNodes = 0 , firstCoveredNode = -1;
00920 int possibleProject[3] = { -1 , -1 , -1};
00921 int otherDims[2] = {-1,-1};
00922 int projectedEdgeCovered[4] = { -1 , -1 , -1 , -1 };
00923 double dist_tmp = 1e+100;
00924
00925
00926 for (int ii = 0 ; ii < nrIntPoint ; ii++){
00927
00928 possibleProject[ edge3DProjection[ edgeIndex[ii] ] ] = 1;
00929 }
00930
00931 for (int ii = 0 ; ii < 3 ; ii++){
00932 if (possibleProject[ii] > 0) {
00933 SUNDANCE_MSG3(verb, " Projected dir = " << ii);
00934 projDir = ii; break;
00935 }
00936 }
00937
00938 tmpI = 0;
00939 for (int ii = 0 ; ii < 3 ; ii++){
00940 if ( ii != projDir ) {
00941 SUNDANCE_MSG3(verb, " otherDims["<< tmpI << "] = " << ii);
00942 otherDims[tmpI] = ii; tmpI++;
00943 }
00944 }
00945
00946
00947 for (int ii = 0 ; ii < nrIntPoint ; ii++){
00948 intersectPoints[ii] = Point( (intersectPoints[ii][0] - maxCellsPoints[0][0])/(maxCellsPoints[7][0] - maxCellsPoints[0][0]) ,
00949 (intersectPoints[ii][1] - maxCellsPoints[0][1])/(maxCellsPoints[7][1] - maxCellsPoints[0][1]) ,
00950 (intersectPoints[ii][2] - maxCellsPoints[0][2])/(maxCellsPoints[7][2] - maxCellsPoints[0][2]));
00951 SUNDANCE_MSG3(verb, "REF intersectPoints[" << ii << "] = "<< intersectPoints[ii]);
00952 }
00953
00954
00955 Array<Point> quadProjectPoints(4);
00956 quadProjectPoints[0] = Point(0.0,0.0); quadProjectPoints[1] = Point(1.0,0.0);
00957 quadProjectPoints[2] = Point(0.0,1.0); quadProjectPoints[3] = Point(1.0,1.0);
00958
00959
00960 coveredNodes = 0;
00961 for (int ii = 0 ; ii < nrIntPoint ; ii++) {
00962 Point tmpP( intersectPoints[ii][otherDims[0]] , intersectPoints[ii][otherDims[1]] );
00963 for (int tt = 0 ; tt < 4 ; tt++ ) {
00964 if ( ((tmpP-quadProjectPoints[tt])*(tmpP-quadProjectPoints[tt]) < 1e-12) && (projectedEdgeCovered[tt] < 0) )
00965 {
00966 projectedEdgeCovered[tt] = 1;
00967
00968 coveredNodes++;
00969
00970 if (firstCoveredNode < 0) { firstCoveredNode = tt; }
00971 }
00972 }
00973 }
00974 SUNDANCE_MSG3( verb , "covered nodes = "<< coveredNodes );
00975
00976
00977
00978 while (coveredNodes < 4) {
00979
00980 int foundEdgeIndex[3] = {-1,-1,-1} , foundI = 0 , pF = -1 , pL = -1;
00981 int neighbourNodes[4][2] = { {1,2} , {0,3} , {0,3} , {1,2} };
00982 for (int ii = 0 ; ii < 4 ; ii++){
00983
00984
00985
00986 if ( (projectedEdgeCovered[ii] < 0) &&
00987 ((projectedEdgeCovered[ neighbourNodes[ii][0] ] > 0) || (projectedEdgeCovered[ neighbourNodes[ii][1] ] > 0)) ){
00988
00989 foundEdgeIndex[foundI] = ii;
00990 projectedEdgeCovered[ii] = 1;
00991 coveredNodes++;
00992 break;
00993 }
00994 }
00995 foundI = 0;
00996
00997 dist_tmp = 1e+100;
00998 for (int ii = 0 ; ii < nrIntPoint ; ii++){
00999 Point tmpP( intersectPoints[ii][otherDims[0]] , intersectPoints[ii][otherDims[1]] );
01000 double dist_tmp_tmp = ::sqrt( (tmpP-quadProjectPoints[foundEdgeIndex[foundI]])*(tmpP-quadProjectPoints[foundEdgeIndex[foundI]]) );
01001
01002 if ( dist_tmp_tmp < dist_tmp) { pF = ii; dist_tmp = dist_tmp_tmp;}
01003 }
01004 SUNDANCE_MSG3( verb , "pF = "<< pF );
01005
01006
01007 while ( (projectedEdgeCovered[ neighbourNodes[foundEdgeIndex[foundI]][0] ] < 0) ||
01008 (projectedEdgeCovered[ neighbourNodes[foundEdgeIndex[foundI]][1] ] < 0) ) {
01009 int tmp_next_Neighbor = -1;
01010
01011 if (projectedEdgeCovered[ neighbourNodes[foundEdgeIndex[foundI]][0] ] < 0) { tmp_next_Neighbor = neighbourNodes[foundEdgeIndex[foundI]][0]; }
01012 if (projectedEdgeCovered[ neighbourNodes[foundEdgeIndex[foundI]][1] ] < 0) { tmp_next_Neighbor = neighbourNodes[foundEdgeIndex[foundI]][1]; }
01013
01014 foundEdgeIndex[foundI+1] = tmp_next_Neighbor;
01015 projectedEdgeCovered[tmp_next_Neighbor] = 1;
01016 foundI++;
01017 coveredNodes++;
01018 }
01019
01020 dist_tmp = 1e+100;
01021 for (int ii = 0 ; ii < nrIntPoint ; ii++){
01022 Point tmpP( intersectPoints[ii][otherDims[0]] , intersectPoints[ii][otherDims[1]] );
01023 double dist_tmp_tmp = ::sqrt((tmpP-quadProjectPoints[foundEdgeIndex[foundI]])*(tmpP-quadProjectPoints[foundEdgeIndex[foundI]]));
01024 if ( (dist_tmp_tmp < dist_tmp) && (ii != pF ) ) { pL = ii; dist_tmp = dist_tmp_tmp; }
01025 }
01026 SUNDANCE_MSG3( verb , "pL = "<< pF );
01027
01028
01029 for (int nn = 0 ; nn <= foundI ; nn = nn + 1)
01030 {
01031 int firstI_Tri = pF, secondI_Tri = -1 , thirdI_Tri = -1;
01032 intersectPoints.resize( nrIntPoint + 1);
01033 nrIntPoint++;
01034
01035 Point ptmp( 0 , 0 , 0 );
01036 ptmp[otherDims[0]] = quadProjectPoints[foundEdgeIndex[nn]][0];
01037 ptmp[otherDims[1]] = quadProjectPoints[foundEdgeIndex[nn]][1];
01038 ptmp[projDir] = intersectPoints[pF][projDir];
01039
01040 intersectPoints[nrIntPoint-1] = ptmp;
01041 secondI_Tri = nrIntPoint -1;
01042 Point nextP( 0 , 0 , 0 );
01043 if (nn < foundI ){
01044 nextP[otherDims[0]] = quadProjectPoints[foundEdgeIndex[nn+1]][0];
01045 nextP[otherDims[1]] = quadProjectPoints[foundEdgeIndex[nn+1]][1];
01046 nextP[projDir] = intersectPoints[pF][projDir];
01047
01048 intersectPoints.resize( nrIntPoint + 1);
01049 nrIntPoint++;
01050 thirdI_Tri = nrIntPoint - 1;
01051 intersectPoints[nrIntPoint-1] = nextP;
01052 } else {
01053
01054 nextP = intersectPoints[pL];
01055 thirdI_Tri = pL;
01056 }
01057 int triagSize = triangleIndex.size();
01058 triangleIndex.resize(triagSize + 3);
01059 triangleIndex[triagSize] = firstI_Tri;
01060 triangleIndex[triagSize+1] = secondI_Tri;
01061 triangleIndex[triagSize+2] = thirdI_Tri;
01062 SUNDANCE_MSG3( verb , "Add triangle [ "<< firstI_Tri << " , " << secondI_Tri << " , " << thirdI_Tri << " ]");
01063 SUNDANCE_MSG3( verb , "Added triangle's points [ "<< intersectPoints[firstI_Tri] << " , "
01064 << intersectPoints[secondI_Tri] << " , " << intersectPoints[thirdI_Tri] << " ]");
01065 }
01066
01067 SUNDANCE_MSG3( verb , "covered nodes = "<< coveredNodes );
01068 }
01069
01070
01071
01072 Array<Point> wholeQuadPoints;
01073 Array<double> wholeQuadweights;
01074 getBrickRule(wholeQuadPoints,wholeQuadweights);
01075 Array<Point> linePoints;
01076 Array<double> lineWeights;
01077 getLineRule(linePoints,lineWeights);
01078 int nrLinePoints = linePoints.size() , nr3DPoints = wholeQuadPoints.size();
01079
01080 Array<double> computedWeights(nr3DPoints,0.0);
01081
01082
01083 Array<Point> triagPoints;
01084 Array<double> triagWeights;
01085 getTriangleQuadPoints( triagPoints , triagWeights );
01086 int nrQuadTriagPoints = triagPoints.size();
01087 int nrQuadPrism = triagPoints.size() * linePoints.size();
01088 Array<Point> prismPoints(nrQuadPrism);
01089 Array<double> prismWeights(nrQuadPrism);
01090
01091
01092 int nr_prism = triangleIndex.size()/3;
01093 for (int p = 0 ; p < nr_prism ; p++ ){
01094 Point p0 = intersectPoints[ triangleIndex[3*p] ];
01095 Point p1 = intersectPoints[ triangleIndex[3*p + 1] ];
01096 Point p2 = intersectPoints[ triangleIndex[3*p + 2] ];
01097 Point p0L = p0;
01098 Point p1L = p1;
01099 Point p2L = p2;
01100 p0L[projDir] = 0.0; p1L[projDir] = 0.0; p2L[projDir] = 0.0;
01101
01102
01103
01104
01105 if ( (::fabs(p0[projDir]-p0L[projDir]) + ::fabs(p1[projDir]-p1L[projDir])+ ::fabs(p2[projDir]-p2L[projDir]) ) > 1e-12 ){
01106 Point normAreaVect = cross(p1L-p0L ,p2L-p0L);
01107 Point triagPointTmp;
01108 double areaTriag = 0.5*::sqrt(normAreaVect*normAreaVect) , Zc = 0.0;
01109 int quadPIndex = 0;
01110
01111 for (int triagQIndex = 0 ; triagQIndex < nrQuadTriagPoints ; triagQIndex++)
01112 {
01113
01114 Zc = (1.0 - triagPoints[triagQIndex][0] - triagPoints[triagQIndex][1]) * ( p0[projDir] - p0L[projDir] );
01115 Zc = Zc + triagPoints[triagQIndex][0]*( p1[projDir] - p1L[projDir] );
01116 Zc = Zc + triagPoints[triagQIndex][1]*( p2[projDir] - p2L[projDir] );
01117 triagPointTmp = p0L + triagPoints[triagQIndex][0]*(p1L-p0L) + triagPoints[triagQIndex][1]*(p2L-p0L);
01118
01119
01120 for (int lineQIndex = 0 ; lineQIndex < nrLinePoints ; lineQIndex++ , quadPIndex++)
01121 {
01122
01123
01124 prismPoints[quadPIndex] = triagPointTmp;
01125 prismPoints[quadPIndex][projDir] = Zc * linePoints[lineQIndex][0];
01126 prismWeights[quadPIndex] = Zc*areaTriag*triagWeights[triagQIndex]*lineWeights[lineQIndex];
01127 }
01128 }
01129
01130 makeInterpolantBrick( nrLinePoints , nr3DPoints , linePoints ,
01131 prismPoints , prismWeights , computedWeights , 1.0);
01132 }
01133 }
01134
01135
01136 Point tmpPointIntCoeff = intersectPoints[firstCoveredNode];
01137 tmpPointIntCoeff[projDir] = -0.001;
01138 Point tmpPointIntCoeff1 = Point( maxCellsPoints[0][0] + tmpPointIntCoeff[0]*(maxCellsPoints[7][0]-maxCellsPoints[0][0]) ,
01139 maxCellsPoints[0][1] + tmpPointIntCoeff[1]*(maxCellsPoints[7][1]-maxCellsPoints[0][1]) ,
01140 maxCellsPoints[0][2] + tmpPointIntCoeff[2]*(maxCellsPoints[7][2]-maxCellsPoints[0][2]) );
01141 double zeroIntCoeff = globalCurve.integrationParameter( tmpPointIntCoeff1 );
01142 tmpPointIntCoeff[projDir] = 1.001;
01143 tmpPointIntCoeff1 = Point( maxCellsPoints[0][0] + tmpPointIntCoeff[0]*(maxCellsPoints[7][0]-maxCellsPoints[0][0]) ,
01144 maxCellsPoints[0][1] + tmpPointIntCoeff[1]*(maxCellsPoints[7][1]-maxCellsPoints[0][1]) ,
01145 maxCellsPoints[0][2] + tmpPointIntCoeff[2]*(maxCellsPoints[7][2]-maxCellsPoints[0][2]) );
01146 double oneIntCoeff = globalCurve.integrationParameter( tmpPointIntCoeff1 );
01147
01148 SUNDANCE_MSG3( verb , " alpha1 = " << zeroIntCoeff << " , alpha2 = " << oneIntCoeff );
01149
01150
01151 double sumWeights = 0.0;
01152 for (int q = 0 ; q < computedWeights.size() ; q++ ){
01153 quadWeights[q] = zeroIntCoeff * computedWeights[q] + oneIntCoeff*( wholeQuadweights[q]- computedWeights[q]);
01154 sumWeights = sumWeights + quadWeights[q];
01155 }
01156
01157 SUNDANCE_MSG3(verb , " ---------- END METHOD ----------- sum weights = " << sumWeights);
01158
01159 }
01160
01161
01162
01163
01164
01165
01166
01167 void GaussLobattoQuadrature::getLineRule(
01168 Array<Point>& quadPointsL,
01169 Array<double>& quadWeights) const {
01170
01171 int n = order()+1;
01172
01173 Array<double> quadPoints;
01174 quadPoints.resize(n);
01175 quadPointsL.resize(n);
01176 quadWeights.resize(n);
01177
01178
01179 switch (n) {
01180 case 2: { quadPoints[0]=0.0; quadPoints[1] = 1; break; }
01181 case 3: { quadPoints[0]=0.0; quadPoints[1] = 0.5; quadPoints[2] = 1.0; break; }
01182 case 4: { quadPoints[0]=0.0; quadPoints[1] = 0.5-0.5/::sqrt(5.0); quadPoints[2] = 0.5+0.5/::sqrt(5.0); quadPoints[3] = 1.0; break; }
01183 case 5: { quadPoints[0]=0.0; quadPoints[1] = 0.5-0.5*::sqrt(3.0/7.0); quadPoints[2] = 0.5;
01184 quadPoints[3] = 0.5+0.5*::sqrt(3.0/7.0); quadPoints[4] = 1.0; break; }
01185 case 6: { double t0=::sqrt(7.0);
01186 double t1=(7.0+2.0*t0)/21.0;
01187 double t2=(7.0-2.0*t0)/21.0;
01188 quadPoints[0] = 0; quadPoints[1] = 0.5-0.5*::sqrt(t1); quadPoints[2] = 0.5-0.5*::sqrt(t2);
01189 quadPoints[3] = 0.5+0.5*::sqrt(t2); quadPoints[4] = 0.5+0.5*::sqrt(t1); quadPoints[5] = 1.0; break; }
01190 case 7: {
01191 quadPoints[0] = 0.00000000000000000000e+00;
01192 quadPoints[1] = 8.48880518607165179823e-02;
01193 quadPoints[2] = 2.65575603264642912116e-01;
01194 quadPoints[3] = 5.00000000000000000000e-01;
01195 quadPoints[4] = 7.34424396735357087884e-01;
01196 quadPoints[5] = 9.15111948139283537529e-01;
01197 quadPoints[6] = 1.00000000000000000000e+00;
01198 break; }
01199 case 8: {
01200 quadPoints[0] = 0.00000000000000000000e+00;
01201 quadPoints[1] = 6.41299257451967141819e-02;
01202 quadPoints[2] = 2.04149909283428854234e-01;
01203 quadPoints[3] = 3.95350391048760574364e-01;
01204 quadPoints[4] = 6.04649608951239425636e-01;
01205 quadPoints[5] = 7.95850090716571090255e-01;
01206 quadPoints[6] = 9.35870074254803285818e-01;
01207 quadPoints[7] = 1.00000000000000000000e+00;
01208 break; }
01209 case 9: {
01210 quadPoints[0] = 0.00000000000000000000e+00;
01211 quadPoints[1] = 5.01210022942699118254e-02;
01212 quadPoints[2] = 1.61406860244631134016e-01;
01213 quadPoints[3] = 3.18441268086910922452e-01;
01214 quadPoints[4] = 5.00000000000000000000e-01;
01215 quadPoints[5] = 6.81558731913089133059e-01;
01216 quadPoints[6] = 8.38593139755368865984e-01;
01217 quadPoints[7] = 9.49878997705730032663e-01;
01218 quadPoints[8] = 1.00000000000000000000e+00;
01219 break; }
01220 case 10: {
01221 quadPoints[0] = 0.00000000000000000000e+00;
01222 quadPoints[1] = 4.02330459167705711820e-02;
01223 quadPoints[2] = 1.30613067447247432895e-01;
01224 quadPoints[3] = 2.61037525094777733692e-01;
01225 quadPoints[4] = 4.17360521166806497373e-01;
01226 quadPoints[5] = 5.82639478833193447116e-01;
01227 quadPoints[6] = 7.38962474905222266308e-01;
01228 quadPoints[7] = 8.69386932552752567105e-01;
01229 quadPoints[8] = 9.59766954083229428818e-01;
01230 quadPoints[9] = 1.00000000000000000000e+00;
01231 break; }
01232 case 11: {
01233 quadPoints[0] = 0.00000000000000000000e+00;
01234 quadPoints[1] = 3.29992847959704183047e-02;
01235 quadPoints[2] = 1.07758263168427792511e-01;
01236 quadPoints[3] = 2.17382336501897477365e-01;
01237 quadPoints[4] = 3.52120932206530290465e-01;
01238 quadPoints[5] = 5.00000000000000000000e-01;
01239 quadPoints[6] = 6.47879067793469709535e-01;
01240 quadPoints[7] = 7.82617663498102578146e-01;
01241 quadPoints[8] = 8.92241736831572263000e-01;
01242 quadPoints[9] = 9.67000715204029637206e-01;
01243 quadPoints[10] = 1.00000000000000000000e+00;
01244 break; }
01245 case 12: {
01246 quadPoints[0] = 0.00000000000000000000e+00;
01247 quadPoints[1] = 2.75503638885589152707e-02;
01248 quadPoints[2] = 9.03603391779966846897e-02;
01249 quadPoints[3] = 1.83561923484069688950e-01;
01250 quadPoints[4] = 3.00234529517325543502e-01;
01251 quadPoints[5] = 4.31723533572536233294e-01;
01252 quadPoints[6] = 5.68276466427463766706e-01;
01253 quadPoints[7] = 6.99765470482674456498e-01;
01254 quadPoints[8] = 8.16438076515930255539e-01;
01255 quadPoints[9] = 9.09639660822003315310e-01;
01256 quadPoints[10] = 9.72449636111441084729e-01;
01257 quadPoints[11] = 1.00000000000000000000e+00;
01258 break; }
01259 }
01260
01261
01262 for (int i = 0 ; i < n ; i++){
01263 quadPointsL[i] = Point(quadPoints[i]);
01264 }
01265
01266
01267 switch (n) {
01268 case 2:{
01269 quadWeights[0] = 0.5;
01270 quadWeights[1] = 0.5;
01271 break; }
01272 case 3:{
01273 quadWeights[0] = 1.0/6.0; quadWeights[1] = 2.0/3.0; quadWeights[2] = 1.0/6.0;
01274 break;}
01275 case 4:{
01276 quadWeights[0] = 1.0/12.0; quadWeights[1] = 5.0/12.0; quadWeights[2] = 5.0/12.0; quadWeights[3] = 1.0/12.0;
01277 break;}
01278 case 5:{
01279 quadWeights[0] = 0.05; quadWeights[1] = 49.0/180.0; quadWeights[2] = 32.0/90.0; quadWeights[3] = 49.0/180.0; quadWeights[4] = 0.05;
01280 break;}
01281 case 6:{
01282 double t0=::sqrt(7.0);
01283 double t1=(7.0+2.0*t0)/21.0;
01284 double t2=(7.0-2.0*t0)/21.0;
01285 double k1=(1.0-t0)*(1.0-t0);
01286 double k2=(1.0+t0)*(1.0+t0);
01287 quadWeights[0] = 1.0/30.0; quadWeights[1] = 0.3/(t1*k1); quadWeights[2] = 0.3/(t2*k2); quadWeights[3] = 0.3/(t2*k2);
01288 quadWeights[4] = 0.3/(t1*k1); quadWeights[5] = 1.0/30.0;
01289 break;}
01290 case 7:{
01291 quadWeights[0] = 2.38095238095238082021e-02;
01292 quadWeights[1] = 1.38413023680782953928e-01;
01293 quadWeights[2] = 2.15872690604931305458e-01;
01294 quadWeights[3] = 2.43809523809523809312e-01;
01295 quadWeights[4] = 2.15872690604931305458e-01;
01296 quadWeights[5] = 1.38413023680782953928e-01;
01297 quadWeights[6] = 2.38095238095238082021e-02;
01298 break;}
01299 case 8:{
01300 quadWeights[0] = 1.78571428571428561516e-02;
01301 quadWeights[1] = 1.05352113571753072674e-01;
01302 quadWeights[2] = 1.70561346241752204156e-01;
01303 quadWeights[3] = 2.06229397329351860080e-01;
01304 quadWeights[4] = 2.06229397329351860080e-01;
01305 quadWeights[5] = 1.70561346241752204156e-01;
01306 quadWeights[6] = 1.05352113571753072674e-01;
01307 quadWeights[7] = 1.78571428571428561516e-02;
01308 break;}
01309 case 9:{
01310 quadWeights[0] = 1.38888888888888881179e-02;
01311 quadWeights[1] = 8.27476807804027880699e-02;
01312 quadWeights[2] = 1.37269356250080826198e-01;
01313 quadWeights[3] = 1.73214255486523083238e-01;
01314 quadWeights[4] = 1.85759637188208620584e-01;
01315 quadWeights[5] = 1.73214255486523083238e-01;
01316 quadWeights[6] = 1.37269356250080826198e-01;
01317 quadWeights[7] = 8.27476807804027880699e-02;
01318 quadWeights[8] = 1.38888888888888881179e-02;
01319 break;}
01320 case 10:{
01321 quadWeights[0] = 1.11111111111111115352e-02;
01322 quadWeights[1] = 6.66529954255350304271e-02;
01323 quadWeights[2] = 1.12444671031563220298e-01;
01324 quadWeights[3] = 1.46021341839841889421e-01;
01325 quadWeights[4] = 1.63769880591948718829e-01;
01326 quadWeights[5] = 1.63769880591948718829e-01;
01327 quadWeights[6] = 1.46021341839841889421e-01;
01328 quadWeights[7] = 1.12444671031563220298e-01;
01329 quadWeights[8] = 6.66529954255350304271e-02;
01330 quadWeights[9] = 1.11111111111111115352e-02;
01331 break;}
01332 case 11:{
01333 quadWeights[0] = 9.09090909090909046752e-03;
01334 quadWeights[1] = 5.48061366334974126024e-02;
01335 quadWeights[2] = 9.35849408901525958715e-02;
01336 quadWeights[3] = 1.24024052132014145355e-01;
01337 quadWeights[4] = 1.43439562389503921791e-01;
01338 quadWeights[5] = 1.50108797727845355574e-01;
01339 quadWeights[6] = 1.43439562389503921791e-01;
01340 quadWeights[7] = 1.24024052132014145355e-01;
01341 quadWeights[8] = 9.35849408901525958715e-02;
01342 quadWeights[9] = 5.48061366334974126024e-02;
01343 quadWeights[10] = 9.09090909090909046752e-03;
01344 break;}
01345 case 12:{
01346 quadWeights[0] = 7.57575757575757596785e-03;
01347 quadWeights[1] = 4.58422587065981240739e-02;
01348 quadWeights[2] = 7.89873527821850218711e-02;
01349 quadWeights[3] = 1.06254208880510653268e-01;
01350 quadWeights[4] = 1.25637801599600640312e-01;
01351 quadWeights[5] = 1.35702620455348088591e-01;
01352 quadWeights[6] = 1.35702620455348088591e-01;
01353 quadWeights[7] = 1.25637801599600640312e-01;
01354 quadWeights[8] = 1.06254208880510653268e-01;
01355 quadWeights[9] = 7.89873527821850218711e-02;
01356 quadWeights[10] = 4.58422587065981240739e-02;
01357 quadWeights[11] = 7.57575757575757596785e-03;
01358 break;}
01359 }
01360 }
01361
01362
01363 void GaussLobattoQuadrature::getTriangleQuadPoints(Array<Point>& pnt ,Array<double>& weight ) const{
01364
01365 int deg = nrPointin1D_ + nrPointin1D_ - 2;
01366 if (deg==2){
01367 pnt.resize(3); weight.resize(3);
01368 pnt[0] = Point(0.50000000000000000000 , 0.00000000000000000000);
01369 pnt[1] = Point(0.50000000000000000000 , 0.50000000000000000000);
01370 pnt[2] = Point(0.00000000000000000000 , 0.50000000000000000000);
01371 weight[0] = 0.33333333333333333333;
01372 weight[1] = 0.33333333333333333333;
01373 weight[2] = 0.33333333333333333333;
01374 } else if (deg==3){
01375 pnt.resize(4); weight.resize(4);
01376 pnt[0] = Point(0.33333333333333333333 , 0.33333333333333333333);
01377 pnt[1] = Point(0.60000000000000000000 , 0.20000000000000000000);
01378 pnt[2] = Point(0.20000000000000000000 , 0.60000000000000000000);
01379 pnt[3] = Point(0.20000000000000000000 , 0.20000000000000000000);
01380 weight[0] = -0.56250000000000000000;
01381 weight[1] = 0.52083333333333333333;
01382 weight[2] = 0.52083333333333333333;
01383 weight[3] = 0.52083333333333333333;
01384 } else if (deg==4) {
01385 pnt.resize(6); weight.resize(6);
01386 pnt[0] = Point(0.816847572980459 , 0.091576213509771);
01387 pnt[1] = Point(0.091576213509771 , 0.816847572980459);
01388 pnt[2] = Point(0.091576213509771 , 0.091576213509771);
01389 pnt[3] = Point(0.108103018168070 , 0.445948490915965);
01390 pnt[4] = Point(0.445948490915965 , 0.108103018168070);
01391 pnt[5] = Point(0.445948490915965 , 0.445948490915965);
01392 weight[0] = 0.109951743655322;
01393 weight[1] = 0.109951743655322;
01394 weight[2] = 0.109951743655322;
01395 weight[3] = 0.223381589678011;
01396 weight[4] = 0.223381589678011;
01397 weight[5] = 0.223381589678011;
01398 } else if (deg==5) {
01399 pnt.resize(7); weight.resize(7);
01400 pnt[0] = Point(0.33333333333333333 , 0.33333333333333333);
01401 pnt[1] = Point(0.79742698535308720 , 0.10128650732345633);
01402 pnt[2] = Point(0.10128650732345633 , 0.79742698535308720);
01403 pnt[3] = Point(0.10128650732345633 , 0.10128650732345633);
01404 pnt[4] = Point(0.05971587178976981 , 0.47014206410511505);
01405 pnt[5] = Point(0.47014206410511505 , 0.05971587178976981);
01406 pnt[6] = Point(0.47014206410511505 , 0.47014206410511505);
01407 weight[0] = 0.22500000000000000;
01408 weight[1] = 0.12593918054482717;
01409 weight[2] = 0.12593918054482717;
01410 weight[3] = 0.12593918054482717;
01411 weight[4] = 0.13239415278850616;
01412 weight[5] = 0.13239415278850616;
01413 weight[6] = 0.13239415278850616;
01414 } else if (deg==6) {
01415 pnt.resize(9); weight.resize(9);
01416 pnt[0] = Point(0.124949503233232 , 0.437525248383384);
01417 pnt[1] = Point(0.437525248383384 , 0.124949503233232);
01418 pnt[2] = Point(0.437525248383384 , 0.437525248383384);
01419 pnt[3] = Point(0.797112651860071 , 0.165409927389841);
01420 pnt[4] = Point(0.797112651860071 , 0.037477420750088);
01421 pnt[5] = Point(0.165409927389841 , 0.797112651860071);
01422 pnt[6] = Point(0.165409927389841 , 0.037477420750088);
01423 pnt[7] = Point(0.037477420750088 , 0.797112651860071);
01424 pnt[8] = Point(0.037477420750088 , 0.165409927389841);
01425 weight[0] = 0.205950504760887;
01426 weight[1] = 0.205950504760887;
01427 weight[2] = 0.205950504760887;
01428 weight[3] = 0.063691414286223;
01429 weight[4] = 0.063691414286223;
01430 weight[5] = 0.063691414286223;
01431 weight[6] = 0.063691414286223;
01432 weight[7] = 0.063691414286223;
01433 weight[8] = 0.063691414286223;
01434 } else if (deg==7) {
01435 pnt.resize(13); weight.resize(13);
01436 pnt[0] = Point(0.333333333333333 , 0.333333333333333);
01437 pnt[1] = Point(0.479308067841923 , 0.260345966079038);
01438 pnt[2] = Point(0.260345966079038 , 0.479308067841923);
01439 pnt[3] = Point(0.260345966079038 , 0.260345966079038);
01440 pnt[4] = Point(0.869739794195568 , 0.065130102902216);
01441 pnt[5] = Point(0.065130102902216 , 0.869739794195568);
01442 pnt[6] = Point(0.065130102902216 ,0.065130102902216);
01443 pnt[7] = Point(0.638444188569809 , 0.312865496004875);
01444 pnt[8] = Point(0.638444188569809 , 0.048690315425316);
01445 pnt[9] = Point(0.312865496004875 , 0.638444188569809);
01446 pnt[10] = Point(0.312865496004875 , 0.048690315425316);
01447 pnt[11] = Point(0.048690315425316 , 0.638444188569809);
01448 pnt[12] = Point(0.048690315425316 , 0.312865496004875);
01449 weight[0] = -0.149570044467670;
01450 weight[1] = 0.175615257433204;
01451 weight[2] = 0.175615257433204;
01452 weight[3] = 0.175615257433204;
01453 weight[4] = 0.053347235608839;
01454 weight[5] = 0.053347235608839;
01455 weight[6] = 0.053347235608839;
01456 weight[7] = 0.077113760890257;
01457 weight[8] = 0.077113760890257;
01458 weight[9] = 0.077113760890257;
01459 weight[10] = 0.077113760890257;
01460 weight[11] = 0.077113760890257;
01461 weight[12] = 0.077113760890257;
01462 } else if (deg==8) {
01463 pnt.resize(19); weight.resize(19);
01464 pnt[0] = Point(0.3333333333333333 , 0.3333333333333333);
01465 pnt[1] = Point(0.7974269853530872 , 0.1012865073234563);
01466 pnt[2] = Point(0.1012865073234563 , 0.7974269853530872);
01467 pnt[3] = Point(0.1012865073234563 , 0.1012865073234563);
01468 pnt[4] = Point(0.0597158717897698 , 0.4701420641051151);
01469 pnt[5] = Point(0.4701420641051151 , 0.0597158717897698);
01470 pnt[6] = Point(0.4701420641051151 , 0.4701420641051151);
01471 pnt[7] = Point(0.5357953464498992 , 0.2321023267750504);
01472 pnt[8] = Point(0.2321023267750504 , 0.5357953464498992);
01473 pnt[9] = Point(0.2321023267750504 , 0.2321023267750504);
01474 pnt[10] = Point(0.9410382782311209 , 0.0294808608844396);
01475 pnt[11] = Point(0.0294808608844396 , 0.9410382782311209);
01476 pnt[12] = Point(0.0294808608844396 , 0.0294808608844396);
01477 pnt[13] = Point(0.7384168123405100 , 0.2321023267750504);
01478 pnt[14] = Point(0.7384168123405100 , 0.0294808608844396);
01479 pnt[15] = Point(0.2321023267750504 , 0.7384168123405100);
01480 pnt[16] = Point(0.2321023267750504 , 0.0294808608844396);
01481 pnt[17] = Point(0.0294808608844396 , 0.7384168123405100);
01482 pnt[18] = Point(0.0294808608844396 , 0.2321023267750504);
01483 weight[0] = 0.0378610912003147;
01484 weight[1] = 0.0376204254131829;
01485 weight[2] = 0.0376204254131829;
01486 weight[3] = 0.0376204254131829;
01487 weight[4] = 0.0783573522441174;
01488 weight[5] = 0.0783573522441174;
01489 weight[6] = 0.0783573522441174;
01490 weight[7] = 0.1162714796569659;
01491 weight[8] = 0.1162714796569659;
01492 weight[9] = 0.1162714796569659;
01493 weight[10] = 0.0134442673751655;
01494 weight[11] = 0.0134442673751655;
01495 weight[12] = 0.0134442673751655;
01496 weight[13] = 0.0375097224552317;
01497 weight[14] = 0.0375097224552317;
01498 weight[15] = 0.0375097224552317;
01499 weight[16] = 0.0375097224552317;
01500 weight[17] = 0.0375097224552317;
01501 weight[18] = 0.0375097224552317;
01502 } else if (deg == 9) {
01503 pnt.resize(19); weight.resize(19);
01504 pnt[0] = Point(0.33333333333333331 , 0.33333333333333331);
01505 pnt[1] = Point(2.06349616025259287E-002, 0.48968251919873701);
01506 pnt[2] = Point(0.48968251919873701 , 2.06349616025259287E-002);
01507 pnt[3] = Point(0.48968251919873701 , 0.48968251919873701);
01508 pnt[4] = Point(0.12582081701412900 , 0.43708959149293553);
01509 pnt[5] = Point(0.43708959149293553 , 0.12582081701412900);
01510 pnt[6] = Point(0.43708959149293553 , 0.43708959149293553);
01511 pnt[7] = Point(0.62359292876193562 , 0.18820353561903219);
01512 pnt[8] = Point(0.18820353561903219 , 0.62359292876193562);
01513 pnt[9] = Point(0.18820353561903219 , 0.18820353561903219);
01514 pnt[10] = Point(0.91054097321109406 , 4.47295133944529688E-002);
01515 pnt[11] = Point(4.47295133944529688E-002, 0.91054097321109406);
01516 pnt[12] = Point(4.47295133944529688E-002, 4.47295133944529688E-002);
01517 pnt[13] = Point(0.74119859878449801 , 3.68384120547362581E-002);
01518 pnt[14] = Point(0.74119859878449801 , 0.22196298916076573);
01519 pnt[15] = Point(3.68384120547362581E-002, 0.74119859878449801);
01520 pnt[16] = Point(3.68384120547362581E-002, 0.22196298916076573);
01521 pnt[17] = Point(0.22196298916076573 , 0.74119859878449801);
01522 pnt[18] = Point(0.22196298916076573 , 3.68384120547362581E-002 );
01523 weight[0] = 9.71357962827961025E-002;
01524 weight[1] = 3.13347002271398278E-002;
01525 weight[2] = 3.13347002271398278E-002;
01526 weight[3] = 3.13347002271398278E-002;
01527 weight[4] = 7.78275410047754301E-002;
01528 weight[5] = 7.78275410047754301E-002;
01529 weight[6] = 7.78275410047754301E-002;
01530 weight[7] = 7.96477389272090969E-002;
01531 weight[8] = 7.96477389272090969E-002;
01532 weight[9] = 7.96477389272090969E-002;
01533 weight[10] = 2.55776756586981006E-002;
01534 weight[11] = 2.55776756586981006E-002;
01535 weight[12] = 2.55776756586981006E-002;
01536 weight[13] = 4.32835393772893970E-002;
01537 weight[14] = 4.32835393772893970E-002;
01538 weight[15] = 4.32835393772893970E-002;
01539 weight[16] = 4.32835393772893970E-002;
01540 weight[17] = 4.32835393772893970E-002;
01541 weight[18] = 4.32835393772893970E-002;
01542 } else if (deg<=11) {
01543 pnt.resize(28); weight.resize(28);
01544 pnt[0] = Point(0.33333333333333333 , 0.333333333333333333);
01545 pnt[1] = Point(0.9480217181434233 , 0.02598914092828833);
01546 pnt[2] = Point(0.02598914092828833 , 0.9480217181434233);
01547 pnt[3] = Point(0.02598914092828833 , 0.02598914092828833);
01548 pnt[4] = Point(0.8114249947041546 , 0.09428750264792270);
01549 pnt[5] = Point(0.09428750264792270 , 0.8114249947041546);
01550 pnt[6] = Point(0.09428750264792270 , 0.09428750264792270);
01551 pnt[7] = Point(0.01072644996557060 , 0.4946367750172147);
01552 pnt[8] = Point(0.4946367750172147 , 0.01072644996557060);
01553 pnt[9] = Point(0.4946367750172147 , 0.4946367750172147);
01554 pnt[10] = Point(0.5853132347709715 , 0.2073433826145142);
01555 pnt[11] = Point(0.2073433826145142 , 0.5853132347709715);
01556 pnt[12] = Point(0.2073433826145142 , 0.2073433826145142);
01557 pnt[13] = Point(0.1221843885990187 , 0.4389078057004907);
01558 pnt[14] = Point(0.4389078057004907 , 0.1221843885990187);
01559 pnt[15] = Point(0.4389078057004907 , 0.4389078057004907);
01560 pnt[16] = Point(0.6779376548825902 , 0.04484167758913055);
01561 pnt[17] = Point(0.6779376548825902 , 0.27722066752827925);
01562 pnt[18] = Point(0.04484167758913055 , 0.6779376548825902);
01563 pnt[19] = Point(0.04484167758913055 , 0.27722066752827925);
01564 pnt[20] = Point(0.27722066752827925 , 0.6779376548825902);
01565 pnt[21] = Point(0.27722066752827925 , 0.04484167758913055);
01566 pnt[22] = Point(0.8588702812826364 , 0.00000000000000000);
01567 pnt[23] = Point(0.8588702812826364 , 0.1411297187173636);
01568 pnt[24] = Point(0.0000000000000000 , 0.8588702812826364);
01569 pnt[25] = Point(0.0000000000000000 , 0.1411297187173636);
01570 pnt[26] = Point(0.1411297187173636 , 0.8588702812826364);
01571 pnt[27] = Point(0.1411297187173636 , 0.0000000000000000);
01572 weight[0] = 0.08797730116222190;
01573 weight[1] = 0.008744311553736190;
01574 weight[2] = 0.008744311553736190;
01575 weight[3] = 0.008744311553736190;
01576 weight[4] = 0.03808157199393533;
01577 weight[5] = 0.03808157199393533;
01578 weight[6] = 0.03808157199393533;
01579 weight[7] = 0.01885544805613125;
01580 weight[8] = 0.01885544805613125;
01581 weight[9] = 0.01885544805613125;
01582 weight[10] = 0.07215969754474100;
01583 weight[11] = 0.07215969754474100;
01584 weight[12] = 0.07215969754474100;
01585 weight[13] = 0.06932913870553720;
01586 weight[14] = 0.06932913870553720;
01587 weight[15] = 0.06932913870553720;
01588 weight[16] = 0.04105631542928860;
01589 weight[17] = 0.04105631542928860;
01590 weight[18] = 0.04105631542928860;
01591 weight[19] = 0.04105631542928860;
01592 weight[20] = 0.04105631542928860;
01593 weight[21] = 0.04105631542928860;
01594 weight[22] = 0.007362383783300573;
01595 weight[23] = 0.007362383783300573;
01596 weight[24] = 0.007362383783300573;
01597 weight[25] = 0.007362383783300573;
01598 weight[26] = 0.007362383783300573;
01599 weight[27] = 0.007362383783300573;
01600 } else if (deg<=13) {
01601 pnt.resize(37); weight.resize(37);
01602 pnt[0] = Point(0.333333333333333333333333333333, 0.333333333333333333333333333333);
01603 pnt[1] = Point(0.950275662924105565450352089520, 0.024862168537947217274823955239);
01604 pnt[2] = Point(0.024862168537947217274823955239, 0.950275662924105565450352089520);
01605 pnt[3] = Point(0.024862168537947217274823955239, 0.024862168537947217274823955239);
01606 pnt[4] = Point(0.171614914923835347556304795551, 0.414192542538082326221847602214);
01607 pnt[5] = Point(0.414192542538082326221847602214, 0.171614914923835347556304795551);
01608 pnt[6] = Point(0.414192542538082326221847602214, 0.414192542538082326221847602214);
01609 pnt[7] = Point(0.539412243677190440263092985511, 0.230293878161404779868453507244);
01610 pnt[8] = Point(0.230293878161404779868453507244, 0.539412243677190440263092985511);
01611 pnt[9] = Point(0.230293878161404779868453507244, 0.230293878161404779868453507244);
01612 pnt[10] = Point(0.772160036676532561750285570113, 0.113919981661733719124857214943);
01613 pnt[11] = Point(0.113919981661733719124857214943, 0.772160036676532561750285570113);
01614 pnt[12] = Point(0.113919981661733719124857214943, 0.113919981661733719124857214943);
01615 pnt[13] = Point(0.009085399949835353883572964740, 0.495457300025082323058213517632);
01616 pnt[14] = Point(0.495457300025082323058213517632, 0.009085399949835353883572964740);
01617 pnt[15] = Point(0.495457300025082323058213517632, 0.495457300025082323058213517632);
01618 pnt[16] = Point(0.062277290305886993497083640527, 0.468861354847056503251458179727);
01619 pnt[17] = Point(0.468861354847056503251458179727, 0.062277290305886993497083640527);
01620 pnt[18] = Point(0.468861354847056503251458179727, 0.468861354847056503251458179727);
01621 pnt[19] = Point(0.022076289653624405142446876931, 0.851306504174348550389457672223);
01622 pnt[20] = Point(0.022076289653624405142446876931, 0.126617206172027096933163647918);
01623 pnt[21] = Point(0.851306504174348550389457672223, 0.022076289653624405142446876931);
01624 pnt[22] = Point(0.851306504174348550389457672223, 0.126617206172027096933163647918);
01625 pnt[23] = Point(0.126617206172027096933163647918, 0.022076289653624405142446876931);
01626 pnt[24] = Point(0.126617206172027096933163647918, 0.851306504174348550389457672223);
01627 pnt[25] = Point(0.018620522802520968955913511549, 0.689441970728591295496647976487);
01628 pnt[26] = Point(0.018620522802520968955913511549, 0.291937506468887771754472382212);
01629 pnt[27] = Point(0.689441970728591295496647976487, 0.018620522802520968955913511549);
01630 pnt[28] = Point(0.689441970728591295496647976487, 0.291937506468887771754472382212);
01631 pnt[29] = Point(0.291937506468887771754472382212, 0.018620522802520968955913511549);
01632 pnt[30] = Point(0.291937506468887771754472382212, 0.689441970728591295496647976487);
01633 pnt[31] = Point(0.096506481292159228736516560903, 0.635867859433872768286976979827);
01634 pnt[32] = Point(0.096506481292159228736516560903, 0.267625659273967961282458816185);
01635 pnt[33] = Point(0.635867859433872768286976979827, 0.096506481292159228736516560903);
01636 pnt[34] = Point(0.635867859433872768286976979827, 0.267625659273967961282458816185);
01637 pnt[35] = Point(0.267625659273967961282458816185, 0.096506481292159228736516560903);
01638 pnt[36] = Point(0.267625659273967961282458816185, 0.635867859433872768286976979827);
01639
01640 weight[0] = 0.051739766065744133555179145422;
01641 weight[1] = 0.008007799555564801597804123460;
01642 weight[2] = 0.008007799555564801597804123460;
01643 weight[3] = 0.008007799555564801597804123460;
01644 weight[4] = 0.046868898981821644823226732071;
01645 weight[5] = 0.046868898981821644823226732071;
01646 weight[6] = 0.046868898981821644823226732071;
01647 weight[7] = 0.046590940183976487960361770070;
01648 weight[8] = 0.046590940183976487960361770070;
01649 weight[9] = 0.046590940183976487960361770070;
01650 weight[10] = 0.031016943313796381407646220131;
01651 weight[11] = 0.031016943313796381407646220131;
01652 weight[12] = 0.031016943313796381407646220131;
01653 weight[13] = 0.010791612736631273623178240136;
01654 weight[14] = 0.010791612736631273623178240136;
01655 weight[15] = 0.010791612736631273623178240136;
01656 weight[16] = 0.032195534242431618819414482205;
01657 weight[17] = 0.032195534242431618819414482205;
01658 weight[18] = 0.032195534242431618819414482205;
01659 weight[19] = 0.015445834210701583817692900053;
01660 weight[20] = 0.015445834210701583817692900053;
01661 weight[21] = 0.015445834210701583817692900053;
01662 weight[22] = 0.015445834210701583817692900053;
01663 weight[23] = 0.015445834210701583817692900053;
01664 weight[24] = 0.015445834210701583817692900053;
01665 weight[25] = 0.017822989923178661888748319485;
01666 weight[26] = 0.017822989923178661888748319485;
01667 weight[27] = 0.017822989923178661888748319485;
01668 weight[28] = 0.017822989923178661888748319485;
01669 weight[29] = 0.017822989923178661888748319485;
01670 weight[30] = 0.017822989923178661888748319485;
01671 weight[31] = 0.037038683681384627918546472190;
01672 weight[32] = 0.037038683681384627918546472190;
01673 weight[33] = 0.037038683681384627918546472190;
01674 weight[34] = 0.037038683681384627918546472190;
01675 weight[35] = 0.037038683681384627918546472190;
01676 weight[36] = 0.037038683681384627918546472190;
01677 } else if (deg<=14) {
01678 pnt.resize(46); weight.resize(46);
01679 pnt[0] = Point(0.33333333333333331000 , 0.33333333333333331000);
01680 pnt[1] = Point(0.00997976080645843200 , 0.00997976080645843200);
01681 pnt[2] = Point(0.00997976080645843200 , 0.98004047838708308000);
01682 pnt[3] = Point(0.98004047838708308000 , 0.00997976080645843200);
01683 pnt[4] = Point(0.47997789352118841000 , 0.47997789352118841000);
01684 pnt[5] = Point(0.47997789352118841000 , 0.04004421295762317100);
01685 pnt[6] = Point(0.04004421295762317100 , 0.47997789352118841000);
01686 pnt[7] = Point(0.15381195917696691000 , 0.15381195917696691000);
01687 pnt[8] = Point(0.15381195917696691000 , 0.69237608164606623000);
01688 pnt[9] = Point(0.69237608164606623000 , 0.15381195917696691000);
01689 pnt[10] = Point(0.07402347711698781300 , 0.07402347711698781300);
01690 pnt[11] = Point(0.07402347711698781300 , 0.85195304576602437000);
01691 pnt[12] = Point(0.85195304576602437000 , 0.07402347711698781300);
01692 pnt[13] = Point(0.13035468250332999000 , 0.13035468250332999000);
01693 pnt[14] = Point(0.13035468250332999000 , 0.73929063499334002000);
01694 pnt[15] = Point(0.73929063499334002000 , 0.13035468250332999000);
01695 pnt[16] = Point(0.23061722602665313000 , 0.23061722602665313000);
01696 pnt[17] = Point(0.23061722602665313000 , 0.53876554794669373000);
01697 pnt[18] = Point(0.53876554794669373000 , 0.23061722602665313000);
01698 pnt[19] = Point(0.42233208341914780000 , 0.42233208341914780000);
01699 pnt[20] = Point(0.42233208341914780000 , 0.15533583316170441000);
01700 pnt[21] = Point(0.15533583316170441000 , 0.42233208341914780000);
01701 pnt[22] = Point(0.78623738593466097000 , 0.19061636003190091000);
01702 pnt[23] = Point(0.78623738593466097000 , 0.02314625403343817400);
01703 pnt[24] = Point(0.19061636003190091000 , 0.78623738593466097000);
01704 pnt[25] = Point(0.19061636003190091000 , 0.02314625403343817400);
01705 pnt[26] = Point(0.02314625403343817400 , 0.78623738593466097000);
01706 pnt[27] = Point(0.02314625403343817400 , 0.19061636003190091000);
01707 pnt[28] = Point(0.63055214366060741000 , 0.36232313774354713000);
01708 pnt[29] = Point(0.63055214366060741000 , 0.00712471859584540290);
01709 pnt[30] = Point(0.36232313774354713000 , 0.63055214366060741000);
01710 pnt[31] = Point(0.36232313774354713000 , 0.00712471859584540290);
01711 pnt[32] = Point(0.00712471859584540290 , 0.63055214366060741000);
01712 pnt[33] = Point(0.00712471859584540290 , 0.36232313774354713000);
01713 pnt[34] = Point(0.62657732985630632000 , 0.29077120588366739000);
01714 pnt[35] = Point(0.62657732985630632000 , 0.08265146426002623100);
01715 pnt[36] = Point(0.29077120588366739000 , 0.62657732985630632000);
01716 pnt[37] = Point(0.29077120588366739000 , 0.08265146426002623100);
01717 pnt[38] = Point(0.08265146426002623100 , 0.62657732985630632000);
01718 pnt[39] = Point(0.08265146426002623100 , 0.29077120588366739000);
01719 pnt[40] = Point(0.91420998492962546000 , 0.07116571087775076800);
01720 pnt[41] = Point(0.91420998492962546000 , 0.01462430419262372700);
01721 pnt[42] = Point(0.07116571087775076800 , 0.91420998492962546000);
01722 pnt[43] = Point(0.07116571087775076800 , 0.01462430419262372700);
01723 pnt[44] = Point(0.01462430419262372700 , 0.91420998492962546000);
01724 pnt[45] = Point(0.01462430419262372700 , 0.07116571087775076800);
01725
01726 weight[0] = 0.05859628522602859700;
01727 weight[1] = 0.00173515122972526760;
01728 weight[2] = 0.00173515122972526760;
01729 weight[3] = 0.00173515122972526760;
01730 weight[4] = 0.02616378255861452300;
01731 weight[5] = 0.02616378255861452300;
01732 weight[6] = 0.02616378255861452300;
01733 weight[7] = 0.00391972924240182890;
01734 weight[8] = 0.00391972924240182890;
01735 weight[9] = 0.00391972924240182890;
01736 weight[10] = 0.01224735975694086700;
01737 weight[11] = 0.01224735975694086700;
01738 weight[12] = 0.01224735975694086700;
01739 weight[13] = 0.02819962850325796000;
01740 weight[14] = 0.02819962850325796000;
01741 weight[15] = 0.02819962850325796000;
01742 weight[16] = 0.05088708718595948800;
01743 weight[17] = 0.05088708718595948800;
01744 weight[18] = 0.05088708718595948800;
01745 weight[19] = 0.05045343990160360000;
01746 weight[20] = 0.05045343990160360000;
01747 weight[21] = 0.05045343990160360000;
01748 weight[22] = 0.01706364421223345200;
01749 weight[23] = 0.01706364421223345200;
01750 weight[24] = 0.01706364421223345200;
01751 weight[25] = 0.01706364421223345200;
01752 weight[26] = 0.01706364421223345200;
01753 weight[27] = 0.01706364421223345200;
01754 weight[28] = 0.00968346642550660040;
01755 weight[29] = 0.00968346642550660040;
01756 weight[30] = 0.00968346642550660040;
01757 weight[31] = 0.00968346642550660040;
01758 weight[32] = 0.00968346642550660040;
01759 weight[33] = 0.00968346642550660040;
01760 weight[34] = 0.03638575592848500300;
01761 weight[35] = 0.03638575592848500300;
01762 weight[36] = 0.03638575592848500300;
01763 weight[37] = 0.03638575592848500300;
01764 weight[38] = 0.03638575592848500300;
01765 weight[39] = 0.03638575592848500300;
01766 weight[40] = 0.00696466337351841270;
01767 weight[41] = 0.00696466337351841270;
01768 weight[42] = 0.00696466337351841270;
01769 weight[43] = 0.00696466337351841270;
01770 weight[44] = 0.00696466337351841270;
01771 weight[45] = 0.00696466337351841270;
01772 } else if (deg<=20) {
01773 pnt.resize(88); weight.resize(88);
01774 pnt[0] = Point(0.33333333333333331000 , 0.33333333333333331000);
01775 pnt[1] = Point(0.21587430593299198000 , 0.21587430593299198000);
01776 pnt[2] = Point(0.21587430593299198000 , 0.56825138813401610000);
01777 pnt[3] = Point(0.56825138813401610000 , 0.21587430593299198000);
01778 pnt[4] = Point(0.07537676652974727200 , 0.07537676652974727200);
01779 pnt[5] = Point(0.07537676652974727200 , 0.84924646694050543000);
01780 pnt[6] = Point(0.84924646694050543000 , 0.07537676652974727200);
01781 pnt[7] = Point(0.01030082813722179300 , 0.01030082813722179300);
01782 pnt[8] = Point(0.01030082813722179300 , 0.97939834372555645000);
01783 pnt[9] = Point(0.97939834372555645000 , 0.01030082813722179300);
01784 pnt[10] = Point(0.49360221129870019000 , 0.49360221129870019000);
01785 pnt[11] = Point(0.49360221129870019000 , 0.01279557740259962300);
01786 pnt[12] = Point(0.01279557740259962300 , 0.49360221129870019000);
01787 pnt[13] = Point(0.46155093810692532000 , 0.46155093810692532000);
01788 pnt[14] = Point(0.46155093810692532000 , 0.07689812378614935300);
01789 pnt[15] = Point(0.07689812378614935300 , 0.46155093810692532000);
01790 pnt[16] = Point(0.32862140642423698000 , 0.42934057025821037000);
01791 pnt[17] = Point(0.32862140642423698000 , 0.24203802331755264000);
01792 pnt[18] = Point(0.42934057025821037000 , 0.32862140642423698000);
01793 pnt[19] = Point(0.42934057025821037000 , 0.24203802331755264000);
01794 pnt[20] = Point(0.24203802331755264000 , 0.32862140642423698000);
01795 pnt[21] = Point(0.24203802331755264000 , 0.42934057025821037000);
01796 pnt[22] = Point(0.26048036178656875000 , 0.10157753428096944000);
01797 pnt[23] = Point(0.26048036178656875000 , 0.63794210393246176000);
01798 pnt[24] = Point(0.10157753428096944000 , 0.26048036178656875000);
01799 pnt[25] = Point(0.10157753428096944000 , 0.63794210393246176000);
01800 pnt[26] = Point(0.63794210393246176000 , 0.26048036178656875000);
01801 pnt[27] = Point(0.63794210393246176000 , 0.10157753428096944000);
01802 pnt[28] = Point(0.13707423584645531000 , 0.71006597300113017000);
01803 pnt[29] = Point(0.13707423584645531000 , 0.15285979115241455000);
01804 pnt[30] = Point(0.71006597300113017000 , 0.13707423584645531000);
01805 pnt[31] = Point(0.71006597300113017000 , 0.15285979115241455000);
01806 pnt[32] = Point(0.15285979115241455000 , 0.13707423584645531000);
01807 pnt[33] = Point(0.15285979115241455000 , 0.71006597300113017000);
01808 pnt[34] = Point(0.14672694587229979000 , 0.49854547767841484000);
01809 pnt[35] = Point(0.14672694587229979000 , 0.35472757644928543000);
01810 pnt[36] = Point(0.49854547767841484000 , 0.14672694587229979000);
01811 pnt[37] = Point(0.49854547767841484000 , 0.35472757644928543000);
01812 pnt[38] = Point(0.35472757644928543000 , 0.14672694587229979000);
01813 pnt[39] = Point(0.35472757644928543000 , 0.49854547767841484000);
01814 pnt[40] = Point(0.02699897774255329000 , 0.04918672267258199900);
01815 pnt[41] = Point(0.02699897774255329000 , 0.92381429958486472000);
01816 pnt[42] = Point(0.04918672267258199900 , 0.02699897774255329000);
01817 pnt[43] = Point(0.04918672267258199900 , 0.92381429958486472000);
01818 pnt[44] = Point(0.92381429958486472000 , 0.02699897774255329000);
01819 pnt[45] = Point(0.92381429958486472000 , 0.04918672267258199900);
01820 pnt[46] = Point(0.06187178593361702900 , 0.77966014654056937000);
01821 pnt[47] = Point(0.06187178593361702900 , 0.15846806752581366000);
01822 pnt[48] = Point(0.77966014654056937000 , 0.06187178593361702900);
01823 pnt[49] = Point(0.77966014654056937000 , 0.15846806752581366000);
01824 pnt[50] = Point(0.15846806752581366000 , 0.06187178593361702900);
01825 pnt[51] = Point(0.15846806752581366000 , 0.77966014654056937000);
01826 pnt[52] = Point(0.04772436742762199700 , 0.37049153914954763000);
01827 pnt[53] = Point(0.04772436742762199700 , 0.58178409342283044000);
01828 pnt[54] = Point(0.37049153914954763000 , 0.04772436742762199700);
01829 pnt[55] = Point(0.37049153914954763000 , 0.58178409342283044000);
01830 pnt[56] = Point(0.58178409342283044000 , 0.04772436742762199700);
01831 pnt[57] = Point(0.58178409342283044000 , 0.37049153914954763000);
01832 pnt[58] = Point(0.12060051518636437000 , 0.86334694875475260000);
01833 pnt[59] = Point(0.12060051518636437000 , 0.01605253605888301600);
01834 pnt[60] = Point(0.86334694875475260000 , 0.12060051518636437000);
01835 pnt[61] = Point(0.86334694875475260000 , 0.01605253605888301600);
01836 pnt[62] = Point(0.01605253605888301600 , 0.12060051518636437000);
01837 pnt[63] = Point(0.01605253605888301600 , 0.86334694875475260000);
01838 pnt[64] = Point(0.00269714779670978760 , 0.05619493818774550000);
01839 pnt[65] = Point(0.00269714779670978760 , 0.94110791401554472000);
01840 pnt[66] = Point(0.05619493818774550000 , 0.00269714779670978760);
01841 pnt[67] = Point(0.05619493818774550000 , 0.94110791401554472000);
01842 pnt[68] = Point(0.94110791401554472000 , 0.00269714779670978760);
01843 pnt[69] = Point(0.94110791401554472000 , 0.05619493818774550000);
01844 pnt[70] = Point(0.00301563327794236250 , 0.20867500674842135000);
01845 pnt[71] = Point(0.00301563327794236250 , 0.78830935997363627000);
01846 pnt[72] = Point(0.20867500674842135000 , 0.00301563327794236250);
01847 pnt[73] = Point(0.20867500674842135000 , 0.78830935997363627000);
01848 pnt[74] = Point(0.78830935997363627000 , 0.00301563327794236250);
01849 pnt[75] = Point(0.78830935997363627000 , 0.20867500674842135000);
01850 pnt[76] = Point(0.02990537578845702000 , 0.72115124091203409000);
01851 pnt[77] = Point(0.02990537578845702000 , 0.24894338329950894000);
01852 pnt[78] = Point(0.72115124091203409000 , 0.02990537578845702000);
01853 pnt[79] = Point(0.72115124091203409000 , 0.24894338329950894000);
01854 pnt[80] = Point(0.24894338329950894000 , 0.02990537578845702000);
01855 pnt[81] = Point(0.24894338329950894000 , 0.72115124091203409000);
01856 pnt[82] = Point(0.00675665422246098880 , 0.64005544194054187000);
01857 pnt[83] = Point(0.00675665422246098880 , 0.35318790383699716000);
01858 pnt[84] = Point(0.64005544194054187000 , 0.00675665422246098880);
01859 pnt[85] = Point(0.64005544194054187000 , 0.35318790383699716000);
01860 pnt[86] = Point(0.35318790383699716000 , 0.00675665422246098880);
01861 pnt[87] = Point(0.35318790383699716000 , 0.64005544194054187000);
01862
01863 weight[0] = 0.01253760799449665600;
01864 weight[1] = 0.02747186987642421400;
01865 weight[2] = 0.02747186987642421400;
01866 weight[3] = 0.02747186987642421400;
01867 weight[4] = 0.00976527227705142370;
01868 weight[5] = 0.00976527227705142370;
01869 weight[6] = 0.00976527227705142370;
01870 weight[7] = 0.00139841953539182350;
01871 weight[8] = 0.00139841953539182350;
01872 weight[9] = 0.00139841953539182350;
01873 weight[10] = 0.00929210262518518310;
01874 weight[11] = 0.00929210262518518310;
01875 weight[12] = 0.00929210262518518310;
01876 weight[13] = 0.01657787603236692700;
01877 weight[14] = 0.01657787603236692700;
01878 weight[15] = 0.01657787603236692700;
01879 weight[16] = 0.02066776234866507900;
01880 weight[17] = 0.02066776234866507900;
01881 weight[18] = 0.02066776234866507900;
01882 weight[19] = 0.02066776234866507900;
01883 weight[20] = 0.02066776234866507900;
01884 weight[21] = 0.02066776234866507900;
01885 weight[22] = 0.02082223552115450600;
01886 weight[23] = 0.02082223552115450600;
01887 weight[24] = 0.02082223552115450600;
01888 weight[25] = 0.02082223552115450600;
01889 weight[26] = 0.02082223552115450600;
01890 weight[27] = 0.02082223552115450600;
01891 weight[28] = 0.00956863841984906090;
01892 weight[29] = 0.00956863841984906090;
01893 weight[30] = 0.00956863841984906090;
01894 weight[31] = 0.00956863841984906090;
01895 weight[32] = 0.00956863841984906090;
01896 weight[33] = 0.00956863841984906090;
01897 weight[34] = 0.02445277096897246300;
01898 weight[35] = 0.02445277096897246300;
01899 weight[36] = 0.02445277096897246300;
01900 weight[37] = 0.02445277096897246300;
01901 weight[38] = 0.02445277096897246300;
01902 weight[39] = 0.02445277096897246300;
01903 weight[40] = 0.00315573063063053420;
01904 weight[41] = 0.00315573063063053420;
01905 weight[42] = 0.00315573063063053420;
01906 weight[43] = 0.00315573063063053420;
01907 weight[44] = 0.00315573063063053420;
01908 weight[45] = 0.00315573063063053420;
01909 weight[46] = 0.01213679636532129800;
01910 weight[47] = 0.01213679636532129800;
01911 weight[48] = 0.01213679636532129800;
01912 weight[49] = 0.01213679636532129800;
01913 weight[50] = 0.01213679636532129800;
01914 weight[51] = 0.01213679636532129800;
01915 weight[52] = 0.01496648014388644900;
01916 weight[53] = 0.01496648014388644900;
01917 weight[54] = 0.01496648014388644900;
01918 weight[55] = 0.01496648014388644900;
01919 weight[56] = 0.01496648014388644900;
01920 weight[57] = 0.01496648014388644900;
01921 weight[58] = 0.00632759332177773930;
01922 weight[59] = 0.00632759332177773930;
01923 weight[60] = 0.00632759332177773930;
01924 weight[61] = 0.00632759332177773930;
01925 weight[62] = 0.00632759332177773930;
01926 weight[63] = 0.00632759332177773930;
01927 weight[64] = 0.00134256031206369590;
01928 weight[65] = 0.00134256031206369590;
01929 weight[66] = 0.00134256031206369590;
01930 weight[67] = 0.00134256031206369590;
01931 weight[68] = 0.00134256031206369590;
01932 weight[69] = 0.00134256031206369590;
01933 weight[70] = 0.00277607691634755400;
01934 weight[71] = 0.00277607691634755400;
01935 weight[72] = 0.00277607691634755400;
01936 weight[73] = 0.00277607691634755400;
01937 weight[74] = 0.00277607691634755400;
01938 weight[75] = 0.00277607691634755400;
01939 weight[76] = 0.01073984447418494100;
01940 weight[77] = 0.01073984447418494100;
01941 weight[78] = 0.01073984447418494100;
01942 weight[79] = 0.01073984447418494100;
01943 weight[80] = 0.01073984447418494100;
01944 weight[81] = 0.01073984447418494100;
01945 weight[82] = 0.00536780573818745280;
01946 weight[83] = 0.00536780573818745280;
01947 weight[84] = 0.00536780573818745280;
01948 weight[85] = 0.00536780573818745280;
01949 weight[86] = 0.00536780573818745280;
01950 weight[87] = 0.00536780573818745280;
01951 } else if (deg<=25) {
01952 pnt.resize(126); weight.resize(126);
01953 pnt[0] = Point(0.02794648307316999900 , 0.48602675846340998000);
01954 pnt[1] = Point(0.48602675846340998000 , 0.48602675846340998000);
01955 pnt[2] = Point(0.48602675846340998000 , 0.02794648307316999900);
01956 pnt[3] = Point(0.13117860132765000000 , 0.43441069933616999000);
01957 pnt[4] = Point(0.43441069933616999000 , 0.43441069933616999000);
01958 pnt[5] = Point(0.43441069933616999000 , 0.13117860132765000000);
01959 pnt[6] = Point(0.22022172951207000000 , 0.38988913524396002000);
01960 pnt[7] = Point(0.38988913524396002000 , 0.38988913524396002000);
01961 pnt[8] = Point(0.38988913524396002000 , 0.22022172951207000000);
01962 pnt[9] = Point(0.40311353196039001000 , 0.29844323401980000000);
01963 pnt[10] = Point(0.29844323401980000000 , 0.29844323401980000000);
01964 pnt[11] = Point(0.29844323401980000000 , 0.40311353196039001000);
01965 pnt[12] = Point(0.53191165532525997000 , 0.23404417233736999000);
01966 pnt[13] = Point(0.23404417233736999000 , 0.23404417233736999000);
01967 pnt[14] = Point(0.23404417233736999000 , 0.53191165532525997000);
01968 pnt[15] = Point(0.69706333078196003000 , 0.15146833460902001000);
01969 pnt[16] = Point(0.15146833460902001000 , 0.15146833460902001000);
01970 pnt[17] = Point(0.15146833460902001000 , 0.69706333078196003000);
01971 pnt[18] = Point(0.77453221290801000000 , 0.11273389354599000000);
01972 pnt[19] = Point(0.11273389354599000000 , 0.11273389354599000000);
01973 pnt[20] = Point(0.11273389354599000000 , 0.77453221290801000000);
01974 pnt[21] = Point(0.84456861581694997000 , 0.07771569209152999500);
01975 pnt[22] = Point(0.07771569209152999500 , 0.07771569209152999500);
01976 pnt[23] = Point(0.07771569209152999500 , 0.84456861581694997000);
01977 pnt[24] = Point(0.93021381277141002000 , 0.03489309361430000000);
01978 pnt[25] = Point(0.03489309361430000000 , 0.03489309361430000000);
01979 pnt[26] = Point(0.03489309361430000000 , 0.93021381277141002000);
01980 pnt[27] = Point(0.98548363075812995000 , 0.00725818462093000010);
01981 pnt[28] = Point(0.00725818462093000010 , 0.00725818462093000010);
01982 pnt[29] = Point(0.00725818462093000010 , 0.98548363075812995000);
01983 pnt[30] = Point(0.00129235270443999990 , 0.22721445215336000000);
01984 pnt[31] = Point(0.22721445215336000000 , 0.77149319514218995000);
01985 pnt[32] = Point(0.77149319514218995000 , 0.00129235270443999990);
01986 pnt[33] = Point(0.22721445215336000000 , 0.00129235270443999990);
01987 pnt[34] = Point(0.77149319514218995000 , 0.22721445215336000000);
01988 pnt[35] = Point(0.00129235270443999990 , 0.77149319514218995000);
01989 pnt[36] = Point(0.00539970127212000000 , 0.43501055485356999000);
01990 pnt[37] = Point(0.43501055485356999000 , 0.55958974387431004000);
01991 pnt[38] = Point(0.55958974387431004000 , 0.00539970127212000000);
01992 pnt[39] = Point(0.43501055485356999000 , 0.00539970127212000000);
01993 pnt[40] = Point(0.55958974387431004000 , 0.43501055485356999000);
01994 pnt[41] = Point(0.00539970127212000000 , 0.55958974387431004000);
01995 pnt[42] = Point(0.00638400303398000030 , 0.32030959927219999000);
01996 pnt[43] = Point(0.32030959927219999000 , 0.67330639769381995000);
01997 pnt[44] = Point(0.67330639769381995000 , 0.00638400303398000030);
01998 pnt[45] = Point(0.32030959927219999000 , 0.00638400303398000030);
01999 pnt[46] = Point(0.67330639769381995000 , 0.32030959927219999000);
02000 pnt[47] = Point(0.00638400303398000030 , 0.67330639769381995000);
02001 pnt[48] = Point(0.00502821150199000020 , 0.09175032228000999700);
02002 pnt[49] = Point(0.09175032228000999700 , 0.90322146621800004000);
02003 pnt[50] = Point(0.90322146621800004000 , 0.00502821150199000020);
02004 pnt[51] = Point(0.09175032228000999700 , 0.00502821150199000020);
02005 pnt[52] = Point(0.90322146621800004000 , 0.09175032228000999700);
02006 pnt[53] = Point(0.00502821150199000020 , 0.90322146621800004000);
02007 pnt[54] = Point(0.00682675862178000040 , 0.03801083585871999800);
02008 pnt[55] = Point(0.03801083585871999800 , 0.95516240551949005000);
02009 pnt[56] = Point(0.95516240551949005000 , 0.00682675862178000040);
02010 pnt[57] = Point(0.03801083585871999800 , 0.00682675862178000040);
02011 pnt[58] = Point(0.95516240551949005000 , 0.03801083585871999800);
02012 pnt[59] = Point(0.00682675862178000040 , 0.95516240551949005000);
02013 pnt[60] = Point(0.01001619963993000000 , 0.15742521848530999000);
02014 pnt[61] = Point(0.15742521848530999000 , 0.83255858187475995000);
02015 pnt[62] = Point(0.83255858187475995000 , 0.01001619963993000000);
02016 pnt[63] = Point(0.15742521848530999000 , 0.01001619963993000000);
02017 pnt[64] = Point(0.83255858187475995000 , 0.15742521848530999000);
02018 pnt[65] = Point(0.01001619963993000000 , 0.83255858187475995000);
02019 pnt[66] = Point(0.02575781317339000100 , 0.23988965977853000000);
02020 pnt[67] = Point(0.23988965977853000000 , 0.73435252704807996000);
02021 pnt[68] = Point(0.73435252704807996000 , 0.02575781317339000100);
02022 pnt[69] = Point(0.23988965977853000000 , 0.02575781317339000100);
02023 pnt[70] = Point(0.73435252704807996000 , 0.23988965977853000000);
02024 pnt[71] = Point(0.02575781317339000100 , 0.73435252704807996000);
02025 pnt[72] = Point(0.03022789811992000100 , 0.36194311812606000000);
02026 pnt[73] = Point(0.36194311812606000000 , 0.60782898375401995000);
02027 pnt[74] = Point(0.60782898375401995000 , 0.03022789811992000100);
02028 pnt[75] = Point(0.36194311812606000000 , 0.03022789811992000100);
02029 pnt[76] = Point(0.60782898375401995000 , 0.36194311812606000000);
02030 pnt[77] = Point(0.03022789811992000100 , 0.60782898375401995000);
02031 pnt[78] = Point(0.03050499010715999900 , 0.08355196095483000100);
02032 pnt[79] = Point(0.08355196095483000100 , 0.88594304893801001000);
02033 pnt[80] = Point(0.88594304893801001000 , 0.03050499010715999900);
02034 pnt[81] = Point(0.08355196095483000100 , 0.03050499010715999900);
02035 pnt[82] = Point(0.88594304893801001000 , 0.08355196095483000100);
02036 pnt[83] = Point(0.03050499010715999900 , 0.88594304893801001000);
02037 pnt[84] = Point(0.04595654736257000200 , 0.14844322073242000000);
02038 pnt[85] = Point(0.14844322073242000000 , 0.80560023190500996000);
02039 pnt[86] = Point(0.80560023190500996000 , 0.04595654736257000200);
02040 pnt[87] = Point(0.14844322073242000000 , 0.04595654736257000200);
02041 pnt[88] = Point(0.80560023190500996000 , 0.14844322073242000000);
02042 pnt[89] = Point(0.04595654736257000200 , 0.80560023190500996000);
02043 pnt[90] = Point(0.06744280054027999800 , 0.28373970872753002000);
02044 pnt[91] = Point(0.28373970872753002000 , 0.64881749073218997000);
02045 pnt[92] = Point(0.64881749073218997000 , 0.06744280054027999800);
02046 pnt[93] = Point(0.28373970872753002000 , 0.06744280054027999800);
02047 pnt[94] = Point(0.64881749073218997000 , 0.28373970872753002000);
02048 pnt[95] = Point(0.06744280054027999800 , 0.64881749073218997000);
02049 pnt[96] = Point(0.07004509141591000500 , 0.40689937511878999000);
02050 pnt[97] = Point(0.40689937511878999000 , 0.52305553346529998000);
02051 pnt[98] = Point(0.52305553346529998000 , 0.07004509141591000500);
02052 pnt[99] = Point(0.40689937511878999000 , 0.07004509141591000500);
02053 pnt[100] = Point(0.52305553346529998000 , 0.40689937511878999000);
02054 pnt[101] = Point(0.07004509141591000500 , 0.52305553346529998000);
02055 pnt[102] = Point(0.08391152464012000000 , 0.19411398702488999000);
02056 pnt[103] = Point(0.19411398702488999000 , 0.72197448833499001000);
02057 pnt[104] = Point(0.72197448833499001000 , 0.08391152464012000000);
02058 pnt[105] = Point(0.19411398702488999000 , 0.08391152464012000000);
02059 pnt[106] = Point(0.72197448833499001000 , 0.19411398702488999000);
02060 pnt[107] = Point(0.08391152464012000000 , 0.72197448833499001000);
02061 pnt[108] = Point(0.12037553567714999000 , 0.32413434700069998000);
02062 pnt[109] = Point(0.32413434700069998000 , 0.55549011732214004000);
02063 pnt[110] = Point(0.55549011732214004000 , 0.12037553567714999000);
02064 pnt[111] = Point(0.32413434700069998000 , 0.12037553567714999000);
02065 pnt[112] = Point(0.55549011732214004000 , 0.32413434700069998000);
02066 pnt[113] = Point(0.12037553567714999000 , 0.55549011732214004000);
02067 pnt[114] = Point(0.14806689915737001000 , 0.22927748355597999000);
02068 pnt[115] = Point(0.22927748355597999000 , 0.62265561728664998000);
02069 pnt[116] = Point(0.62265561728664998000 , 0.14806689915737001000);
02070 pnt[117] = Point(0.22927748355597999000 , 0.14806689915737001000);
02071 pnt[118] = Point(0.62265561728664998000 , 0.22927748355597999000);
02072 pnt[119] = Point(0.14806689915737001000 , 0.62265561728664998000);
02073 pnt[120] = Point(0.19177186586733000000 , 0.32561812259598000000);
02074 pnt[121] = Point(0.32561812259598000000 , 0.48261001153668998000);
02075 pnt[122] = Point(0.48261001153668998000 , 0.19177186586733000000);
02076 pnt[123] = Point(0.32561812259598000000 , 0.19177186586733000000);
02077 pnt[124] = Point(0.48261001153668998000 , 0.32561812259598000000);
02078 pnt[125] = Point(0.19177186586733000000 , 0.48261001153668998000);
02079 weight[0] = 0.00800558188002041710;
02080 weight[1] = 0.00800558188002041710;
02081 weight[2] = 0.00800558188002041710;
02082 weight[3] = 0.01594707683239050100;
02083 weight[4] = 0.01594707683239050100;
02084 weight[5] = 0.01594707683239050100;
02085 weight[6] = 0.01310914123079553000;
02086 weight[7] = 0.01310914123079553000;
02087 weight[8] = 0.01310914123079553000;
02088 weight[9] = 0.01958300096563562000;
02089 weight[10] = 0.01958300096563562000;
02090 weight[11] = 0.01958300096563562000;
02091 weight[12] = 0.01647088544153727000;
02092 weight[13] = 0.01647088544153727000;
02093 weight[14] = 0.01647088544153727000;
02094 weight[15] = 0.00854727907409210020;
02095 weight[16] = 0.00854727907409210020;
02096 weight[17] = 0.00854727907409210020;
02097 weight[18] = 0.00816188585722649180;
02098 weight[19] = 0.00816188585722649180;
02099 weight[20] = 0.00816188585722649180;
02100 weight[21] = 0.00612114653998377910;
02101 weight[22] = 0.00612114653998377910;
02102 weight[23] = 0.00612114653998377910;
02103 weight[24] = 0.00290849826493666490;
02104 weight[25] = 0.00290849826493666490;
02105 weight[26] = 0.00290849826493666490;
02106 weight[27] = 0.00069227524566199629;
02107 weight[28] = 0.00069227524566199629;
02108 weight[29] = 0.00069227524566199629;
02109 weight[30] = 0.00124828919927739700;
02110 weight[31] = 0.00124828919927739700;
02111 weight[32] = 0.00124828919927739700;
02112 weight[33] = 0.00124828919927739700;
02113 weight[34] = 0.00124828919927739700;
02114 weight[35] = 0.00124828919927739700;
02115 weight[36] = 0.00340475290880302200;
02116 weight[37] = 0.00340475290880302200;
02117 weight[38] = 0.00340475290880302200;
02118 weight[39] = 0.00340475290880302200;
02119 weight[40] = 0.00340475290880302200;
02120 weight[41] = 0.00340475290880302200;
02121 weight[42] = 0.00335965432606405090;
02122 weight[43] = 0.00335965432606405090;
02123 weight[44] = 0.00335965432606405090;
02124 weight[45] = 0.00335965432606405090;
02125 weight[46] = 0.00335965432606405090;
02126 weight[47] = 0.00335965432606405090;
02127 weight[48] = 0.00171615653949675410;
02128 weight[49] = 0.00171615653949675410;
02129 weight[50] = 0.00171615653949675410;
02130 weight[51] = 0.00171615653949675410;
02131 weight[52] = 0.00171615653949675410;
02132 weight[53] = 0.00171615653949675410;
02133 weight[54] = 0.00148085631671560600;
02134 weight[55] = 0.00148085631671560600;
02135 weight[56] = 0.00148085631671560600;
02136 weight[57] = 0.00148085631671560600;
02137 weight[58] = 0.00148085631671560600;
02138 weight[59] = 0.00148085631671560600;
02139 weight[60] = 0.00351131261072868500;
02140 weight[61] = 0.00351131261072868500;
02141 weight[62] = 0.00351131261072868500;
02142 weight[63] = 0.00351131261072868500;
02143 weight[64] = 0.00351131261072868500;
02144 weight[65] = 0.00351131261072868500;
02145 weight[66] = 0.00739355014970648380;
02146 weight[67] = 0.00739355014970648380;
02147 weight[68] = 0.00739355014970648380;
02148 weight[69] = 0.00739355014970648380;
02149 weight[70] = 0.00739355014970648380;
02150 weight[71] = 0.00739355014970648380;
02151 weight[72] = 0.00798308747737655820;
02152 weight[73] = 0.00798308747737655820;
02153 weight[74] = 0.00798308747737655820;
02154 weight[75] = 0.00798308747737655820;
02155 weight[76] = 0.00798308747737655820;
02156 weight[77] = 0.00798308747737655820;
02157 weight[78] = 0.00435596261315804140;
02158 weight[79] = 0.00435596261315804140;
02159 weight[80] = 0.00435596261315804140;
02160 weight[81] = 0.00435596261315804140;
02161 weight[82] = 0.00435596261315804140;
02162 weight[83] = 0.00435596261315804140;
02163 weight[84] = 0.00736505670141783180;
02164 weight[85] = 0.00736505670141783180;
02165 weight[86] = 0.00736505670141783180;
02166 weight[87] = 0.00736505670141783180;
02167 weight[88] = 0.00736505670141783180;
02168 weight[89] = 0.00736505670141783180;
02169 weight[90] = 0.01096357284641955000;
02170 weight[91] = 0.01096357284641955000;
02171 weight[92] = 0.01096357284641955000;
02172 weight[93] = 0.01096357284641955000;
02173 weight[94] = 0.01096357284641955000;
02174 weight[95] = 0.01096357284641955000;
02175 weight[96] = 0.01174996174354112100;
02176 weight[97] = 0.01174996174354112100;
02177 weight[98] = 0.01174996174354112100;
02178 weight[99] = 0.01174996174354112100;
02179 weight[100] = 0.01174996174354112100;
02180 weight[101] = 0.01174996174354112100;
02181 weight[102] = 0.01001560071379857000;
02182 weight[103] = 0.01001560071379857000;
02183 weight[104] = 0.01001560071379857000;
02184 weight[105] = 0.01001560071379857000;
02185 weight[106] = 0.01001560071379857000;
02186 weight[107] = 0.01001560071379857000;
02187 weight[108] = 0.01330964078762868000;
02188 weight[109] = 0.01330964078762868000;
02189 weight[110] = 0.01330964078762868000;
02190 weight[111] = 0.01330964078762868000;
02191 weight[112] = 0.01330964078762868000;
02192 weight[113] = 0.01330964078762868000;
02193 weight[114] = 0.01415444650522614000;
02194 weight[115] = 0.01415444650522614000;
02195 weight[116] = 0.01415444650522614000;
02196 weight[117] = 0.01415444650522614000;
02197 weight[118] = 0.01415444650522614000;
02198 weight[119] = 0.01415444650522614000;
02199 weight[120] = 0.01488137956116801000;
02200 weight[121] = 0.01488137956116801000;
02201 weight[122] = 0.01488137956116801000;
02202 weight[123] = 0.01488137956116801000;
02203 weight[124] = 0.01488137956116801000;
02204 weight[125] = 0.01488137956116801000;
02205 } else if (deg<=30) {
02206 pnt.resize(175); weight.resize(175);
02207 pnt[0] = Point(0.33333333333332998000 , 0.33333333333332998000);
02208 pnt[1] = Point(0.00733011643276999980 , 0.49633494178361998000);
02209 pnt[2] = Point(0.49633494178361998000 , 0.49633494178361998000);
02210 pnt[3] = Point(0.49633494178361998000 , 0.00733011643276999980);
02211 pnt[4] = Point(0.08299567580295999500 , 0.45850216209852002000);
02212 pnt[5] = Point(0.45850216209852002000 , 0.45850216209852002000);
02213 pnt[6] = Point(0.45850216209852002000 , 0.08299567580295999500);
02214 pnt[7] = Point(0.15098095612540999000 , 0.42450952193729002000);
02215 pnt[8] = Point(0.42450952193729002000 , 0.42450952193729002000);
02216 pnt[9] = Point(0.42450952193729002000 , 0.15098095612540999000);
02217 pnt[10] = Point(0.23590585989217000000 , 0.38204707005392002000);
02218 pnt[11] = Point(0.38204707005392002000 , 0.38204707005392002000);
02219 pnt[12] = Point(0.38204707005392002000 , 0.23590585989217000000);
02220 pnt[13] = Point(0.43802430840785000000 , 0.28098784579607999000);
02221 pnt[14] = Point(0.28098784579607999000 , 0.28098784579607999000);
02222 pnt[15] = Point(0.28098784579607999000 , 0.43802430840785000000);
02223 pnt[16] = Point(0.54530204829192996000 , 0.22734897585402999000);
02224 pnt[17] = Point(0.22734897585402999000 , 0.22734897585402999000);
02225 pnt[18] = Point(0.22734897585402999000 , 0.54530204829192996000);
02226 pnt[19] = Point(0.65088177698254002000 , 0.17455911150872999000);
02227 pnt[20] = Point(0.17455911150872999000 , 0.17455911150872999000);
02228 pnt[21] = Point(0.17455911150872999000 , 0.65088177698254002000);
02229 pnt[22] = Point(0.75348314559713003000 , 0.12325842720143999000);
02230 pnt[23] = Point(0.12325842720143999000 , 0.12325842720143999000);
02231 pnt[24] = Point(0.12325842720143999000 , 0.75348314559713003000);
02232 pnt[25] = Point(0.83983154221560996000 , 0.08008422889220000200);
02233 pnt[26] = Point(0.08008422889220000200 , 0.08008422889220000200);
02234 pnt[27] = Point(0.08008422889220000200 , 0.83983154221560996000);
02235 pnt[28] = Point(0.90445106518420004000 , 0.04777446740790000000);
02236 pnt[29] = Point(0.04777446740790000000 , 0.04777446740790000000);
02237 pnt[30] = Point(0.04777446740790000000 , 0.90445106518420004000);
02238 pnt[31] = Point(0.95655897063971995000 , 0.02172051468014000000);
02239 pnt[32] = Point(0.02172051468014000000 , 0.02172051468014000000);
02240 pnt[33] = Point(0.02172051468014000000 , 0.95655897063971995000);
02241 pnt[34] = Point(0.99047064476913005000 , 0.00476467761544000030);
02242 pnt[35] = Point(0.00476467761544000030 , 0.00476467761544000030);
02243 pnt[36] = Point(0.00476467761544000030 , 0.99047064476913005000);
02244 pnt[37] = Point(0.00092537119334999999 , 0.41529527091330998000);
02245 pnt[38] = Point(0.41529527091330998000 , 0.58377935789334001000);
02246 pnt[39] = Point(0.58377935789334001000 , 0.00092537119334999999);
02247 pnt[40] = Point(0.41529527091330998000 , 0.00092537119334999999);
02248 pnt[41] = Point(0.58377935789334001000 , 0.41529527091330998000);
02249 pnt[42] = Point(0.00092537119334999999 , 0.58377935789334001000);
02250 pnt[43] = Point(0.00138592585556000010 , 0.06118990978535000100);
02251 pnt[44] = Point(0.06118990978535000100 , 0.93742416435909004000);
02252 pnt[45] = Point(0.93742416435909004000 , 0.00138592585556000010);
02253 pnt[46] = Point(0.06118990978535000100 , 0.00138592585556000010);
02254 pnt[47] = Point(0.93742416435909004000 , 0.06118990978535000100);
02255 pnt[48] = Point(0.00138592585556000010 , 0.93742416435909004000);
02256 pnt[49] = Point(0.00368241545590999990 , 0.16490869013691001000);
02257 pnt[50] = Point(0.16490869013691001000 , 0.83140889440718002000);
02258 pnt[51] = Point(0.83140889440718002000 , 0.00368241545590999990);
02259 pnt[52] = Point(0.16490869013691001000 , 0.00368241545590999990);
02260 pnt[53] = Point(0.83140889440718002000 , 0.16490869013691001000);
02261 pnt[54] = Point(0.00368241545590999990 , 0.83140889440718002000);
02262 pnt[55] = Point(0.00390322342416000000 , 0.02503506223199999900);
02263 pnt[56] = Point(0.02503506223199999900 , 0.97106171434384003000);
02264 pnt[57] = Point(0.97106171434384003000 , 0.00390322342416000000);
02265 pnt[58] = Point(0.02503506223199999900 , 0.00390322342416000000);
02266 pnt[59] = Point(0.97106171434384003000 , 0.02503506223199999900);
02267 pnt[60] = Point(0.00390322342416000000 , 0.97106171434384003000);
02268 pnt[61] = Point(0.00323324815500999980 , 0.30606446515109997000);
02269 pnt[62] = Point(0.30606446515109997000 , 0.69070228669389000000);
02270 pnt[63] = Point(0.69070228669389000000 , 0.00323324815500999980);
02271 pnt[64] = Point(0.30606446515109997000 , 0.00323324815500999980);
02272 pnt[65] = Point(0.69070228669389000000 , 0.30606446515109997000);
02273 pnt[66] = Point(0.00323324815500999980 , 0.69070228669389000000);
02274 pnt[67] = Point(0.00646743211223999980 , 0.10707328373022000000);
02275 pnt[68] = Point(0.10707328373022000000 , 0.88645928415754005000);
02276 pnt[69] = Point(0.88645928415754005000 , 0.00646743211223999980);
02277 pnt[70] = Point(0.10707328373022000000 , 0.00646743211223999980);
02278 pnt[71] = Point(0.88645928415754005000 , 0.10707328373022000000);
02279 pnt[72] = Point(0.00646743211223999980 , 0.88645928415754005000);
02280 pnt[73] = Point(0.00324747549132999980 , 0.22995754934557999000);
02281 pnt[74] = Point(0.22995754934557999000 , 0.76679497516308004000);
02282 pnt[75] = Point(0.76679497516308004000 , 0.00324747549132999980);
02283 pnt[76] = Point(0.22995754934557999000 , 0.00324747549132999980);
02284 pnt[77] = Point(0.76679497516308004000 , 0.22995754934557999000);
02285 pnt[78] = Point(0.00324747549132999980 , 0.76679497516308004000);
02286 pnt[79] = Point(0.00867509080675000000 , 0.33703663330577999000);
02287 pnt[80] = Point(0.33703663330577999000 , 0.65428827588745997000);
02288 pnt[81] = Point(0.65428827588745997000 , 0.00867509080675000000);
02289 pnt[82] = Point(0.33703663330577999000 , 0.00867509080675000000);
02290 pnt[83] = Point(0.65428827588745997000 , 0.33703663330577999000);
02291 pnt[84] = Point(0.00867509080675000000 , 0.65428827588745997000);
02292 pnt[85] = Point(0.01559702646731000000 , 0.05625657618206000200);
02293 pnt[86] = Point(0.05625657618206000200 , 0.92814639735062998000);
02294 pnt[87] = Point(0.92814639735062998000 , 0.01559702646731000000);
02295 pnt[88] = Point(0.05625657618206000200 , 0.01559702646731000000);
02296 pnt[89] = Point(0.92814639735062998000 , 0.05625657618206000200);
02297 pnt[90] = Point(0.01559702646731000000 , 0.92814639735062998000);
02298 pnt[91] = Point(0.01797672125369000100 , 0.40245137521239999000);
02299 pnt[92] = Point(0.40245137521239999000 , 0.57957190353390997000);
02300 pnt[93] = Point(0.57957190353390997000 , 0.01797672125369000100);
02301 pnt[94] = Point(0.40245137521239999000 , 0.01797672125369000100);
02302 pnt[95] = Point(0.57957190353390997000 , 0.40245137521239999000);
02303 pnt[96] = Point(0.01797672125369000100 , 0.57957190353390997000);
02304 pnt[97] = Point(0.01712424535389000000 , 0.24365470201083000000);
02305 pnt[98] = Point(0.24365470201083000000 , 0.73922105263528004000);
02306 pnt[99] = Point(0.73922105263528004000 , 0.01712424535389000000);
02307 pnt[100] = Point(0.24365470201083000000 , 0.01712424535389000000);
02308 pnt[101] = Point(0.73922105263528004000 , 0.24365470201083000000);
02309 pnt[102] = Point(0.01712424535389000000 , 0.73922105263528004000);
02310 pnt[103] = Point(0.02288340534658000000 , 0.16538958561452999000);
02311 pnt[104] = Point(0.16538958561452999000 , 0.81172700903887995000);
02312 pnt[105] = Point(0.81172700903887995000 , 0.02288340534658000000);
02313 pnt[106] = Point(0.16538958561452999000 , 0.02288340534658000000);
02314 pnt[107] = Point(0.81172700903887995000 , 0.16538958561452999000);
02315 pnt[108] = Point(0.02288340534658000000 , 0.81172700903887995000);
02316 pnt[109] = Point(0.03273759728777000200 , 0.09930187449584999800);
02317 pnt[110] = Point(0.09930187449584999800 , 0.86796052821639003000);
02318 pnt[111] = Point(0.86796052821639003000 , 0.03273759728777000200);
02319 pnt[112] = Point(0.09930187449584999800 , 0.03273759728777000200);
02320 pnt[113] = Point(0.86796052821639003000 , 0.09930187449584999800);
02321 pnt[114] = Point(0.03273759728777000200 , 0.86796052821639003000);
02322 pnt[115] = Point(0.03382101234234000100 , 0.30847833306904998000);
02323 pnt[116] = Point(0.30847833306904998000 , 0.65770065458860005000);
02324 pnt[117] = Point(0.65770065458860005000 , 0.03382101234234000100);
02325 pnt[118] = Point(0.30847833306904998000 , 0.03382101234234000100);
02326 pnt[119] = Point(0.65770065458860005000 , 0.30847833306904998000);
02327 pnt[120] = Point(0.03382101234234000100 , 0.65770065458860005000);
02328 pnt[121] = Point(0.03554761446001999900 , 0.46066831859210999000);
02329 pnt[122] = Point(0.46066831859210999000 , 0.50378406694787004000);
02330 pnt[123] = Point(0.50378406694787004000 , 0.03554761446001999900);
02331 pnt[124] = Point(0.46066831859210999000 , 0.03554761446001999900);
02332 pnt[125] = Point(0.50378406694787004000 , 0.46066831859210999000);
02333 pnt[126] = Point(0.03554761446001999900 , 0.50378406694787004000);
02334 pnt[127] = Point(0.05053979030687000300 , 0.21881529945393000000);
02335 pnt[128] = Point(0.21881529945393000000 , 0.73064491023919997000);
02336 pnt[129] = Point(0.73064491023919997000 , 0.05053979030687000300);
02337 pnt[130] = Point(0.21881529945393000000 , 0.05053979030687000300);
02338 pnt[131] = Point(0.73064491023919997000 , 0.21881529945393000000);
02339 pnt[132] = Point(0.05053979030687000300 , 0.73064491023919997000);
02340 pnt[133] = Point(0.05701471491573000000 , 0.37920955156026998000);
02341 pnt[134] = Point(0.37920955156026998000 , 0.56377573352399002000);
02342 pnt[135] = Point(0.56377573352399002000 , 0.05701471491573000000);
02343 pnt[136] = Point(0.37920955156026998000 , 0.05701471491573000000);
02344 pnt[137] = Point(0.56377573352399002000 , 0.37920955156026998000);
02345 pnt[138] = Point(0.05701471491573000000 , 0.56377573352399002000);
02346 pnt[139] = Point(0.06415280642119999800 , 0.14296081941819000000);
02347 pnt[140] = Point(0.14296081941819000000 , 0.79288637416061003000);
02348 pnt[141] = Point(0.79288637416061003000 , 0.06415280642119999800);
02349 pnt[142] = Point(0.14296081941819000000 , 0.06415280642119999800);
02350 pnt[143] = Point(0.79288637416061003000 , 0.14296081941819000000);
02351 pnt[144] = Point(0.06415280642119999800 , 0.79288637416061003000);
02352 pnt[145] = Point(0.08050114828762999800 , 0.28373128210592002000);
02353 pnt[146] = Point(0.28373128210592002000 , 0.63576756960644998000);
02354 pnt[147] = Point(0.63576756960644998000 , 0.08050114828762999800);
02355 pnt[148] = Point(0.28373128210592002000 , 0.08050114828762999800);
02356 pnt[149] = Point(0.63576756960644998000 , 0.28373128210592002000);
02357 pnt[150] = Point(0.08050114828762999800 , 0.63576756960644998000);
02358 pnt[151] = Point(0.10436706813453001000 , 0.19673744100443999000);
02359 pnt[152] = Point(0.19673744100443999000 , 0.69889549086102998000);
02360 pnt[153] = Point(0.69889549086102998000 , 0.10436706813453001000);
02361 pnt[154] = Point(0.19673744100443999000 , 0.10436706813453001000);
02362 pnt[155] = Point(0.69889549086102998000 , 0.19673744100443999000);
02363 pnt[156] = Point(0.10436706813453001000 , 0.69889549086102998000);
02364 pnt[157] = Point(0.11384489442875000000 , 0.35588914121165999000);
02365 pnt[158] = Point(0.35588914121165999000 , 0.53026596435958995000);
02366 pnt[159] = Point(0.53026596435958995000 , 0.11384489442875000000);
02367 pnt[160] = Point(0.35588914121165999000 , 0.11384489442875000000);
02368 pnt[161] = Point(0.53026596435958995000 , 0.35588914121165999000);
02369 pnt[162] = Point(0.11384489442875000000 , 0.53026596435958995000);
02370 pnt[163] = Point(0.14536348771551999000 , 0.25981868535190999000);
02371 pnt[164] = Point(0.25981868535190999000 , 0.59481782693256002000);
02372 pnt[165] = Point(0.59481782693256002000 , 0.14536348771551999000);
02373 pnt[166] = Point(0.25981868535190999000 , 0.14536348771551999000);
02374 pnt[167] = Point(0.59481782693256002000 , 0.25981868535190999000);
02375 pnt[168] = Point(0.14536348771551999000 , 0.59481782693256002000);
02376 pnt[169] = Point(0.18994565282198000000 , 0.32192318123129998000);
02377 pnt[170] = Point(0.32192318123129998000 , 0.48813116594672001000);
02378 pnt[171] = Point(0.48813116594672001000 , 0.18994565282198000000);
02379 pnt[172] = Point(0.32192318123129998000 , 0.18994565282198000000);
02380 pnt[173] = Point(0.48813116594672001000 , 0.32192318123129998000);
02381 pnt[174] = Point(0.18994565282198000000 , 0.48813116594672001000);
02382
02383 weight[0] = 0.01557996020289920000;
02384 weight[1] = 0.00317723370053413400;
02385 weight[2] = 0.00317723370053413400;
02386 weight[3] = 0.00317723370053413400;
02387 weight[4] = 0.01048342663573077100;
02388 weight[5] = 0.01048342663573077100;
02389 weight[6] = 0.01048342663573077100;
02390 weight[7] = 0.01320945957774363000;
02391 weight[8] = 0.01320945957774363000;
02392 weight[9] = 0.01320945957774363000;
02393 weight[10] = 0.01497500696627149900;
02394 weight[11] = 0.01497500696627149900;
02395 weight[12] = 0.01497500696627149900;
02396 weight[13] = 0.01498790444338419000;
02397 weight[14] = 0.01498790444338419000;
02398 weight[15] = 0.01498790444338419000;
02399 weight[16] = 0.01333886474102166000;
02400 weight[17] = 0.01333886474102166000;
02401 weight[18] = 0.01333886474102166000;
02402 weight[19] = 0.01088917111390201100;
02403 weight[20] = 0.01088917111390201100;
02404 weight[21] = 0.01088917111390201100;
02405 weight[22] = 0.00818944066089346070;
02406 weight[23] = 0.00818944066089346070;
02407 weight[24] = 0.00818944066089346070;
02408 weight[25] = 0.00557538758860778510;
02409 weight[26] = 0.00557538758860778510;
02410 weight[27] = 0.00557538758860778510;
02411 weight[28] = 0.00319121647341197600;
02412 weight[29] = 0.00319121647341197600;
02413 weight[30] = 0.00319121647341197600;
02414 weight[31] = 0.00129671514432704500;
02415 weight[32] = 0.00129671514432704500;
02416 weight[33] = 0.00129671514432704500;
02417 weight[34] = 0.00029826282613491719;
02418 weight[35] = 0.00029826282613491719;
02419 weight[36] = 0.00029826282613491719;
02420 weight[37] = 0.00099890568507889641;
02421 weight[38] = 0.00099890568507889641;
02422 weight[39] = 0.00099890568507889641;
02423 weight[40] = 0.00099890568507889641;
02424 weight[41] = 0.00099890568507889641;
02425 weight[42] = 0.00099890568507889641;
02426 weight[43] = 0.00046285084917325331;
02427 weight[44] = 0.00046285084917325331;
02428 weight[45] = 0.00046285084917325331;
02429 weight[46] = 0.00046285084917325331;
02430 weight[47] = 0.00046285084917325331;
02431 weight[48] = 0.00046285084917325331;
02432 weight[49] = 0.00123445133638241290;
02433 weight[50] = 0.00123445133638241290;
02434 weight[51] = 0.00123445133638241290;
02435 weight[52] = 0.00123445133638241290;
02436 weight[53] = 0.00123445133638241290;
02437 weight[54] = 0.00123445133638241290;
02438 weight[55] = 0.00057071985224320615;
02439 weight[56] = 0.00057071985224320615;
02440 weight[57] = 0.00057071985224320615;
02441 weight[58] = 0.00057071985224320615;
02442 weight[59] = 0.00057071985224320615;
02443 weight[60] = 0.00057071985224320615;
02444 weight[61] = 0.00112694612587762410;
02445 weight[62] = 0.00112694612587762410;
02446 weight[63] = 0.00112694612587762410;
02447 weight[64] = 0.00112694612587762410;
02448 weight[65] = 0.00112694612587762410;
02449 weight[66] = 0.00112694612587762410;
02450 weight[67] = 0.00174786694940733710;
02451 weight[68] = 0.00174786694940733710;
02452 weight[69] = 0.00174786694940733710;
02453 weight[70] = 0.00174786694940733710;
02454 weight[71] = 0.00174786694940733710;
02455 weight[72] = 0.00174786694940733710;
02456 weight[73] = 0.00118281881503165690;
02457 weight[74] = 0.00118281881503165690;
02458 weight[75] = 0.00118281881503165690;
02459 weight[76] = 0.00118281881503165690;
02460 weight[77] = 0.00118281881503165690;
02461 weight[78] = 0.00118281881503165690;
02462 weight[79] = 0.00199083929467503380;
02463 weight[80] = 0.00199083929467503380;
02464 weight[81] = 0.00199083929467503380;
02465 weight[82] = 0.00199083929467503380;
02466 weight[83] = 0.00199083929467503380;
02467 weight[84] = 0.00199083929467503380;
02468 weight[85] = 0.00190041279503598000;
02469 weight[86] = 0.00190041279503598000;
02470 weight[87] = 0.00190041279503598000;
02471 weight[88] = 0.00190041279503598000;
02472 weight[89] = 0.00190041279503598000;
02473 weight[90] = 0.00190041279503598000;
02474 weight[91] = 0.00449836580881745120;
02475 weight[92] = 0.00449836580881745120;
02476 weight[93] = 0.00449836580881745120;
02477 weight[94] = 0.00449836580881745120;
02478 weight[95] = 0.00449836580881745120;
02479 weight[96] = 0.00449836580881745120;
02480 weight[97] = 0.00347871946027471890;
02481 weight[98] = 0.00347871946027471890;
02482 weight[99] = 0.00347871946027471890;
02483 weight[100] = 0.00347871946027471890;
02484 weight[101] = 0.00347871946027471890;
02485 weight[102] = 0.00347871946027471890;
02486 weight[103] = 0.00410239903672395340;
02487 weight[104] = 0.00410239903672395340;
02488 weight[105] = 0.00410239903672395340;
02489 weight[106] = 0.00410239903672395340;
02490 weight[107] = 0.00410239903672395340;
02491 weight[108] = 0.00410239903672395340;
02492 weight[109] = 0.00402176154974416210;
02493 weight[110] = 0.00402176154974416210;
02494 weight[111] = 0.00402176154974416210;
02495 weight[112] = 0.00402176154974416210;
02496 weight[113] = 0.00402176154974416210;
02497 weight[114] = 0.00402176154974416210;
02498 weight[115] = 0.00603316466079506590;
02499 weight[116] = 0.00603316466079506590;
02500 weight[117] = 0.00603316466079506590;
02501 weight[118] = 0.00603316466079506590;
02502 weight[119] = 0.00603316466079506590;
02503 weight[120] = 0.00603316466079506590;
02504 weight[121] = 0.00394629030212959810;
02505 weight[122] = 0.00394629030212959810;
02506 weight[123] = 0.00394629030212959810;
02507 weight[124] = 0.00394629030212959810;
02508 weight[125] = 0.00394629030212959810;
02509 weight[126] = 0.00394629030212959810;
02510 weight[127] = 0.00664404453768026840;
02511 weight[128] = 0.00664404453768026840;
02512 weight[129] = 0.00664404453768026840;
02513 weight[130] = 0.00664404453768026840;
02514 weight[131] = 0.00664404453768026840;
02515 weight[132] = 0.00664404453768026840;
02516 weight[133] = 0.00825430585607845810;
02517 weight[134] = 0.00825430585607845810;
02518 weight[135] = 0.00825430585607845810;
02519 weight[136] = 0.00825430585607845810;
02520 weight[137] = 0.00825430585607845810;
02521 weight[138] = 0.00825430585607845810;
02522 weight[139] = 0.00649605663340641070;
02523 weight[140] = 0.00649605663340641070;
02524 weight[141] = 0.00649605663340641070;
02525 weight[142] = 0.00649605663340641070;
02526 weight[143] = 0.00649605663340641070;
02527 weight[144] = 0.00649605663340641070;
02528 weight[145] = 0.00925277814414660230;
02529 weight[146] = 0.00925277814414660230;
02530 weight[147] = 0.00925277814414660230;
02531 weight[148] = 0.00925277814414660230;
02532 weight[149] = 0.00925277814414660230;
02533 weight[150] = 0.00925277814414660230;
02534 weight[151] = 0.00916492072629427990;
02535 weight[152] = 0.00916492072629427990;
02536 weight[153] = 0.00916492072629427990;
02537 weight[154] = 0.00916492072629427990;
02538 weight[155] = 0.00916492072629427990;
02539 weight[156] = 0.00916492072629427990;
02540 weight[157] = 0.01156952462809767100;
02541 weight[158] = 0.01156952462809767100;
02542 weight[159] = 0.01156952462809767100;
02543 weight[160] = 0.01156952462809767100;
02544 weight[161] = 0.01156952462809767100;
02545 weight[162] = 0.01156952462809767100;
02546 weight[163] = 0.01176111646760917000;
02547 weight[164] = 0.01176111646760917000;
02548 weight[165] = 0.01176111646760917000;
02549 weight[166] = 0.01176111646760917000;
02550 weight[167] = 0.01176111646760917000;
02551 weight[168] = 0.01176111646760917000;
02552 weight[169] = 0.01382470218216540000;
02553 weight[170] = 0.01382470218216540000;
02554 weight[171] = 0.01382470218216540000;
02555 weight[172] = 0.01382470218216540000;
02556 weight[173] = 0.01382470218216540000;
02557 weight[174] = 0.01382470218216540000;
02558 }
02559 else {
02560
02561 TEUCHOS_TEST_FOR_EXCEPTION( true , std::runtime_error , " GaussLobattoQuadrature::getTriangleQuadPoints order of the quadrature to high !!! ");
02562 }
02563 }