$extrastylesheet
00001 // The libMesh Finite Element Library. 00002 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 00003 00004 // This library is free software; you can redistribute it and/or 00005 // modify it under the terms of the GNU Lesser General Public 00006 // License as published by the Free Software Foundation; either 00007 // version 2.1 of the License, or (at your option) any later version. 00008 00009 // This library is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 // Lesser General Public License for more details. 00013 00014 // You should have received a copy of the GNU Lesser General Public 00015 // License along with this library; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 00018 00019 // Local Includes 00020 #include "libmesh/libmesh_config.h" 00021 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 00022 #include "libmesh/inf_fe.h" 00023 00024 namespace libMesh 00025 { 00026 00027 // Anonymous namespace for local helper functions 00028 namespace { 00029 00030 Real jacobi_20_00_eval(Real v, unsigned i) 00031 { 00032 libmesh_assert (-1.-1.e-5 <= v && v < 1.); 00033 00034 switch (i) 00035 { 00036 case 0: 00037 return 1.; 00038 00039 case 1: 00040 return 2.+2.*v; 00041 00042 case 2: 00043 return -1.25+ 00044 (2.5+3.75*v)*v; 00045 00046 case 3: 00047 return .25+ 00048 (-1.5+ 00049 (5.25+7.*v)*v)*v; 00050 00051 case 4: 00052 return -.875+ 00053 (-3.5+ 00054 (-5.25+ 00055 (10.5+13.125*v)*v)*v)*v; 00056 00057 case 5: 00058 return 1.625+ 00059 (1.25+ 00060 (-11.25+ 00061 (-15.+ 00062 (20.625+24.75*v)*v)*v)*v)*v; 00063 00064 case 6: 00065 return -1.078125+(4.21875+ 00066 (6.328125+ 00067 (-30.9375+ 00068 (-38.671875+ 00069 (40.21875+46.921875*v)*v)*v)*v)*v)*v; 00070 00071 case 7: 00072 return .453125+(-1.09375+ 00073 (18.046875+ 00074 (24.0625+ 00075 (-78.203125+ 00076 (-93.84375+ 00077 (78.203125+89.375*v)*v)*v)*v)*v)*v)*v; 00078 00079 case 8: 00080 return -.9453125+(-4.8125+ 00081 (-7.21875+ 00082 (62.5625+ 00083 (78.203125+ 00084 (-187.6875+ 00085 (-218.96875+ 00086 (151.9375+170.9296875*v)*v)*v)*v)*v)*v)*v)*v; 00087 00088 case 9: 00089 return 1.4921875+(.984375+ 00090 (-25.59375+ 00091 (-34.125+ 00092 (191.953125+ 00093 (230.34375+ 00094 (-435.09375+ 00095 (-497.25+ 00096 (295.2421875+328.046875*v)*v)*v)*v)*v)*v)*v)*v)*v; 00097 00098 case 10: 00099 return -1.041015625+(5.33203125+ 00100 (7.998046875+ 00101 (-106.640625+ 00102 (-133.30078125+ 00103 (543.8671875+ 00104 (634.51171875+ 00105 (-984.140625+ 00106 (-1107.158203125+ 00107 (574.08203125+631.490234375*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00108 00109 case 11: 00110 return .548828125+(-.90234375+ 00111 (33.837890625+ 00112 (45.1171875+ 00113 (-383.49609375+ 00114 (-460.1953125+ 00115 (1457.28515625+ 00116 (1665.46875+ 00117 (-2185.927734375+ 00118 (-2428.80859375+ 00119 (1117.251953125+1218.8203125*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00120 00121 case 12: 00122 return -.9677734375+ 00123 (-5.80078125+ 00124 (-8.701171875+ 00125 (164.35546875+ 00126 (205.4443359375+ 00127 (-1249.1015625+ 00128 (-1457.28515625+ 00129 (3747.3046875+ 00130 (4215.7177734375+ 00131 (-4788.22265625+ 00132 (-5267.044921875+ 00133 (2176.46484375+2357.8369140625*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00134 00135 case 13: 00136 return 1.418945312499432+ 00137 (.837890625+ 00138 (-42.732421875+ 00139 (-56.9765625+ 00140 (676.5966796875+ 00141 (811.9160156249999+ 00142 (-3788.94140625+ 00143 (-4330.21875+ 00144 (9337.0341796875+ 00145 (10374.482421875+ 00146 (-10374.482421875+ 00147 (-11317.6171875+ 00148 (4244.1064453125+4570.576171875*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00149 00150 case 14: 00151 return -1.02618408203125+ 00152 (6.2318115234375+ 00153 (9.34771728515625+ 00154 (-236.808837890625+ 00155 (-296.0110473632813+ 00156 (2486.492797851563+ 00157 (2900.908264160156+ 00158 (-10893.20654296875+ 00159 (-12254.85736083984+ 00160 (22694.18029785156+ 00161 (24963.59832763672+ 00162 (-22281.55883789063+ 00163 (-24138.35540771484+ 00164 (8284.169311523438+8875.895690917969*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00165 00166 case 15: 00167 return .60723876953125+ 00168 (-.7855224609375+ 00169 (52.23724365234375+ 00170 (69.649658203125+ 00171 (-1096.982116699219+ 00172 (-1316.378540039063+ 00173 (8410.196228027344+ 00174 (9611.65283203125+ 00175 (-30036.41510009766+ 00176 (-33373.79455566406+ 00177 (54065.54718017578+ 00178 (58980.59692382813+ 00179 (-47512.14752197266+ 00180 (-51166.92810058594+ 00181 (16185.45684814453+17264.4873046875*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00182 00183 case 16: 00184 return -.978179931640625+ 00185 (-6.63330078125+ 00186 (-9.949951171875+ 00187 (325.03173828125+ 00188 (406.2896728515625+ 00189 (-4485.43798828125+ 00190 (-5233.010986328125+ 00191 (26699.03564453125+ 00192 (30036.41510009766+ 00193 (-80097.10693359375+ 00194 (-88106.81762695313+ 00195 (126699.0600585938+ 00196 (137257.3150634766+ 00197 (-100709.5092773438+ 00198 (-107903.0456542969+ 00199 (31651.56005859375+33629.78256225586*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00200 00201 case 17: 00202 return 1.370941162109141+ 00203 (.74188232421875+ 00204 (-62.31811523437499+ 00205 (-83.0908203125+ 00206 (1672.202758789063+ 00207 (2006.643310546875+ 00208 (-16722.02758789063+ 00209 (-19110.888671875+ 00210 (80624.06158447266+ 00211 (89582.29064941406+ 00212 (-207830.9143066406+ 00213 (-226724.6337890625+ 00214 (292852.6519775391+ 00215 (315379.7790527344+ 00216 (-212398.6267089844+ 00217 (-226558.53515625+ 00218 (61949.5994567871+65593.69354248047*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00219 00220 case 18: 00221 return -1.018547058106322+ 00222 (7.010787963867187+ 00223 (10.51618194580078+ 00224 (-429.9949951171874+ 00225 (-537.4937438964844+ 00226 (7524.91241455078+ 00227 (8779.064483642578+ 00228 (-58049.32434082031+ 00229 (-65305.48988342284+ 00230 (233809.7785949707+ 00231 (257190.7564544677+ 00232 (-527134.7735595703+ 00233 (-571062.6713562012+ 00234 (669055.6741333008+ 00235 (716845.3651428223+ 00236 (-446037.1160888671+ 00237 (-473914.4358444213+ 00238 (121348.3330535889+128089.9071121216*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00239 00240 00241 default: 00242 libmesh_error_msg("bad index i = " << i); 00243 } 00244 00245 libmesh_error_msg("We'll never get here!"); 00246 return 0.; 00247 } // jacobi_20_00_eval() 00248 00249 00250 00251 00252 00253 Real jacobi_20_00_eval_deriv(Real v, unsigned i) 00254 { 00255 libmesh_assert (-1.-1.e-5 <= v && v < 1.); 00256 00257 switch (i) 00258 { 00259 case 0: 00260 return 0.; 00261 00262 case 1: 00263 return 2.; 00264 00265 case 2: 00266 return 7.5*v+2.5; 00267 00268 case 3: 00269 return -1.5+ 00270 (10.5+21.*v)*v; 00271 00272 case 4: 00273 return -3.5+ 00274 (-10.5+ 00275 (31.5+52.5*v)*v)*v; 00276 00277 case 5: 00278 return 1.25+ 00279 (-22.5+ 00280 (-45.+ 00281 (82.5+123.75*v)*v)*v)*v; 00282 00283 case 6: 00284 return 4.21875+ 00285 (12.65625+ 00286 (-92.8125+ 00287 (-154.6875+ 00288 (201.09375+281.53125*v)*v)*v)*v)*v; 00289 00290 case 7: 00291 return -1.09375+ 00292 (36.09375+ 00293 (72.1875+ 00294 (-312.8125+ 00295 (-469.21875+ 00296 (469.21875+625.625*v)*v)*v)*v)*v)*v; 00297 00298 case 8: 00299 return -4.8125+ 00300 (-14.4375+ 00301 (187.6875+ 00302 (312.8125+ 00303 (-938.4375+ 00304 (-1313.8125+ 00305 (1063.5625+1367.4375*v)*v)*v)*v)*v)*v)*v; 00306 00307 case 9: 00308 return .984375+ 00309 (-51.1875+ 00310 (-102.375+ 00311 (767.8125+ 00312 (1151.71875+ 00313 (-2610.5625+ 00314 (-3480.75+ 00315 (2361.9375+2952.421875*v)*v)*v)*v)*v)*v)*v)*v; 00316 00317 case 10: 00318 return 5.33203125+ 00319 (15.99609375+ 00320 (-319.921875+ 00321 (-533.203125+ 00322 (2719.3359375+ 00323 (3807.0703125+ 00324 (-6888.984375+ 00325 (-8857.265625+ 00326 (5166.73828125+6314.90234375*v)*v)*v)*v)*v)*v)*v)*v)*v; 00327 00328 case 11: 00329 return -.90234375+ 00330 (67.67578125+ 00331 (135.3515625+ 00332 (-1533.984375+ 00333 (-2300.9765625+ 00334 (8743.7109375+ 00335 (11658.28125+ 00336 (-17487.421875+ 00337 (-21859.27734375+ 00338 (11172.51953125+13407.0234375*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00339 00340 case 12: 00341 return -5.80078125+ 00342 (-17.40234375+ 00343 (493.06640625+ 00344 (821.77734375+ 00345 (-6245.5078125+ 00346 (-8743.7109375+ 00347 (26231.1328125+ 00348 (33725.7421875+ 00349 (-43094.00390625+ 00350 (-52670.44921875+ 00351 (23941.11328125+28294.04296875*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00352 00353 case 13: 00354 return .837890625+ 00355 (-85.46484375+ 00356 (-170.9296875+ 00357 (2706.38671875+ 00358 (4059.580078124999+ 00359 (-22733.6484375+ 00360 (-30311.53125+ 00361 (74696.2734375+ 00362 (93370.341796875+ 00363 (-103744.82421875+ 00364 (-124493.7890625+ 00365 (50929.27734375+59417.490234375*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00366 00367 case 14: 00368 return 6.2318115234375+ 00369 (18.6954345703125+ 00370 (-710.426513671875+ 00371 (-1184.044189453125+ 00372 (12432.46398925781+ 00373 (17405.44958496094+ 00374 (-76252.44580078125+ 00375 (-98038.85888671875+ 00376 (204247.6226806641+ 00377 (249635.9832763672+ 00378 (-245097.1472167969+ 00379 (-289660.2648925781+ 00380 (107694.2010498047+124262.5396728516*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00381 00382 case 15: 00383 return -.7855224609375+ 00384 (104.4744873046875+ 00385 (208.948974609375+ 00386 (-4387.928466796875+ 00387 (-6581.892700195313+ 00388 (50461.17736816406+ 00389 (67281.56982421875+ 00390 (-240291.3208007813+ 00391 (-300364.1510009766+ 00392 (540655.4718017578+ 00393 (648786.5661621094+ 00394 (-570145.7702636719+ 00395 (-665170.0653076172+ 00396 (226596.3958740234+258967.3095703125*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00397 00398 case 16: 00399 return -6.63330078125+ 00400 (-19.89990234375+ 00401 (975.09521484375+ 00402 (1625.15869140625+ 00403 (-22427.18994140625+ 00404 (-31398.06591796875+ 00405 (186893.2495117188+ 00406 (240291.3208007813+ 00407 (-720873.9624023438+ 00408 (-881068.1762695313+ 00409 (1393689.660644531+ 00410 (1647087.780761719+ 00411 (-1309223.620605469+ 00412 (-1510642.639160156+ 00413 (474773.4008789063+538076.5209960938*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00414 00415 case 17: 00416 return .74188232421875+ 00417 (-124.63623046875+ 00418 (-249.2724609375+ 00419 (6688.81103515625+ 00420 (10033.21655273437+ 00421 (-100332.1655273438+ 00422 (-133776.220703125+ 00423 (644992.4926757813+ 00424 (806240.6158447266+ 00425 (-2078309.143066406+ 00426 (-2493970.971679688+ 00427 (3514231.823730469+ 00428 (4099937.127685547+ 00429 (-2973580.773925781+ 00430 (-3398378.02734375+ 00431 (991193.5913085936+1115092.790222168*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00432 00433 case 18: 00434 return 7.010787963867187+ 00435 (21.03236389160156+ 00436 (-1289.984985351562+ 00437 (-2149.974975585938+ 00438 (37624.5620727539+ 00439 (52674.38690185547+ 00440 (-406345.2703857421+ 00441 (-522443.9190673828+ 00442 (2104288.007354736+ 00443 (2571907.564544677+ 00444 (-5798482.509155273+ 00445 (-6852752.056274414+ 00446 (8697723.76373291+ 00447 (10035835.11199951+ 00448 (-6690556.741333007+ 00449 (-7582630.973510741+ 00450 (2062921.66191101+2305618.328018188*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00451 00452 00453 default: 00454 libmesh_error_msg("bad index i = " << i); 00455 } 00456 00457 libmesh_error_msg("We'll never get here!"); 00458 return 0.; 00459 } // jacobi_20_00_eval_deriv() 00460 00461 00462 } // anonymous namespace 00463 00464 00465 00466 // Specialize the eval() function for 1, 2, and 3 dimensions and the CARTESIAN mapping type 00467 // to call the local helper function from the anonymous namespace. 00468 template <> Real InfFE<1,JACOBI_20_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_20_00_eval(v, i); } 00469 template <> Real InfFE<2,JACOBI_20_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_20_00_eval(v, i); } 00470 template <> Real InfFE<3,JACOBI_20_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_20_00_eval(v, i); } 00471 00472 // Specialize the eval_deriv() function for 1, 2, and 3 dimensions and the CARTESIAN mapping type 00473 // to call the local helper function from the anonymous namespace. 00474 template <> Real InfFE<1,JACOBI_20_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_20_00_eval_deriv(v, i); } 00475 template <> Real InfFE<2,JACOBI_20_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_20_00_eval_deriv(v, i); } 00476 template <> Real InfFE<3,JACOBI_20_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_20_00_eval_deriv(v, i); } 00477 00478 } // namespace libMesh 00479 00480 #endif // LIBMESH_ENABLE_INFINITE_ELEMENTS