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/mesh/conversion/starToFoam/readCouples.C

187 lines
5.9 KiB
C
Raw Normal View History

/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ 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 2 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, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Description
Create intermediate mesh from PROSTAR files
\*---------------------------------------------------------------------------*/
#include "starMesh.H"
#include "IFstream.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void starMesh::readCouples()
{
fileName couplesFileName(casePrefix_ + ".cpl");
label nCouples = 0;
// Count number of couples
{
IFstream couplesFile(couplesFileName);
if (couplesFile.good())
{
Info << "\nReading couples" << endl;
label matchLabel, nEntries, typeFlag;
label starMasterCell, rotXMasterFace;
label starSlaveCell, rotXSlaveFace;
// count the number of entries to read
while (!(couplesFile >> matchLabel).eof())
{
// read number of entries and match type flag.
couplesFile >> nEntries;
couplesFile >> typeFlag;
// read master cell and face
couplesFile >> starMasterCell >> rotXMasterFace;
// add number of couples from current match
label nSlavesToRead = nEntries - 1;
nCouples += nSlavesToRead;
for (int i = 0; i < nSlavesToRead; i++)
{
couplesFile >> starSlaveCell >> rotXSlaveFace;
}
}
Info<< "Number of couples = " << nCouples << endl << endl;
}
else
{
Info<< endl << "No couple matches defined." << endl;
}
}
// Read couples
if (nCouples > 0)
{
// read couples
couples_.setSize(nCouples);
label couplei = 0;
// A mesh with couples cannot be a shape mesh
isShapeMesh_ = false;
IFstream couplesFile(couplesFileName);
label matchLabel, nEntries, typeFlag;
label starMasterCell, masterCell, rotXMasterFace, rotZeroMasterFace;
label starSlaveCell, slaveCell, rotXSlaveFace, rotZeroSlaveFace;
while (!(couplesFile >> matchLabel).eof())
{
// read number of entries and match type flag.
// Note. At the moment, only integral matches are supported
couplesFile >> nEntries;
couplesFile >> typeFlag;
// read master cell and face
couplesFile >> starMasterCell >> rotXMasterFace;
// translate the cell labels
masterCell = starCellLabelLookup_[starMasterCell];
// translate the master face into rotation zero if applicable
if (starCellPermutation_[masterCell] > -1)
{
const label curMasterPermutation =
starCellPermutation_[masterCell];
rotZeroMasterFace =
sammFacePermutationTable
[curMasterPermutation]
[rotXMasterFace];
}
else
{
rotZeroMasterFace = rotXMasterFace;
}
// get master face index
label masterFaceID =
shapeFaceLookup
[cellShapes_[masterCell].model().index()]
[rotZeroMasterFace];
// number of slave faces
label nSlavesToRead = nEntries - 1;
for (int i = 0; i < nSlavesToRead; i++)
{
couplesFile >> starSlaveCell >> rotXSlaveFace;
// translate the cell labels
slaveCell = starCellLabelLookup_[starSlaveCell];
// translate the slave face into rotation zero if applicable
if (starCellPermutation_[slaveCell] > -1)
{
const label curSlavePermutation =
starCellPermutation_[slaveCell];
rotZeroSlaveFace =
sammFacePermutationTable
[curSlavePermutation]
[rotXSlaveFace];
}
else
{
rotZeroSlaveFace = rotXSlaveFace;
}
label slaveFaceID =
shapeFaceLookup
[cellShapes_[slaveCell].model().index()]
[rotZeroSlaveFace];
// Set the couple
couples_.set
(
couplei++,
new coupledFacePair
(
matchLabel,
masterCell, masterFaceID,
slaveCell, slaveFaceID,
typeFlag
)
);
}
}
Info << "finished reading couples" << endl;
}
}
// ************************************************************************* //