|
Palabos
Version 1.0
|
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00028 #ifndef DATA_PROCESSOR_3D_H 00029 #define DATA_PROCESSOR_3D_H 00030 00031 #include "core/globalDefs.h" 00032 #include "core/geometry3D.h" 00033 #include "core/blockStatistics.h" 00034 #include <vector> 00035 #include <algorithm> 00036 00037 namespace plb { 00038 00039 // Forward declarations 00040 class AtomicBlock3D; 00041 00043 struct DataProcessor3D { 00044 virtual ~DataProcessor3D() { } 00046 virtual void process() =0; 00048 virtual DataProcessor3D* clone() const =0; 00050 virtual plint extent() const; 00052 virtual plint extent(int direction) const; 00055 virtual int getStaticId() const; 00056 }; 00057 00059 00065 struct DataProcessorGenerator3D { 00066 virtual ~DataProcessorGenerator3D(); 00068 virtual void shift(plint deltaX, plint deltaY, plint deltaZ) =0; 00070 virtual void multiply(plint scale) =0; 00072 virtual void divide(plint scale) =0; 00074 00076 virtual bool extract(Box3D subDomain) =0; 00078 virtual DataProcessor3D* generate ( 00079 std::vector<AtomicBlock3D*> atomicBlocks ) const =0; 00081 virtual DataProcessorGenerator3D* clone() const =0; 00083 virtual BlockDomain::DomainT appliesTo() const; 00085 virtual void rescale(double dxScale, double dtScale); 00087 virtual void setscale(int dxScale_, int dtScale_); 00089 00091 virtual void getModificationPattern(std::vector<bool>& isWritten) const; 00094 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const =0; 00097 virtual int getStaticId() const; 00099 virtual void serialize(Box3D& domain, std::string& data) const; 00100 }; 00101 00102 class BoxedDataProcessorGenerator3D : public DataProcessorGenerator3D { 00103 public: 00104 BoxedDataProcessorGenerator3D(Box3D domain_); 00105 virtual void shift(plint deltaX, plint deltaY, plint deltaZ); 00106 virtual void multiply(plint scale); 00107 virtual void divide(plint scale); 00108 virtual bool extract(Box3D subDomain); 00109 Box3D getDomain() const; 00110 virtual void serialize(Box3D& domain, std::string& data) const; 00111 private: 00112 Box3D domain; 00113 }; 00114 00115 class DottedDataProcessorGenerator3D : public DataProcessorGenerator3D { 00116 public: 00117 DottedDataProcessorGenerator3D(DotList3D const& dots_); 00118 virtual void shift(plint deltaX, plint deltaY, plint deltaZ); 00119 virtual void multiply(plint scale); 00120 virtual void divide(plint scale); 00121 virtual bool extract(Box3D subDomain); 00122 DotList3D const& getDotList() const; 00123 private: 00124 DotList3D dots; 00125 }; 00126 00127 class ReductiveDataProcessorGenerator3D { 00128 public: 00129 ReductiveDataProcessorGenerator3D(); 00130 virtual ~ReductiveDataProcessorGenerator3D(); 00132 virtual void shift(plint deltaX, plint deltaY, plint deltaZ) =0; 00134 virtual void multiply(plint scale) =0; 00136 virtual void divide(plint scale) =0; 00138 00140 virtual bool extract(Box3D subDomain) =0; 00142 virtual DataProcessor3D* generate ( 00143 std::vector<AtomicBlock3D*> atomicBlocks ) =0; 00145 virtual ReductiveDataProcessorGenerator3D* clone() const =0; 00147 virtual BlockStatistics const& getStatistics() const =0; 00149 virtual BlockStatistics& getStatistics() =0; 00151 virtual BlockDomain::DomainT appliesTo() const; 00153 virtual void rescale(double dxScale, double dtScale); 00155 00157 virtual void getModificationPattern(std::vector<bool>& isWritten) const; 00160 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const =0; 00162 void setscale(int dxScale_, int dtScale_); 00164 int getDxScale() const; 00166 int getDtScale() const; 00168 virtual void getDimensionsX(std::vector<int>& dimensions) const; 00170 virtual void getDimensionsT(std::vector<int>& dimensions) const; 00171 virtual void serialize(Box3D& domain, std::string& data) const; 00172 private: 00173 int dxScale, dtScale; 00174 }; 00175 00176 class BoxedReductiveDataProcessorGenerator3D : public ReductiveDataProcessorGenerator3D { 00177 public: 00178 BoxedReductiveDataProcessorGenerator3D(Box3D domain_); 00179 virtual void shift(plint deltaX, plint deltaY, plint deltaZ); 00180 virtual void multiply(plint scale); 00181 virtual void divide(plint scale); 00182 virtual bool extract(Box3D subDomain); 00183 Box3D getDomain() const; 00184 virtual void serialize(Box3D& domain, std::string& data) const; 00185 private: 00186 Box3D domain; 00187 }; 00188 00189 class DottedReductiveDataProcessorGenerator3D : public ReductiveDataProcessorGenerator3D { 00190 public: 00191 DottedReductiveDataProcessorGenerator3D(DotList3D const& dots_); 00192 virtual void shift(plint deltaX, plint deltaY, plint deltaZ); 00193 virtual void multiply(plint scale); 00194 virtual void divide(plint scale); 00195 virtual bool extract(Box3D subDomain); 00196 DotList3D const& getDotList() const; 00197 private: 00198 DotList3D dots; 00199 }; 00200 00201 } // namespace plb 00202 00203 #endif // DATA_PROCESSOR_3D_H