/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Copyright (C) 2012-2020 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . \*---------------------------------------------------------------------------*/ #include "CodedSource.H" #include "fvMesh.H" #include "fvMatrices.H" #include "dynamicCode.H" #include "dynamicCodeContext.H" // * * * * * * * * * * * Protected Static Data Members * * * * * * * * * * * // template const Foam::wordList Foam::fv::CodedSource::codeKeys_ = { "codeAddSup", "codeAddRhoSup", "codeAddAlphaRhoSup", "codeCorrect", "codeInclude", "codeSetValue", "localCode" }; // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // template void Foam::fv::CodedSource::prepare ( dynamicCode& dynCode, const dynamicCodeContext& context ) const { word sourceType(pTraits::typeName); // Set additional rewrite rules dynCode.setFilterVariable("typeName", name_); dynCode.setFilterVariable("TemplateType", sourceType); dynCode.setFilterVariable("SourceType", sourceType + "Source"); // compile filtered C template dynCode.addCompileFile("codedFvOptionTemplate.C"); // copy filtered H template dynCode.addCopyFile("codedFvOptionTemplate.H"); // debugging: make BC verbose // dynCode.setFilterVariable("verbose", "true"); // Info<<"compile " << name_ << " sha1: " // << context.sha1() << endl; // define Make/options dynCode.setMakeOptions ( "EXE_INC = -g \\\n" "-I$(LIB_SRC)/finiteVolume/lnInclude \\\n" "-I$(LIB_SRC)/meshTools/lnInclude \\\n" "-I$(LIB_SRC)/sampling/lnInclude \\\n" "-I$(LIB_SRC)/fvOptions/lnInclude \\\n" + context.options() + "\n\nLIB_LIBS = \\\n" + " -lmeshTools \\\n" + " -lfvOptions \\\n" + " -lsampling \\\n" + " -lfiniteVolume \\\n" + context.libs() ); } template Foam::string Foam::fv::CodedSource::description() const { return "fvOption:: " + name_; } template void Foam::fv::CodedSource::clearRedirect() const { redirectFvOptionPtr_.clear(); } template const Foam::dictionary& Foam::fv::CodedSource::codeDict() const { return coeffs_; } template const Foam::wordList& Foam::fv::CodedSource::codeKeys() const { return codeKeys_; } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // template Foam::fv::CodedSource::CodedSource ( const word& name, const word& modelType, const dictionary& dict, const fvMesh& mesh ) : cellSetOption(name, modelType, dict, mesh) { read(dict); } // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // template Foam::fv::option& Foam::fv::CodedSource::redirectFvOption() const { if (!redirectFvOptionPtr_.valid()) { dictionary constructDict(dict_); constructDict.set("type", name_); redirectFvOptionPtr_ = option::New ( name_, constructDict, mesh_ ); } return redirectFvOptionPtr_(); } template void Foam::fv::CodedSource::correct ( GeometricField& field ) const { if (debug) { Info<< "CodedSource<"<< pTraits::typeName << ">::correct for source " << name_ << endl; } updateLibrary(); redirectFvOption().correct(field); } template void Foam::fv::CodedSource::addSup ( fvMatrix& eqn, const label fieldi ) const { if (debug) { Info<< "CodedSource<"<< pTraits::typeName << ">::addSup for source " << name_ << endl; } updateLibrary(); redirectFvOption().addSup(eqn, fieldi); } template void Foam::fv::CodedSource::addSup ( const volScalarField& rho, fvMatrix& eqn, const label fieldi ) const { if (debug) { Info<< "CodedSource<"<< pTraits::typeName << ">::addSup for source " << name_ << endl; } updateLibrary(); redirectFvOption().addSup(rho, eqn, fieldi); } template void Foam::fv::CodedSource::addSup ( const volScalarField& alpha, const volScalarField& rho, fvMatrix& eqn, const label fieldi ) const { if (debug) { Info<< "CodedSource<"<< pTraits::typeName << ">::addSup for source " << name_ << endl; } updateLibrary(); redirectFvOption().addSup(alpha, rho, eqn, fieldi); } template void Foam::fv::CodedSource::constrain ( fvMatrix& eqn, const label fieldi ) const { if (debug) { Info<< "CodedSource<"<< pTraits::typeName << ">::constrain for source " << name_ << endl; } updateLibrary(); redirectFvOption().constrain(eqn, fieldi); } // ************************************************************************* //