197 double slope, intercept;
198 for (
size_t i=0; i<
GetN(); i++) {
199 if (
C2[i]-pc.PointContactH<
dC2m[i] &&
C2[i]>pc.PointContactH
200 &&
C1[i]<(pc.PointContactR+1e-4*
mm) &&
C1[i]>-(pc.PointContactR+1e-4*
mm)) {
201 dC2m[i]=
C2[i]-pc.PointContactH;
206 if (
C1[i]-pc.PointContactR<
dC1m[i]&&
C1[i]>pc.PointContactR
207 &&
C2[i]<pc.PointContactH+1e-4*
mm) {
208 dC1m[i]=
C1[i]-pc.PointContactR;
211 if (-
C1[i]-pc.PointContactR<
dC1p[i]&&
C1[i]<-pc.PointContactR
212 &&
C2[i]<pc.PointContactH+1e-4*
mm) {
213 dC1p[i]=-
C1[i]-pc.PointContactR;
216 if (
C1[i]-pc.BoreR>0&&
C1[i]-pc.BoreR<
dC1m[i]
217 &&
C2[i]>pc.Height-pc.BoreH-1e-4*
mm){
221 if (-
C1[i]-pc.BoreR>0&&-
C1[i]-pc.BoreR<
dC1p[i]
222 &&
C2[i]>=pc.Height-pc.BoreH-1e-4*
mm){
227 if (pc.Height-pc.BoreH-1e-4*
mm-
C2[i]>0 && pc.Height-pc.BoreH-
C2[i]<
dC2p[i]
228 &&
C1[i]>-pc.BoreR-1e-4*
mm &&
C1[i]<pc.BoreR+1e-4*
mm) {
229 dC2p[i]=pc.Height-pc.BoreH-
C2[i];
234 if (pc.WrapAroundR-
C1[i]<
dC1p[i]&&
C1[i]<pc.WrapAroundR&&i<
N1)
235 dC1p[i]=pc.WrapAroundR-
C1[i];
236 if (pc.WrapAroundR+
C1[i]<
dC1p[i]&&
C1[i]>-pc.WrapAroundR&&i<
N1)
237 dC1m[i]=pc.WrapAroundR+
C1[i];
239 slope=-pc.CornerH/pc.CornerW;
240 intercept=pc.Height-slope*(pc.Radius-pc.CornerW);
241 if (
C1[i]+
C2[i]/slope-intercept/slope>0 &&
242 C1[i]+
C2[i]/slope-intercept/slope<
dC1m[i] &&
243 C2[i]>pc.Height-pc.CornerH)
244 dC1m[i]=
C1[i]+
C2[i]/slope-intercept/slope;
245 if (-
C1[i]+
C2[i]/slope-intercept/slope>0 &&
246 -
C1[i]+
C2[i]/slope-intercept/slope<
dC1p[i] &&
247 C2[i]>pc.Height-pc.CornerH)
248 dC1p[i]=-
C1[i]+
C2[i]/slope-intercept/slope;
249 if((
C1[i]*slope+intercept)-
C2[i]<
dC2p[i] &&
250 C1[i]>pc.Radius-pc.CornerW&&(
C1[i]*slope+intercept)-
C2[i]>0)
251 dC2p[i]=(
C1[i]*slope+intercept)-
C2[i];
252 if((-
C1[i]*slope+intercept)-
C2[i]<
dC2p[i] &&
253 C1[i]<-pc.Radius+pc.CornerW&&(-
C1[i]*slope+intercept)-
C2[i]>0)
254 dC2p[i]=(-
C1[i]*slope+intercept)-
C2[i];
257 slope=pc.TaperH/pc.TaperW;
258 intercept=-(pc.Radius-pc.TaperW)*slope;
259 if (
C2[i]-(slope*
C1[i]+intercept)<
dC2m[i]
260 &&
C2[i]-(slope*
C1[i]+intercept)>0 && i>=
N1-1)
261 dC2m[i]=
C2[i]-(slope*
C1[i]+intercept );
262 if ((
C2[i]-intercept)/slope-
C1[i]<
dC1p[i]
263 && (
C2[i]-intercept)/slope-
C1[i]>0)
264 dC1p[i]=(
C2[i]-intercept)/slope-
C1[i];
265 if (
C2[i]-(-slope*
C1[i]+intercept)<
dC2m[i]
266 &&
C2[i]-(-slope*
C1[i]+intercept)>0 && i>=
N1-1)
267 dC2m[i]=
C2[i]-(-slope*
C1[i]+intercept);
268 if (
C1[i]+(
C2[i]-intercept)/slope<
dC1m[i]
269 &&
C1[i]+(
C2[i]-intercept)/slope>0)
270 dC1m[i]=
C1[i]+(
C2[i]-intercept)/slope;
272 if (pc.BoreTaperW>0) {
273 slope=pc.BoreTaperH/pc.BoreTaperW;
274 intercept=pc.Height-slope*(pc.BoreR+pc.BoreTaperW);
275 if (
C1[i]-
C2[i]/slope+intercept/slope<
dC1m[i] &&
276 C2[i]>pc.Height-pc.BoreTaperH &&
277 C1[i]-
C2[i]/slope+intercept/slope>0)
278 dC1m[i]=
C1[i]-
C2[i]/slope+intercept/slope;
279 if (-
C1[i]-
C2[i]/slope+intercept/slope>0 &&
280 -
C1[i]-
C2[i]/slope+intercept/slope<
dC1p[i] &&
281 C2[i]>pc.Height-pc.BoreTaperH)
282 dC1p[i]=-
C1[i]-
C2[i]/slope+intercept/slope;
283 if((
C1[i]*slope+intercept)-
C2[i]<
dC2p[i] &&
284 C1[i]<pc.BoreR+pc.BoreTaperW &&
C1[i]>pc.BoreR
285 && (
C1[i]*slope+intercept)-
C2[i]>0)
286 dC2p[i]=(
C1[i]*slope+intercept)-
C2[i];
287 if((-
C1[i]*slope+intercept)-
C2[i]<
dC2p[i] &&
288 C1[i]>-pc.BoreR-pc.BoreTaperW &&
C1[i]<-pc.BoreR
289 && (-
C1[i]*slope+intercept)-
C2[i]>0)
290 dC2p[i]=(-
C1[i]*slope+intercept)-
C2[i];
std::vector< double > dC1m
step length to previous point alone C1
std::vector< bool > fIsFixed
true if field values are fixed
size_t N1
number of points along the 1st coordinate
std::vector< double > C2
the 2nd coordinates of the points
std::vector< double > dC1p
step length to next point alone C1
size_t GetN()
total number of points
std::vector< double > dC2m
step length to previous point along C2
static const double mm
minimeter
std::vector< double > dC2p
step length to next point along C2
std::vector< double > Vp
potential at each point
std::vector< double > C1
the 1st coordinates of the points