void SmallDeformationNonlocalProcess<DisplacementDim>:: assembleWithJacobianConcreteProcess(const double t, GlobalVector const& x, GlobalVector const& xdot, const double dxdot_dx, const double dx_dx, GlobalMatrix& M, GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) { DBUG("AssembleWithJacobian SmallDeformationNonlocalProcess."); std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_table = {std::ref(*_local_to_global_index_map)}; const int process_id = 0; ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; // Call global assembler for each local assembly item. GlobalExecutor::executeSelectedMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, _local_assemblers, pv.getActiveElementIDs(), dof_table, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); b.copyValues(*_nodal_forces); std::transform(_nodal_forces->begin(), _nodal_forces->end(), _nodal_forces->begin(), [](double val) { return -val; }); }
void PhaseFieldProcess<DisplacementDim>::assembleWithJacobianConcreteProcess( const double t, GlobalVector const& x, GlobalVector const& xdot, const double dxdot_dx, const double dx_dx, GlobalMatrix& M, GlobalMatrix& K, GlobalVector& b, GlobalMatrix& Jac) { std::vector<std::reference_wrapper<NumLib::LocalToGlobalIndexMap>> dof_tables; // For the monolithic scheme if (_use_monolithic_scheme) { DBUG("AssembleJacobian PhaseFieldProcess for the monolithic scheme."); dof_tables.emplace_back(*_local_to_global_index_map); } else { // For the staggered scheme if (_coupled_solutions->process_id == 1) { DBUG( "Assemble the Jacobian equations of phase field in " "PhaseFieldProcess for the staggered scheme."); } else { DBUG( "Assemble the Jacobian equations of deformation in " "PhaseFieldProcess for the staggered scheme."); } dof_tables.emplace_back(*_local_to_global_index_map); dof_tables.emplace_back(*_local_to_global_index_map_single_component); } // Call global assembler for each local assembly item. GlobalExecutor::executeMemberDereferenced( _global_assembler, &VectorMatrixAssembler::assembleWithJacobian, _local_assemblers, dof_tables, t, x, xdot, dxdot_dx, dx_dx, M, K, b, Jac, _coupled_solutions); if (!_use_monolithic_scheme && (_coupled_solutions->process_id == 0)) { b.copyValues(*_nodal_forces); std::transform(_nodal_forces->begin(), _nodal_forces->end(), _nodal_forces->begin(), [](double val) { return -val; }); } }