<< Click to Display Table of Contents >> criticality |
{ CRITICALITY.PDE
This problem demonstrates the use of FlexPDE in the solution of optimization problems.
FlexPDE implements the Nelder-Mead "amoeba" algorithm to minimize or maximize an objective function.
This is not the method of greatest speed, but it is very flexible, and allows FlexPDE to perform
optimization searches in a wide range of problem environments.
A simple model of nuclear criticality can be made using a Fick's-Law diffusion equation for single-velocity neutrons.
In this model, the criticality relation can be stated as
Div(D*grad(N)) -sigmar*N + (1/k)*nper*mix*sigmaf*N = 0,
where
N = neutron density
beta = Fick's Law proportionality factor
D = beta/sigmat
k = 1/lambda = "criticality eigenvalue"
mix = fractional content of fissionable material in the source region
nper = number of neutrons produced at each absorption
sigmat = transport cross-section = 1/(transport mean free path)
sigmar = removal cross-section
sigmaf = fission cross section
The system becomes critical when lambda = 1.
}
title 'Nuclear Criticality'
variables
N { neutron Density }
select
modes=1 { calculate only the smallest eigenvalue }
cell_limit=2000
definitions
source { name the material parameters, values will be declared by region }
sigmat { transport cross-section }
sigmar { removal cross-section }
sigmaf { fission cross-section }
beta = 1/3 { Fick's Law proportionality factor }
nper = 2 { number of neutrons produced per fission }
convergence = (lambda-1)^2 { optimization parameter: a function with a smooth minimum at lambda=1 }
{ Here is the optimization request:
Modify "mix" until the eigenvalue "lambda" is 1.0
"mix" starts at 0.05, and the initial range of "mix" samples is 0.001
Iteration continues until "convergence" is less than OPTERRLIM (default 2e-6) or "mix" is bracketed to less than OPTERRLIM*mix. }
minimize(convergence) vs mix (0.05,0.001)
equations { The neutron density equation: }
N : div(beta/sigmat*grad(N)) + source - sigmar*N + lambda*mix*nper*sigmaf*N = 0
boundaries
region 1 { the bounding region is tenuous }
source=0 sigmar=1 sigmat=2 sigmaf=0
start(0,0)
natural(N)= 0
line to (10,0)
line to (10,10) to (0,10)
line to close
region 2 { this region has fission }
source=0 sigmar=0.1 sigmat=2 sigmaf=1
start(2,2)
line to (8,2) to (8,8) to (2,8) to close
monitors
contour(N) as "Neutron Density"
history(lambda,mix, convergence) report(convergence) report(lambda) report(mix)
plots
grid(x,y)
contour(N) as 'Neutron Density' report(mix) report(lambda) report(mix)
surface(N) as 'Neutron Density'
vector(-beta/sigmat*grad(N)) as 'Neutron Flux'
contour(mix*sigmaf*nper*N) as "Fission Source"
contour(sigmar*N) as "Neutron Absorption"
history (lambda,mix,convergence) report(convergence) report(lambda) report(mix)
history (lambda) vs mix
end