Newer
Older
* Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org)
* Distributed under a Modified BSD License.
* See accompanying file LICENSE.txt or
* http://www.opengeosys.org/project/license
*
*/
#include "CreateVolumetricSourceTerm.h"
#include "BaseLib/ConfigTree.h"
#include "BaseLib/FileTools.h"
#include "MeshLib/Mesh.h"
#include "NumLib/DOF/LocalToGlobalIndexMap.h"
#include "ParameterLib/Utils.h"
#include "VolumetricSourceTerm.h"
namespace ProcessLib
{
std::unique_ptr<SourceTerm> createVolumetricSourceTerm(
BaseLib::ConfigTree const& config, unsigned const bulk_mesh_dimension,
MeshLib::Mesh const& source_term_mesh,
std::unique_ptr<NumLib::LocalToGlobalIndexMap> source_term_dof_table,
std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
unsigned const integration_order, unsigned const shapefunction_order)
{
//! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
auto const type = config.peekConfigParameter<std::string>("type");
if (type == "Line")
{
//! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
config.checkConfigParameter("type", "Line");
DBUG("Constructing LineSourceTerm from config.");
}
else
{
//! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__type}
config.checkConfigParameter("type", "Volumetric");
DBUG("Constructing VolumetricSourceTerm from config.");
}
// source term field name
auto const& volumetric_source_term_parameter_name =
//! \ogs_file_param{prj__process_variables__process_variable__source_terms__source_term__Volumetric__parameter}
config.getConfigParameter<std::string>("parameter");
auto& volumetric_source_term = ParameterLib::findParameter<double>(
volumetric_source_term_parameter_name, parameters, 1,
&source_term_mesh);
// instruction to create documentation for the parameter
//! \ogs_file_param_special{prj__process_variables__process_variable__source_terms__source_term__Line__parameter}
DBUG("Using '{:s}' as volumetric source term parameter.",
volumetric_source_term.name);
return std::make_unique<VolumetricSourceTerm>(
bulk_mesh_dimension, source_term_mesh, std::move(source_term_dof_table),
integration_order, shapefunction_order, volumetric_source_term);