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

This commit is contained in:
henry
2008-06-25 15:36:13 +01:00
12 changed files with 141 additions and 67 deletions

View File

@ -1,3 +1,3 @@
patchSummary.C patchSummary.C
EXE = $(FOAM_USER_APPBIN)/patchSummary EXE = $(FOAM_APPBIN)/patchSummary

View File

@ -29,6 +29,27 @@ Description
Automatically decomposes a mesh and fields of a case for parallel Automatically decomposes a mesh and fields of a case for parallel
execution of OpenFOAM. execution of OpenFOAM.
Usage
- decomposePar [OPTION]
@param -cellDist \n
Write the cell distribution as a labelList for use with 'manual'
decomposition method and as a volScalarField for post-processing.
@param -copyUniform \n
Copy any @a uniform directories too.
@param -fields \n
Use existing geometry decomposition and convert fields only.
@param -filterPatches \n
Remove empty patches when decomposing the geometry.
@param -force \n
Remove any existing @a processor subdirectories before decomposing the
geometry.
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "OSspecific.H" #include "OSspecific.H"
@ -54,23 +75,76 @@ Description
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
argList::noParallel(); argList::noParallel();
argList::validOptions.insert("fields", "");
argList::validOptions.insert("cellDist", ""); argList::validOptions.insert("cellDist", "");
argList::validOptions.insert("filterPatches", "");
argList::validOptions.insert("copyUniform", ""); argList::validOptions.insert("copyUniform", "");
argList::validOptions.insert("fields", "");
argList::validOptions.insert("filterPatches", "");
argList::validOptions.insert("force", "");
# include "setRootCase.H" # include "setRootCase.H"
bool decomposeFieldsOnly(args.options().found("fields"));
bool writeCellDist(args.options().found("cellDist")); bool writeCellDist(args.options().found("cellDist"));
bool filterPatches(args.options().found("filterPatches"));
bool copyUniform(args.options().found("copyUniform")); bool copyUniform(args.options().found("copyUniform"));
bool decomposeFieldsOnly(args.options().found("fields"));
bool filterPatches(args.options().found("filterPatches"));
bool forceOverwrite(args.options().found("force"));
# include "createTime.H" # include "createTime.H"
Info<< "Time = " << runTime.timeName() << endl; Info<< "Time = " << runTime.timeName() << endl;
Info<< "Create mesh\n" << endl; // determine the existing processor count directly
label nProcs = 0;
while (dir(runTime.path()/(word("processor") + name(nProcs))))
{
++nProcs;
}
// Check for previously decomposed case first
if (decomposeFieldsOnly)
{
if (!nProcs)
{
FatalErrorIn(args.executable())
<< "Specifying -fields requires a decomposed geometry!"
<< nl
<< exit(FatalError);
}
}
else
{
if (nProcs)
{
if (forceOverwrite)
{
Info<< "Removing " << nProcs
<< " existing processor directories" << endl;
// remove existing processor dirs
for (label procI = nProcs-1; procI >= 0; --procI)
{
fileName procDir
(
runTime.path()/(word("processor") + name(procI))
);
rmDir(procDir);
}
}
else
{
FatalErrorIn(args.executable())
<< "Case is already decomposed, "
"use the -force option or manually remove" << nl
<< "processor directories before decomposing. e.g.," << nl
<< " rm -rf " << runTime.path().c_str() << "/processor*"
<< nl
<< exit(FatalError);
}
}
}
Info<< "Create mesh" << endl;
domainDecomposition mesh domainDecomposition mesh
( (
IOobject IOobject
@ -84,16 +158,6 @@ int main(int argc, char *argv[])
// Decompose the mesh // Decompose the mesh
if (!decomposeFieldsOnly) if (!decomposeFieldsOnly)
{ {
if (dir(runTime.path()/"processor1"))
{
FatalErrorIn(args.executable())
<< "Case is already decomposed." << endl
<< " Please remove processor directories before "
"decomposing e.g. using:" << nl
<< " rm -rf " << runTime.path().c_str() << "/processor*"
<< exit(FatalError);
}
mesh.decomposeMesh(filterPatches); mesh.decomposeMesh(filterPatches);
mesh.writeDecomposition(); mesh.writeDecomposition();
@ -102,7 +166,9 @@ int main(int argc, char *argv[])
{ {
// Write the decomposition as labelList for use with 'manual' // Write the decomposition as labelList for use with 'manual'
// decomposition method. // decomposition method.
OFstream str
// FIXME: may attempt to write to a non-existent "region0/"
OFstream os
( (
runTime.path() runTime.path()
/ mesh.facesInstance() / mesh.facesInstance()
@ -110,11 +176,11 @@ int main(int argc, char *argv[])
/ "cellDecomposition" / "cellDecomposition"
); );
str << mesh.cellToProc(); os << mesh.cellToProc();
Info<< nl << "Written decomposition to " Info<< nl << "Wrote decomposition to "
<< str.name() << " for use in manual decomposition." << os.name() << " for use in manual decomposition."
<< nl << endl; << endl;
// Write as volScalarField for postprocessing. // Write as volScalarField for postprocessing.
volScalarField cellDist volScalarField cellDist
@ -140,9 +206,9 @@ int main(int argc, char *argv[])
cellDist.write(); cellDist.write();
Info<< nl << "Written decomposition as volScalarField to " Info<< nl << "Wrote decomposition as volScalarField to "
<< cellDist.name() << " for use in postprocessing." << cellDist.name() << " for use in postprocessing."
<< nl << endl; << endl;
} }
} }

View File

@ -1,5 +1,5 @@
EXE_INC = \ EXE_INC = \
-DFULLDEBUG -g -O0 \ /* -DFULLDEBUG -g -O0 */ \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/lagrangian/basic/lnInclude -I$(LIB_SRC)/lagrangian/basic/lnInclude

View File

@ -31,7 +31,7 @@ sub wanted {
if ( $maxlen < length ) { if ( $maxlen < length ) {
$count++; $count++;
substr( $_, $maxlen, 0 ) = "||->>"; # show truncation point substr( $_, $maxlen, 0 ) = "||->>"; # show truncation point
print "$ARGV $. $_\n"; print "$File::Find::name $. $_\n";
} }
} }
close ARGV; close ARGV;

View File

@ -52,7 +52,7 @@ bool Foam::IOobject::writeHeader(Ostream& os) const
// outdent for visibility and more space // outdent for visibility and more space
if (note().size()) if (note().size())
{ {
os << " note " << note() << ";\n"; os << " note " << note() << ";\n";
} }
os << " location " << instance()/local() << ";\n" os << " location " << instance()/local() << ";\n"

View File

@ -170,19 +170,28 @@ inline Smanip<ios_base::fmtflags> setf
} }
inline Omanip<IOstream::streamFormat> setformat(const IOstream::streamFormat fmt) inline Omanip<IOstream::streamFormat> setformat
(
const IOstream::streamFormat fmt
)
{ {
return Omanip<IOstream::streamFormat>(&IOstream::format, fmt); return Omanip<IOstream::streamFormat>(&IOstream::format, fmt);
} }
inline Omanip<IOstream::versionNumber> setversion(const IOstream::versionNumber ver) inline Omanip<IOstream::versionNumber> setversion
(
const IOstream::versionNumber ver
)
{ {
return Omanip<IOstream::versionNumber>(&IOstream::version, ver); return Omanip<IOstream::versionNumber>(&IOstream::version, ver);
} }
inline Omanip<IOstream::compressionType> setcompression(const IOstream::compressionType cmp) inline Omanip<IOstream::compressionType> setcompression
(
const IOstream::compressionType cmp
)
{ {
return Omanip<IOstream::compressionType>(&IOstream::compression, cmp); return Omanip<IOstream::compressionType>(&IOstream::compression, cmp);
} }

