I am developing a monte carlo code. As a test run I picked a simple spherical geometry of U235 with a density of 19 g/cc. and radius 10 cm the results were like this

I ran the simulations in openmc using the same geometry,boundary conditions and materials. Openmc’s result was like this

it looks like my simulations kinda showed a close value to the openmc’s batch 1. But then the rest didn’t match. I tried to figure out this thing but failed.

I ran the simulations over and over again but the results were the same. I will really appreciate it if you can show me some insight or tell why the results in batch [1:] were so different from batch 1?

It is probably related to the initial sourse sites. The first few or first few dozen batches should be set to inactive on openmc to let the fissions reach equilibrium for the geometry before tou start taking a keff tally. Generally the larger and more complex the geometry is the more inactives you need.

let’s just say in 1st batch I started with 1000 neutron and total number of fission neutron in the next gen is 1200, resulting k_eff =1.2 . my question is that how do I sample the initial location of the neutrons in 2nd batch?

My understanding is that the initial fission sites of the n+1 batch are derived from batch n, but I couldn’t give specifics as to how that’s done. If you are talking about how to implement this in the code you are developing you could try using the average path length of the neutrons to calculate a sphere of where the next fission sites could be for each of the neutrons in the batch n, and have the program choose randomly where on or in each sphere to place a fission site for the next batch. I ran the simulation you described originally in OpenMC and got K_eff=1.156.

thank you. I think that should work.

I will let you know after I code it

You can also take a look at the methodology documentation on the method of successive generations.