summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/MakeHeader49
-rw-r--r--src/core/blockData2D.cpp38
-rw-r--r--src/core/blockData2D.h128
-rw-r--r--src/core/blockData2D.hh300
-rw-r--r--src/core/blockData3D.cpp37
-rw-r--r--src/core/blockData3D.h123
-rw-r--r--src/core/blockData3D.hh329
-rw-r--r--src/core/blockLattice2D.cpp36
-rw-r--r--src/core/blockLattice2D.h193
-rw-r--r--src/core/blockLattice2D.hh684
-rw-r--r--src/core/blockLattice3D.cpp36
-rw-r--r--src/core/blockLattice3D.h214
-rw-r--r--src/core/blockLattice3D.hh781
-rw-r--r--src/core/blockLatticeStructure2D.cpp36
-rw-r--r--src/core/blockLatticeStructure2D.h143
-rw-r--r--src/core/blockLatticeStructure2D.hh330
-rw-r--r--src/core/blockLatticeStructure3D.cpp36
-rw-r--r--src/core/blockLatticeStructure3D.h214
-rw-r--r--src/core/blockLatticeStructure3D.hh305
-rw-r--r--src/core/blockLatticeView2D.cpp36
-rw-r--r--src/core/blockLatticeView2D.h98
-rw-r--r--src/core/blockLatticeView2D.hh295
-rw-r--r--src/core/blockLatticeView3D.cpp36
-rw-r--r--src/core/blockLatticeView3D.h97
-rw-r--r--src/core/blockLatticeView3D.hh346
-rw-r--r--src/core/blockStructure2D.cpp35
-rw-r--r--src/core/blockStructure2D.h61
-rw-r--r--src/core/blockStructure3D.cpp35
-rw-r--r--src/core/blockStructure3D.h72
-rw-r--r--src/core/cell.cpp35
-rw-r--r--src/core/cell.h365
-rw-r--r--src/core/cell.hh159
-rw-r--r--src/core/core2D.h45
-rw-r--r--src/core/core2D.hh42
-rw-r--r--src/core/core3D.h45
-rw-r--r--src/core/core3D.hh42
-rw-r--r--src/core/finiteDifference.h80
-rw-r--r--src/core/finiteDifference2D.h141
-rw-r--r--src/core/finiteDifference3D.h148
-rw-r--r--src/core/latticeStatistics.cpp31
-rw-r--r--src/core/latticeStatistics.h93
-rw-r--r--src/core/latticeStatistics.hh344
-rw-r--r--src/core/module.mk27
-rw-r--r--src/core/olbDebug.h52
-rw-r--r--src/core/olbInit.h64
-rw-r--r--src/core/postProcessing.h224
-rw-r--r--src/core/postProcessing.hh379
-rw-r--r--src/core/postProcessing2D.cpp38
-rw-r--r--src/core/postProcessing3D.cpp39
-rw-r--r--src/core/powerLawUnitConverter.h173
-rw-r--r--src/core/powerLawUnitConverter.hh218
-rw-r--r--src/core/radiativeUnitConverter.cpp92
-rw-r--r--src/core/radiativeUnitConverter.h209
-rw-r--r--src/core/serializer.cpp36
-rw-r--r--src/core/serializer.h607
-rw-r--r--src/core/serializer.hh139
-rw-r--r--src/core/singleton.h174
-rw-r--r--src/core/spatiallyExtendedObject2D.h37
-rw-r--r--src/core/spatiallyExtendedObject3D.h37
-rw-r--r--src/core/superData2D.cpp37
-rw-r--r--src/core/superData2D.h106
-rw-r--r--src/core/superData2D.hh215
-rw-r--r--src/core/superData3D.cpp37
-rw-r--r--src/core/superData3D.h117
-rw-r--r--src/core/superData3D.hh244
-rw-r--r--src/core/superExternal2D.h67
-rw-r--r--src/core/superExternal2D.hh82
-rw-r--r--src/core/superExternal3D.h81
-rw-r--r--src/core/superExternal3D.hh62
-rw-r--r--src/core/superLattice2D.cpp40
-rw-r--r--src/core/superLattice2D.h357
-rw-r--r--src/core/superLattice2D.hh904
-rw-r--r--src/core/superLattice3D.cpp38
-rw-r--r--src/core/superLattice3D.h357
-rw-r--r--src/core/superLattice3D.hh821
-rw-r--r--src/core/thermalUnitConverter.h258
-rw-r--r--src/core/thermalUnitConverter.hh206
-rw-r--r--src/core/unitConverter.cpp41
-rw-r--r--src/core/unitConverter.h428
-rw-r--r--src/core/unitConverter.hh198
-rw-r--r--src/core/util.h471
-rw-r--r--src/core/vector.h482
82 files changed, 14887 insertions, 0 deletions
diff --git a/src/core/MakeHeader b/src/core/MakeHeader
new file mode 100644
index 0000000..622c77f
--- /dev/null
+++ b/src/core/MakeHeader
@@ -0,0 +1,49 @@
+# This file is part of the OpenLB library
+#
+# Copyright (C) 2007 Mathias Krause
+# E-mail contact: info@openlb.net
+# The most recent release of OpenLB can be downloaded at
+# <http://www.openlb.net/>
+#
+# This program 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.
+#
+# This program 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 this program; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
+
+
+generic := blockStructure2D \
+ blockStructure3D \
+ radiativeUnitConverter
+
+
+precompiled := blockStructure2D \
+ blockStructure3D \
+ blockData2D \
+ blockData3D \
+ blockLattice2D \
+ blockLattice3D \
+ blockLatticeStructure2D \
+ blockLatticeStructure3D \
+ blockLatticeView2D \
+ blockLatticeView3D \
+ cell \
+ latticeStatistics \
+ postProcessing2D \
+ postProcessing3D \
+ radiativeUnitConverter \
+ serializer \
+ superData2D \
+ superData3D \
+ superLattice2D \
+ superLattice3D \
+ unitConverter
diff --git a/src/core/blockData2D.cpp b/src/core/blockData2D.cpp
new file mode 100644
index 0000000..7d9845b
--- /dev/null
+++ b/src/core/blockData2D.cpp
@@ -0,0 +1,38 @@
+/* This file is part of the OpenLB library
+ *
+ * Copyright (C) 2015 Mathias J. Krause
+ * E-mail contact: info@openlb.net
+ * The most recent release of OpenLB can be downloaded at
+ * <http://www.openlb.net/>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/** \file
+ * Dynamics for a generic 2D block data -- template instantiation.
+ */
+
+#include "blockData2D.h"
+#include "blockData2D.hh"
+
+
+namespace olb {
+
+template class BlockData2D<double,int>;
+template class BlockData2D<double,double>;
+template class BlockData2D<double,bool>;
+
+} // namespace olb
diff --git a/src/core/blockData2D.h b/src/core/blockData2D.h
new file mode 100644
index 0000000..1f43b95
--- /dev/null
+++ b/src/core/blockData2D.h
@@ -0,0 +1,128 @@
+/* This file is part of the OpenLB library
+ *
+ * Copyright (C) 2015 Mathias J. Krause
+ * E-mail contact: info@openlb.net
+ * The most recent release of OpenLB can be downloaded at
+ * <http://www.openlb.net/>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/** \file
+ * Dynamics for a generic 2D block data -- header file.
+ */
+#ifndef BLOCK_DATA_2D_H
+#define BLOCK_DATA_2D_H
+
+
+#include <stdio.h>
+#include "blockStructure2D.h"
+#include "serializer.h"
+
+
+namespace olb {
+
+// forward declaration is sufficient at this state, include is moved to .hh
+template<typename BaseType> class BlockF2D;
+template<typename T> class Cuboid2D;
+
+
+/** A highly generic data structure class.
+ *
+ * Stored data is of type BaseType
+ *
+ * \param _size data element size
+ * \param _rawData classic array representation of all elements
+ * \param _filed a matrix like representation of _rawData
+ */
+template<typename T, typename BaseType>
+class BlockData2D : public BlockStructure2D, public Serializable {
+protected:
+ /// dimension of data element, vector, scalar, ...
+ int _size;
+ /// holds data as a 1D vector
+ BaseType *_rawData;
+ /** Pointer structure to a 3D data field.
+ * It can be interpreted as a 2D matrix[iX,iY] with elements of dimension _size.
+ * Those elements may be
+ * 1. vector valued like velocity, (f0,f1,...,f8)
+ * 2. scalar valued like density, pressure, ...
+ *
+ */
+ BaseType ***_field;
+public:
+ virtual ~BlockData2D();
+ /// Construct empty cuboid
+ BlockData2D();
+ /// Construct from cuboid
+ BlockData2D(Cuboid2D<T>& cuboid, int size=1);
+ /// Construct from X-Y node count
+ BlockData2D(int nx, int ny, int size=1);
+ /// Construct from Block Functor, attention!! operator() accesses functor data
+ BlockData2D(BlockF2D<BaseType>& rhs);
+ /// Copy Constructor
+ BlockData2D(BlockData2D<T,BaseType> const& rhs);
+ /// Assignment Operator
+ BlockData2D<T,BaseType>& operator=(BlockData2D<T,BaseType> const& rhs);
+ /// Move Operator
+ BlockData2D<T,BaseType>& operator=(BlockData2D<T,BaseType>&& rhs);
+ /// Move Constructor
+ BlockData2D<T,BaseType>(BlockData2D<T,BaseType>&& rhs);
+ /// Swap rhs Data into local fields
+ void swap(BlockData2D<T,BaseType>& rhs);
+ /// Memory Management
+ bool isConstructed() const;
+ void construct();
+ void deConstruct();
+ void reset();
+ /// read and write access to data element [iX][iY][iSize]
+ BaseType& get(int iX, int iY, int iSize=0);
+ /// read only access to data element [iX][iY][iSize]
+ BaseType const& get(int iX, int iY, int iSize=0) const;
+ /// \return dataElement _rawData[ind], read and write
+ BaseType& operator[] (int ind);
+ /// \return dataElement _rawData[ind], read only
+ BaseType const& operator[] (int ind) const;
+ /// Write access to the memory of the data of the block data where (iX, iY) is the point providing the data iData
+ bool* operator() (int iX, int iY, int iData);
+ /// \return max of data, for vector valued data it determines the max component
+ BaseType getMax();
+ /// \return min of data, for vector valued data it determines the max component
+ BaseType getMin();
+ /// \return _rawData array
+ BaseType* getRawData() const;
+ /// \return length of array _rawData or equivalent nX*nY*size
+ virtual size_t getDataSize() const;
+ /// Read only access to the dim of the data of the super structure
+ int getSize() const;
+ /// Number of data blocks for the serializable interface
+ std::size_t getNblock() const override
+ {
+ return 4;
+ };
+ /// Binary size for the serializer
+ std::size_t getSerializableSize() const override;
+ /// Returns a pointer to the memory of the current block and its size for the serializable interface
+ bool* getBlock(std::size_t iBlock, std::size_t& sizeBlock, bool loadingMode) override;
+private:
+ void allocateMemory(); // TODO
+ void releaseMemory();
+};
+
+
+} // namespace olb
+
+#endif
diff --git a/src/core/blockData2D.hh b/src/core/blockData2D.hh
new file mode 100644
index 0000000..2646e6b
--- /dev/null
+++ b/src/core/blockData2D.hh
@@ -0,0 +1,300 @@
+/* This file is part of the OpenLB library
+ *
+ * Copyright (C) 2015 Mathias J. Krause
+ * E-mail contact: info@openlb.net
+ * The most recent release of OpenLB can be downloaded at
+ * <http://www.openlb.net/>
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+/** \file
+ * Dynamics for a generic 2D block data -- header file.
+ */
+#ifndef BLOCK_DATA_2D_HH
+#define BLOCK_DATA_2D_HH
+
+#include <algorithm>
+#include "olbDebug.h"
+#include "blockData2D.h"
+#include "geometry/cuboid2D.h"
+#include "functors/lattice/blockBaseF2D.h"
+
+
+namespace olb {
+
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D() : BlockStructure2D(0,0), _size(0), _rawData(nullptr), _field(nullptr)
+{
+ construct();
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D(Cuboid2D<T>& cuboid, int size)
+ : BlockStructure2D(cuboid.getNx(), cuboid.getNy()), _size(size), _rawData(nullptr), _field(nullptr)
+{
+ construct();
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D(int nx, int ny, int size)
+ : BlockStructure2D(nx, ny), _size(size), _rawData(nullptr), _field(nullptr)
+{
+ construct();
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::~BlockData2D()
+{
+ deConstruct();
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D(BlockF2D<BaseType>& rhs)
+ : BlockStructure2D(rhs.getBlockStructure().getNx(), rhs.getBlockStructure().getNy()),
+ _size(rhs.getTargetDim())
+{
+ construct();
+ int i[2];
+ for (i[0] = 0; i[0] < this->_nx; ++i[0]) {
+ for (i[1] = 0; i[1] < this->_ny; ++i[1]) {
+ rhs(_field[i[0]][i[1]], i);
+ }
+ }
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D(BlockData2D<T,BaseType> const& rhs)
+ : BlockStructure2D(rhs._nx, rhs._ny), _size(rhs._size), _rawData(nullptr), _field(nullptr)
+{
+ if (rhs.isConstructed()) {
+ construct();
+ std::copy( rhs._rawData, rhs._rawData + getDataSize(), _rawData );
+ }
+}
+
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>& BlockData2D<T,BaseType>::operator=(BlockData2D<T,BaseType> const& rhs)
+{
+ BlockData2D<T,BaseType> tmp(rhs);
+ swap(tmp);
+ return *this;
+}
+
+// benefits of move operator: does not allocate memory or copys objects
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>& BlockData2D<T,BaseType>::operator=(BlockData2D<T,BaseType>&& rhs)
+{
+ if (this == &rhs) {
+ return *this;
+ }
+// this->releaseMemory(); // free data of object this
+
+ _size = rhs._size; // swap object data
+ _rawData = rhs._rawData;
+ _field = rhs._field;
+ this->_nx = rhs._nx;
+ this->_ny = rhs._ny;
+
+ rhs._rawData = nullptr; // free data of object rhs
+ rhs._field = nullptr;
+ rhs._nx = 0;
+ rhs._ny = 0;
+
+ return *this;
+}
+
+// benefits of move operator: does not allocate memory
+template<typename T, typename BaseType>
+BlockData2D<T,BaseType>::BlockData2D(BlockData2D<T,BaseType>&& rhs)
+ : BlockStructure2D(rhs._nx, rhs._ny), _size(0), _rawData(nullptr), _field(nullptr)
+{
+ *this = std::move(rhs); // https://msdn.microsoft.com/de-de/library/dd293665.aspx
+}
+
+
+template<typename T, typename BaseType>
+bool BlockData2D<T,BaseType>::isConstructed() const
+{
+ return _rawData;
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::construct()
+{
+ if (!isConstructed()) {
+ allocateMemory();
+ }
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::deConstruct()
+{
+ if (isConstructed()) {
+ releaseMemory();
+ }
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::reset()
+{
+ OLB_PRECONDITION(isConstructed());
+ for (size_t index = 0; index < getDataSize(); ++index) {
+ (*this)[index] = BaseType();
+ }
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::swap(BlockData2D<T,BaseType>& rhs)
+{
+ // Block2D
+ std::swap(this->_nx, rhs._nx);
+ std::swap(this->_ny, rhs._ny);
+ // BlockData2D
+ std::swap(_size, rhs._size);
+ std::swap(_rawData, rhs._rawData);
+ std::swap(_field, rhs._field);
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::allocateMemory()
+{
+ // The conversions to size_t ensure 64-bit compatibility. Note that
+ // nx and ny are of type int, which might by 32-bit types, even on
+ // 64-bit platforms. Therefore, nx*ny may lead to a type overflow.
+ _rawData = new BaseType[ getDataSize() ];
+ _field = new BaseType** [(size_t)(this->_nx)];
+ for (int iX = 0; iX < this->_nx; ++iX) {
+ _field[iX] = new BaseType* [(size_t)this->_ny];
+ for (int iY = 0; iY < this->_ny; ++iY) {
+ // connect matrix element to the corresponding array entry of _rawData
+ _field[iX][iY] = _rawData + _size*( (size_t)iY + (size_t)(this->_ny)*(size_t)iX );
+ for (int iDim = 0; iDim < _size; ++iDim) {
+ // initialize data with zero
+ _field[iX][iY][iDim] = BaseType();
+ }
+ }
+ }
+}
+
+template<typename T, typename BaseType>
+void BlockData2D<T,BaseType>::releaseMemory()
+{
+ delete [] _rawData;
+ _rawData = nullptr;
+ for (unsigned int iX = 0; iX < (size_t)(this->_nx); ++iX) {
+ delete [] _field[iX];
+ }
+ delete [] _field;
+}
+
+template<typename T, typename BaseType>
+BaseType& BlockData2D<T,BaseType>::get(int iX, int iY, int iSize)
+{
+ OLB_PRECONDITION(iX >= 0 && iX < this->_nx);
+ OLB_PRECONDITION(iY >= 0 && iY < this->_ny);
+ OLB_PRECONDITION(iSize >= 0 && iSize < _size);
+ OLB_PRECONDITION(isConstructed());
+ return _field[iX][iY][iSize];
+}
+
+template<typename T, typename BaseType>
+BaseType const& BlockData2D<T,BaseType>::get(int iX, int iY, int iSize) const
+{
+ OLB_PRECONDITION(iX >= 0 && iX < this->_nx);
+ OLB_PRECONDITION(iY >= 0 && iY < this->_ny);
+