I am developing a monte carlo code for space reactors. I have come across some topics which seem a bit unclear to me.

1.As I was coding the path distance in between two collisions , there will be cases where an incident neutron can enter a new region of totally new material compositions. So sampling the path distance based on the material cross section where the neutron currently is will not be a good idea. I read some of the theory manuals and openmc’s website and came to know to solve this problem, a surface tracking method is used.My question is that for small objects involving less cells surface tracking will do good but If one intends to do the whole core modeling (where the number of cells will be ridiculously large) , will surface tracking cost significant computation time? If I choose to do exponential transformation for variance reduction won’t that problem be more dominant? Is there any better solution to this?

2.How do I apply variance reduction more effectively?

I will appreciate if you can recommend some more text book or literature!