Merge remote-tracking branch 'remotes/origin/bgschaid/minorAdditions' into nextRelease

Conflicts:
	src/OpenFOAM/matrices/blockLduMatrix/BlockLduMatrix/BlockLduMatrixATmul.C
This commit is contained in:
Hrvoje Jasak 2013-08-22 17:15:23 +01:00
commit 4c3ca4097c
33 changed files with 1447 additions and 71 deletions

View file

@ -88,3 +88,13 @@ testHarness/OpenFOAM/1.6-ext/runDir/CTestTestfile.cmake
testHarness/OpenFOAM/1.6-ext/runDir/DartConfiguration.tcl testHarness/OpenFOAM/1.6-ext/runDir/DartConfiguration.tcl
testHarness/OpenFOAM/1.6-ext/runDir/Makefile testHarness/OpenFOAM/1.6-ext/runDir/Makefile
testHarness/OpenFOAM/1.6-ext/runDir/cmake_install.cmake testHarness/OpenFOAM/1.6-ext/runDir/cmake_install.cmake
# The following files are blacklisted because of a DMCA complaint by ANSYS.
src/lduSolvers/tools/PriorityArray.C
src/lduSolvers/tools/PriorityArray.H
src/lduSolvers/amg/amgPolicy/samgPolicy.C
src/lduSolvers/amg/amgPolicy/samgPolicy.H
src/lduSolvers/amg/amgPolicy/aamgPolicy.C
src/lduSolvers/amg/amgPolicy/aamgPolicy.H
# end-of-file

View file

@ -59,13 +59,16 @@ echo
# In fact, we are basically tracking the head branch from the Mercurial repository # In fact, we are basically tracking the head branch from the Mercurial repository
# which is also replicated under the Breeder_1.7 section of the Subversion repository # which is also replicated under the Breeder_1.7 section of the Subversion repository
# #
SWAK_RELEASE_VERSION=0.2.4
if [ -z "$SWAK4FOAM_SYSTEM" ] if [ -z "$SWAK4FOAM_SYSTEM" ]
then then
# Do we need to download the source code? # Do we need to download the source code?
# We choose to put the source code under ./rpmBuild/BUILD prior to compiling. # We choose to put the source code under ./rpmBuild/BUILD prior to compiling.
# We will not generate a rpm package, but all ThirdParty source code will be # We will not generate a rpm package, but all ThirdParty source code will be
# centralized under the same scratch area # centralized under the same scratch area
if [ ! -e ./rpmBuild/BUILD/swak4Foam-0.2.0 ]; if [ ! -e ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION ];
then then
echo "Checking for a Mercurial client: hg" echo "Checking for a Mercurial client: hg"
command -v hg >/dev/null command -v hg >/dev/null
@ -74,9 +77,9 @@ then
echo "Using Mercurial/hg to download the source code for swak4Foam" echo "Using Mercurial/hg to download the source code for swak4Foam"
( (
cd ./rpmBuild/BUILD; cd ./rpmBuild/BUILD;
hg clone http://hg.code.sf.net/p/openfoam-extend/swak4Foam swak4Foam-0.2.0; hg clone http://hg.code.sf.net/p/openfoam-extend/swak4Foam swak4Foam-$SWAK_RELEASE_VERSION;
cd swak4Foam-0.2.0; cd swak4Foam-$SWAK_RELEASE_VERSION;
hg checkout version_0.2.0 hg checkout version_$SWAK_RELEASE_VERSION
) )
else else
echo "Warning: Mercurial/hg is not installed. Switching to an alternate Subversion repository" echo "Warning: Mercurial/hg is not installed. Switching to an alternate Subversion repository"
@ -84,7 +87,7 @@ then
if [ $? -eq 0 ]; if [ $? -eq 0 ];
then then
echo "Using Subversion/svn to download the source code for swak4Foam" echo "Using Subversion/svn to download the source code for swak4Foam"
(cd ./rpmBuild/BUILD; svn checkout svn://svn.code.sf.net/p/openfoam-extend/svn/trunk/Breeder_1.7/libraries/swak4Foam swak4Foam-0.2.0) (cd ./rpmBuild/BUILD; svn checkout svn://svn.code.sf.net/p/openfoam-extend/svn/trunk/Breeder_1.7/libraries/swak4Foam swak4Foam-$SWAK_RELEASE_VERSION)
else else
echo "Error: Please install either a Mercurial or Subversion client in order to download the source code for swak4Foam" echo "Error: Please install either a Mercurial or Subversion client in order to download the source code for swak4Foam"
exit -1 exit -1
@ -93,13 +96,14 @@ then
# We move the compilation results directly to $FOAM_SITE_APPBIN and $FOAM_SITE_LIBBIN # We move the compilation results directly to $FOAM_SITE_APPBIN and $FOAM_SITE_LIBBIN
# If you prefer to keep the libraries and tools under $FOAM_USER_LIBBIN and $FOAM_USER_APPBIN, simply # If you prefer to keep the libraries and tools under $FOAM_USER_LIBBIN and $FOAM_USER_APPBIN, simply
# comment out the next two lines # comment out the next two lines
(cd ./rpmBuild/BUILD/swak4Foam-0.2.0; find . -name files | xargs -n 1 sed -i.old "s/FOAM_USER/FOAM_SITE/g") (cd ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION; find . -name files | xargs -n 1 sed -i.old "s/FOAM_USER/FOAM_SITE/g")
(cd ./rpmBuild/BUILD/swak4Foam-0.2.0; find . -name options | xargs -n 1 sed -i.old "s/FOAM_USER/FOAM_SITE/g") (cd ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION; find . -name options | xargs -n 1 sed -i.old "s/FOAM_USER/FOAM_SITE/g")
(cd ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION; sed -i.old "s|// #define FOAM_SYMMTENSOR_WORKAROUND|#define FOAM_SYMMTENSOR_WORKAROUND|g" Libraries/swak4FoamParsers/include/swak.H )
# We recompile everything # We recompile everything
(cd ./rpmBuild/BUILD/swak4Foam-0.2.0; ./Allwclean; ./Allwmake) (cd ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION; ./Allwclean; ./Allwmake)
else else
echo "The source code for swak4Foam is already present under ./rpmBuild/BUILD/swak4Foam-0.2.0" echo "The source code for swak4Foam is already present under ./rpmBuild/BUILD/swak4Foam-$SWAK_RELEASE_VERSION"
echo "Please remove this directory if you want to refresh your installation of swak4Foam" echo "Please remove this directory if you want to refresh your installation of swak4Foam"
fi fi
echo "" echo ""

View file

@ -7,12 +7,13 @@ diff -ruN libccmio-2.6.1_orig/config/config.gnu.to.star libccmio-2.6.1/config/co
# $Id: config.gnu.to.star,v 1.4 2006/06/05 21:12:16 geoffp Exp $ # $Id: config.gnu.to.star,v 1.4 2006/06/05 21:12:16 geoffp Exp $
@@ -34,6 +34,8 @@ @@ -34,6 +34,9 @@
x86_64-unknown-linux-gnu-null) echo linux64_2.4-x86-glibc_2.2.5 ;; x86_64-unknown-linux-gnu-null) echo linux64_2.4-x86-glibc_2.2.5 ;;
ppc64-unknown-linux-gnu-null) echo linux64_2.6-pwr4-glibc_2.3.3 ;; ppc64-unknown-linux-gnu-null) echo linux64_2.6-pwr4-glibc_2.3.3 ;;
i386-apple-darwin8-null) echo i386-apple-darwin8 ;; i386-apple-darwin8-null) echo i386-apple-darwin8 ;;
+ i386-apple-darwin10-null) echo i386-apple-darwin10 ;; + i386-apple-darwin10-null) echo i386-apple-darwin10 ;;
+ i386-apple-darwin11-null) echo i386-apple-darwin11 ;; + i386-apple-darwin11-null) echo i386-apple-darwin11 ;;
+ i386-apple-darwin12-null) echo i386-apple-darwin12 ;;
*) echo unknown ;; *) echo unknown ;;
esac esac
@ -41,14 +42,14 @@ diff -ruN libccmio-2.6.1_orig/config/config.system libccmio-2.6.1/config/config.
+ i386-apple-darwin10.5.0 | i386-apple-darwin10.7.0 | i386-apple-darwin10.8.0) + i386-apple-darwin10.5.0 | i386-apple-darwin10.7.0 | i386-apple-darwin10.8.0)
+ echo i386-apple-darwin10 ;; + echo i386-apple-darwin10 ;;
+ +
+ i386-apple-darwin11.2.0 ) + i386-apple-darwin10.* )
+ echo i386-apple-darwin10 ;;
+
+ i386-apple-darwin11.* )
+ echo i386-apple-darwin11 ;; + echo i386-apple-darwin11 ;;
+ +
+ i386-apple-darwin11.3.0 ) + i386-apple-darwin12.* )
+ echo i386-apple-darwin11 ;; + echo i386-apple-darwin12 ;;
+
+ i386-apple-darwin11.4.2 )
+ echo i386-apple-darwin11 ;;
+ +
*) *)
echo unknown echo unknown

