/** * \file * \copyright * Copyright (c) 2012-2020, OpenGeoSys Community (http://www.opengeosys.org) * Distributed under a Modified BSD License. * See accompanying file LICENSE.txt or * http://www.opengeosys.org/project/license */ #pragma once #include #include "BaseLib/Logging.h" #include "NumLib/DOF/LocalToGlobalIndexMap.h" #include "LocalDataInitializer.h" namespace ProcessLib { template class LocalAssemblerImplementation, typename LocalAssemblerInterface, typename... ExtraCtorArgs> void createLocalAssemblers( NumLib::LocalToGlobalIndexMap const& dof_table, const unsigned shapefunction_order, std::vector const& mesh_elements, std::vector>& local_assemblers, ExtraCtorArgs&&... extra_ctor_args) { static_assert( GlobalDim == 1 || GlobalDim == 2 || GlobalDim == 3, "Meshes with dimension greater than three are not supported."); // Shape matrices initializer using LocalDataInitializer = LocalDataInitializer; DBUG("Create local assemblers."); // Populate the vector of local assemblers. local_assemblers.resize(mesh_elements.size()); LocalDataInitializer initializer(dof_table, shapefunction_order); DBUG("Calling local assembler builder for all mesh elements."); GlobalExecutor::transformDereferenced( initializer, mesh_elements, local_assemblers, std::forward(extra_ctor_args)...); } /*! Creates local assemblers for each element of the given \c mesh. * * \tparam LocalAssemblerImplementation the individual local assembler type * \tparam LocalAssemblerInterface the general local assembler interface * \tparam ExtraCtorArgs types of additional constructor arguments. * Those arguments will be passed to the constructor of * \c LocalAssemblerImplementation. * * The first two template parameters cannot be deduced from the arguments. * Therefore they always have to be provided manually. */ template