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)
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)
def makeFBank(parts): """ """ n = particle.neutron() bank = fissionBank.fissionBank() bank.append(n,parts) return bank
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)
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)))
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)
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)))
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)
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)
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
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