View file

@ -90,8 +90,10 @@ Patch0: libccmio-2.6.1.patch_0
%build %build
[ -n "$WM_CC" ] && export CC="$WM_CC" [ -n "$WM_CC" ] && export CC="$WM_CC"
[ -n "$WM_FC" ] && export FC="$WM_FC"
[ -n "$WM_CXX" ] && export CXX="$WM_CXX" [ -n "$WM_CXX" ] && export CXX="$WM_CXX"
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS" [ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
[ -n "$WM_FCFLAGS" ] && export FCFLAGS="$WM_FCFLAGS"
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS" [ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS" [ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
[ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1 [ -z "$WM_NCOMPPROCS" ] && WM_NCOMPPROCS=1
@ -100,6 +102,7 @@ Patch0: libccmio-2.6.1.patch_0
# Missing configuration files for Mac OS X # Missing configuration files for Mac OS X
[ ! -d config/i386-apple-darwin10 ] && cp -r config/i386-apple-darwin8 config/i386-apple-darwin10 [ ! -d config/i386-apple-darwin10 ] && cp -r config/i386-apple-darwin8 config/i386-apple-darwin10
[ ! -d config/i386-apple-darwin11 ] && cp -r config/i386-apple-darwin8 config/i386-apple-darwin11 [ ! -d config/i386-apple-darwin11 ] && cp -r config/i386-apple-darwin8 config/i386-apple-darwin11
[ ! -d config/i386-apple-darwin12 ] && cp -r config/i386-apple-darwin8 config/i386-apple-darwin12
%endif %endif
# Warning: # Warning:
# 1: The name of the ADF library will be renamed to libadf_ccmio since this # 1: The name of the ADF library will be renamed to libadf_ccmio since this
@ -184,7 +187,3 @@ rm -rf %{buildroot}
%Files %Files
%defattr(-,root,root) %defattr(-,root,root)
%{_installPrefix}/* %{_installPrefix}/*

View file

@ -95,8 +95,10 @@ Patch0: mesquite-2.1.2_patch0
%build %build
# export WM settings in a form that GNU configure recognizes # export WM settings in a form that GNU configure recognizes
[ -n "$WM_CC" ] && export CC="$WM_CC" [ -n "$WM_CC" ] && export CC="$WM_CC"
[ -n "$WM_FC" ] && export FC="$WM_FC"
[ -n "$WM_CXX" ] && export CXX="$WM_CXX" [ -n "$WM_CXX" ] && export CXX="$WM_CXX"
[ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS" [ -n "$WM_CFLAGS" ] && export CFLAGS="$WM_CFLAGS"
[ -n "$WM_FCFLAGS" ] && export FCFLAGS="$WM_FCFLAGS"
[ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS" [ -n "$WM_CXXFLAGS" ] && export CXXFLAGS="$WM_CXXFLAGS"
[ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS" [ -n "$WM_LDFLAGS" ] && export LDFLAGS="$WM_LDFLAGS"
@ -177,4 +179,3 @@ rm -rf %{buildroot}
%files %files
%defattr(-,root,root) %defattr(-,root,root)
%{_installPrefix} %{_installPrefix}

95
bin/listProfileInformation.py Executable file
View file

@ -0,0 +1,95 @@
#! /usr/bin/env python
# Lists the profiling information in time directories (uniform/profilingInfo)
# in a human readable form
from PyFoam.RunDictionary.ParsedParameterFile import ParsedParameterFile
import sys
pf=ParsedParameterFile(sys.argv[1],
treatBinaryAsASCII=True)
data={}
children={}
root=None
for p in pf["profilingInfo"]:
if p["id"] in data:
print "Duplicate definition of",p["id"]
sys.exit(-1)
if p["description"][0]=='"':
p["description"]=p["description"][1:]
if p["description"][-1]=='"':
p["description"]=p["description"][:-1]
data[p["id"]]=p
if "parentId" in p:
if p["parentId"] in children:
children[p["parentId"]].append(p["id"])
else:
children[p["parentId"]]=[p["id"]]
else:
if root!=None:
print "Two root elements"
sys-exit(-1)
else:
root=p["id"]
def depth(i):
if i in children:
return max([depth(j) for j in children[i]])+1
else:
return 0
#make sure that children are printed in the correct order
for i in children:
children[i].sort()
maxdepth=depth(root)
depths={}
def nameLen(i,d=0):
depths[i]=d
maxi=len(data[i]["description"])
if i in children:
maxi=max(maxi,max([nameLen(j,d+1) for j in children[i]]))
return maxi+3
maxLen=nameLen(root)
format=" %5.1f%% (%5.1f%%) - %5.1f%% | %8d %9.4gs %9.4gs"
totalTime=data[root]["totalTime"]
header=" "*(maxLen)+" | parent (total ) - self | calls total self "
print header
print "-"*len(header)
def printItem(i):
result=""
if depths[i]>1:
result+=" "*(depths[i]-1)
if depths[i]>0:
result+="|- "
result+=data[i]["description"]
result+=" "*(maxLen-len(result)+1)+"| "
parentTime=data[i]["totalTime"]
if "parentId" in data[i]:
parentTime=data[data[i]["parentId"]]["totalTime"]
tt=data[i]["totalTime"]
ct=data[i]["childTime"]
result+=format % (100*tt/parentTime,
100*(tt-ct)/totalTime,
100*(tt-ct)/tt,
data[i]["calls"],
tt,
tt-ct)
print result
if i in children:
for c in children[i]:
printItem(c)
printItem(root)

View file

@ -32,16 +32,50 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
unset WM_PROJECT_VERSION_ADDITION
prefSettingFile=$0.preset prefSettingFile=$0.preset
if [ -f $prefSettingFile ] if [ -f $prefSettingFile ]
then then
# echo "Found presettings $prefSettingFile" # echo "Found presettings $prefSettingFile"
. $prefSettingFile . $prefSettingFile
fi fi
unset prefSettingFile
export WM_PROJECT=OpenFOAM export WM_PROJECT=OpenFOAM
export WM_PROJECT_VERSION=1.6-ext export WM_PROJECT_VERSION=1.6-ext
if [ -z "$WM_PROJECT_VERSION_ADDITION" ]
then
fullScriptPath=`pwd`"/$0"
if [ ! -e $fullScriptPath ]
then
fullScriptPath=$0
fi
canonicalFullScriptPath="$(readlink 2>&1 -f $fullScriptPath)"
if [ $? != 0 ]
then
# System with simpler readlink (BSD, Darwin) try replacement
canonicalFullScriptPath="$(greadlink 2>&1 -f $fullScriptPath)"
if [ $? != 0 ]
then
# we give up
canonicalFullScriptPath=""
fi
fi
if [ -n "$canonicalFullScriptPath" ]
then
dirName="$(basename $(dirname $(dirname $canonicalFullScriptPath)))"
rest="$(echo $dirName | sed -e "s/OpenFOAM-$WM_PROJECT_VERSION//")"
if [ -n $rest ]
then
export WM_PROJECT_VERSION_ADDITION="$(echo $rest | sed -e "s/-//")"
fi
unset dirName rest
fi
unset fullScriptPath canonicalFullScriptPath
fi
if [ -n "$WM_PROJECT_VERSION_ADDITION" ] if [ -n "$WM_PROJECT_VERSION_ADDITION" ]
then then
export WM_PROJECT_VERSION=$WM_PROJECT_VERSION-$WM_PROJECT_VERSION_ADDITION export WM_PROJECT_VERSION=$WM_PROJECT_VERSION-$WM_PROJECT_VERSION_ADDITION
@ -265,26 +299,82 @@ Darwin)
# We need to get rid of the revision number from this string. eg turn "10.7.5" into "10.7" # We need to get rid of the revision number from this string. eg turn "10.7.5" into "10.7"
export MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion | sed -e "s/\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)/\1.\2/g"` export MACOSX_DEPLOYMENT_TARGET=`sw_vers -productVersion | sed -e "s/\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\)/\1.\2/g"`
if [ "$compilerInstall" == "System" ] which -s port >/dev/null
if [ $? -eq "0" -a -d '/opt/local/etc/macports' ]
then then
# Use Mac-Ports-Compiler instead of Apple-gcc-4.2 if [ "$FOAM_VERBOSE" -a "$PS1" ]
case $WM_COMPILER in then
Gcc43) echo "Using Macports binaries"
export WM_CC='gcc-mp-4.3' fi
export WM_CXX='g++-mp-4.3'
;; export WM_USE_MACPORT=1
Gcc44)
export WM_CC='gcc-mp-4.4' if [ -e '/opt/local/bin/openmpicc' ]
export WM_CXX='g++-mp-4.4' then
;; export WM_MPLIB=MACPORTOPENMPI
Gcc45) else
export WM_CC='gcc-mp-4.5' if [ -z "$WM_CHOSEN_MAC_MPI" ]
export WM_CXX='g++-mp-4.5' then
;; echo "WM_CHOSEN_MAC_MPI unset. Using OPENMPI"
*) export WM_MPLIB=OPENMPI
export WM_COMPILER= else
;; export WM_MPLIB=$WM_CHOSEN_MAC_MPI
esac fi
fi
if [ "$compilerInstall" == "System" ]
then
# Use Mac-Ports-Compiler instead of Apple-gcc-4.2
case $WM_COMPILER in
Gcc42)
export WM_MACPORT_VERSION=4.2
;;
Gcc43)
export WM_MACPORT_VERSION=4.3
;;
Gcc44)
export WM_MACPORT_VERSION=4.4
;;
Gcc45)
export WM_MACPORT_VERSION=4.5
;;
Gcc46)
export WM_MACPORT_VERSION=4.6
;;
Gcc47)
export WM_MACPORT_VERSION=4.7
;;
Gcc48)
export WM_MACPORT_VERSION=4.8
;;
Gcc)
;;
*)
echo "Unsupported MacPorts-Compiler $WM_COMPILER"
;;
esac
if [ "$WM_COMPILER" != "Gcc" ]
then
export WM_CC="gcc-mp-$WM_MACPORT_VERSION"
export WM_CXX="g++-mp-$WM_MACPORT_VERSION"
export WM_FC="gfortran-mp-$WM_MACPORT_VERSION"
ruleDirBase=$WM_PROJECT_DIR/wmake/rules/$WM_ARCH
ruleDir=$ruleDirBase$WM_COMPILER
if [ ! -e $ruleDir ]
then
echo "Rule directory $ruleDir not existing. Linking to $ruleDirBase"
ln -s $ruleDirBase $ruleDir
fi
unset ruleDir ruleDirBase
fi
fi
fi
if [ -z "$WM_CC" ]
then
# nobody set the compiler
export WM_CC="gcc"
export WM_CXX="g++"
fi fi
;; ;;

View file

@ -31,9 +31,51 @@
# #
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# make sure that this variable is set un purpose
unset WM_PROJECT_VERSION_ADDITION
unsetenv WM_PROJECT_VERSION_ADDITION
set called=($_)
set prefSettingFile=$called[2].preset
if ( -r $prefSettingFile ) then
# echo "Found presettings $prefSettingFile"
source $prefSettingFile
endif
setenv WM_PROJECT OpenFOAM setenv WM_PROJECT OpenFOAM
setenv WM_PROJECT_VERSION 1.6-ext setenv WM_PROJECT_VERSION 1.6-ext
if( ! $?WM_PROJECT_VERSION_ADDITION ) then
set fullScriptPath = `pwd`"/$called[2]"
set canonicalFullScriptPath = `readlink -f $fullScriptPath |& cat`
if( $? != 0 ) then
# System with simpler readlink (BSD, Darwin) try replacement
set canonicalFullScriptPath=`greadlink -f $fullScriptPath |& cat`
if ( $? != 0 ) then
# we give up
set canonicalFullScriptPath=""
endif
endif
if ( "$canonicalFullScriptPath" != "" ) then
set pathHere=`dirname $canonicalFullScriptPath`
set pathHere=`dirname $pathHere`
set dirName=`basename $pathHere`
set rest=`echo $dirName | sed -e "s/OpenFOAM-$WM_PROJECT_VERSION//"`
if ( "$rest" != "" ) then
setenv WM_PROJECT_VERSION_ADDITION `echo $rest | sed -e "s/-//"`
endif
unset dirName pathHere rest
endif
unset fullScriptPath canonicalFullScriptPath
endif
unset prefSettingFile called
if ( $?WM_PROJECT_VERSION_ADDITION ) then
setenv WM_PROJECT_VERSION $WM_PROJECT_VERSION-$WM_PROJECT_VERSION_ADDITION
endif
# helps to easily write #ifdefs to detect a dev-version # helps to easily write #ifdefs to detect a dev-version
setenv FOAM_DEV 1 setenv FOAM_DEV 1
@ -357,4 +399,3 @@ unset cleanEnv cleanProg colonPath foamInstall foamOldDirs
unalias _foamSource unalias _foamSource
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

View file

@ -182,17 +182,19 @@ fi
unset compilerBin compilerLib compilerInstall unset compilerBin compilerLib compilerInstall
case "$WM_COMPILER" in if [ -z "$WM_CC" ]
Gcc*) then
export WM_CC='gcc' case "$WM_COMPILER" in
export WM_CXX='g++' Gcc*)
;; export WM_CC='gcc'
Icc) export WM_CXX='g++'
export WM_CC='icc' ;;
export WM_CXX='icpc' Icc)
;; export WM_CC='icc'
esac export WM_CXX='icpc'
;;
esac
fi
# Communications library # Communications library
# ~~~~~~~~~~~~~~~~~~~~~~ # ~~~~~~~~~~~~~~~~~~~~~~
@ -233,6 +235,20 @@ OPENMPI)
unset mpi_version unset mpi_version
;; ;;
MACPORTOPENMPI)
unset OPAL_PREFIX
export FOAM_MPI=openmpi-macport
libDir=`openmpicc --showme:link | sed -e 's/.*-L\([^ ]*\).*/\1/'`
# Bit of a hack: strip off 'lib' and hope this is the path to openmpi
# include files and libraries.
export MPI_ARCH_PATH="${libDir%/*}"
_foamAddLib $libDir
unset libDir
;;
SYSTEMOPENMPI) SYSTEMOPENMPI)
mpi_version=openmpi-system mpi_version=openmpi-system

