GaussLobattoQuadRule1d01.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.4 $
00022 // $Date: 2003/04/02 22:02:39 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/nonlinearBeamColumn/quadrule/GaussLobattoQuadRule1d01.cpp,v $
00024                                                                         
00025                                                                         
00026 // written: rms
00027 // Created: 12/98
00028 //
00029 // Description: This file contains the implementation of 
00030 // GaussLobattoQuadRule1d01 (Quadrature Rule,0).
00031 
00032 #include <stdlib.h>
00033 
00034 #include <Vector.h>
00035 #include <Matrix.h>
00036 
00037 #include <GaussLobattoQuadRule1d01.h>
00038 
00039 bool GaussLobattoQuadRule1d01::dataSet = false;
00040 
00041 double GaussLobattoQuadRule1d01::ptsArray[maxOrder*(maxOrder+1)/2];
00042 double GaussLobattoQuadRule1d01::wtsArray[maxOrder*(maxOrder+1)/2];
00043 
00044 Matrix GaussLobattoQuadRule1d01::pts2 (&ptsArray[1],  2,  1);
00045 Matrix GaussLobattoQuadRule1d01::pts3 (&ptsArray[3],  3,  1);
00046 Matrix GaussLobattoQuadRule1d01::pts4 (&ptsArray[6],  4,  1);
00047 Matrix GaussLobattoQuadRule1d01::pts5 (&ptsArray[10], 5,  1);
00048 Matrix GaussLobattoQuadRule1d01::pts6 (&ptsArray[15], 6,  1);
00049 Matrix GaussLobattoQuadRule1d01::pts7 (&ptsArray[21], 7,  1);
00050 Matrix GaussLobattoQuadRule1d01::pts8 (&ptsArray[28], 8,  1);
00051 Matrix GaussLobattoQuadRule1d01::pts9 (&ptsArray[36], 9,  1);
00052 Matrix GaussLobattoQuadRule1d01::pts10(&ptsArray[45], 10, 1);
00053 
00054 Vector GaussLobattoQuadRule1d01::wts2 (&wtsArray[1],  2);
00055 Vector GaussLobattoQuadRule1d01::wts3 (&wtsArray[3],  3);
00056 Vector GaussLobattoQuadRule1d01::wts4 (&wtsArray[6],  4);
00057 Vector GaussLobattoQuadRule1d01::wts5 (&wtsArray[10], 5);
00058 Vector GaussLobattoQuadRule1d01::wts6 (&wtsArray[15], 6);
00059 Vector GaussLobattoQuadRule1d01::wts7 (&wtsArray[21], 7);
00060 Vector GaussLobattoQuadRule1d01::wts8 (&wtsArray[28], 8);
00061 Vector GaussLobattoQuadRule1d01::wts9 (&wtsArray[36], 9);
00062 Vector GaussLobattoQuadRule1d01::wts10(&wtsArray[45], 10);
00063 
00064 GaussLobattoQuadRule1d01::GaussLobattoQuadRule1d01()
00065   :order(0), myPts(0), myWts(0)
00066 {
00067   if (dataSet == false) {
00068 
00069     // Not used!!!
00070     ptsArray[0] = 0.0;
00071     wtsArray[0] = 2.0;
00072 
00073     // Two points
00074     ptsArray[1] = -1.0;
00075     ptsArray[2] =  1.0;
00076     
00077     wtsArray[1] = 1.0;
00078     wtsArray[2] = 1.0;
00079 
00080     // Three points
00081     ptsArray[3] = -1.0;
00082     ptsArray[4] =  0.0;
00083     ptsArray[5] =  1.0;
00084     
00085     wtsArray[3] = 0.333333333333333;
00086     wtsArray[4] = 1.333333333333333;
00087     wtsArray[5] = 0.333333333333333;
00088 
00089     // Four points
00090     ptsArray[6] = -1.0;
00091     ptsArray[7] = -0.44721360;
00092     ptsArray[8] =  0.44721360;
00093     ptsArray[9] =  1.0;
00094     
00095     wtsArray[6] = 0.166666666666667;
00096     wtsArray[7] = 0.833333333333333;
00097     wtsArray[8] = 0.833333333333333;
00098     wtsArray[9] = 0.166666666666667;
00099       
00100     // Five points
00101     ptsArray[10] = -1.0;
00102     ptsArray[11] = -0.65465367;
00103     ptsArray[12] =  0.0;
00104     ptsArray[13] =  0.65465367;
00105     ptsArray[14] =  1.0;
00106     
00107     wtsArray[10] = 0.1;
00108     wtsArray[11] = 0.5444444444;
00109     wtsArray[12] = 0.7111111111;
00110     wtsArray[13] = 0.5444444444;
00111     wtsArray[14] = 0.1;
00112 
00113     // Six points
00114     ptsArray[15] = -1.0;
00115     ptsArray[16] = -0.7650553239;
00116     ptsArray[17] = -0.2852315164;
00117     ptsArray[18] =  0.2852315164;
00118     ptsArray[19] =  0.7650553239;
00119     ptsArray[20] =  1.0;
00120     
00121     wtsArray[15] = 0.06666666667;
00122     wtsArray[16] = 0.3784749562;
00123     wtsArray[17] = 0.5548583770;
00124     wtsArray[18] = 0.5548583770;
00125     wtsArray[19] = 0.3784749562;
00126     wtsArray[20] = 0.06666666667;
00127 
00128     // Seven points
00129     ptsArray[21] = -1.0;
00130     ptsArray[22] = -0.8302238962;
00131     ptsArray[23] = -0.4688487934;
00132     ptsArray[24] =  0.0;
00133     ptsArray[25] =  0.4688487934;
00134     ptsArray[26] =  0.8302238962;
00135     ptsArray[27] =  1.0;
00136     
00137     wtsArray[21] = 0.04761904762;
00138     wtsArray[22] = 0.2768260473;
00139     wtsArray[23] = 0.4317453812;
00140     wtsArray[24] = 0.4876190476;
00141     wtsArray[25] = 0.4317453812;
00142     wtsArray[26] = 0.2768260473;
00143     wtsArray[27] = 0.04761904762;
00144 
00145     // Eight points
00146     ptsArray[28] = -1.0;
00147     ptsArray[29] = -0.8717401485;
00148     ptsArray[30] = -0.5917001814;
00149     ptsArray[31] = -0.2092992179;
00150     ptsArray[32] =  0.2092992179;
00151     ptsArray[33] =  0.5917001814;
00152     ptsArray[34] =  0.8717401485;
00153     ptsArray[35] =  1.0;
00154     
00155     wtsArray[28] = 0.03571428571;
00156     wtsArray[29] = 0.2107042271;
00157     wtsArray[30] = 0.3411226924;
00158     wtsArray[31] = 0.4124587946;
00159     wtsArray[32] = 0.4124587946;
00160     wtsArray[33] = 0.3411226924;
00161     wtsArray[34] = 0.2107042271;
00162     wtsArray[35] = 0.03571428571;
00163       
00164     // Nine points
00165     ptsArray[36] = -1.0;
00166     ptsArray[37] = -0.8997579954;
00167     ptsArray[38] = -0.6771862795;
00168     ptsArray[39] = -0.3631174638;
00169     ptsArray[40] =  0.0;
00170     ptsArray[41] =  0.3631174638;
00171     ptsArray[42] =  0.6771862795;
00172     ptsArray[43] =  0.8997579954;
00173     ptsArray[44] =  1.0;
00174     
00175     wtsArray[36] = 0.02777777778;
00176     wtsArray[37] = 0.1654953615;
00177     wtsArray[38] = 0.2745387125;
00178     wtsArray[39] = 0.3464285109;
00179     wtsArray[40] = 0.3715192743;
00180     wtsArray[41] = 0.3464285109;
00181     wtsArray[42] = 0.2745387125;
00182     wtsArray[43] = 0.1654953615;
00183     wtsArray[44] = 0.02777777778;
00184 
00185     // Ten points
00186     ptsArray[45] = -1.0;
00187     ptsArray[46] = -0.9195339082;
00188     ptsArray[47] = -0.7387738651;
00189     ptsArray[48] = -0.4779249498;
00190     ptsArray[49] = -0.1652789577;
00191     ptsArray[50] =  0.1652789577;
00192     ptsArray[51] =  0.4779249498;
00193     ptsArray[52] =  0.7387738651;
00194     ptsArray[53] =  0.9195339082;
00195     ptsArray[54] =  1.0;
00196     
00197     wtsArray[45] = 0.02222222222;
00198     wtsArray[46] = 0.1333059908;
00199     wtsArray[47] = 0.2248893421;
00200     wtsArray[48] = 0.2920426836;
00201     wtsArray[49] = 0.3275397611;
00202     wtsArray[50] = 0.3275397611;
00203     wtsArray[51] = 0.2920426836;
00204     wtsArray[52] = 0.2248893421;
00205     wtsArray[53] = 0.1333059908;
00206     wtsArray[54] = 0.02222222222;
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 GaussLobattoQuadRule1d01::~GaussLobattoQuadRule1d01()
00218 {
00219   // Nothing to do
00220 }
00221 
00222 
00223 int GaussLobattoQuadRule1d01::setOrder(int quadOrder)
00224 {
00225   if (quadOrder < 2 || quadOrder > maxOrder) {
00226     opserr << "GaussLobattoQuadRule1d01::setOrder() -- Invalid quadrature order, " << quadOrder << endln;
00227     exit(-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 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 << "\n Invalid quadrature order";
00284     return -1;
00285     break;
00286   }    
00287 
00288   return 0;
00289 }
00290 
00291 int GaussLobattoQuadRule1d01::getOrder (void) const
00292 {
00293   return order;
00294 }
00295 
00296 int GaussLobattoQuadRule1d01::getNumIntegrPoints (void) const
00297 {
00298   return order;
00299 }
00300 
00301 const Matrix & 
00302 GaussLobattoQuadRule1d01::getIntegrPointCoords (void) const
00303 {
00304   if (order < 2 || order > maxOrder)
00305     opserr << "GaussLobattoQuadRule1d01::getIntegrPointWeights() -- order " << order <<  " is currently invalid\n";
00306 
00307   return *myPts;
00308 }
00309 
00310 const Vector & 
00311 GaussLobattoQuadRule1d01::getIntegrPointWeights (void) const
00312 {
00313   if (order < 2 || order > maxOrder)
00314    opserr << "GaussLobattoQuadRule1d01::getIntegrPointWeights() -- order " << order <<  " is currently invalid\n";
00315                             
00316   return *myWts;
00317 }
00318 
00319 const Matrix & 
00320 GaussLobattoQuadRule1d01::getIntegrPointCoords (int quadOrder)
00321 {
00322   if (order != quadOrder)
00323     this->setOrder(quadOrder);
00324 
00325   return *myPts;
00326 }
00327 
00328 const Vector & 
00329 GaussLobattoQuadRule1d01::getIntegrPointWeights (int quadOrder)
00330 {
00331   if (order != quadOrder)
00332     this->setOrder(quadOrder);
00333 
00334   return *myWts;
00335 }

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