This repository has been archived on 2023-11-20. You can view files and clone it, but cannot push or open issues or pull requests.
foam-extend4.1-coherent-io/applications/utilities/postProcessing/graphics/newEnsightFoamReader/USERD_set_filenames.H
2010-09-22 19:13:13 +01:00

451 lines
10 KiB
C

//======================================================================
// Setting filenames
//======================================================================
int USERD_set_filenames
(
char filename_1[],
char filename_2[],
char the_path[],
int swapbytes
)
{
#ifdef ENSIGHTDEBUG
Info << "Entering: USERD_set_filenames" << endl << flush;
#endif
char tmp[100];
label lRoot = strlen(the_path);
label lCase = strlen(filename_1);
bool cleared = false;
while (!cleared)
{
lRoot = strlen(the_path);
lCase = strlen(filename_1);
// remove the last '/' from rootDir
if (the_path[lRoot-1] == '/')
{
the_path[lRoot-1] = (char)NULL;
}
else
{
cleared = true;
}
}
rootDir = the_path;
// the path is pre-pended to filename_1
// 1 is the 'Geometry' : 2 the 'Result' which is null here
// since two_field is FALSE
for (label i=0; i<lCase-lRoot;i++)
{
tmp[i] = filename_1[i+1+lRoot];
}
caseDir = tmp;
if (!isDir(rootDir/caseDir))
{
Info<< rootDir/caseDir << " is not a valid directory."
<< endl;
return Z_ERR;
}
// construct the global pointers to the database and mesh
delete meshPtr;
delete runTimePtr;
runTimePtr = new Time
(
Time::controlDictName,
rootDir,
caseDir
);
Time& runTime = *runTimePtr;
meshPtr = new fvMesh
(
IOobject
(
fvMesh::defaultRegion,
runTime.timeName(),
runTime
)
);
// set the available number of time-steps
TimeList = (const instantList&)Foam::Time::findTimes(rootDir/caseDir);
Num_time_steps = TimeList.size() - 1;
nPatches = meshPtr->boundaryMesh().size();
// set the number of fields and store their names
// a valid field must exist for all time-steps
runTime.setTime(TimeList[TimeList.size()-1], TimeList.size()-1);
IOobjectList objects(*meshPtr, runTime.timeName());
fieldNames = (const wordList&)objects.names();
// because of the spray being a 'field' ...
// get the availabe number of variables and
// check for type (scalar/vector/tensor)
label nVar = 0;
wordList scalars = objects.names(scalarName);
for (label n=0; n<fieldNames.size(); n++)
{
bool isitScalar = false;
forAll(scalars,i)
{
if (fieldNames[n] == scalars[i])
{
isitScalar = true;
var2field[nVar++] = n;
}
}
isScalar[n] = isitScalar;
}
wordList vectors = objects.names(vectorName);
for (label n=0; n<fieldNames.size(); n++)
{
bool isitVector = false;
forAll(vectors,i)
{
if (fieldNames[n] == vectors[i])
{
isitVector = true;
var2field[nVar++] = n;
}
}
isVector[n] = isitVector;
}
wordList tensors = objects.names(tensorName);
for (label n=0; n<fieldNames.size(); n++)
{
bool isitTensor = false;
forAll(tensors,i)
{
if (fieldNames[n] == tensors[i])
{
isitTensor = true;
var2field[nVar++] = n;
}
}
isTensor[n] = isitTensor;
}
bool lagrangianNamesFound = false;
label n = 0;
while ((!lagrangianNamesFound) && (n<Num_time_steps))
{
runTime.setTime(TimeList[n+1], n+1);
Cloud<passiveParticle> lagrangian(*meshPtr);
n++;
if (lagrangian.size()>0)
{
lagrangianNamesFound = true;
}
}
IOobject sprayHeader
(
"positions",
runTime.timeName(),
"lagrangian",
runTime,
IOobject::NO_READ,
IOobject::NO_WRITE,
false
);
if (sprayHeader.headerOk())
{
Info << "[Found lagrangian]" << endl;
delete sprayPtr;
sprayPtr = new Cloud<passiveParticle>(*meshPtr);
IOobjectList objects(*meshPtr, runTime.timeName(), "lagrangian");
lagrangianScalarNames =
(const wordList&)objects.names(sprayScalarFieldName);
lagrangianVectorNames =
(const wordList&)objects.names(sprayVectorFieldName);
isSpray[fieldNames.size()] = true;
nSprayVariables += lagrangianScalarNames.size();
nSprayVariables += lagrangianVectorNames.size();
Num_unstructured_parts++;
}
Current_time_step = Num_time_steps;
runTime.setTime(TimeList[Current_time_step], Current_time_step);
Num_variables = nVar + nSprayVariables;
// Check if second mesh (region) exist.
IOobject ensightReaderDictHeader
(
IOobject
(
"ensightReaderDict",
runTime.constant(),
*meshPtr,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
word secondRegionName("solid");
if(ensightReaderDictHeader.headerOk())
{
IOdictionary ensightReaderDict
(
IOobject
(
"ensightReaderDict",
runTime.constant(),
*meshPtr,
IOobject::MUST_READ,
IOobject::NO_WRITE
)
);
if (ensightReaderDict.found("secondRegionName"))
{
secondRegionName = word
(
ensightReaderDict.lookup("secondRegionName")
);
}
if (ensightReaderDict.found("scalingFactor"))
{
scalingFactor = readScalar
(
ensightReaderDict.lookup("scalingFactor")
);
}
}
objectRegistry secondMeshObjReg
(
IOobject
(
secondRegionName,
runTime.timeName(),
runTime,
IOobject::MUST_READ
)
);
IOobject pointsHeader
(
"points",
runTime.constant(),
polyMesh::meshSubDir,
secondMeshObjReg
);
if(pointsHeader.headerOk())
{
secondMeshPtr = new fvMesh
(
IOobject
(
secondRegionName,
runTime.timeName(),
runTime,
IOobject::MUST_READ
)
);
}
if(secondMeshPtr)
{
Num_unstructured_parts += 1;
nSecondMeshPatches = secondMeshPtr->boundaryMesh().size();
IOobjectList secondMeshObjects(*secondMeshPtr, runTime.timeName());
secondMeshFieldNames = (const wordList&)secondMeshObjects.names();
label nVar = 0;
wordList scalars = secondMeshObjects.names(scalarName);
for (label n=0; n<secondMeshFieldNames.size(); n++)
{
bool isitScalar = false;
forAll(scalars,i)
{
if (secondMeshFieldNames[n] == scalars[i])
{
isitScalar = true;
secondMeshVar2field[nVar++] = n;
}
}
secondMeshIsScalar[n] = isitScalar;
}
wordList vectors = secondMeshObjects.names(vectorName);
for (label n=0; n<secondMeshFieldNames.size(); n++)
{
bool isitVector = false;
forAll(vectors,i)
{
if (secondMeshFieldNames[n] == vectors[i])
{
isitVector = true;
secondMeshVar2field[nVar++] = n;
}
}
secondMeshIsVector[n] = isitVector;
}
wordList tensors = secondMeshObjects.names(tensorName);
for (label n=0; n<secondMeshFieldNames.size(); n++)
{
bool isitTensor = false;
forAll(tensors,i)
{
if (secondMeshFieldNames[n] == tensors[i])
{
isitTensor = true;
secondMeshVar2field[nVar++] = n;
}
}
secondMeshIsTensor[n] = isitTensor;
}
Num_variables += nVar;
nSecondMeshVariables = nVar;
}
secondMeshPartNum = nPatches+2;
if(sprayPtr)
{
secondMeshPartNum += 1;
}
// Check if finite area mesh exists
IOobject faMeshBoundaryIOobj
(
"boundary",
meshPtr->time().findInstance
(
meshPtr->dbDir()/fvMesh::meshSubDir, "boundary"
),
faMesh::meshSubDir,
*meshPtr,
IOobject::MUST_READ,
IOobject::NO_WRITE
);
if(faMeshBoundaryIOobj.headerOk())
{
Info << "\nFound finite area mesh" << endl;
faMeshPtr = new faMesh(*meshPtr);
}
if(faMeshPtr)
{
Num_unstructured_parts += 1;
IOobjectList faMeshObjects(faMeshPtr->time(), runTime.timeName());
faMeshFieldNames = (const wordList&)faMeshObjects.names();
Info << faMeshFieldNames << endl;
label nVar = 0;
wordList scalars = faMeshObjects.names(faScalarName);
for (label n=0; n<faMeshFieldNames.size(); n++)
{
bool isitScalar = false;
forAll(scalars,i)
{
if (faMeshFieldNames[n] == scalars[i])
{
isitScalar = true;
faMeshVar2field[nVar++] = n;
}
}
faMeshIsScalar[n] = isitScalar;
}
wordList vectors = faMeshObjects.names(faVectorName);
for (label n=0; n<faMeshFieldNames.size(); n++)
{
bool isitVector = false;
forAll(vectors,i)
{
if (faMeshFieldNames[n] == vectors[i])
{
isitVector = true;
faMeshVar2field[nVar++] = n;
}
}
faMeshIsVector[n] = isitVector;
}
wordList tensors = faMeshObjects.names(faTensorName);
for (label n=0; n<faMeshFieldNames.size(); n++)
{
bool isitTensor = false;
forAll(tensors,i)
{
if (faMeshFieldNames[n] == tensors[i])
{
isitTensor = true;
faMeshVar2field[nVar++] = n;
}
}
faMeshIsTensor[n] = isitTensor;
}
Num_variables += nVar;
nFaMeshVariables = nVar;
}
Numparts_available = Num_unstructured_parts + Num_structured_parts
+ nPatches + nSecondMeshPatches;
#ifdef ENSIGHTDEBUG
Info << "Leaving: USERD_set_filenames" << endl << flush;
#endif
return Z_OK;
}