View File

@ -117,7 +117,7 @@ public:
//- Select a list of Time values that are within the ranges //- Select a list of Time values that are within the ranges
void inplaceSelect(List<instant>&) const; void inplaceSelect(List<instant>&) const;
//- Add the set of options handled by timeSelector to argList::validOptions //- Add the options handled by timeSelector to argList::validOptions
// //
// @param constant // @param constant
// Add the @b -constant option to include the @c constant/ directory // Add the @b -constant option to include the @c constant/ directory

View File

@ -198,7 +198,7 @@ public:
return globalCase_; return globalCase_;
} }
//- Return case name for parallel run or the global case for a serial run //- Return case name (parallel run) or global case (serial run)
const fileName& caseName() const const fileName& caseName() const
{ {
return case_; return case_;

View File

@ -36,7 +36,7 @@ Description
Does a very simple scheduling which assumes same time for all operations. Does a very simple scheduling which assumes same time for all operations.
After construction: After construction:
- schedule() gives the order in which the input communication should happen - schedule() gives the order in which the input communication should occur
- procSchedule()[procI] gives per procI - procSchedule()[procI] gives per procI
Does not care whether 'talking' is first send, second receive or maybe Does not care whether 'talking' is first send, second receive or maybe

View File

@ -90,7 +90,7 @@ inline const labelList& objectMap::masterObjects() const
} }
// * * * * * * * * * * * * * * * * Frimaster Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * //
inline bool operator==(const objectMap& a, const objectMap& b) inline bool operator==(const objectMap& a, const objectMap& b)
{ {

View File

@ -641,7 +641,7 @@ Foam::label Foam::meshRefinement::markSurfaceRefinement
} }
} }
} }
else if (refineCell[own] != -1) else if (refineCell[own] == -1)
{ {
// boundary face with unmarked owner // boundary face with unmarked owner
@ -658,18 +658,25 @@ Foam::label Foam::meshRefinement::markSurfaceRefinement
if (surfI != -1) if (surfI != -1)
{ {
if // Make sure it is my side that wants refinement.
( label surfaceMinLevel =
!markForRefine surfaces_.minLevelField(surfI)[hit.index()];
(
surfI, if (surfaceMinLevel > cellLevel[own])
nAllowRefine,
refineCell[own],
nRefine
)
)
{ {
break; if
(
!markForRefine
(
surfI,
nAllowRefine,
refineCell[own],
nRefine
)
)
{
break;
}
} }
} }
} }

