diff --git a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp index 6e4a495deae1ece2be6f7cab8d07dffd0de53545..b334ce2edcec5ae35c59235be6b9402a52073d74 100644 --- a/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp +++ b/ProcessLib/ComponentTransport/ComponentTransportProcess.cpp @@ -278,13 +278,10 @@ void ComponentTransportProcess::solveReactionEquation( matrix_specification, matrix_id); auto& b = NumLib::GlobalVectorProvider::provider.getVector(matrix_specification); - auto& rhs = - NumLib::GlobalVectorProvider::provider.getVector(matrix_specification); M.setZero(); K.setZero(); b.setZero(); - rhs.setZero(); GlobalExecutor::executeSelectedMemberOnDereferenced( &ComponentTransportLocalAssemblerInterface::assembleReactionEquation, @@ -296,17 +293,30 @@ void ComponentTransportProcess::solveReactionEquation( MathLib::finalizeMatrixAssembly(K); MathLib::finalizeVectorAssembly(b); - MathLib::LinAlg::scale(M, 1.0 / dt); - MathLib::LinAlg::matMultAdd(M, *x[process_id], b, rhs); + auto& A = NumLib::GlobalMatrixProvider::provider.getMatrix( + matrix_specification, matrix_id); + auto& rhs = + NumLib::GlobalVectorProvider::provider.getVector(matrix_specification); + + A.setZero(); + rhs.setZero(); + + // compute A + MathLib::LinAlg::copy(M, A); + MathLib::LinAlg::aypx(A, 1.0 / dt, K); + + // compute rhs + MathLib::LinAlg::matMult(M, *x[process_id], rhs); + MathLib::LinAlg::aypx(rhs, 1.0 / dt, b); using Tag = NumLib::NonlinearSolverTag; using EqSys = NumLib::NonlinearSystem<Tag::Picard>; auto& equation_system = static_cast<EqSys&>(ode_sys); - equation_system.applyKnownSolutionsPicard(M, rhs, *x[process_id]); + equation_system.applyKnownSolutionsPicard(A, rhs, *x[process_id]); auto& linear_solver = _process_data.chemical_solver_interface->linear_solver; - linear_solver.solve(M, rhs, *x[process_id]); + linear_solver.solve(A, rhs, *x[process_id]); NumLib::GlobalMatrixProvider::provider.releaseMatrix(M); NumLib::GlobalMatrixProvider::provider.releaseMatrix(K);