00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <Vector.h>
00033 #include <Matrix.h>
00034
00035 #include <GaussQuadRule1d01.h>
00036
00037 bool GaussQuadRule1d01::dataSet = false;
00038
00039 double GaussQuadRule1d01::ptsArray[maxOrder*(maxOrder+1)/2];
00040 double GaussQuadRule1d01::wtsArray[maxOrder*(maxOrder+1)/2];
00041
00042 Matrix GaussQuadRule1d01::pts1 ( ptsArray, 1, 1);
00043 Matrix GaussQuadRule1d01::pts2 (&ptsArray[1], 2, 1);
00044 Matrix GaussQuadRule1d01::pts3 (&ptsArray[3], 3, 1);
00045 Matrix GaussQuadRule1d01::pts4 (&ptsArray[6], 4, 1);
00046 Matrix GaussQuadRule1d01::pts5 (&ptsArray[10], 5, 1);
00047 Matrix GaussQuadRule1d01::pts6 (&ptsArray[15], 6, 1);
00048 Matrix GaussQuadRule1d01::pts7 (&ptsArray[21], 7, 1);
00049 Matrix GaussQuadRule1d01::pts8 (&ptsArray[28], 8, 1);
00050 Matrix GaussQuadRule1d01::pts9 (&ptsArray[36], 9, 1);
00051 Matrix GaussQuadRule1d01::pts10(&ptsArray[45], 10, 1);
00052
00053 Vector GaussQuadRule1d01::wts1 ( wtsArray, 1);
00054 Vector GaussQuadRule1d01::wts2 (&wtsArray[1], 2);
00055 Vector GaussQuadRule1d01::wts3 (&wtsArray[3], 3);
00056 Vector GaussQuadRule1d01::wts4 (&wtsArray[6], 4);
00057 Vector GaussQuadRule1d01::wts5 (&wtsArray[10], 5);
00058 Vector GaussQuadRule1d01::wts6 (&wtsArray[15], 6);
00059 Vector GaussQuadRule1d01::wts7 (&wtsArray[21], 7);
00060 Vector GaussQuadRule1d01::wts8 (&wtsArray[28], 8);
00061 Vector GaussQuadRule1d01::wts9 (&wtsArray[36], 9);
00062 Vector GaussQuadRule1d01::wts10(&wtsArray[45], 10);
00063
00064 GaussQuadRule1d01::GaussQuadRule1d01()
00065 :order(0), myPts(0), myWts(0)
00066 {
00067 if (dataSet == false) {
00068
00069 ptsArray[0] = 0.0;
00070
00071 wtsArray[0] = 2.0;
00072
00073
00074 ptsArray[1] = -0.577350269189626;
00075 ptsArray[2] = 0.577350269189626;
00076
00077 wtsArray[1] = 1.0;
00078 wtsArray[2] = 1.0;
00079
00080
00081 ptsArray[3] = -0.774596669241483;
00082 ptsArray[4] = 0.0;
00083 ptsArray[5] = 0.774596669241483;
00084
00085 wtsArray[3] = 0.555555555555556;
00086 wtsArray[4] = 0.888888888888889;
00087 wtsArray[5] = 0.555555555555556;
00088
00089
00090 ptsArray[6] = -0.861136311594053;
00091 ptsArray[7] = -0.339981043584856;
00092 ptsArray[8] = 0.339981043584856;
00093 ptsArray[9] = 0.861136311594053;
00094
00095 wtsArray[6] = 0.347854845137454;
00096 wtsArray[7] = 0.652145154862546;
00097 wtsArray[8] = 0.652145154862546;
00098 wtsArray[9] = 0.347854845137454;
00099
00100
00101 ptsArray[10] = -0.906179845938664;
00102 ptsArray[11] = -0.538469310105683;
00103 ptsArray[12] = 0.0;
00104 ptsArray[13] = 0.538469310105683;
00105 ptsArray[14] = 0.906179845938664;
00106
00107 wtsArray[10] = 0.236926885056189;
00108 wtsArray[11] = 0.478628670499366;
00109 wtsArray[12] = 0.568888888888889;
00110 wtsArray[13] = 0.478628670499366;
00111 wtsArray[14] = 0.236926885056189;
00112
00113
00114 ptsArray[15] = -0.932469514203152;
00115 ptsArray[16] = -0.661209386466265;
00116 ptsArray[17] = -0.238619186083197;
00117 ptsArray[18] = 0.238619186083197;
00118 ptsArray[19] = 0.661209386466265;
00119 ptsArray[20] = 0.932469514203152;
00120
00121 wtsArray[15] = 0.171324492379170;
00122 wtsArray[16] = 0.360761573048139;
00123 wtsArray[17] = 0.467913934572691;
00124 wtsArray[18] = 0.467913934572691;
00125 wtsArray[19] = 0.360761573048139;
00126 wtsArray[20] = 0.171324492379170;
00127
00128
00129 ptsArray[21] = -0.949107912342759;
00130 ptsArray[22] = -0.741531185599394;
00131 ptsArray[23] = -0.405845151377397;
00132 ptsArray[24] = 0.0;
00133 ptsArray[25] = 0.405845151377397;
00134 ptsArray[26] = 0.741531185599394;
00135 ptsArray[27] = 0.949107912342759;
00136
00137 wtsArray[21] = 0.129484966168870;
00138 wtsArray[22] = 0.279705391489277;
00139 wtsArray[23] = 0.381830050505119;
00140 wtsArray[24] = 0.417959183673469;
00141 wtsArray[25] = 0.381830050505119;
00142 wtsArray[26] = 0.279705391489277;
00143 wtsArray[27] = 0.129484966168870;
00144
00145
00146 ptsArray[28] = -0.960289856497536;
00147 ptsArray[29] = -0.796666477413627;
00148 ptsArray[30] = -0.525532409916329;
00149 ptsArray[31] = -0.183434642495650;
00150 ptsArray[32] = 0.183434642495650;
00151 ptsArray[33] = 0.525532409916329;
00152 ptsArray[34] = 0.796666477413627;
00153 ptsArray[35] = 0.960289856497536;
00154
00155 wtsArray[28] = 0.101228536290376;
00156 wtsArray[29] = 0.222381034453374;
00157 wtsArray[30] = 0.313706645877887;
00158 wtsArray[31] = 0.362683783378362;
00159 wtsArray[32] = 0.362683783378362;
00160 wtsArray[33] = 0.313706645877887;
00161 wtsArray[34] = 0.222381034453374;
00162 wtsArray[35] = 0.101228536290376;
00163
00164
00165 ptsArray[36] = -0.968160239507626;
00166 ptsArray[37] = -0.836031107326636;
00167 ptsArray[38] = -0.613371432700590;
00168 ptsArray[39] = -0.324253423403809;
00169 ptsArray[40] = 0.0;
00170 ptsArray[41] = 0.324253423403809;
00171 ptsArray[42] = 0.613371432700590;
00172 ptsArray[43] = 0.836031107326636;
00173 ptsArray[44] = 0.968160239507626;
00174
00175 wtsArray[36] = 0.081274388361574;
00176 wtsArray[37] = 0.180648160694857;
00177 wtsArray[38] = 0.260610696402935;
00178 wtsArray[39] = 0.312347077040003;
00179 wtsArray[40] = 0.330239355001260;
00180 wtsArray[41] = 0.312347077040003;
00181 wtsArray[42] = 0.260610696402935;
00182 wtsArray[43] = 0.180648160694857;
00183 wtsArray[44] = 0.081274388361574;
00184
00185
00186 ptsArray[45] = -0.973906528517172;
00187 ptsArray[46] = -0.865063366688985;
00188 ptsArray[47] = -0.679409568299024;
00189 ptsArray[48] = -0.433395394129247;
00190 ptsArray[49] = -0.148874338981631;
00191 ptsArray[50] = 0.148874338981631;
00192 ptsArray[51] = 0.433395394129247;
00193 ptsArray[52] = 0.679409568299024;
00194 ptsArray[53] = 0.865063366688985;
00195 ptsArray[54] = 0.973906528517172;
00196
00197 wtsArray[45] = 0.066671344308688;
00198 wtsArray[46] = 0.149451349150581;
00199 wtsArray[47] = 0.219086362515982;
00200 wtsArray[48] = 0.269266719309996;
00201 wtsArray[49] = 0.295524224714753;
00202 wtsArray[50] = 0.295524224714753;
00203 wtsArray[51] = 0.269266719309996;
00204 wtsArray[52] = 0.219086362515982;
00205 wtsArray[53] = 0.149451349150581;
00206 wtsArray[54] = 0.066671344308688;
00207
00208 for (int i = 0; i < 55; i++) {
00209 ptsArray[i] = 0.5*(ptsArray[i] + 1.0);
00210 wtsArray[i] *= 0.5;
00211 }
00212
00213 dataSet = true;
00214 }
00215 }
00216
00217 GaussQuadRule1d01::~GaussQuadRule1d01()
00218 {
00219
00220 }
00221
00222
00223 int GaussQuadRule1d01::setOrder(int quadOrder)
00224 {
00225 if (quadOrder < 1 || quadOrder > maxOrder) {
00226 opserr << "GaussQuadRule1d01::setOrder() -- Invalid quadrature order, " << quadOrder << endln;
00227 return -1;
00228 }
00229
00230
00231 if (order == quadOrder)
00232 return 0;
00233
00234 order = quadOrder;
00235
00236 switch (order) {
00237 case 1:
00238 myPts = &pts1;
00239 myWts = &wts1;
00240 break;
00241
00242 case 2:
00243 myPts = &pts2;
00244 myWts = &wts2;
00245 break;
00246
00247 case 3:
00248 myPts = &pts3;
00249 myWts = &wts3;
00250 break;
00251
00252 case 4:
00253 myPts = &pts4;
00254 myWts = &wts4;
00255 break;
00256
00257 case 5:
00258 myPts = &pts5;
00259 myWts = &wts5;
00260 break;
00261
00262 case 6:
00263 myPts = &pts6;
00264 myWts = &wts6;
00265 break;
00266
00267 case 7:
00268 myPts = &pts7;
00269 myWts = &wts7;
00270 break;
00271
00272 case 8:
00273 myPts = &pts8;
00274 myWts = &wts8;
00275 break;
00276
00277 case 9:
00278 myPts = &pts9;
00279 myWts = &wts9;
00280 break;
00281
00282 case 10:
00283 myPts = &pts10;
00284 myWts = &wts10;
00285 break;
00286
00287 default:
00288 opserr <<"GaussQuadRule1d01::setOrder() -- Invalid quadrature order " << order << endln;
00289 return -1;
00290 break;
00291 }
00292
00293 return 0;
00294 }
00295
00296 int GaussQuadRule1d01::getOrder (void) const
00297 {
00298 return order;
00299 }
00300
00301 int GaussQuadRule1d01::getNumIntegrPoints (void) const
00302 {
00303 return order;
00304 }
00305
00306 const Matrix &
00307 GaussQuadRule1d01::getIntegrPointCoords (void) const
00308 {
00309 if (order < 1 || order > maxOrder)
00310 opserr << "GaussQuadRule1d01::getIntegrPointWeights() -- order " << order << " is currently invalid\n";
00311
00312 return *myPts;
00313 }
00314
00315 const Vector &
00316 GaussQuadRule1d01::getIntegrPointWeights (void) const
00317 {
00318 if (order < 1 || order > maxOrder)
00319 opserr << "GaussQuadRule1d01::getIntegrPointWeights() -- order " << order << " is currently invalid\n";
00320
00321 return *myWts;
00322 }
00323
00324 const Matrix &
00325 GaussQuadRule1d01::getIntegrPointCoords (int quadOrder)
00326 {
00327 if (order != quadOrder)
00328 this->setOrder(quadOrder);
00329
00330 return *myPts;
00331 }
00332
00333 const Vector &
00334 GaussQuadRule1d01::getIntegrPointWeights (int quadOrder)
00335 {
00336 if (order != quadOrder)
00337 this->setOrder(quadOrder);
00338
00339 return *myWts;
00340 }
00341