View file

@ -3,6 +3,11 @@ global/dimensionedConstants/dimensionedConstants.C
global/argList/argList.C global/argList/argList.C
global/clock/clock.C global/clock/clock.C
global/Profiling/ProfilingInfo.C
global/Profiling/ProfilingPool.C
global/Profiling/ProfilingStack.C
global/Profiling/ProfilingTrigger.C
bools = primitives/bools bools = primitives/bools
$(bools)/bool/bool.C $(bools)/bool/bool.C
$(bools)/bool/boolIO.C $(bools)/bool/boolIO.C

View file

@ -27,6 +27,9 @@ License
#include "Time.H" #include "Time.H"
#include "PstreamReduceOps.H" #include "PstreamReduceOps.H"
#include "ProfilingPool.H"
#include "Profiling.H"
#include <sstream> #include <sstream>
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * // // * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
@ -238,6 +241,17 @@ Foam::Time::Time
functionObjects_(*this, enableFunctionObjects) functionObjects_(*this, enableFunctionObjects)
{ {
setControls(); setControls();
ProfilingPool::initProfiling(
IOobject(
"profilingInfo",
timeName(),
"uniform",
*this,
IOobject::NO_READ,
IOobject::AUTO_WRITE
)
);
} }
@ -295,6 +309,17 @@ Foam::Time::Time
functionObjects_(*this, enableFunctionObjects) functionObjects_(*this, enableFunctionObjects)
{ {
setControls(); setControls();
ProfilingPool::initProfiling(
IOobject(
"profilingInfo",
timeName(),
"uniform",
*this,
IOobject::NO_READ,
IOobject::AUTO_WRITE
)
);
} }
@ -348,7 +373,18 @@ Foam::Time::Time
readLibs_(controlDict_, "libs"), readLibs_(controlDict_, "libs"),
functionObjects_(*this, enableFunctionObjects) functionObjects_(*this, enableFunctionObjects)
{} {
ProfilingPool::initProfiling(
IOobject(
"profilingInfo",
timeName(),
"uniform",
*this,
IOobject::NO_READ,
IOobject::AUTO_WRITE
)
);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
@ -500,6 +536,8 @@ bool Foam::Time::run() const
// ie, when exiting the control loop // ie, when exiting the control loop
if (!running && timeIndex_ != startTimeIndex_) if (!running && timeIndex_ != startTimeIndex_)
{ {
addProfile2(fo,"functionObjects_.end()");
// Note, end() also calls an indirect start() as required // Note, end() also calls an indirect start() as required
functionObjects_.end(); functionObjects_.end();
} }
@ -672,10 +710,14 @@ Foam::Time& Foam::Time::operator++()
{ {
if (timeIndex_ == startTimeIndex_) if (timeIndex_ == startTimeIndex_)
{ {
addProfile2(fo,"functionObjects_.start()");
functionObjects_.start(); functionObjects_.start();
} }
else else
{ {
addProfile2(fo,"functionObjects_.execute()");
functionObjects_.execute(); functionObjects_.execute();
} }
} }

View file

@ -27,6 +27,8 @@ License
#include "Time.H" #include "Time.H"
#include "PstreamReduceOps.H" #include "PstreamReduceOps.H"
#include "Profiling.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::Time::readDict() void Foam::Time::readDict()
@ -279,8 +281,12 @@ bool Foam::Time::writeObject
IOstream::compressionType cmp IOstream::compressionType cmp
) const ) const
{ {
addProfile2(getCalled,"Foam::Time::writeObject");
if (outputTime()) if (outputTime())
{ {
addProfile2(actualOutput,"Foam::Time::writeObject - outputTime");
IOdictionary timeDict IOdictionary timeDict
( (
IOobject IOobject

View file

@ -27,6 +27,8 @@ License
#include "functionObjectList.H" #include "functionObjectList.H"
#include "Time.H" #include "Time.H"
#include "Profiling.H"
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
Foam::functionObject* Foam::functionObject*
@ -149,6 +151,8 @@ bool Foam::functionObjectList::execute()
iter iter
) )
{ {
addProfile2(fo,"FO::"+(*iter).name()+"::execute");
ok = iter().execute() && ok; ok = iter().execute() && ok;
} }
} }
@ -175,6 +179,8 @@ bool Foam::functionObjectList::end()
iter iter
) )
{ {
addProfile2(fo,"FO::"+(*iter).name()+"::end");
ok = iter().end() && ok; ok = iter().end() && ok;
} }
} }
@ -188,6 +194,8 @@ bool Foam::functionObjectList::read()
bool ok = true; bool ok = true;
updated_ = execution_; updated_ = execution_;
addProfile2(fo,"functionObjectList::read");
// avoid reading/initializing if execution is off // avoid reading/initializing if execution is off
if (!execution_) if (!execution_)
{ {
@ -231,6 +239,8 @@ bool Foam::functionObjectList::read()
// an existing functionObject, and dictionary changed // an existing functionObject, and dictionary changed
if (newDigs[nFunc] != digests_[oldIndex]) if (newDigs[nFunc] != digests_[oldIndex])
{ {
addProfile2(fo,"FO::"+objPtr->name()+"::read");
ok = objPtr->read(dict) && ok; ok = objPtr->read(dict) && ok;
} }
} }
@ -238,6 +248,9 @@ bool Foam::functionObjectList::read()
{ {
// new functionObject // new functionObject
objPtr = functionObject::New(key, time_, dict).ptr(); objPtr = functionObject::New(key, time_, dict).ptr();
addProfile2(fo,"FO::"+objPtr->name()+"::start");
ok = objPtr->start() && ok; ok = objPtr->start() && ok;
} }

