$extrastylesheet
inf_fe_jacobi_20_00_eval.C
Go to the documentation of this file.
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