Merge branch 'master' of ssh://noisy/home/noisy2/OpenFOAM/OpenFOAM-dev

This commit is contained in:
andy
2008-07-30 10:43:47 +01:00
59 changed files with 141566 additions and 1295 deletions

View File

@ -1,4 +1,4 @@
/*---------------------------------------------------------------------------* \ /*---------------------------------------------------------------------------*\
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |

View File

@ -5,15 +5,12 @@ set -x
# run from this directory only # run from this directory only
cd ${0%/*} || exit 1 cd ${0%/*} || exit 1
# build libccmio if required # build libccmio and create lnInclude directory
if [ ! -e $FOAM_LIBBIN/libccmio.so ]
then
( (
cd $WM_THIRD_PARTY_DIR && ./AllwmakeLibccmio cd $WM_THIRD_PARTY_DIR && ./AllwmakeLibccmio
) )
fi
# if the library built okay, the headers must exist too # if the library built okay, the headers should exist too
if [ -e $FOAM_LIBBIN/libccmio.so ] if [ -e $FOAM_LIBBIN/libccmio.so ]
then then
wmake ccm26ToFoam wmake ccm26ToFoam

View File

@ -22,9 +22,29 @@ License
along with OpenFOAM; if not, write to the Free Software Foundation, along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Application
blockMesh
Description Description
A multi-block mesh generator. A multi-block mesh generator.
Uses the block mesh description found in
@a constant/polyMesh/blockMeshDict
(or @a constant/\<region\>/polyMesh/blockMeshDict).
Usage
- blockMesh [OPTION]
@param -blockTopology \n
Write the topology as a set of edges in OBJ format.
@param -region \<name\> \n
Specify an alternative mesh region.
@param -dict \<dictionary\> \n
Specify an alternative dictionary for the block mesh description.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "Time.H" #include "Time.H"
@ -60,59 +80,70 @@ int main(int argc, char *argv[])
word regionName; word regionName;
fileName polyMeshDir; fileName polyMeshDir;
word dictName("blockMeshDict");
fileName dictPath(runTime.constant());
if (args.options().found("region")) if (args.options().found("region"))
{ {
regionName = args.options()["region"]; // constant/<region>/polyMesh/blockMeshDict
regionName = args.options()["region"];
polyMeshDir = regionName/polyMesh::meshSubDir; polyMeshDir = regionName/polyMesh::meshSubDir;
Info<< nl << "Generating mesh for region " << regionName << endl; Info<< nl << "Generating mesh for region " << regionName << endl;
} }
else else
{ {
regionName = polyMesh::defaultRegion; // constant/polyMesh/blockMeshDict
regionName = polyMesh::defaultRegion;
polyMeshDir = polyMesh::meshSubDir; polyMeshDir = polyMesh::meshSubDir;
} }
fileName dictLocal = polyMeshDir;
Info<< nl << "Reading block mesh description dictionary" << endl;
word dictName("blockMeshDict");
fileName dictPath(runTime.constant()/polyMeshDir);
if (args.options().found("dict")) if (args.options().found("dict"))
{ {
fileName userDict(args.options()["dict"]); wordList elems(fileName(args.options()["dict"]).components());
dictName = elems[elems.size()-1];
dictPath = elems[0];
dictLocal = "";
dictName = userDict.name(); if (elems.size() == 1)
dictPath = userDict.path(); {
dictPath = ".";
}
else if (elems.size() > 2)
{
dictLocal = fileName(SubList<word>(elems, elems.size()-2, 1));
}
} }
IOobject meshDescriptionIOobject
IOobject meshDictIo
( (
dictName, dictName,
dictPath, dictPath,
dictLocal,
runTime, runTime,
IOobject::MUST_READ, IOobject::MUST_READ,
IOobject::NO_WRITE, IOobject::NO_WRITE,
false false
); );
if (!meshDescriptionIOobject.headerOk()) if (!meshDictIo.headerOk())
{ {
FatalErrorIn(args.executable()) FatalErrorIn(args.executable())
<< "Cannot open mesh description file: " << nl << "Cannot open mesh description file\n "
<< dictPath/dictName << nl << meshDictIo.objectPath()
<< nl
<< exit(FatalError); << exit(FatalError);
} }
IOdictionary meshDescription(meshDescriptionIOobject); Info<< nl << "Creating block mesh from\n "
<< meshDictIo.objectPath() << endl;
IOdictionary meshDict(meshDictIo);
Info<< nl << "Creating block mesh" << endl; blockMesh blocks(meshDict);
blockMesh blocks(meshDescription);
if (writeTopo) if (writeTopo)
{ {
@ -169,7 +200,7 @@ int main(int argc, char *argv[])
( (
runTime, runTime,
runTime.constant(), runTime.constant(),
polyMeshDir, //polyMesh::meshSubDir polyMeshDir,
patchNames, patchNames,
patchTypes, patchTypes,
defaultFacesName, defaultFacesName,
@ -197,11 +228,11 @@ int main(int argc, char *argv[])
// Read in a list of dictionaries for the merge patch pairs // Read in a list of dictionaries for the merge patch pairs
if (meshDescription.found("mergePatchPairs")) if (meshDict.found("mergePatchPairs"))
{ {
List<Pair<word> > mergePatchPairs List<Pair<word> > mergePatchPairs
( (
meshDescription.lookup("mergePatchPairs") meshDict.lookup("mergePatchPairs")
); );
if (mergePatchPairs.size()) if (mergePatchPairs.size())

View File

@ -275,6 +275,12 @@ void Foam::mergePolyMesh::addMesh(const polyMesh& m)
patchIndices[patchI] = patchIndex(bm[patchI]); patchIndices[patchI] = patchIndex(bm[patchI]);
} }
// Temporary: update number of allowable patches. This should be
// determined at the top - before adding anything.
meshMod_.setNumPatches(patchNames_.size());
const faceZoneMesh& fz = m.faceZones(); const faceZoneMesh& fz = m.faceZones();
labelList faceZoneIndices(fz.size()); labelList faceZoneIndices(fz.size());
@ -315,12 +321,6 @@ void Foam::mergePolyMesh::addMesh(const polyMesh& m)
} }
} }
newOwn = own[faceI];
if (newOwn > -1) newOwn = renumberCells[newOwn];
newNei = nei[faceI];
if (newNei > -1) newNei = renumberCells[newNei];
if (faceI < m.nInternalFaces() || faceI >= m.nFaces()) if (faceI < m.nInternalFaces() || faceI >= m.nFaces())
{ {
newPatch = -1; newPatch = -1;
@ -330,6 +330,20 @@ void Foam::mergePolyMesh::addMesh(const polyMesh& m)
newPatch = patchIndices[bm.whichPatch(faceI)]; newPatch = patchIndices[bm.whichPatch(faceI)];
} }
newOwn = own[faceI];
if (newOwn > -1) newOwn = renumberCells[newOwn];
if (newPatch > -1)
{
newNei = -1;
}
else
{
newNei = nei[faceI];
newNei = renumberCells[newNei];
}
newZone = fz.whichZone(faceI); newZone = fz.whichZone(faceI);
newZoneFlip = false; newZoneFlip = false;

View File

@ -58,4 +58,15 @@ manualCoeffs
dataFile "decompositionData"; dataFile "decompositionData";
} }
//// Is the case distributred
//distributed yes;
//// Per slave (so nProcs-1 entries) the directory above the case.
//roots
//(
// "/tmp"
// "/tmp"
//);
// ************************************************************************* // // ************************************************************************* //

View File

@ -1,7 +1,5 @@
#!/bin/sh #!/bin/sh
set -x set -x
rm -r PV3FoamReader/Make rm -rf PV3FoamReader/Make
wclean libso vtkPV3Foam wclean libso vtkPV3Foam

View File

@ -1,6 +1,6 @@
<ParaViewReaders> <ParaViewReaders>
<Reader name="PV3FoamReader" <Reader name="PV3FoamReader"
extensions="OpenFOAM" extensions="OpenFOAM"
file_description="OpenFOAM"> file_description="OpenFOAM Reader">
</Reader> </Reader>
</ParaViewReaders> </ParaViewReaders>

View File

@ -31,26 +31,6 @@
<TimeRangeInformationHelper/> <TimeRangeInformationHelper/>
</DoubleVectorProperty> </DoubleVectorProperty>
<!-- Update GUI check box -->
<IntVectorProperty
name="UpdateGUI"
command="SetUpdateGUI"
number_of_elements="1"
default_values="0">
<BooleanDomain
name="bool"/>
</IntVectorProperty>
<!-- Cache mesh check box -->
<IntVectorProperty
name="CacheMesh"
command="SetCacheMesh"
number_of_elements="1"
default_values="1">
<BooleanDomain
name="bool"/>
</IntVectorProperty>
<!-- ExtrapolateWalls check box --> <!-- ExtrapolateWalls check box -->
<IntVectorProperty <IntVectorProperty
name="ExtrapolateWalls" name="ExtrapolateWalls"
@ -186,34 +166,25 @@
</ArraySelectionDomain> </ArraySelectionDomain>
</StringVectorProperty> </StringVectorProperty>
<!-- Available times array --> <!-- Cache mesh check box -->
<!-- PV3FOAM_TIMESELECTION must be defined when compiling vtkPV3Foam <IntVectorProperty
might discard this in the future name="CacheMesh"
<StringVectorProperty command="SetCacheMesh"
name="TimeArrayInfo" number_of_elements="1"
information_only="1"> default_values="1">
<ArraySelectionInformationHelper <BooleanDomain
attribute_name="Time"/> name="bool"/>
</StringVectorProperty> </IntVectorProperty>
<StringVectorProperty
name="TimeStatus"
command="SetTimeArrayStatus"
number_of_elements="0"
repeat_command="1"
number_of_elements_per_command="2"
element_types="2 0"
information_property="TimeArrayInfo">
<ArraySelectionDomain
name="array_list">
<RequiredProperties>
<Property name="TimeArrayInfo"
function="ArrayList"/>
</RequiredProperties>
</ArraySelectionDomain>
</StringVectorProperty>
PV3FOAM_TIMESELECTION <!-- Update GUI check box -->
--> <IntVectorProperty
name="UpdateGUI"
command="SetUpdateGUI"
number_of_elements="1"
default_values="0">
<BooleanDomain
name="bool"/>
</IntVectorProperty>
</SourceProxy> </SourceProxy>
</ProxyGroup> </ProxyGroup>

View File

@ -21,32 +21,19 @@
// VTK includes // VTK includes
#include "vtkCallbackCommand.h" #include "vtkCallbackCommand.h"
#include "vtkCellArray.h"
#include "vtkCellData.h"
#include "vtkDataArraySelection.h" #include "vtkDataArraySelection.h"
#include "vtkDirectory.h"
#include "vtkDoubleArray.h"
#include "vtkErrorCode.h"
#include "vtkFloatArray.h"
#include "vtkInformation.h" #include "vtkInformation.h"
#include "vtkInformationVector.h" #include "vtkInformationVector.h"
#include "vtkIntArray.h"
#include "vtkMultiBlockDataSet.h" #include "vtkMultiBlockDataSet.h"
#include "vtkObjectFactory.h" #include "vtkObjectFactory.h"
#include "vtkPoints.h"
#include "vtkRenderer.h"
#include "vtkSMRenderViewProxy.h" #include "vtkSMRenderViewProxy.h"
#include "vtkStreamingDemandDrivenPipeline.h" #include "vtkStreamingDemandDrivenPipeline.h"
#include "vtkStringArray.h" #include "vtkStringArray.h"
#include "vtkUnstructuredGrid.h"
#include "vtkUnstructuredGridAlgorithm.h"
#include "vtkAlgorithmOutput.h"
#include "vtkMultiBlockDataSet.h"
// Foam includes // Foam includes
#include "vtkPV3Foam.H" #include "vtkPV3Foam.H"
vtkCxxRevisionMacro(vtkPV3FoamReader, "$Revision: 1.2$"); vtkCxxRevisionMacro(vtkPV3FoamReader, "$Revision: 1.5$");
vtkStandardNewMacro(vtkPV3FoamReader); vtkStandardNewMacro(vtkPV3FoamReader);
@ -60,17 +47,22 @@ vtkPV3FoamReader::vtkPV3FoamReader()
FileName = NULL; FileName = NULL;
foamData_ = NULL; foamData_ = NULL;
CacheMesh = 0; output1_ = NULL;
UpdateGUI = 1;
UpdateGUIOld = 1;
TimeStep = 0; TimeStep = 0;
TimeStepRange[0] = 0; TimeStepRange[0] = 0;
TimeStepRange[1] = 0; TimeStepRange[1] = 0;
CacheMesh = 0;
ExtrapolateWalls = 0;
IncludeSets = 0;
IncludeZones = 0;
ShowPatchNames = 0; ShowPatchNames = 0;
TimeSelection = vtkDataArraySelection::New(); UpdateGUI = 1;
UpdateGUIOld = 1;
RegionSelection = vtkDataArraySelection::New(); RegionSelection = vtkDataArraySelection::New();
VolFieldSelection = vtkDataArraySelection::New(); VolFieldSelection = vtkDataArraySelection::New();
PointFieldSelection = vtkDataArraySelection::New(); PointFieldSelection = vtkDataArraySelection::New();
@ -85,11 +77,6 @@ vtkPV3FoamReader::vtkPV3FoamReader()
); );
SelectionObserver->SetClientData(this); SelectionObserver->SetClientData(this);
TimeSelection->AddObserver
(
vtkCommand::ModifiedEvent,
this->SelectionObserver
);
RegionSelection->AddObserver RegionSelection->AddObserver
( (
vtkCommand::ModifiedEvent, vtkCommand::ModifiedEvent,
@ -112,6 +99,7 @@ vtkPV3FoamReader::vtkPV3FoamReader()
); );
} }
vtkPV3FoamReader::~vtkPV3FoamReader() vtkPV3FoamReader::~vtkPV3FoamReader()
{ {
vtkDebugMacro(<<"Deconstructor"); vtkDebugMacro(<<"Deconstructor");
@ -126,7 +114,6 @@ vtkPV3FoamReader::~vtkPV3FoamReader()
delete [] FileName; delete [] FileName;
} }
TimeSelection->RemoveObserver(this->SelectionObserver);
RegionSelection->RemoveObserver(this->SelectionObserver); RegionSelection->RemoveObserver(this->SelectionObserver);
VolFieldSelection->RemoveObserver(this->SelectionObserver); VolFieldSelection->RemoveObserver(this->SelectionObserver);
PointFieldSelection->RemoveObserver(this->SelectionObserver); PointFieldSelection->RemoveObserver(this->SelectionObserver);
@ -134,7 +121,6 @@ vtkPV3FoamReader::~vtkPV3FoamReader()
SelectionObserver->Delete(); SelectionObserver->Delete();
TimeSelection->Delete();
RegionSelection->Delete(); RegionSelection->Delete();
VolFieldSelection->Delete(); VolFieldSelection->Delete();
PointFieldSelection->Delete(); PointFieldSelection->Delete();
@ -152,7 +138,6 @@ int vtkPV3FoamReader::RequestInformation
{ {
vtkDebugMacro(<<"RequestInformation"); vtkDebugMacro(<<"RequestInformation");
if (Foam::vtkPV3Foam::debug) if (Foam::vtkPV3Foam::debug)
{ {
cout<<"REQUEST_INFORMATION\n"; cout<<"REQUEST_INFORMATION\n";
@ -164,38 +149,6 @@ int vtkPV3FoamReader::RequestInformation
return 0; return 0;
} }
if (Foam::vtkPV3Foam::debug)
{
vtkInformation* outputInfo = this->GetOutputPortInformation(0);
vtkMultiBlockDataSet* output = vtkMultiBlockDataSet::SafeDownCast
(
outputInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
);
outputInfo->Print(cout);
if (output)
{
output->Print(cout);
}
else
{
cout << "no output\n";
}
this->GetExecutive()->GetOutputInformation(0)->Print(cout);
int nInfo = outputVector->GetNumberOfInformationObjects();
cout<< "requestInfo with " << nInfo << " items:\n";
for (int i=0; i<nInfo; i++)
{
vtkInformation *info = outputVector->GetInformationObject(i);
info->Print(cout);
}
}
vtkInformation *outInfo = outputVector->GetInformationObject(0); vtkInformation *outInfo = outputVector->GetInformationObject(0);
if (!foamData_) if (!foamData_)
@ -205,17 +158,22 @@ int vtkPV3FoamReader::RequestInformation
( (
outInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT()) outInfo->Get(vtkMultiBlockDataSet::DATA_OBJECT())
); );
foamData_ = new Foam::vtkPV3Foam(FileName, this, output);
foamData_->UpdateInformation(); if (Foam::vtkPV3Foam::debug)
{
cout<< "constructed vtkPV3Foam with output: ";
output->Print(cout);
}
foamData_ = new Foam::vtkPV3Foam(FileName, this);
} }
else else
{ {
vtkDebugMacro("RequestInformation: updating information");
foamData_->UpdateInformation(); foamData_->UpdateInformation();
} }
int nTimeSteps = 0; int nTimeSteps = 0;
double* timeSteps = foamData_->timeSteps(nTimeSteps); double* timeSteps = foamData_->findTimes(nTimeSteps);
outInfo->Set outInfo->Set
( (
@ -230,7 +188,7 @@ int vtkPV3FoamReader::RequestInformation
timeRange[0] = timeSteps[0]; timeRange[0] = timeSteps[0];
timeRange[1] = timeSteps[nTimeSteps-1]; timeRange[1] = timeSteps[nTimeSteps-1];
if (Foam::vtkPV3Foam::debug) if (Foam::vtkPV3Foam::debug > 1)
{ {
cout<<"nTimeSteps " << nTimeSteps << "\n"; cout<<"nTimeSteps " << nTimeSteps << "\n";
cout<<"timeRange " << timeRange[0] << " to " << timeRange[1] << "\n"; cout<<"timeRange " << timeRange[0] << " to " << timeRange[1] << "\n";
@ -271,20 +229,15 @@ int vtkPV3FoamReader::RequestData
return 0; return 0;
} }
if (Foam::vtkPV3Foam::debug)
{ {
int nInfo = outputVector->GetNumberOfInformationObjects(); int nInfo = outputVector->GetNumberOfInformationObjects();
if (Foam::vtkPV3Foam::debug) cout<<"requestData with " << nInfo << " items\n";
{
cout<<"requestData with " << nInfo << " items\n"; for (int i = 0; i < nInfo; ++i)
}
for (int i=0; i<nInfo; i++)
{ {
vtkInformation *info = outputVector->GetInformationObject(i); vtkInformation *info = outputVector->GetInformationObject(i);
info->Print(cout);
if (Foam::vtkPV3Foam::debug)
{
info->Print(cout);
}
} }
} }
@ -330,7 +283,7 @@ int vtkPV3FoamReader::RequestData
} }
else else
{ {
cout << "no data_object\n"; cout<< "no data_object\n";
} }
} }
@ -423,91 +376,29 @@ void vtkPV3FoamReader::removePatchNamesFromView()
} }
void vtkPV3FoamReader::PrintSelf void vtkPV3FoamReader::PrintSelf(ostream& os, vtkIndent indent)
(
ostream& os,
vtkIndent indent
)
{ {
vtkDebugMacro(<<"PrintSelf"); vtkDebugMacro(<<"PrintSelf");
this->Superclass::PrintSelf(os,indent); this->Superclass::PrintSelf(os,indent);
os<< indent << "File name: " os<< indent << "File name: "
<< (this->FileName ? this->FileName : "(none)") << "\n"; << (this->FileName ? this->FileName : "(none)") << "\n";
os<< indent << "Number of meshes: " << foamData_->numberOfMeshes() << "\n";
os<< indent << "Number of nodes: " << foamData_->numberOfPoints() << "\n"; foamData_->PrintSelf(os, indent);
os<< indent << "Number of cells: " << foamData_->numberOfCells() << "\n";
os<< indent << "Number of available time steps: " << foamData_->numberOfAvailableTimes()
<< endl;
os<< indent << "Time step range: " os<< indent << "Time step range: "
<< this->TimeStepRange[0] << " - " << this->TimeStepRange[1] << this->TimeStepRange[0] << " - " << this->TimeStepRange[1]
<< endl; << "\n";
os<< indent << "Time step: " << this->TimeStep << endl; os<< indent << "Time step: " << this->TimeStep << endl;
return;
} }
vtkDataArraySelection* vtkPV3FoamReader::GetTimeSelection() // ----------------------------------------------------------------------
{ // Region selection list control
vtkDebugMacro(<<"GetTimeSelection");
return TimeSelection;
}
int vtkPV3FoamReader::GetNumberOfTimeArrays()
{
vtkDebugMacro(<<"GetNumberOf TimeArrays");
return TimeSelection->GetNumberOfArrays();
}
const char* vtkPV3FoamReader::GetTimeArrayName
(
int index
)
{
vtkDebugMacro(<<"GetTimeArrayName");
return TimeSelection->GetArrayName(index);
}
int vtkPV3FoamReader::GetTimeArrayStatus
(
const char* name
)
{
vtkDebugMacro(<<"GetTimeArrayStatus");
return TimeSelection->ArrayIsEnabled(name);
}
void vtkPV3FoamReader::SetTimeArrayStatus
(
const char* name,
int status
)
{
vtkDebugMacro(<<"SetTimeArrayStatus");
if (status)
{
TimeSelection->EnableArray(name);
}
else
{
TimeSelection->DisableArray(name);
}
}
vtkDataArraySelection* vtkPV3FoamReader::GetRegionSelection() vtkDataArraySelection* vtkPV3FoamReader::GetRegionSelection()
{ {
vtkDebugMacro(<<"GetRegionSelection"); vtkDebugMacro(<<"GetRegionSelection");
return RegionSelection; return RegionSelection;
} }
@ -515,42 +406,29 @@ vtkDataArraySelection* vtkPV3FoamReader::GetRegionSelection()
int vtkPV3FoamReader::GetNumberOfRegionArrays() int vtkPV3FoamReader::GetNumberOfRegionArrays()
{ {
vtkDebugMacro(<<"GetNumberOfRegionArrays"); vtkDebugMacro(<<"GetNumberOfRegionArrays");
return RegionSelection->GetNumberOfArrays(); return RegionSelection->GetNumberOfArrays();
} }
const char* vtkPV3FoamReader::GetRegionArrayName const char* vtkPV3FoamReader::GetRegionArrayName(int index)
(
int index
)
{ {
vtkDebugMacro(<<"GetRegionArrayName"); vtkDebugMacro(<<"GetRegionArrayName");
return RegionSelection->GetArrayName(index); return RegionSelection->GetArrayName(index);
} }
int vtkPV3FoamReader::GetRegionArrayStatus int vtkPV3FoamReader::GetRegionArrayStatus(const char* name)
(
const char* name
)
{ {
vtkDebugMacro(<<"GetRegionArrayStatus"); vtkDebugMacro(<<"GetRegionArrayStatus");
return RegionSelection->ArrayIsEnabled(name); return RegionSelection->ArrayIsEnabled(name);
} }
void vtkPV3FoamReader::SetRegionArrayStatus void vtkPV3FoamReader::SetRegionArrayStatus(const char* name, int status)
(
const char* name,
int status
)
{ {
vtkDebugMacro(<<"SetRegionArrayStatus"); vtkDebugMacro(<<"SetRegionArrayStatus");
if(status) if (status)
{ {
RegionSelection->EnableArray(name); RegionSelection->EnableArray(name);
} }
@ -561,10 +439,12 @@ void vtkPV3FoamReader::SetRegionArrayStatus
} }
// ----------------------------------------------------------------------
// volField selection list control
vtkDataArraySelection* vtkPV3FoamReader::GetVolFieldSelection() vtkDataArraySelection* vtkPV3FoamReader::GetVolFieldSelection()
{ {
vtkDebugMacro(<<"GetVolFieldSelection"); vtkDebugMacro(<<"GetVolFieldSelection");
return VolFieldSelection; return VolFieldSelection;
} }
@ -572,41 +452,27 @@ vtkDataArraySelection* vtkPV3FoamReader::GetVolFieldSelection()
int vtkPV3FoamReader::GetNumberOfVolFieldArrays() int vtkPV3FoamReader::GetNumberOfVolFieldArrays()
{ {
vtkDebugMacro(<<"GetNumberOfVolFieldArrays"); vtkDebugMacro(<<"GetNumberOfVolFieldArrays");
return VolFieldSelection->GetNumberOfArrays(); return VolFieldSelection->GetNumberOfArrays();
} }
const char* vtkPV3FoamReader::GetVolFieldArrayName const char* vtkPV3FoamReader::GetVolFieldArrayName(int index)
(
int index
)
{ {
vtkDebugMacro(<<"GetVolFieldArrayName"); vtkDebugMacro(<<"GetVolFieldArrayName");
return VolFieldSelection->GetArrayName(index); return VolFieldSelection->GetArrayName(index);
} }
int vtkPV3FoamReader::GetVolFieldArrayStatus int vtkPV3FoamReader::GetVolFieldArrayStatus(const char* name)
(
const char* name
)
{ {
vtkDebugMacro(<<"GetVolFieldArrayStatus"); vtkDebugMacro(<<"GetVolFieldArrayStatus");
return VolFieldSelection->ArrayIsEnabled(name); return VolFieldSelection->ArrayIsEnabled(name);
} }
void vtkPV3FoamReader::SetVolFieldArrayStatus void vtkPV3FoamReader::SetVolFieldArrayStatus(const char* name, int status)
(
const char* name,
int status
)
{ {
vtkDebugMacro(<<"SetVolFieldArrayStatus"); vtkDebugMacro(<<"SetVolFieldArrayStatus");
if (status) if (status)
{ {
VolFieldSelection->EnableArray(name); VolFieldSelection->EnableArray(name);
@ -618,10 +484,12 @@ void vtkPV3FoamReader::SetVolFieldArrayStatus
} }
// ----------------------------------------------------------------------
// pointField selection list control
vtkDataArraySelection* vtkPV3FoamReader::GetPointFieldSelection() vtkDataArraySelection* vtkPV3FoamReader::GetPointFieldSelection()
{ {
vtkDebugMacro(<<"GetPointFieldSelection"); vtkDebugMacro(<<"GetPointFieldSelection");
return PointFieldSelection; return PointFieldSelection;
} }
@ -629,41 +497,27 @@ vtkDataArraySelection* vtkPV3FoamReader::GetPointFieldSelection()
int vtkPV3FoamReader::GetNumberOfPointFieldArrays() int vtkPV3FoamReader::GetNumberOfPointFieldArrays()
{ {
vtkDebugMacro(<<"GetNumberOfPointFieldArrays"); vtkDebugMacro(<<"GetNumberOfPointFieldArrays");
return PointFieldSelection->GetNumberOfArrays(); return PointFieldSelection->GetNumberOfArrays();
} }
const char* vtkPV3FoamReader::GetPointFieldArrayName const char* vtkPV3FoamReader::GetPointFieldArrayName(int index)
(
int index
)
{ {
vtkDebugMacro(<<"GetPointFieldArrayName"); vtkDebugMacro(<<"GetPointFieldArrayName");
return PointFieldSelection->GetArrayName(index); return PointFieldSelection->GetArrayName(index);
} }
int vtkPV3FoamReader::GetPointFieldArrayStatus int vtkPV3FoamReader::GetPointFieldArrayStatus(const char* name)
(
const char* name
)
{ {
vtkDebugMacro(<<"GetPointFieldArrayStatus"); vtkDebugMacro(<<"GetPointFieldArrayStatus");
return PointFieldSelection->ArrayIsEnabled(name); return PointFieldSelection->ArrayIsEnabled(name);
} }
void vtkPV3FoamReader::SetPointFieldArrayStatus void vtkPV3FoamReader::SetPointFieldArrayStatus(const char* name, int status)
(
const char* name,
int status
)
{ {
vtkDebugMacro(<<"SetPointFieldArrayStatus"); vtkDebugMacro(<<"SetPointFieldArrayStatus");
if (status) if (status)
{ {
PointFieldSelection->EnableArray(name); PointFieldSelection->EnableArray(name);
@ -675,10 +529,12 @@ void vtkPV3FoamReader::SetPointFieldArrayStatus
} }
// ----------------------------------------------------------------------
// lagrangianField selection list control
vtkDataArraySelection* vtkPV3FoamReader::GetLagrangianFieldSelection() vtkDataArraySelection* vtkPV3FoamReader::GetLagrangianFieldSelection()
{ {
vtkDebugMacro(<<"GetLagrangianFieldSelection"); vtkDebugMacro(<<"GetLagrangianFieldSelection");
return LagrangianFieldSelection; return LagrangianFieldSelection;
} }
@ -686,29 +542,20 @@ vtkDataArraySelection* vtkPV3FoamReader::GetLagrangianFieldSelection()
int vtkPV3FoamReader::GetNumberOfLagrangianFieldArrays() int vtkPV3FoamReader::GetNumberOfLagrangianFieldArrays()
{ {
vtkDebugMacro(<<"GetNumberOfLagrangianFieldArrays"); vtkDebugMacro(<<"GetNumberOfLagrangianFieldArrays");
return LagrangianFieldSelection->GetNumberOfArrays(); return LagrangianFieldSelection->GetNumberOfArrays();
} }
const char* vtkPV3FoamReader::GetLagrangianFieldArrayName const char* vtkPV3FoamReader::GetLagrangianFieldArrayName(int index)
(
int index
)
{ {
vtkDebugMacro(<<"GetLagrangianFieldArrayName"); vtkDebugMacro(<<"GetLagrangianFieldArrayName");
return LagrangianFieldSelection->GetArrayName(index); return LagrangianFieldSelection->GetArrayName(index);
} }
int vtkPV3FoamReader::GetLagrangianFieldArrayStatus int vtkPV3FoamReader::GetLagrangianFieldArrayStatus(const char* name)
(
const char* name
)
{ {
vtkDebugMacro(<<"GetLagrangianFieldArrayStatus"); vtkDebugMacro(<<"GetLagrangianFieldArrayStatus");
return LagrangianFieldSelection->ArrayIsEnabled(name); return LagrangianFieldSelection->ArrayIsEnabled(name);
} }
@ -720,7 +567,6 @@ void vtkPV3FoamReader::SetLagrangianFieldArrayStatus
) )
{ {
vtkDebugMacro(<<"SetLagrangianFieldArrayStatus"); vtkDebugMacro(<<"SetLagrangianFieldArrayStatus");
if (status) if (status)
{ {
LagrangianFieldSelection->EnableArray(name); LagrangianFieldSelection->EnableArray(name);
@ -731,6 +577,7 @@ void vtkPV3FoamReader::SetLagrangianFieldArrayStatus
} }
} }
// ----------------------------------------------------------------------
void vtkPV3FoamReader::SelectionModifiedCallback void vtkPV3FoamReader::SelectionModifiedCallback
( (
@ -747,7 +594,7 @@ void vtkPV3FoamReader::SelectionModifiedCallback
void vtkPV3FoamReader::SelectionModified() void vtkPV3FoamReader::SelectionModified()
{ {
vtkDebugMacro(<<"SelectionModified"); vtkDebugMacro(<<"SelectionModified");
Modified(); Modified();
} }
// ************************************************************************* //

View File

@ -14,11 +14,9 @@
=========================================================================*/ =========================================================================*/
// .NAME vtkPV3FoamReader - reads a dataset in OpenFOAM format // .NAME vtkPV3FoamReader - reads a dataset in OpenFOAM format
// .SECTION Description // .SECTION Description
// vtkPV3FoamReader creates an multiblock dataset. It reads a controlDict // vtkPV3FoamReader creates an multiblock dataset.
// file, mesh information, and time dependent data. The controlDict file // It uses the OpenFOAM infrastructure (fvMesh, etc) to
// contains timestep information. The polyMesh folders contain mesh information // handle mesh and field data.
// The time folders contain transient data for the cells Each folder can
// contain any number of data files.
#ifndef __vtkPV3FoamReader_h #ifndef __vtkPV3FoamReader_h
#define __vtkPV3FoamReader_h #define __vtkPV3FoamReader_h
@ -66,6 +64,13 @@ public:
vtkSetStringMacro(FileName); vtkSetStringMacro(FileName);
vtkGetStringMacro(FileName); vtkGetStringMacro(FileName);
// Time control
// Set/Get the timestep and the timestep range
vtkSetMacro(TimeStep, int);
vtkGetMacro(TimeStep, int);
vtkSetVector2Macro(TimeStepRange, int);
vtkGetVector2Macro(TimeStepRange, int);
// GUI update control // GUI update control
vtkSetMacro(UpdateGUI, int); vtkSetMacro(UpdateGUI, int);
vtkGetMacro(UpdateGUI, int); vtkGetMacro(UpdateGUI, int);
@ -86,24 +91,10 @@ public:
vtkSetMacro(IncludeZones, int); vtkSetMacro(IncludeZones, int);
vtkGetMacro(IncludeZones, int); vtkGetMacro(IncludeZones, int);
// FOAM patch names control // FOAM display patch names control
vtkSetMacro(ShowPatchNames, int); vtkSetMacro(ShowPatchNames, int);
vtkGetMacro(ShowPatchNames, int); vtkGetMacro(ShowPatchNames, int);
// Time-step slider control
vtkSetMacro(TimeStep, int);
vtkGetMacro(TimeStep, int);
vtkSetVector2Macro(TimeStepRange, int);
vtkGetVector2Macro(TimeStepRange, int);
// Time selection list control
vtkDataArraySelection* GetTimeSelection();
int GetNumberOfTimeArrays();
const char* GetTimeArrayName(int index);
int GetTimeArrayStatus(const char* name);
void SetTimeArrayStatus(const char* name, int status);
// Region selection list control // Region selection list control
vtkDataArraySelection* GetRegionSelection(); vtkDataArraySelection* GetRegionSelection();
int GetNumberOfRegionArrays(); int GetNumberOfRegionArrays();
@ -121,16 +112,16 @@ public:
// pointField selection list control // pointField selection list control
vtkDataArraySelection* GetPointFieldSelection(); vtkDataArraySelection* GetPointFieldSelection();
int GetNumberOfPointFieldArrays(); int GetNumberOfPointFieldArrays();
const char* GetPointFieldArrayName(int index);
int GetPointFieldArrayStatus(const char* name); int GetPointFieldArrayStatus(const char* name);
void SetPointFieldArrayStatus(const char* name, int status); void SetPointFieldArrayStatus(const char* name, int status);
const char* GetPointFieldArrayName(int index);
// lagrangianField selection list control // lagrangianField selection list control
vtkDataArraySelection* GetLagrangianFieldSelection(); vtkDataArraySelection* GetLagrangianFieldSelection();
int GetNumberOfLagrangianFieldArrays(); int GetNumberOfLagrangianFieldArrays();
const char* GetLagrangianFieldArrayName(int index);
int GetLagrangianFieldArrayStatus(const char* name); int GetLagrangianFieldArrayStatus(const char* name);
void SetLagrangianFieldArrayStatus(const char* name, int status); void SetLagrangianFieldArrayStatus(const char* name, int status);
const char* GetLagrangianFieldArrayName(int index);
// Callback registered with the SelectionObserver // Callback registered with the SelectionObserver
// for all the selection lists // for all the selection lists
@ -182,7 +173,11 @@ private:
//- Remove patch names from the view //- Remove patch names from the view
void removePatchNamesFromView(); void removePatchNamesFromView();
int TimeStep;
int TimeStepRange[2];
int CacheMesh; int CacheMesh;
int ExtrapolateWalls; int ExtrapolateWalls;
int IncludeSets; int IncludeSets;
int IncludeZones; int IncludeZones;
@ -190,18 +185,22 @@ private:
int UpdateGUI; int UpdateGUI;
int UpdateGUIOld; int UpdateGUIOld;
int TimeStep;
int TimeStepRange[2];
vtkDataArraySelection* TimeSelection;
vtkDataArraySelection* RegionSelection; vtkDataArraySelection* RegionSelection;
vtkDataArraySelection* VolFieldSelection; vtkDataArraySelection* VolFieldSelection;
vtkDataArraySelection* PointFieldSelection; vtkDataArraySelection* PointFieldSelection;
vtkDataArraySelection* LagrangianFieldSelection; vtkDataArraySelection* LagrangianFieldSelection;
//- Access to the output port1
vtkMultiBlockDataSet* output1_;
//BTX //BTX
Foam::vtkPV3Foam* foamData_; Foam::vtkPV3Foam* foamData_;
//ETX //ETX
}; };
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif #endif
// ************************************************************************* //

