| 1 | 
gezelter | 
1290 | 
#include <iostream> | 
| 2 | 
  | 
  | 
#include <fstream> | 
| 3 | 
  | 
  | 
#include <string> | 
| 4 | 
  | 
  | 
#include <vector> | 
| 5 | 
gezelter | 
1295 | 
#include <cmath> | 
| 6 | 
gezelter | 
1290 | 
#include "visualizerCmd.h" | 
| 7 | 
gezelter | 
1295 | 
#include "SHAPE.hpp" | 
| 8 | 
gezelter | 
1290 | 
 | 
| 9 | 
  | 
  | 
using namespace std; | 
| 10 | 
  | 
  | 
 | 
| 11 | 
  | 
  | 
int main(int argc, char* argv[]){ | 
| 12 | 
  | 
  | 
 | 
| 13 | 
  | 
  | 
  gengetopt_args_info args_info; | 
| 14 | 
  | 
  | 
  int npts, i, j, k, write_size; | 
| 15 | 
  | 
  | 
  double xmin, xmax, x; | 
| 16 | 
  | 
  | 
  double ymin, ymax, y; | 
| 17 | 
  | 
  | 
  double zmin, zmax, z; | 
| 18 | 
gezelter | 
1299 | 
  double r, theta, phi, costheta; | 
| 19 | 
  | 
  | 
  double sigmaShape, sShape, epsShape; | 
| 20 | 
  | 
  | 
  double sigmaProbe, sProbe, epsProbe; | 
| 21 | 
  | 
  | 
  double sigma, s, eps; | 
| 22 | 
  | 
  | 
  double rTerm, r6, r12; | 
| 23 | 
  | 
  | 
  double energy; | 
| 24 | 
  | 
  | 
 | 
| 25 | 
gezelter | 
1295 | 
  char* shapeFileName; | 
| 26 | 
gezelter | 
1299 | 
  char* outputFileName; | 
| 27 | 
gezelter | 
1295 | 
  SHAPE* shape; | 
| 28 | 
gezelter | 
1299 | 
  FILE* outputFile; | 
| 29 | 
gezelter | 
1290 | 
 | 
| 30 | 
  | 
  | 
  //parse the command line options | 
| 31 | 
  | 
  | 
  if (cmdline_parser (argc, argv, &args_info) != 0) | 
| 32 | 
  | 
  | 
    exit(1) ; | 
| 33 | 
  | 
  | 
 | 
| 34 | 
gezelter | 
1295 | 
  if (args_info.shape_given){ | 
| 35 | 
  | 
  | 
    shapeFileName = args_info.shape_arg; | 
| 36 | 
gezelter | 
1290 | 
  } | 
| 37 | 
  | 
  | 
  else{ | 
| 38 | 
  | 
  | 
    std::cerr << "Does not have shape file name" << endl; | 
| 39 | 
  | 
  | 
    exit(1); | 
| 40 | 
  | 
  | 
  } | 
| 41 | 
gezelter | 
1295 | 
 | 
| 42 | 
  | 
  | 
  shape = new SHAPE(); | 
| 43 | 
  | 
  | 
  shape->readSHAPEfile(shapeFileName); | 
| 44 | 
  | 
  | 
 | 
| 45 | 
gezelter | 
1290 | 
 | 
| 46 | 
gezelter | 
1299 | 
  if (args_info.output_given){ | 
| 47 | 
  | 
  | 
    outputFileName = args_info.output_arg; | 
| 48 | 
  | 
  | 
  } | 
| 49 | 
  | 
  | 
  else{ | 
| 50 | 
  | 
  | 
    std::cerr << "Does not have output file name" << endl; | 
| 51 | 
  | 
  | 
    exit(1); | 
| 52 | 
  | 
  | 
  } | 
| 53 | 
gezelter | 
1290 | 
 | 
| 54 | 
gezelter | 
1299 | 
  outputFile = fopen(outputFileName, "w"); | 
| 55 | 
gezelter | 
1290 | 
 | 
| 56 | 
gezelter | 
1299 | 
  if (outputFile == NULL) { | 
| 57 | 
  | 
  | 
    (void) fprintf(stderr, "Unable to open outputFile %s!\n", outputFileName); | 
| 58 | 
gezelter | 
1290 | 
    exit(8); | 
| 59 | 
  | 
  | 
  } | 
| 60 | 
gezelter | 
1299 | 
     | 
| 61 | 
  | 
  | 
  // grid has a default value (default=51), so it is always given | 
| 62 | 
  | 
  | 
  npts = args_info.grid_arg; | 
| 63 | 
gezelter | 
1290 | 
 | 
| 64 | 
gezelter | 
1300 | 
  xmin = -10.0; | 
| 65 | 
  | 
  | 
  xmax = 10.0; | 
| 66 | 
gezelter | 
1290 | 
 | 
| 67 | 
gezelter | 
1300 | 
  ymin = -10.0; | 
| 68 | 
  | 
  | 
  ymax = 10.0; | 
| 69 | 
gezelter | 
1290 | 
 | 
| 70 | 
gezelter | 
1300 | 
  zmin = -10.0; | 
| 71 | 
  | 
  | 
  zmax = 10.0; | 
| 72 | 
gezelter | 
1290 | 
 | 
| 73 | 
gezelter | 
1300 | 
  //sigmaProbe = 2.28; | 
| 74 | 
  | 
  | 
  //sProbe = 2.28; | 
| 75 | 
  | 
  | 
  //epsProbe = 0.020269601874;     | 
| 76 | 
  | 
  | 
  sigmaProbe = 0.0; | 
| 77 | 
  | 
  | 
  sProbe = 0.0; | 
| 78 | 
  | 
  | 
  epsProbe = 1.0;     | 
| 79 | 
  | 
  | 
 | 
| 80 | 
gezelter | 
1290 | 
  for (i = 0; i < npts; i++) { | 
| 81 | 
chrisfen | 
1311 | 
    x = xmin + (xmax-xmin) * (double)i/(double)(npts-1); | 
| 82 | 
gezelter | 
1290 | 
 | 
| 83 | 
  | 
  | 
    for (j = 0; j < npts; j++) { | 
| 84 | 
chrisfen | 
1311 | 
      y = ymin + (ymax-ymin) * (double)j/(double)(npts-1); | 
| 85 | 
gezelter | 
1290 | 
 | 
| 86 | 
  | 
  | 
      for (k = 0; k < npts; k++) { | 
| 87 | 
chrisfen | 
1311 | 
        z = zmin + (zmax-zmin) * (double)k/(double)(npts-1); | 
| 88 | 
gezelter | 
1290 | 
 | 
| 89 | 
  | 
  | 
        r = sqrt(x*x + y*y + z*z); | 
| 90 | 
gezelter | 
1300 | 
        costheta = z/r; | 
| 91 | 
gezelter | 
1307 | 
        phi = atan2(y,x); | 
| 92 | 
gezelter | 
1290 | 
 | 
| 93 | 
gezelter | 
1299 | 
        sigmaShape = shape->getSigmaAt(costheta, phi); | 
| 94 | 
  | 
  | 
        sShape = shape->getSAt(costheta, phi); | 
| 95 | 
  | 
  | 
        epsShape = shape->getEpsAt(costheta, phi); | 
| 96 | 
gezelter | 
1290 | 
 | 
| 97 | 
gezelter | 
1299 | 
        // Lorentz-Berthellot combining rules: | 
| 98 | 
gezelter | 
1290 | 
 | 
| 99 | 
gezelter | 
1299 | 
        sigma = (sigmaShape + sigmaProbe) / 2.0; | 
| 100 | 
  | 
  | 
        s = (sShape + sProbe) / 2.0; | 
| 101 | 
  | 
  | 
        eps = sqrt(epsShape * epsProbe); | 
| 102 | 
gezelter | 
1290 | 
 | 
| 103 | 
gezelter | 
1299 | 
        rTerm = s / (r - sigma + s); | 
| 104 | 
  | 
  | 
 | 
| 105 | 
  | 
  | 
        r6 = pow(rTerm, 6); | 
| 106 | 
  | 
  | 
        r12 = r6*r6; | 
| 107 | 
gezelter | 
1290 | 
         | 
| 108 | 
gezelter | 
1299 | 
        energy = 4.0 * eps * (r12 - r6); | 
| 109 | 
  | 
  | 
         | 
| 110 | 
  | 
  | 
        write_size = fwrite(&energy,1,8,outputFile); | 
| 111 | 
  | 
  | 
         | 
| 112 | 
gezelter | 
1290 | 
      } | 
| 113 | 
  | 
  | 
    } | 
| 114 | 
  | 
  | 
  } | 
| 115 | 
gezelter | 
1299 | 
  fclose(outputFile); | 
| 116 | 
gezelter | 
1290 | 
  return(0); | 
| 117 | 
  | 
  | 
} |