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