View File

@ -2,10 +2,8 @@ vtkPV3Foam.C
vtkPV3FoamAddVolumeMesh.C vtkPV3FoamAddVolumeMesh.C
vtkPV3FoamAddLagrangianMesh.C vtkPV3FoamAddLagrangianMesh.C
vtkPV3FoamAddPatchMesh.C vtkPV3FoamAddPatchMesh.C
vtkPV3FoamAddFaceZoneMesh.C vtkPV3FoamAddZoneMesh.C
vtkPV3FoamAddPointZoneMesh.C vtkPV3FoamAddSetMesh.C
vtkPV3FoamAddFaceSetMesh.C
vtkPV3FoamAddPointSetMesh.C
vtkPV3FoamUpdate.C vtkPV3FoamUpdate.C
vtkPV3FoamUpdateInformation.C vtkPV3FoamUpdateInformation.C
vtkPV3FoamConvertMesh.C vtkPV3FoamConvertMesh.C

View File

@ -1,5 +1,4 @@
EXE_INC = \ EXE_INC = \
/* -DPV3FOAM_TIMESELECTION */ \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude \ -I$(LIB_SRC)/lagrangian/basic/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \

View File

@ -52,7 +52,7 @@ defineTypeNameAndDebug(Foam::vtkPV3Foam, 0);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
#include "vtkPV3FoamAddFields.H" #include "vtkPV3FoamAddToSelection.H"
#include "vtkPV3FoamUpdateInformationFields.H" #include "vtkPV3FoamUpdateInformationFields.H"
@ -172,38 +172,6 @@ void Foam::vtkPV3Foam::resetCounters()
} }
void Foam::vtkPV3Foam::initializeTime()
{
#ifdef PV3FOAM_TIMESELECTION
Time& runTime = dbPtr_();
// Get times list
instantList times = runTime.times();
vtkDataArraySelection* arraySelection = reader_->GetTimeSelection();
// only execute this if there is a mismatch between
// the times available according to FOAM and according to VTK
int nArrays = arraySelection->GetNumberOfArrays();
if (nArrays && nArrays == times.size() - 1)
{
return;
}
// "constant" is implicit - skip it
// All the time selections are enabled by default
for (label timeI = 1; timeI < times.size(); ++timeI)
{
arraySelection->AddArray
(
times[timeI].name().c_str()
);
}
#endif /* PV3FOAM_TIMESELECTION */
}
bool Foam::vtkPV3Foam::setTime(const double& requestedTime) bool Foam::vtkPV3Foam::setTime(const double& requestedTime)
{ {
if (debug) if (debug)
@ -215,24 +183,10 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime)
Time& runTime = dbPtr_(); Time& runTime = dbPtr_();
// Get times list // Get times list
instantList times = runTime.times(); instantList Times = runTime.times();
// logic as per "checkTimeOption.H"
bool found = false; bool found = false;
int nearestIndex = -1; int nearestIndex = Time::findClosestTimeIndex(Times, requestedTime);
scalar nearestDiff = Foam::GREAT;
forAll (times, timeIndex)
{
if (times[timeIndex].name() == "constant") continue;
scalar diff = fabs(times[timeIndex].value() - requestedTime);
if (diff < nearestDiff)
{
nearestDiff = diff;
nearestIndex = timeIndex;
}
}
if (nearestIndex == -1) if (nearestIndex == -1)
{ {
@ -244,12 +198,34 @@ bool Foam::vtkPV3Foam::setTime(const double& requestedTime)
found = true; found = true;
} }
runTime.setTime(times[nearestIndex], nearestIndex); // see what has changed
if (timeIndex_ != nearestIndex)
{
timeIndex_ = nearestIndex;
runTime.setTime(Times[nearestIndex], nearestIndex);
// the fields change each time
fieldsChanged_ = true;
if (meshPtr_)
{
if (meshPtr_->readUpdate() != polyMesh::UNCHANGED)
{
meshChanged_ = true;
}
}
else
{
meshChanged_ = true;
}
}
if (debug) if (debug)
{ {
Info<< "<end> Foam::vtkPV3Foam::setTime() - selected time " Info<< "<end> Foam::vtkPV3Foam::setTime() - selected time "
<< times[nearestIndex].name() << endl; << Times[nearestIndex].name() << " index=" << nearestIndex
<< " meshChanged=" << meshChanged_
<< " fieldsChanged=" << fieldsChanged_ << endl;
} }
return found; return found;
@ -265,15 +241,28 @@ void Foam::vtkPV3Foam::updateSelectedRegions()
vtkDataArraySelection* arraySelection = reader_->GetRegionSelection(); vtkDataArraySelection* arraySelection = reader_->GetRegionSelection();
const label nRegions = arraySelection->GetNumberOfArrays(); const label nSelect = arraySelection->GetNumberOfArrays();
selectedRegions_.setSize(nRegions); if (selectedRegions_.size() != nSelect)
selectedRegionDatasetIds_.setSize(nRegions);
// Read the selected patches and add to the region list
for (int regionId=0; regionId < nRegions; ++regionId)
{ {
selectedRegions_[regionId] = arraySelection->GetArraySetting(regionId); selectedRegions_.setSize(nSelect);
selectedRegions_ = 0;
meshChanged_ = true;
}
selectedRegionDatasetIds_.setSize(nSelect);
// Read the selected cell regions, zones, patches and add to region list
forAll (selectedRegions_, regionId)
{
int setting = arraySelection->GetArraySetting(regionId);
if (selectedRegions_[regionId] != setting)
{
selectedRegions_[regionId] = setting;
meshChanged_ = true;
}
selectedRegionDatasetIds_[regionId] = -1; selectedRegionDatasetIds_[regionId] = -1;
if (debug) if (debug)
@ -301,7 +290,13 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info << "selections("; Info<< "available(";
forAll (selections, elemI)
{
Info<< " \"" << arraySelection->GetArrayName(elemI) << "\"";
}
Info<< " )\n"
<< "selected(";
} }
forAll (selections, elemI) forAll (selections, elemI)
@ -322,7 +317,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info << " " << selections[nElem]; Info<< " " << selections[nElem];
} }
++nElem; ++nElem;
@ -331,7 +326,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info << " )" << endl; Info<< " )" << endl;
} }
selections.setSize(nElem); selections.setSize(nElem);
@ -351,33 +346,45 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info << "selections("; Info<< "available(";
for
(
int elemI = selector.start();
elemI < selector.end();
++elemI
)
{
Info<< " \"" << arraySelection->GetArrayName(elemI) << "\"";
}
Info<< " )\n"
<< "selected(";
} }
for for
( (
int regionId = selector.start(); int elemI = selector.start();
regionId < selector.end(); elemI < selector.end();
++regionId ++elemI
) )
{ {
if (arraySelection->GetArraySetting(regionId)) if (arraySelection->GetArraySetting(elemI))
{ {
if (firstWord) if (firstWord)
{ {
selections[nElem] = getFirstWord selections[nElem] = getFirstWord
( (
arraySelection->GetArrayName(regionId) arraySelection->GetArrayName(elemI)
); );
} }
else else
{ {
selections[nElem] = arraySelection->GetArrayName(regionId); selections[nElem] = arraySelection->GetArrayName(elemI);
} }
if (debug) if (debug)
{ {
Info << " " << selections[nElem]; Info<< " " << selections[nElem];
} }
++nElem; ++nElem;
@ -386,7 +393,7 @@ Foam::stringList Foam::vtkPV3Foam::getSelectedArrayEntries
if (debug) if (debug)
{ {
Info << " )" << endl; Info<< " )" << endl;
} }
@ -432,10 +439,7 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries
<< endl; << endl;
} }
arraySelection->EnableArray arraySelection->EnableArray(arrayName.c_str());
(
arrayName.c_str()
);
break; break;
} }
} }
@ -452,12 +456,10 @@ void Foam::vtkPV3Foam::setSelectedArrayEntries
Foam::vtkPV3Foam::vtkPV3Foam Foam::vtkPV3Foam::vtkPV3Foam
( (
const char* const FileName, const char* const FileName,
vtkPV3FoamReader* reader, vtkPV3FoamReader* reader
vtkMultiBlockDataSet* output
) )
: :
reader_(reader), reader_(reader),
output_(output),
dbPtr_(NULL), dbPtr_(NULL),
meshPtr_(NULL), meshPtr_(NULL),
selectInfoVolume_(VOLUME, "unzoned"), selectInfoVolume_(VOLUME, "unzoned"),
@ -470,7 +472,10 @@ Foam::vtkPV3Foam::vtkPV3Foam
selectInfoFaceSets_(FACESET, "faceSet"), selectInfoFaceSets_(FACESET, "faceSet"),
selectInfoPointSets_(POINTSET, "pointSet"), selectInfoPointSets_(POINTSET, "pointSet"),
patchTextActorsPtrs_(0), patchTextActorsPtrs_(0),
nMesh_(0) nMesh_(0),
timeIndex_(-1),
meshChanged_(true),
fieldsChanged_(true)
{ {
if (debug) if (debug)
{ {
@ -518,17 +523,11 @@ Foam::vtkPV3Foam::vtkPV3Foam
dbPtr_().functionObjects().off(); dbPtr_().functionObjects().off();
if (debug)
{
cout<< "constructed with output: ";
output_->Print(cout);
}
resetCounters();
// Set initial cloud name // Set initial cloud name
// TODO - TEMPORARY MEASURE UNTIL CAN PROCESS MULTIPLE CLOUDS // TODO - TEMPORARY MEASURE UNTIL CAN PROCESS MULTIPLE CLOUDS
cloudName_ = ""; cloudName_ = "";
UpdateInformation();
} }
@ -555,27 +554,37 @@ void Foam::vtkPV3Foam::UpdateInformation()
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::UpdateInformation - " Info<< "<beg> Foam::vtkPV3Foam::UpdateInformation"
<< "TimeStep = " << reader_->GetTimeStep() << endl; << " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "] TimeStep="
<< reader_->GetTimeStep() << endl;
} }
resetCounters(); resetCounters();
// preserve the currently selected values vtkDataArraySelection* arraySelection = reader_->GetRegionSelection();
const stringList selectedEntries = getSelectedArrayEntries
(
reader_->GetRegionSelection()
);
// Clear current region list/array
reader_->GetRegionSelection()->RemoveAllArrays();
initializeTime(); stringList selectedEntries;
// enable 'internalMesh' on the first call
if (arraySelection->GetNumberOfArrays() == 0)
{
selectedEntries.setSize(1);
selectedEntries[0] = "internalMesh";
}
else
{
// preserve the currently selected values
selectedEntries = getSelectedArrayEntries
(
arraySelection
);
}
// Clear current region list/array
arraySelection->RemoveAllArrays();
// Update region array // Update region array
updateInformationInternalMesh(); updateInformationInternalMesh();
updateInformationLagrangian(); updateInformationLagrangian();
updateInformationPatches(); updateInformationPatches();
if (reader_->GetIncludeSets()) if (reader_->GetIncludeSets())
@ -588,13 +597,18 @@ void Foam::vtkPV3Foam::UpdateInformation()
updateInformationZones(); updateInformationZones();
} }
// Update region selection with the data just read in // restore the currently enabled values
setSelectedArrayEntries setSelectedArrayEntries
( (
reader_->GetRegionSelection(), arraySelection,
selectedEntries selectedEntries
); );
if (meshChanged_)
{
fieldsChanged_ = true;
}
// Update volField array // Update volField array
updateInformationFields<fvPatchField, volMesh> updateInformationFields<fvPatchField, volMesh>
( (
@ -630,24 +644,23 @@ void Foam::vtkPV3Foam::Update
output->Print(cout); output->Print(cout);
cout<<"Internally:\n"; cout<<"Internally:\n";
output_->Print(cout); output->Print(cout);
cout<< " has " << output_->GetNumberOfBlocks() << " blocks\n"; cout<< " has " << output->GetNumberOfBlocks() << " blocks\n";
} }
// Set up region selection(s) // Set up region selection(s)
updateSelectedRegions(); updateSelectedRegions();
// Update the Foam mesh // Update the Foam mesh
updateFoamMesh(); updateFoamMesh();
reader_->UpdateProgress(0.2);
// Convert meshes // Convert meshes
convertMeshVolume(output); convertMeshVolume(output);
convertMeshLagrangian(output); convertMeshLagrangian(output);
convertMeshPatches(output); convertMeshPatches(output);
reader_->UpdateProgress(0.4);
if (reader_->GetIncludeZones()) if (reader_->GetIncludeZones())
{ {
@ -658,17 +671,17 @@ void Foam::vtkPV3Foam::Update
if (reader_->GetIncludeSets()) if (reader_->GetIncludeSets())
{ {
convertMeshCellSet(output); convertMeshCellSets(output);
convertMeshFaceSet(output); convertMeshFaceSets(output);
convertMeshPointSet(output); convertMeshPointSets(output);
} }
reader_->UpdateProgress(0.8);
// Update fields // Update fields
updateVolFields(output); updateVolFields(output);
updatePointFields(output); updatePointFields(output);
updateLagrangianFields(output); updateLagrangianFields(output);
reader_->UpdateProgress(1.0);
if (debug) if (debug)
{ {
@ -693,90 +706,31 @@ void Foam::vtkPV3Foam::Update
<< GetNumberOfDataSets(output, selectInfoPointSets_) << nl; << GetNumberOfDataSets(output, selectInfoPointSets_) << nl;
// traverse blocks: // traverse blocks:
cout<< "nBlocks = " << output->GetNumberOfBlocks() << "\n";
int nBlocks = output->GetNumberOfBlocks();
Info << "nBlocks = " << nBlocks << endl;
cout<< "done Update\n"; cout<< "done Update\n";
output_->Print(cout); output->Print(cout);
cout<< " has " << output_->GetNumberOfBlocks() << " blocks\n"; cout<< " has " << output->GetNumberOfBlocks() << " blocks\n";
output_->GetInformation()->Print(cout); output->GetInformation()->Print(cout);
cout <<"ShouldIReleaseData :" << output_->ShouldIReleaseData() << "\n"; cout<<"ShouldIReleaseData :" << output->ShouldIReleaseData() << "\n";
} }
meshChanged_ = fieldsChanged_ = false;
} }
double* Foam::vtkPV3Foam::timeSteps(int& nTimeSteps) double* Foam::vtkPV3Foam::findTimes(int& nTimeSteps)
{ {
int nTimes = 0; int nTimes = 0;
double* ts = NULL; double* tsteps = NULL;
if (dbPtr_.valid()) if (dbPtr_.valid())
{ {
Time& runTime = dbPtr_(); Time& runTime = dbPtr_();
instantList timeLst = runTime.times();
instantList times = runTime.times();
#ifdef PV3FOAM_TIMESELECTION
List<bool> selected = List<bool>(times.size(), false);
vtkDataArraySelection* arraySelection = reader_->GetTimeSelection();
const label nSelectedTimes = arraySelection->GetNumberOfArrays();
for (int i = 0; i < nSelectedTimes; ++i)
{
// always skip "constant" time
const int timeI = i + 1;
if
(
arraySelection->GetArraySetting(i)
&& timeI < times.size()
)
{
if (debug > 1)
{
Info<<"timeSelection["
<< i
<<"] = "
<< arraySelection->GetArraySetting(i)
<< " is "
<< arraySelection->GetArrayName(i) << endl;
}
selected[timeI] = true;
++nTimes;
}
}
if (debug > 1)
{
Info<< "selected " << nTimes << " times ";
Info<< "found " << times.size() << " times: (";
forAll(times, timeI)
{
Info<< " " << times[timeI].value();
}
Info<< " )" << endl;
}
if (nTimes)
{
ts = new double[nTimes];
int stepI = 0;
forAll(selected, selectI)
{
if (selected[selectI])
{
ts[stepI] = times[selectI].value();
stepI++;
}
}
}
#else /* PV3FOAM_TIMESELECTION */
// always skip "constant" time, unless there are no other times // always skip "constant" time, unless there are no other times
nTimes = times.size(); nTimes = timeLst.size();
label timeI = 0; label timeI = 0;
if (nTimes > 1) if (nTimes > 1)
@ -787,26 +741,25 @@ double* Foam::vtkPV3Foam::timeSteps(int& nTimeSteps)
if (nTimes) if (nTimes)
{ {
ts = new double[nTimes]; tsteps = new double[nTimes];
for (label stepI = 0; stepI < nTimes; ++stepI, ++timeI) for (label stepI = 0; stepI < nTimes; ++stepI, ++timeI)
{ {
ts[stepI] = times[timeI].value(); tsteps[stepI] = timeLst[timeI].value();
} }
} }
#endif /* PV3FOAM_TIMESELECTION */
} }
else else
{ {
if (debug) if (debug)
{ {
Info<< "no valid dbPtr:" <<endl; cout<< "no valid dbPtr:\n";
} }
} }
// return vector length via the parameter // vector length returned via the parameter
nTimeSteps = nTimes; nTimeSteps = nTimes;
return ts; return tsteps;
} }
@ -820,8 +773,7 @@ void Foam::vtkPV3Foam::addPatchNames(vtkRenderer* renderer)
Info<< "<beg> Foam::vtkPV3Foam::addPatchNames" << endl; Info<< "<beg> Foam::vtkPV3Foam::addPatchNames" << endl;
} }
const fvMesh& mesh = *meshPtr_; const polyBoundaryMesh& pbMesh = meshPtr_->boundaryMesh();
const polyBoundaryMesh& pbMesh = mesh.boundaryMesh();
const selectionInfo& selector = selectInfoPatches_; const selectionInfo& selector = selectInfoPatches_;
@ -1012,48 +964,17 @@ void Foam::vtkPV3Foam::removePatchNames(vtkRenderer* renderer)
} }
int Foam::vtkPV3Foam::numberOfAvailableTimes() const void Foam::vtkPV3Foam::PrintSelf(ostream& os, vtkIndent indent) const
{ {
if (dbPtr_.valid()) os << indent << "Number of meshes: " << nMesh_ << "\n";
{ os << indent << "Number of nodes: "
return dbPtr_().times().size(); << (meshPtr_ ? meshPtr_->nPoints() : 0) << "\n";
}
else os << indent << "Number of cells: "
{ << (meshPtr_ ? meshPtr_->nCells() : 0) << "\n";
return 0;
} os << indent << "Number of available time steps: "
<< (dbPtr_.valid() ? dbPtr_().times().size() : 0) << endl;
} }
int Foam::vtkPV3Foam::numberOfPoints()
{
if (meshPtr_)
{
return meshPtr_->nPoints();
}
else
{
return 0;
}
}
int Foam::vtkPV3Foam::numberOfCells()
{
if (meshPtr_)
{
return meshPtr_->nCells();
}
{
return 0;
}
}
int Foam::vtkPV3Foam::numberOfMeshes() const
{
return nMesh_;
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -29,18 +29,16 @@ Description
Provides a reader interface for OpenFOAM to VTK interaction. Provides a reader interface for OpenFOAM to VTK interaction.
SourceFiles SourceFiles
interpolatePointToCell.C
interpolatePointToCell.H
vtkPV3Foam.C vtkPV3Foam.C
vtkPV3Foam.H vtkPV3Foam.H
vtkPV3FoamAddFaceSetMesh.C vtkPV3FoamI.H
vtkPV3FoamAddFaceZoneMesh.C
vtkPV3FoamAddFields.H
vtkPV3FoamAddLagrangianMesh.C vtkPV3FoamAddLagrangianMesh.C
vtkPV3FoamAddPatchMesh.C vtkPV3FoamAddPatchMesh.C
vtkPV3FoamAddPointSetMesh.C vtkPV3FoamAddSetMesh.C
vtkPV3FoamAddPointZoneMesh.C vtkPV3FoamAddToSelection.H
vtkPV3FoamAddVolumeMesh.C vtkPV3FoamAddVolumeMesh.C
vtkPV3FoamAddZoneMesh.C
vtkPV3FoamConvertFaceField.H
vtkPV3FoamConvertLagrangianFields.H vtkPV3FoamConvertLagrangianFields.H
vtkPV3FoamConvertMesh.C vtkPV3FoamConvertMesh.C
vtkPV3FoamConvertPatchFaceField.H vtkPV3FoamConvertPatchFaceField.H
@ -52,7 +50,7 @@ SourceFiles
vtkPV3FoamUpdateInformation.C vtkPV3FoamUpdateInformation.C
vtkPV3FoamUpdateInformationFields.H vtkPV3FoamUpdateInformationFields.H
// Needed by VTK? // Needed by VTK:
vtkDataArrayTemplateImplicit.txx vtkDataArrayTemplateImplicit.txx
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -64,19 +62,21 @@ SourceFiles
#include "fileName.H" #include "fileName.H"
#include "volPointInterpolation.H" #include "volPointInterpolation.H"
#include "stringList.H" #include "stringList.H"
#include "wordList.H"
#include "primitivePatch.H" #include "primitivePatch.H"
// * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * // // * * * * * * * * * * * * * Forward Declarations * * * * * * * * * * * * * //
class vtkDataArraySelection; class vtkDataArraySelection;
class vtkDataSet; class vtkDataSet;
class vtkMultiBlockDataSet;
class vtkPoints; class vtkPoints;
class vtkPV3FoamReader; class vtkPV3FoamReader;
class vtkRenderer; class vtkRenderer;
class vtkTextActor; class vtkTextActor;
class vtkMultiBlockDataSet;
class vtkPolyData; class vtkPolyData;
class vtkUnstructuredGrid; class vtkUnstructuredGrid;
class vtkIndent;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -196,9 +196,6 @@ private:
//- Access to the controlling vtkPV3FoamReader //- Access to the controlling vtkPV3FoamReader
vtkPV3FoamReader* reader_; vtkPV3FoamReader* reader_;
//- Access to the output block
vtkMultiBlockDataSet* output_;
//- Foam time control //- Foam time control
autoPtr<Time> dbPtr_; autoPtr<Time> dbPtr_;
@ -232,12 +229,12 @@ private:
labelList superCells_; labelList superCells_;
//- Label of original cell for decomposed cells //- Label of original cell for decomposed cells
// - cell zone meshes // - cellZone meshes
List<labelList> superCellZonesCells_; List<labelList> zoneSuperCells_;
//- Label of original cell for decomposed cells //- Label of original cell for decomposed cells
// - cell set meshes // - cellSet meshes
List<labelList> superCellSetCells_; List<labelList> csetSuperCells_;
//- List of patch names //- List of patch names
List<vtkTextActor*> patchTextActorsPtrs_; List<vtkTextActor*> patchTextActorsPtrs_;
@ -253,6 +250,15 @@ private:
// TODO - currently only set up to process ONE cloud // TODO - currently only set up to process ONE cloud
word cloudName_; word cloudName_;
//- The time index
int timeIndex_;
//- Track changes in mesh geometry
bool meshChanged_;
//- Track changes in fields
bool fieldsChanged_;
// Private Member Functions // Private Member Functions
@ -287,9 +293,6 @@ private:
//- Reset data counters //- Reset data counters
void resetCounters(); void resetCounters();
//- Get all the available times and select the latestTime
void initializeTime();
// Update information helper functions // Update information helper functions
//- Update the regions selected in the GUI //- Update the regions selected in the GUI
@ -307,9 +310,21 @@ private:
//- Set info //- Set info
void updateInformationSets(); void updateInformationSets();
//- Read zone names for zoneType from file
wordList readZoneNames(const word& zoneType);
//- Zone info //- Zone info
void updateInformationZones(); void updateInformationZones();
//- Add to paraview array selection
template<class Type>
label addToSelection
(
vtkDataArraySelection *arraySelection,
const IOobjectList&,
const string& suffix = ""
);
//- Field info //- Field info
template<template<class> class patchType, class meshType> template<template<class> class patchType, class meshType>
void updateInformationFields void updateInformationFields
@ -350,20 +365,20 @@ private:
//- Cell zone meshes //- Cell zone meshes
void convertMeshCellZones(vtkMultiBlockDataSet* output); void convertMeshCellZones(vtkMultiBlockDataSet* output);
//- Cell zone meshes //- Face zone meshes
void convertMeshFaceZones(vtkMultiBlockDataSet* output); void convertMeshFaceZones(vtkMultiBlockDataSet* output);
//- Cell zone meshes //- Point zone meshes
void convertMeshPointZones(vtkMultiBlockDataSet* output); void convertMeshPointZones(vtkMultiBlockDataSet* output);
//- Cell set meshes //- Cell set meshes
void convertMeshCellSet(vtkMultiBlockDataSet* output); void convertMeshCellSets(vtkMultiBlockDataSet* output);
//- Face set meshes //- Face set meshes
void convertMeshFaceSet(vtkMultiBlockDataSet* output); void convertMeshFaceSets(vtkMultiBlockDataSet* output);
//- Point set meshes //- Point set meshes
void convertMeshPointSet(vtkMultiBlockDataSet* output); void convertMeshPointSets(vtkMultiBlockDataSet* output);
// Add mesh functions // Add mesh functions
@ -433,7 +448,7 @@ private:
//- Add the fields in the selected time directory to the selection //- Add the fields in the selected time directory to the selection
// lists // lists
template<class GeoField> template<class GeoField>
label addFields label addObjectsToSelection
( (
vtkDataArraySelection* fieldSelection, vtkDataArraySelection* fieldSelection,
const IOobjectList& objects, const IOobjectList& objects,
@ -602,8 +617,7 @@ public:
vtkPV3Foam vtkPV3Foam
( (
const char* const FileName, const char* const FileName,
vtkPV3FoamReader* reader, vtkPV3FoamReader* reader
vtkMultiBlockDataSet* output
); );
@ -614,13 +628,14 @@ public:
// Member Functions // Member Functions
//- Update
void UpdateInformation(); void UpdateInformation();
void Update(vtkMultiBlockDataSet* output); void Update(vtkMultiBlockDataSet* output);
//- allocate and return a list of selected times //- Allocate and return a list of selected times
// returns the count via the parameter // returns the count via the parameter
double* timeSteps(int& nTimeSteps); double* findTimes(int& nTimeSteps);
//- Add patch names to the display //- Add patch names to the display
void addPatchNames(vtkRenderer* renderer); void addPatchNames(vtkRenderer* renderer);
@ -635,14 +650,8 @@ public:
// Access // Access
//- Return the total number of available timesets //- Debug information
int numberOfAvailableTimes() const; void PrintSelf(ostream&, vtkIndent) const;
int numberOfCells();
int numberOfPoints();
int numberOfMeshes() const;
}; };

View File

@ -1,73 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
\\/ 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
\*---------------------------------------------------------------------------*/
#include "vtkPV3Foam.H"
// Foam includes
#include "pointSet.H"
#include "vtkPV3FoamInsertNextPoint.H"
// VTK includes
#include "vtkPoints.h"
#include "vtkPolyData.h"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::vtkPV3Foam::addPointSetMesh
(
const fvMesh& mesh,
const pointSet& pSet,
vtkPolyData* vtkmesh
)
{
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointSetMesh" << endl;
}
const pointField& meshPoints = mesh.points();
vtkPoints *vtkpoints = vtkPoints::New();
vtkpoints->Allocate(pSet.size());
forAllConstIter(pointSet, pSet, iter)
{
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[iter.key()]);
}
vtkmesh->SetPoints(vtkpoints);
vtkpoints->Delete();
if (debug)
{
Info<< "<end> Foam::vtkPV3Foam::addPointSetMesh" << endl;
}
}
// ************************************************************************* //

