swh:1:snp:f521c49ab17ef7db6ec70b2430e1ed203f50383f
Raw File
Tip revision: 08bcb2e967f21f42495eb2a32eac6de74fc74d99 authored by Dmitry Yu. Naumov on 07 July 2021, 06:38:34 UTC
Merge branch 'UseIntForGlobalDim' into 'master'
Tip revision: 08bcb2e
CreateVolumetricSourceTerm.cpp
/**
 * \file
 * \copyright
 * 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);
}

}  // namespace ProcessLib
back to top