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 <LobattoBeamIntegration.h>
00026
00027 LobattoBeamIntegration::LobattoBeamIntegration():
00028 BeamIntegration(BEAM_INTEGRATION_TAG_Lobatto)
00029 {
00030
00031 }
00032
00033 LobattoBeamIntegration::~LobattoBeamIntegration()
00034 {
00035
00036 }
00037
00038 BeamIntegration*
00039 LobattoBeamIntegration::getCopy(void)
00040 {
00041 return new LobattoBeamIntegration();
00042 }
00043
00044 void
00045 LobattoBeamIntegration::getSectionLocations(int numSections, double L,
00046 double *xi)
00047 {
00048 switch(numSections) {
00049
00050 case 2:
00051 xi[0] = -1.0;
00052 xi[1] = 1.0;
00053 break;
00054
00055 case 3:
00056 xi[0] = -1.0;
00057 xi[1] = 0.0;
00058 xi[2] = 1.0;
00059 break;
00060
00061 case 4:
00062 xi[0] = -1.0;
00063 xi[1] = -0.44721360;
00064 xi[2] = 0.44721360;
00065 xi[3] = 1.0;
00066 break;
00067
00068 case 5:
00069 xi[0] = -1.0;
00070 xi[1] = -0.65465367;
00071 xi[2] = 0.0;
00072 xi[3] = 0.65465367;
00073 xi[4] = 1.0;
00074 break;
00075
00076 case 6:
00077 xi[0] = -1.0;
00078 xi[1] = -0.7650553239;
00079 xi[2] = -0.2852315164;
00080 xi[3] = 0.2852315164;
00081 xi[4] = 0.7650553239;
00082 xi[5] = 1.0;
00083 break;
00084
00085 case 7:
00086 xi[0] = -1.0;
00087 xi[1] = -0.8302238962;
00088 xi[2] = -0.4688487934;
00089 xi[3] = 0.0;
00090 xi[4] = 0.4688487934;
00091 xi[5] = 0.8302238962;
00092 xi[6] = 1.0;
00093 break;
00094
00095 case 8:
00096 xi[0] = -1.0;
00097 xi[1] = -0.8717401485;
00098 xi[2] = -0.5917001814;
00099 xi[3] = -0.2092992179;
00100 xi[4] = 0.2092992179;
00101 xi[5] = 0.5917001814;
00102 xi[6] = 0.8717401485;
00103 xi[7] = 1.0;
00104 break;
00105
00106 case 9:
00107 xi[0] = -1.0;
00108 xi[1] = -0.8997579954;
00109 xi[2] = -0.6771862795;
00110 xi[3] = -0.3631174638;
00111 xi[4] = 0.0;
00112 xi[5] = 0.3631174638;
00113 xi[6] = 0.6771862795;
00114 xi[7] = 0.8997579954;
00115 xi[8] = 1.0;
00116 break;
00117
00118 case 10:
00119 xi[0] = -1.0;
00120 xi[1] = -0.9195339082;
00121 xi[2] = -0.7387738651;
00122 xi[3] = -0.4779249498;
00123 xi[4] = -0.1652789577;
00124 xi[5] = 0.1652789577;
00125 xi[6] = 0.4779249498;
00126 xi[7] = 0.7387738651;
00127 xi[8] = 0.9195339082;
00128 xi[9] = 1.0;
00129 break;
00130 }
00131
00132 for (int i = 0; i < numSections; i++)
00133 xi[i] = 0.5*(xi[i] + 1.0);
00134 }
00135
00136 void
00137 LobattoBeamIntegration::getSectionWeights(int numSections, double L,
00138 double *wt)
00139 {
00140 switch (numSections) {
00141
00142 case 2:
00143 wt[0] = 1.0;
00144 wt[1] = 1.0;
00145 break;
00146
00147 case 3:
00148 wt[0] = 0.333333333333333;
00149 wt[1] = 1.333333333333333;
00150 wt[2] = 0.333333333333333;
00151 break;
00152
00153 case 4:
00154 wt[0] = 0.166666666666667;
00155 wt[1] = 0.833333333333333;
00156 wt[2] = 0.833333333333333;
00157 wt[3] = 0.166666666666667;
00158 break;
00159
00160 case 5:
00161 wt[0] = 0.1;
00162 wt[1] = 0.5444444444;
00163 wt[2] = 0.7111111111;
00164 wt[3] = 0.5444444444;
00165 wt[4] = 0.1;
00166 break;
00167
00168 case 6:
00169 wt[0] = 0.06666666667;
00170 wt[1] = 0.3784749562;
00171 wt[2] = 0.5548583770;
00172 wt[3] = 0.5548583770;
00173 wt[4] = 0.3784749562;
00174 wt[5] = 0.06666666667;
00175 break;
00176
00177 case 7:
00178 wt[0] = 0.04761904762;
00179 wt[1] = 0.2768260473;
00180 wt[2] = 0.4317453812;
00181 wt[3] = 0.4876190476;
00182 wt[4] = 0.4317453812;
00183 wt[5] = 0.2768260473;
00184 wt[6] = 0.04761904762;
00185 break;
00186
00187 case 8:
00188 wt[0] = 0.03571428571;
00189 wt[1] = 0.2107042271;
00190 wt[2] = 0.3411226924;
00191 wt[3] = 0.4124587946;
00192 wt[4] = 0.4124587946;
00193 wt[5] = 0.3411226924;
00194 wt[6] = 0.2107042271;
00195 wt[7] = 0.03571428571;
00196 break;
00197
00198 case 9:
00199 wt[0] = 0.02777777778;
00200 wt[1] = 0.1654953615;
00201 wt[2] = 0.2745387125;
00202 wt[3] = 0.3464285109;
00203 wt[4] = 0.3715192743;
00204 wt[5] = 0.3464285109;
00205 wt[6] = 0.2745387125;
00206 wt[7] = 0.1654953615;
00207 wt[8] = 0.02777777778;
00208 break;
00209
00210 case 10:
00211 wt[0] = 0.02222222222;
00212 wt[1] = 0.1333059908;
00213 wt[2] = 0.2248893421;
00214 wt[3] = 0.2920426836;
00215 wt[4] = 0.3275397611;
00216 wt[5] = 0.3275397611;
00217 wt[6] = 0.2920426836;
00218 wt[7] = 0.2248893421;
00219 wt[8] = 0.1333059908;
00220 wt[9] = 0.02222222222;
00221 break;
00222 }
00223
00224 for (int i = 0; i < numSections; i++)
00225 wt[i] *= 0.5;
00226 }
00227
00228 void
00229 LobattoBeamIntegration::Print(OPS_Stream &s, int flag)
00230 {
00231 s << "Lobatto" << endln;
00232 }