View File

@ -1,72 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2008 OpenCFD Ltd.
\\/ 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
\*---------------------------------------------------------------------------*/
#include "vtkPV3Foam.H"
// Foam includes
#include "vtkPV3FoamInsertNextPoint.H"
// VTK includes
#include "vtkPoints.h"
#include "vtkPolyData.h"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::vtkPV3Foam::addPointZoneMesh
(
const fvMesh& mesh,
const labelList& pointLabels,
vtkPolyData* vtkmesh
)
{
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl;
}
const pointField& meshPoints = mesh.points();
vtkPoints *vtkpoints = vtkPoints::New();
vtkpoints->Allocate(pointLabels.size());
forAll(pointLabels, pointI)
{
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[pointLabels[pointI]]);
}
vtkmesh->SetPoints(vtkpoints);
vtkpoints->Delete();
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl;
}
}
// ************************************************************************* //

View File

@ -30,6 +30,7 @@ Description
// Foam includes // Foam includes
#include "faceSet.H" #include "faceSet.H"
#include "pointSet.H"
#include "vtkPV3FoamInsertNextPoint.H" #include "vtkPV3FoamInsertNextPoint.H"
// VTK includes // VTK includes
@ -103,4 +104,36 @@ void Foam::vtkPV3Foam::addFaceSetMesh
} }
} }
void Foam::vtkPV3Foam::addPointSetMesh
(
const fvMesh& mesh,
const pointSet& pSet,
vtkPolyData* vtkmesh
)
{
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointSetMesh" << endl;
}
const pointField& meshPoints = mesh.points();
vtkPoints *vtkpoints = vtkPoints::New();
vtkpoints->Allocate(pSet.size());
forAllConstIter(pointSet, pSet, iter)
{
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[iter.key()]);
}
vtkmesh->SetPoints(vtkpoints);
vtkpoints->Delete();
if (debug)
{
Info<< "<end> Foam::vtkPV3Foam::addPointSetMesh" << endl;
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -22,13 +22,10 @@ License
along with OpenFOAM; if not, write to the Free Software Foundation, along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
InClass
vtkPV3Foam
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef vtkPV3FoamAddFields_H #ifndef vtkPV3FoamAddToSelection_H
#define vtkPV3FoamAddFields_H #define vtkPV3FoamAddToSelection_H
// FOAM includes // FOAM includes
#include "SortableList.H" #include "SortableList.H"
@ -38,48 +35,48 @@ InClass
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
template<class GeoField> template<class Type>
Foam::label Foam::vtkPV3Foam::addFields Foam::label Foam::vtkPV3Foam::addToSelection
( (
vtkDataArraySelection *fieldSelection, vtkDataArraySelection *arraySelection,
const IOobjectList& objects, const IOobjectList& objectLst,
const string& suffix const string& suffix
) )
{ {
IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName)); IOobjectList objects(objectLst.lookupClass(Type::typeName));
SortableList<word> fields(fieldObjects.size()); SortableList<word> objectNames(objects.size());
label count = 0; label count = 0;
forAllConstIter(IOobjectList, fieldObjects, iter) forAllConstIter(IOobjectList, objects, iter)
{ {
fields[count++] = iter()->name(); objectNames[count++] = iter()->name();
} }
if (count) if (count)
{ {
fields.sort(); objectNames.sort();
forAll(fields, fieldI) forAll (objectNames, objI)
{ {
if (debug) if (debug)
{ {
Info<<" addField to GUI " << GeoField::typeName Info<<" addToSelection<" << Type::typeName << "> to GUI "
<< ":" << fields[fieldI] << endl; << ":" << objectNames[objI] << endl;
} }
if (suffix.size()) if (suffix.size())
{ {
fieldSelection->AddArray arraySelection->AddArray
( (
(fields[fieldI] + suffix).c_str() (objectNames[objI] + suffix).c_str()
); );
} }
else else
{ {
fieldSelection->AddArray arraySelection->AddArray
( (
fields[fieldI].c_str() objectNames[objI].c_str()
); );
} }
} }

View File

@ -38,6 +38,7 @@ Description
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::vtkPV3Foam::addFaceZoneMesh void Foam::vtkPV3Foam::addFaceZoneMesh
( (
const fvMesh& mesh, const fvMesh& mesh,
@ -102,4 +103,36 @@ void Foam::vtkPV3Foam::addFaceZoneMesh
} }
void Foam::vtkPV3Foam::addPointZoneMesh
(
const fvMesh& mesh,
const labelList& pointLabels,
vtkPolyData* vtkmesh
)
{
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl;
}
const pointField& meshPoints = mesh.points();
vtkPoints *vtkpoints = vtkPoints::New();
vtkpoints->Allocate(pointLabels.size());
forAll(pointLabels, pointI)
{
vtkPV3FoamInsertNextPoint(vtkpoints, meshPoints[pointLabels[pointI]]);
}
vtkmesh->SetPoints(vtkpoints);
vtkpoints->Delete();
if (debug)
{
Info<< "<beg> Foam::vtkPV3Foam::addPointZoneMesh" << endl;
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -76,7 +76,7 @@ void Foam::vtkPV3Foam::convertMeshVolume
if (debug) if (debug)
{ {
Info<< "Creating VTK internal mesh" << endl; Info<< "Creating VTK internalMesh" << endl;
} }
const label datasetId = 0; const label datasetId = 0;
@ -258,14 +258,14 @@ void Foam::vtkPV3Foam::convertMeshCellZones
( (
subsetter.subMesh(), subsetter.subMesh(),
vtkmesh, vtkmesh,
superCellZonesCells_[datasetId] zoneSuperCells_[datasetId]
); );
// renumber - superCells must contain global cell ids // renumber - superCells must contain global cell ids
inplaceRenumber inplaceRenumber
( (
subsetter.cellMap(), subsetter.cellMap(),
superCellZonesCells_[datasetId] zoneSuperCells_[datasetId]
); );
AddToBlock AddToBlock
@ -285,14 +285,14 @@ void Foam::vtkPV3Foam::convertMeshCellZones
} }
void Foam::vtkPV3Foam::convertMeshCellSet void Foam::vtkPV3Foam::convertMeshCellSets
( (
vtkMultiBlockDataSet* output vtkMultiBlockDataSet* output
) )
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::convertMeshCellSet" << endl; Info<< "<beg> Foam::vtkPV3Foam::convertMeshCellSets" << endl;
} }
const selectionInfo& selector = selectInfoCellSets_; const selectionInfo& selector = selectInfoCellSets_;
@ -337,14 +337,14 @@ void Foam::vtkPV3Foam::convertMeshCellSet
( (
subsetter.subMesh(), subsetter.subMesh(),
vtkmesh, vtkmesh,
superCellSetCells_[datasetId] csetSuperCells_[datasetId]
); );
// renumber - superCells must contain global cell ids // renumber - superCells must contain global cell ids
inplaceRenumber inplaceRenumber
( (
subsetter.cellMap(), subsetter.cellMap(),
superCellSetCells_[datasetId] csetSuperCells_[datasetId]
); );
AddToBlock AddToBlock
@ -359,10 +359,11 @@ void Foam::vtkPV3Foam::convertMeshCellSet
if (debug) if (debug)
{ {
Info<< "<end> Foam::vtkPV3Foam::convertMeshCellSet" << endl; Info<< "<end> Foam::vtkPV3Foam::convertMeshCellSets" << endl;
} }
} }
void Foam::vtkPV3Foam::convertMeshFaceZones void Foam::vtkPV3Foam::convertMeshFaceZones
( (
vtkMultiBlockDataSet* output vtkMultiBlockDataSet* output
@ -425,14 +426,14 @@ void Foam::vtkPV3Foam::convertMeshFaceZones
} }
void Foam::vtkPV3Foam::convertMeshFaceSet void Foam::vtkPV3Foam::convertMeshFaceSets
( (
vtkMultiBlockDataSet* output vtkMultiBlockDataSet* output
) )
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::convertMeshFaceSet" << endl; Info<< "<beg> Foam::vtkPV3Foam::convertMeshFaceSets" << endl;
} }
const selectionInfo& selector = selectInfoFaceSets_; const selectionInfo& selector = selectInfoFaceSets_;
@ -490,7 +491,7 @@ void Foam::vtkPV3Foam::convertMeshFaceSet
if (debug) if (debug)
{ {
Info<< "<end> Foam::vtkPV3Foam::convertMeshFaceSet" << endl; Info<< "<end> Foam::vtkPV3Foam::convertMeshFaceSets" << endl;
} }
} }
@ -558,14 +559,14 @@ void Foam::vtkPV3Foam::convertMeshPointZones
void Foam::vtkPV3Foam::convertMeshPointSet void Foam::vtkPV3Foam::convertMeshPointSets
( (
vtkMultiBlockDataSet* output vtkMultiBlockDataSet* output
) )
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::convertMeshPointSet" << endl; Info<< "<beg> Foam::vtkPV3Foam::convertMeshPointSets" << endl;
} }
const selectionInfo& selector = selectInfoPointSets_; const selectionInfo& selector = selectInfoPointSets_;
@ -623,7 +624,7 @@ void Foam::vtkPV3Foam::convertMeshPointSet
if (debug) if (debug)
{ {
Info<< "<end> Foam::vtkPV3Foam::convertMeshPointSet" << endl; Info<< "<end> Foam::vtkPV3Foam::convertMeshPointSets" << endl;
} }
} }

