Ignore:
Timestamp:
Mar 29, 2019 6:13:15 AM (5 years ago)
Author:
dirk
Branches:
magnetic_scatt
Children:
1342f6a
Parents:
a48831a8
Message:

clean up obsolete? code of magnetic scattering calculation. Addresses #1086.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/calculator/c_extensions/libfunc.c

    r144e032a rb36e7c7  
    8787} 
    8888 
     89//The code calculating magnetic sld below seems to be not used. 
     90//Keeping it in order to check if it is not breaking anything. 
    8991// calculate magnetic sld and return total sld 
    9092// bn : contrast (not just sld of the layer) 
     
    9597// spintheta: angle (anti-clock-wise) between neutron spin(up) and x axis 
    9698// Note: all angles are in degrees. 
    97 void cal_msld(polar_sld *p_sld, int isangle, double qx, double qy, double bn, 
    98                                 double m01, double mtheta1, double mphi1, 
    99                                 double spinfraci, double spinfracf, double spintheta) 
    100 { 
    101         //locals 
    102         double q_x = qx; 
    103         double q_y = qy; 
    104         double sld = bn; 
    105         int is_angle = isangle; 
    106         double pi = 4.0*atan(1.0); 
    107         double s_theta = spintheta * pi/180.0; 
    108         double m_max = m01; 
    109         double m_phi = mphi1; 
    110         double m_theta = mtheta1; 
    111         double in_spin = spinfraci; 
    112         double out_spin = spinfracf; 
    113  
    114         double m_perp = 0.0; 
    115         double m_perp_z = 0.0; 
    116         double m_perp_y = 0.0; 
    117         double m_perp_x = 0.0; 
    118         double m_sigma_x = 0.0; 
    119         double m_sigma_z = 0.0; 
    120         double m_sigma_y = 0.0; 
    121         //double b_m = 0.0; 
    122         double q_angle = 0.0; 
    123         double mx = 0.0; 
    124         double my = 0.0; 
    125         double mz = 0.0; 
    126         double uu = sld; 
    127         double dd = sld; 
    128         double re_ud = 0.0; 
    129         double im_ud = 0.0; 
    130         double re_du = 0.0; 
    131         double im_du = 0.0; 
    132  
    133         //No mag means no further calculation 
    134         if (isangle>0) { 
    135                 if (m_max < 1.0e-32){ 
    136                         uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    137                         dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    138                 } 
    139         } 
    140         else if (fabs(m_max)< 1.0e-32 && fabs(m_phi)< 1.0e-32 && fabs(m_theta)< 1.0e-32){ 
    141                         uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    142                         dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    143         } else { 
    144  
    145                 //These are needed because of the precision of inputs 
    146                 if (in_spin < 0.0) in_spin = 0.0; 
    147                 if (in_spin > 1.0) in_spin = 1.0; 
    148                 if (out_spin < 0.0) out_spin = 0.0; 
    149                 if (out_spin > 1.0) out_spin = 1.0; 
    150  
    151                 if (q_x == 0.0) q_angle = pi / 2.0; 
    152                 else q_angle = atan(q_y/q_x); 
    153                 if (q_y < 0.0 && q_x < 0.0) q_angle -= pi; 
    154                 else if (q_y > 0.0 && q_x < 0.0) q_angle += pi; 
    155  
    156                 q_angle = pi/2.0 - q_angle; 
    157                 if (q_angle > pi) q_angle -= 2.0 * pi; 
    158                 else if (q_angle < -pi) q_angle += 2.0 * pi; 
    159  
    160                 if (fabs(q_x) < 1.0e-16 && fabs(q_y) < 1.0e-16){ 
    161                         m_perp = 0.0; 
    162                         } 
    163                 else { 
    164                         m_perp = m_max; 
    165                         } 
    166                 if (is_angle > 0){ 
    167                         m_phi *= pi/180.0; 
    168                         m_theta *= pi/180.0; 
    169                         mx = m_perp * cos(m_theta) * cos(m_phi); 
    170                         my = m_perp * sin(m_theta); 
    171                         mz = -(m_perp * cos(m_theta) * sin(m_phi)); 
    172                 } 
    173                 else{ 
    174                         mx = m_perp; 
    175                         my = m_phi; 
    176                         mz = m_theta; 
    177                 } 
    178                 //ToDo: simplify these steps 
    179                 // m_perp1 -m_perp2 
    180                 m_perp_x = (mx) *  cos(q_angle); 
    181                 m_perp_x -= (my) * sin(q_angle); 
    182                 m_perp_y = m_perp_x; 
    183                 m_perp_x *= cos(-q_angle); 
    184                 m_perp_y *= sin(-q_angle); 
    185                 m_perp_z = mz; 
    186  
    187                 m_sigma_x = (m_perp_x * cos(-s_theta) - m_perp_y * sin(-s_theta)); 
    188                 m_sigma_y = (m_perp_x * sin(-s_theta) + m_perp_y * cos(-s_theta)); 
    189                 m_sigma_z = (m_perp_z); 
    190  
    191                 //Find b 
    192                 uu -= m_sigma_x; 
    193                 dd += m_sigma_x; 
    194                 re_ud = m_sigma_y; 
    195                 re_du = m_sigma_y; 
    196                 im_ud = m_sigma_z; 
    197                 im_du = -m_sigma_z; 
    198  
    199                 uu = sqrt(sqrt(in_spin * out_spin)) * uu; 
    200                 dd = sqrt(sqrt((1.0 - in_spin) * (1.0 - out_spin))) * dd; 
    201  
    202                 re_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * re_ud; 
    203                 im_ud = sqrt(sqrt(in_spin * (1.0 - out_spin))) * im_ud; 
    204                 re_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * re_du; 
    205                 im_du = sqrt(sqrt((1.0 - in_spin) * out_spin)) * im_du; 
    206         } 
    207         p_sld->uu = uu; 
    208         p_sld->dd = dd; 
    209         p_sld->re_ud = re_ud; 
    210         p_sld->im_ud = im_ud; 
    211         p_sld->re_du = re_du; 
    212         p_sld->im_du = im_du; 
    213 } 
     99// void cal_msld(polar_sld *p_sld, int isangle, double qx, double qy, double bn, 
     100//                              double m01, double mtheta1, double mphi1, 
     101//                              double spinfraci, double spinfracf, double spintheta) 
     102// { 
     103//      //locals 
     104//      double q_x = qx; 
     105//      double q_y = qy; 
     106//      double sld = bn; 
     107//      int is_angle = isangle; 
     108//      double pi = 4.0*atan(1.0); 
     109//      double s_theta = spintheta * pi/180.0; 
     110//      double m_max = m01; 
     111//      double m_phi = mphi1; 
     112//      double m_theta = mtheta1; 
     113//      double in_spin = spinfraci; 
     114//      double out_spin = spinfracf; 
     115// 
     116//      double m_perp = 0.0; 
     117//      double m_perp_z = 0.0; 
     118//      double m_perp_y = 0.0; 
     119//      double m_perp_x = 0.0; 
     120//      double m_sigma_x = 0.0; 
     121//      double m_sigma_z = 0.0; 
     122//      double m_sigma_y = 0.0; 
     123//      //double b_m = 0.0; 
     124//      double q_angle = 0.0; 
     125//      double mx = 0.0; 
     126//      double my = 0.0; 
     127//      double mz = 0.0; 
     128//      double uu = sld; 
     129//      double dd = sld; 
     130//      double re_ud = 0.0; 
     131//      double im_ud = 0.0; 
     132//      double re_du = 0.0; 
     133//      double im_du = 0.0; 
     134// 
     135//      //No mag means no further calculation 
     136//      if (isangle>0) { 
     137//              if (m_max < 1.0e-32){ 
     138//                      uu = sqrt((1+in_spin)/2 * (1+out_spin)/2) * uu; 
     139//                      dd = sqrt((1.0 - in_spin)/2 * (1.0 - out_spin)/2) * dd; 
     140//              } 
     141//      } 
     142//      else if (fabs(m_max)< 1.0e-32 && fabs(m_phi)< 1.0e-32 && fabs(m_theta)< 1.0e-32){ 
     143//                      uu = sqrt((1+in_spin)/2 * (1+out_spin)/2) * uu; 
     144//                      dd = sqrt((1.0 - in_spin)/2 * (1.0 - out_spin)/2) * dd; 
     145//      } else { 
     146// 
     147//              //These are needed because of the precision of inputs 
     148//              if (in_spin < 0.0) in_spin = 0.0; 
     149//              if (in_spin > 1.0) in_spin = 1.0; 
     150//              if (out_spin < 0.0) out_spin = 0.0; 
     151//              if (out_spin > 1.0) out_spin = 1.0; 
     152// 
     153//              if (q_x == 0.0) q_angle = pi / 2.0; 
     154//              else q_angle = atan(q_y/q_x); 
     155//              if (q_y < 0.0 && q_x < 0.0) q_angle -= pi; 
     156//              else if (q_y > 0.0 && q_x < 0.0) q_angle += pi; 
     157// 
     158//              q_angle = pi/2.0 - q_angle; 
     159//              if (q_angle > pi) q_angle -= 2.0 * pi; 
     160//              else if (q_angle < -pi) q_angle += 2.0 * pi; 
     161// 
     162//              if (fabs(q_x) < 1.0e-16 && fabs(q_y) < 1.0e-16){ 
     163//                      m_perp = 0.0; 
     164//                      } 
     165//              else { 
     166//                      m_perp = m_max; 
     167//                      } 
     168//              if (is_angle > 0){ 
     169//                      m_phi *= pi/180.0; 
     170//                      m_theta *= pi/180.0; 
     171//                      mx = m_perp * cos(m_theta) * cos(m_phi); 
     172//                      my = m_perp * sin(m_theta); 
     173//                      mz = -(m_perp * cos(m_theta) * sin(m_phi)); 
     174//              } 
     175//              else{ 
     176//                      mx = m_perp; 
     177//                      my = m_phi; 
     178//                      mz = m_theta; 
     179//              } 
     180//              //ToDo: simplify these steps 
     181//              // m_perp1 -m_perp2 
     182//              m_perp_x = (mx) *  cos(q_angle); 
     183//              m_perp_x -= (my) * sin(q_angle); 
     184//              m_perp_y = m_perp_x; 
     185//              m_perp_x *= cos(-q_angle); 
     186//              m_perp_y *= sin(-q_angle); 
     187//              m_perp_z = mz; 
     188// 
     189//              m_sigma_x = (m_perp_x * cos(-s_theta) - m_perp_y * sin(-s_theta)); 
     190//              m_sigma_y = (m_perp_x * sin(-s_theta) + m_perp_y * cos(-s_theta)); 
     191//              m_sigma_z = (m_perp_z); 
     192// 
     193//              //Find b 
     194//              uu -= m_sigma_x; 
     195//              dd += m_sigma_x; 
     196//              re_ud = m_sigma_y; 
     197//              re_du = m_sigma_y; 
     198//              im_ud = m_sigma_z; 
     199//              im_du = -m_sigma_z; 
     200// 
     201//              uu = sqrt((1+in_spin) * (1 + out_spin)) * uu; 
     202//              dd = sqrt((1.0 - in_spin) * (1.0 - out_spin)) * dd; 
     203// 
     204//              re_ud = sqrt(in_spin * (1.0 - out_spin)) * re_ud; 
     205//              im_ud = sqrt(in_spin * (1.0 - out_spin)) * im_ud; 
     206//              re_du = sqrt((1.0 - in_spin) * out_spin) * re_du; 
     207//              im_du = sqrt((1.0 - in_spin) * out_spin) * im_du; 
     208//      } 
     209//      p_sld->uu = uu; 
     210//      p_sld->dd = dd; 
     211//      p_sld->re_ud = re_ud; 
     212//      p_sld->im_ud = im_ud; 
     213//      p_sld->re_du = re_du; 
     214//      p_sld->im_du = im_du; 
     215// } 
    214216 
    215217 
Note: See TracChangeset for help on using the changeset viewer.