Ignore:
Timestamp:
Oct 18, 2016 10:32:18 PM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
f0afad2
Parents:
3e8ea5d
Message:

fractal models: handle limits of q=0 and dim=1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/mass_surface_fractal.c

    r3a48772 r6d96b66  
    1 double form_volume(double radius); 
    2  
    3 double Iq(double q, 
    4           double fractal_dim_mass, 
    5           double fractal_dim_surf, 
    6           double rg_cluster, 
    7           double rg_primary); 
    8  
    9 static double _mass_surface_fractal_kernel(double q, 
     1#define INVALID(p) (p.fractal_dim_mass + p.fractal_dim_surf > 6.) 
     2static double 
     3Iq(double q, 
    104          double fractal_dim_mass, 
    115          double fractal_dim_surf, 
     
    148{ 
    159     //computation 
    16     double tot_dim = 6.0 - fractal_dim_surf - fractal_dim_mass; 
    17     fractal_dim_mass /= 2.0; 
    18     tot_dim /= 2.0; 
     10    const double Dm = 0.5*fractal_dim_mass; 
     11    const double Dt = 0.5*(6.0 - (fractal_dim_mass + fractal_dim_surf)); 
    1912 
    20     double rc_norm = rg_cluster * rg_cluster / (3.0 * fractal_dim_mass); 
    21     double rp_norm = rg_primary * rg_primary / (3.0 * tot_dim); 
     13    const double t1 = Dm==0. ? 1.0 : pow(1.0 + square(q*rg_cluster)/(3.0*Dm), -Dm); 
     14    const double t2 = Dt==0. ? 1.0 : pow(1.0 + square(q*rg_primary)/(3.0*Dt), -Dt); 
     15    const double form = t1*t2; 
    2216 
    23     //x for P 
    24     double x_val1 = 1.0 +  q * q * rc_norm; 
    25     double x_val2 = 1.0 +  q * q * rp_norm; 
    26  
    27     double inv_form = pow(x_val1, fractal_dim_mass) * pow(x_val2, tot_dim); 
    28  
    29     //another singular 
    30     if (inv_form == 0.0) return 0.0; 
    31  
    32     double form_factor = 1.0; 
    33     form_factor /= inv_form; 
    34  
    35     return (form_factor); 
     17    return form; 
    3618} 
    37 double form_volume(double radius){ 
    38  
    39     return M_4PI_3*radius*radius*radius; 
    40 } 
    41  
    42 double Iq(double q, 
    43           double fractal_dim_mass, 
    44           double fractal_dim_surf, 
    45           double rg_cluster, 
    46           double rg_primary) 
    47 { 
    48     return _mass_surface_fractal_kernel(q, 
    49             fractal_dim_mass, 
    50             fractal_dim_surf, 
    51             rg_cluster, 
    52             rg_primary); 
    53 } 
Note: See TracChangeset for help on using the changeset viewer.