View File

@ -173,8 +173,7 @@ void Foam::vtkPV3Foam::convertVolFields
convertPatchFaceField convertPatchFaceField
( (
tf.name(), tf.name(),
fvPatchField<Type>(p, tf) fvPatchField<Type>(p, tf).patchInternalField()(),
.patchInternalField()(),
output, output,
selectInfoPatches_, selectInfoPatches_,
selectedRegionDatasetIds_[regionId] selectedRegionDatasetIds_[regionId]
@ -236,7 +235,7 @@ void Foam::vtkPV3Foam::convertVolFields
( (
tf, tf,
output, selectInfoCellZones_, datasetId, output, selectInfoCellZones_, datasetId,
superCellZonesCells_[datasetId] zoneSuperCells_[datasetId]
); );
} }
@ -273,7 +272,7 @@ void Foam::vtkPV3Foam::convertVolFields
( (
tf, tf,
output, selectInfoCellSets_, datasetId, output, selectInfoCellSets_, datasetId,
superCellSetCells_[datasetId] csetSuperCells_[datasetId]
); );
} }

View File

@ -28,7 +28,6 @@ License
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
//- Extract up to the first non-word characters
inline Foam::word Foam::vtkPV3Foam::getFirstWord(const char* str) inline Foam::word Foam::vtkPV3Foam::getFirstWord(const char* str)
{ {
if (str) if (str)
@ -46,32 +45,4 @@ inline Foam::word Foam::vtkPV3Foam::getFirstWord(const char* str)
} }
} }
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -50,14 +50,7 @@ void Foam::vtkPV3Foam::updateFoamMesh()
Info<< "<beg> Foam::vtkPV3Foam::updateFoamMesh" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateFoamMesh" << endl;
} }
if if (!reader_->GetCacheMesh())
(
!reader_->GetCacheMesh()
#ifdef PV3FOAM_TIMESELECTION
// This is only useful if the times are individually selectable
|| reader_->GetTimeSelection()->GetArraySetting(0)
#endif
)
{ {
delete meshPtr_; delete meshPtr_;
meshPtr_ = NULL; meshPtr_ = NULL;
@ -79,6 +72,8 @@ void Foam::vtkPV3Foam::updateFoamMesh()
dbPtr_() dbPtr_()
) )
); );
meshChanged_ = true;
} }
else else
{ {

View File

@ -22,8 +22,6 @@ License
along with OpenFOAM; if not, write to the Free Software Foundation, along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Description
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "vtkPV3Foam.H" #include "vtkPV3Foam.H"
@ -31,13 +29,17 @@ Description
// Foam includes // Foam includes
#include "cellSet.H" #include "cellSet.H"
#include "faceSet.H" #include "faceSet.H"
#include "pointSet.H"
#include "IOobjectList.H" #include "IOobjectList.H"
#include "IOPtrList.H" #include "IOPtrList.H"
#include "pointSet.H"
#include "polyBoundaryMeshEntries.H" #include "polyBoundaryMeshEntries.H"
#include "entry.H" #include "entry.H"
#include "vtkPV3FoamReader.h" #include "vtkPV3FoamReader.h"
// local headers
#include "vtkPV3FoamAddToSelection.H"
#include "vtkPV3FoamUpdateInformationFields.H"
// VTK includes // VTK includes
#include "vtkDataArraySelection.h" #include "vtkDataArraySelection.h"
@ -77,10 +79,43 @@ public:
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
Foam::wordList Foam::vtkPV3Foam::readZoneNames(const word& zoneType)
{
wordList zoneNames;
// mesh not loaded - read from file
IOobject ioObj
(
zoneType,
dbPtr_().findInstance
(
polyMesh::meshSubDir,
zoneType,
IOobject::READ_IF_PRESENT
),
polyMesh::meshSubDir,
dbPtr_(),
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
);
if (ioObj.headerOk())
{
zonesEntries zones(ioObj);
zoneNames.setSize(zones.size());
forAll (zones, zoneI)
{
zoneNames[zoneI] = zones[zoneI].keyword();
}
}
return zoneNames;
}
#include "vtkPV3FoamAddFields.H"
#include "vtkPV3FoamUpdateInformationFields.H"
void Foam::vtkPV3Foam::updateInformationInternalMesh() void Foam::vtkPV3Foam::updateInformationInternalMesh()
{ {
@ -103,6 +138,9 @@ void Foam::vtkPV3Foam::updateInformationInternalMesh()
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInformationInternalMesh" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInformationInternalMesh" << endl;
} }
@ -132,7 +170,7 @@ void Foam::vtkPV3Foam::updateInformationLagrangian()
arraySelection->AddArray("lagrangian"); arraySelection->AddArray("lagrangian");
selectInfoLagrangian_ += 1; selectInfoLagrangian_ += 1;
Info<<"added cloudDirs\n"; Info<< "... added cloudDirs\n";
if (cloudDirs.size() > 1) if (cloudDirs.size() > 1)
{ {
@ -149,13 +187,16 @@ void Foam::vtkPV3Foam::updateInformationLagrangian()
{ {
if (debug) if (debug)
{ {
Info<<"no clouds identified in " <<nl Info<< "... no clouds identified in " <<nl
<< " " <<dbPtr_->timePath()/"lagrangian" << endl; << " " <<dbPtr_->timePath()/"lagrangian" << endl;
} }
} }
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInformationLagrangian" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInformationLagrangian" << endl;
} }
} }
@ -165,7 +206,8 @@ void Foam::vtkPV3Foam::updateInformationPatches()
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::updateInformationPatches" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateInformationPatches"
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); vtkDataArraySelection *arraySelection = reader_->GetRegionSelection();
@ -209,6 +251,9 @@ void Foam::vtkPV3Foam::updateInformationPatches()
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInformationPatches" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInformationPatches" << endl;
} }
} }
@ -218,108 +263,82 @@ void Foam::vtkPV3Foam::updateInformationZones()
{ {
if (debug) if (debug)
{ {
Info<< "<beg> Foam::vtkPV3Foam::updateInformationZones" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateInformationZones"
<< " [meshPtr=" << (meshPtr_ ? "set" : "NULL") << "]" << endl;
} }
vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); vtkDataArraySelection *arraySelection = reader_->GetRegionSelection();
// Read cell zone information wordList zoneNames;
//
// cellZones information
// ~~~~~~~~~~~~~~~~~~~~~
if (meshPtr_)
{ {
zonesEntries zones zoneNames = meshPtr_->cellZones().names();
( }
IOobject else
( {
"cellZones", zoneNames = readZoneNames("cellZones");
dbPtr_().findInstance(polyMesh::meshSubDir, "cellZones"),
polyMesh::meshSubDir,
dbPtr_(),
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
)
);
selectInfoCellZones_ = arraySelection->GetNumberOfArrays();
if (zones.headerOk())
{
forAll(zones, zoneI)
{
arraySelection->AddArray
(
(zones[zoneI].keyword() + " - cellZone").c_str()
);
}
selectInfoCellZones_ += zones.size();
}
superCellZonesCells_.setSize(selectInfoCellZones_.size());
} }
// Read face zone information selectInfoCellZones_ = arraySelection->GetNumberOfArrays();
forAll (zoneNames, zoneI)
{ {
zonesEntries zones arraySelection->AddArray((zoneNames[zoneI] + " - cellZone").c_str());
( }
IOobject selectInfoCellZones_ += zoneNames.size();
( zoneSuperCells_.setSize(selectInfoCellZones_.size());
"faceZones",
dbPtr_().findInstance(polyMesh::meshSubDir, "faceZones"),
polyMesh::meshSubDir,
dbPtr_(),
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
)
);
selectInfoFaceZones_ = arraySelection->GetNumberOfArrays();
if (zones.headerOk()) //
{ // faceZones information
forAll(zones, zoneI) // ~~~~~~~~~~~~~~~~~~~~~
{ if (meshPtr_)
arraySelection->AddArray {
( zoneNames = meshPtr_->faceZones().names();
(zones[zoneI].keyword() + " - faceZone").c_str() }
); else
} {
selectInfoFaceZones_ += zones.size(); zoneNames = readZoneNames("faceZones");
}
} }
// Read point zone information selectInfoFaceZones_ = arraySelection->GetNumberOfArrays();
forAll (zoneNames, zoneI)
{ {
zonesEntries zones arraySelection->AddArray((zoneNames[zoneI] + " - faceZone").c_str());
(
IOobject
(
"pointZones",
dbPtr_().findInstance(polyMesh::meshSubDir, "pointZones"),
polyMesh::meshSubDir,
dbPtr_(),
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE,
false
)
);
selectInfoPointZones_ = arraySelection->GetNumberOfArrays();
if (zones.headerOk())
{
forAll(zones, zoneI)
{
arraySelection->AddArray
(
(zones[zoneI].keyword() + " - pointZone").c_str()
);
}
selectInfoPointZones_ += zones.size();
}
} }
selectInfoFaceZones_ += zoneNames.size();
//
// pointZones information
// ~~~~~~~~~~~~~~~~~~~~~~
if (meshPtr_)
{
zoneNames = meshPtr_->pointZones().names();
}
else
{
zoneNames = readZoneNames("pointZones");
}
selectInfoPointZones_ = arraySelection->GetNumberOfArrays();
forAll (zoneNames, zoneI)
{
arraySelection->AddArray((zoneNames[zoneI] + " - pointZone").c_str());
}
selectInfoPointZones_ += zoneNames.size();
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInformationZones" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInformationZones" << endl;
} }
} }
@ -332,7 +351,7 @@ void Foam::vtkPV3Foam::updateInformationSets()
vtkDataArraySelection *arraySelection = reader_->GetRegionSelection(); vtkDataArraySelection *arraySelection = reader_->GetRegionSelection();
// Add sets // Add names of sets
IOobjectList objects IOobjectList objects
( (
dbPtr_(), dbPtr_(),
@ -342,16 +361,16 @@ void Foam::vtkPV3Foam::updateInformationSets()
selectInfoCellSets_ = arraySelection->GetNumberOfArrays(); selectInfoCellSets_ = arraySelection->GetNumberOfArrays();
selectInfoCellSets_ += addFields<cellSet> selectInfoCellSets_ += addToSelection<cellSet>
( (
arraySelection, arraySelection,
objects, objects,
" - cellSet" " - cellSet"
); );
superCellSetCells_.setSize(selectInfoCellSets_.size()); csetSuperCells_.setSize(selectInfoCellSets_.size());
selectInfoFaceSets_ = arraySelection->GetNumberOfArrays(); selectInfoFaceSets_ = arraySelection->GetNumberOfArrays();
selectInfoFaceSets_ += addFields<faceSet> selectInfoFaceSets_ += addToSelection<faceSet>
( (
arraySelection, arraySelection,
objects, objects,
@ -359,7 +378,7 @@ void Foam::vtkPV3Foam::updateInformationSets()
); );
selectInfoPointSets_ = arraySelection->GetNumberOfArrays(); selectInfoPointSets_ = arraySelection->GetNumberOfArrays();
selectInfoPointSets_ += addFields<pointSet> selectInfoPointSets_ += addToSelection<pointSet>
( (
arraySelection, arraySelection,
objects, objects,
@ -368,6 +387,9 @@ void Foam::vtkPV3Foam::updateInformationSets()
if (debug) if (debug)
{ {
// just for debug info
getSelectedArrayEntries(arraySelection);
Info<< "<end> Foam::vtkPV3Foam::updateInformationSets" << endl; Info<< "<end> Foam::vtkPV3Foam::updateInformationSets" << endl;
} }
} }
@ -399,32 +421,32 @@ void Foam::vtkPV3Foam::updateInformationLagrangianFields()
"lagrangian"/cloudName_ "lagrangian"/cloudName_
); );
addFields<IOField<label> > addToSelection<IOField<label> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<IOField<scalar> > addToSelection<IOField<scalar> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<IOField<vector> > addToSelection<IOField<vector> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<IOField<sphericalTensor> > addToSelection<IOField<sphericalTensor> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<IOField<symmTensor> > addToSelection<IOField<symmTensor> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<IOField<tensor> > addToSelection<IOField<tensor> >
( (
arraySelection, arraySelection,
objects objects
@ -444,5 +466,7 @@ void Foam::vtkPV3Foam::updateInformationLagrangianFields()
} }
} }
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// ************************************************************************* // // ************************************************************************* //

