Changeset f728001 in sasmodels for sasmodels/models/bcc_paracrystal.c


Ignore:
Timestamp:
Oct 22, 2017 10:34:11 PM (6 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
ea60e08
Parents:
31eea1f
Message:

paracrystals: document relation to equation numbers in Matsuoka

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/bcc_paracrystal.c

    rbecded3 rf728001  
    22bcc_Zq(double qa, double qb, double qc, double dnn, double d_factor) 
    33{ 
    4 #if 0  // Equations as written in Matsuoka 
    5     const double a1 = (+qa + qb + qc)/2.0; 
    6     const double a2 = (-qa - qb + qc)/2.0; 
    7     const double a3 = (-qa + qb - qc)/2.0; 
    8 #else 
    9     const double a1 = (+qa + qb - qc)/2.0; 
     4    // Equations from Matsuoka 26-27-28, multiplied by |q| 
     5    const double a1 = (-qa + qb + qc)/2.0; 
    106    const double a2 = (+qa - qb + qc)/2.0; 
    11     const double a3 = (-qa + qb + qc)/2.0; 
    12 #endif 
     7    const double a3 = (+qa + qb - qc)/2.0; 
    138 
    14 #if 1 
    15     // Numerator: (1 - exp(a)^2)^3 
    16     //         => (-(exp(2a) - 1))^3 
    17     //         => -expm1(2a)^3 
    18     // Denominator: prod(1 - 2 cos(d ak) exp(a) + exp(2a)) 
    19     //         => prod(exp(a)^2 - 2 cos(d ak) exp(a) + 1) 
    20     //         => prod((exp(a) - 2 cos(d ak)) * exp(a) + 1) 
     9#if 0 
     10    // Matsuoka 29-30-31 
     11    //     Z_k numerator: 1 - exp(a)^2 
     12    //     Z_k denominator: 1 - 2 cos(d a_k) exp(a) + exp(2a) 
     13    // Rewriting numerator 
     14    //         => -(exp(2a) - 1) 
     15    //         => -expm1(2a) 
     16    // Rewriting denominator 
     17    //         => exp(a)^2 - 2 cos(d ak) exp(a) + 1) 
     18    //         => (exp(a) - 2 cos(d ak)) * exp(a) + 1 
    2119    const double arg = -0.5*square(dnn*d_factor)*(a1*a1 + a2*a2 + a3*a3); 
    2220    const double exp_arg = exp(arg); 
     
    2523          * ((exp_arg - 2.0*cos(dnn*a2))*exp_arg + 1.0) 
    2624          * ((exp_arg - 2.0*cos(dnn*a3))*exp_arg + 1.0)); 
    27 #else 
    28     // Alternate form, which perhaps is more approachable 
    29     const double arg = -0.5*square(dnn*d_factor)*(a1*a1 + a2*a2 + a3*a3); 
     25 
     26#elif 0 
     27    // ** Alternate form, which perhaps is more approachable 
     28    //     Z_k numerator   => -[(exp(2a) - 1) / 2.exp(a)] 2.exp(a) 
     29    //                     => -[sinh(a)] exp(a) 
     30    //     Z_k denominator => [(exp(2a) + 1) / 2.exp(a) - cos(d a_k)] 2.exp(a) 
     31    //                     => [cosh(a) - cos(d a_k)] 2.exp(a) 
     32    //     => Z_k = -sinh(a) / [cosh(a) - cos(d a_k)] 
     33    //            = sinh(-a) / [cosh(-a) - cos(d a_k)] 
     34    // 
     35    // One more step leads to the form in sasview 3.x for 2d models 
     36    //            = tanh(-a) / [1 - cos(d a_k)/cosh(-a)] 
     37    // 
     38    const double arg = 0.5*square(dnn*d_factor)*(a1*a1 + a2*a2 + a3*a3); 
    3039    const double sinh_qd = sinh(arg); 
    3140    const double cosh_qd = cosh(arg); 
     
    3342                    * sinh_qd/(cosh_qd - cos(dnn*a2)) 
    3443                    * sinh_qd/(cosh_qd - cos(dnn*a3)); 
     44#else 
     45    const double arg = 0.5*square(dnn*d_factor)*(a1*a1 + a2*a2 + a3*a3); 
     46    const double tanh_qd = tanh(arg); 
     47    const double cosh_qd = cosh(arg); 
     48    const double Zq = tanh_qd/(1.0 - cos(dnn*a1)/cosh_qd) 
     49                    * tanh_qd/(1.0 - cos(dnn*a2)/cosh_qd) 
     50                    * tanh_qd/(1.0 - cos(dnn*a3)/cosh_qd); 
    3551#endif 
    3652 
Note: See TracChangeset for help on using the changeset viewer.