RadauBeamIntegration.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.2 $
00022 // $Date: 2006/08/22 19:05:36 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/element/forceBeamColumn/RadauBeamIntegration.cpp,v $
00024 
00025 #include <RadauBeamIntegration.h>
00026 #include <math.h>
00027 
00028 RadauBeamIntegration::RadauBeamIntegration():
00029   BeamIntegration(BEAM_INTEGRATION_TAG_Radau)
00030 {
00031   // Nothing to do
00032 }
00033 
00034 RadauBeamIntegration::~RadauBeamIntegration()
00035 {
00036   // Nothing to do
00037 }
00038 
00039 BeamIntegration*
00040 RadauBeamIntegration::getCopy(void)
00041 {
00042   return new RadauBeamIntegration();
00043 }
00044 
00045 #ifdef _WIN32
00046 
00047 extern "C" int GAUSSQ(int *kind, int *n, double *alpha, double *beta,
00048                                int *kpts, double *endpts, double *b,
00049                                double *t, double *w);
00050 
00051 #define gaussq_ GAUSSQ
00052 
00053 #else
00054 
00055 extern "C" int gaussq_(int *kind, int *n, double *alpha, double *beta,
00056                        int *kpts, double *endpts, double *b,
00057                        double *t, double *w);
00058 
00059 #endif
00060 
00061 void
00062 RadauBeamIntegration::getSectionLocations(int numSections, double L,
00063                                           double *xi)
00064 {
00065   switch(numSections) {
00066 
00067   case 1:
00068     xi[0] = -1.0;
00069     break;
00070     
00071   case 2:
00072     xi[0] = -1.0;
00073     xi[1] =  0.3333333333;
00074     break;
00075     
00076   case 3:
00077     xi[0] = -1.0;
00078     xi[1] = -0.2898979485;
00079     xi[2] =  0.6898979485;
00080     break;
00081     
00082   case 4:
00083     xi[0] = -1.0;
00084     xi[1] = -0.5753189235;
00085     xi[2] =  0.1810662711;
00086     xi[3] =  0.8228240809;
00087     break;
00088     
00089   case 5:
00090     xi[0] = -1.0;
00091     xi[1] = -0.7204802713;
00092     xi[2] = -0.1671808647;
00093     xi[3] =  0.4463139727;
00094     xi[4] =  0.8857916077;
00095     break;  
00096   
00097   case 6:
00098     xi[0] = -1.0;
00099     xi[1] = -0.8029298284;
00100     xi[2] = -0.3909285467;
00101     xi[3] =  0.1240503795;
00102     xi[4] =  0.6039731642;
00103     xi[5] =  0.9203802858;
00104     break;
00105 
00106   case 7:
00107     xi[0] = -1.0;
00108     xi[1] = -0.8538913426;
00109     xi[2] = -0.5384677240;
00110     xi[3] = -0.1173430375;
00111     xi[4] =  0.3260306194;
00112     xi[5] =  0.7038428006;
00113     xi[6] =  0.9413671456;
00114     break;
00115 
00116   case 8:
00117     xi[0] = -1.0;
00118     xi[1] = -0.8874748789;
00119     xi[2] = -0.6395186165;
00120     xi[3] = -0.2947505657;
00121     xi[4] =  0.09430725266;
00122     xi[5] =  0.4684203544;
00123     xi[6] =  0.7706418936;
00124     xi[7] =  0.9550412271;
00125     break;
00126 
00127   case 9:
00128     xi[0] = -1.0;
00129     xi[1] = -0.9107320894;
00130     xi[2] = -0.7112674859;
00131     xi[3] = -0.4263504857;
00132     xi[4] = -0.09037336960;
00133     xi[5] =  0.2561356708;
00134     xi[6] =  0.5713830412;
00135     xi[7] =  0.8173527842;
00136     xi[8] =  0.9644401697;
00137     break;
00138 
00139   case 10:
00140     xi[0] = -1.0;
00141     xi[1] = -0.9274843742;
00142     xi[2] = -0.7638420424;
00143     xi[3] = -0.5256460303;
00144     xi[4] = -0.2362344693;
00145     xi[5] =  0.07605919783;
00146     xi[6] =  0.3806648401;
00147     xi[7] =  0.6477666876;
00148     xi[8] =  0.8512252205;
00149     xi[9] =  0.9711751807;
00150     break;
00151 
00152   default:
00153     break;
00154   }
00155 
00156   for (int i = 0; i < numSections; i++)
00157     xi[i]  = 0.5*(xi[i] + 1.0);
00158 }
00159 
00160 void
00161 RadauBeamIntegration::getSectionWeights(int numSections, double L,
00162                                         double *wt)
00163 {
00164   switch (numSections) {
00165     
00166   case 1:
00167     wt[0] = 2.0;
00168     break;
00169 
00170   case 2:
00171     wt[0] = 0.5;
00172     wt[1] = 1.5;
00173     break;
00174     
00175   case 3:
00176     wt[0] = 0.2222222222;
00177     wt[1] = 1.024971652;
00178     wt[2] = 0.7528061254;
00179     break;
00180     
00181   case 4:
00182     wt[0] = 0.125;
00183     wt[1] = 0.6576886399;
00184     wt[2] = 0.7763869376;
00185     wt[3] = 0.4409244223;
00186     break;
00187     
00188   case 5:
00189     wt[0] = 0.08;
00190     wt[1] = 0.4462078021;
00191     wt[2] = 0.6236530459;
00192     wt[3] = 0.5627120302;
00193     wt[4] = 0.2874271215;
00194     break;
00195 
00196   case 6:
00197     wt[0] = 0.05555555555;
00198     wt[1] = 0.3196407532;
00199     wt[2] = 0.4853871884;
00200     wt[3] = 0.5209267831;
00201     wt[4] = 0.4169013343;
00202     wt[5] = 0.2015883852;
00203     break;
00204 
00205   case 7:
00206     wt[0] = 0.04081632653;
00207     wt[1] = 0.2392274892;
00208     wt[2] = 0.3809498736;
00209     wt[3] = 0.4471098290;
00210     wt[4] = 0.4247037790;
00211     wt[5] = 0.3182042314;
00212     wt[6] = 0.1489884711;
00213     break;
00214 
00215   case 8:
00216     wt[0] = 0.03125;
00217     wt[1] = 0.1853581548;
00218     wt[2] = 0.3041306206;
00219     wt[3] = 0.3765175453;
00220     wt[4] = 0.3915721674;
00221     wt[5] = 0.3470147956;
00222     wt[6] = 0.2496479013;
00223     wt[7] = 0.1145088147;
00224     break;
00225 
00226   case 9:
00227     wt[0] = 0.02469135802;
00228     wt[1] = 0.1476540190;
00229     wt[2] = 0.2471893782;
00230     wt[3] = 0.3168437756;
00231     wt[4] = 0.3482730027;
00232     wt[5] = 0.3376939669;
00233     wt[6] = 0.2863866963;
00234     wt[7] = 0.2005532980;
00235     wt[8] = 0.09071450492;
00236     break;
00237 
00238   case 10:
00239     wt[0] = 0.02;
00240     wt[1] = 0.1202966705;
00241     wt[2] = 0.2042701318;
00242     wt[3] = 0.2681948378;
00243     wt[4] = 0.3058592877;
00244     wt[5] = 0.3135824572;
00245     wt[6] = 0.2906101648;
00246     wt[7] = 0.2391934317;
00247     wt[8] = 0.1643760127;
00248     wt[9] = 0.07361700548;
00249     break;
00250 
00251   default:
00252     break;
00253   }
00254   
00255   for (int i = 0; i < numSections; i++)
00256     wt[i] *= 0.5;
00257 }
00258 
00259 void
00260 RadauBeamIntegration::Print(OPS_Stream &s, int flag)
00261 {
00262   s << "Radau" << endln;
00263 }

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