Changeset f8644dd in sasview for sansmodels/src/c_models


Ignore:
Timestamp:
Jul 9, 2012 7:57:01 AM (12 years ago)
Author:
Kieran Campbell <kieranrcampbell@…>
Branches:
master, ESS_GUI, ESS_GUI_Docs, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_iss959, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc, costrafo411, magnetic_scatt, release-4.1.1, release-4.1.2, release-4.2.2, release_4.0.1, ticket-1009, ticket-1094-headless, ticket-1242-2d-resolution, ticket-1243, ticket-1249, ticket885, unittest-saveload
Children:
14e4804
Parents:
a269378
Message:

Fixed calculation functions to pass unit tests

Location:
sansmodels/src/c_models
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • sansmodels/src/c_models/dabmodel.cpp

    rfa6db8b rf8644dd  
    4747 
    4848double DABModel::calculate_ER() { 
     49  // not implemented yet 
    4950  return 0.0; 
    5051} 
    5152 
    5253double DABModel::calculate_VR() { 
    53   return 0.0; 
     54  return 1.0; 
    5455} 
    5556 
    5657double DABModel::evaluate_rphi(double q,double phi) { 
    57   return 1.0; 
     58  double qx = q * cos(phi); 
     59  double qy = q * sin(phi); 
     60  return this->operator()(qx,qy); 
    5861} 
  • sansmodels/src/c_models/libfunc.c

    r08648c0 rf8644dd  
    11// by jcho 
     2 
    23#include <math.h> 
     4 
    35#include "libmultifunc/libfunc.h" 
     6 
    47#include <stdio.h> 
    58 
     9 
     10 
    611//used in Si func 
     12 
    713int factorial(int i) 
     14 
    815{ 
     16 
    917        int k, j; 
     18 
    1019        if (i<2){ 
     20 
    1121                return 1; 
     22 
    1223        } 
     24 
    1325        k=1; 
     26 
    1427        for(j=1;j<i;j++) 
     28 
    1529        { 
     30 
    1631                k=k*(j+1); 
     32 
    1733        } 
     34 
    1835        return k; 
     36 
    1937} 
    2038 
     39 
     40 
    2141// Used in pearl nec model 
     42 
    2243// Sine integral function: approximated within 1%!!! 
     44 
    2345// integral of sin(x)/x up to namx term nmax=6 looks the best. 
     46 
    2447double Si(double x) 
     48 
    2549{ 
     50 
    2651        int i; 
     52 
    2753        int nmax=6; 
     54 
    2855        double out; 
     56 
    2957        long double power; 
     58 
    3059        double pi = 4.0*atan(1.0); 
     60 
    3161        if (x >= pi*6.2/4.0){ 
    3262 
     63 
     64 
    3365                double out_sin = 0.0; 
     66 
    3467                double out_cos = 0.0; 
     68 
    3569                out = pi/2.0; 
     70 
    3671                for (i=0; i<nmax-2; i+=1){ 
     72 
    3773                        out_cos += pow(-1.0, i) * (double)factorial(2*i) / pow(x, 2*i+1); 
     74 
    3875                        out_sin += pow(-1.0, i) * (double)factorial(2*i+1) / pow(x, 2*i+2); 
     76 
    3977                } 
     78 
    4079                out -= cos(x) * out_cos; 
     80 
    4181                out -= sin(x) * out_sin; 
     82 
    4283                return out; 
     84 
    4385        } 
     86 
    4487        out = 0.0; 
     88 
    4589        for (i=0; i<nmax; i+=1) 
     90 
    4691        { 
     92 
    4793                if (i==0){ 
     94 
    4895                        out += x; 
     96 
    4997                        continue; 
     98 
    5099                } 
     100 
    51101                power = pow(x,(2 * i + 1)); 
     102 
    52103                out += (double)pow(-1, i) * power / ((2.0 * (double)i + 1.0) * (double)factorial(2 * i + 1)); 
     104 
    53105                //printf ("Si=%g %g %d\n", x, out, i); 
     106 
    54107        } 
     108 
    55109        return out; 
     110 
    56111} 
     112 
     113 
    57114 
    58115double sinc(double x) 
    59116{ 
    60         if (x==0.0){ 
    61                 return 1.0; 
    62         } 
    63         return sin(x)/x; 
     117  if (x==0.0){ 
     118    return 1.0; 
     119  } 
     120  return sin(x)/x; 
    64121} 
     122 
    65123 
    66124double gamln(double xx) { 
     
    79137    return -tmp+log(2.5066282746310005*ser/x); 
    80138} 
     139 
  • sansmodels/src/c_models/teubner_strey.cpp

    ra269378 rf8644dd  
    3838 
    3939double TeubnerStreyModel::calculate_ER() { 
     40  // not implemented yet 
    4041  return 0.0; 
    4142} 
    4243 
    4344double TeubnerStreyModel::calculate_VR() { 
    44   return 0.0; 
     45  return 1.0; 
    4546} 
    4647 
    4748double TeubnerStreyModel::evaluate_rphi(double q,double phi) { 
    48   return 1.0; 
     49  double qx = q*cos(phi); 
     50  double qy = q*sin(phi); 
     51  return this->operator()(qx, qy); 
    4952} 
     53 
    5054 
    5155 
Note: See TracChangeset for help on using the changeset viewer.