62 const double sPos = bunch->
get_sPos();
63 std::pair<double, double> meshInfo;
65 const double &meshSpacing = meshInfo.second;
66 const double &meshOrigin = meshInfo.first + 0.5 * meshSpacing;
83 double angleOfSlice = 0.0;
84 double pathLengthOfSlice = minPathLength + i * meshSpacing;
104 for (
unsigned int i = 0; i < bunch->
getLocalNum(); ++i) {
106 double distanceToOrigin = (R(2) - meshOrigin) / meshSpacing;
108 unsigned int indexz = (
unsigned int)
floor(distanceToOrigin);
109 double leverz = distanceToOrigin - indexz;
112 bunch->
Ef[i](2) += (1. - leverz) *
Ez_m[indexz] + leverz *
Ez_m[indexz + 1];
116 static std::string oldBendName;
117 static unsigned long counter = 0;
122 bool print_criterion = (counter + 1) % every == 0;
123 if (print_criterion) {
124 static unsigned int file_number = 0;
125 if (counter == 0) file_number = 0;
127 std::stringstream filename_str;
128 filename_str <<
bendName_m <<
"-CSRWake" << std::setw(5) << std::setfill(
'0') << file_number <<
".txt";
134 std::ofstream csr(fname);
135 csr << std::setprecision(8);
138 csr << i *meshSpacing <<
"\t"
144 msg <<
"** wrote " << fname <<
endl;
185 const double meshSpacingsup = std::pow(meshSpacing, -1. / 3.);
186 double SlippageLength = std::pow(angleOfSlice, 3) *
bendRadius_m / 24.;
187 double relativeSlippageLength = SlippageLength / meshSpacing;
188 if (relativeSlippageLength > sliceNumber) {
195 double dx1 = std::pow(sliceNumber, 2. / 3.);
196 double dx2 = std::pow(sliceNumber, 5. / 3.);
197 double dx3 = std::pow(sliceNumber - 1., 5. / 3.);
198 Ez_m[sliceNumber] += 0.3 * meshSpacingsup *
dlineDensitydz_m[0] * (5. * dx1 - 3. * dx2 + 3. * dx3);
199 for (
unsigned int j = 1; j < sliceNumber; ++ j) {
202 dx3 = std::pow(sliceNumber - j - 1., 5. / 3.);
207 }
else if (relativeSlippageLength < 1) {
210 if (4.0 * relativeSlippageLength <= 1) {
215 if (4.0 * relativeSlippageLength < sliceNumber) {
217 int j = sliceNumber -
static_cast<int>(std::floor(4.0 * relativeSlippageLength));
218 double frac = 4.0 * relativeSlippageLength - (sliceNumber - j);
223 Ez_m[sliceNumber] += (relativeSlippageLength *
lineDensity_m[sliceNumber - 1] + (1. - relativeSlippageLength) *
lineDensity_m[sliceNumber]) / std::pow(SlippageLength, 1. / 3.);
232 if (4. * relativeSlippageLength < sliceNumber) {
234 int j = sliceNumber -
static_cast<int>(std::floor(4. * relativeSlippageLength));
235 double frac = 4. * relativeSlippageLength - (sliceNumber - j);
240 int j = sliceNumber -
static_cast<int>(std::floor(SlippageLength / meshSpacing));
241 double frac = relativeSlippageLength - (sliceNumber - j);
244 double dx1 = std::pow(sliceNumber - j + frac, 2. / 3.);
245 double dx2 = std::pow(sliceNumber - j, 2. / 3.);
246 double dx3 = std::pow(sliceNumber - j + frac, 5. / 3.);
247 double dx4 = std::pow(sliceNumber - j, 5. / 3.);
254 dx3 = std::pow(sliceNumber - j - 1., 5. / 3.);
256 for (
unsigned int k = j + 1; k < sliceNumber; ++ k) {
259 dx3 = std::pow(sliceNumber - k - 1., 5. / 3.);
265 Ez_m[sliceNumber] *= prefactor;
278 if (Ds_max2 / meshSpacing < sliceNumber) {
279 j = sliceNumber -
static_cast<int>(
floor(Ds_max2 / meshSpacing));
280 frac = Ds_max2 / meshSpacing - (sliceNumber - j);
286 if (Ds_max / meshSpacing < sliceNumber) {
287 j = sliceNumber -
static_cast<int>(
floor(Ds_max / meshSpacing));
288 frac = Ds_max / meshSpacing - (sliceNumber - j);
297 if (Ds_max / meshSpacing < sliceNumber) {
309 for (
unsigned int l = sliceNumber - k + 1; l < sliceNumber; ++ l) {
317 Psi_m[sliceNumber] =
calcPsi(
Psi_m[sliceNumber], angleOverlap, meshSpacing / 4.0);
322 Ez_m[sliceNumber] *= prefactor;