From: Wolfgang Bangerth Date: Thu, 8 Aug 2013 19:58:46 +0000 (+0000) Subject: Submit the essence of the last bit of the patch by Oleh Krehel, now that I actually... X-Git-Tag: v8.1.0~1113 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0924f773536fd6366842b404ffd339dbce2d0d3b;p=dealii.git Submit the essence of the last bit of the patch by Oleh Krehel, now that I actually understand it. Explain it in a comment. git-svn-id: https://svn.dealii.org/trunk@30259 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/examples/step-25/step-25.cc b/deal.II/examples/step-25/step-25.cc index af5ebd5d29..794e09f870 100644 --- a/deal.II/examples/step-25/step-25.cc +++ b/deal.II/examples/step-25/step-25.cc @@ -358,6 +358,21 @@ namespace Step25 system_matrix.add (-std::pow(time_step*theta,2), tmp_matrix); // Then, we compute the right-hand side vector $-F_h(U^{n,l})$. + // + // We have to first build up the matrix + // $M+k^2\theta^2 A$, which we put into tmp_matrix + // use it to compute a contribution to the right hand side vector, and + // then build the matrix $M-k^2\theta(1-\theta) A$. We could + // build it in the same way as before, i.e., using code like + // @code + // tmp_matrix.copy_from (mass_matrix); + // tmp_matrix.add (-std::pow(time_step,2)*theta*(1-theta), laplace_matrix); + // @endcode + // but we can save the expense of the copy_from operation + // by starting from what is already in the tmp_matrix + // variable (i.e., $M+k^2\theta^2 A$) and subtracting from this + // $k^2\theta^2 A+k^2\theta(1-\theta) A=k^2\theta A$ when computing the + // second matrix: system_rhs = 0; tmp_matrix.copy_from (mass_matrix); @@ -367,8 +382,8 @@ namespace Step25 tmp_matrix.vmult (tmp_vector, solution); system_rhs += tmp_vector; - tmp_matrix.copy_from (mass_matrix); - tmp_matrix.add (-std::pow(time_step,2)*theta*(1-theta), laplace_matrix); + + tmp_matrix.add(-std::pow(time_step, 2) * theta, laplace_matrix); tmp_matrix.vmult (tmp_vector, old_solution); system_rhs -= tmp_vector;