View File

@ -43,11 +43,23 @@ void Foam::vtkPV3Foam::updateInformationFields
Info<< "<beg> Foam::vtkPV3Foam::updateInformationFields" << endl; Info<< "<beg> Foam::vtkPV3Foam::updateInformationFields" << endl;
} }
// preserve the currently selected values stringList selectedEntries;
const stringList selectedEntries = getSelectedArrayEntries // enable 'p' and 'U' on the first call
( if (arraySelection->GetNumberOfArrays() == 0)
arraySelection {
); selectedEntries.setSize(2);
selectedEntries[0] = "p";
selectedEntries[1] = "U";
}
else
{
// preserve the currently selected values
selectedEntries = getSelectedArrayEntries
(
arraySelection
);
}
arraySelection->RemoveAllArrays(); arraySelection->RemoveAllArrays();
// Search for list of objects for this time // Search for list of objects for this time
@ -56,33 +68,33 @@ void Foam::vtkPV3Foam::updateInformationFields
//- Add volume fields to GUI //- Add volume fields to GUI
/* /*
addFields<GeometricField<label, patchType, meshType> > addToSelection<GeometricField<label, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects
); );
*/ */
addFields<GeometricField<scalar, patchType, meshType> > addToSelection<GeometricField<scalar, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<GeometricField<vector, patchType, meshType> > addToSelection<GeometricField<vector, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<GeometricField<sphericalTensor, patchType, meshType> > addToSelection<GeometricField<sphericalTensor, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<GeometricField<symmTensor, patchType, meshType> > addToSelection<GeometricField<symmTensor, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects
); );
addFields<GeometricField<tensor, patchType, meshType> > addToSelection<GeometricField<tensor, patchType, meshType> >
( (
arraySelection, arraySelection,
objects objects

View File

@ -1,3 +1,8 @@
#if [ "$FV_HOME" -a -r $FV_HOME ] ; then #!/bin/sh
# disabled
# if [ "$FV_HOME" -a -r $FV_HOME ]
# then
# wmake fieldview9Reader # wmake fieldview9Reader
#fi # fi

View File

@ -418,19 +418,55 @@ Foam::instant Foam::Time::findClosestTime(const scalar t) const
return times[times.size() - 1]; return times[times.size() - 1];
} }
label nearestIndex = -1;
scalar deltaT = GREAT; scalar deltaT = GREAT;
label closesti = 0;
for (label i=1; i<times.size(); i++) for (label i=1; i<times.size(); i++)
{ {
if (mag(times[i].value() - t) < deltaT) scalar diff = mag(times[i].value() - t);
if (diff < deltaT)
{ {
deltaT = mag(times[i].value() - t); deltaT = diff;
closesti = i; nearestIndex = i;
} }
} }
return times[closesti]; return times[nearestIndex];
}
//
// This should work too,
// if we don't worry about checking "constant" explicitly
//
// Foam::instant Foam::Time::findClosestTime(const scalar t) const
// {
// instantList times = Time::findTimes(path());
// label timeIndex = min(findClosestTimeIndex(times, t), 0);
// return times[timeIndex];
// }
Foam::label Foam::Time::findClosestTimeIndex
(
const instantList& times,
const scalar t
)
{
label nearestIndex = -1;
scalar deltaT = GREAT;
forAll (times, i)
{
if (times[i].name() == "constant") continue;
scalar diff = fabs(times[i].value() - t);
if (diff < deltaT)
{
deltaT = diff;
nearestIndex = i;
}
}
return nearestIndex;
} }

