typeIOobject: Template typed form of IOobject for type-checked object file and header reading

used to check the existence of and open an object file, read and check the
header without constructing the object.

'typeIOobject' operates in an equivalent and consistent manner to 'regIOobject'
but the type information is provided by the template argument rather than via
virtual functions for which the derived object would need to be constructed,
which is the case for 'regIOobject'.

'typeIOobject' replaces the previous separate functions 'typeHeaderOk' and
'typeFilePath' with a single consistent interface.
This commit is contained in:
Henry Weller
2021-08-12 10:12:03 +01:00
parent 0a3a6312e5
commit b9123328fb
114 changed files with 514 additions and 475 deletions

View File

@ -243,7 +243,7 @@ void Foam::functionObjects::fieldAverage::readAveragingProperties()
}
else
{
IOobject propsDictHeader
typeIOobject<timeIOdictionary> propsDictHeader
(
name() + "Properties",
obr_.time().timeName(obr_.time().startTime().value()),
@ -254,7 +254,7 @@ void Foam::functionObjects::fieldAverage::readAveragingProperties()
false
);
if (!propsDictHeader.typeHeaderOk<timeIOdictionary>())
if (!propsDictHeader.headerOk())
{
Log << " Starting averaging at time "
<< obr_.time().timeName() << nl;

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-2018 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -79,7 +79,7 @@ void Foam::functionObjects::fieldCoordinateSystemTransform::transform
}
else
{
IOobject fieldHeader
typeIOobject<VolFieldType> fieldHeader
(
fieldName,
mesh_.time().timeName(),
@ -88,11 +88,7 @@ void Foam::functionObjects::fieldCoordinateSystemTransform::transform
IOobject::NO_WRITE
);
if
(
fieldHeader.typeHeaderOk<VolFieldType>(false)
&& fieldHeader.headerClassName() == VolFieldType::typeName
)
if (fieldHeader.headerOk())
{
DebugInfo
<< type() << ": Field " << fieldName << " read from file"
@ -103,20 +99,28 @@ void Foam::functionObjects::fieldCoordinateSystemTransform::transform
mesh_.lookupObject<VolFieldType>(fieldName)
);
}
else if
(
fieldHeader.typeHeaderOk<SurfaceFieldType>(false)
&& fieldHeader.headerClassName() == SurfaceFieldType::typeName
)
else
{
DebugInfo
<< type() << ": Field " << fieldName << " read from file"
<< endl;
transformField<SurfaceFieldType>
typeIOobject<SurfaceFieldType> fieldHeader
(
mesh_.lookupObject<SurfaceFieldType>(fieldName)
fieldName,
mesh_.time().timeName(),
mesh_,
IOobject::MUST_READ,
IOobject::NO_WRITE
);
if (fieldHeader.headerOk())
{
DebugInfo
<< type() << ": Field " << fieldName << " read from file"
<< endl;
transformField<SurfaceFieldType>
(
mesh_.lookupObject<SurfaceFieldType>(fieldName)
);
}
}
}
}

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-2018 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -55,7 +55,7 @@ void Foam::functionObjects::readFields::loadField
}
else
{
IOobject fieldHeader
typeIOobject<VolFieldType> fieldHeader
(
fieldName,
mesh_.time().timeName(),
@ -64,11 +64,7 @@ void Foam::functionObjects::readFields::loadField
IOobject::NO_WRITE
);
if
(
fieldHeader.typeHeaderOk<VolFieldType>(false)
&& fieldHeader.headerClassName() == VolFieldType::typeName
)
if (fieldHeader.headerOk())
{
// Store field locally
Log << " Reading " << fieldName << endl;
@ -77,18 +73,26 @@ void Foam::functionObjects::readFields::loadField
vflds.setSize(sz+1);
vflds.set(sz, new VolFieldType(fieldHeader, mesh_));
}
else if
(
fieldHeader.typeHeaderOk<SurfaceFieldType>(false)
&& fieldHeader.headerClassName() == SurfaceFieldType::typeName
)
else
{
// Store field locally
Log << " Reading " << fieldName << endl;
typeIOobject<SurfaceFieldType> fieldHeader
(
fieldName,
mesh_.time().timeName(),
mesh_,
IOobject::MUST_READ,
IOobject::NO_WRITE
);
label sz = sflds.size();
sflds.setSize(sz+1);
sflds.set(sz, new SurfaceFieldType(fieldHeader, mesh_));
if (fieldHeader.headerOk())
{
// Store field locally
Log << " Reading " << fieldName << endl;
label sz = sflds.size();
sflds.setSize(sz+1);
sflds.set(sz, new SurfaceFieldType(fieldHeader, mesh_));
}
}
}
}

View File

@ -2,7 +2,7 @@
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2013-2018 OpenFOAM Foundation
\\ / A nd | Copyright (C) 2013-2021 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
@ -56,7 +56,7 @@ bool Foam::functionObjects::writeDictionary::tryDirectory
bool& firstDict
)
{
IOobject dictIO
typeIOobject<IOdictionary> dictIO
(
dictNames_[dictI],
location,
@ -66,7 +66,7 @@ bool Foam::functionObjects::writeDictionary::tryDirectory
false
);
if (dictIO.typeHeaderOk<IOdictionary>(true))
if (dictIO.headerOk())
{
IOdictionary dict(dictIO);