Skip to content
Snippets Groups Projects
Commit d0e40d82 authored by Elias Pipping's avatar Elias Pipping Committed by Elias Pipping
Browse files

[Cleanup] Rearrange Newmark algorithm

parent b1c2034e
No related branches found
No related tags found
No related merge requests found
...@@ -27,20 +27,47 @@ void Newmark<VectorType, MatrixType, FunctionType, dim>::setup( ...@@ -27,20 +27,47 @@ void Newmark<VectorType, MatrixType, FunctionType, dim>::setup(
tau = _tau; tau = _tau;
problem_rhs = ell; /* We start out with the formulation
Arithmetic::addProduct(problem_rhs, 2.0 / tau, B, v_o);
Arithmetic::addProduct(problem_rhs, B, a_o); B a + A u = ell
Arithmetic::subtractProduct(problem_rhs, A, u_o);
Arithmetic::subtractProduct(problem_rhs, tau / 2.0, A, v_o); Newmark means
// For fixed tau, we'd only really have to do this once a1 = 2/tau ( v1 - v0 ) - a0
Dune::MatrixIndexSet indices(A.N(), A.M()); u1 = tau/2 ( v1 + v0 ) + u0
indices.import(A);
indices.import(B); in summary, we get at time t=1
indices.exportIdx(problem_AB);
B [2/tau ( u1 - u0 ) - a0]
+ A [tau/2 ( v1 + v0 ) + u0] = ell
or
2/tau B v1 + tau/2 A v1
= [2/tau B + tau/2 A] v1
= ell + 2/tau B v0 + B a0
- tau/2 A v0 - A u0
*/
// set up LHS (for fixed tau, we'd only really have to do this once)
{
Dune::MatrixIndexSet indices(A.N(), A.M());
indices.import(A);
indices.import(B);
indices.exportIdx(problem_AB);
}
problem_AB = 0.0; problem_AB = 0.0;
Arithmetic::addProduct(problem_AB, tau / 2.0, A);
Arithmetic::addProduct(problem_AB, 2.0 / tau, B); Arithmetic::addProduct(problem_AB, 2.0 / tau, B);
Arithmetic::addProduct(problem_AB, tau / 2.0, A);
// set up RHS
{
problem_rhs = ell;
Arithmetic::addProduct(problem_rhs, 2.0 / tau, B, v_o);
Arithmetic::addProduct(problem_rhs, B, a_o);
Arithmetic::subtractProduct(problem_rhs, tau / 2.0, A, v_o);
Arithmetic::subtractProduct(problem_rhs, A, u_o);
}
// v_o makes a good initial iterate; we could use anything, though // v_o makes a good initial iterate; we could use anything, though
problem_iterate = 0.0; problem_iterate = 0.0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment