GlobalVector const& TESProcess::computeVapourPartialPressure( GlobalVector const& x, NumLib::LocalToGlobalIndexMap const& dof_table, std::unique_ptr<GlobalVector>& result_cache) { assert(&dof_table == _local_to_global_index_map.get()); auto const& dof_table_single = getSingleComponentDOFTable(); result_cache = MathLib::MatrixVectorTraits<GlobalVector>::newInstance( {dof_table_single.dofSizeWithoutGhosts(), dof_table_single.dofSizeWithoutGhosts(), &dof_table_single.getGhostIndices(), nullptr}); GlobalIndexType const nnodes = _mesh.getNumberOfNodes(); for (GlobalIndexType node_id = 0; node_id < nnodes; ++node_id) { auto const p = NumLib::getNodalValue(x, _mesh, dof_table, node_id, COMPONENT_ID_PRESSURE); auto const x_mV = NumLib::getNodalValue(x, _mesh, dof_table, node_id, COMPONENT_ID_MASS_FRACTION); auto const x_nV = Adsorption::AdsorptionReaction::getMolarFraction( x_mV, _assembly_params.M_react, _assembly_params.M_inert); // TODO Problems with PETSc? (local vs. global index) result_cache->set(node_id, p * x_nV); } return *result_cache; }
void Process::finishNamedFunctionsInitialization() { _named_function_caller.applyPlugs(); for (auto const& named_function : _named_function_caller.getNamedFunctions()) { auto const& name = named_function.getName(); _secondary_variables.addSecondaryVariable( name, {1, BaseLib::easyBind( &GlobalVectorFromNamedFunction::call, GlobalVectorFromNamedFunction( _named_function_caller.getSpecificFunctionCaller(name), _mesh, getSingleComponentDOFTable(), _secondary_variable_context)), nullptr}); } }