Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/models/hollow_rectangular_prism.c

    r71b751d ree60aa7  
     1// TODO: interface to form_volume/shell_volume not yet settled 
    12static double 
    2 form_volume(double length_a, double b2a_ratio, double c2a_ratio, double thickness) 
     3shell_volume(double *total, double length_a, double b2a_ratio, double c2a_ratio, double thickness) 
    34{ 
    45    double length_b = length_a * b2a_ratio; 
     
    89    double c_core = length_c - 2.0*thickness; 
    910    double vol_core = a_core * b_core * c_core; 
    10     double vol_total = length_a * length_b * length_c; 
    11     double vol_shell = vol_total - vol_core; 
    12     return vol_shell; 
     11    *total = length_a * length_b * length_c; 
     12    return *total - vol_core; 
     13} 
     14 
     15static double 
     16form_volume(double length_a, double b2a_ratio, double c2a_ratio, double thickness) 
     17{ 
     18    double total; 
     19    return shell_volume(&total, length_a, b2a_ratio, c2a_ratio, thickness); 
     20} 
     21 
     22static double 
     23effective_radius(int mode, double length_a, double b2a_ratio, double c2a_ratio, double thickness) 
     24//effective_radius_type = ["equivalent sphere","half length_a", "half length_b", "half length_c", 
     25//                         "equivalent outer circular cross-section","half ab diagonal","half diagonal"] 
     26// NOTE length_a is external dimension! 
     27{ 
     28    switch (mode) { 
     29    case 1: // equivalent sphere 
     30        return cbrt(0.75*cube(length_a)*b2a_ratio*c2a_ratio/M_PI); 
     31    case 2: // half length_a 
     32        return 0.5 * length_a; 
     33    case 3: // half length_b 
     34        return 0.5 * length_a*b2a_ratio; 
     35    case 4: // half length_c 
     36        return 0.5 * length_a*c2a_ratio; 
     37    case 5: // equivalent outer circular cross-section 
     38        return length_a*sqrt(b2a_ratio/M_PI); 
     39    case 6: // half ab diagonal 
     40        return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio))); 
     41    case 7: // half diagonal 
     42        return 0.5*sqrt(square(length_a) * (1.0 + square(b2a_ratio) + square(c2a_ratio))); 
     43    } 
    1344} 
    1445 
Note: See TracChangeset for help on using the changeset viewer.