$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_30_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.5+2.5*v; 00041 00042 case 2: 00043 return -.75+(4.5+5.25*v)*v; 00044 00045 case 3: 00046 return (10.5+10.5*v)*v*v; 00047 00048 case 4: 00049 return -1.375+ 00050 (-5.5+ 00051 (-2.25+ 00052 (22.5+20.625*v)*v)*v)*v; 00053 00054 case 5: 00055 return 1.78125+ 00056 (-1.40625+ 00057 (-19.6875+ 00058 (-10.3125+ 00059 (46.40625+40.21875*v)*v)*v)*v)*v; 00060 00061 case 6: 00062 return -.609375+ 00063 (6.09375+ 00064 (-2.578125+ 00065 (-58.4375+ 00066 (-33.515625+ 00067 (93.84375+78.203125*v)*v)*v)*v)*v)*v; 00068 00069 case 7: 00070 return .34375+ 00071 (2.40625+ 00072 (28.875+ 00073 (-156.40625+ 00074 (-93.84375+ 00075 (187.6875+151.9375*v)*v)*v)*v*v)*v)*v; 00076 00077 case 8: 00078 return -1.3828125+ 00079 (-6.5625+ 00080 (8.53125+ 00081 (108.0625+ 00082 (21.328125+ 00083 (-392.4375+ 00084 (-241.71875+ 00085 (372.9375+295.2421875*v)*v)*v)*v)*v)*v)*v)*v; 00086 00087 case 9: 00088 return 1.57421875+ 00089 (-3.19921875+ 00090 (-38.390625+ 00091 (21.328125+ 00092 (351.9140625+ 00093 (108.7734375+ 00094 (-942.703125+ 00095 (-590.484375+ 00096 (738.10546875+574.08203125*v)*v)*v)*v)*v)*v)*v)*v)*v; 00097 00098 case 10: 00099 return -.6308593750004547+ 00100 (6.97265625+ 00101 (-15.380859375+ 00102 (-172.265625+ 00103 (34.86328125+ 00104 (1045.8984375+ 00105 (397.4414062499999+ 00106 (-2195.390625+ 00107 (-1391.044921875+ 00108 (1457.28515625+1117.251953125*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00109 00110 case 11: 00111 return .484375+ 00112 (3.8671875+ 00113 (48.33984375+ 00114 (-54.78515625+ 00115 (-657.421875+ 00116 (2914.5703125+ 00117 (1249.1015625+ 00118 (-4996.40625+ 00119 (-3192.1484375+ 00120 (2872.93359375+2176.46484375*v)*v)*v)*v)*v)*v*v)*v)*v)*v)*v; 00121 00122 case 12: 00123 return -1.3544921875+ 00124 (-7.34765625+ 00125 (23.009765625+ 00126 (252.01171875+ 00127 (-156.1376953125+ 00128 (-2248.3828125+ 00129 (-291.45703125+ 00130 (7744.4296875+ 00131 (3591.1669921875+ 00132 (-11172.51953125+ 00133 (-7182.333984375+ 00134 (5658.80859375+4244.1064453125*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00135 00136 case 13: 00137 return 1.471313476557931+ 00138 (-4.4512939453125+ 00139 (-58.75708007812499+ 00140 (101.489501953125+ 00141 (1099.469604492188+ 00142 (-355.2132568359375+ 00143 (-7104.265136718749+ 00144 (-1556.17236328125+ 00145 (19841.19763183594+ 00146 (9726.077270507813+ 00147 (-24639.39575195312+ 00148 (-15915.39916992187+ 00149 (11140.77941894531+8284.169311523438*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00150 00151 case 14: 00152 return -.65960693359375+ 00153 (7.6981201171875+ 00154 (-31.34234619140625+ 00155 (-348.248291015625+ 00156 (365.6607055664063+ 00157 (4241.664184570313+ 00158 (-560.6797485351563+ 00159 (-21145.63623046875+ 00160 (-6007.283020019531+ 00161 (49393.21594238281+ 00162 (25230.58868408203+ 00163 (-53737.87719726563+ 00164 (-34842.24151611328+ 00165 (21928.68347167969+16185.45684814453*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00166 00167 case 15: 00168 return .5635986328125+ 00169 (4.9749755859375+ 00170 (69.649658203125+ 00171 (-162.515869140625+ 00172 (-1706.416625976563+ 00173 (1121.359497070313+ 00174 (14951.4599609375+ 00175 (-60072.83020019531+ 00176 (-20024.27673339844+ 00177 (120145.6604003906+ 00178 (63349.53002929688+ 00179 (-116140.8050537109+ 00180 (-75532.13195800781+ 00181 (43161.21826171875+31651.56005859375*v)*v)*v)*v)*v)*v)*v)*v*v)*v)*v)*v)*v)*v)*v; 00182 00183 case 16: 00184 return -1.327301025390625+ 00185 (-8.02978515625+ 00186 (40.323486328125+ 00187 (461.88720703125+ 00188 (-688.5540771484375+ 00189 (-7318.34619140625+ 00190 (2950.946044921875+ 00191 (49182.43408203125+ 00192 (4742.591857910156+ 00193 (-164409.8510742188+ 00194 (-61126.73950195313+ 00195 (286739.9780273438+ 00196 (155039.6392822266+ 00197 (-249123.5229492188+ 00198 (-162422.4792480469+ 00199 (84959.45068359375+61949.59945678711*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00200 00201 case 17: 00202 return 1.408035278320313+ 00203 (-5.452835083007813+ 00204 (-81.0135498046875+ 00205 (238.8861083984375+ 00206 (2508.304138183594+ 00207 (-2508.304138183594+ 00208 (-28427.44689941406+ 00209 (6449.924926757813+ 00210 (153185.717010498+ 00211 (25978.86428833008+ 00212 (-436444.9200439453+ 00213 (-175711.5911865234+ 00214 (673561.0995483398+ 00215 (371697.5967407227+ 00216 (-530996.5667724609+ 00217 (-346917.7569580078+ 00218 (167263.9185333252+121348.3330535889*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00219 00220 case 18: 00221 return -.6847000124835247+ 00222 (8.346176147460938+ 00223 (-49.9101333618164+ 00224 (-593.8026123046875+ 00225 (1151.772308349609+ 00226 (11824.86236572266+ 00227 (-8062.406158447265+ 00228 (-102277.3809814453+ 00229 (10020.4190826416+ 00230 (456485.7582092285+ 00231 (103544.3305206299+ 00232 (-1129574.514770508+ 00233 (-483206.8757629394+ 00234 (1561129.906311035+ 00235 (876144.3351745604+ 00236 (-1125712.721557617+ 00237 (-736757.7363967896+ 00238 (329374.0468597412+237881.2560653686*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_30_00_eval() 00248 00249 00250 00251 00252 Real jacobi_30_00_eval_deriv(Real v, unsigned i) 00253 { 00254 libmesh_assert (-1.-1.e-5 <= v && v < 1.); 00255 00256 switch (i) 00257 { 00258 case 0: 00259 return 0.; 00260 00261 case 1: 00262 return 2.5; 00263 00264 case 2: 00265 return 10.5*v+4.5; 00266 00267 case 3: 00268 return (21.+31.5*v)*v; 00269 00270 case 4: 00271 return -5.5+ 00272 (-4.5+ 00273 (67.5+82.5*v)*v)*v; 00274 00275 case 5: 00276 return -1.40625+ 00277 (-39.375+ 00278 (-30.9375+ 00279 (185.625+201.09375*v)*v)*v)*v; 00280 00281 case 6: 00282 return 6.09375+ 00283 (-5.15625+ 00284 (-175.3125+ 00285 (-134.0625+ 00286 (469.21875+469.21875*v)*v)*v)*v)*v; 00287 00288 case 7: 00289 return 2.40625+ 00290 (57.75+ 00291 (-625.625+ 00292 (-469.21875+ 00293 (1126.125+1063.5625*v)*v)*v)*v*v)*v; 00294 00295 case 8: 00296 return -6.5625+ 00297 (17.0625+ 00298 (324.1875+ 00299 (85.3125+ 00300 (-1962.1875+ 00301 (-1450.3125+ 00302 (2610.5625+2361.9375*v)*v)*v)*v)*v)*v)*v; 00303 00304 case 9: 00305 return -3.19921875+ 00306 (-76.78125+ 00307 (63.984375+ 00308 (1407.65625+ 00309 (543.8671875+ 00310 (-5656.21875+ 00311 (-4133.390625+ 00312 (5904.84375+5166.73828125*v)*v)*v)*v)*v)*v)*v)*v; 00313 00314 case 10: 00315 return 6.97265625+ 00316 (-30.76171875+ 00317 (-516.796875+ 00318 (139.453125+ 00319 (5229.4921875+ 00320 (2384.6484375+ 00321 (-15367.734375+ 00322 (-11128.359375+ 00323 (13115.56640625+11172.51953125*v)*v)*v)*v)*v)*v)*v)*v)*v; 00324 00325 case 11: 00326 return 3.8671875+ 00327 (96.6796875+ 00328 (-164.35546875+ 00329 (-2629.6875+ 00330 (17487.421875+ 00331 (8743.7109375+ 00332 (-39971.25+ 00333 (-28729.3359375+ 00334 (28729.3359375+23941.11328125*v)*v)*v)*v)*v)*v*v)*v)*v)*v; 00335 00336 case 12: 00337 return -7.34765625+ 00338 (46.01953125+ 00339 (756.03515625+ 00340 (-624.55078125+ 00341 (-11241.9140625+ 00342 (-1748.7421875+ 00343 (54211.0078125+ 00344 (28729.3359375+ 00345 (-100552.67578125+ 00346 (-71823.33984375+ 00347 (62246.89453125+50929.27734375*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00348 00349 case 13: 00350 return -4.4512939453125+ 00351 (-117.51416015625+ 00352 (304.468505859375+ 00353 (4397.87841796875+ 00354 (-1776.066284179688+ 00355 (-42625.59082031249+ 00356 (-10893.20654296875+ 00357 (158729.5810546875+ 00358 (87534.69543457031+ 00359 (-246393.9575195312+ 00360 (-175069.3908691406+ 00361 (133689.3530273438+107694.2010498047*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00362 00363 case 14: 00364 return 7.6981201171875+ 00365 (-62.6846923828125+ 00366 (-1044.744873046875+ 00367 (1462.642822265625+ 00368 (21208.32092285156+ 00369 (-3364.078491210938+ 00370 (-148019.4536132813+ 00371 (-48058.26416015625+ 00372 (444538.9434814453+ 00373 (252305.8868408203+ 00374 (-591116.6491699219+ 00375 (-418106.8981933594+ 00376 (285072.8851318359+226596.3958740234*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00377 00378 case 15: 00379 return 4.9749755859375+ 00380 (139.29931640625+ 00381 (-487.547607421875+ 00382 (-6825.66650390625+ 00383 (5606.797485351563+ 00384 (89708.759765625+ 00385 (-480582.6416015625+ 00386 (-180218.4906005859+ 00387 (1201456.604003906+ 00388 (696844.8303222656+ 00389 (-1393689.660644531+ 00390 (-981917.7154541016+ 00391 (604257.0556640625+474773.4008789063*v)*v)*v)*v)*v)*v)*v)*v*v)*v)*v)*v)*v)*v; 00392 00393 case 16: 00394 return -8.02978515625+ 00395 (80.64697265625+ 00396 (1385.66162109375+ 00397 (-2754.21630859375+ 00398 (-36591.73095703125+ 00399 (17705.67626953125+ 00400 (344277.0385742188+ 00401 (37940.73486328125+ 00402 (-1479688.659667969+ 00403 (-611267.3950195313+ 00404 (3154139.758300781+ 00405 (1860475.671386719+ 00406 (-3238605.798339844+ 00407 (-2273914.709472656+ 00408 (1274391.760253906+991193.5913085938*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00409 00410 case 17: 00411 return -5.452835083007813+ 00412 (-162.027099609375+ 00413 (716.6583251953125+ 00414 (10033.21655273438+ 00415 (-12541.52069091797+ 00416 (-170564.6813964844+ 00417 (45149.47448730469+ 00418 (1225485.736083984+ 00419 (233809.7785949707+ 00420 (-4364449.200439453+ 00421 (-1932827.503051758+ 00422 (8082733.194580078+ 00423 (4832068.757629395+ 00424 (-7433951.934814453+ 00425 (-5203766.354370117+ 00426 (2676222.696533203+2062921.661911011*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00427 00428 case 18: 00429 return 8.346176147460938+ 00430 (-99.8202667236328+ 00431 (-1781.407836914063+ 00432 (4607.089233398438+ 00433 (59124.31182861328+ 00434 (-48374.43695068359+ 00435 (-715941.6668701171+ 00436 (80163.35266113281+ 00437 (4108371.823883056+ 00438 (1035443.305206299+ 00439 (-12425319.66247559+ 00440 (-5798482.509155273+ 00441 (20294688.78204345+ 00442 (12266020.69244385+ 00443 (-16885690.82336426+ 00444 (-11788123.78234863+ 00445 (5599358.796615601+4281862.609176635*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v)*v; 00446 00447 00448 default: 00449 libmesh_error_msg("bad index i = " << i); 00450 } 00451 00452 libmesh_error_msg("We'll never get here!"); 00453 return 0.; 00454 } // jacobi_30_00_eval_deriv() 00455 00456 00457 } // anonymous namespace 00458 00459 00460 00461 // Specialize the eval() function for 1, 2, and 3 dimensions and the CARTESIAN mapping type 00462 // to call the local helper function from the anonymous namespace. 00463 template <> Real InfFE<1,JACOBI_30_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_30_00_eval(v, i); } 00464 template <> Real InfFE<2,JACOBI_30_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_30_00_eval(v, i); } 00465 template <> Real InfFE<3,JACOBI_30_00,CARTESIAN>::eval(Real v, Order, unsigned i) { return jacobi_30_00_eval(v, i); } 00466 00467 // Specialize the eval_deriv() function for 1, 2, and 3 dimensions and the CARTESIAN mapping type 00468 // to call the local helper function from the anonymous namespace. 00469 template <> Real InfFE<1,JACOBI_30_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_30_00_eval_deriv(v, i); } 00470 template <> Real InfFE<2,JACOBI_30_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_30_00_eval_deriv(v, i); } 00471 template <> Real InfFE<3,JACOBI_30_00,CARTESIAN>::eval_deriv(Real v, Order, unsigned i) { return jacobi_30_00_eval_deriv(v, i); } 00472 00473 } // namespace libMesh 00474 00475 #endif // LIBMESH_ENABLE_INFINITE_ELEMENTS