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 #include <LegendreBeamIntegration.h>
00026
00027 LegendreBeamIntegration::LegendreBeamIntegration():
00028 BeamIntegration(BEAM_INTEGRATION_TAG_Legendre)
00029 {
00030
00031 }
00032
00033 LegendreBeamIntegration::~LegendreBeamIntegration()
00034 {
00035
00036 }
00037
00038 BeamIntegration*
00039 LegendreBeamIntegration::getCopy(void)
00040 {
00041 return new LegendreBeamIntegration();
00042 }
00043
00044 void
00045 LegendreBeamIntegration::getSectionLocations(int numSections, double L,
00046 double *xi)
00047 {
00048 switch(numSections) {
00049
00050 case 1:
00051 xi[0] = 0.0;
00052 break;
00053
00054 case 2:
00055 xi[0] = -0.577350269189626;
00056 xi[1] = 0.577350269189626;
00057 break;
00058
00059 case 3:
00060 xi[0] = -0.774596669241483;
00061 xi[1] = 0.0;
00062 xi[2] = 0.774596669241483;
00063 break;
00064
00065 case 4:
00066 xi[0] = -0.861136311594053;
00067 xi[1] = -0.339981043584856;
00068 xi[2] = 0.339981043584856;
00069 xi[3] = 0.861136311594053;
00070 break;
00071
00072 case 5:
00073 xi[0] = -0.906179845938664;
00074 xi[1] = -0.538469310105683;
00075 xi[2] = 0.0;
00076 xi[3] = 0.538469310105683;
00077 xi[4] = 0.906179845938664;
00078 break;
00079
00080 case 6:
00081 xi[0] = -0.932469514203152;
00082 xi[1] = -0.661209386466265;
00083 xi[2] = -0.238619186083197;
00084 xi[3] = 0.238619186083197;
00085 xi[4] = 0.661209386466265;
00086 xi[5] = 0.932469514203152;
00087 break;
00088
00089 case 7:
00090 xi[0] = -0.949107912342759;
00091 xi[1] = -0.741531185599394;
00092 xi[2] = -0.405845151377397;
00093 xi[3] = 0.0;
00094 xi[4] = 0.405845151377397;
00095 xi[5] = 0.741531185599394;
00096 xi[6] = 0.949107912342759;
00097 break;
00098
00099 case 8:
00100 xi[0] = -0.960289856497536;
00101 xi[1] = -0.796666477413627;
00102 xi[2] = -0.525532409916329;
00103 xi[3] = -0.183434642495650;
00104 xi[4] = 0.183434642495650;
00105 xi[5] = 0.525532409916329;
00106 xi[6] = 0.796666477413627;
00107 xi[7] = 0.960289856497536;
00108 break;
00109
00110 case 9:
00111 xi[0] = -0.968160239507626;
00112 xi[1] = -0.836031107326636;
00113 xi[2] = -0.613371432700590;
00114 xi[3] = -0.324253423403809;
00115 xi[4] = 0.0;
00116 xi[5] = 0.324253423403809;
00117 xi[6] = 0.613371432700590;
00118 xi[7] = 0.836031107326636;
00119 xi[8] = 0.968160239507626;
00120 break;
00121
00122 case 10:
00123 xi[0] = -0.973906528517172;
00124 xi[1] = -0.865063366688985;
00125 xi[2] = -0.679409568299024;
00126 xi[3] = -0.433395394129247;
00127 xi[4] = -0.148874338981631;
00128 xi[5] = 0.148874338981631;
00129 xi[6] = 0.433395394129247;
00130 xi[7] = 0.679409568299024;
00131 xi[8] = 0.865063366688985;
00132 xi[9] = 0.973906528517172;
00133 break;
00134
00135 default:
00136 break;
00137 }
00138
00139 for (int i = 0; i < numSections; i++)
00140 xi[i] = 0.5*(xi[i] + 1.0);
00141 }
00142
00143 void
00144 LegendreBeamIntegration::getSectionWeights(int numSections, double L,
00145 double *wt)
00146 {
00147 switch (numSections) {
00148
00149 case 1:
00150 wt[0] = 2.0;
00151 break;
00152
00153 case 2:
00154 wt[0] = 1.0;
00155 wt[1] = 1.0;
00156 break;
00157
00158 case 3:
00159 wt[0] = 0.555555555555556;
00160 wt[1] = 0.888888888888889;
00161 wt[2] = 0.555555555555556;
00162 break;
00163
00164 case 4:
00165 wt[0] = 0.347854845137454;
00166 wt[1] = 0.652145154862546;
00167 wt[2] = 0.652145154862546;
00168 wt[3] = 0.347854845137454;
00169 break;
00170
00171 case 5:
00172 wt[0] = 0.236926885056189;
00173 wt[1] = 0.478628670499366;
00174 wt[2] = 0.568888888888889;
00175 wt[3] = 0.478628670499366;
00176 wt[4] = 0.236926885056189;
00177 break;
00178
00179 case 6:
00180 wt[0] = 0.171324492379170;
00181 wt[1] = 0.360761573048139;
00182 wt[2] = 0.467913934572691;
00183 wt[3] = 0.467913934572691;
00184 wt[4] = 0.360761573048139;
00185 wt[5] = 0.171324492379170;
00186 break;
00187
00188 case 7:
00189 wt[0] = 0.129484966168870;
00190 wt[1] = 0.279705391489277;
00191 wt[2] = 0.381830050505119;
00192 wt[3] = 0.417959183673469;
00193 wt[4] = 0.381830050505119;
00194 wt[5] = 0.279705391489277;
00195 wt[6] = 0.129484966168870;
00196 break;
00197
00198 case 8:
00199 wt[0] = 0.101228536290376;
00200 wt[1] = 0.222381034453374;
00201 wt[2] = 0.313706645877887;
00202 wt[3] = 0.362683783378362;
00203 wt[4] = 0.362683783378362;
00204 wt[5] = 0.313706645877887;
00205 wt[6] = 0.222381034453374;
00206 wt[7] = 0.101228536290376;
00207 break;
00208
00209 case 9:
00210 wt[0] = 0.081274388361574;
00211 wt[1] = 0.180648160694857;
00212 wt[2] = 0.260610696402935;
00213 wt[3] = 0.312347077040003;
00214 wt[4] = 0.330239355001260;
00215 wt[5] = 0.312347077040003;
00216 wt[6] = 0.260610696402935;
00217 wt[7] = 0.180648160694857;
00218 wt[8] = 0.081274388361574;
00219 break;
00220
00221 case 10:
00222 wt[0] = 0.066671344308688;
00223 wt[1] = 0.149451349150581;
00224 wt[2] = 0.219086362515982;
00225 wt[3] = 0.269266719309996;
00226 wt[4] = 0.295524224714753;
00227 wt[5] = 0.295524224714753;
00228 wt[6] = 0.269266719309996;
00229 wt[7] = 0.219086362515982;
00230 wt[8] = 0.149451349150581;
00231 wt[9] = 0.066671344308688;
00232 break;
00233
00234 default:
00235 break;
00236 }
00237
00238 for (int i = 0; i < numSections; i++)
00239 wt[i] *= 0.5;
00240 }
00241
00242 void
00243 LegendreBeamIntegration::Print(OPS_Stream &s, int flag)
00244 {
00245 s << "Legendre" << endln;
00246 }