View File

@ -300,6 +300,9 @@ public:
//- Search the case for the time closest to the given time //- Search the case for the time closest to the given time
instant findClosestTime(const scalar) const; instant findClosestTime(const scalar) const;
//- Search instantList for the time index closest to the given time
static label findClosestTimeIndex(const instantList&, const scalar);
//- Write using given format, version and compression //- Write using given format, version and compression
virtual bool writeObject virtual bool writeObject
( (

View File

@ -33,10 +33,7 @@ Description
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam Foam::word Foam::Time::findInstance
{
word Time::findInstance
( (
const fileName& dir, const fileName& dir,
const word& name, const word& name,
@ -139,9 +136,4 @@ word Time::findInstance
return constant(); return constant();
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -35,12 +35,7 @@ Description
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam Foam::instantList Foam::Time::findTimes(const fileName& directory)
{
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
instantList Time::findTimes(const fileName& directory)
{ {
if (debug) if (debug)
{ {
@ -101,9 +96,4 @@ instantList Time::findTimes(const fileName& directory)
return Times; return Times;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// ************************************************************************* // // ************************************************************************* //

View File

@ -337,23 +337,21 @@ Foam::argList::argList
Switch distributed(false); Switch distributed(false);
if (decompositionDict.found("distributed")) if
(
decompositionDict.readIfPresent("distributed", distributed)
&& distributed
)
{ {
decompositionDict.lookup("distributed") >> distributed; decompositionDict.lookup("roots") >> roots;
if (distributed) if (roots.size() != Pstream::nProcs()-1)
{ {
decompositionDict.lookup("roots") >> roots; FatalError
<< "number of entries in decompositionDict::roots"
if (roots.size() != Pstream::nProcs()) << " is not equal to the number of slaves "
{ << Pstream::nProcs()-1
FatalError << exit(FatalError);
<< "number of entries in "
<< "decompositionDict::roots"
<< " is not equal to the number of processors "
<< Pstream::nProcs()
<< exit(FatalError);
}
} }
} }

View File

@ -1,22 +1,7 @@
if (args.options().found("time")) if (args.options().found("time"))
{ {
scalar time(readScalar(IStringStream(args.options()["time"])())); scalar timeValue(readScalar(IStringStream(args.options()["time"])()));
int nearestIndex = -1; startTime = Time::findClosestTimeIndex(Times, timeValue);
scalar nearestDiff = Foam::GREAT; endTime = startTime + 1;
forAll(Times, timeIndex)
{
if (Times[timeIndex].name() == "constant") continue;
scalar diff = fabs(Times[timeIndex].value() - time);
if (diff < nearestDiff)
{
nearestDiff = diff;
nearestIndex = timeIndex;
}
}
startTime = nearestIndex;
endTime = nearestIndex + 1;
} }

View File

@ -284,6 +284,7 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate()
*this *this
); );
pointZones_.setSize(newPointZones.size());
forAll (pointZones_, pzI) forAll (pointZones_, pzI)
{ {
pointZones_[pzI] = newPointZones[pzI]; pointZones_[pzI] = newPointZones[pzI];
@ -304,6 +305,7 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate()
*this *this
); );
faceZones_.setSize(newFaceZones.size());
forAll (faceZones_, fzI) forAll (faceZones_, fzI)
{ {
faceZones_[fzI].resetAddressing faceZones_[fzI].resetAddressing
@ -328,6 +330,7 @@ Foam::polyMesh::readUpdateState Foam::polyMesh::readUpdate()
*this *this
); );
cellZones_.setSize(newCellZones.size());
forAll (cellZones_, czI) forAll (cellZones_, czI)
{ {
cellZones_[czI] = newCellZones[czI]; cellZones_[czI] = newCellZones[czI];

View File

@ -102,7 +102,7 @@ Foam::scalar Foam::layerAdditionRemoval::readOldThickness
const dictionary& dict const dictionary& dict
) )
{ {
dict.lookupOrDefault("oldLayerThickness", -1.0); return dict.lookupOrDefault("oldLayerThickness", -1.0);
} }

View File

@ -1,126 +0,0 @@
cellClassification/cellClassification.C
cellClassification/cellInfo.C
cellQuality/cellQuality.C
cellDist/cellDistFuncs.C
cellDist/patchWave/patchWave.C
cellDist/wallPoint/wallPoint.C
cellFeatures/cellFeatures.C
coordinateSystems/parabolicCylindricalCS.C
coordinateSystems/coordinateSystem.C
coordinateSystems/toroidalCS.C
coordinateSystems/cartesianCS.C
coordinateSystems/newCoordinateSystem.C
coordinateSystems/cylindricalCS.C
coordinateSystems/sphericalCS.C
coordinateSystems/coordinateRotation/coordinateRotation.C
coordinateSystems/coordinateRotation/EulerCoordinateRotation.C
coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C
polyMeshZipUpCells/polyMeshZipUpCells.C
primitiveMeshGeometry/primitiveMeshGeometry.C
meshSearch/meshSearch.C
meshTools/meshTools.C
PointEdgeWave/PointEdgeWaveName.C
PointEdgeWave/pointEdgePoint.C
regionSplit/regionSplit.C
octree/octreeName.C
octree/octreeDataPoint.C
octree/octreeDataPointTreeLeaf.C
octree/octreeDataEdges.C
octree/octreeDataCell.C
octree/octreeDataFace.C
octree/treeBoundBox.C
octree/treeNodeName.C
octree/treeLeafName.C
octree/pointIndexHitIOList.C
indexedOctree/indexedOctreeName.C
indexedOctree/treeDataTriSurface.C
topoSets = sets/topoSets
$(topoSets)/cellSet.C
$(topoSets)/topoSet.C
$(topoSets)/faceSet.C
$(topoSets)/pointSet.C
sets/topoSetSource/topoSetSource.C
cellSources = sets/cellSources
$(cellSources)/faceToCell/faceToCell.C
$(cellSources)/fieldToCell/fieldToCell.C
$(cellSources)/pointToCell/pointToCell.C
$(cellSources)/shapeToCell/shapeToCell.C
$(cellSources)/boxToCell/boxToCell.C
$(cellSources)/rotatedBoxToCell/rotatedBoxToCell.C
$(cellSources)/labelToCell/labelToCell.C
$(cellSources)/surfaceToCell/surfaceToCell.C
$(cellSources)/cellToCell/cellToCell.C
$(cellSources)/nearestToCell/nearestToCell.C
$(cellSources)/nbrToCell/nbrToCell.C
$(cellSources)/zoneToCell/zoneToCell.C
faceSources = sets/faceSources
$(faceSources)/faceToFace/faceToFace.C
$(faceSources)/labelToFace/labelToFace.C
$(faceSources)/cellToFace/cellToFace.C
$(faceSources)/normalToFace/normalToFace.C
$(faceSources)/pointToFace/pointToFace.C
$(faceSources)/patchToFace/patchToFace.C
$(faceSources)/boundaryToFace/boundaryToFace.C
$(faceSources)/zoneToFace/zoneToFace.C
$(faceSources)/boxToFace/boxToFace.C
pointSources = sets/pointSources
$(pointSources)/labelToPoint/labelToPoint.C
$(pointSources)/pointToPoint/pointToPoint.C
$(pointSources)/cellToPoint/cellToPoint.C
$(pointSources)/faceToPoint/faceToPoint.C
$(pointSources)/boxToPoint/boxToPoint.C
$(pointSources)/surfaceToPoint/surfaceToPoint.C
$(pointSources)/zoneToPoint/zoneToPoint.C
surfaceSets/surfaceSets.C
triSurface/orientedSurface/orientedSurface.C
booleanOps = triSurface/booleanOps
surfaceIntersection = $(booleanOps)/surfaceIntersection
$(surfaceIntersection)/surfaceIntersection.C
$(surfaceIntersection)/surfaceIntersectionFuncs.C
$(surfaceIntersection)/edgeIntersections.C
booleanSurface = $(booleanOps)/booleanSurface
$(booleanSurface)/booleanSurface.C
intersectedSurface = $(booleanOps)/intersectedSurface
$(intersectedSurface)/intersectedSurface.C
$(intersectedSurface)/edgeSurface.C
triSurface/triSurfaceSearch/triSurfaceSearch.C
triSurface/octreeData/octreeDataTriSurface.C
triSurface/octreeData/octreeDataTriSurfaceTreeLeaf.C
triSurface/triangleFuncs/triangleFuncs.C
triSurface/surfaceFeatures/surfaceFeatures.C
triSurface/triSurfaceMeshes/triSurfaceMeshes.C
twoDPointCorrector/twoDPointCorrector.C
directMapped/directMappedPolyPatch/directMappedPolyPatch.C
directMapped/directMappedPointPatch/directMappedPointPatch.C
LIB = $(FOAM_LIBBIN)/libmeshTools

View File

@ -29,6 +29,15 @@ License
#include "linePointRef.H" #include "linePointRef.H"
#include "meshTools.H" #include "meshTools.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
// set values for what is close to zero and what is considered to
// be positive (and not just rounding noise)
//! @cond localScope
const Foam::scalar zeroish = Foam::SMALL;
const Foam::scalar positive = Foam::SMALL * 1E3;
//! @endcond localScope
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// Find cut cells // Find cut cells
@ -71,8 +80,8 @@ void Foam::cuttingPlane::calcCutCells
if if
( (
(dotProducts[e[0]] < 0 && dotProducts[e[1]] > 0) (dotProducts[e[0]] < zeroish && dotProducts[e[1]] > positive)
|| (dotProducts[e[1]] < 0 && dotProducts[e[0]] > 0) || (dotProducts[e[1]] < zeroish && dotProducts[e[0]] > positive)
) )
{ {
nCutEdges++; nCutEdges++;
@ -116,8 +125,8 @@ Foam::labelList Foam::cuttingPlane::intersectEdges
if if
( (
(dotProducts[e[0]] < 0 && dotProducts[e[1]] > 0) (dotProducts[e[0]] < zeroish && dotProducts[e[1]] > positive)
|| (dotProducts[e[1]] < 0 && dotProducts[e[0]] > 0) || (dotProducts[e[1]] < zeroish && dotProducts[e[0]] > positive)
) )
{ {
// Edge is cut. // Edge is cut.
@ -126,7 +135,19 @@ Foam::labelList Foam::cuttingPlane::intersectEdges
scalar alpha = lineIntersect(linePointRef(p0, p1)); scalar alpha = lineIntersect(linePointRef(p0, p1));
dynCuttingPoints.append((1-alpha)*p0 + alpha*p1); if (alpha < zeroish)
{
dynCuttingPoints.append(p0);
}
else if (alpha > 1.0)
{
dynCuttingPoints.append(p1);
}
else
{
dynCuttingPoints.append((1-alpha)*p0 + alpha*p1);
}
edgePoint[edgeI] = dynCuttingPoints.size() - 1; edgePoint[edgeI] = dynCuttingPoints.size() - 1;
} }
} }

View File

@ -30,6 +30,10 @@ Description
No attempt at resolving degenerate cases. No attempt at resolving degenerate cases.
Note
When the cutting plane coincides with a mesh face, the cell edge on the
positive side of the plane is taken.
SourceFiles SourceFiles
cuttingPlane.C cuttingPlane.C

View File

@ -0,0 +1,47 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (25.75 3.62 0);
boundaryField
{
inlet
{
type freestream;
freestreamValue uniform (25.75 3.62 0);
}
outlet
{
type freestream;
freestreamValue uniform (25.75 3.62 0);
}
wall
{
type fixedValue;
value uniform (0 0 0);
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,47 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object nuTilda;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -1 0 0 0 0];
internalField uniform 0.14;
boundaryField
{
inlet
{
type freestream;
freestreamValue uniform 0.14;
}
outlet
{
type freestream;
freestreamValue uniform 0.14;
}
wall
{
type fixedValue;
value uniform 0;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View File

@ -0,0 +1,47 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object nut;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -1 0 0 0 0];
internalField uniform 0.14;
boundaryField
{
inlet
{
type freestream;
freestreamValue uniform 0.14;
}
outlet
{
type freestream;
freestreamValue uniform 0.14;
}
wall
{
type nutWallFunction;
value uniform 0;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* //

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 | | \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org | | \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -9,12 +9,36 @@ FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary; class volScalarField;
object transportProperties; object p;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nu nu [0 2 -1 0 0 0 0] 0.01; dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type freestreamPressure;
}
outlet
{
type freestreamPressure;
}
wall
{
type zeroGradient;
}
frontAndBack
{
type empty;
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,5 @@
#!/bin/sh
# Clean time folders only
rm -rf *[1-9]*

View File

@ -0,0 +1,173 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object RASProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
RASModel SpalartAllmaras; //kEpsilon;
turbulence on;
laminarCoeffs
{
}
kEpsilonCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphaEps 0.76923;
}
RNGkEpsilonCoeffs
{
Cmu 0.0845;
C1 1.42;
C2 1.68;
alphak 1.39;
alphaEps 1.39;
eta0 4.38;
beta 0.012;
}
NonlinearKEShihCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphak 1;
alphaEps 0.76932;
A1 1.25;
A2 1000;
Ctau1 -4;
Ctau2 13;
Ctau3 -2;
alphaKsi 0.9;
}
LienCubicKECoeffs
{
C1 1.44;
C2 1.92;
alphak 1;
alphaEps 0.76923;
A1 1.25;
A2 1000;
Ctau1 -4;
Ctau2 13;
Ctau3 -2;
alphaKsi 0.9;
}
QZetaCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphaZeta 0.76923;
anisotropic no;
}
LaunderSharmaKECoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphaEps 0.76923;
}
LamBremhorstKECoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphaEps 0.76923;
}
LienCubicKELowReCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphak 1;
alphaEps 0.76923;
A1 1.25;
A2 1000;
Ctau1 -4;
Ctau2 13;
Ctau3 -2;
alphaKsi 0.9;
Am 0.016;
Aepsilon 0.263;
Amu 0.00222;
}
LienLeschzinerLowReCoeffs
{
Cmu 0.09;
C1 1.44;
C2 1.92;
alphak 1;
alphaEps 0.76923;
Am 0.016;
Aepsilon 0.263;
Amu 0.00222;
}
LRRCoeffs
{
Cmu 0.09;
Clrr1 1.8;
Clrr2 0.6;
C1 1.44;
C2 1.92;
Cs 0.25;
Ceps 0.15;
alphaEps 0.76923;
}
LaunderGibsonRSTMCoeffs
{
Cmu 0.09;
Clg1 1.8;
Clg2 0.6;
C1 1.44;
C2 1.92;
C1Ref 0.5;
C2Ref 0.3;
Cs 0.25;
Ceps 0.15;
alphaEps 0.76923;
alphaR 1.22;
}
SpalartAllmarasCoeffs
{
alphaNut 1.5;
Cb1 0.1355;
Cb2 0.622;
Cw2 0.3;
Cw3 2;
Cv1 7.1;
//Next line Modified vorticity factor by Ashford 1996
Cv2 5.0;
}
wallFunctionCoeffs
{
kappa 0.4187;
E 9;
}
// ************************************************************************* //

View File

@ -0,0 +1,51 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class polyBoundaryMesh;
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
4
(
inlet
{
type patch;
physicalType inlet;
nFaces 134;
startFace 21254;
}
outlet
{
type patch;
physicalType outlet;
nFaces 160;
startFace 21388;
}
wall
{
type wall;
physicalType wall;
nFaces 78;
startFace 21548;
}
frontAndBack
{
type empty;
physicalType empty;
nFaces 21440;
startFace 21626;
}
)
// ************************************************************************* //

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
transportModel Newtonian;
rho rho [1 -3 0 0 0 0 0] 1.0;
nu nu [0 2 -1 0 0 0 0] 1e-05;
CrossPowerLawCoeffs
{
nu0 nu0 [0 2 -1 0 0 0 0] 1e-06;
nuInf nuInf [0 2 -1 0 0 0 0] 1e-06;
m m [0 0 1 0 0 0 0] 1;
n n [0 0 0 0 0 0 0] 1;
}
BirdCarreauCoeffs
{
nu0 nu0 [0 2 -1 0 0 0 0] 1e-06;
nuInf nuInf [0 2 -1 0 0 0 0] 1e-06;
k k [0 0 1 0 0 0 0] 0;
n n [0 0 0 0 0 0 0] 1;
}
// ************************************************************************* //

View File

@ -0,0 +1,173 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object turbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
turbulenceModel SpalartAllmaras; //kEpsilon;
turbulence on;
laminarCoeffs
{
}
kEpsilonCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
}
RNGkEpsilonCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.0845;
C1 C1 [0 0 0 0 0 0 0] 1.42;
C2 C2 [0 0 0 0 0 0 0] 1.68;
alphak alphaK [0 0 0 0 0 0 0] 1.39;
alphaEps alphaEps [0 0 0 0 0 0 0] 1.39;
eta0 eta0 [0 0 0 0 0 0 0] 4.38;
beta beta [0 0 0 0 0 0 0] 0.012;
}
NonlinearKEShihCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphak alphak [0 0 0 0 0 0 0] 1;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76932;
A1 A1 [0 0 0 0 0 0 0] 1.25;
A2 A2 [0 0 0 0 0 0 0] 1000;
Ctau1 Ctau1 [0 0 0 0 0 0 0] -4;
Ctau2 Ctau2 [0 0 0 0 0 0 0] 13;
Ctau3 Ctau3 [0 0 0 0 0 0 0] -2;
alphaKsi alphaKsi [0 0 0 0 0 0 0] 0.9;
}
LienCubicKECoeffs
{
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphak alphak [0 0 0 0 0 0 0] 1;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
A1 A1 [0 0 0 0 0 0 0] 1.25;
A2 A2 [0 0 0 0 0 0 0] 1000;
Ctau1 Ctau1 [0 0 0 0 0 0 0] -4;
Ctau2 Ctau2 [0 0 0 0 0 0 0] 13;
Ctau3 Ctau3 [0 0 0 0 0 0 0] -2;
alphaKsi alphaKsi [0 0 0 0 0 0 0] 0.9;
}
QZetaCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphaZeta alphaZeta [0 0 0 0 0 0 0] 0.76923;
anisotropic no;
}
LaunderSharmaKECoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
}
LamBremhorstKECoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
}
LienCubicKELowReCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphak alphak [0 0 0 0 0 0 0] 1;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
A1 A1 [0 0 0 0 0 0 0] 1.25;
A2 A2 [0 0 0 0 0 0 0] 1000;
Ctau1 Ctau1 [0 0 0 0 0 0 0] -4;
Ctau2 Ctau2 [0 0 0 0 0 0 0] 13;
Ctau3 Ctau3 [0 0 0 0 0 0 0] -2;
alphaKsi alphaKsi [0 0 0 0 0 0 0] 0.9;
Am Am [0 0 0 0 0 0 0] 0.016;
Aepsilon Aepsilon [0 0 0 0 0 0 0] 0.263;
Amu Amu [0 0 0 0 0 0 0] 0.00222;
}
LienLeschzinerLowReCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
alphak alphak [0 0 0 0 0 0 0] 1;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
Am Am [0 0 0 0 0 0 0] 0.016;
Aepsilon Aepsilon [0 0 0 0 0 0 0] 0.263;
Amu Amu [0 0 0 0 0 0 0] 0.00222;
}
LRRCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
Clrr1 Clrr1 [0 0 0 0 0 0 0] 1.8;
Clrr2 Clrr2 [0 0 0 0 0 0 0] 0.6;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
Cs Cs [0 0 0 0 0 0 0] 0.25;
Ceps Ceps [0 0 0 0 0 0 0] 0.15;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
}
LaunderGibsonRSTMCoeffs
{
Cmu Cmu [0 0 0 0 0 0 0] 0.09;
Clg1 Clg1 [0 0 0 0 0 0 0] 1.8;
Clg2 Clg2 [0 0 0 0 0 0 0] 0.6;
C1 C1 [0 0 0 0 0 0 0] 1.44;
C2 C2 [0 0 0 0 0 0 0] 1.92;
C1Ref C1Ref [0 0 0 0 0 0 0] 0.5;
C2Ref C2Ref [0 0 0 0 0 0 0] 0.3;
Cs Cs [0 0 0 0 0 0 0] 0.25;
Ceps Ceps [0 0 0 0 0 0 0] 0.15;
alphaEps alphaEps [0 0 0 0 0 0 0] 0.76923;
alphaR alphaR [0 0 0 0 0 0 0] 1.22;
}
SpalartAllmarasCoeffs
{
alphaNut alphaNut [0 0 0 0 0 0 0] 1.5;
Cb1 Cb1 [0 0 0 0 0 0 0] 0.1355;
Cb2 Cb2 [0 0 0 0 0 0 0] 0.622;
Cw2 Cw2 [0 0 0 0 0 0 0] 0.3;
Cw3 Cw3 [0 0 0 0 0 0 0] 2;
Cv1 Cv1 [0 0 0 0 0 0 0] 7.1;
//Next line Modified vorticity factor by Ashford 1996
Cv2 Cv2 [0 0 0 0 0 0 0] 5.0;
}
wallFunctionCoeffs
{
kappa kappa [0 0 0 0 0 0 0] 0.4187;
E E [0 0 0 0 0 0 0] 9;
}
// ************************************************************************* //

