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 <NewtonCotesBeamIntegration.h>
00026
00027 NewtonCotesBeamIntegration::NewtonCotesBeamIntegration():
00028 BeamIntegration(BEAM_INTEGRATION_TAG_NewtonCotes)
00029 {
00030
00031 }
00032
00033 NewtonCotesBeamIntegration::~NewtonCotesBeamIntegration()
00034 {
00035
00036 }
00037
00038 BeamIntegration*
00039 NewtonCotesBeamIntegration::getCopy(void)
00040 {
00041 return new NewtonCotesBeamIntegration();
00042 }
00043
00044 void
00045 NewtonCotesBeamIntegration::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.3333333333;
00064 xi[2] = 0.3333333333;
00065 xi[3] = 1.0;
00066 break;
00067
00068 case 5:
00069 xi[0] = -1.0;
00070 xi[1] = -0.5;
00071 xi[2] = 0.0;
00072 xi[3] = 0.5;
00073 xi[4] = 1.0;
00074 break;
00075
00076 case 6:
00077 xi[0] = -1.0;
00078 xi[1] = -0.6;
00079 xi[2] = -0.2;
00080 xi[3] = 0.2;
00081 xi[4] = 0.6;
00082 xi[5] = 1.0;
00083 break;
00084
00085 case 7:
00086 xi[0] = -1.0;
00087 xi[1] = -0.6666666667;
00088 xi[2] = -0.3333333333;
00089 xi[3] = 0.0;
00090 xi[4] = 0.3333333333;
00091 xi[5] = 0.6666666667;
00092 xi[6] = 1.0;
00093 break;
00094
00095 case 8:
00096 xi[0] = -1.0;
00097 xi[1] = -0.7142857143;
00098 xi[2] = -0.4285714286;
00099 xi[3] = -0.1428571429;
00100 xi[4] = 0.1428571429;
00101 xi[5] = 0.4285714286;
00102 xi[6] = 0.7142857143;
00103 xi[7] = 1.0;
00104 break;
00105
00106 case 9:
00107 xi[0] = -1.0;
00108 xi[1] = -0.75;
00109 xi[2] = -0.5;
00110 xi[3] = -0.25;
00111 xi[4] = 0.0;
00112 xi[5] = 0.25;
00113 xi[6] = 0.5;
00114 xi[7] = 0.75;
00115 xi[8] = 1.0;
00116 break;
00117
00118 case 10:
00119 xi[0] = -1.0;
00120 xi[1] = -0.7777777778;
00121 xi[2] = -0.5555555556;
00122 xi[3] = -0.3333333333;
00123 xi[4] = -0.1111111111;
00124 xi[5] = 0.1111111111;
00125 xi[6] = 0.3333333333;
00126 xi[7] = 0.5555555556;
00127 xi[8] = 0.77777777778;
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 NewtonCotesBeamIntegration::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.25;
00155 wt[1] = 0.75;
00156 wt[2] = 0.75;
00157 wt[3] = 0.25;
00158 break;
00159
00160 case 5:
00161 wt[0] = 0.1555555556;
00162 wt[1] = 0.7111111111;
00163 wt[2] = 0.2666666667;
00164 wt[3] = 0.7111111111;
00165 wt[4] = 0.1555555556;
00166 break;
00167
00168 case 6:
00169 wt[0] = 0.1319444444;
00170 wt[1] = 0.5208333333;
00171 wt[2] = 0.3472222222;
00172 wt[3] = 0.3472222222;
00173 wt[4] = 0.5208333333;
00174 wt[5] = 0.1319444444;
00175 break;
00176
00177 case 7:
00178 wt[0] = 0.09761904762;
00179 wt[1] = 0.5142857143;
00180 wt[2] = 0.06428571429;
00181 wt[3] = 0.6476190476;
00182 wt[4] = 0.06428571429;
00183 wt[5] = 0.5142857143;
00184 wt[6] = 0.09761904762;
00185 break;
00186
00187 case 8:
00188 wt[0] = 0.0869212963;
00189 wt[1] = 0.4140046296;
00190 wt[2] = 0.153125;
00191 wt[3] = 0.3459490741;
00192 wt[4] = 0.3459490741;
00193 wt[5] = 0.153125;
00194 wt[6] = 0.4140046296;
00195 wt[7] = 0.0869212963;
00196 break;
00197
00198 case 9:
00199 wt[0] = 0.0697707231;
00200 wt[1] = 0.4153791887;
00201 wt[2] = -0.06546737213;
00202 wt[3] = 0.7404585538;
00203 wt[4] = -0.3202821869;
00204 wt[5] = 0.7404585538;
00205 wt[6] = -0.06546737213;
00206 wt[7] = 0.4153791887;
00207 wt[8] = 0.0697707231;
00208 break;
00209
00210 case 10:
00211 wt[0] = 0.06377232143;
00212 wt[1] = 0.3513616071;
00213 wt[2] = 0.02410714286;
00214 wt[3] = 0.4317857143;
00215 wt[4] = 0.1289732143;
00216 wt[5] = 0.1289732143;
00217 wt[6] = 0.4317857143;
00218 wt[7] = 0.02410714286;
00219 wt[8] = 0.3513616071;
00220 wt[9] = 0.06377232143;
00221 break;
00222 }
00223
00224 for (int i = 0; i < numSections; i++)
00225 wt[i] *= 0.5;
00226 }
00227
00228 void
00229 NewtonCotesBeamIntegration::Print(OPS_Stream &s, int flag)
00230 {
00231 s << "NewtonCotes" << endln;
00232 }