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 #include <stdlib.h>
00032 #include <Vector.h>
00033 #include <Matrix.h>
00034
00035 #include <GaussQuadRule1d.h>
00036
00037 bool GaussQuadRule1d::dataSet = false;
00038
00039 double GaussQuadRule1d::ptsArray[maxOrder*(maxOrder+1)/2];
00040 double GaussQuadRule1d::wtsArray[maxOrder*(maxOrder+1)/2];
00041
00042 Matrix GaussQuadRule1d::pts1 ( ptsArray, 1, 1);
00043 Matrix GaussQuadRule1d::pts2 (&ptsArray[1], 2, 1);
00044 Matrix GaussQuadRule1d::pts3 (&ptsArray[3], 3, 1);
00045 Matrix GaussQuadRule1d::pts4 (&ptsArray[6], 4, 1);
00046 Matrix GaussQuadRule1d::pts5 (&ptsArray[10], 5, 1);
00047 Matrix GaussQuadRule1d::pts6 (&ptsArray[15], 6, 1);
00048 Matrix GaussQuadRule1d::pts7 (&ptsArray[21], 7, 1);
00049 Matrix GaussQuadRule1d::pts8 (&ptsArray[28], 8, 1);
00050 Matrix GaussQuadRule1d::pts9 (&ptsArray[36], 9, 1);
00051 Matrix GaussQuadRule1d::pts10(&ptsArray[45], 10, 1);
00052
00053 Vector GaussQuadRule1d::wts1 ( wtsArray, 1);
00054 Vector GaussQuadRule1d::wts2 (&wtsArray[1], 2);
00055 Vector GaussQuadRule1d::wts3 (&wtsArray[3], 3);
00056 Vector GaussQuadRule1d::wts4 (&wtsArray[6], 4);
00057 Vector GaussQuadRule1d::wts5 (&wtsArray[10], 5);
00058 Vector GaussQuadRule1d::wts6 (&wtsArray[15], 6);
00059 Vector GaussQuadRule1d::wts7 (&wtsArray[21], 7);
00060 Vector GaussQuadRule1d::wts8 (&wtsArray[28], 8);
00061 Vector GaussQuadRule1d::wts9 (&wtsArray[36], 9);
00062 Vector GaussQuadRule1d::wts10(&wtsArray[45], 10);
00063
00064 GaussQuadRule1d::GaussQuadRule1d()
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 dataSet = true;
00209 }
00210 }
00211
00212 GaussQuadRule1d::~GaussQuadRule1d()
00213 {
00214
00215 }
00216
00217
00218 int GaussQuadRule1d::setOrder(int quadOrder)
00219 {
00220 if (quadOrder < 1 || quadOrder > maxOrder) {
00221 opserr << "GaussQuadRule1d::setOrder() -- Invalid quadrature order " << quadOrder << endln;
00222 exit(-1);
00223 }
00224
00225
00226 if (order == quadOrder)
00227 return 0;
00228
00229 order = quadOrder;
00230
00231 switch (order) {
00232 case 1:
00233 myPts = &pts1;
00234 myWts = &wts1;
00235 break;
00236
00237 case 2:
00238 myPts = &pts2;
00239 myWts = &wts2;
00240 break;
00241
00242 case 3:
00243 myPts = &pts3;
00244 myWts = &wts3;
00245 break;
00246
00247 case 4:
00248 myPts = &pts4;
00249 myWts = &wts4;
00250 break;
00251
00252 case 5:
00253 myPts = &pts5;
00254 myWts = &wts5;
00255 break;
00256
00257 case 6:
00258 myPts = &pts6;
00259 myWts = &wts6;
00260 break;
00261
00262 case 7:
00263 myPts = &pts7;
00264 myWts = &wts7;
00265 break;
00266
00267 case 8:
00268 myPts = &pts8;
00269 myWts = &wts8;
00270 break;
00271
00272 case 9:
00273 myPts = &pts9;
00274 myWts = &wts9;
00275 break;
00276
00277 case 10:
00278 myPts = &pts10;
00279 myWts = &wts10;
00280 break;
00281
00282 default:
00283 opserr << "GaussQuadRule1d::setOrder() -- Invalid quadrature order " << order << endln;
00284 return -1;
00285 break;
00286 }
00287
00288 return 0;
00289 }
00290
00291 int GaussQuadRule1d::getOrder (void) const
00292 {
00293 return order;
00294 }
00295
00296 int GaussQuadRule1d::getNumIntegrPoints (void) const
00297 {
00298 return order;
00299 }
00300
00301 const Matrix &
00302 GaussQuadRule1d::getIntegrPointCoords (void) const
00303 {
00304 if (order < 1 || order > maxOrder)
00305 opserr << "GaussQuadRule1d::getIntegrPointWeights() -- order " << order << " is currently invalid\n";
00306
00307 return *myPts;
00308 }
00309
00310 const Vector &
00311 GaussQuadRule1d::getIntegrPointWeights (void) const
00312 {
00313 if (order < 1 || order > maxOrder)
00314 opserr << "GaussQuadRule1d::getIntegrPointWeights() -- order " << order << " is currently invalid\n";
00315
00316 return *myWts;
00317 }
00318
00319 const Matrix &
00320 GaussQuadRule1d::getIntegrPointCoords (int quadOrder)
00321 {
00322 if (order != quadOrder)
00323 this->setOrder(quadOrder);
00324
00325 return *myPts;
00326 }
00327
00328 const Vector &
00329 GaussQuadRule1d::getIntegrPointWeights (int quadOrder)
00330 {
00331 if (order != quadOrder)
00332 this->setOrder(quadOrder);
00333
00334 return *myWts;
00335 }