perf(jacobian-action): major updates to jacobian action application by removing redudant quadrature work. ~5x increase in speed
This commit is contained in:
@@ -102,7 +102,7 @@ namespace mean_field::physics {
|
||||
|
||||
GravitySolution solve_gravity_field(
|
||||
fem::FEM &f,
|
||||
const utils::Args &args,
|
||||
const GravitySolveOptions &options,
|
||||
const mfem::GridFunction &rho,
|
||||
const mfem::GridFunction &displacement
|
||||
) {
|
||||
@@ -132,7 +132,15 @@ namespace mean_field::physics {
|
||||
"Vec_H1 "
|
||||
"space."
|
||||
);
|
||||
MFEM_VERIFY(args.p.max_iters > 0, "Gravity solve requires a positive MINRES iteration limit.");
|
||||
MFEM_VERIFY(
|
||||
std::isfinite(options.relativeTolerance) && options.relativeTolerance >= 0.0,
|
||||
"Gravity solve requires a finite, nonnegative relative tolerance."
|
||||
);
|
||||
MFEM_VERIFY(
|
||||
std::isfinite(options.absoluteTolerance) && options.absoluteTolerance >= 0.0,
|
||||
"Gravity solve requires a finite, nonnegative absolute tolerance."
|
||||
);
|
||||
MFEM_VERIFY(options.maximumIterations > 0, "Gravity solve requires a positive MINRES iteration limit.");
|
||||
|
||||
using form = utils::blocks::gravity_field_form;
|
||||
|
||||
@@ -206,9 +214,9 @@ namespace mean_field::physics {
|
||||
mfem::MINRESSolver minres(f.mesh->GetComm());
|
||||
minres.SetOperator(reduced_operator);
|
||||
minres.SetPreconditioner(reduced_preconditioner);
|
||||
minres.SetRelTol(args.p.rtol);
|
||||
minres.SetAbsTol(args.p.atol);
|
||||
minres.SetMaxIter(args.p.max_iters);
|
||||
minres.SetRelTol(options.relativeTolerance);
|
||||
minres.SetAbsTol(options.absoluteTolerance);
|
||||
minres.SetMaxIter(options.maximumIterations);
|
||||
// minres.SetPrintLevel(args.verbose ? 1 : 0);
|
||||
minres.SetPrintLevel(0);
|
||||
minres.Mult(right_hand_side, gravity_state);
|
||||
@@ -222,4 +230,21 @@ namespace mean_field::physics {
|
||||
|
||||
return solution;
|
||||
}
|
||||
|
||||
GravitySolution solve_gravity_field(
|
||||
fem::FEM &f,
|
||||
const utils::Args &args,
|
||||
const mfem::GridFunction &rho,
|
||||
const mfem::GridFunction &displacement
|
||||
) {
|
||||
return solve_gravity_field(
|
||||
f,
|
||||
GravitySolveOptions{
|
||||
.relativeTolerance = args.p.rtol,
|
||||
.absoluteTolerance = args.p.atol,
|
||||
.maximumIterations = args.p.max_iters
|
||||
},
|
||||
rho, displacement
|
||||
);
|
||||
}
|
||||
} // namespace mean_field::physics
|
||||
|
||||
Reference in New Issue
Block a user