30 #ifndef GRALE_SQUARELENS_H
32 #define GRALE_SQUARELENS_H
34 #include "graleconfig.h"
51 SquareLensParams(
double mass,
double angularWidth) { lensmass = mass; angwidth = angularWidth; }
60 bool write(serut::SerializationInterface &si)
const;
61 bool read(serut::SerializationInterface &si);
63 double lensmass,angwidth;
74 bool getProjectedPotential(
double D_s,
double D_ds,
Vector2D<double> theta,
double *pPotentialValue)
const;
75 bool getAlphaVectorDerivatives(
Vector2D<double> theta,
double &axx,
double &ayy,
double &axy)
const;
77 bool getSuggestedScales(
double *pDeflectionScale,
double *pPotentialScale)
const;
78 bool getCLParameterCounts(
int *pNumIntParams,
int *pNumFloatParams)
const;
79 bool getCLParameters(
double deflectionScale,
double potentialScale,
int *pIntParams,
float *pFloatParams)
const;
80 std::string getCLProgram(std::string &subRoutineName)
const;
81 int getCLSubLenses()
const {
return 1; }
85 static double deflectionFunction1(
double x,
double y) {
return (0.5*y*LN(x*x+y*y)+x*ATAN(y/x)); }
86 static double deflectionFunction2(
double x,
double y) {
return (0.5*x*LN(x*x+y*y)+y*ATAN(x/y)); }
87 static double deriv11(
double x,
double y) {
return ATAN(y/x); }
88 static double deriv22(
double x,
double y) {
return ATAN(x/y); }
89 static double deriv12(
double x,
double y) {
return 0.5*LN(x*x+y*y); }
90 static double potential(
double x,
double y) {
return 0.5*(x*x*ATAN(y/x)+y*y*ATAN(x/y)+x*y*(LN(x*x+y*y))); }
92 double mass,angularwidth,angularwidth2;
93 double angularscale,angularscale2;
94 double relativeangularwidth2;
100 #endif // GRALE_SQUARELENS_H