Changeset 95ce773 in sasmodels for sasmodels/models/lib/j0_cephes.c


Ignore:
Timestamp:
Mar 18, 2016 12:45:38 PM (8 years ago)
Author:
wojciech
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
9f7a852
Parents:
a629d8e
Message:

Bessel functions clean-up

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/lib/j0_cephes.c

    r094e320 r95ce773  
    5353 * except YP, YQ which are designed for absolute error. */ 
    5454 
    55 double j0( double ); 
    56 double j0(double x) { 
     55double J0(double x) { 
    5756 
    5857//Cephes single precission 
     
    6059    double w, z, p, q, xn; 
    6160 
    62     const double TWOOPI = 6.36619772367581343075535E-1; 
     61    //const double TWOOPI = 6.36619772367581343075535E-1; 
    6362    const double SQ2OPI = 7.9788456080286535587989E-1; 
    6463    const double PIO4 = 7.85398163397448309616E-1; 
     
    6766    const double DR2 = 3.04712623436620863991E1; 
    6867 
    69     const double PP[8] = { 
    70         7.96936729297347051624E-4, 
    71         8.28352392107440799803E-2, 
    72         1.23953371646414299388E0, 
    73         5.44725003058768775090E0, 
    74         8.74716500199817011941E0, 
    75         5.30324038235394892183E0, 
    76         9.99999999999999997821E-1, 
    77         0.0 
    78     }; 
    79  
    80     const double PQ[8] = { 
    81         9.24408810558863637013E-4, 
    82         8.56288474354474431428E-2, 
    83         1.25352743901058953537E0, 
    84         5.47097740330417105182E0, 
    85         8.76190883237069594232E0, 
    86         5.30605288235394617618E0, 
    87         1.00000000000000000218E0, 
    88         0.0 
    89     }; 
    90  
    91     const double QP[8] = { 
    92         -1.13663838898469149931E-2, 
    93         -1.28252718670509318512E0, 
    94         -1.95539544257735972385E1, 
    95         -9.32060152123768231369E1, 
    96         -1.77681167980488050595E2, 
    97         -1.47077505154951170175E2, 
    98         -5.14105326766599330220E1, 
    99         -6.05014350600728481186E0, 
    100     }; 
    101  
    102     const double QQ[8] = { 
    103         /*  1.00000000000000000000E0,*/ 
    104         6.43178256118178023184E1, 
    105         8.56430025976980587198E2, 
    106         3.88240183605401609683E3, 
    107         7.24046774195652478189E3, 
    108         5.93072701187316984827E3, 
    109         2.06209331660327847417E3, 
    110         2.42005740240291393179E2, 
    111     }; 
    112  
    113     const double YP[8] = { 
    114         1.55924367855235737965E4, 
    115         -1.46639295903971606143E7, 
    116         5.43526477051876500413E9, 
    117         -9.82136065717911466409E11, 
    118         8.75906394395366999549E13, 
    119         -3.46628303384729719441E15, 
    120         4.42733268572569800351E16, 
    121         -1.84950800436986690637E16, 
    122     }; 
    123  
    124     const double YQ[7] = { 
    125         /* 1.00000000000000000000E0,*/ 
    126         1.04128353664259848412E3, 
    127         6.26107330137134956842E5, 
    128         2.68919633393814121987E8, 
    129         8.64002487103935000337E10, 
    130         2.02979612750105546709E13, 
    131         3.17157752842975028269E15, 
    132         2.50596256172653059228E17, 
    133     }; 
    134  
    135     const double RP[8] = { 
    136         -4.79443220978201773821E9, 
    137         1.95617491946556577543E12, 
    138         -2.49248344360967716204E14, 
    139         9.70862251047306323952E15, 
    140         0.0, 
    141         0.0, 
    142         0.0, 
    143         0.0 
    144     }; 
    145  
    146     const double RQ[8] = { 
    147         /* 1.00000000000000000000E0,*/ 
    148         4.99563147152651017219E2, 
    149         1.73785401676374683123E5, 
    150         4.84409658339962045305E7, 
    151         1.11855537045356834862E10, 
    152         2.11277520115489217587E12, 
    153         3.10518229857422583814E14, 
    154         3.18121955943204943306E16, 
    155         1.71086294081043136091E18, 
    156     }; 
    15768 
    15869    if( x < 0 ) 
     
    16576 
    16677            p = (z - DR1) * (z - DR2); 
    167             p = p * polevl( z, RP, 3)/p1evl( z, RQ, 8 ); 
     78            p = p * polevl( z, RPJ0, 3)/p1evl( z, RQJ0, 8 ); 
    16879            return( p ); 
    16980        } 
     
    17182    w = 5.0/x; 
    17283    q = 25.0/(x*x); 
    173     p = polevl( q, PP, 6)/polevl( q, PQ, 6 ); 
    174     q = polevl( q, QP, 7)/p1evl( q, QQ, 7 ); 
     84    p = polevl( q, PPJ0, 6)/polevl( q, PQJ0, 6 ); 
     85    q = polevl( q, QPJ0, 7)/p1evl( q, QQJ0, 7 ); 
    17586    xn = x - PIO4; 
    17687 
     
    18495    double xx, w, z, p, q, xn; 
    18596 
    186     const double YZ1 =  0.43221455686510834878; 
    187     const double YZ2 = 22.401876406482861405; 
    188     const double YZ3 = 64.130620282338755553; 
     97    //const double YZ1 =  0.43221455686510834878; 
     98    //const double YZ2 = 22.401876406482861405; 
     99    //const double YZ3 = 64.130620282338755553; 
    189100    const double DR1 =  5.78318596294678452118; 
    190101    const double PIO4F = 0.7853981633974483096; 
    191  
    192     double MO[8] = { 
    193         -6.838999669318810E-002, 
    194         1.864949361379502E-001, 
    195         -2.145007480346739E-001, 
    196         1.197549369473540E-001, 
    197         -3.560281861530129E-003, 
    198         -4.969382655296620E-002, 
    199         -3.355424622293709E-006, 
    200         7.978845717621440E-001 
    201     }; 
    202  
    203     double PH[8] = { 
    204         3.242077816988247E+001, 
    205         -3.630592630518434E+001, 
    206         1.756221482109099E+001, 
    207         -4.974978466280903E+000, 
    208         1.001973420681837E+000, 
    209         -1.939906941791308E-001, 
    210         6.490598792654666E-002, 
    211         -1.249992184872738E-001 
    212     }; 
    213  
    214     double YP[8] = { 
    215         9.454583683980369E-008, 
    216         -9.413212653797057E-006, 
    217         5.344486707214273E-004, 
    218         -1.584289289821316E-002, 
    219         1.707584643733568E-001, 
    220         0.0, 
    221         0.0, 
    222         0.0 
    223     }; 
    224  
    225     double JP[8] = { 
    226         -6.068350350393235E-008, 
    227         6.388945720783375E-006, 
    228         -3.969646342510940E-004, 
    229         1.332913422519003E-002, 
    230         -1.729150680240724E-001, 
    231         0.0, 
    232         0.0, 
    233         0.0 
    234     }; 
    235102 
    236103    if( x < 0 ) 
     
    244111                    return( 1.0 - 0.25*z ); 
    245112 
    246             p = (z-DR1) * polevl( z, JP, 4); 
     113            p = (z-DR1) * polevl( z, JPJ0, 4); 
    247114            return( p ); 
    248115        } 
     
    251118    w = sqrt(q); 
    252119 
    253     p = w * polevl( q, MO, 7); 
     120    p = w * polevl( q, MOJ0, 7); 
    254121    w = q*q; 
    255     xn = q * polevl( w, PH, 7) - PIO4F; 
     122    xn = q * polevl( w, PHJ0, 7) - PIO4F; 
    256123    p = p * cos(xn + xx); 
    257124    return(p); 
Note: See TracChangeset for help on using the changeset viewer.