From f6107f4033082160e61037e66df55da17879e480 Mon Sep 17 00:00:00 2001 From: henry <Henry Weller h.weller@opencfd.co.uk> Date: Mon, 26 May 2008 13:47:04 +0100 Subject: [PATCH] Minimum changes to compile everything with gcc-4.3.0 --- bin/foamPackChanged | 110 +++++ bin/paraFoam.pvs | 12 + bin/tools/README | 2 + bin/tools/buildParaView3.3 | 193 +++++++++ .../interpolations/timeSeries/timeSeries.C | 402 ++++++++++++++++++ .../interpolations/timeSeries/timeSeries.H | 162 +++++++ wmake/rules/linux64Gcc43/X | 3 + wmake/rules/linux64Gcc43/c | 16 + wmake/rules/linux64Gcc43/c++ | 21 + wmake/rules/linux64Gcc43/c++Debug | 2 + wmake/rules/linux64Gcc43/c++Opt | 4 + wmake/rules/linux64Gcc43/c++Prof | 2 + wmake/rules/linux64Gcc43/cDebug | 2 + wmake/rules/linux64Gcc43/cOpt | 2 + wmake/rules/linux64Gcc43/cProf | 2 + wmake/rules/linux64Gcc43/dirToString | Bin 0 -> 11393 bytes wmake/rules/linux64Gcc43/general | 11 + wmake/rules/linux64Gcc43/mplib | 3 + wmake/rules/linux64Gcc43/mplibGAMMA | 3 + wmake/rules/linux64Gcc43/mplibLAM | 3 + wmake/rules/linux64Gcc43/mplibMPICH | 3 + wmake/rules/linux64Gcc43/mplibMPICH-GM | 3 + wmake/rules/linux64Gcc43/mplibOPENMPI | 3 + wmake/rules/linux64Gcc43/wmkdep | Bin 0 -> 35550 bytes 24 files changed, 964 insertions(+) create mode 100755 bin/foamPackChanged create mode 100644 bin/paraFoam.pvs create mode 100644 bin/tools/README create mode 100755 bin/tools/buildParaView3.3 create mode 100644 src/OpenFOAM/interpolations/timeSeries/timeSeries.C create mode 100644 src/OpenFOAM/interpolations/timeSeries/timeSeries.H create mode 100644 wmake/rules/linux64Gcc43/X create mode 100644 wmake/rules/linux64Gcc43/c create mode 100644 wmake/rules/linux64Gcc43/c++ create mode 100644 wmake/rules/linux64Gcc43/c++Debug create mode 100644 wmake/rules/linux64Gcc43/c++Opt create mode 100644 wmake/rules/linux64Gcc43/c++Prof create mode 100644 wmake/rules/linux64Gcc43/cDebug create mode 100644 wmake/rules/linux64Gcc43/cOpt create mode 100644 wmake/rules/linux64Gcc43/cProf create mode 100755 wmake/rules/linux64Gcc43/dirToString create mode 100644 wmake/rules/linux64Gcc43/general create mode 100644 wmake/rules/linux64Gcc43/mplib create mode 100644 wmake/rules/linux64Gcc43/mplibGAMMA create mode 100644 wmake/rules/linux64Gcc43/mplibLAM create mode 100644 wmake/rules/linux64Gcc43/mplibMPICH create mode 100644 wmake/rules/linux64Gcc43/mplibMPICH-GM create mode 100644 wmake/rules/linux64Gcc43/mplibOPENMPI create mode 100755 wmake/rules/linux64Gcc43/wmkdep diff --git a/bin/foamPackChanged b/bin/foamPackChanged new file mode 100755 index 00000000000..38fbb385519 --- /dev/null +++ b/bin/foamPackChanged @@ -0,0 +1,110 @@ +#!/bin/sh +#------------------------------------------------------------------------------ +# ========= | +# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox +# \\ / O peration | +# \\ / A nd | Copyright (C) 1991-2007 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 +# +# Script +# foamPackChanged <directory> <tarFile> +# +# Description +# Packs and compresses files that have a corresponding .orig file +# +#------------------------------------------------------------------------------ +tmpFile=${TMPDIR:-/tmp}/foamPackChanged.$$ + +if [ $# -ne 2 ]; then + echo "Usage : ${0##*/} directory tarFile" + echo "" + echo "Packs and compresses files that have a corresponding .orig file" + echo "" + exit 1 +fi + +# canonical form (no double and no trailing dashes) +packDir=$(echo "$1" | sed -e 's@//*@/@g' -e 's@/$@@') +packFile=$2 + +if [ ! -d $packDir ]; then + echo "Error: directory $packDir does not exist" + exit 1 +fi + +# Clean up on termination and on Ctrl-C +trap 'rm -f $tmpFile 2>/dev/null; exit 0' EXIT TERM INT + +fileCount=0 +cat /dev/null > $tmpFile + +find -H $packDir \ + ! -type d \ + -type f \ + -name "*.orig" \ +| sed \ + -e "\@$packDir/lib/@d" \ + -e "\@$packDir/src/other/mico-*/platforms@d" \ + -e "\@$packDir/src/other/mpich-*/platforms@d" \ + -e "\@$packDir/src/other/mpich-*/lib@d" \ + -e "\@$packDir/src/other/lam-*/platforms@d" \ + -e "\@$packDir/src/other/openmpi-*/platforms@d" \ + -e '\@applications/bin/@d' \ + -e '\@/t/@d' \ + -e '\@Make[.A-Za-z]*/[^/]*/@d' \ + -e '\@[Dd]oxygen/html@d' \ + -e '\@[Dd]oxygen/latex@d' \ + -e '\@[Dd]oxygen/man@d' \ + -e "s@$packDir/*@@" \ + | \ + ( + while read file + do + (( fileCount=$fileCount + 1 )) + + file=${file%%.orig} + + if [ -f "$packDir/$file" ] + then + echo $fileCount $file + echo $packDir/$file >> $tmpFile + else + echo "[MISSING]" $file + fi + done + ) + +# file fileCount +fileCount=$(cat $tmpFile | wc -l) +echo "----------------------------------------------------------------------" +echo "pack $fileCount updated (non-.orig) files" + +tar -czpf $packFile --files-from $tmpFile + +if [ $? = 0 ] +then + echo "Finished packing changed files from $packDir into $packFile" +else + echo "Error: failure packing changed files from $packDir into $packFile" + rm -f $packFile 2>/dev/null +fi +echo "----------------------------------------------------------------------" + +# ---------------------------------------------------------------------------- diff --git a/bin/paraFoam.pvs b/bin/paraFoam.pvs new file mode 100644 index 00000000000..8cbca6dc411 --- /dev/null +++ b/bin/paraFoam.pvs @@ -0,0 +1,12 @@ +# ParaView State Version 2.2 + +set kw(vtkTemp2) [$Application GetMainWindow] +set kw(vtkTemp29) [$kw(vtkTemp2) GetMainView] +set kw(vtkTemp980) [$kw(vtkTemp2) GetAnimationManager] +[$kw(vtkTemp2) GetRotateCameraButton] SetState 1 +$kw(vtkTemp2) ChangeInteractorStyle 1 +set kw(vtkTemp840) [$kw(vtkTemp2) InitializeReadCustom "FoamReader" "%CASE%"] +$kw(vtkTemp2) ReadFileInformation $kw(vtkTemp840) "%CASE%" +$kw(vtkTemp2) FinalizeRead $kw(vtkTemp840) "%CASE%" +set kw(vtkTemp868) [$kw(vtkTemp840) GetPVWidget {Filename}] +$kw(vtkTemp868) SetValue "%CASE%" diff --git a/bin/tools/README b/bin/tools/README new file mode 100644 index 00000000000..c99723b20e1 --- /dev/null +++ b/bin/tools/README @@ -0,0 +1,2 @@ +Misc. tools for building applications, etc that are useful to have +but which don't really need to be in the PATH. diff --git a/bin/tools/buildParaView3.3 b/bin/tools/buildParaView3.3 new file mode 100755 index 00000000000..028320139df --- /dev/null +++ b/bin/tools/buildParaView3.3 @@ -0,0 +1,193 @@ +#!/bin/sh +set -x + +# ParaView 3.x build script +# - normally run from folder above source folder + +# use the version number and the installation location specified +# in etc/apps/paraview3/{bashrc,cshrc} +: ${ParaView_VERSION:=3.3} +: ${ParaView_INST_DIR:=$WM_PROJECT_INST_DIR/paraview-$ParaView_VERSION} + +#!!User: +# set to location of paraview sources and where to build paraview +# PARAVIEW_SRC_DIR=$WM_PROJECT_INST_DIR/src/other/ParaView3 +PARAVIEW_SRC_DIR=/data/cfd2/work/cfdadmin/cvs/ParaView3 +PARAVIEW_BUILD_DIR=$PARAVIEW_SRC_DIR/platforms + +# TODO: extract the version number from the CMakeLists.txt variables: +# PARAVIEW_VERSION_MAJOR, and PARAVIEW_VERSION_MINOR +# ParaView_VERSION="3.3" + +# SET(PARAVIEW_VERSION_MAJOR 3) +# SET(PARAVIEW_VERSION_MINOR 3) + +#!!User: +# select desired features, include Python whenever possible +VERBOSE=OFF +INCLUDE_MPI=OFF +MPI_MAX_PROCS=32 +INCLUDE_PYTHON=ON +INCLUDE_MESA=OFF + +# initialisation +oldpwd=$PWD +unset OBJ_ADD + +# always build shared libraries +CMAKE_VARIABLES="-DBUILD_SHARED_LIBS:BOOL=ON" + +if [ "$VERBOSE" = ON ]; then + CMAKE_VARIABLES="$CMAKE_VARIABLES -DCMAKE_VERBOSE_MAKEFILE=TRUE" +fi + +#**************************************************************************** +# FIX: Attempt to get around seg-fault when building documentation +#CMAKE_VARIABLES="$CMAKE_VARIABLES -BUILD_DOCUMENTATION-ADVANCED:INTERNAL=0" +#**************************************************************************** + +# set python specific options +# NOTE - you'll need both python and python-devel packages installed +# - might need to create a symbolic link to the python library +# - anything after the '.so' gets in the way... +# - might need to run cmake -> make twice to pick up all the links... +if [ "$INCLUDE_PYTHON" = ON ]; then + PYTHON_INCLUDE_DIR=/usr/include/python2.5 + PYTHON_LIBRARY=/usr/lib$WM_COMPILER_LIB_ARCH/libpython2.5.so + + if [ -d "$PYTHON_INCLUDE_DIR" ]; then + OBJ_ADD="$OBJ_ADD-py" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DPARAVIEW_ENABLE_PYTHON=ON" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DPYTHON_INCLUDE_PATH=$PYTHON_INCLUDE_DIR" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DPYTHON_LIBRARY=$PYTHON_LIBRARY" + else + echo "non-existent PYTHON_INCLUDE_DIR: $PYTHON_INCLUDE_DIR" + fi +fi + +# set MPI specific options +if [ "$INCLUDE_MPI" = ON ]; then + case "$WM_MPLIB" in + OPENMPI) + MPI_INCLUDE_PATH=$OPENMPI_ARCH_PATH/include + MPI_LIBRARY=$OPENMPI_ARCH_PATH/lib/libmpi.so + MPI_RUN=$OPENMPI_ARCH_PATH/bin/mpirun + ;; + LAM) + MPI_INCLUDE_PATH=$LAM_ARCH_PATH/include + MPI_LIBRARY=$LAM_ARCH_PATH/lib/libmpi.so + MPI_RUN=$LAM_ARCH_PATH/bin/mpirun + ;; + MPICH) + MPI_INCLUDE_PATH=$MPICH_ARCH_PATH/include + MPI_LIBRARY=$MPICH_ARCH_PATH/lib/libmpich.so + MPI_RUN=$MPICH_ARCH_PATH/bin/mpirun + ;; + *) + unset INCLUDE_MPI + ;; + esac + + if [ "$INCLUDE_MPI" ]; then + OBJ_ADD="$OBJ_ADD-mpi" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DVTK_USE_MPI=ON" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DPARAVIEW_USE_MPI=ON" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DMPI_INCLUDE_PATH=$MPI_INCLUDE_PATH" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DMPI_LIBRARY=$MPI_LIBRARY" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DVTK_MPIRUN_EXE=$MPI_RUN" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DVTK_MPI_MAX_NUMPROCS=$MPI_MAX_PROCS" + else + echo "unknown/unsupported mpi: $WM_MPLIB" + fi +fi + +# set MESA specific options +if [ "$INCLUDE_MESA" = ON ]; then + MESA_INCLUDE_DIR=/usr/include/GL + MESA_LIBRARY=/usr/lib$WM_COMPILER_LIB_ARCH/libOSMesa.so + + if [ -d "$MESA_INCLUDE_DIR" -a -f "$MESA_LIBRARY" ]; then + OBJ_ADD="$OBJ_ADD-mesa" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DVTK_OPENGL_HAS_OSMESA=ON" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DOSMESA_INCLUDE_DIR=$MESA_INCLUDE_DIR" + CMAKE_VARIABLES="$CMAKE_VARIABLES -DOSMESA_LIBRARY=$MESA_LIBRARY" + else + echo "no MESA information found ... skipping" + fi +fi + + +# finalize the build/install environment +PARAVIEW_OBJ_DIR=$PARAVIEW_BUILD_DIR/$WM_OPTIONS$OBJ_ADD +PARAVIEW_APP_DIR=$ParaView_INST_DIR/platforms/$WM_OPTIONS$OBJ_ADD + +# create paraview build folder +mkdir -p $PARAVIEW_OBJ_DIR +cd $PARAVIEW_OBJ_DIR + +# +# make paraview +# + +# provide a backdoor to skip cmake for repeated builds +if [ -z "$build_no_cmake" ] +then + cmake \ + -DCMAKE_INSTALL_PREFIX=$PARAVIEW_APP_DIR \ + $CMAKE_VARIABLES \ + $PARAVIEW_SRC_DIR +fi + + +if [ -r /proc/cpuinfo ]; then + WM_NCOMPPROCS=`egrep "^processor" /proc/cpuinfo | wc -l` + + [ $WM_NCOMPPROCS -le 8 ] || WM_NCOMPPROCS=8 + + make -j $WM_NCOMPPROCS +else + make +fi + + +if [ -e "$PARAVIEW_OBJ_DIR/bin/paraview" ]; then + echo "Info: Installation completed - proceeding to install" + make install + + # copy VTK headers to install directory + echo "Info: Copying VTK headers" + cp -r $PARAVIEW_SRC_DIR/VTK $PARAVIEW_APP_DIR + cp -r $PARAVIEW_OBJ_DIR/VTK/vtkConfigure.h $PARAVIEW_APP_DIR/VTK + cp -r $PARAVIEW_OBJ_DIR/VTK/vtkstd $PARAVIEW_APP_DIR/VTK + + # copy all .so files to the lib folder + # - NOTE: shouldn't be necessary - but some libs not copied over to the + # install folder +## echo "Info: Copying libs" +## cp $PARAVIEW_OBJ_DIR/bin/*.so* $PARAVIEW_APP_DIR/lib/paraview-$ParaView_VERSION + + echo "Info: Copying ParaViewConfig.cmake" + cp $PARAVIEW_OBJ_DIR/ParaViewConfig.cmake $PARAVIEW_APP_DIR + + if [ "$OBJ_ADD" ]; then + echo "Creating symbolic link in $ParaView_INST_DIR/platforms from $WM_OPTIONS$OBJ_ADD to $WM_OPTIONS" + ( cd $ParaView_INST_DIR/platforms && ln -s $WM_OPTIONS$OBJ_ADD $WM_OPTIONS ) + fi + + echo "Installation complete" + echo "Set environment variables:" + echo " - ParaView_DIR to $PARAVIEW_APP_DIR" + echo " - ParaView_INST_DIR to $PARAVIEW_APP_DIR" + echo " - PV_PLUGIN_PATH to $FOAM_LIBBIN" + echo "Add $ParaView_INST_DIR/bin to PATH" + echo "Add $ParaView_INST_DIR/lib to LD_LIBRARY_PATH" + + echo "done." +else + echo "*** Error: Installation failed - see output window" +fi + +# finalisation +cd $oldpwd + +# ----------------------------------------------------------------- end-of-file diff --git a/src/OpenFOAM/interpolations/timeSeries/timeSeries.C b/src/OpenFOAM/interpolations/timeSeries/timeSeries.C new file mode 100644 index 00000000000..cd52424e327 --- /dev/null +++ b/src/OpenFOAM/interpolations/timeSeries/timeSeries.C @@ -0,0 +1,402 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 + +\*---------------------------------------------------------------------------*/ + +#include "timeSeries.H" +#include "Istream.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +template<typename T> +Foam::timeSeries<T>::timeSeries(const bounds bound) +: + List<Tuple2<scalar, T> >(), + bounding_(bound) +{} + + +template<typename T> +Foam::timeSeries<T>::timeSeries(const word& bound) +: + List<Tuple2<scalar, T> >(), + bounding_(timeSeries::WARN) +{ + bounding(bound); +} + + +template<typename T> +Foam::timeSeries<T>::timeSeries(Istream& is, const bounds bound) +: + List<Tuple2<scalar, T> >(is), + bounding_(bound) +{} + + +template<typename T> +Foam::timeSeries<T>::timeSeries(Istream& is, const word& bound) +: + List<Tuple2<scalar, T> >(is), + bounding_(timeSeries::WARN) +{ + bounding(bound); +} + + +// * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +template<typename T> +Foam::timeSeries<T>::~timeSeries() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<typename T> +Foam::word Foam::timeSeries<T>::bounding() const +{ + word enumName("warn"); + + switch (bounding_) + { + case timeSeries::ERROR: + enumName = "error"; + break; + + case timeSeries::WARN: + enumName = "warn"; + break; + + case timeSeries::CLAMP: + enumName = "clamp"; + break; + + case timeSeries::REPEAT: + enumName = "repeat"; + break; + } + + return enumName; +} + + +template<typename T> +void Foam::timeSeries<T>::bounding(const word& bound) +{ + if (bound == "error") + { + bounding_ = timeSeries::ERROR; + } + else if (bound == "warn") + { + bounding_ = timeSeries::WARN; + } + else if (bound == "clamp") + { + bounding_ = timeSeries::CLAMP; + } + else if (bound == "repeat") + { + bounding_ = timeSeries::REPEAT; + } + else + { + WarningIn("Foam::timeSeries<T>::boundingEnum(const word&)") + << "bad bounding specifier " << bound << " using 'warn'" << endl; + + bounding_ = timeSeries::WARN; + } +} + + +template<typename T> +void Foam::timeSeries<T>::check() const +{ + label n = size(); + scalar prevTime = List<Tuple2<scalar, T> >::operator[](0).first(); + + for (label i = 1; i < n; ++i) + { + const scalar currTime = List<Tuple2<scalar, T> >::operator[](i).first(); + + // avoid duplicate times (divide-by-zero error) + if (currTime <= prevTime) + { + FatalErrorIn + ( + "Foam::timeSeries<T>::checkOrder() const" + ) << "out-of-order time: " + << currTime << " at index " << i << nl + << exit(FatalError); + } + prevTime = currTime; + } +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + + +template<typename T> +const Foam::Tuple2<Foam::scalar, T>& +Foam::timeSeries<T>::operator[](const label i) const +{ + label ii = i; + label n = size(); + + if (n <= 1) + { + ii = 0; + } + else if (ii < 0) + { + switch (bounding_) + { + case timeSeries::ERROR: + FatalErrorIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "index (" << ii << ") underflow" << nl + << exit(FatalError); + break; + + case timeSeries::WARN: + WarningIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "index (" << ii << ") underflow" << nl + << " Continuing with the first entry" + << endl; + // fall-through to 'CLAMP' + + case timeSeries::CLAMP: + ii = 0; + break; + + case timeSeries::REPEAT: + while (ii < 0) + { + ii += n; + } + break; + } + } + else if (ii >= n) + { + switch (bounding_) + { + case timeSeries::ERROR: + FatalErrorIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "index (" << ii << ") overflow" << nl + << exit(FatalError); + break; + + case timeSeries::WARN: + WarningIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "index (" << ii << ") overflow" << nl + << " Continuing with the last entry" + << endl; + // fall-through to 'CLAMP' + + case timeSeries::CLAMP: + ii = n - 1; + break; + + case timeSeries::REPEAT: + while (ii >= n) + { + ii -= n; + } + break; + } + } + + return List<Tuple2<scalar, T> >::operator[](ii); +} + + +template<typename T> +T Foam::timeSeries<T>::operator()(const scalar timeValue) const +{ + label n = size(); + + if (n <= 1) + { + return List<Tuple2<scalar, T> >::operator[](0).second(); + } + + scalar minTime = List<Tuple2<scalar, T> >::operator[](0).first(); + scalar maxTime = List<Tuple2<scalar, T> >::operator[](n-1).first(); + scalar lookupTime = timeValue; + + if (lookupTime < minTime) + { + switch (bounding_) + { + case timeSeries::ERROR: + FatalErrorIn + ( + "Foam::timeSeries<T>::operator[](const scalar) const" + ) << "time (" << lookupTime << ") underflow" << nl + << exit(FatalError); + break; + + case timeSeries::WARN: + WarningIn + ( + "Foam::timeSeries<T>::operator[](const scalar) const" + ) << "time (" << lookupTime << ") underflow" << nl + << " Continuing with the first entry" + << endl; + // fall-through to 'CLAMP' + + case timeSeries::CLAMP: + return List<Tuple2<scalar, T> >::operator[](0).second(); + break; + + case timeSeries::REPEAT: + // adjust lookupTime to >= 0 + while (lookupTime < 0) + { + lookupTime += maxTime; + } + break; + } + } + else if (lookupTime >= maxTime) + { + switch (bounding_) + { + case timeSeries::ERROR: + FatalErrorIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "time (" << lookupTime << ") overflow" << nl + << exit(FatalError); + break; + + case timeSeries::WARN: + WarningIn + ( + "Foam::timeSeries<T>::operator[](const label) const" + ) << "time (" << lookupTime << ") overflow" << nl + << " Continuing with the last entry" + << endl; + // fall-through to 'CLAMP' + + case timeSeries::CLAMP: + return List<Tuple2<scalar, T> >::operator[](n-1).second(); + break; + + case timeSeries::REPEAT: + // adjust lookupTime <= maxTime + while (lookupTime > maxTime) + { + lookupTime -= maxTime; + } + break; + } + } + + label lo = 0; + label hi = 0; + + // look for the correct range + for (label i = 0; i < n; ++i) + { + if (lookupTime >= List<Tuple2<scalar, T> >::operator[](i).first()) + { + lo = hi = i; + } + else + { + hi = i; + break; + } + } + + if (lo == hi) + { + // we are at the end of the table - or there is only a single entry + return List<Tuple2<scalar, T> >::operator[](hi).second(); + } + else if (hi == 0) + { + // this treatment should should only occur under these condition: + // -> the 'REPEAT' treatment + // -> (0 <= time <= minTime) + // -> minTime > 0 + // Use the value at maxTime as the value for time=0 + lo = n - 1; + + return + ( + List<Tuple2<scalar, T> >::operator[](lo).second() + + + ( + List<Tuple2<scalar, T> >::operator[](hi).second() + - List<Tuple2<scalar, T> >::operator[](lo).second() + ) + * (lookupTime / minTime) + ); + } + else + { + // normal interpolation + return + ( + List<Tuple2<scalar, T> >::operator[](lo).second() + + + ( + List<Tuple2<scalar, T> >::operator[](hi).second() + - List<Tuple2<scalar, T> >::operator[](lo).second() + ) + * + ( + lookupTime + - List<Tuple2<scalar, T> >::operator[](lo).first() + ) + / + ( + List<Tuple2<scalar, T> >::operator[](hi).first() + - List<Tuple2<scalar, T> >::operator[](lo).first() + ) + ); + } +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/interpolations/timeSeries/timeSeries.H b/src/OpenFOAM/interpolations/timeSeries/timeSeries.H new file mode 100644 index 00000000000..f581dafe500 --- /dev/null +++ b/src/OpenFOAM/interpolations/timeSeries/timeSeries.H @@ -0,0 +1,162 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2007 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 + +Class + Foam::timeSeries + +Description + A list of times and values. + The time values must be positive and monotonically increasing. + + The treatment of out-of-bounds values depends on the current setting + of bounding. + + If @a REPEAT bounding is in effect, the final time value is treated + as being equivalent to time=0 for the following periods. + +Note + - Accessing an empty list will result in an error. + - Accessing a list with a single element will always return the same value. + +SourceFiles + timeSeries.C + +\*---------------------------------------------------------------------------*/ + +#ifndef timeSeries_H +#define timeSeries_H + +#include "List.H" +#include "Tuple2.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class timeSeries Declaration +\*---------------------------------------------------------------------------*/ + +template<class T> +class timeSeries +: + public List<Tuple2<scalar, T> > +{ +public: + + // Public data types + + //- Enumeration for handling out-of-bound times + enum bounds + { + ERROR, /*!< Exit with a FatalError */ + WARN, /*!< Issue warning and clamp value (default) */ + CLAMP, /*!< Clamp value to the start/end value */ + REPEAT /*!< Treat as a repeating list */ + }; + +private: + + // Private data + + //- Enumeration for handling out-of-bound times + bounds bounding_; + +public: + + // Constructors + + //- Construct null, optionally with a given bounding + timeSeries(const bounds = timeSeries::WARN); + + //- Construct null with a given bounding + timeSeries(const word&); + + //- Construct from Istream, optionally with a given bounding + timeSeries(Istream&, const bounds = timeSeries::WARN); + + //- Construct from Istream with a given bounding + timeSeries(Istream&, const word&); + + // Destructor + + ~timeSeries(); + + // Member Functions + + // Access + + //- Return the size + label size() const + { + return List<Tuple2<scalar, T> >::size(); + } + + //- Return the out-of-bounds treatment as a word + word bounding() const; + + // Check + + //- Check that list is monotonically increasing + // Exit with a FatalError if there is a problem + void check() const; + + // Edit + + //- Set the out-of-bounds treatment from enum, return previous setting + bounds bounding(const bounds& bound) + { + bounds prev = bounding_; + bounding_ = bound; + return prev; + } + + //- Set the out-of-bounds treatment from word + void bounding(const word& bound); + + // Member Operators + + //- Return an element of constant Tuple2<scalar, T> + const Tuple2<scalar, T>& operator[](const label) const; + + //- Return an interpolated value + T operator()(const scalar) const; + +}; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#ifdef NoRepository +# include "timeSeries.C" +#endif + +#endif +// ************************************************************************* // diff --git a/wmake/rules/linux64Gcc43/X b/wmake/rules/linux64Gcc43/X new file mode 100644 index 00000000000..5d1f9c5cc54 --- /dev/null +++ b/wmake/rules/linux64Gcc43/X @@ -0,0 +1,3 @@ +XFLAGS = +XINC = $(XFLAGS) -I/usr/X11R6/include +XLIBS = -L/usr/X11R6/lib64 -lXext -lX11 diff --git a/wmake/rules/linux64Gcc43/c b/wmake/rules/linux64Gcc43/c new file mode 100644 index 00000000000..80bb80f32f7 --- /dev/null +++ b/wmake/rules/linux64Gcc43/c @@ -0,0 +1,16 @@ +.SUFFIXES: .c .h + +cWARN = -Wall + +cc = gcc -m64 + +include $(RULES)/c$(WM_COMPILE_OPTION) + +cFLAGS = $(GFLAGS) $(cWARN) $(cOPT) $(cDBUG) $(LIB_HEADER_DIRS) -fPIC + +ctoo = $(WM_SCHEDULER) $(cc) $(cFLAGS) -c $$SOURCE -o $@ + +LINK_LIBS = $(cDBUG) + +LINKLIBSO = $(cc) -shared +LINKEXE = $(cc) -Xlinker -z -Xlinker nodefs diff --git a/wmake/rules/linux64Gcc43/c++ b/wmake/rules/linux64Gcc43/c++ new file mode 100644 index 00000000000..36b5c29b20b --- /dev/null +++ b/wmake/rules/linux64Gcc43/c++ @@ -0,0 +1,21 @@ +.SUFFIXES: .C .cxx .cc .cpp + +c++WARN = -Wall -Wno-strict-aliasing -Wextra -Wno-unused-parameter -Wold-style-cast + +CC = g++ -m64 + +include $(RULES)/c++$(WM_COMPILE_OPTION) + +ptFLAGS = -DNoRepository -ftemplate-depth-40 + +c++FLAGS = $(GFLAGS) $(c++WARN) $(c++OPT) $(c++DBUG) $(ptFLAGS) $(LIB_HEADER_DIRS) -fPIC + +Ctoo = $(WM_SCHEDULER) $(CC) $(c++FLAGS) -c $$SOURCE -o $@ +cxxtoo = $(Ctoo) +cctoo = $(Ctoo) +cpptoo = $(Ctoo) + +LINK_LIBS = $(c++DBUG) + +LINKLIBSO = $(CC) $(c++FLAGS) -shared +LINKEXE = $(CC) $(c++FLAGS) diff --git a/wmake/rules/linux64Gcc43/c++Debug b/wmake/rules/linux64Gcc43/c++Debug new file mode 100644 index 00000000000..19bdb9c3346 --- /dev/null +++ b/wmake/rules/linux64Gcc43/c++Debug @@ -0,0 +1,2 @@ +c++DBUG = -ggdb3 -DFULLDEBUG +c++OPT = -O0 -fdefault-inline diff --git a/wmake/rules/linux64Gcc43/c++Opt b/wmake/rules/linux64Gcc43/c++Opt new file mode 100644 index 00000000000..f19996b72da --- /dev/null +++ b/wmake/rules/linux64Gcc43/c++Opt @@ -0,0 +1,4 @@ +c++DBUG = +c++OPT = -march=opteron -O3 +#c++OPT = -march=nocona -O3 +# -ftree-vectorize -ftree-vectorizer-verbose=3 diff --git a/wmake/rules/linux64Gcc43/c++Prof b/wmake/rules/linux64Gcc43/c++Prof new file mode 100644 index 00000000000..3bda4dad55e --- /dev/null +++ b/wmake/rules/linux64Gcc43/c++Prof @@ -0,0 +1,2 @@ +c++DBUG = -pg +c++OPT = -O2 diff --git a/wmake/rules/linux64Gcc43/cDebug b/wmake/rules/linux64Gcc43/cDebug new file mode 100644 index 00000000000..72b638f4582 --- /dev/null +++ b/wmake/rules/linux64Gcc43/cDebug @@ -0,0 +1,2 @@ +cDBUG = -ggdb -DFULLDEBUG +cOPT = -O1 -fdefault-inline -finline-functions diff --git a/wmake/rules/linux64Gcc43/cOpt b/wmake/rules/linux64Gcc43/cOpt new file mode 100644 index 00000000000..7285a9de969 --- /dev/null +++ b/wmake/rules/linux64Gcc43/cOpt @@ -0,0 +1,2 @@ +cDBUG = +cOPT = -march=opteron -O3 -fno-gcse diff --git a/wmake/rules/linux64Gcc43/cProf b/wmake/rules/linux64Gcc43/cProf new file mode 100644 index 00000000000..ca3ac9bf5f0 --- /dev/null +++ b/wmake/rules/linux64Gcc43/cProf @@ -0,0 +1,2 @@ +cDBUG = -pg +cOPT = -O2 diff --git a/wmake/rules/linux64Gcc43/dirToString b/wmake/rules/linux64Gcc43/dirToString new file mode 100755 index 0000000000000000000000000000000000000000..1f9e9266a6afac14ad47fa6507d0a988cbf31bbd GIT binary patch literal 11393 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 Cb~OtC literal 0 HcmV?d00001 diff --git a/wmake/rules/linux64Gcc43/general b/wmake/rules/linux64Gcc43/general new file mode 100644 index 00000000000..11b48acc3fc --- /dev/null +++ b/wmake/rules/linux64Gcc43/general @@ -0,0 +1,11 @@ +CPP = /lib/cpp $(GFLAGS) +LD = ld -A64 + +PROJECT_LIBS = -l$(WM_PROJECT) -liberty -ldl + +include $(GENERAL_RULES)/standard + +include $(RULES)/X +include $(RULES)/c +include $(RULES)/c++ +include $(GENERAL_RULES)/cint diff --git a/wmake/rules/linux64Gcc43/mplib b/wmake/rules/linux64Gcc43/mplib new file mode 100644 index 00000000000..8a84b401469 --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplib @@ -0,0 +1,3 @@ +PFLAGS = +PINC = +PLIBS = diff --git a/wmake/rules/linux64Gcc43/mplibGAMMA b/wmake/rules/linux64Gcc43/mplibGAMMA new file mode 100644 index 00000000000..dc67a60a0bf --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplibGAMMA @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(GAMMA_ARCH_PATH)/include +PLIBS = -L$(GAMMA_ARCH_PATH)/lib -lgamma diff --git a/wmake/rules/linux64Gcc43/mplibLAM b/wmake/rules/linux64Gcc43/mplibLAM new file mode 100644 index 00000000000..ce18f758601 --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplibLAM @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(LAM_ARCH_PATH)/include +PLIBS = -L$(LAM_ARCH_PATH)/lib -lmpi -llam -lpthread -lutil diff --git a/wmake/rules/linux64Gcc43/mplibMPICH b/wmake/rules/linux64Gcc43/mplibMPICH new file mode 100644 index 00000000000..d586ba3e039 --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplibMPICH @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(MPICH_ARCH_PATH)/include +PLIBS = -L$(MPICH_ARCH_PATH)/lib -lmpich -lrt diff --git a/wmake/rules/linux64Gcc43/mplibMPICH-GM b/wmake/rules/linux64Gcc43/mplibMPICH-GM new file mode 100644 index 00000000000..74fd9658087 --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplibMPICH-GM @@ -0,0 +1,3 @@ +PFLAGS = +PINC = -I$(MPICH_ARCH_PATH)/include +PLIBS = -L$(MPICH_ARCH_PATH)/lib -lmpich -L$(GM_LIB_PATH) -lgm diff --git a/wmake/rules/linux64Gcc43/mplibOPENMPI b/wmake/rules/linux64Gcc43/mplibOPENMPI new file mode 100644 index 00000000000..ea9b4d22993 --- /dev/null +++ b/wmake/rules/linux64Gcc43/mplibOPENMPI @@ -0,0 +1,3 @@ +PFLAGS = -DOMPI_SKIP_MPICXX +PINC = -I$(OPENMPI_ARCH_PATH)/include +PLIBS = -L$(OPENMPI_ARCH_PATH)/lib -lmpi diff --git a/wmake/rules/linux64Gcc43/wmkdep b/wmake/rules/linux64Gcc43/wmkdep new file mode 100755 index 0000000000000000000000000000000000000000..002e73dea8fc1318429203a4d6982765c3e6f01b GIT binary patch literal 35550 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 literal 0 HcmV?d00001 -- GitLab