View file

@ -0,0 +1,56 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
Class
Description
Add everything necessary for Profiling plus a macro
Originally proposed in
http://www.cfd-online.com/Forums/openfoam-bugs/64081-feature-proposal-application-level-profiling.html
SourceFiles
\*---------------------------------------------------------------------------*/
#ifndef Profiling_H
#define Profiling_H
#include "ProfilingTrigger.H"
// to be used at the beginning of a section to be profiled
// profiling ends automatically at the end of a block
#define addProfile(name) Foam::ProfilingTrigger profileTriggerFor##name (#name)
// Use this if a description with spaces, colons etc should be added
#define addProfile2(name,descr) Foam::ProfilingTrigger profileTriggerFor##name (descr)
// this is only needed if profiling should end before the end of a block
#define endProfile(name) profileTriggerFor##name.stop()
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,122 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
\*---------------------------------------------------------------------------*/
#include "ProfilingInfo.H"
#include "dictionary.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
Foam::label Foam::ProfilingInfo::nextId_(0);
Foam::label Foam::ProfilingInfo::getID()
{
nextId_++;
return nextId_;
}
void Foam::ProfilingInfo::raiseID(label maxVal)
{
if(maxVal>nextId_) {
nextId_=maxVal;
}
}
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::ProfilingInfo::ProfilingInfo()
:
calls_(0),
totalTime_(0.),
childTime_(0.),
id_(getID()),
parent_(*this),
description_("application::main"),
onStack_(false)
{}
Foam::ProfilingInfo::ProfilingInfo(ProfilingInfo &parent,const string &descr)
:
calls_(0),
totalTime_(0.),
childTime_(0.),
id_(getID()),
parent_(parent),
description_(descr),
onStack_(false)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::ProfilingInfo::~ProfilingInfo()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::ProfilingInfo::update(scalar elapsedTimee)
{
calls_++;
totalTime_+=elapsedTimee;
if(id()!=parent().id()) {
parent_.childTime_+=elapsedTimee;
}
}
void Foam::ProfilingInfo::writeWithOffset(Ostream &os,bool offset,scalar time,scalar childTimes) const
{
dictionary tmp;
tmp.add("id",id());
if(id()!=parent().id()) {
tmp.add("parentId",parent().id());
}
tmp.add("description",description());
tmp.add("calls",calls()+(offset ? 1 : 0));
tmp.add("totalTime",totalTime()+time);
tmp.add("childTime",childTime()+childTimes);
tmp.add("onStack",onStack());
os << tmp;
}
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const ProfilingInfo& info)
{
info.writeWithOffset(os);
return os;
}
// ************************************************************************* //

