Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

MonteCarlo neutron transport

  1. Jan 16, 2007 #1
    Can anyone hepl me with this?I need some web resource,to start learning from scratch.
  2. jcsd
  3. Jan 16, 2007 #2


    User Avatar
    Staff Emeritus
    Science Advisor

    Try these to get started.

    Introduction to Numerical Simulations in Radiation Transport
    http://iron.nuc.berkeley.edu/%7Ebdwirth/Public/NE155/ne155.html [Broken]
    Notes in pdf
    http://iron.nuc.berkeley.edu/%7Ebdwirth/Public/NE155/schedule.html [Broken]
    Several files are large.

    Brief history of MCNP - Monte Carlo Neutron-Photon

    LANL paper - A Monte Carlo Code for Particle Transport

    Another historical perspective on MC -

    MCNP site
    Last edited by a moderator: May 2, 2017
  4. Jan 16, 2007 #3


    User Avatar
    Science Advisor


    A very good book on Monte Carlo is by Spanier and Gelbard;
    "Monte Carlo Principles and Neutron Transport Problems"

    There's also another short text by Carter and Cashwell.

    Dr. Gregory Greenman
  5. Jan 18, 2007 #4
    Thanks Astronuc and Morbius,I have found the recources very usefull.
  6. Apr 30, 2011 #5
    Hello friends, I am doing simple mc simulation for neutron transport.
    The principle of random simulation is L=-(1/C)*ln(u), where u is a random number from the uniform distribution [0,1), and c is the total cross section (absorbed + scattered). Could you explain me what is the meaning of u, and how can I use it in my simulation?.
    I wrote a simple code in c, which I have to parallel it in MPI:

    #include "mpi.h"
    #include <math.h>
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <stdbool.h>
    #define PI 3.14159265
    int main (int argc, char *argv[])
    /* Simple "srand()" seed: just use "time()" */
    unsigned int iseed = (unsigned int)time(NULL);
    srand (iseed);

    /*c = mean distance between neutron/atom interaction*/
    /*cs = scattering component of c*/
    /*cc = absorbing component of c*/
    float c,cs,cc; /*mean distance between neutron/atom interaction*/
    double h,l; /*thickness of the slab and length travelled*/
    double u; /*uniform random number*/
    double dd,d; /*direction of the neutron [0,pi]*/
    double x; /*position particle in the plate*/
    int n=10; /*number of samples*/
    int bounce; /*boolean value*/
    int i,r,b,t;
    r=0; b=0; t=0; /*reflected,absorbed and transmited neutrons*/
    /*generates randon values between 0 and 1*/
    /*dd = (float) rand()/RAND_MAX;*/
    for (i = 1; i <= n; i++)
    x = 0.0;
    d = 0.0;
    dd = 0.0;
    c = 5.5545;
    cc = 0.0035;
    cs = 5.551;
    h = 10.00;
    bounce = 1;
    do {
    dd = (float) rand()/RAND_MAX;
    /*generates randon values between 0 and 1*/
    u = (float)rand()/RAND_MAX;
    l = -(1/c)*log(u);
    /*lenght travelled by the particle*/
    x = x + l*cos(d);
    //printf("value of x=%2.4f\n",x);
    if (x < 0.0) /*reflected*/
    r = r + 1;
    bounce = 0;
    // printf("reflec r= %d\n",r);
    else {
    if (x >= h) /*transmited*/
    t = t+1;
    bounce = 0;
    // printf("trans t=%d\n",t);
    if (u < cc/c)
    b = b+1;
    bounce = 0;
    // printf("absorbed b=%d\n",b);
    else d = u * PI;
    }/*end first else*/
    } while (bounce = 1);
    } /*end for*/
    printf("Particles reflected = %d\n",dd);
    printf("Particles absorbed = %d\n",b);
    printf("Particles transmittedd = %d\n",b);
    }/*end main*/

    Please any help is more than welcome
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook