void LiquidFlowProcess::computeSecondaryVariableConcrete(const double t, GlobalVector const& x, int const process_id) { DBUG("Compute the velocity for LiquidFlowProcess."); GlobalExecutor::executeMemberOnDereferenced( &LiquidFlowLocalAssemblerInterface::computeSecondaryVariable, _local_assemblers, getDOFTable(process_id), t, x, _coupled_solutions); }
void HeatTransportBHEProcess::computeSecondaryVariableConcrete( const double t, GlobalVector const& x, int const process_id) { DBUG("Compute heat flux for HeatTransportBHE process."); ProcessLib::ProcessVariable const& pv = getProcessVariables(process_id)[0]; GlobalExecutor::executeSelectedMemberOnDereferenced( &HeatTransportBHELocalAssemblerInterface::computeSecondaryVariable, _local_assemblers, pv.getActiveElementIDs(), getDOFTable(process_id), t, x, _coupled_solutions); }
void Process::setInitialConditions(const int process_id, double const t, GlobalVector& x) { // getDOFTableOfProcess can be overloaded by the specific process. auto const& dof_table_of_process = getDOFTable(process_id); auto const& per_process_variables = _process_variables[process_id]; for (std::size_t variable_id = 0; variable_id < per_process_variables.size(); variable_id++) { SpatialPosition pos; auto const& pv = per_process_variables[variable_id]; DBUG("Set the initial condition of variable %s of process %d.", pv.get().getName().data(), process_id); auto const& ic = pv.get().getInitialCondition(); auto const num_comp = pv.get().getNumberOfComponents(); for (int component_id = 0; component_id < num_comp; ++component_id) { auto const& mesh_subset = dof_table_of_process.getMeshSubset(variable_id, component_id); auto const mesh_id = mesh_subset.getMeshID(); for (auto const* node : mesh_subset.getNodes()) { MeshLib::Location const l(mesh_id, MeshLib::MeshItemType::Node, node->getID()); pos.setNodeID(node->getID()); auto const& ic_value = ic(t, pos); auto global_index = std::abs(dof_table_of_process.getGlobalIndex(l, variable_id, component_id)); #ifdef USE_PETSC // The global indices of the ghost entries of the global // matrix or the global vectors need to be set as negative // values for equation assembly, however the global indices // start from zero. Therefore, any ghost entry with zero // index is assigned an negative value of the vector size // or the matrix dimension. To assign the initial value for // the ghost entries, the negative indices of the ghost // entries are restored to zero. if (global_index == x.size()) global_index = 0; #endif x.set(global_index, ic_value[component_id]); } } } }
void PhaseFieldProcess<DisplacementDim>::preTimestepConcreteProcess( GlobalVector const& x, double const t, double const dt, const int process_id) { DBUG("PreTimestep PhaseFieldProcess %d.", process_id); _process_data.dt = dt; _process_data.t = t; _process_data.injected_volume = _process_data.t; GlobalExecutor::executeMemberOnDereferenced( &LocalAssemblerInterface::preTimestep, _local_assemblers, getDOFTable(process_id), x, t, dt); }