View file

@ -0,0 +1,178 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
Class
Foam::ProfilingInfo
Description
Information needed for profiling
SourceFiles
ProfilingInfo.C
\*---------------------------------------------------------------------------*/
#ifndef ProfilingInfo_H
#define ProfilingInfo_H
#include "label.H"
#include "scalar.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
// class Istream;
class Ostream;
class ProfilingStack;
class ProfilingPool;
class ProfilingInfo;
Ostream& operator<<(Ostream&, const ProfilingInfo&);
/*---------------------------------------------------------------------------*\
Class ProfilingInfo Declaration
\*---------------------------------------------------------------------------*/
class ProfilingInfo
{
// Private data
// nr of times this was called
label calls_;
// total time spent
scalar totalTime_;
// time spent in children
scalar childTime_;
// unique id to identify it
label id_;
// pointer to the parent object (if there is any)
ProfilingInfo &parent_;
// what this does
string description_;
// is this currently on the stack?
bool onStack_;
// Private Member Functions
//- Disallow default bitwise copy construct
ProfilingInfo(const ProfilingInfo&);
//- Disallow default bitwise assignment
void operator=(const ProfilingInfo&);
// Static data members
//- Counter that is used to generate the ids
static label nextId_;
//- get a new ID and update the counter
static label getID();
//- raise the next possible ID (to avoid ID-clashes during reading)
void raiseID(label maxVal);
protected:
void addedToStack()
{ onStack_=true; }
void removedFromStack()
{ onStack_=false; }
//- Construct null - only the master-element
ProfilingInfo();
void writeWithOffset(Ostream &os,bool offset=false,scalar time=0,scalar childTime=0) const;
public:
// Constructors
//- Construct from components
ProfilingInfo(ProfilingInfo &parent,const string &descr);
// //- Construct from Istream
// ProfilingInfo(Istream&);
// Destructor
~ProfilingInfo();
// Member Functions
// Access
label id() const
{ return id_; }
label calls() const
{ return calls_; }
scalar totalTime() const
{ return totalTime_; }
scalar childTime() const
{ return childTime_; }
bool onStack() const
{ return onStack_; }
const string &description() const
{ return description_; }
const ProfilingInfo &parent() const
{ return parent_; }
//- Update it with a new timing information
void update(scalar elapsedTime);
friend class ProfilingStack;
friend class ProfilingPool;
// IOstream Operators
// friend Istream& operator>>(Istream&, ProfilingInfo&);
friend Ostream& operator<<(Ostream&, const ProfilingInfo&);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,152 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
\*---------------------------------------------------------------------------*/
#include "ProfilingPool.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
Foam::ProfilingPool* Foam::ProfilingPool::thePool_(NULL);
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::ProfilingPool::ProfilingPool(const IOobject &ob)
:
regIOobject(ob),
globalTime_()
{
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::ProfilingPool::~ProfilingPool()
{
for(mapIterator it=map().begin();it!=map().end();++it) {
delete it->second;
}
map().erase(allInfo_.begin(),allInfo_.end());
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::ProfilingPool::initProfiling(const IOobject &ob)
{
if(thePool_!=NULL) {
WarningIn("Foam::ProfilingPool::initProfiling(const IOobject &)")
<< "Singleton already initialized\n" << endl;
} else {
thePool_=new ProfilingPool(ob);
ProfilingInfo *master=new ProfilingInfo();
thePool_->map().insert(make_pair(master->description(),master));
thePool_->stack().push(*master);
ProfilingPool::rememberTimer(*master,thePool_->globalTime_);
}
}
Foam::ProfilingInfo &Foam::ProfilingPool::getInfo(const string &name)
{
if(thePool_==NULL) {
FatalErrorIn("Foam::ProfilingPool::addInfo(const string &name)")
<< "Sinleton not initialized\n" << endl
<< abort(FatalError);
}
ProfilingStack &stack=thePool_->stack();
mapType &map=thePool_->map();
ProfilingInfo *found=NULL;
for(mapIterator it=map.lower_bound(name);it!=map.upper_bound(name);++it) {
if(it->second->parent().id()==stack.top().id()) {
found=it->second;
break;
}
}
if(found==NULL) {
found=new ProfilingInfo(stack.top(),name);
map.insert(make_pair(name,found));
}
stack.push(*found);
return *found;
}
void Foam::ProfilingPool::rememberTimer(const ProfilingInfo &info,clockTime &timer)
{
if(thePool_==NULL) {
FatalErrorIn("Foam::ProfilingPool::rememberTimer(const ProfilingInfo &info,clockTime &timer)")
<< "Singleton not initialized\n" << endl
<< abort(FatalError);
}
thePool_->stack().addTimer(info,timer);
}
void Foam::ProfilingPool::remove(const ProfilingInfo &info)
{
if(thePool_==NULL) {
FatalErrorIn("Foam::ProfilingPool::addInfo(const string &name)")
<< "Singleton not initialized\n" << endl
<< abort(FatalError);
}
ProfilingStack &stack=thePool_->stack();
if(info.id()!=stack.top().id()) {
FatalErrorIn("Foam::ProfilingPool::update(const string &name)")
<< "The id " << info.id() << " of the updated info " << info.description()
<< " is no the same as the one on top of the stack: "
<< stack.top().id() << " (" << stack.top().description() << ")\n" << endl
<< abort(FatalError);
}
stack.pop();
}
bool Foam::ProfilingPool::writeData(Ostream &os) const
{
os << "profilingInfo" << nl << indent << token::BEGIN_LIST << incrIndent << nl;
stack().writeStackContents(os);
for(mapConstIterator it=map().begin();it!=map().end();++it) {
if(!it->second->onStack()) {
os << *(it->second);
}
}
os << decrIndent << indent << token::END_LIST << token::END_STATEMENT << endl;
return os;
}
// ************************************************************************* //

View file

@ -0,0 +1,136 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
Class
Foam::ProfilingPool
Description
Collects all the data for Profiling
SourceFiles
ProfilingPool.C
\*---------------------------------------------------------------------------*/
#ifndef ProfilingPool_H
#define ProfilingPool_H
#include "regIOobject.H"
#include "clockTime.H"
#include <map>
#include "ProfilingInfo.H"
#include "ProfilingStack.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
// class Istream;
class Ostream;
// // Forward declaration of friend functions and operators
// Istream& operator>>(Istream&, ProfilingPool&);
// Ostream& operator<<(Ostream&, const ProfilingPool&);
/*---------------------------------------------------------------------------*\
Class ProfilingPool Declaration
\*---------------------------------------------------------------------------*/
class ProfilingPool
:
public regIOobject
{
// Private data
typedef std::multimap<Foam::string,Foam::ProfilingInfo*> mapType;
typedef std::pair<Foam::string,Foam::ProfilingInfo*> mapValues;
typedef mapType::iterator mapIterator;
typedef mapType::const_iterator mapConstIterator;
mapType allInfo_;
ProfilingStack theStack_;
clockTime globalTime_;
// Private Member Functions
//- Disallow default bitwise copy construct
ProfilingPool(const ProfilingPool&);
//- Disallow default bitwise assignment
void operator=(const ProfilingPool&);
// Static data members
//- the only possible Pool-Object
static ProfilingPool *thePool_;
//- Construct null
ProfilingPool(const IOobject &);
// Destructor
~ProfilingPool();
mapType &map()
{ return allInfo_; }
const mapType &map() const
{ return allInfo_; }
ProfilingStack &stack()
{ return theStack_; }
const ProfilingStack &stack() const
{ return theStack_; }
public:
static void initProfiling(const IOobject &);
static ProfilingInfo &getInfo(const string &name);
static void remove(const ProfilingInfo &info);
static void rememberTimer(const ProfilingInfo &info,clockTime &timer);
virtual bool writeData(Ostream &) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,105 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
\*---------------------------------------------------------------------------*/
#include "ProfilingStack.H"
#include "ProfilingInfo.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::ProfilingStack::ProfilingStack()
:
LIFOStack<ProfilingInfo*>()
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::ProfilingStack::~ProfilingStack()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::ProfilingInfo &Foam::ProfilingStack::top() const
{
return *LIFOStack<ProfilingInfo*>::top();
}
Foam::ProfilingInfo &Foam::ProfilingStack::bottom() const
{
return *LIFOStack<ProfilingInfo*>::bottom();
}
bool Foam::ProfilingStack::empty() const
{
return LIFOStack<ProfilingInfo*>::empty();
}
void Foam::ProfilingStack::push(ProfilingInfo &a)
{
LIFOStack<ProfilingInfo*>::push(&a);
top().addedToStack();
}
Foam::ProfilingInfo &Foam::ProfilingStack::pop()
{
top().removedFromStack();
return *LIFOStack<ProfilingInfo*>::pop();
}
void Foam::ProfilingStack::writeStackContents(Ostream &os) const
{
if(empty()) {
return;
}
const_iterator it=begin();
scalar oldElapsed=0;
do {
const ProfilingInfo &info=*(*it);
scalar elapsed=timers_[info.id()]->elapsedTime();
info.writeWithOffset(os,true,elapsed,oldElapsed);
oldElapsed=elapsed;
++it;
} while(it!=end());
}
void Foam::ProfilingStack::addTimer(const ProfilingInfo &info,clockTime &timer)
{
timers_.insert(info.id(),&timer);
}
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
// ************************************************************************* //

View file

@ -0,0 +1,110 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
Class
Foam::ProfilingStack
Description
Stack of the ProfilingInfo-items that are currently used
SourceFiles
ProfilingStack.C
\*---------------------------------------------------------------------------*/
#ifndef ProfilingStack_H
#define ProfilingStack_H
#include "LIFOStack.H"
#include "clockTime.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class ProfilingInfo;
class ProfilingPool;
class Ostream;
/*---------------------------------------------------------------------------*\
Class ProfilingStack Declaration
\*---------------------------------------------------------------------------*/
class ProfilingStack
:
private LIFOStack<ProfilingInfo *>
{
// Private Member Functions
//- Disallow default bitwise copy construct
ProfilingStack(const ProfilingStack&);
//- Disallow default bitwise assignment
void operator=(const ProfilingStack&);
//- remember the timers for the correct stack-output
HashTable<clockTime *,label> timers_;
protected:
void writeStackContents(Ostream &) const;
void addTimer(const ProfilingInfo &info,clockTime &timer);
public:
// Constructors
//- Construct null
ProfilingStack();
// Destructor
~ProfilingStack();
// Members that encapsulate the original stack-class
ProfilingInfo &top() const;
ProfilingInfo &bottom() const;
bool empty() const;
void push(ProfilingInfo &);
ProfilingInfo &pop();
friend class ProfilingPool;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -0,0 +1,68 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
\*---------------------------------------------------------------------------*/
#include "ProfilingTrigger.H"
#include "ProfilingPool.H"
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::ProfilingTrigger::ProfilingTrigger(const string &name)
:
clock_(),
info_(ProfilingPool::getInfo(name)),
running_(true)
{
ProfilingPool::rememberTimer(info(),clock());
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::ProfilingTrigger::~ProfilingTrigger()
{
stop();
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
void Foam::ProfilingTrigger::stop()
{
if(running_) {
scalar elapsed=clock_.elapsedTime();
info_.update(elapsed);
ProfilingPool::remove(info_);
running_=false;
}
}
// ************************************************************************* //

View file

@ -0,0 +1,102 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright held by original author
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is based on 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
Class
Foam::ProfilingTrigger
Description
The object that does the actual measuring
SourceFiles
ProfilingTrigger.C
\*---------------------------------------------------------------------------*/
#ifndef ProfilingTrigger_H
#define ProfilingTrigger_H
#include "clockTime.H"
#include "string.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class ProfilingInfo;
class ProfilingPool;
/*---------------------------------------------------------------------------*\
Class ProfilingTrigger Declaration
\*---------------------------------------------------------------------------*/
class ProfilingTrigger
{
// Private data
clockTime clock_;
ProfilingInfo &info_;
bool running_;
// Private Member Functions
//- Disallow default bitwise copy construct
ProfilingTrigger(const ProfilingTrigger&);
//- Disallow default bitwise assignment
void operator=(const ProfilingTrigger&);
protected:
clockTime &clock()
{ return clock_; }
const ProfilingInfo &info() const
{ return info_; }
public:
// Constructors
ProfilingTrigger(const string &name);
~ProfilingTrigger();
void stop();
friend class ProfilingPool;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //

View file

@ -70,9 +70,6 @@ void Foam::BlockLduMatrix<Type>::AmulCore
// Diagonal multiplication, no indirection // Diagonal multiplication, no indirection
multiply(Ax, Diag, x); multiply(Ax, Diag, x);
// Create multiplication function object
typename BlockCoeff<Type>::multiply mult;
// Lower multiplication // Lower multiplication
if (symmetric()) if (symmetric())
@ -212,9 +209,6 @@ void Foam::BlockLduMatrix<Type>::TmulCore
// Diagonal multiplication, no indirection // Diagonal multiplication, no indirection
multiply(Tx, Diag, x); multiply(Tx, Diag, x);
// Create multiplication function object
typename BlockCoeff<Type>::multiply mult;
// Upper multiplication // Upper multiplication
if (Upper.activeType() == blockCoeffBase::SCALAR) if (Upper.activeType() == blockCoeffBase::SCALAR)

View file

@ -61,6 +61,8 @@ SourceFiles
#include "autoPtr.H" #include "autoPtr.H"
#include "runTimeSelectionTables.H" #include "runTimeSelectionTables.H"
#include "ProfilingTrigger.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -274,6 +276,8 @@ public:
const lduInterfaceFieldPtrsList& interfaces_; const lduInterfaceFieldPtrsList& interfaces_;
ProfilingTrigger profile_;
// Protected Member Functions // Protected Member Functions
//- Return dictionary //- Return dictionary

View file

@ -261,7 +261,8 @@ Foam::lduMatrix::solver::solver
matrix_(matrix), matrix_(matrix),
coupleBouCoeffs_(coupleBouCoeffs), coupleBouCoeffs_(coupleBouCoeffs),
coupleIntCoeffs_(coupleIntCoeffs), coupleIntCoeffs_(coupleIntCoeffs),
interfaces_(interfaces) interfaces_(interfaces),
profile_("lduMatrix::solver_"+fieldName)
{ {
readControls(); readControls();
} }

View file

@ -26,6 +26,8 @@ License
#include "smoothSolver.H" #include "smoothSolver.H"
#include "Profiling.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
namespace Foam namespace Foam
@ -88,6 +90,8 @@ Foam::lduSolverPerformance Foam::smoothSolver::solve
// If the nSweeps_ is negative do a fixed number of sweeps // If the nSweeps_ is negative do a fixed number of sweeps
if (nSweeps_ < 0) if (nSweeps_ < 0)
{ {
ProfilingTrigger smoothProfile("lduMatrix::smoother_"+fieldName());
autoPtr<lduMatrix::smoother> smootherPtr = lduMatrix::smoother::New autoPtr<lduMatrix::smoother> smootherPtr = lduMatrix::smoother::New
( (
matrix_, matrix_,
@ -135,6 +139,8 @@ Foam::lduSolverPerformance Foam::smoothSolver::solve
// Check convergence, solve if not converged // Check convergence, solve if not converged
if (!stop(solverPerf)) if (!stop(solverPerf))
{ {
ProfilingTrigger smoothProfile("lduMatrix::smoother_"+fieldName());
autoPtr<lduMatrix::smoother> smootherPtr = autoPtr<lduMatrix::smoother> smootherPtr =
lduMatrix::smoother::New lduMatrix::smoother::New
( (

View file

@ -24,6 +24,8 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#include "Profiling.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<class Type> template<class Type>
@ -56,6 +58,8 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Type>::solve
const dictionary& solverControls const dictionary& solverControls
) )
{ {
ProfilingTrigger profSolve("fvMatrix::solve_"+psi_.name());
if (debug) if (debug)
{ {
Info<< "fvMatrix<Type>::solve(const dictionary&) : " Info<< "fvMatrix<Type>::solve(const dictionary&) : "

View file

@ -27,6 +27,8 @@ License
#include "fvScalarMatrix.H" #include "fvScalarMatrix.H"
#include "zeroGradientFvPatchFields.H" #include "zeroGradientFvPatchFields.H"
#include "Profiling.H"
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
template<> template<>
@ -141,6 +143,8 @@ Foam::lduMatrix::solverPerformance Foam::fvMatrix<Foam::scalar>::solve
const dictionary& solverControls const dictionary& solverControls
) )
{ {
ProfilingTrigger profSolve("fvMatrix::solve_"+psi_.name());
if (debug) if (debug)
{ {
Info<< "fvMatrix<scalar>::solve(const dictionary& solverControls) : " Info<< "fvMatrix<scalar>::solve(const dictionary& solverControls) : "

View file

@ -37,6 +37,8 @@ License
#include "fvCFD.H" #include "fvCFD.H"
#include "ProfilingTrigger.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
void Foam::MULES::explicitSolve void Foam::MULES::explicitSolve
@ -48,6 +50,7 @@ void Foam::MULES::explicitSolve
const scalar psiMin const scalar psiMin
) )
{ {
ProfilingTrigger trigger("MULES::explicitSolve");
explicitSolve explicitSolve
( (
geometricOneField(), geometricOneField(),
@ -69,6 +72,7 @@ void Foam::MULES::implicitSolve
const scalar psiMin const scalar psiMin
) )
{ {
ProfilingTrigger trigger("MULES::implicitSolve");
implicitSolve implicitSolve
( (
geometricOneField(), geometricOneField(),

View file

@ -32,6 +32,8 @@ License
#include "Time.H" #include "Time.H"
#include "OFstream.H" #include "OFstream.H"
#include "Profiling.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
template<class ParticleType> template<class ParticleType>
@ -125,6 +127,8 @@ template<class ParticleType>
template<class TrackingData> template<class TrackingData>
void Foam::Cloud<ParticleType>::move(TrackingData& td) void Foam::Cloud<ParticleType>::move(TrackingData& td)
{ {
addProfile2(moveProfile,"Cloud<ParticleType>::move_"+this->name());
const globalMeshData& pData = polyMesh_.globalData(); const globalMeshData& pData = polyMesh_.globalData();
const labelList& processorPatches = pData.processorPatches(); const labelList& processorPatches = pData.processorPatches();
const labelList& processorPatchIndices = pData.processorPatchIndices(); const labelList& processorPatchIndices = pData.processorPatchIndices();

View file

@ -2,7 +2,7 @@
cWARN = -Wall cWARN = -Wall
cc = gcc $(WM_CXXFLAGS) cc = $(WM_CC) $(WM_CXXFLAGS)
include $(RULES)/c$(WM_COMPILE_OPTION) include $(RULES)/c$(WM_COMPILE_OPTION)

View file

@ -2,7 +2,7 @@
c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast c++WARN = -Wall -Wextra -Wno-unused-parameter -Wold-style-cast
CC = g++ $(WM_CXXFLAGS) CC = $(WM_CXX) $(WM_CXXFLAGS)
include $(RULES)/c++$(WM_COMPILE_OPTION) include $(RULES)/c++$(WM_COMPILE_OPTION)

View file

@ -0,0 +1,3 @@
PFLAGS = -DOMPI_SKIP_MPICXX
PINC = -I$(MPI_ARCH_PATH)/include/openmpi
PLIBS = -L$(MPI_ARCH_PATH)/lib -lmpi