View File

@ -1,7 +1,7 @@
/*--------------------------------*- C++ -*----------------------------------*\ /*--------------------------------*- C++ -*----------------------------------*\
| ========= | | | ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: 1.5 | | \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org | | \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | | | \\/ M anipulation | |
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
@ -10,11 +10,38 @@ FoamFile
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary; class dictionary;
object transportProperties; object controlDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nu nu [0 2 -1 0 0 0 0] 0.01; application simpleFoam;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 500;
deltaT 1;
writeControl timeStep;
writeInterval 50;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression uncompressed;
timeFormat general;
timePrecision 6;
runTimeModifiable yes;
// ************************************************************************* // // ************************************************************************* //

View File

@ -0,0 +1,64 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default steadyState;
}
gradSchemes
{
default Gauss linear;
grad(p) Gauss linear;
grad(U) Gauss linear;
}
divSchemes
{
default none;
div(phi,U) Gauss linearUpwind Gauss linear;
div(phi,nuTilda) Gauss linearUpwind Gauss linear;
div((nuEff*dev(grad(U).T()))) Gauss linear;
}
laplacianSchemes
{
default none;
laplacian(nuEff,U) Gauss linear corrected;
laplacian((1|A(U)),p) Gauss linear corrected;
laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
laplacian(1,p) Gauss linear corrected;
}
interpolationSchemes
{
default linear;
interpolate(U) linear;
}
snGradSchemes
{
default corrected;
}
fluxRequired
{
default no;
p;
}
// ************************************************************************* //

View File

@ -0,0 +1,66 @@
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: dev |
| \\ / A nd | Web: http://www.OpenFOAM.org |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers
{
p GAMG
{
tolerance 1e-6;
relTol 0.1;
smoother GaussSeidel;
nPreSweeps 0;
nPostSweeps 2;
cacheAgglomeration true;
nCellsInCoarsestLevel 10;
agglomerator faceAreaPair;
mergeLevels 1;
};
U smoothSolver
{
smoother GaussSeidel;
nSweeps 2;
tolerance 1e-8;
relTol 0.1;
};
nuTilda smoothSolver
{
smoother GaussSeidel;
nSweeps 2;
tolerance 1e-8;
relTol 0.1;
};
}
SIMPLE
{
nNonOrthogonalCorrectors 0;
pRefCell 0;
pRefValue 0;
}
relaxationFactors
{
p 0.3;
U 0.7;
nuTilda 0.7;
}
// ************************************************************************* //

View File

@ -1,52 +0,0 @@
// The FOAM Project // File: motionProperties
/*
-------------------------------------------------------------------------------
========= | dictionary
\\ / |
\\ / | Name: motionProperties
\\ / | Family: FoamX configuration file
\\/ |
F ield | FOAM version: 2.1
O peration | Product of Nabla Ltd.
A and |
M anipulation | Email: Enquiries@Nabla.co.uk
-------------------------------------------------------------------------------
*/
// FoamX Case Dictionary.
version 1.0;
format ascii;
root "/home/warhol/chris/foam/chris2.1/run/Test";
case "movingCone";
instance "constant";
local "";
class dictionary;
form dictionary;
object motionProperties;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//motionSolverLibs ("libfvMotionSolvers.so");
solver laplacian;
//solver componentLaplacian x;
twoDMotion no;
diffusivity uniform;
//motionPlaneNormal (0 0 1);
//
//movingSurface yes;
//
//twoFluids no;
//
//normalMotionDir no;
//
//motionURF 1.0;
//
//boundaryCorrection yes;
// ************************************************************************* //