View File

@ -137,16 +137,6 @@ done
# is returned and not of colouring pipe. # is returned and not of colouring pipe.
set -o pipefail set -o pipefail
# Define function to colour output by argument 1
colourPipe(){
if [ "$1" ]; then
(while read line; do setterm -foreground $1; echo "$line" ; done; setterm -foreground default)
else
cat
fi
}
colourIndex=0 colourIndex=0
while : while :
@ -164,26 +154,28 @@ do
do do
lockFile="$lockDir/$host:$i" lockFile="$lockDir/$host:$i"
if lockfile -r0 "$lockFile" 2>/dev/null; then if lockfile -r0 "$lockFile" 2>/dev/null; then
# Set colour if [ "$WM_COLOURS" ]; then
colour=${colours[$colourIndex]} # Set colour
## echo "** host=$host colourIndex=$colourIndex colour=$colour" colourString=`setterm -foreground ${colours[$colourIndex]}`
if [ "$host" = "$HOST" ]; then if [ "$host" = "$HOST" ]; then
if [ "$colour" ]; then eval $* 2>&1 | sed -e "s/^/$colourString/"
eval $* 2>&1 | colourPipe $colour elif [ -n "$JOB_ID" ]; then
qrsh -inherit -v PWD $host "$rcmd"
else else
eval $* ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | sed -e "s/^/$colourString/"
fi fi
elif [ -n "$JOB_ID" ]; then retval=$?
qrsh -inherit -v PWD $host "$rcmd"
else else
if [ "$colour" ]; then if [ "$host" = "$HOST" ]; then
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" 2>&1 | colourPipe $colour eval $*
elif [ -n "$JOB_ID" ]; then
qrsh -inherit -v PWD $host "$rcmd"
else else
ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd" ssh $host "$sourceFoam 2>/dev/null; cd $PWD && $rcmd"
fi fi
retval=$?
fi fi
retval=$?
# Release lock # Release lock
rm -f "$lockFile" 2>/dev/null rm -f "$lockFile" 2>/dev/null