SCPSpheresElastic

This test simulates the deflagration of a solid composite propellant (SCP) consisting of packed AP in an HTPB matrix. It combines the phase field method for interface tracking with thermal transport and finite-deformation elasticity.

The following full-length simulation results from running the input file directly with no modification. On eight processors, it should take about one hour to run.

../_images/combine.gif

Notes

  • The domain is 0.0005 x 0.0005; however, the sphere packing file is defined over a larger domain (0.001 x 0.001).

  • The parameters are set to be as course as possible in both space and time without causing instability or solver divergence. This means that the results may or may not be completely accurate. It also may mean that you see some jitter or spurious fluctuation in the elastic solution (especially in the stress and strain fields.) This should go away with increased resolution, so it is recommended that you increase the AMR level and decrease the timestep in order to get properly converged results.

  • The parameter elastic.solver.fixed_iter replaces elastic.solver.max_iter. This allows the solution to continue even if full convergence is not attained. However, as long as it is inside the Newton solver, the NR convergence check will prevent the solver from continuing unless it is within tolerance.

References

  • Maycon Meier and Brandon Runnels. Finite kinematics diffuse interface mechanics coupled to solid composite propellant deflagration. Computer Methods in Applied Mechanics and Engineering, 427:117040, 2024.

  • Maycon Meier, Emma Schmidt, Patrick Martinez, J Matt Quinlan, and Brandon Runnels. Diffuse interface method for solid composite propellant ignition and regression. Combustion and Flame, 259:113120, 2024.

2d-serial-short

Two-dimensional

Serial

Validated using check script

./bin/alamo-2d-g++ tests/SCPSpheresElastic/input  stop_time="0.001" temp.ic.type=""constant"" temp.ic.constant.value="500"

2d-parallel-long

Two-dimensional

Parallel (8 procs)

Validated using check script

mpiexec -np 8 ./bin/alamo-2d-g++ tests/SCPSpheresElastic/input  stop_time="0.02" temp.ic.type=""constant"" temp.ic.constant.value="500"
Input file (../../tests/SCPSpheresElastic/input)
#@
#@ [2d-serial-short]
#@ dim=2
#@ nprocs=1
#@ args = stop_time=0.001
#@ args = temp.ic.type="constant"
#@ args = temp.ic.constant.value=500
#@ check-file = reference/2d-serial-short.dat
#@
#@ [2d-parallel-long]
#@ dim=2
#@ nprocs=8
#@ args = stop_time=0.02
#@ args = temp.ic.type="constant"
#@ args = temp.ic.constant.value=500
#@ check-file = reference/2d-parallel-long.dat
#@

alamo.program = flame
plot_file = tests/SCPSpheresElastic/output
amr.plot_int = 100
amr.max_level = 5
amr.blocking_factor = 4
amr.base_regrid_int = 100
amr.grid_eff = 1
amr.refinement_criterion = 0.1
amr.refinement_criterion_temp = 10.0
amr.phi_refinement_criterion = 0.5
amr.cell.all = 1

amr.n_cell = 8 8 8
geometry.prob_lo = 0.0 0.0 0.0
geometry.prob_hi = 0.0005 0.0005 0.0005
amr.max_level = 4

geometry.is_periodic = 0 0 0
timestep = 0.000001
stop_time = 0.11

pf.eps = 0.000001 
pf.lambda = 0.001
eta.ic.type = constant
eta.ic.constant.value=1.0
phi.ic.type = psread
phi.ic.psread.filename = tests/SCPSpheresElastic/2d.xyzr
phi.ic.psread.eps = 1.13e-5 
phi.zeta_0 = 1.13e-5

pf.kappa = 1.0
pf.gamma = 0.02726
pf.w1 = 1.0
pf.w12 = 2.0
pf.w0 = 0.0
pf.eta.bc.type.xlo = dirichlet
pf.eta.bc.type.xhi = dirichlet
pf.eta.bc.type.ylo = neumann
pf.eta.bc.type.yhi = neumann
pf.eta.bc.type.zlo = neumann
pf.eta.bc.type.zhi = neumann
pf.eta.bc.val.xlo = 0.0
pf.eta.bc.val.xhi = 1.0
pf.eta.bc.val.ylo = 0.0
pf.eta.bc.val.yhi = 0.0
pf.eta.bc.val.zlo = 0.0
pf.eta.bc.val.zhi = 0.0

thermal.on = 1
thermal.bound = 300.0
thermal.T_fluid = 600.0
thermal.m_ap = 1.45e5
thermal.m_htpb = 1.04e2
thermal.E_ap = 11000.0
thermal.E_htpb = 7500.0
thermal.rho_ap = 1950.0
thermal.rho_htpb = 920.0
thermal.k_ap = 0.4186e0
thermal.k_htpb = 0.13
thermal.cp_ap = 1297.9
thermal.cp_htpb = 2418.29
thermal.temp.bc.type.xlo = neumann
thermal.temp.bc.type.xhi = neumann
thermal.temp.bc.type.ylo = neumann
thermal.temp.bc.type.yhi = neumann
thermal.temp.bc.type.zlo = neumann
thermal.temp.bc.type.zhi = neumann
thermal.temp.bc.val.xlo = 0.0
thermal.temp.bc.val.xhi = 0.0
thermal.temp.bc.val.ylo = 0.0
thermal.temp.bc.val.yhi = 0.0
thermal.temp.bc.val.zlo = 0.0
thermal.temp.bc.val.zhi = 0.0
thermal.hc = 1.0e7
thermal.mlocal_ap = 1000.0
thermal.mlocal_htpb = 5000.0
thermal.mlocal_comb = 0.0

pressure.P = 4.0
pressure.mob_ap = 1
pressure.a1 = 1.114
pressure.a2 = 0.46
pressure.a3 = 2.797
pressure.b1 = 0.323
pressure.b2 = 0.42
pressure.b3 = 0.3225
pressure.c1 = -0.09906
laser.ic.type = constant
laser.ic.constant.value = 1.0e6

elastic.on = 1
elastic.interval = 100
Tref = 300
model_ap.mu = 140
model_ap.kappa = 150
model_ap.eps0 = 2.217e-5 0.0 0.0 0.0 2.217e-5 0.0 0.0 0.0 2.217e-5
model_htpb.mu = 8
model_htpb.kappa = 210
model_htpb.eps0 = 51e-7 0.0 0.0 0.0 51e-7 0.0 0.0 0.0 51e-7

elastic.solver.verbose = 4
elastic.solver.fixed_iter = 500
elastic.solver.nriters = 200
elastic.solver.nrtolerance = 1E-5
elastic.print_model = 1
elastic.print_residual = 1

elastic.bc.type = constant
elastic.bc.constant.type.xlo = trac trac 
elastic.bc.constant.type.ylo = trac disp 
elastic.bc.constant.type.yhi = trac disp 
elastic.bc.constant.type.xloylo = trac disp 
elastic.bc.constant.type.xloyhi = trac disp 


small = 1E-4
amr.node.all = 1
amr.ghost_cells = 2

elastic.traction = 0.0