in userSurf.c, coordinates x, y, and z are passed as "long", as well as u,v and w
Code: Select all
void UserSurf(long part, long np, const double *params, double *xmin,
double *xmax, double *ymin, double *ymax, double *zmin,
double *zmax, long *in, double *dmin, long x, long y, long z,
long u, long v, long w)
it seems a bit strange, is it correct?
After changing them to double (also in the header),
and some plotting, everything seems ok.
I would like to use torus surfaces.
The algorithm for test if a point is inside a torus is quite simple.
On the other hand, the computation of the distance to the surface along a given direction needs the solution a fourth order polynomial equation (i.e., it is long and boring).
I tried to use the new surface without implementing the third part of usersurf.c.
If delta-tracking is forced ("set dt 1")
and the torus surface is not used to define "outside" (so that StopAtBoundary is never called)
everything seems fine.
I tried few runs with a simple big torus of 10% enriched U.
Here collision mesh plots for XY plane and several X-normal planes.
Do you think that it might work correctly?
More in general, is it possible to use complex surfaces providing only part 1 and part 2 algorithms in usersurf.c?