GaussQuadRule1d01.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.3 $
00022 // $Date: 2003/02/14 23:01:17 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/nonlinearBeamColumn/quadrule/GaussQuadRule1d01.cpp,v $
00024                                                                         
00025                                                                         
00026 // written: rms
00027 // Created: 12/98
00028 //
00029 // Description: This file contains the implementation of 
00030 // GaussQuadRule1d01 (Quadrature Rule,0).
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     // One point
00069     ptsArray[0] = 0.0;
00070     
00071     wtsArray[0] = 2.0;
00072 
00073     // Two points
00074     ptsArray[1] = -0.577350269189626;
00075     ptsArray[2] =  0.577350269189626;
00076     
00077     wtsArray[1] = 1.0;
00078     wtsArray[2] = 1.0;
00079 
00080     // Three points
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     // Four points
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     // Five points
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     // Six points
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     // Seven points
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     // Eight points
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     // Nine points
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     // Ten points
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   // Nothing to do
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   // Nothing needs to change if this is true
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 

Generated on Mon Oct 23 15:05:09 2006 for OpenSees by doxygen 1.5.0