Example #1
0
def testtrackHistory():
    """
    """
    geo = Geometry.Geometry(10,[[-1,1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo,xs, histories=1000)

    n = particle.neutron()
    bank = fissionBank.fissionBank()
    bank.append(n,5)
    newbank = fissionBank.fissionBank()

    print "xs: %s" %xs
    for neut in bank[:1]:
        neut.setRandDirection()
        mark.trackHistory(neut, newbank, 1.0)
Example #2
0
def testtrackHistory():
    """
    """
    geo = Geometry.Geometry(10, [[-1, 1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo, xs, histories=1000)

    n = particle.neutron()
    bank = fissionBank.fissionBank()
    bank.append(n, 5)
    newbank = fissionBank.fissionBank()

    print "xs: %s" % xs
    for neut in bank[:1]:
        neut.setRandDirection()
        mark.trackHistory(neut, newbank, 1.0)
Example #3
0
def makeFBank(parts):
    """
    """
    n = particle.neutron()
    bank = fissionBank.fissionBank()
    bank.append(n,parts)

    return bank
Example #4
0
    def power(self, source):
        """
        power is the main method for this algorithm

        source: Initial guess of fission source
        """
        # Initialize
        self.k = 1
        self.cycle_k = []  # list of eigenvalues per iteration
        self.convergence = []
        self.sd = []  # list of standard deviaiton per iterations
        self.k_inactive = []
        self.vectorStorage = []

        self.source = source
        start = time.time()
        elapsed = 0
        totaltime = 0

        for i in xrange(1, self.inactive + 1):
            self.nextBank = fissionBank.fissionBank()
            self.transport(self.source)
            self.k = self.k * len(self.nextBank) / float(self.histories)
            self.k_inactive.append(self.k)
            totaltime = time.time() - start
            print "iteration: %5i, eigenvalue = %8.6f," % (i, self.k),
            print " time: %8.3f sec" % (totaltime)
            self.source = self.nextBank

        print "------- Starting active cycles -------"
        for self.i in xrange(1, self.active + 1):
            self.nextBank = fissionBank.fissionBank()
            self.transport(self.source)
            self.k = (self.k * len(self.nextBank) / float(self.histories))
            self.cycle_k.append(self.k)
            self.convergence.append(scipy.mean(self.cycle_k))
            self.sd.append((1 / math.sqrt(self.i)) * scipy.std(self.cycle_k))
            totaltime = time.time() - start
            print "iteration: %5i, eigenvalue = %8.6f," % (self.i, self.k),
            print " std.dev = %6.4f, time: %8.3f sec" % (scipy.std(
                self.convergence), totaltime)
            self.source = self.nextBank
            Y = fissionSource.histogramSource(self.source, self.geo)
            Y = Y / sum(Y)
            self.vectorStorage.append(Y)
Example #5
0
def testRoulette():
    """
    """
    geo = Geometry.Geometry(10,[[-1,1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo,xs, histories=1000)

    n = particle.neutron()
    bank = fissionBank.fissionBank()
    bank.append(n,1000000)

    print "weight-in: %s" %(len(bank))
    for i in xrange(len(bank)):
        bank[i] = mark.russianRoulette(bank[i])

    print "\nweight-out: %s, +- %.4f" %(bankWeight(bank),math.sqrt(len(bank)))
Example #6
0
    def main(self):
        bins = 50
        halfwidth=0.5
        histories = 10000
        iterations = 50
        restarts = 5
        geo = Geometry.Geometry(bins, [[-halfwidth,halfwidth]])
        xs = CrossSection.CrossSection(xS=0.5,nu=1.0,xF=0.5,xG=0)
        self.mark = Markov.Markov(geo, xs, histories)
        self.mark.score = self.score
        self.Q = scipy.zeros((bins,0))

        for i in xrange(bins):
            print "I am at %i" %i
            point = scipy.zeros((bins))
            point[i] = 1
            pSource = fissionSource.histogramSource(point,geo)

            self.response = fissionBank.fissionBank()
            self.mark.transport(pSource)
            q = fissionSource.histogramSource(self.response,geo)
            q = q*(1.0/self.mark.histories)
            self.printVector(q)
            self.Q = scipy.column_stack((self.Q,q))

        
        q = scipy.ones(bins)
        q = q/scipy.linalg.norm(q,2)

        print "Calling Deterministic Arnoldi"
        adtm = ArnoldiDtm.Arnoldi(self.Q, iterations, restarts)
        eValues, eVectors = adtm.Arnoldi(q)
        print "Eigenvalues: "
        self.printVector(eValues)
        print "Dominant eigenvector: "
        self.printVector(eVectors[:,-1])
        print "\nAll eigenvectors: "
        self.printM(eVectors)

        Chart = Gnuplot.Gnuplot()
        Chart.title("Histories per 'vector': %i, bins = %i" %(histories, bins))
        
        length = len(eValues)-1
        for i in xrange(5):
            data = Gnuplot.Data(eVectors[:,length-i],with='lines', 
                    title='vector %i' %i)
            Chart.replot(data)
Example #7
0
def testRoulette():
    """
    """
    geo = Geometry.Geometry(10, [[-1, 1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo, xs, histories=1000)

    n = particle.neutron()
    bank = fissionBank.fissionBank()
    bank.append(n, 1000000)

    print "weight-in: %s" % (len(bank))
    for i in xrange(len(bank)):
        bank[i] = mark.russianRoulette(bank[i])

    print "\nweight-out: %s, +- %.4f" % (bankWeight(bank), math.sqrt(
        len(bank)))
Example #8
0
def testtransport():
    """
    """
    geo = Geometry.Geometry(10, [[-1, 1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo, xs, histories=1000)

    bank = fissionBank.fissionBank()
    n = particle.neutron()
    bank.append(n, 10)

    for neut in bank:
        neut.setRandDirection()

    newbank = mark.transport(bank, 1)
    print "leak-left: %.4f, leak-right: %.4f, weight-killed: %.4f" % (
        mark.minLeakage, mark.maxLeakage, mark.wgtKilled)
Example #9
0
def testtransport():
    """
    """
    geo = Geometry.Geometry(10,[[-1,1]])
    xs = CrossSection.CrossSection()
    mark = Markov.Markov(geo,xs, histories=1000)

    bank = fissionBank.fissionBank()
    n = particle.neutron()
    bank.append(n,10)

    for neut in bank:
        neut.setRandDirection()

    newbank = mark.transport(bank, 1)
    print "leak-left: %.4f, leak-right: %.4f, weight-killed: %.4f" %(
            mark.minLeakage, mark.maxLeakage, mark.wgtKilled)
Example #10
0
    def sample(self, histories):
        """
        sample will return a fissionBank object where the neutrons in the bank
        are sampled from self.

        histories: The number of neutron desired in the fissionBank
        """
        n = particle.neutron()
        pdf = self/sum(abs(self))

        fb = fissionBank.fissionBank()
        for j in Alias.gen_discrete(abs(pdf), histories):
            x = random.uniform(self.geo.edges[j], self.geo.edges[j+1])

            if pdf[j] < 0:
                nWeight = -1
            else:
                nWeight = 1
            n.weight = nWeight
            n.position = (x, 0, 0)
            n.setRandDirection()
            fb.append(n)

        return fb
Example #11
0
    def sample(self, histories):
        """
        sample will return a fissionBank object where the neutrons in the bank
        are sampled from self.

        histories: The number of neutron desired in the fissionBank
        """
        n = particle.neutron()
        pdf = self / sum(abs(self))

        fb = fissionBank.fissionBank()
        for j in Alias.gen_discrete(abs(pdf), histories):
            x = random.uniform(self.geo.edges[j], self.geo.edges[j + 1])

            if pdf[j] < 0:
                nWeight = -1
            else:
                nWeight = 1
            n.weight = nWeight
            n.position = (x, 0, 0)
            n.setRandDirection()
            fb.append(n)

        return fb