functionObject,fvModel,fvConstraint: Added automatic library loading

If the libs entry is not provided and the name of the library containing the
functionObject, fvModel or fvConstraint corresponds to the type specified the
corresponding library is automatically loaded, e.g. to apply the
VoFTurbulenceDamping fvModel to an incompressibleVoF simulation the following
will load the libVoFTurbulenceDamping.so library automatically and instantiate
the fvModel:

turbulenceDamping
{
    type            VoFTurbulenceDamping;

    delta           1e-4;
}
This commit is contained in:
Henry Weller
2023-06-01 20:31:16 +01:00
parent 2561212f56
commit 0b8c17d8c1
33 changed files with 132 additions and 143 deletions

View File

@ -34,8 +34,6 @@ Usage
{
type VoFCavitation;
libs ("libcompressibleVoFCavitation.so");
model SchnerrSauer;
KunzCoeffs

View File

@ -55,8 +55,6 @@ Usage
{
type VoFTurbulenceDamping;
libs ("libcompressibleVoFTurbulenceDamping.so");
// Interface momentumTransport damping length scale
// This is a required input as described in section 3.3 of the paper
delta 1e-4;

View File

@ -17,11 +17,5 @@ LIB_LIBS = \
-lfluidSolver \
-lisothermalFluid \
-lfluidThermophysicalModels \
-lmomentumTransportModels \
-lcompressibleMomentumTransportModels \
-lcoupledThermophysicalTransportModels \
-lfiniteVolume \
-lmeshTools \
-lsampling \
-lfvModels \
-lfvConstraints
-lcoupledThermophysicalTransportModels

View File

@ -7,12 +7,4 @@ EXE_INC = \
-I$(LIB_SRC)/meshTools/lnInclude
LIB_LIBS = \
-lfluidSolver \
-lmomentumTransportModels \
-lincompressibleMomentumTransportModels \
-lphysicalProperties \
-lfiniteVolume \
-lfvModels \
-lfvConstraints \
-lsampling \
-lmeshTools
-lfluidSolver

View File

@ -34,8 +34,6 @@ Usage
{
type VoFCavitation;
libs ("libVoFCavitation.so");
model SchnerrSauer;
KunzCoeffs

View File

@ -55,8 +55,6 @@ Usage
{
type VoFTurbulenceDamping;
libs ("libVoFTurbulenceDamping.so");
// Interface turbulence damping length scale
// This is a required input as described in section 3.3 of the paper
delta 1e-4;

View File

@ -56,8 +56,6 @@ Usage
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
ejection
{
model BrunDripping;

View File

@ -49,8 +49,6 @@ Usage
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
ejection
{
model curvatureSeparation;

View File

@ -39,8 +39,6 @@ Usage
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
ejection
{
model dripping;

View File

@ -33,8 +33,6 @@ Usage
filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
}
\endverbatim

View File

@ -34,8 +34,6 @@ Usage
{
type filmVoFTransfer;
libs ("libfilmVoFTransfer.so");
deltaFactorToVoF 1.5;
alphaToVoF 0.9;

View File

@ -40,7 +40,7 @@ Description
writeWallBoilingProperties
{
type wallBoilingProperties;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl writeTime;
phase liquid;
}

View File

@ -7,7 +7,7 @@
\*---------------------------------------------------------------------------*/
type fieldAverage;
functionObjectLibs ("libfieldFunctionObjects.so");
libs ("libfieldFunctionObjects.so");
writeControl writeTime;

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2023 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -65,32 +65,34 @@ Foam::autoPtr<Foam::functionObject> Foam::functionObject::New
Info<< "Selecting function " << functionType << endl;
}
if (dict.found("functionObjectLibs"))
if
(
!dictionaryConstructorTablePtr_
|| dictionaryConstructorTablePtr_->find(functionType)
== dictionaryConstructorTablePtr_->end()
)
{
libs.open
if
(
dict,
"functionObjectLibs",
dictionaryConstructorTablePtr_
);
}
else
{
libs.open
(
dict,
"libs",
dictionaryConstructorTablePtr_
);
}
!libs.open
(
dict,
"libs",
dictionaryConstructorTablePtr_
)
)
{
libs.open("lib" + functionType.remove(':') + ".so", false);
}
if (!dictionaryConstructorTablePtr_)
{
FatalErrorInFunction
<< "Unknown function type "
<< functionType << nl << nl
<< "Table of functionObjects is empty"
<< exit(FatalError);
if (!dictionaryConstructorTablePtr_)
{
FatalErrorInFunction
<< "Unknown function type "
<< functionType << nl << nl
<< "Table of functionObjects is empty"
<< exit(FatalError);
}
}
dictionaryConstructorTable::iterator cstrIter =

View File

@ -82,27 +82,50 @@ Foam::autoPtr<Foam::fvConstraint> Foam::fvConstraint::New
(
const word& name,
const fvMesh& mesh,
const dictionary& coeffs
const dictionary& dict
)
{
const word constraintType(coeffs.lookup("type"));
const word constraintType(dict.lookup("type"));
Info<< indent
<< "Selecting finite volume constraint type " << constraintType << endl;
libs.open
if
(
coeffs,
"libs",
dictionaryConstructorTablePtr_
);
!dictionaryConstructorTablePtr_
|| dictionaryConstructorTablePtr_->find(constraintType)
== dictionaryConstructorTablePtr_->end()
)
{
if
(
!libs.open
(
dict,
"libs",
dictionaryConstructorTablePtr_
)
)
{
libs.open("lib" + constraintType.remove(':') + ".so", false);
}
if (!dictionaryConstructorTablePtr_)
{
FatalErrorInFunction
<< "Unknown constraint type "
<< constraintType << nl << nl
<< "Table of fvConstraints is empty"
<< exit(FatalError);
}
}
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(constraintType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
{
FatalIOErrorInFunction(coeffs)
FatalIOErrorInFunction(dict)
<< "Unknown fvConstraint " << constraintType << nl << nl
<< "Valid fvConstraints are:" << nl
<< dictionaryConstructorTablePtr_->sortedToc()
@ -111,7 +134,7 @@ Foam::autoPtr<Foam::fvConstraint> Foam::fvConstraint::New
return autoPtr<fvConstraint>
(
cstrIter()(name, constraintType, mesh, coeffs)
cstrIter()(name, constraintType, mesh, dict)
);
}

View File

@ -94,27 +94,50 @@ Foam::autoPtr<Foam::fvModel> Foam::fvModel::New
(
const word& name,
const fvMesh& mesh,
const dictionary& coeffs
const dictionary& dict
)
{
const word modelType(coeffs.lookup("type"));
const word modelType(dict.lookup("type"));
Info<< indent
<< "Selecting finite volume model type " << modelType << endl;
libs.open
if
(
coeffs,
"libs",
dictionaryConstructorTablePtr_
);
!dictionaryConstructorTablePtr_
|| dictionaryConstructorTablePtr_->find(modelType)
== dictionaryConstructorTablePtr_->end()
)
{
if
(
!libs.open
(
dict,
"libs",
dictionaryConstructorTablePtr_
)
)
{
libs.open("lib" + modelType.remove(':') + ".so", false);
}
if (!dictionaryConstructorTablePtr_)
{
FatalErrorInFunction
<< "Unknown model type "
<< modelType << nl << nl
<< "Table of fvModels is empty"
<< exit(FatalError);
}
}
dictionaryConstructorTable::iterator cstrIter =
dictionaryConstructorTablePtr_->find(modelType);
if (cstrIter == dictionaryConstructorTablePtr_->end())
{
FatalIOErrorInFunction(coeffs)
FatalIOErrorInFunction(dict)
<< "Unknown fvModel " << modelType << nl << nl
<< "Valid fvModels are:" << nl
<< dictionaryConstructorTablePtr_->sortedToc()
@ -123,7 +146,7 @@ Foam::autoPtr<Foam::fvModel> Foam::fvModel::New
return autoPtr<fvModel>
(
cstrIter()(name, modelType, mesh, coeffs)
cstrIter()(name, modelType, mesh, dict)
);
}

View File

@ -18,8 +18,6 @@ VoFCavitation
{
type compressible::VoFCavitation;
libs ("libcompressibleVoFCavitation.so");
model SchnerrSauer;
liquid water;

View File

@ -18,8 +18,6 @@ turbulenceDamping
{
type compressible::VoFTurbulenceDamping;
libs ("libcompressibleVoFTurbulenceDamping.so");
delta 1e-4;
}

View File

@ -18,8 +18,6 @@ VoFCavitation
{
type compressible::VoFCavitation;
libs ("libcompressibleVoFCavitation.so");
model SchnerrSauer;
KunzCoeffs

View File

@ -18,8 +18,6 @@ VoFCavitation
{
type VoFCavitation;
libs ("libVoFCavitation.so");
model SchnerrSauer;
KunzCoeffs

View File

@ -18,8 +18,6 @@ turbulenceDamping
{
type VoFTurbulenceDamping;
libs ("libVoFTurbulenceDamping.so");
delta 1e-4;
}

View File

@ -18,8 +18,6 @@ VoFCavitation
{
type VoFCavitation;
libs ("libVoFCavitation.so");
model SchnerrSauer;
KunzCoeffs

View File

@ -67,7 +67,7 @@ functions
writeWallBoilingProperties
{
type wallBoilingProperties;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl writeTime;
executeAtStart no;
region fluid;
@ -76,7 +76,7 @@ functions
outflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -88,7 +88,7 @@ functions
inflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -100,7 +100,7 @@ functions
outletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -113,7 +113,7 @@ functions
outletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -126,7 +126,7 @@ functions
inletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -139,7 +139,7 @@ functions
inletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
region fluid;
@ -153,7 +153,7 @@ functions
{
type writeObjects;
libs ("libutilityFunctionObjects.so");
region fluid;
region fluid;
objects
(
@ -168,6 +168,7 @@ functions
h.liquid
h.gas
);
writeControl writeTime;
writeInterval 1;
}

View File

@ -18,8 +18,6 @@ filmVoFTransfer
{
type filmVoFTransfer;
libs ("libfilmVoFTransfer.so");
deltaFactorToVoF 1.5;
alphaToVoF 0.9;

View File

@ -17,8 +17,6 @@ FoamFile
filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
}
// ************************************************************************* //

View File

@ -18,8 +18,6 @@ filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
ejection
{
model dripping;

View File

@ -18,8 +18,6 @@ VoFClouds
{
type VoFClouds;
libs ("libVoFClouds.so");
phase liquid;
carrierPhase air;
}

View File

@ -17,16 +17,12 @@ FoamFile
filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
}
filmVoFTransfer
{
type filmVoFTransfer;
libs ("libfilmVoFTransfer.so");
deltaFactorToVoF 0.3;
alphaToVoF 0.3;

View File

@ -18,8 +18,6 @@ filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
ejection
{
model dripping;

View File

@ -17,8 +17,6 @@ FoamFile
filmCloudTransfer
{
type filmCloudTransfer;
libs ("libfilmCloudTransfer.so");
}
// ************************************************************************* //

View File

@ -57,14 +57,14 @@ functions
writeWallBoilingProperties
{
type wallBoilingProperties;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl writeTime;
phase liquid;
}
outflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -75,7 +75,7 @@ functions
inflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -86,7 +86,7 @@ functions
outletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -98,7 +98,7 @@ functions
outletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -110,7 +110,7 @@ functions
inletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -122,7 +122,7 @@ functions
inletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;

View File

@ -57,14 +57,14 @@ functions
writeWallBoilingProperties
{
type wallBoilingProperties;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl writeTime;
phase liquid;
}
volumeDensity.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -78,7 +78,7 @@ functions
volumeDensity_bulk.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -92,7 +92,7 @@ functions
volumeDensity_wall.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -106,7 +106,7 @@ functions
outflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -117,7 +117,7 @@ functions
inflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -128,7 +128,7 @@ functions
outletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -140,7 +140,7 @@ functions
outletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -152,7 +152,7 @@ functions
inletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -164,7 +164,7 @@ functions
inletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;

View File

@ -57,14 +57,14 @@ functions
writeWallBoilingProperties
{
type wallBoilingProperties;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl writeTime;
phase liquid;
}
volumeDensity.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -78,7 +78,7 @@ functions
volumeDensity_bulk.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -92,7 +92,7 @@ functions
volumeDensity_wall.diameter.bubbles
{
type populationBalanceSizeDistribution;
functionObjectLibs ( "libmultiphaseEulerFoamFunctionObjects.so" );
libs ( "libmultiphaseEulerFoamFunctionObjects.so" );
writeControl runTime;
writeInterval 0.5;
setFormat raw;
@ -106,7 +106,7 @@ functions
outflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -117,7 +117,7 @@ functions
inflow
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -128,7 +128,7 @@ functions
outletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -140,7 +140,7 @@ functions
outletGas2
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -152,7 +152,7 @@ functions
outletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -164,7 +164,7 @@ functions
inletGas
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -176,7 +176,7 @@ functions
inletGas2
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;
@ -188,7 +188,7 @@ functions
inletLiquid
{
type surfaceFieldValue;
functionObjectLibs ( "libfieldFunctionObjects.so" );
libs ( "libfieldFunctionObjects.so" );
log yes;
writeFields false;
select patch;