Adding new surface types

Suggest new ideas here
Post Reply
User avatar
Jaakko Leppänen
Site Admin
Posts: 2179
Joined: Thu Mar 18, 2010 10:43 pm
Security question 2: 0
Location: Espoo, Finland
Contact:

Adding new surface types

Post by Jaakko Leppänen » Wed Apr 04, 2012 10:33 am

Adding new surface types can now (since update 2.1.4) be done with changes in a single subroutine "usersurf.c". The file consists of three parts that are explained by the comments in the source code. The idea is that the user can add new source routines in the code, and use them in the calculation with surface type of the form:

Code: Select all

surf <name> usr <param1> <param2> ...
Once the routines have been developed and tested, I can copy the source code in the actual surface routines and assign a new name for the surface. This should significantly simplify the development of new surface types.
- Jaakko

jesse.johns
Posts: 114
Joined: Wed Apr 20, 2011 5:19 am

Re: Adding new surface types

Post by jesse.johns » Sun Apr 08, 2012 9:31 pm

With this new capability, will it be possible to adjust the sizing ratio of the shells in pins when account for self-shielding affects? In other words, to make a different pin cell, say... pin_c that when the shells are applied for burnup they adhere to a different thickness ratio?

User avatar
Jaakko Leppänen
Site Admin
Posts: 2179
Joined: Thu Mar 18, 2010 10:43 pm
Security question 2: 0
Location: Espoo, Finland
Contact:

Re: Adding new surface types

Post by Jaakko Leppänen » Tue Apr 10, 2012 5:04 pm

Not really, the new subroutine simply allows you to create new surface types that can be used for defining cells.

What kind of sub-division do you have in mind?
- Jaakko

jesse.johns
Posts: 114
Joined: Wed Apr 20, 2011 5:19 am

Re: Adding new surface types

Post by jesse.johns » Tue Apr 10, 2012 9:02 pm

Hi,

I didn't have anything in mind particularly, just curious if that capability would exist if the need arose for optically "thick" elements.

Jesse

orca.blu
Posts: 59
Joined: Wed Apr 20, 2011 1:39 pm

Re: Adding new surface types

Post by orca.blu » Sun Dec 23, 2012 3:27 pm

Hi,

first question

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.
sph_long.png
sph_long.png (2.04 KiB) Viewed 2045 times
second question

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.
tr1.png
tr1.png (39.68 KiB) Viewed 2045 times
tr2.png
tr2.png (57.57 KiB) Viewed 2045 times
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?

Thanks

Merry Christmas
Manuele Aufiero
LPSC/IN2P3/CNRS Grenoble

User avatar
Jaakko Leppänen
Site Admin
Posts: 2179
Joined: Thu Mar 18, 2010 10:43 pm
Security question 2: 0
Location: Espoo, Finland
Contact:

Re: Adding new surface types

Post by Jaakko Leppänen » Mon Dec 24, 2012 11:50 am

Ooops... The variable type should definitely be double. Thanks for pointing this out.

I think providing just the point test (part 2) should work with 100% delta-tracking mode, but it cat really limit the performance of the code. Also, you cannot use the surface current detector with the surface, or use it to define the outermost boundary of the geometry.

Part 1 of the routine is needed to define the maximum x-, y- and z- coordinates of the geometry, which are used by the source sampling routine, and also to define wheter the geometry is 2- or 3-dimensional. If the surface is completely enclosed by another surface for which these are available, there should be no problem either.

Have you considered solving the distance by first making a coordinate transformation to a toroidal system? I haven't looked at the problem closer, but to me it seems that you could get rid of one of the three coordinates. Or you could feed the problem to Mathematica...
- Jaakko

orca.blu
Posts: 59
Joined: Wed Apr 20, 2011 1:39 pm

Re: Adding new surface types

Post by orca.blu » Thu Dec 27, 2012 4:17 pm

thank you Jaakko,

actually I did not even know that there was a toroidal coordinate system.
I will try to understand if there is an easy way to solve the problem.
Otherwise, I found an old MCNP manual in which is more or less explained how to deal with the problem of the torus and the solution of the quartic equation.

For the immediate, I'm ok with 100% dt.
Manuele Aufiero
LPSC/IN2P3/CNRS Grenoble

Post Reply