View File

@ -1,37 +1,19 @@
// The FOAM Project // File: decomposeParDict /*--------------------------------*- C++ -*----------------------------------*\
/* | ========= | |
------------------------------------------------------------------------------- | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
========= | dictionary | \\ / O peration | Version: 1.5 |
\\ / | | \\ / A nd | Web: http://www.OpenFOAM.org |
\\ / | Name: decomposeParDict | \\/ M anipulation | |
\\ / | Family: FoamX configuration file \*---------------------------------------------------------------------------*/
\\/ |
F ield | FOAM version: 2.1
O peration | Product of Nabla Ltd.
A and |
M anipulation | Email: Enquiries@Nabla.co.uk
-------------------------------------------------------------------------------
*/
// FoamX Case Dictionary.
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam"; object decomposeParDict;
case "cavity";
instance "system";
local "";
class dictionary;
object decomposeParDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
arguments "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam" "cavity";
numberOfSubdomains 6; numberOfSubdomains 6;
method hierarchical; method hierarchical;

View File

@ -1,52 +0,0 @@
// The FOAM Project // File: motionProperties
/*
-------------------------------------------------------------------------------
========= | dictionary
\\ / |
\\ / | Name: motionProperties
\\ / | Family: FoamX configuration file
\\/ |
F ield | FOAM version: 2.1
O peration | Product of Nabla Ltd.
A and |
M anipulation | Email: Enquiries@Nabla.co.uk
-------------------------------------------------------------------------------
*/
// FoamX Case Dictionary.
version 1.0;
format ascii;
root "/home/warhol/chris/foam/chris2.1/run/Test";
case "movingCone";
instance "constant";
local "";
class dictionary;
form dictionary;
object motionProperties;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
//motionSolverLibs ("libfvMotionSolvers.so");
solver laplacian;
//solver componentLaplacian x;
twoDMotion no;
diffusivity uniform;
//motionPlaneNormal (0 0 1);
//
//movingSurface yes;
//
//twoFluids no;
//
//normalMotionDir no;
//
//motionURF 1.0;
//
//boundaryCorrection yes;
// ************************************************************************* //

View File

@ -1,37 +1,19 @@
// The FOAM Project // File: decomposeParDict /*--------------------------------*- C++ -*----------------------------------*\
/* | ========= | |
------------------------------------------------------------------------------- | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
========= | dictionary | \\ / O peration | Version: 1.5 |
\\ / | | \\ / A nd | Web: http://www.OpenFOAM.org |
\\ / | Name: decomposeParDict | \\/ M anipulation | |
\\ / | Family: FoamX configuration file \*---------------------------------------------------------------------------*/
\\/ |
F ield | FOAM version: 2.1
O peration | Product of Nabla Ltd.
A and |
M anipulation | Email: Enquiries@Nabla.co.uk
-------------------------------------------------------------------------------
*/
// FoamX Case Dictionary.
FoamFile FoamFile
{ {
version 2.0; version 2.0;
format ascii; format ascii;
class dictionary;
root "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam"; object decomposeParDict;
case "cavity";
instance "system";
local "";
class dictionary;
object decomposeParDict;
} }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
arguments "/home/penfold/mattijs/foam/mattijs2.1/run/icoFoam" "cavity";
numberOfSubdomains 6; numberOfSubdomains 6;
method hierarchical; method hierarchical;