From 82284392ef09b97d274234d1cd76c02238e4dabb Mon Sep 17 00:00:00 2001
From: kutscher <kutscher@irmb.tu-bs.de>
Date: Mon, 18 Sep 2017 14:49:17 +0200
Subject: [PATCH]  - deletes depot folder

---
 authors.txt                         |    2 +
 depot/MeanValuesCoProcessor.cpp     |   67 --
 depot/MeanValuesCoProcessor.h       |   26 -
 depot/Particles.cpp                 |   11 -
 depot/Particles.h                   |   29 -
 depot/PathLineCoProcessor.cpp       | 1505 ---------------------------
 depot/PathLineCoProcessor.h         |  115 --
 depot/PathLineCoProcessorMcpart.cpp | 1301 -----------------------
 depot/PathLineCoProcessorMcpart.h   |  133 ---
 9 files changed, 2 insertions(+), 3187 deletions(-)
 create mode 100644 authors.txt
 delete mode 100644 depot/MeanValuesCoProcessor.cpp
 delete mode 100644 depot/MeanValuesCoProcessor.h
 delete mode 100644 depot/Particles.cpp
 delete mode 100644 depot/Particles.h
 delete mode 100644 depot/PathLineCoProcessor.cpp
 delete mode 100644 depot/PathLineCoProcessor.h
 delete mode 100644 depot/PathLineCoProcessorMcpart.cpp
 delete mode 100644 depot/PathLineCoProcessorMcpart.h

diff --git a/authors.txt b/authors.txt
new file mode 100644
index 000000000..45531bf38
--- /dev/null
+++ b/authors.txt
@@ -0,0 +1,2 @@
+kutscher = Konstantin Kutscher <kutscher@irmb.tu-bs.de>
+kucher = Konstantin Kutscher <kutscher@irmb.tu-bs.de>
\ No newline at end of file
diff --git a/depot/MeanValuesCoProcessor.cpp b/depot/MeanValuesCoProcessor.cpp
deleted file mode 100644
index 73bc3da3a..000000000
--- a/depot/MeanValuesCoProcessor.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "MeanValuesCoProcessor.h"
-
-MeanValuesCoProcessor::MeanValuesCoProcessor(Grid3DPtr grid, UbSchedulerPtr s, const std::string &path,
-                                                           CommunicatorPtr comm, D3Q27IntegrateValuesHelperPtr ih, double factorPressure, double factorVelocity) :
-                                                            CoProcessor(grid, s),
-                                                            filename(path),
-                                                            comm(comm),
-                                                            ih(ih),
-                                                            factorPressure(factorPressure),
-                                                            factorVelocity(factorVelocity)
-{
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      FILE *output;
-      output = fopen(filename.c_str(), "w");
-      if (output == NULL)
-      {
-         std::string pathf = UbSystem::getPathFromString(filename);
-         if (filename.size()>0) { UbSystem::makeDirectory(pathf); output = fopen(filename.c_str(), "w"); }
-         if (output == NULL) throw UbException(UB_EXARGS, "can not open " + filename);
-      }
-         
-      //fprintf(output, "%-18s %-18s %-18s %-18s %-18s %-18s %-18s\n", "time step", "area", "pressure [Pa*m^2]", "velocity [m^3/s]", "velocityX [m^3/s]", "velocityY [m^3/s]", "velocityZ [m^3/s]");
-      fprintf(output, "%-18s;%-18s;%-18s;%-18s;%-18s\n", "time step", "area", "velocityX [m^3/s]", "velocityY [m^3/s]", "velocityZ [m^3/s]");
-      fclose(output);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-MeanValuesCoProcessor::~MeanValuesCoProcessor()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void MeanValuesCoProcessor::process(double step)
-{
-   if (scheduler->isDue(step))
-      collectPostprocessData(step);
-}
-//////////////////////////////////////////////////////////////////////////
-void MeanValuesCoProcessor::collectPostprocessData(double step)
-{
-   ih->calculateMQ();
-   
-   if (comm->getProcessID() == comm->getRoot())
-   {
-      int istep = static_cast<int>(step);
-      std::ofstream ostr;
-      double nn = ih->getNumberOfFluidsNodes();
-      //double p = (ih->getPress())*factorPressure;
-      double vx1 = (ih->getVx1())*factorVelocity;
-      double vx2 = (ih->getVx2())*factorVelocity;
-      double vx3 = (ih->getVx3())*factorVelocity;
-      //double vm = (ih->getVm())*factorVelocity;
-
-      FILE *output;
-      output = fopen(filename.c_str(), "a");
-      if (output == NULL)
-         throw UbException(UB_EXARGS, "can not open " + filename);
-
-      //fprintf(output, "%-18d %-18d %-18.3f %-18.3f %-18.3f %-18.3f %-18.3f\n", istep, (int)nn, p, vm, vx1, vx2, vx3);
-      fprintf(output, "%-18d %-18d %-18.3f %-18.3f %-18.3f\n", istep, (int)nn, vx1, vx2, vx3);
-
-      fclose(output);
-
-      UBLOG(logINFO, "D3Q27MeanValuesPostprocessor step: " << istep);
-   }
-}
diff --git a/depot/MeanValuesCoProcessor.h b/depot/MeanValuesCoProcessor.h
deleted file mode 100644
index eb3b38381..000000000
--- a/depot/MeanValuesCoProcessor.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef D3Q27MEANVALUESPOSTPROCESSOR_H
-#define D3Q27MEANVALUESPOSTPROCESSOR_H
-
-#include <CoProcessor.h>
-#include <D3Q27IntegrateValuesHelper.h>
-#include <LBMUnitConverter.h>
-
-class MeanValuesCoProcessor : public CoProcessor
-{
-public:
-   MeanValuesCoProcessor(Grid3DPtr grid, UbSchedulerPtr s, const std::string &path,
-      CommunicatorPtr comm, D3Q27IntegrateValuesHelperPtr ih, double factorPressure, double factorVelocity);
-                                
-   virtual ~MeanValuesCoProcessor();
-   void process(double step);
-   
-private:
-   D3Q27IntegrateValuesHelperPtr ih;
-   CommunicatorPtr comm;
-   std::string filename;
-   double factorPressure, factorVelocity;
-   void collectPostprocessData(double step);
-};
-
-#endif
-   
diff --git a/depot/Particles.cpp b/depot/Particles.cpp
deleted file mode 100644
index 5e6e5141f..000000000
--- a/depot/Particles.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "Particles.h"
-
-
-Particles::Particles()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-Particles::~Particles()
-{
-}
-//////////////////////////////////////////////////////////////////////////
diff --git a/depot/Particles.h b/depot/Particles.h
deleted file mode 100644
index c133f9de4..000000000
--- a/depot/Particles.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef PARTICLES_H
-#define PARTICLES_H
-
-#include <boost/shared_ptr.hpp>
-# define numOfvarClass 15
-
-class Particles;
-typedef boost::shared_ptr<Particles> ParticlesPtr;
-
-class Particles 
-{
-public:
-	double x,y,z,xold,yold,zold;
-	double vxold,vyold,vzold;
-	double vxoldf,vyoldf,vzoldf;
-	int ID;
-	int rankOfParticle;
-    int level;
-	//double dx;
-
-
-	Particles();
-	~Particles();
-protected:
-private:
-	
-};
-#endif
-
diff --git a/depot/PathLineCoProcessor.cpp b/depot/PathLineCoProcessor.cpp
deleted file mode 100644
index 7ca2741c0..000000000
--- a/depot/PathLineCoProcessor.cpp
+++ /dev/null
@@ -1,1505 +0,0 @@
-#include "PathLineCoProcessor.h"
-#include "LBMKernelETD3Q27.h"
-#include "SimulationParameters.h"
-#include "D3Q27ETBCProcessor.h"
-#include <vector>
-#include <string>
-#include <boost/foreach.hpp>
-#include "WbWriter.h"
-
-using namespace std;
-
-
-PathLineCoProcessor::PathLineCoProcessor(Grid3DPtr grid, const std::string& path,
-                                                       WbWriter* const writer, LBMUnitConverterPtr conv,
-                                                       UbSchedulerPtr s, CommunicatorPtr comm, 
-                                                       double x1, double x2, double x3, LBMReal nue, D3Q27InterpolationProcessorPtr iProcessor)
-                                                       : CoProcessor(grid, s),
-                                                       path(path),
-                                                       comm(comm),
-                                                       writer(writer),
-                                                       conv(conv),
-                                                       x1(x1),
-                                                       x2(x2),
-                                                       x3(x3),
-                                                       nue(nue),
-                                                       iProcessor(iProcessor),
-                                                       vx1old(0.0),
-                                                       vx2old(0.0),
-                                                       vx3old(0.0),
-                                                       vx1oldf(0.1),
-                                                       vx2oldf(0.1),
-                                                       vx3oldf(0.1),
-                                                       isExtrapolation(0),
-                                                       istep(0),
-                                                       maxtag(-1),
-                                                       particleHasMass(true),
-                                                       rank(comm->getProcessID())
-{
-   iHelper = D3Q27InterpolationHelperPtr(new D3Q27InterpolationHelper(iProcessor));
-}
-//////////////////////////////////////////////////////////////////////////
-PathLineCoProcessor::~PathLineCoProcessor()
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::process(double step)
-{
-   this->stepcheck=(int)step;
-   double aa=scheduler->getMinEnd();
-   if (step >= scheduler->getMaxBegin() && step <= scheduler->getMinEnd())
-   {
-      collectPostprocessData();
-   }
-
-   UBLOG(logDEBUG3, "PathLinePostprocessor::update:" << step);
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::collectPostprocessData()
-{
-   //for (int n=0;n<Positions[][0].size();n++)
-   //{
-   //}
-
-   int minInitLevel = this->grid->getCoarsestInitializedLevel();
-   int maxInitLevel = this->grid->getFinestInitializedLevel();
-   bool goinside=true;
-
-   LBMKernelETD3Q27Ptr kernel;
-   DistributionArray3DPtr distributions;
-   BCArray3D<D3Q27BoundaryCondition> bcArray;
-   Block3DPtr block;
-   Block3DPtr block2;
-   int isPointSuitable=0;//0 means false
-   ///////send tau for printing to proccess 0
-   double tau[6];//={tauxx,tauyy,tauzz,tauxy,tauxz,tauyz};
-   for(int level = minInitLevel; level<=maxInitLevel; level++)
-   {	      
-      UbTupleInt3 blockIndexes = grid->getBlockIndexes(x1, x2, x3,level);
-      block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-      if(!block) continue; 
-      if(block->isActive()) 
-      {
-         this->root=block->getRank();
-         if(rank == block->getRank())
-         { 
-            if(!checkNodes(block))
-            {		   
-               isPointSuitable=0;//0 meas false
-               if(comm->getNumberOfProcesses() > 1)   {  sendtoOtherIsOk(isPointSuitable);}
-               continue;
-            }  
-            initialMovement(block, kernel, distributions,  bcArray);
-            isPointSuitable=1;//0 meas false
-            if(comm->getNumberOfProcesses() > 1)   {  sendtoOtherIsOk(isPointSuitable);}
-            break;
-         }	
-         else
-         {
-            if(comm->getNumberOfProcesses() > 1)  
-            { 
-               MPI_Status status; 
-               MPI_Recv(&isPointSuitable,1, MPI_INT,this->root,this->rank,MPI_COMM_WORLD,&status);
-               if (isPointSuitable)
-               {
-                  break;
-               }
-            }
-         } 
-      }
-   } 
-   if (isPointSuitable)
-   {
-      if(comm->getNumberOfProcesses() > 1) updateDistributedValues();
-      bool isPointSuitable2;
-      checkLevel(block, kernel, distributions,  bcArray,isPointSuitable2);
-      if (isPointSuitable2)
-      {  
-         if(block->isActive())
-         { 
-            if (rank == block->getRank())
-            {
-               interpolMovement(block, kernel, distributions,  bcArray,isExtrapolation,tau);
-               if (isExtrapolation)
-               {	
-                  extrapolMovement(block, kernel, distributions,  bcArray,tau);
-               }
-            }
-            else
-            {
-               if(comm->getNumberOfProcesses() > 1)  
-               {  
-                  //recive isExtrapolation
-                  if (this->rank!=this->root)
-                  {
-                     MPI_Status status; 
-                     MPI_Recv(&isExtrapolation,1, MPI_INT,this->root,this->rank,MPI_COMM_WORLD,&status);
-                  }
-               }
-            }
-         }   
-         if(comm->getNumberOfProcesses() > 1) 
-         {
-            if (isExtrapolation)
-            {	
-               if (this->rank!=this->root)
-               {
-                  MPI_Status status;   
-                  MPI_Recv(&maxtag,1, MPI_INT,this->root,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-               }	   
-            }
-            if (isExtrapolation)
-            {	
-               if (this->rank!=this->root)
-               {
-                  MPI_Status status; 
-                  double input [7][25];
-                  double AllCell[7][8*27];
-                  int sizeinput=25;
-                  for (int i=0;i<maxtag;i++)
-                  {  
-                     double vectforTrans[25]; 
-                     double *Cell=(double*)malloc(8*27*sizeof(double));
-                     MPI_Recv(vectforTrans,25, MPI_DOUBLE_PRECISION,this->root,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-                     getAllInfoForCompare(vectforTrans,Cell);
-
-                     for (int j=0;j<sizeinput;j++)  {  input[i][j]=vectforTrans[j]; }
-                     for (int k=0;k<8*27;k++)       {  AllCell[i][k]=Cell[k];   	  }
-                     free (Cell);
-                  }
-                  for (int i=0;i<maxtag;i++)
-                  { 
-                     double vectforTrans[25];
-                     double *Cell=(double*)malloc(8*27*sizeof(double));
-                     for (int j=0;j<sizeinput;j++)   {	  vectforTrans[j]=input[i][j]; 	  }
-                     for (int k=0;k<8*27;k++)       {    Cell[k]=AllCell[i][k];   	  }
-
-                     MPI_Send(vectforTrans,25, MPI_DOUBLE_PRECISION,this->root,i,MPI_COMM_WORLD);
-                     MPI_Send(Cell,8*27, MPI_DOUBLE_PRECISION,this->root,i,MPI_COMM_WORLD);
-                     free (Cell);
-                  }
-               }
-            }
-            updateDistributedValues();
-         }
-
-         if(comm->getNumberOfProcesses() > 1)  MPI_Bcast(tau,6, MPI_DOUBLE, this->root, MPI_COMM_WORLD);	   
-         if (rank==0)
-         {
-            MPI_Status status;   
-            printPoint(tau);
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::printPoint(double tau[])
-{
-   double tauxx=tau[0];
-   double tauyy=tau[1];
-   double tauzz=tau[2];
-   double tauxy=tau[3];
-   double tauxz=tau[4];
-   double tauyz=tau[5];
-   datanames.resize(0);
-   datanames.push_back("TimeStep");
-   datanames.push_back("Vx");
-   datanames.push_back("Vy");
-   datanames.push_back("Vz");
-   datanames.push_back("tauxx");
-   datanames.push_back("tauyy");
-   datanames.push_back("tauzz");
-   datanames.push_back("tauxy");
-   datanames.push_back("tauxz");
-   datanames.push_back("tauyz");
-   /*datanames.push_back("xoff");
-   datanames.push_back("yoff");
-   datanames.push_back("zoff");
-   */
-   data.resize(datanames.size());
-
-   int index = 0;
-   data[index++].push_back(istep++);
-   data[index++].push_back(vx1old);
-   data[index++].push_back(vx2old);
-   data[index++].push_back(vx3old);
-   data[index++].push_back(tauxx);
-   data[index++].push_back(tauyy);
-   data[index++].push_back(tauzz);
-   data[index++].push_back(tauxy);
-   data[index++].push_back(tauxz);
-   data[index++].push_back(tauyz);
-   //data[index++].push_back(xoff);
-   //data[index++].push_back(yoff);
-   //data[index++].push_back(zoff);
-
-   nodes.push_back( makeUbTuple(  double(x1), double(x2), double(x3)) );
-
-   //if(scheduler->isDue((double)istep) )
-   if (istep%1 ==0)
-   {
-      string test = writer->writeNodesWithNodeDataDouble(path,nodes,datanames,data);
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::clearData()
-{
-   nodes.clear();
-   datanames.clear();
-   data.clear();
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::initialMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray)
-{
-   //UBLOG(logINFO, "addPostprocessData1");
-   //root = rank;
-
-   double dx = grid->getDeltaX(block);
-   kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   distributions = kernel->getDataSet()->getFdistributions();
-   bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-   x1old=x1;
-   x2old=x2;
-   x3old=x3;
-
-   x1=x1old+vx1old*conv->getFactorTimeLbToW(grid->getDeltaX(block));
-   x2=x2old+vx2old*conv->getFactorTimeLbToW(grid->getDeltaX(block));
-   x3=x3old+vx3old*conv->getFactorTimeLbToW(grid->getDeltaX(block));
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::checkLevel(Block3DPtr& block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray,bool &isPointSuitable2)
-{
-   int minInitLevel = this->grid->getCoarsestInitializedLevel();
-   int maxInitLevel = this->grid->getFinestInitializedLevel(); 
-   bool goinside=true;
-   int isPointSuitable=0;//0 means false
-   for(int level = minInitLevel; level<=maxInitLevel; level++)
-   {	      
-      UbTupleInt3 blockIndexes = grid->getBlockIndexes(x1, x2, x3,level);
-      block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-      if(!block) continue; 
-      if(block->isActive()) 
-      {
-         this->root=block->getRank();
-         if(rank == block->getRank())
-         { 
-            if(!checkNodes(block))
-            {		   
-               isPointSuitable=0;//0 meas false
-               if(comm->getNumberOfProcesses() > 1)   {  sendtoOtherIsOk(isPointSuitable);}
-               continue;
-            }  
-            kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-            distributions = kernel->getDataSet()->getFdistributions();
-            bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-            isPointSuitable=1;//0 meas false
-            if(comm->getNumberOfProcesses() > 1)   {  sendtoOtherIsOk(isPointSuitable);}
-            break;
-         }	
-         else
-         {
-            if(comm->getNumberOfProcesses() > 1)  
-            { 
-               MPI_Status status; 
-               MPI_Recv(&isPointSuitable,1, MPI_INT,this->root,this->rank,MPI_COMM_WORLD,&status);
-               if (isPointSuitable)
-               {
-                  break;
-               }
-            }
-         } 
-      }
-   }
-   if (isPointSuitable){isPointSuitable2=true;	} 
-   else isPointSuitable2=false;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::interpolMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray, int &isExtrapolation,double tau[])
-{
-   LBMReal tauxx,	   tauyy,	   tauzz,	   tauxy,	   tauxz,	   tauyz;
-   LBMReal vx1,vx2,vx3,rho;
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, x1, x2, x3);
-   LBMReal dx = grid->getDeltaX(block); 
-   D3Q27ICell iCell;
-   LBMReal f[D3Q27System::ENDF+1];
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-   double xoff=0.0; 
-   double yoff=0.0;
-   double zoff=0.0;
-   //typedef void (*CalcMacrosFct)(const LBMReal* const& /*feq[27]*/,LBMReal& /*(d)rho*/, LBMReal& /*vx1*/, LBMReal& /*vx2*/, LBMReal& /*vx3*/);
-   /*
-   CalcMacrosFct calcMacros = NULL;
-
-   if(block->getKernel()->getCompressible())
-   {
-   calcMacros = &D3Q27System::calcCompMacroscopicValues;
-   }
-   else
-   {
-   calcMacros = &D3Q27System::calcIncompMacroscopicValues;
-   }*/
-
-   double Ucor=0,Vcor=0,Wcor=0;
-   double tauxxC=00,tauyyC=0,tauzzC=0,tauxyC=0,tauxzC=0,tauyzC=0;
-   double X_Wcor,Y_Wcor,Z_Wcor;
-   double X_Pcor,Y_Pcor,Z_Pcor;
-   double xp000,yp000,zp000;
-   double Xw;
-   double Yw;
-   double Zw;
-
-   UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-   double ix1p= ( val<1>(orgNodeRW));
-   double ix2p= ( val<2>(orgNodeRW));
-   double ix3p= ( val<3>(orgNodeRW));
-   if(!iProcessor->iCellHasSolid(bcArray, ix1, ix2, ix3))
-   {
-      iProcessor->readICell(distributions, iCell, ix1, ix2, ix3);
-      double x1LB, x2LB, x3LB;
-      UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-      double offsetX1RW = abs(x1 - val<1>(orgNodeRW));
-      double offsetX2RW = abs(x2 - val<2>(orgNodeRW));
-      double offsetX3RW = abs(x3 - val<3>(orgNodeRW));
-      x1LB = offsetX1RW / dx;
-      x2LB = offsetX2RW / dx;
-      x3LB = offsetX3RW / dx;
-      x1LB -= 0.5-xoff;
-      x2LB -= 0.5-yoff;
-      x3LB -= 0.5-zoff;
-      LBMReal omega = LBMSystem::calcCollisionFactor(nue, block->getLevel());
-      /*iProcessor->interpolate8to1(iCell, f, x1LB, x2LB, x3LB, omega);
-      calcMacros(f,rho,vx1,vx2,vx3);*/
-      //iProcessor->interpolate8to1WithVelocity(iCell, f, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3);
-      iHelper->interpolate8to1WithVelocityWithShearStress(iCell, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz);
-      vx1 = vx1 *  conv->getFactorVelocityLbToW();
-      vx2 = vx2 *  conv->getFactorVelocityLbToW();
-      vx3 = vx3 *  conv->getFactorVelocityLbToW();
-      tau[0]=tauxx/grid->getDeltaX(block);
-      tau[1]=tauyy/grid->getDeltaX(block);
-      tau[2]=tauzz/grid->getDeltaX(block);
-      tau[3]=tauxy/grid->getDeltaX(block);
-      tau[4]=tauxz/grid->getDeltaX(block);
-      tau[5]=tauyz/grid->getDeltaX(block);  
-
-      //if (particleHasMass) {   CalcVelParticle(dx,vx1,vx2,vx3,vx1old,vx2old,vx3old,vx1oldf,vx2oldf,vx3oldf);}
-      if (particleHasMass) {   CalcVelParticle2(dx,vx1,vx2,vx3,vx1old,vx2old,vx3old,vx1oldf,vx2oldf,vx3oldf);}
-      //heuns method
-      x1 = (x1old) + 1.0/2.0*(vx1 + vx1old)*conv->getFactorTimeLbToW(dx);
-      x2 = (x2old) + 1.0/2.0*(vx2 + vx2old)*conv->getFactorTimeLbToW(dx);
-      x3 = (x3old) + 1.0/2.0*(vx3 + vx3old)*conv->getFactorTimeLbToW(dx);
-
-      vx1old = vx1;
-      vx2old = vx2;
-      vx3old = vx3;
-
-      //send isExtrapolation false
-      isExtrapolation=0;//1 means true
-      if(comm->getNumberOfProcesses() > 1)  
-      { 
-         int size=comm->getNumberOfProcesses();
-         for (int i=0;i<size;i++)
-         {
-            if (i!=rank)
-            {
-               MPI_Send(&isExtrapolation,1, MPI_INT,i,i,MPI_COMM_WORLD); 
-            }	
-         }
-      }
-   }
-   else
-   {
-      //send isExtrapolation true
-      isExtrapolation=1;//1 means true
-      if(comm->getNumberOfProcesses() > 1)  
-      { 
-         int size=comm->getNumberOfProcesses();
-         for (int i=0;i<size;i++)
-         {
-            if (i!=rank)
-            {
-               MPI_Send(&isExtrapolation,1, MPI_INT,i,i,MPI_COMM_WORLD); 
-            }	
-         }
-      }
-
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::extrapolMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray,double tau[])
-{
-   LBMReal tauxx,	   tauyy,	   tauzz,	   tauxy,	   tauxz,	   tauyz;
-   LBMReal vx1,vx2,vx3,rho;
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, x1, x2, x3);
-   LBMReal dx = grid->getDeltaX(block);
-   int    level = block->getLevel();
-   double deltaT= 1.0/(double)(1<<level);	 
-   LBMReal omega = LBMSystem::calcCollisionFactor(nue,level);
-   D3Q27ICell iCell;
-   LBMReal f[D3Q27System::ENDF+1];
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-   double xoff=0.0; 
-   double yoff=0.0;
-   double zoff=0.0;
-   double Ucor=0,Vcor=0,Wcor=0;
-   double tauxxC=00,tauyyC=0,tauzzC=0,tauxyC=0,tauxzC=0,tauyzC=0;
-   double X_Wcor,Y_Wcor,Z_Wcor;
-   double X_Pcor,Y_Pcor,Z_Pcor;
-   double xp000,yp000,zp000;
-   double Xw=999.0;
-   double Yw=999.0;
-   double Zw=999.0;
-
-   UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-   double ix1p= ( val<1>(orgNodeRW));
-   double ix2p= ( val<2>(orgNodeRW));
-   double ix3p= ( val<3>(orgNodeRW));
-   {
-      UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-      double ix1ph = ( val<1>(orgNodeRW));
-      double ix2ph = ( val<2>(orgNodeRW));
-      double ix3ph = ( val<3>(orgNodeRW)); 
-      double cofWeightx=999.0,cofWeighty=999.0,cofWeightz=999.0;
-      double A,B,C,D,ii=0.0;
-      findPlane(ix1,ix2,ix3,grid,block,A,B,C,D,ii);
-      double s = A*x1 + B*x2 + C*x3 + D;//The sign of s = Ax + By + Cz + D determines which side the point (x,y,z) lies with respect to the plane. If s > 0 then the point lies on the same side as the normal (A,B,C). If s < 0 then it lies on the opposite side, if s = 0 then the point (x,y,z) lies on the plane.
-      if (s>0){s=1;} else if (s<0){s=-1;}else {s=0;}
-      double normalDis=((A*x1 + B*x2 + C*x3 + D)/sqrt(A*A+B*B+C*C));///distance point to plane xp-Xw=distance
-      double di=A/sqrt(A*A+B*B+C*C);      double dj=B/sqrt(A*A+B*B+C*C);       double dk=C/sqrt(A*A+B*B+C*C);
-      double XXw=x1-di*normalDis;    double YYw=x2-dj*normalDis;    double ZZw=x3-dk*normalDis;
-      findInitialCell(s,di,dj,dk,dx,ix1ph,ix2ph,ix3ph,xp000,yp000,zp000);//find initial cell with xp000,yp000,zp000
-      /////////////////////////////////////////////////////////////////////////
-      int level=block->getLevel();
-      int Rankx,Ranky,Rankz,Rankxy,Rankxz,Rankyz,Rankxyz;
-      double disx=9990,disy=9990,disz=9990,disxy=9990,disxz=9990,disyz=9990,disxyz=9990; 
-      getAllRankWithAllPositions(ix1ph,ix2ph,ix3ph,xp000,yp000,zp000,Rankx,Ranky,Rankz,Rankxy,Rankxz,Rankyz,Rankxyz,level);
-      //getAllRankWithAllPositions2(ix1ph,ix2ph,ix3ph,xp000,yp000,zp000,Rankx,Ranky,Rankz,Rankxy,Rankxz,Rankyz,Rankxyz);
-
-      int allRank[7]={ Rankx,Ranky,Rankz,Rankxy,Rankxz,Rankyz,Rankxyz};
-      int allTag[7];
-      getAllTag(allRank,allTag);
-      int numberproccessused=0;
-      int numberpro=comm->getNumberOfProcesses();
-      int *mainproccess=new int[numberpro] ; 
-      sendMaxtagToAllProccess(allRank,allTag,numberpro,numberproccessused,mainproccess);
-
-      //{0=xp000, 1=ix2ph,  2=ix3ph,3=x1,4=x2,5=x3,6=Xw,7=Yw,8=Zw,9=A,10=B,11=C,12=D,
-      //13=normalDis,14=di,15=dj,16=dk,17=cofWeightx,18=cofWeighty,19=cofWeightz,,20=dx,21=omega,22=level,23=disx,24=dir  };
-      const int sizeinput=25;
-      double input [7][sizeinput]=
-      {{xp000, ix2ph,  ix3ph,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disx  ,dirx  }
-      ,{ix1ph, yp000,  ix3ph,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disy  ,diry  }
-      ,{ix1ph, ix2ph,  zp000,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disz  ,dirz  }
-      ,{xp000, yp000,  ix3ph,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disxy ,dirxy }
-      ,{xp000, ix2ph,  zp000,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disxz ,dirxz }
-      ,{ix1ph, yp000,  zp000,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disyz ,diryz }
-      ,{xp000, yp000,  zp000,x1,x2,x3,Xw,Yw,Zw,A,B,C,D,normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,dx,omega,level,disxyz,dirxyz}};
-
-      double AllCell[7][8*27];
-      int index;
-      SendAndReceiveData(input,AllCell,allRank,allTag);
-
-      double dis[7]={input[0][23],input[1][23],input[2][23],input[3][23],input[4][23],input[5][23],input[6][23]};                                                                  
-      rearangedDouble(dis);
-      UbTupleInt3 blockIndexes;
-
-      getAfterCompare(dis,input,AllCell,xp000, yp000,zp000,Xw,Yw,Zw,cofWeightx,cofWeighty,cofWeightz,dx,omega,iCell);
-
-      double x1LB, x2LB, x3LB;
-      double offsetX1RW000 = (x1 - xp000);
-      double offsetX2RW000 = (x2 - yp000);
-      double offsetX3RW000 = (x3 - zp000);
-
-      x1LB = offsetX1RW000 / dx;
-      x2LB = offsetX2RW000 / dx;
-      x3LB = offsetX3RW000 / dx;
-      x1LB -= 0.5;
-      x2LB -= 0.5;
-      x3LB -= 0.5;
-      // outICell(iCell);
-      //iProcessor->interpolate8to1WithVelocity(iCell, f, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3);
-      iHelper->interpolate8to1WithVelocityWithShearStress(iCell, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz);	    
-      addCorrection(vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz,dx,iCell,Xw, Yw, Zw, omega,cofWeightx,cofWeighty,cofWeightz,ii, x1LB, x2LB, x3LB,di,dj,dk);
-      tau[0]=tauxx;
-      tau[1]=tauyy;
-      tau[2]=tauzz;
-      tau[3]=tauxy;
-      tau[4]=tauxz;
-      tau[5]=tauyz;
-      // if (particleHasMass) {   CalcVelParticle(dx,vx1,vx2,vx3,vx1old,vx2old,vx3old,vx1oldf,vx2oldf,vx3oldf);}
-      if (particleHasMass) {   CalcVelParticle2(dx,vx1,vx2,vx3,vx1old,vx2old,vx3old,vx1oldf,vx2oldf,vx3oldf);}
-      //heuns method
-      x1 = (x1old) + 1.0/2.0*(vx1 + vx1old)*conv->getFactorTimeLbToW(dx);
-      x2 = (x2old) + 1.0/2.0*(vx2 + vx2old)*conv->getFactorTimeLbToW(dx);
-      x3 = (x3old) + 1.0/2.0*(vx3 + vx3old)*conv->getFactorTimeLbToW(dx);
-      collWall(A,B,C,D,x1,x2,x3,x1old,x2old,x3old,dx,vx1,vx2,vx3,ii);
-      vx1old = vx1;
-      vx2old = vx2;
-      vx3old = vx3;
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-bool PathLineCoProcessor::checkNodes( Block3DPtr block)
-{
-   bool result = true;
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-   D3Q27BoundaryConditionPtr bcPtr;
-
-   double x1_ch = x1;// + vx1old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x2_ch = x2;// + vx2old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x3_ch = x3;// + vx3old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-
-   int nx1 = static_cast<int>(bcArray.getNX1());
-   int nx2 = static_cast<int>(bcArray.getNX2());
-   int nx3 = static_cast<int>(bcArray.getNX3());
-
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, x1_ch, x2_ch, x3_ch);
-
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-   bool outlet=false;
-
-   for (int xx3 = ix3; xx3 <= ix3 + 1 && ix3 + 1 < nx3; xx3++)
-      for(int xx2 = ix2; xx2 <= ix2 + 1 && ix2 + 1 < nx2; xx2++)
-         for(int xx1 = ix1; xx1 <= ix1 + 1 && ix1 + 1 < nx1; xx1++)
-         {
-            bcPtr=bcArray.getBC(xx1,xx2,xx3);
-            for(int fdir=D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
-            {
-               if ( bcPtr != NULL)
-               {
-                  if (bcPtr->hasDensityBoundaryFlag(fdir))
-                  {	
-                     if(outlet)break; 
-                     outlet=true;
-                     break;
-                  }
-               }
-            }
-            result = result && !bcArray.isUndefined(xx1, xx2, xx3) &&  !outlet;
-         }
-
-         return result;
-
-}
-//////////////////////////////////////////////////////////////////////////
-bool PathLineCoProcessor::checkNodes2( Block3DPtr block,double x11,double x22,double x33)
-{
-   bool result = true;
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-   D3Q27BoundaryConditionPtr bcPtr;
-
-   double x1_ch = x11;// + vx1old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x2_ch = x22;// + vx2old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x3_ch = x33;// + vx3old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-
-   int nx1 = static_cast<int>(bcArray.getNX1());
-   int nx2 = static_cast<int>(bcArray.getNX2());
-   int nx3 = static_cast<int>(bcArray.getNX3());
-
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, x1_ch, x2_ch, x3_ch);
-
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-   bool outlet=false;
-
-   for (int xx3 = ix3; xx3 <= ix3 + 1 && ix3 + 1 < nx3; xx3++)
-      for(int xx2 = ix2; xx2 <= ix2 + 1 && ix2 + 1 < nx2; xx2++)
-         for(int xx1 = ix1; xx1 <= ix1 + 1 && ix1 + 1 < nx1; xx1++)
-         {
-            bcPtr=bcArray.getBC(xx1,xx2,xx3);
-            for(int fdir=D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
-            {
-               if ( bcPtr != NULL)
-               {
-                  if (bcPtr->hasDensityBoundaryFlag(fdir))
-                  {	
-                     if(outlet)break; 
-                     outlet=true;
-                     break;
-                  }
-               }
-            }
-            result = result && !bcArray.isUndefined(xx1, xx2, xx3) &&  !outlet;
-         }
-
-         return result;
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::outICell(D3Q27ICell& iCell)
-{
-   std::ofstream ostr;
-   string fname = path+"_iCell";
-   ostr.open(fname.c_str(), std::ios_base::out);
-   if(!ostr)
-   { 
-      ostr.clear();
-      string path = UbSystem::getPathFromString(fname);
-      if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out);}
-      if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname);
-   }
-   ostr << "step = "<< stepcheck << endl;
-   for (int i = 0; i < 27; i++)
-   {
-      ostr << "iCell.BNE[" << i <<"] = "<< iCell.BNE[i] << "\t"<<"iCell.BNW[" << i <<"] = "<< iCell.BNW[i] << "\t"<<"iCell.BSE[" << i <<"] = "<< iCell.BSE[i]<<"\t"<<"iCell.BSW[" << i <<"] = "<< iCell.BSW[i]<<"\t"<<"iCell.TNE[" << i <<"] = "<< iCell.TNE[i] << "\t"<<"iCell.TNW[" << i <<"] = "<< iCell.TNW[i] << "\t"<<"iCell.TSE[" << i <<"] = "<< iCell.TSE[i]<<"\t"<<"iCell.TSW[" << i <<"] = "<< iCell.TSW[i]<<"\t"<< endl;
-
-   }
-   ostr.close();
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::updateDistributedValues()
-{
-   int size;	
-   MPI_Status status; 
-   MPI_Comm_size(MPI_COMM_WORLD,&size);	
-   const int row=12;
-   double values[row];//
-   if (this->root == this->rank)
-   {
-      values[0]=x1;
-      values[1]=x2;
-      values[2]=x3;
-      values[3]=x1old;
-      values[4]=x2old;
-      values[5]=x3old;
-      values[6]=vx1old;
-      values[7]=vx2old;
-      values[8]=vx3old;
-      values[9]=vx1oldf;
-      values[10]=vx2oldf;
-      values[11]=vx3oldf;
-      for (int i=0;i<size;i++)
-      {
-         if (i!=this->root)
-         {
-            MPI_Send(&values,row, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD);
-         }	
-      }
-   }
-   else{ 
-      MPI_Recv(&values,row, MPI_DOUBLE_PRECISION,this->root,this->rank,MPI_COMM_WORLD,&status);
-      x1     = values[0];
-      x2     = values[1];
-      x3     = values[2];
-      x1old  = values[3];
-      x2old  = values[4];
-      x3old  = values[5];
-      vx1old = values[6];
-      vx2old = values[7];
-      vx3old = values[8];
-      vx1oldf =values[9];
-      vx2oldf=values[10];
-      vx3oldf=values[11];
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::findPlane(int ix1,int ix2,int ix3,Grid3DPtr grid,Block3DPtr block,double &A,double &B,double &C,double &D,double &ii)
-{
-   double x1plane=0.0,y1plane=0.0,z1plane=0.0;
-   double x2plane=0.0,y2plane=0.0,z2plane=0.0;
-   double x3plane=0.0,y3plane=0.0,z3plane=0.0;
-   D3Q27BoundaryConditionPtr bcPtr;
-   double dx = grid->getDeltaX(block);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-   for (int k = ix3; k <= ix3 + 1; k++){
-      for(int j = ix2; j <= ix2 + 1; j++){
-         for(int i = ix1; i <= ix1 + 1; i++)
-         {
-            UbTupleDouble3 pointplane1 =  grid->getNodeCoordinates(block,  i,	  j,	 k);
-
-            double   iph=val<1>(pointplane1);
-            double   jph=val<2>(pointplane1);
-            double   kph=val<3>(pointplane1);
-
-            if(!bcArray.isSolid(i, j, k))
-            {
-               bcPtr=bcArray.getBC(i,j,k);
-               if(bcPtr)
-               {	 
-                  for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-                  {
-                     if( ii<=2)
-                     {
-                        LBMReal q = bcPtr->getQ(fdir);
-                        if (q!=999.00000)
-                        {
-
-                           if     ( fdir==D3Q27System::E ) 
-                           {
-                              if (i+q<=ix1+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph+q*dx;	  y1plane=jph;	 z1plane=kph;    	ii++;	} 
-                                 else if (ii==1) 	{	x2plane=iph+q*dx;     y2plane=jph;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if(ii==2) 	    {   x3plane=iph+q*dx;     y3plane=jph;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::W ) 
-                           {
-                              if (i-q>=ix1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph-q*dx;	  y1plane=jph;	 z1plane=kph;    	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph-q*dx;    y2plane=jph;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if(ii==2) 	    {   x3plane=iph-q*dx;    y3plane=jph;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::N ) 
-                           {
-                              if(j+q<=ix2+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph+q*dx;	 z1plane=kph; 	    ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph+q*dx;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph+q*dx;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::S ) 
-                           {
-                              if (j-q>=ix2)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph-q*dx;	 z1plane=kph; 	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph-q*dx;	 z2plane=kph;	if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph-q*dx;	 z3plane=kph;   if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-
-                           if     ( fdir==D3Q27System::T ) 
-                           {
-                              if(k+q<=ix3+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph;	 z1plane=kph+q*dx; 	    ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph;	 z2plane=kph+q*dx;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph;	 z3plane=kph+q*dx;      if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::B ) 
-                           {
-                              if (k-q>=ix3)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph;	 z1plane=kph-q*dx; 	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph;	 z2plane=kph-q*dx;	  if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph;	 z3plane=kph-q*dx;     if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-
-                        }
-                     }
-                  }
-
-               }
-
-            }
-         }
-      }
-   }
-
-   A =   y1plane* (z2plane - z3plane) + y2plane*(z3plane - z1plane) + y3plane* (z1plane - z2plane);   
-   B =   z1plane* (x2plane - x3plane) + z2plane*(x3plane - x1plane) + z3plane* (x1plane - x2plane) ;      
-   C =   x1plane* (y2plane - y3plane) + x2plane*(y3plane - y1plane) + x3plane* (y1plane - y2plane) ;       
-   D =-( x1plane*(y2plane*z3plane - y3plane*z2plane)+x2plane*(y3plane*z1plane - y1plane*z3plane) + x3plane* (y1plane* z2plane - y2plane* z1plane));
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::finddisPointToCentercell(double x1,double x2,double x3,double xp000, double yp000, double zp000,double &dis,double &dx,
-                                                          double &deltaT,Block3DPtr &block,int level)
-{	
-   UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000, yp000,  zp000,level);
-   block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   if (!kernel)	  cout<<__FILE__<<" "<<__LINE__<<endl;
-   else
-   {
-      DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-      BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-      if(block && block->isActive())
-      {	     		     
-         deltaT= 1.0/(double)(1<<level);
-         dx = grid->getDeltaX(block);
-         UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block,  xp000, yp000,  zp000);
-         int ix1Se = val<1>(nodeIndexes);
-         int ix2Se = val<2>(nodeIndexes);
-         int ix3Se = val<3>(nodeIndexes);  
-         if     (!iProcessor->iCellHasSolid(bcArray, ix1Se, ix2Se,  ix3Se  ))        
-         {				 
-            UbTupleDouble3 pointCell =  grid->getNodeCoordinates(block,  ix1Se,	  ix2Se,	 ix3Se);	 double   iph=val<1>(pointCell)+dx/2.0;	 double   jph=val<2>(pointCell)+dx/2.0;	 double   kph=val<3>(pointCell)+dx/2.0;
-            dis=sqrt((iph-x1)*(iph-x1)+(jph-x2)*(jph-x2)+(kph-x3)*(kph-x3));
-         }
-      }	 	 	
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessor::finddisPointToCentercell(double x1,double x2,double x3,double xp000, double yp000, double zp000,double &dis,double &dx,
-// double &deltaT,Block3DPtr &block)
-//{
-
-// int minInitLevel = this->grid->getCoarsestInitializedLevel();
-// int maxInitLevel = this->grid->getFinestInitializedLevel();
-// bool goinside=true;
-// Block3DPtr block2;
-// for(int level = minInitLevel; level<=maxInitLevel; level++)
-// {	   
-//	 if (goinside )
-//	 {
-//		 UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000, yp000,  zp000,level);
-//		 block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-//		 LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-//		 if (kernel)
-//		 {
-//			 DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-//			 BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-//			 if(block && block->isActive())
-//			 {	     		     
-//				 if(!checkNodes(block))continue;
-//				 goinside=false;
-//				 deltaT= 1.0/(double)(1<<level);
-//				 dx = grid->getDeltaX(block);
-//				 UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block,  xp000, yp000,  zp000);
-//				 int ix1Se = val<1>(nodeIndexes);
-//				 int ix2Se = val<2>(nodeIndexes);
-//				 int ix3Se = val<3>(nodeIndexes);  
-//				 if     (!iProcessor->iCellHasSolid(bcArray, ix1Se, ix2Se,  ix3Se  ))        
-//				 {				 
-//					 UbTupleDouble3 pointCell =  grid->getNodeCoordinates(block,  ix1Se,	  ix2Se,	 ix3Se);	 double   iph=val<1>(pointCell)+dx/2.0;	 double   jph=val<2>(pointCell)+dx/2.0;	 double   kph=val<3>(pointCell)+dx/2.0;
-//					 dis=sqrt((iph-x1)*(iph-x1)+(jph-x2)*(jph-x2)+(kph-x3)*(kph-x3));
-//					 block2=block;
-//				 }
-//			 }	 	 
-//		 }
-//	 }
-// }
-
-//}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getWallPosition(double input[])
-{ 
-
-   //{0=xp000, 1=ix2ph,  2=ix3ph,3=x1,4=x2,5=x3,6=Xw,7=Yw,8=Zw,9=A,10=B,11=C,12=D,13=normalDis,14=di,15=dj,16=dk,
-   //17=cofWeightx,18=cofWeighty,19=cofWeightz,,20=dx,21=omega,22=nue,23=disx,24=dir  };
-   double dx=input[20];double xp000=input[0];double yp000=input[1];double zp000=input[2];double Xw=input[6];double Yw=input[7];double Zw=input[8];
-   double x1=input[3] ;double x2=input[4] ;double x3=input[5]; double A=input[9];double B=input[10];double C=input[11];double D=input[12];
-   double normalDis=input[13]; double di=input[14];double dj=input[15];double dk=input[16]; double cofWeightx=input[17];double cofWeighty=input[18];
-   double cofWeightz=input[19];int dir=(int)input[24];
-
-   //char dirx,diry,dirz,dirxy,dirxz,diryz,dirxyz;
-   if      (dir==dirx  )  {  Xw=(B*x2+C*x3+D)/(-A); Yw=x2;                 Zw=x3;	         	      cofWeightx=1;  cofWeighty=0;cofWeightz=0;}     
-   else if (dir==diry  )  {  Xw=x1;                 Yw=(A*x1+C*x3+D)/(-B); Zw=x3;		              cofWeightx=0;  cofWeighty=1;cofWeightz=0;}
-   else if (dir==dirz  )  {  Xw=x1;                 Yw=x3;	             Zw=(B*x2+A*x1+D)/(-C);   cofWeightx=0;  cofWeighty=0;cofWeightz=1;    }
-   else if (dir==dirxy )  {  Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3;        		      cofWeightx=1;  cofWeighty=1;cofWeightz=0;}
-   else if (dir==dirxz )  {  Xw=x1-di*normalDis;    Yw=x2;                 Zw=x3-dk*normalDis;	  cofWeightx=1;  cofWeighty=0;cofWeightz=1;    }
-   else if (dir==diryz )  {  Xw=x1;                 Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	  cofWeightx=0;  cofWeighty=1;cofWeightz=1;    }
-   else if (dir==dirxyz)  {  Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	  cofWeightx=1;  cofWeighty=1;cofWeightz=1;    }  
-
-   Xw=(Xw-xp000)/dx-0.5;       
-   Yw=(Yw-yp000)/dx-0.5;       
-   Zw=(Zw-zp000)/dx-0.5; 
-
-   input[6]=Xw;
-   input[7]=Yw;
-   input[8]=Zw;
-   input[17]=cofWeightx;
-   input[18]=cofWeighty;
-   input[19]=cofWeightz;
-
-}
-////////////////////////////////////////////////////////////////////////////
-// void D3Q27PathLinePostprocessor::getWallPosition(double dixmax,double disx,double disy,double disz,double disxy,double disxz,double disyz,double disxyz
-//  ,double &Xw,double &Yw,double &Zw,double x1,double x2,double x3,double A,double B,double C,double D,double normalDis,double di,double dj,double dk,
-//  double &cofWeightx,double &cofWeighty,double &cofWeightz)
-// {
-//  if      (dixmax==disx)  {  Xw=(B*x2+C*x3+D)/(-A); Yw=x2;                 Zw=x3;	         	  cofWeightx=1;  cofWeighty=0;cofWeightz=0;}     
-//  else if (dixmax==disy)  {  Xw=x1;                 Yw=(A*x1+C*x3+D)/(-B); Zw=x3;		          cofWeightx=0;  cofWeighty=1;cofWeightz=0;}
-//  else if (dixmax==disz)  {  Xw=x1;                 Yw=x3;	               Zw=(B*x2+A*x1+D)/(-C); cofWeightx=0;  cofWeighty=0;cofWeightz=1;}
-//  else if (dixmax==disxy) {  Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3;        		  cofWeightx=1;  cofWeighty=1;cofWeightz=0;}
-//  else if (dixmax==disxz) {  Xw=x1-di*normalDis;    Yw=x2;                 Zw=x3-dk*normalDis;	  cofWeightx=1;  cofWeighty=0;cofWeightz=1;}
-//  else if (dixmax==disyz) {  Xw=x1;                 Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	  cofWeightx=0;  cofWeighty=1;cofWeightz=1;}
-//  else if (dixmax==disxyz){  Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	  cofWeightx=1;  cofWeighty=1;cofWeightz=1;}
-// }
-////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::findInitialCell(double s,double di,double dj,double dk,double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000)
-{
-   if (s*di>0)         {            xp000=ix1ph+dx;    }
-   else if(s*di<0)     {            xp000=ix1ph-dx;    }
-   else                {            xp000=ix1ph;      }
-   if (s*dj>0)         {            yp000=ix2ph+dx;    }
-   else if(s*dj<0)     {            yp000=ix2ph-dx;    }
-   else                {            yp000=ix2ph;      }
-   if (s*dk>0)         {            zp000=ix3ph+dx;    }
-   else if(s*dk<0)     {            zp000=ix3ph-dx;    }
-   else                {            zp000=ix3ph;      }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::rearangedDouble( double dis[7])
-{
-   double item;
-   for (int i=6;i>0;i--){   
-      for(int j=0;j<i;j++){ 
-         if (dis[j]>dis[j+1])
-         {	  
-            item=dis[j];  
-            dis[j]=dis[j+1]; 
-            dis[j+1]=item;					   
-         }
-      }
-   } 
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::rearangeInt( int dis[7])
-{
-   double item;
-   for (int i=6;i>0;i--){   
-      for(int j=0;j<i;j++){ 
-         if (dis[j]>dis[j+1])
-         {	  
-            item=dis[j];  
-            dis[j]=dis[j+1]; 
-            dis[j+1]=(int)item;					   
-         }
-      }
-   } 
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::addCorrection(double &vx1,double &vx2,double &vx3,double &tauxx,double &tauyy,double &tauzz,double &tauxy,double &tauxz,double &tauyz,
-                                               double dx,D3Q27ICell iCell,double Xw, double Yw, double Zw,double  omega,double cofWeightx,double cofWeighty,double cofWeightz,double ii,double x1LB,double x2LB,double x3LB,double di,double dj,double dk)
-{
-   LBMReal f[D3Q27System::ENDF+1];
-   double  Udif,Vdif,Wdif;	  
-   iHelper->interpolate8to1WithVelocity(iCell, Xw, Yw, Zw, omega,Udif,Vdif,Wdif);
-   double Ucx,Ucy,Ucz;
-   double Vcx,Vcy,Vcz;
-   double Wcx,Wcy,Wcz;
-
-   double dxUcx,dyUcy,dzUcz;
-   double dxVcx,dyVcy,dzVcz;
-   double dxWcx,dyWcy,dzWcz;
-   //double di,dj,dk;
-
-   if (cofWeightx==0){di=0;}
-   if (cofWeighty==0){dj=0;}
-   if (cofWeightz==0){dk=0;}
-
-   double weightx=(di*di)/(di*di+dj*dj+dk*dk);
-   double weighty=(dj*dj)/(di*di+dj*dj+dk*dk);
-   double weightz=(dk*dk)/(di*di+dj*dj+dk*dk);
-   // /* if (Xw<0.5||Xw>-0.5){weightx=0;}
-   //  if (Yw<0.5||Yw>-0.5){weighty=0;}
-   //  if (Zw<0.5||Zw>-0.5){weightz=0;}
-   //*/
-   if (weightx==0){Ucx=0;Vcx=0;Wcx=0;dxUcx=0;dxVcx=0;dxWcx=0;}else{
-      Ucx=-Udif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);Vcx=-Vdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);Wcx=-Wdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);
-      dxUcx=-Udif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);dxVcx=-Vdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);dxWcx=-Wdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);
-   }
-   if (weighty==0){Ucy=0;Vcy=0;Wcy=0;dyUcy=0;dyVcy=0;dyWcy=0;}else{
-      Ucy=-Udif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);Vcy=-Vdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);Wcy=-Wdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);
-      dyUcy=-Udif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);dyVcy=-Vdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);dyWcy=-Wdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);
-   }
-   if (weightz==0){Ucz=0;Vcz=0;Wcz=0;dzUcz=0;dzVcz=0;dzWcz=0;}else{
-      Ucz=-Udif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);Vcz=-Vdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);Wcz=-Wdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);
-      dzUcz=-Udif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);dzVcz=-Vdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);dzWcz=-Wdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);
-   }
-
-   double Ucor=Ucx+Ucy+Ucz;
-   double Vcor=Vcx+Vcy+Vcz;
-   double Wcor=Wcx+Wcy+Wcz;
-
-   double tauxxC=dxUcx;
-   double tauyyC=dyVcy;
-   double tauzzC=dzWcz;
-   double tauxyC=0.5*(dyUcy+dxVcx);
-   double tauxzC=0.5*(dzUcz+dxWcx);
-   double tauyzC=0.5*(dzVcz+dyWcy);
-
-   if (ii!=3) 
-   {
-      //std::cout<<"there are not 3point for making plane"<<endl<<"Ucor="<<Ucor<<endl<<"vx1="<<vx1;
-      Ucor  =0.0;
-      Vcor  =0.0;
-      Wcor  =0.0;
-      tauxxC=0.0;
-      tauyyC=0.0;
-      tauzzC=0.0;
-      tauxyC=0.0;
-      tauxzC=0.0;
-      tauyzC=0.0;
-   }
-
-   vx1+=Ucor;
-   vx2+=Vcor;
-   vx3+=Wcor;
-   tauxx+=tauxxC;
-   tauyy+=tauyyC;
-   tauzz+=tauzzC;
-   tauxy+=tauxyC;
-   tauxz+=tauxzC;
-   tauyz+=tauyzC;
-
-   vx1 = vx1 *  conv->getFactorVelocityLbToW();
-   vx2 = vx2 *  conv->getFactorVelocityLbToW();
-   vx3 = vx3 *  conv->getFactorVelocityLbToW();
-   tauxx=tauxx/dx;
-   tauyy=tauyy/dx;
-   tauzz=tauzz/dx;
-   tauxy=tauxy/dx;
-   tauxz=tauxz/dx;
-   tauyz=tauyz/dx;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::collWall(double A,double B,double C,double D,double &x1,double &x2,double &x3,double x1old,double x2old,double x3old,double dx,double &vx1,double &vx2,double &vx3,double ii)
-{
-   if (particleHasMass)
-   {
-      double s = A*x1 + B*x2 + C*x3 + D;//The sign of s = Ax + By + Cz + D determines which side the point (x,y,z) lies with respect to the plane. If s > 0 then the point lies on the same side as the normal (A,B,C). If s < 0 then it lies on the opposite side, if s = 0 then the point (x,y,z) lies on the plane.
-      if (s>0){s=1;} else if (s<0){s=-1;}else {s=0;}
-      double normalDis=((A*x1 + B*x2 + C*x3 + D)/sqrt(A*A+B*B+C*C));///distance point to plane xp-Xw=distance
-      double di=A/sqrt(A*A+B*B+C*C);      double dj=B/sqrt(A*A+B*B+C*C);       double dk=C/sqrt(A*A+B*B+C*C);
-      A*=s;B*=s;C*=s;
-      if (abs(normalDis)<0.05*dx)
-      {
-         if (ii==3)
-         {
-            ///reflection without e factor
-            /*  double vn=(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double  vx1L=vx1-2*vn*A;
-            double  vx2L=vx2-2*vn*B;
-            double  vx3L=vx3-2*vn*C;*/
-            double vnx=A*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double vny=B*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double vnz=C*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            ////do collision  
-            double CollitionFactor_n=0.01;
-            double CollitionFactor_bt=0.01;
-            vnx=-1*CollitionFactor_n*vnx;
-            vny=-1*CollitionFactor_n*vny;
-            vnz=-1*CollitionFactor_n*vnz;
-            double vbtx=(B*B*vx1 + C*C*vx1 - A*B*vx2 - A*C*vx3)/(A*A+B*B+C*C);
-            double vbty=(-(A*B*vx1) + A*A*vx2 + C*C*vx2 - B*C*vx3)/(A*A+B*B+C*C);
-            double vbtz=(-(A*C*vx1) - B*C*vx2 + A*A*vx3 + B*B*vx3)/(A*A+B*B+C*C);
-            vbtx=vbtx*CollitionFactor_bt;
-            vbty=vbty*CollitionFactor_bt;
-            vbtz=vbtz*CollitionFactor_bt;
-            vx1=vnx+vbtx;
-            vx2=vny+vbty;
-            vx3=vnz+vbtz;
-
-            x1 = (x1old);
-            x2 = (x2old);
-            x3 = (x3old);
-         } 
-         else   std::cout<<"there is no plane to reflect";
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::CalcVelParticle(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,
-                                                 double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf)
-{
-   double signDragx,signDragy,signDragz;
-   double dragCoff=1.0;
-   if     (vx1old>=vx1oldf)    {  signDragx=-1.0;   } 
-   else if(vx1old<vx1oldf)     {  signDragx= 1.0;    }
-   if     (vx2old>=vx2oldf)    {  signDragy=-1.0;   } 
-   else if(vx2old< vx2oldf)    {  signDragy= 1.0;    }
-   if     (vx3old>=vx3oldf)    {  signDragz=-1.0;   } 
-   else if(vx3old< vx3oldf)    {  signDragz= 1.0;    }
-   double vx1p=vx1old+signDragx*(vx1old-vx1oldf)*(vx1old-vx1oldf)*conv->getFactorTimeLbToW(dx);
-   double vx2p=vx2old+signDragy*(vx2old-vx2oldf)*(vx2old-vx2oldf)*conv->getFactorTimeLbToW(dx);
-   double vx3p=vx3old+signDragz*(vx3old-vx3oldf)*(vx3old-vx3oldf)*conv->getFactorTimeLbToW(dx);   
-
-   double signDragNextx,signDragNexty,signDragNextz;
-   if     (vx1p>=vx1)    {  signDragNextx=-1.0;   } 
-   else if(vx1p< vx1)    {  signDragNextx= 1.0;    }
-   if     (vx2p>=vx2)    {  signDragNexty=-1.0;   } 
-   else if(vx2p< vx2)    {  signDragNexty= 1.0;    }
-   if     (vx3p>=vx3)    {  signDragNextz=-1.0;   } 
-   else if(vx3p< vx3)    {  signDragNextz= 1.0;    }
-   ////////////////////velocity of particle////////////////////////////////////////////////////// 
-   double velx1oldf=vx1;
-   double velx2oldf=vx2;
-   double velx3oldf=vx3;
-
-   vx1=vx1old+1.0/2.0*( signDragNextx*(vx1p-vx1)*(vx1p-vx1)+signDragx*(vx1old-vx1oldf)*(vx1old-vx1oldf) )*conv->getFactorTimeLbToW(dx);
-   vx2=vx2old+1.0/2.0*( signDragNexty*(vx2p-vx2)*(vx2p-vx2)+signDragy*(vx2old-vx2oldf)*(vx2old-vx2oldf) )*conv->getFactorTimeLbToW(dx);
-   vx3=vx3old+1.0/2.0*( signDragNextz*(vx3p-vx3)*(vx3p-vx3)+signDragz*(vx3old-vx3oldf)*(vx3old-vx3oldf) )*conv->getFactorTimeLbToW(dx);
-
-   vx1oldf=velx1oldf;
-   vx2oldf=velx2oldf;
-   vx3oldf=velx3oldf;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::CalcVelParticle2(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,
-                                                  double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf)
-{
-   double signDragx,signDragy,signDragz;
-
-   LBMReal muRE = 1.002*1e-3;//m2/s
-   double mass=2.3*1e-17;// kg
-   double Diameter=600*1e-9;//m
-   double deltatime=conv->getFactorTimeLbToW(dx)*0.001;
-   double Coff=3*PI*Diameter*muRE*deltatime/mass;
-   double exCoff=exp(-Coff);
-
-
-   //////////////////////velocity of particle////////////////////////////////////////////////////// 
-   double velx1oldf=vx1;
-   double velx2oldf=vx2;
-   double velx3oldf=vx3;
-
-   //air
-
-   vx1=vx1old*exCoff+(velx1oldf-(velx1oldf)*exCoff);
-   vx2=vx2old*exCoff+(velx2oldf-(velx2oldf)*exCoff);
-   vx3=vx3old*exCoff+(velx3oldf-(velx3oldf)*exCoff);
-
-
-   vx1oldf=velx1oldf;
-   vx2oldf=velx2oldf;
-   vx3oldf=velx3oldf;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getRankWithPosition(Grid3DPtr grid,double xp000, double yp000, double zp000,int &RankNeigber,int level)
-{
-   int minInitLevel = this->grid->getCoarsestInitializedLevel();
-   int maxInitLevel = this->grid->getFinestInitializedLevel();
-   bool goinside=true;
-
-   LBMKernelETD3Q27Ptr kernel;
-   DistributionArray3DPtr distributions;
-   BCArray3D<D3Q27BoundaryCondition> bcArray;
-   Block3DPtr block;
-
-   //for(int level = minInitLevel; level<=maxInitLevel; level++)
-   {	   
-      UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000,yp000, zp000,level);
-      block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-      //LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-      // if(block )
-      {
-         if(block->isActive())
-         {	     		     
-            // if(!checkNodes2(block,xp000,yp000,zp000))continue;
-            RankNeigber= block->getRank();   
-            //break;
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getRankWithPosition2(Grid3DPtr grid,double xp000, double yp000, double zp000,int &RankNeigber)
-{
-   int minInitLevel = this->grid->getCoarsestInitializedLevel();
-   int maxInitLevel = this->grid->getFinestInitializedLevel();
-   bool goinside=true;
-
-   LBMKernelETD3Q27Ptr kernel;
-   DistributionArray3DPtr distributions;
-   BCArray3D<D3Q27BoundaryCondition> bcArray;
-   Block3DPtr block;
-
-   for(int level = minInitLevel; level<=maxInitLevel; level++)
-   {	   
-      UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000,yp000, zp000,level);
-      block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-      LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-      // if(kernel )
-      {
-         if(block->isActive())
-         {	     		     
-            // if(!checkNodes2(block,xp000,yp000,zp000))continue;
-            RankNeigber= block->getRank();   
-            break;
-         }
-      }
-   }
-}
-
-
-////////////////////////////////////////////////////////////////////////// 
-void PathLineCoProcessor::getAllTag(int allRank[7],int allTag[7])
-{
-
-   for (int i=0;i<7;i++)
-   {
-      int tagme=0;
-      for (int j=0;j<=i;j++)
-      {
-         if(allRank[j]==allRank[i])
-         {
-            tagme++;
-         }
-         allTag[i]=tagme;
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getAllInfoForCompare(double input[],double *Vect)
-{
-   //{0=xp000, 1=ix2ph,  2=ix3ph,3=x1,4=x2,5=x3,6=Xw,7=Yw,8=Zw,9=A,10=B,11=C,12=D,13=normalDis,14=di,15=dj,16=dk,
-   //17=cofWeightx,18=cofWeighty,19=cofWeightz,,20=dx,21=omega,22=level,23=disx,24=dir  };
-
-   double deltaT;
-   Block3DPtr block;
-   finddisPointToCentercell(input[3],input[4],input[5],input[0],input[1],input[2],input[23],input[20],deltaT,block,(int)input[22]);//get double &dis,double &dx,double &deltaT
-   getWallPosition(input);	 //get wall position,Xw,Yw,Zw and cofWeightx,cofWeighty,cofWeightz	   
-
-   double xp000=input[0];
-   double yp000=input[1];
-   double zp000=input[2]; 
-   // double nue=input[22];
-   LBMReal omega = LBMSystem::calcCollisionFactor(nue,block->getLevel());
-   input[21]=omega;
-   UbTupleInt3 nodeIndexes000 = grid->getNodeIndexes(block,  xp000, yp000,  zp000);
-   double xp000id = val<1>(nodeIndexes000);
-   double yp000id = val<2>(nodeIndexes000);
-   double zp000id = val<3>(nodeIndexes000);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   if (kernel)
-   {
-      DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-      D3Q27ICell iCell;
-      iProcessor->readICell(distributions, iCell, (int)xp000id, (int)yp000id, (int)zp000id);
-      getVectfromiCell(iCell,Vect);
-   } 
-   else
-   {
-      cout<<__FILE__<<" "<<__LINE__<<endl;
-      for (int k=0;k<8*27;k++)       {  Vect[k]=999.0;   	  }
-   }
-
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::sendMaxtagToAllProccess(int allRank[],int allTag[],int numberpro,int &numberproccessused,int *mainproccess)
-{
-
-   int allRank_[7];
-   for (int i=0;i<7;i++)
-   {
-      allRank_[i]=allRank[i];
-   }
-   rearangeInt(allRank_);
-
-   for (int i=0;i<7;i++)
-   {
-      int maxtag_=0;
-      if (i==6)
-      {
-         if (allRank_[i]!=this->root)
-         {			   
-            for (int k=0;k<=i;k++)
-            {
-               if (allRank_[i]==allRank_[k])
-               {
-                  maxtag_++;
-               }
-            }
-            MPI_Send(&maxtag_,1, MPI_INT,allRank_[i],i,MPI_COMM_WORLD);
-         }
-         numberproccessused++;
-         mainproccess[numberproccessused-1]=allRank_[i];
-      } 
-      else 
-      {		
-         if(allRank_[i]!=allRank_[i+1])			   
-         {				   
-            if (allRank_[i]!=this->root)
-            { 
-               for (int k=0;k<=i;k++)
-               {
-                  if (allRank_[i]==allRank_[k])
-                  {
-                     maxtag_++;
-                  }
-               }
-               MPI_Send(&maxtag_,1, MPI_INT,allRank_[i],i,MPI_COMM_WORLD);  
-            }
-            numberproccessused++;
-            mainproccess[numberproccessused-1]=allRank_[i];
-         }   
-      }
-   }
-   for (int i=0;i<numberpro;i++)
-   {
-      bool goinside=true;
-      for (int j=0;j<numberproccessused;j++)
-      {
-         if (i==mainproccess[j]){goinside=false;break;}
-      }
-      if(goinside)
-      {
-         int maxtag_=0;
-         if (i!=this->root)
-         {
-            MPI_Send(&maxtag_,1, MPI_INT,i,i,MPI_COMM_WORLD);
-         }
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getAllRankWithAllPositions(double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,
-                                                            int &Rankx,int &Ranky,int &Rankz,int &Rankxy,int &Rankxz,int &Rankyz,int &Rankxyz,int level)
-{
-
-   getRankWithPosition(grid,xp000, ix2ph,  ix3ph,Rankx  ,level);
-   getRankWithPosition(grid,ix1ph, yp000,  ix3ph,Ranky  ,level);
-   getRankWithPosition(grid,ix1ph, ix2ph,  zp000,Rankz  ,level);
-   getRankWithPosition(grid,xp000, yp000,  ix3ph,Rankxy ,level);
-   getRankWithPosition(grid,xp000, ix2ph,  zp000,Rankxz ,level);
-   getRankWithPosition(grid,ix1ph, yp000,  zp000,Rankyz ,level);
-   getRankWithPosition(grid,xp000, yp000,  zp000,Rankxyz,level);  	
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getAllRankWithAllPositions2(double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,
-                                                             int &Rankx,int &Ranky,int &Rankz,int &Rankxy,int &Rankxz,int &Rankyz,int &Rankxyz)
-{
-
-   getRankWithPosition2(grid,xp000, ix2ph,  ix3ph,Rankx  );
-   getRankWithPosition2(grid,ix1ph, yp000,  ix3ph,Ranky  );
-   getRankWithPosition2(grid,ix1ph, ix2ph,  zp000,Rankz  );
-   getRankWithPosition2(grid,xp000, yp000,  ix3ph,Rankxy );
-   getRankWithPosition2(grid,xp000, ix2ph,  zp000,Rankxz );
-   getRankWithPosition2(grid,ix1ph, yp000,  zp000,Rankyz );
-   getRankWithPosition2(grid,xp000, yp000,  zp000,Rankxyz);  	
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getVectfromiCell(D3Q27ICell iCell,double *Vect)
-{
-
-   for (int i=0*27;i<1*27;i++)         {   Vect[i]=iCell.TSW[i-0*27];   }
-   for (int i=1*27;i<2*27;i++)		   {   Vect[i]=iCell.TNW[i-1*27];   }
-   for (int i=2*27;i<3*27;i++)		   {   Vect[i]=iCell.TNE[i-2*27];   }
-   for (int i=3*27;i<4*27;i++)         {   Vect[i]=iCell.TSE[i-3*27];   }
-   for (int i=4*27;i<5*27;i++)		   {   Vect[i]=iCell.BSW[i-4*27];   }
-   for (int i=5*27;i<6*27;i++)		   {   Vect[i]=iCell.BNW[i-5*27];   }
-   for (int i=6*27;i<7*27;i++)		   {   Vect[i]=iCell.BNE[i-6*27];   }
-   for (int i=7*27;i<8*27;i++)		   {   Vect[i]=iCell.BSE[i-7*27];   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getiCellfromVect(D3Q27ICell &iCell,double *Vect)
-{
-
-   for (int i=0*27;i<1*27;i++)         {   iCell.TSW[i-0*27]=Vect[i];   }
-   for (int i=1*27;i<2*27;i++)		   {   iCell.TNW[i-1*27]=Vect[i];   }
-   for (int i=2*27;i<3*27;i++)		   {   iCell.TNE[i-2*27]=Vect[i];   }
-   for (int i=3*27;i<4*27;i++)         {   iCell.TSE[i-3*27]=Vect[i];   }
-   for (int i=4*27;i<5*27;i++)		   {   iCell.BSW[i-4*27]=Vect[i];   }
-   for (int i=5*27;i<6*27;i++)		   {   iCell.BNW[i-5*27]=Vect[i];   }
-   for (int i=6*27;i<7*27;i++)		   {   iCell.BNE[i-6*27]=Vect[i];   }
-   for (int i=7*27;i<8*27;i++)		   {   iCell.BSE[i-7*27]=Vect[i];   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::getAfterCompare(double dis[],double input [7][25],double AllCell[7][8*27],double &xp000,double &yp000,double &zp000,
-                                                 double &Xw,double &Yw,double &Zw,double &cofWeightx,double &cofWeighty,double &cofWeightz,double &dx,double &omega,D3Q27ICell &iCell)
-{
-
-   double *Cell=(double*)malloc(8*27*sizeof(double));   	   
-   bool goinside=true;
-
-   for (int i=0;i<7;i++)
-   {	
-      double dist=dis[i];
-      if(goinside )
-      {  //17=cofWeightx,18=cofWeighty,19=cofWeightz,,20=dx,21=omega
-         if      (dist==input[0][23]){  Xw=input[0][6];	Yw=input[0][7]; Zw=input[0][8]; xp000=input[0][0];	yp000=input[0][1]; zp000=input[0][2];  cofWeightx=input[0][17];	cofWeighty=input[0][18]; cofWeightz=input[0][19]; dx=input[0][20];	omega=input[0][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[0][i];} } //get suitable block from suitable cell
-         else if (dist==input[1][23]){  Xw=input[1][6];	Yw=input[1][7]; Zw=input[1][8]; xp000=input[1][0];	yp000=input[1][1]; zp000=input[1][2];  cofWeightx=input[1][17];	cofWeighty=input[1][18]; cofWeightz=input[1][19]; dx=input[1][20];	omega=input[1][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[1][i];} }
-         else if (dist==input[2][23]){  Xw=input[2][6];	Yw=input[2][7]; Zw=input[2][8]; xp000=input[2][0];	yp000=input[2][1]; zp000=input[2][2];  cofWeightx=input[2][17];	cofWeighty=input[2][18]; cofWeightz=input[2][19]; dx=input[2][20];	omega=input[2][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[2][i];} }
-         else if (dist==input[3][23]){  Xw=input[3][6];   Yw=input[3][7]; Zw=input[3][8]; xp000=input[3][0];  yp000=input[3][1]; zp000=input[3][2];  cofWeightx=input[3][17]; cofWeighty=input[3][18]; cofWeightz=input[3][19]; dx=input[3][20];  omega=input[3][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[3][i];} }
-         else if (dist==input[4][23]){  Xw=input[4][6];	Yw=input[4][7]; Zw=input[4][8]; xp000=input[4][0];	yp000=input[4][1]; zp000=input[4][2];  cofWeightx=input[4][17];	cofWeighty=input[4][18]; cofWeightz=input[4][19]; dx=input[4][20];	omega=input[4][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[4][i];} }
-         else if (dist==input[5][23]){  Xw=input[5][6];	Yw=input[5][7]; Zw=input[5][8]; xp000=input[5][0];	yp000=input[5][1]; zp000=input[5][2];  cofWeightx=input[5][17];	cofWeighty=input[5][18]; cofWeightz=input[5][19]; dx=input[5][20];	omega=input[5][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[5][i];} }
-         else if (dist==input[6][23]){  Xw=input[6][6];	Yw=input[6][7]; Zw=input[6][8]; xp000=input[6][0];	yp000=input[6][1]; zp000=input[6][2];  cofWeightx=input[6][17];	cofWeighty=input[6][18]; cofWeightz=input[6][19]; dx=input[6][20];	omega=input[6][21]; for (int i=0;i<8*27;i++){Cell[i]=AllCell[6][i];} }
-         if (Xw<2.5&&Xw>-2.5&&Yw<2.50&&Yw>-2.50&&Zw<2.50&&Zw>-2.50){goinside=false;}      
-      }
-   }
-
-   getiCellfromVect(iCell,Cell);
-   free (Cell);
-}
-
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::SendAndReceiveData(double input[7][25],double AllCell[7][8*27],int allRank[7],int allTag[7])
-{
-
-   int sizeinput =25;
-   double *Cell=(double*)malloc(8*27*sizeof(double));	
-
-
-   for (int i=0;i<7;i++)
-   {
-      if (allRank[i]==this->root)
-      {
-         double vectforTrans[25];
-         for (int j=0;j<sizeinput;j++)
-         {
-            vectforTrans[j]=input[i][j];
-         }
-         getAllInfoForCompare(vectforTrans,Cell);
-         int index=(int)vectforTrans[24];
-         for (int k=0;k<8*27;k++)
-         {
-            AllCell[index][k]=Cell[k];
-         }
-         for (int j=0;j<sizeinput;j++)
-         {
-            input[index][j]=vectforTrans[j];
-         }
-      }
-      else
-      {
-         double vectforTrans[25];
-         for (int j=0;j<sizeinput;j++)
-         {
-            vectforTrans[j]=input[i][j];
-         }
-         MPI_Send(vectforTrans,sizeinput, MPI_DOUBLE_PRECISION,allRank[i],allTag[i],MPI_COMM_WORLD);
-      }
-   }
-   for (int i=0;i<7;i++)
-   {
-      if (allRank[i]!=this->root)
-      {
-         MPI_Status status; 
-         double receiveVector[25];
-         double *receiceCell=(double*)malloc(8*27*sizeof(double));
-         MPI_Recv(receiveVector,25, MPI_DOUBLE_PRECISION,allRank[i],MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-         MPI_Recv(receiceCell,8*27, MPI_DOUBLE_PRECISION,allRank[i],MPI_ANY_TAG,MPI_COMM_WORLD,&status);				  
-         int index=(int)receiveVector[24];
-         for (int j=0;j<sizeinput;j++)
-         {
-            input[index][j]=receiveVector[j];
-         }
-         for (int k=0;k<8*27;k++)
-         {
-            AllCell[index][k]=receiceCell[k];
-         }
-         free (receiceCell);
-      }
-   }
-   free (Cell);
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessor::sendtoOtherIsOk(int isPointSuitable)
-{
-   if(comm->getNumberOfProcesses() > 1)  
-   { 
-      int size=comm->getNumberOfProcesses();
-      for (int i=0;i<size;i++)
-      {
-         if (i!=rank)
-         {
-            MPI_Send(&isPointSuitable,1, MPI_INT,i,i,MPI_COMM_WORLD); 
-         }	
-      }
-   }
-}
diff --git a/depot/PathLineCoProcessor.h b/depot/PathLineCoProcessor.h
deleted file mode 100644
index 9677ab3cf..000000000
--- a/depot/PathLineCoProcessor.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-*  PathLinePostprocessor.h
-*
-*  Created on: 04.24.2012
-*  Author: Fard
-*/
-
-
-#ifndef PATHLINEPOSTPROCESSOR_H
-#define PATHLINEPOSTPROCESSOR_H
-
-# define dirx 0
-# define diry 1
-# define dirz 2
-# define dirxy 3 
-# define dirxz 4 
-# define diryz 5
-# define dirxyz 6
-#include <mpi.h>
-#include "CoProcessor.h"
-#include "Grid3D.h"
-#include "Block3D.h"
-#include "LBMUnitConverter.h"
-#include "Communicator.h"
-#include "D3Q27InterpolationProcessor.h"
-#include "LBMKernelETD3Q27.h"
-#include "D3Q27ETBCProcessor.h"
-#include <boost/shared_ptr.hpp>
-#include "WbWriter.h"
-
-class PathLineCoProcessor;
-typedef boost::shared_ptr<PathLineCoProcessor> PathLineCoProcessorPtr;
-
-class PathLineCoProcessor : public CoProcessor
-{
-public:
-   PathLineCoProcessor(Grid3DPtr grid, const std::string& path, WbWriter* const writer,
-      LBMUnitConverterPtr conv, UbSchedulerPtr s, CommunicatorPtr comm, 
-      double x1, double x2, double x3,  LBMReal nue, D3Q27InterpolationProcessorPtr iProcessor);
-   ~PathLineCoProcessor();
-   void process(double step);
-
-protected:
-   void collectPostprocessData();
-   void initialMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray);
-   void interpolMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray,int &isExtrapolation,double tau[]);
-   void extrapolMovement(Block3DPtr block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray,double tau[]);
-   void clearData();
-   void outICell(D3Q27ICell& iCell);
-   void updateDistributedValues();
-   void printPoint(double tau[]);
-   void findPlane(int ix1,int ix2,int ix3,Grid3DPtr grid,Block3DPtr block,double &A,double &B,double &C,double &D,double &ii);
-   void finddisPointToCentercell(double x1,double x2,double x3,double xp000, double yp000, double zp000,double &dis,double &dx,double &deltaT,Block3DPtr &block,int level);
-
-   //void getWallPosition(Grid3DPtr grid,Block3DPtr &block,double xp000,double yp000,double zp000,double &Xw,double &Yw,double &Zw,double x1,double x2,double x3,
-   //  double &xp000T,double &yp000T,double &zp000T,double A,double B,double C,double D,double normalDis,double di,double dj,double dk,double &cofWeightx
-   //,double &cofWeighty,double &cofWeightz,double dismax,double dis,int level);
-   void getWallPosition(double input[]);
-   void findInitialCell(double s,double di,double dj,double dk,double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000);
-   void rearangeInt( int dis[7]);
-   void rearangedDouble( double dis[7]);
-   void addCorrection(double &vx1,double &vx2,double &vx3,double &tauxx,double &tauyy,double &tauzz,double &tauxy,double &tauxz,double &tauyz,
-      double dx,D3Q27ICell iCell,double Xw, double Yw, double Zw,double  omega,double cofWeightx,double cofWeighty,double cofWeightz,double ii,double x1LB,double x2LB,double x3LB,double di,double dj,double dk);
-   void collWall(double A,double B,double C,double D,double &x1,double &x2,double &x3,double x1old,double x2old,double x3old,double dx,double &vx1,double &vx2,double &vx3,double ii);
-   void CalcVelParticle(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf);
-   void CalcVelParticle2(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf);
-
-   // void getWallPosition(double dixmax,double disx,double disy,double disz,double disxy,double disxz,double disyz,double disxyz,double &Xw,double &Yw,double &Zw,double x1,double x2,double x3,double A,double B,double C,double D,double normalDis,double di,double dj,double dk,
-   //   double &cofWeightx,double &cofWeighty,double &cofWeightz);
-   void getRankWithPosition(Grid3DPtr grid,double xp000, double yp000, double zp000,int &RankNeigber,int level);
-   void getRankWithPosition(Grid3DPtr grid,double xp000, double yp000, double zp000,int &RankNeigber);
-   void getRankWithPosition2(Grid3DPtr grid,double xp000, double yp000, double zp000,int &RankNeigber);
-   void getAllTag(int allRank[7],int allTag[7]);
-   void getAllInfoForCompare(double input[],double *Vect);
-   void sendMaxtagToAllProccess(int allRank[],int allTag[],int numberpro,int &numberproccessused,int *mainproccess);
-   void getAllRankWithAllPositions(double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,int &Rankx,int &Ranky,int &Rankz,int &Rankxy,int &Rankxz,int &Rankyz,int &Rankxyz,int level);
-   void getAllRankWithAllPositions2(double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,int &Rankx,int &Ranky,int &Rankz,int &Rankxy,int &Rankxz,int &Rankyz,int &Rankxyz);
-   void getVectfromiCell(D3Q27ICell iCell,double *Vect);
-   void getiCellfromVect(D3Q27ICell &iCell,double *Vect);
-
-   void getAfterCompare(double dis[],double input [7][25],double AllCell[7][8*27],double &xp000,double &yp000,double &zp000,
-      double &Xw,double &Yw,double &Zw,double &cofWeightx,double &cofWeighty,double &cofWeightz,double &dx,double &omega,D3Q27ICell &iCell);
-   void SendAndReceiveData(double input [7][25],double AllCell[7][8*27],int allRank[7],int allTag[7]);	
-   void sendtoOtherIsOk(int isPointSuitable);
-private:
-   bool checkNodes(Block3DPtr block);
-   bool checkNodes2( Block3DPtr block,double x11,double x22,double x33);
-   void checkLevel(Block3DPtr& block, LBMKernelETD3Q27Ptr& kernel, DistributionArray3DPtr& distributions,  BCArray3D<D3Q27BoundaryCondition>& bcArray,bool &isPointSuitable2);
-
-   std::vector<UbTupleDouble3> nodes;
-   std::vector<std::string> datanames;
-   std::vector<std::vector<double> > data;
-   std::string path;
-   WbWriter* writer;
-   LBMUnitConverterPtr conv;
-   CommunicatorPtr comm;
-   D3Q27InterpolationProcessorPtr interpolation;
-   double x1, x2, x3;
-   double x1old, x2old, x3old;
-   LBMReal vx1old,vx2old,vx3old;
-   LBMReal vx1oldf,vx2oldf,vx3oldf;
-   bool particleHasMass;
-   int isExtrapolation;
-   int istep;
-   int stepcheck;
-   LBMReal nue;
-   D3Q27InterpolationProcessorPtr iProcessor;
-   D3Q27InterpolationHelperPtr iHelper;
-   int rank;
-   int root;
-   int maxtag;
-   std::vector<std::vector<double> > Positions;
-};
-#endif
-
diff --git a/depot/PathLineCoProcessorMcpart.cpp b/depot/PathLineCoProcessorMcpart.cpp
deleted file mode 100644
index e3acc7b3e..000000000
--- a/depot/PathLineCoProcessorMcpart.cpp
+++ /dev/null
@@ -1,1301 +0,0 @@
-#include "PathLineCoProcessorMcpart.h"
-#include "LBMKernelETD3Q27.h"
-#include "SimulationParameters.h"
-#include "D3Q27ETBCProcessor.h"
-#include <vector>
-#include <string>
-#include <boost/foreach.hpp>
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-//#include "D3Q27ETFCoffVectorConnector.h"
-using namespace std;
-
-
-PathLineCoProcessorMcpart::PathLineCoProcessorMcpart(Grid3DPtr grid, const std::string& path, WbWriter* const writer,
-                                                                   LBMUnitConverterPtr conv, UbSchedulerPtr s, CommunicatorPtr comm, 
-                                                                   std::vector<UbTupleDouble3 > _Positions, LBMReal nue, D3Q27InterpolationProcessorPtr iProcessor)
-                                                                   : CoProcessor(grid, s),
-                                                                   path(path),
-                                                                   comm(comm),
-                                                                   writer(writer),
-                                                                   conv(conv),
-                                                                   nue(nue),
-                                                                   iProcessor(iProcessor),
-                                                                   istep(0),
-                                                                   particleHasMass(true),
-                                                                   rank(comm->getProcessID())
-{
-   iHelper = D3Q27InterpolationHelperPtr(new D3Q27InterpolationHelper(iProcessor));
-   getParticlePerProccess(_Positions);
-   getNeighborsRank();
-   initializeForPrinting((int)_Positions.size());
-}
-//////////////////////////////////////////////////////////////////////////
-PathLineCoProcessorMcpart::~PathLineCoProcessorMcpart()
-{
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::process(double step)
-{
-   this->stepcheck=(int)step;
-   double aa=scheduler->getMinEnd();
-   if (step >= scheduler->getMaxBegin() && step <= scheduler->getMinEnd())
-   {
-      collectPostprocessData();
-   }
-
-   UBLOG(logDEBUG3, "PathLinePostprocessor::update:" << step);
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::collectPostprocessData()
-{
-
-   int ran=rank;
-   updateParticles();
-   checkParticles();
-   initialMovement();
-   updateParticles();
-   checkParticles();
-   BOOST_FOREACH(ParticlesPtr particle, particles)
-   { 
-      double tau[6];//={tauxx,tauyy,tauzz,tauxy,tauxz,tauyz};
-      finalMovement(particle,tau);	
-      //printParticle(particle);
-      gatherData(particle);
-   }		
-
-   if(scheduler->isDue((double)istep) )
-   {
-      string partName = writer->writeNodesWithNodeDataDouble(path+ UbSystem::toString(rank),nodes,datanames,data);
-      size_t found=partName.find_last_of("//");
-      string piece = partName.substr(found+1);
-
-      vector<string> cellDataNames;
-
-      vector<string> pieces = comm->gather(piece);
-      if (comm->getProcessID() == comm->getRoot())
-      {
-         string pname = WbWriterVtkXmlASCII::getInstance()->writeParallelFile(path,pieces,datanames,cellDataNames);
-
-         //vector<string> filenames;
-         //filenames.push_back(pname);
-         //if (istep == Postprocessor::scheduler->getMinBegin())
-         //{
-         //   WbWriterVtkXmlASCII::getInstance()->writeCollection(path+"_collection",filenames,0,false);
-         //} 
-         //else
-         //{
-         //   WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(path+"_collection",filenames,0,false);
-         //}
-         UBLOG(logINFO,"D3Q27MacroscopicQuantitiesPostprocessor step: " << istep);
-      }
-   }
-
-   istep++;
-}
-////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::initializeForPrinting(int _number)
-{
-   for (int i=0;i<_number;i++)
-   {
-      string fileName=path + UbSystem::toString(i)+ ".txt";
-      files.push_back(boost::shared_ptr<std::ofstream>(new std::ofstream(fileName.c_str())));	
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getParticlePerProccess(std::vector<UbTupleDouble3 >particlesVec)
-{
-   for (int i=0;i<particlesVec.size();i++)
-   {
-      int minInitLevel = this->grid->getCoarsestInitializedLevel();
-      int maxInitLevel = this->grid->getFinestInitializedLevel();
-      LBMKernelETD3Q27Ptr kernel;
-      DistributionArray3DPtr distributions;
-      BCArray3D<D3Q27BoundaryCondition> bcArray;
-      Block3DPtr block;
-
-      for(int level = minInitLevel; level<=maxInitLevel; level++)
-      {	      
-         UbTupleInt3 blockIndexes = grid->getBlockIndexes(val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),level);
-         block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-         if(!block) continue; 
-         if(block->isActive()) 
-         {
-            if (block->hasInterpolationFlagCF() || block->hasInterpolationFlagFC())
-            {
-               if(rank == block->getRank())
-               { 					
-                  if(!checkNodes(block,val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i])))
-                  {	
-                     sendStatusOfPoint(false,val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),level,i);
-                     continue;
-                  }
-                  initializeParticle ( val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),i ,level);
-                  //getParticle(particle,grid->getDeltaX(block),particle.x,particle.y,particle.z,level,i);
-                  sendStatusOfPoint(true,val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),level,i);
-                  break;
-               }
-               else							
-               {								
-                  bool isPointSuitable=true;
-                  receiveStatusOfPoint(isPointSuitable,block->getRank(),val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),level)	;	
-                  if (isPointSuitable){break;}							
-               }		
-            }
-            else
-            {
-               if(rank == block->getRank())
-               { 
-                  if(!checkNodes(block,val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i])))
-                  {		   
-                     continue;
-                  }  
-                  initializeParticle ( val<1>(particlesVec[i]), val<2>(particlesVec[i]), val<3>(particlesVec[i]),i,level );
-                  Particles particle;
-                  //getParticle(particle,grid->getDeltaX(block),particle.x,particle.y,particle.z,level,i);
-                  //particlesVec.push_back(particle);
-                  //particles.erase(t.first);
-                  break;	
-               }
-
-            }
-         }		
-      }
-   } 			
-}
-////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::initializeParticle(double x, double y,double z,int i,int level)
-{
-   ParticlesPtr particle = ParticlesPtr(new Particles() );
-
-   particle->xold=x;	                    particle->yold=y;  	                particle->zold=z;
-   particle->x   =x;	                    particle->y   =y;	                particle->z   =z;			 	  
-   particle->vxold =0.1;		            particle->vyold =0.1;	            particle->vzold=0.1;	 
-   particle->vxoldf=0.0;		            particle->vyoldf=0.0;	            particle->vzoldf=0.0;
-   particle->rankOfParticle=rank;          particle->ID=i;                     particle->level=level;
-   particles.push_back(particle);
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getNeighborsRank()
-{
-   int gridRank = grid->getRank();
-   int minInitLevel = this->grid->getCoarsestInitializedLevel();
-   int maxInitLevel = this->grid->getFinestInitializedLevel();
-
-   for(int level = minInitLevel; level<=maxInitLevel;level++)
-   {
-      vector<Block3DPtr> blockVector;
-      grid->getBlocks(level, gridRank, blockVector);
-      BOOST_FOREACH(Block3DPtr block, blockVector)
-      {
-         int blockRank = block->getRank();
-         if (gridRank == blockRank && block->isActive())
-         {				
-            //std::vector<Block3DPtr> neighbors; 
-            int ix1 = block->getX1();
-            int ix2 = block->getX2();
-            int ix3 = block->getX3();
-            int level = block->getLevel();
-            //grid->getAllNeighbors(ix1, ix2, ix3, level, level, neighbors);
-            int dirs=26;//number of directions
-            for( int dir = 0; dir < dirs; dir++)
-            {
-               Block3DPtr neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
-               if(neighBlock)
-               {
-                  int neighBlockRank = neighBlock->getRank();			
-                  if(blockRank != neighBlockRank && neighBlock->isActive())
-                  {
-                     if (neighbors.size()==0)
-                     {
-                        neighbors.insert((std::make_pair(neighBlockRank,0)));
-                     } 
-                     else
-                     {
-                        for ( std::map< int, int >::const_iterator iter = neighbors.begin();iter != neighbors.end(); ++iter )
-                        {
-                           if (iter->first!=neighBlockRank)
-                           {
-                              neighbors.insert((std::make_pair(neighBlockRank,0)));
-                           }
-                        }	
-                     }	
-                  }	
-               }	
-            }
-         }		
-      }	
-   }
-}
-
-//////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessorMcpart::getParticle(Particles &particle, double dx,double x, double y,double z,int level,int i)
-//{
-//	particle.particleNumber=i;
-//	particle.xold=val<1>(xold[i]);	        particle.yold=val<2>(xold[i]);  	particle.zold=val<3>(xold[i]);
-//	particle.x   =x;	                    particle.y   =y;	                particle.z   =z;			 
-//	particle.level=level;
-//	particle.dx=dx;		 
-//	particle.vxold=val<1>(vxold[i]);		particle.vyold=val<2>(vxold[i]);	particle.vzold=val<3>(vxold[i]);	 
-//	particle.vxoldf=val<1>(vxoldf[i]);		particle.vyoldf=val<2>(vxoldf[i]);	particle.vzoldf=val<3>(vxoldf[i]);
-//
-//}
-//////////////////////////////////////////////////////////////////////////
-bool PathLineCoProcessorMcpart::checkNodes( Block3DPtr block,double _x1,double _x2,double _x3)
-{
-   bool result = true;
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-   D3Q27BoundaryConditionPtr bcPtr;
-
-   double x1_ch = _x1;// + vx1old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x2_ch = _x2;// + vx2old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-   double x3_ch = _x3;// + vx3old*conv->getfactorTimeShouldMultiplebyDx()*grid->getDeltaX(block);
-
-   int nx1 = static_cast<int>(bcArray.getNX1());
-   int nx2 = static_cast<int>(bcArray.getNX2());
-   int nx3 = static_cast<int>(bcArray.getNX3());
-
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, x1_ch, x2_ch, x3_ch);
-
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-   bool outlet=false;
-
-   for (int xx3 = ix3; xx3 <= ix3 + 1 && ix3 + 1 < nx3; xx3++)
-      for(int xx2 = ix2; xx2 <= ix2 + 1 && ix2 + 1 < nx2; xx2++)
-         for(int xx1 = ix1; xx1 <= ix1 + 1 && ix1 + 1 < nx1; xx1++)
-         {
-            bcPtr=bcArray.getBC(xx1,xx2,xx3);
-            for(int fdir=D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
-            {
-               if ( bcPtr != NULL)
-               {
-                  if (bcPtr->hasDensityBoundaryFlag(fdir))
-                  {	
-                     if(outlet)break; 
-                     outlet=true;
-                     break;
-                  }
-               }
-            }
-            result = result && !bcArray.isUndefined(xx1, xx2, xx3) &&  !outlet;
-         }
-
-         return result;
-
-}
-//	//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::initialMovement()
-{
-   BOOST_FOREACH(ParticlesPtr particle, particles)
-   {
-      double dx=grid->getDeltaX(particle->level);
-      particle->xold=particle->x;
-      particle->yold=particle->y;
-      particle->zold=particle->z;
-      particle->x   =particle->xold+particle->vxold*dx*conv->getFactorTimeLbToW(dx);
-      particle->y   =particle->yold+particle->vyold*dx*conv->getFactorTimeLbToW(dx);
-      particle->z   =particle->zold+particle->vzold*dx*conv->getFactorTimeLbToW(dx);	
-   }
-}
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessorMcpart::updateDistributedValues(std::vector<Particles> *particlesVec,std::vector<UbTupleDouble3> &x)
-//{
-//	
-//	int numberOFVariable=18;
-//	std::vector<double> sendParticlesInfomation;	
-//	std::vector<double> receiveParticlesInfomation;	
-//	getVectorFromParticles(sendParticlesInfomation,particlesVec,numberOFVariable);
-//	allGatherDoubles(sendParticlesInfomation, receiveParticlesInfomation);
-//	fillOutPositions(receiveParticlesInfomation,x);
-//	//getParticlesFromVector(receiveParticlesInfomation,particlesVec,numberOFVariable);
-//	//std::vector<Particles> *particlesVec;
-//}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::sendBool(bool _bool,int distinationRank ,int i)
-{
-   int variable;
-   if (_bool==false)
-   {
-      variable=0;
-   }
-   else variable=1;
-   if(comm->getNumberOfProcesses() > 1)  
-   { 		
-      MPI_Send(&variable,1, MPI_INT,distinationRank,i,MPI_COMM_WORLD); 
-      //std::cout<<"\n"<<variable<<"send from rank "<<rank<<" to rank "<< distinationRank;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::sendInt(int svalue,int distinationRank ,int tag)
-{
-   if(comm->getNumberOfProcesses() > 1)  
-   { 		
-      MPI_Send(&svalue,1, MPI_INT,distinationRank,tag,MPI_COMM_WORLD); 
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::receiveBool(bool &variable,int rankBlock)
-{
-   if(comm->getNumberOfProcesses() > 1)  
-   { 	
-      int _bool;
-      MPI_Status status; 
-      MPI_Recv(&_bool,1, MPI_INT,rankBlock,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-      //std::cout<<"\n"<<_bool<<"received in rank "<<rank<<" from rank "<< rankBlock;
-      if (_bool==false)
-      {
-         variable=false;
-      }
-      else variable=true;
-   }
-}
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::receiveInt(int &rvalue,int root)
-{
-   if(comm->getNumberOfProcesses() > 1)  
-   { 	
-      MPI_Status status; 
-      MPI_Recv(&rvalue,1, MPI_INT,root,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-   }
-}
-////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::sendStatusOfPoint(bool status,double x1,double x2,double x3,double level,int i)
-{
-   for(int lev = (int)level-1; lev<=(int)level+1; lev++)
-   {	      	
-      UbTupleInt3 blockIndexesDistination = grid->getBlockIndexes(x1,x2,x3,lev);
-      Block3DPtr blockDistination= grid->getBlock(val<1>(blockIndexesDistination), val<2>(blockIndexesDistination), val<3>(blockIndexesDistination), lev);
-      if(!blockDistination) continue; 
-      if(blockDistination->isActive()) 	
-      {
-         if(rank!=blockDistination->getRank())
-         {
-            sendBool(status,blockDistination->getRank(),i );  
-         }
-
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::receiveStatusOfPoint(bool &status,int rankRoot,double x1,double x2,double x3,double level)
-{
-   for(int lev = (int)level-1; lev<=(int)level+1; lev++)
-   {	      
-      UbTupleInt3 blockIndexes = grid->getBlockIndexes(x1,x2,x3,lev);
-      Block3DPtr block= grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), lev);
-      if (block)
-      {
-         if(rankRoot!=block->getRank())
-         {
-            LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-            if(kernel) 
-            {
-               if(checkNodes(block,x1,x2,x3))
-               {	
-                  receiveBool(status,rankRoot);	
-               }
-            }
-
-         }
-
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getVectorFromParticles(std::vector<double> &particlesInfomation,ParticlesPtr particle)
-{
-   particlesInfomation.push_back(particle->x     ); 
-   particlesInfomation.push_back(particle->y     );	
-   particlesInfomation.push_back(particle->z     );
-   particlesInfomation.push_back(particle->xold  ); 
-   particlesInfomation.push_back(particle->yold  );	
-   particlesInfomation.push_back(particle->zold  );
-   particlesInfomation.push_back(particle->vxold ); 
-   particlesInfomation.push_back(particle->vyold );	
-   particlesInfomation.push_back(particle->vzold );
-   particlesInfomation.push_back(particle->vxoldf); 
-   particlesInfomation.push_back(particle->vyoldf);	
-   particlesInfomation.push_back(particle->vzoldf);
-   particlesInfomation.push_back(particle->rankOfParticle); 
-   particlesInfomation.push_back(particle->ID);
-   particlesInfomation.push_back(particle->level);
-
-}
-////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getParticlesFromVector(std::vector<double> particlesInfomation,int numberOFVariable)
-{
-   int numParticles= (int)particlesInfomation.size()/numberOFVariable;
-   for (int i=0;i<numParticles;i++)
-   {
-      ParticlesPtr particle = ParticlesPtr(new Particles() );
-
-      particle->x                 =particlesInfomation[i*numberOFVariable+0]; 
-      particle->y     			=particlesInfomation[i*numberOFVariable+1];
-      particle->z     			=particlesInfomation[i*numberOFVariable+2];
-      particle->xold   		    =particlesInfomation[i*numberOFVariable+3];
-      particle->yold  			=particlesInfomation[i*numberOFVariable+4];
-      particle->zold  			=particlesInfomation[i*numberOFVariable+5];
-      particle->vxold  		    =particlesInfomation[i*numberOFVariable+6];
-      particle->vyold 			=particlesInfomation[i*numberOFVariable+7];
-      particle->vzold 			=particlesInfomation[i*numberOFVariable+8];
-      particle->vxoldf 		    =particlesInfomation[i*numberOFVariable+9];
-      particle->vyoldf			=particlesInfomation[i*numberOFVariable+10];
-      particle->vzoldf			=particlesInfomation[i*numberOFVariable+11];
-      particle->rankOfParticle    =(int)particlesInfomation[i*numberOFVariable+12];
-      particle->ID	            =(int)particlesInfomation[i*numberOFVariable+13];
-      particle->level	            =(int)particlesInfomation[i*numberOFVariable+14];
-      particles.push_back(particle);
-   }
-}
-////////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessorMcpart::updateinfo(std::vector<Particles> *particlesVec,std::vector<UbTupleDouble3> &x)
-//{
-//	std::vector<Particles>&particles=*particlesVec;
-//	for (int i=0;i<particlesVec->size();i++)
-//	{
-//		Particles &particle=particles[i];
-//		int index=particle.particleNumber;
-//		val<1>(x[index])=particle.xold;	        
-//		val<2>(x[index])=particle.yold; 
-//		val<3>(x[index])=particle.zold;
-//	}
-//}
-////////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessorMcpart::allGatherDoubles(std::vector<double>& svalues, std::vector<double>& rvalues)
-//{
-//	int scount;
-//	vector<int> displs, rcounts;
-//
-//	scount = (int)(svalues.size());
-//	rcounts.resize(comm->getNumberOfProcesses());
-//	MPI_Allgather(&scount, 1, MPI_INT, &rcounts[0], 1, MPI_INT, MPI_COMM_WORLD);
-//	displs.resize(comm->getNumberOfProcesses());
-//
-//	displs[0] = 0; 
-//	for (int i=1; i<comm->getNumberOfProcesses(); ++i) { 
-//		displs[i] = displs[i-1]+rcounts[i-1]; 
-//	}
-//
-//	rvalues.resize(displs[comm->getNumberOfProcesses()-1]+rcounts[comm->getNumberOfProcesses()-1]); 
-//
-//	if(rvalues.size() == 0)
-//	{
-//		rvalues.resize(1);
-//		rvalues[0] = -999;
-//	}
-//	if(scount == 0)
-//	{
-//		svalues.resize(1);
-//		svalues[0] = -999;
-//	}
-//
-//	MPI_Allgatherv(&svalues[0], scount, MPI_DOUBLE, &rvalues[0], &rcounts[0], &displs[0], MPI_DOUBLE, MPI_COMM_WORLD); 
-//}
-////////////////////////////////////////////////////////////////////////////
-//void D3Q27PathLinePostprocessorMcpart::fillOutPositions(std::vector<double> particlesInfomation,std::vector<UbTupleDouble3> &x,double numberOFVariable)
-//{
-//	if (particlesInfomation.size()!=x.size()*numberOFVariable)
-//	{
-//		std::cout<<"number of particle is wrong";
-//	}
-//	for (int i=0;i<x.size();i++)
-//	{
-//		Particles particle;
-//		particle.x              =particlesInfomation[i*numberOFVariable+0]; 
-//		particle.y     			=particlesInfomation[i*numberOFVariable+1];
-//		particle.z     			=particlesInfomation[i*numberOFVariable+2];
-//		particle.xold   		=particlesInfomation[i*numberOFVariable+3];
-//		particle.yold  			=particlesInfomation[i*numberOFVariable+4];
-//		particle.zold  			=particlesInfomation[i*numberOFVariable+5];
-//		particle.vx     		=particlesInfomation[i*numberOFVariable+6];
-//		particle.vy    			=particlesInfomation[i*numberOFVariable+7];
-//		particle.vz    			=particlesInfomation[i*numberOFVariable+8];
-//		particle.vxold  		=particlesInfomation[i*numberOFVariable+9];
-//		particle.vyold 			=particlesInfomation[i*numberOFVariable+10];
-//		particle.vzold 			=particlesInfomation[i*numberOFVariable+11];
-//		particle.vxoldf 		=particlesInfomation[i*numberOFVariable+12];
-//		particle.vyoldf			=particlesInfomation[i*numberOFVariable+13];
-//		particle.vzoldf			=particlesInfomation[i*numberOFVariable+14];
-//		particle.dx     		=particlesInfomation[i*numberOFVariable+15];
-//		particle.level 			=particlesInfomation[i*numberOFVariable+16];
-//		particle.particleNumber	=particlesInfomation[i*numberOFVariable+17];
-//
-//		int index=particle.particleNumber;
-//		val<1>(x[index])=particle.x;	        val<2>(x[index])=particle.y;        	val<3>(x[index])=particle.z;
-//		val<1>(xold[index])=particle.xold;	    val<2>(xold[index])=particle.yold;  	val<3>(xold[index])=particle.zold;
-//		val<1>(vxold[index])=particle.vxold;	val<2>(vxold[index])=particle.vyold;  	val<3>(vxold[index])=particle.vzold;
-//		val<1>(vxoldf[index])=particle.vxoldf;	val<2>(vxoldf[index])=particle.vyoldf;  	val<3>(vxoldf[index])=particle.vzoldf;
-//	}
-//
-//}
-//
-//
-//
-
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::updateParticles()
-{
-   //find particles which want to go to another process
-   BOOST_FOREACH(ParticlesPtr particle, particles)
-   {
-      int minInitLevel = this->grid->getCoarsestInitializedLevel();
-      int maxInitLevel = this->grid->getFinestInitializedLevel();
-      LBMKernelETD3Q27Ptr kernel;
-      DistributionArray3DPtr distributions;
-      BCArray3D<D3Q27BoundaryCondition> bcArray;
-      Block3DPtr block;
-
-      for(int level = minInitLevel; level<=maxInitLevel; level++)
-      {	      
-         UbTupleInt3 blockIndexes = grid->getBlockIndexes(particle->x,particle->y,particle->z,level);
-         block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-         if(!block) continue; 
-         if(block->isActive()) 
-         {
-            if(rank != block->getRank())
-            { 					
-               std::map<int,int>::iterator p;
-               p=neighbors.find(block->getRank());
-               p->second++;
-               particle->rankOfParticle=block->getRank();
-               particle->level=level;
-               break;//break should be here
-            }
-            //break;//break should be here
-         }			
-      }
-   }
-   //send number of particle moving to another process 
-   for ( std::map< int, int >::const_iterator iter = neighbors.begin();iter != neighbors.end(); ++iter )
-   {					
-      int svalue=iter->second;
-      if(comm->getNumberOfProcesses() > 1)  
-      { 		
-         MPI_Send(&svalue,1, MPI_INT,iter->first,iter->first,MPI_COMM_WORLD); 
-         //std::cout<<"\n"<<svalue<<" send from rank "<<rank<<" to rank "<< iter->first;
-      }
-   }	
-   std::map<int,int> receiveNeighbors;
-   //receive number of particle coming form another process
-   for ( std::map< int, int >::const_iterator iter = neighbors.begin();iter != neighbors.end(); ++iter )
-   {
-      int rvalue;	
-      if(comm->getNumberOfProcesses() > 1)  
-      { 	
-         MPI_Status status; 
-         MPI_Recv(&rvalue,1, MPI_INT,iter->first,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-         //std::cout<<"\n"<<"rank "<< rank<<" receive "<<rvalue<<" from rank "<<iter->first;
-         receiveNeighbors.insert((std::make_pair(iter->first,rvalue)));
-      }
-   }
-   //int numOfvarClass=18;
-
-   ///send data
-   for ( std::map< int, int >::const_iterator iter = neighbors.begin();iter != neighbors.end(); ++iter )
-   {					
-      if (iter->second!=0)
-      {
-         std::vector<double> sendParticlesInfomation;
-         int lengthSending=numOfvarClass*iter->second;
-
-         BOOST_FOREACH(ParticlesPtr particle, particles)
-         {
-            if (particle->rankOfParticle==iter->first)
-            {
-               getVectorFromParticles(sendParticlesInfomation,particle);
-            }
-         }
-         MPI_Send(&sendParticlesInfomation[0],lengthSending, MPI_DOUBLE,iter->first,iter->first,MPI_COMM_WORLD); 
-         std::cout<<"\n send from rank "<<rank<<" to rank "<< iter->first;
-      }
-   }	
-   //delete particle
-   std::list<ParticlesPtr> newparticles;
-   BOOST_FOREACH(ParticlesPtr particle, particles)
-   {
-      if (particle->rankOfParticle==rank)
-      {
-         newparticles.push_back(particle);
-      }
-      else
-      {
-         //	int idNumber =particle->ID;
-         //	printParticle(idNumber);
-         //delete data
-      }
-   }
-   particles=newparticles;
-   ///receive data
-   for ( std::map< int, int >::const_iterator iter = receiveNeighbors.begin();iter != receiveNeighbors.end(); ++iter )
-   {					
-      if (iter->second!=0)
-      {
-         int lengthReceiving=numOfvarClass*iter->second;	
-         std::vector<double> rvalue(lengthReceiving);	
-         MPI_Status status; 
-         MPI_Recv(&rvalue[0],lengthReceiving, MPI_DOUBLE,iter->first,MPI_ANY_TAG,MPI_COMM_WORLD,&status);
-         std::cout<<"\n"<<"rank "<< rank<<" receive  from rank "<<iter->first;
-         getParticlesFromVector(rvalue,numOfvarClass);
-      }
-   }
-   //reset neighbors
-   std::map<int,int> Neighbors2;
-   Neighbors2=neighbors;
-   neighbors.clear();
-   for ( std::map< int, int >::const_iterator iter = Neighbors2.begin();iter != Neighbors2.end(); ++iter )
-   {
-      neighbors.insert((std::make_pair(iter->first,0)));	
-   }	
-
-
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::checkParticles()
-{
-   std::list<ParticlesPtr> newparticles;
-   BOOST_FOREACH(ParticlesPtr particle, particles)
-   { 
-      int minInitLevel = this->grid->getCoarsestInitializedLevel();
-      int maxInitLevel = this->grid->getFinestInitializedLevel();
-      Block3DPtr block;
-
-      for(int level = minInitLevel; level<=maxInitLevel; level++)
-      {	      
-         UbTupleInt3 blockIndexes = grid->getBlockIndexes(particle->x,particle->y,particle->z,level);
-         block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-         if(!block) continue; 
-         if(block->isActive()) 
-         {
-            LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-            if(!kernel) continue; 
-            if(rank == block->getRank())
-            { 					
-               if(!checkNodes(block,particle->x,particle->y,particle->z))
-               {	
-                  std::cout<<"particle number "<<particle->ID <<"is gone";
-                  continue;
-               }
-               newparticles.push_back(particle);
-               break;
-            }
-         }
-      }
-   }
-   particles=newparticles;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::finalMovement(ParticlesPtr particle,double tau[])
-{
-   Block3DPtr block;
-   UbTupleInt3 blockIndexes = grid->getBlockIndexes(particle->x, particle->y, particle->z,particle->level);
-   block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), particle->level);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-   UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block, particle->x, particle->y, particle->z);
-   int ix1 = val<1>(nodeIndexes);
-   int ix2 = val<2>(nodeIndexes);
-   int ix3 = val<3>(nodeIndexes);
-
-   if(!iProcessor->iCellHasSolid(bcArray, ix1, ix2, ix3))
-   {
-      interpolMovement(block,distributions,particle,tau,ix1, ix2, ix3);
-   }
-   else
-   {
-      extrapolMovement( block, particle, tau, ix1,  ix2,  ix3);
-   }
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::interpolMovement(Block3DPtr block,DistributionArray3DPtr& distributions,ParticlesPtr particle,double tau[],int ix1, int ix2, int ix3)
-{
-   D3Q27ICell iCell;
-   //LBMReal f[D3Q27System::ENDF+1];
-   LBMReal dx =grid->getDeltaX(particle->level);
-   LBMReal vx1,vx2,vx3;
-   iProcessor->readICell(distributions, iCell, ix1, ix2, ix3);
-   double x1LB, x2LB, x3LB;
-   UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-   double offsetX1RW = abs(particle->x - val<1>(orgNodeRW));
-   double offsetX2RW = abs(particle->y - val<2>(orgNodeRW));
-   double offsetX3RW = abs(particle->z - val<3>(orgNodeRW));
-   x1LB = offsetX1RW / dx;
-   x2LB = offsetX2RW / dx;
-   x3LB = offsetX3RW / dx;
-
-   x1LB -= 0.5;
-   x2LB -= 0.5;
-   x3LB -= 0.5;
-   LBMReal omega = LBMSystem::calcCollisionFactor(nue, block->getLevel());
-   LBMReal tauxx,	   tauyy,	   tauzz,	   tauxy,	   tauxz,	   tauyz;
-   iHelper->interpolate8to1WithVelocityWithShearStress(iCell, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz);
-   vx1 = vx1 *  conv->getFactorVelocityLbToW();
-   vx2 = vx2 *  conv->getFactorVelocityLbToW();
-   vx3 = vx3 *  conv->getFactorVelocityLbToW();
-   tau[0]=tauxx/dx;
-   tau[1]=tauyy/dx;
-   tau[2]=tauzz/dx;
-   tau[3]=tauxy/dx;
-   tau[4]=tauxz/dx;
-   tau[5]=tauyz/dx;  
-
-   if (particleHasMass) {   CalcVelParticle(dx,vx1,vx2,vx3,particle->vxold,particle->vyold,particle->vzold,particle->vxoldf,particle->vyoldf,particle->vzoldf);}
-   //if (particleHasMass) {   CalcVelParticle2(dx,vx1,vx2,vx3,particle->vxold,particle->vyold,particle->vzold,particle->vxoldf,particle->vyoldf,particle->vzoldf);}
-   //heuns method
-   particle->x= (particle->xold) + 1.0/2.0*(vx1 + particle->vxold)*conv->getFactorTimeLbToW(dx);
-   particle->y= (particle->yold) + 1.0/2.0*(vx2 + particle->vyold)*conv->getFactorTimeLbToW(dx);
-   particle->z= (particle->zold) + 1.0/2.0*(vx3 + particle->vzold)*conv->getFactorTimeLbToW(dx);
-
-   particle->vxold = vx1;
-   particle->vyold = vx2;
-   particle->vzold = vx3;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::extrapolMovement(Block3DPtr block,ParticlesPtr particle,double tau[],int ix1, int ix2, int ix3)
-{
-
-   LBMReal vx1,vx2,vx3;
-   LBMReal dx =grid->getDeltaX(particle->level);
-   int level =particle->level;
-   LBMReal omega = LBMSystem::calcCollisionFactor(nue,level);
-   D3Q27ICell iCell;
-   //LBMReal f[D3Q27System::ENDF+1];
-   double xp000,yp000,zp000;
-   double Xw=999.0,Yw=999.0,Zw=999.0;
-   double cofWeightx=999.0,cofWeighty=999.0,cofWeightz=999.0;
-   double A,B,C,D,ii=0.0;
-   double disx=9990,disy=9990,disz=9990,disxy=9990,disxz=9990,disyz=9990,disxyz=9990;
-
-   UbTupleDouble3 orgNodeRW =  grid->getNodeCoordinates(block,  ix1, ix2, ix3);
-   double ix1ph = ( val<1>(orgNodeRW));
-   double ix2ph = ( val<2>(orgNodeRW));
-   double ix3ph = ( val<3>(orgNodeRW)); 
-   findPlane(ix1,ix2,ix3,grid,block,A,B,C,D,ii);
-   double s = A*particle->x + B*particle->y + C*particle->z + D;//The sign of s = Ax + By + Cz + D determines which side the point (x,y,z) lies with respect to the plane. If s > 0 then the point lies on the same side as the normal (A,B,C). If s < 0 then it lies on the opposite side, if s = 0 then the point (x,y,z) lies on the plane.
-   if (s>0){s=1;} else if (s<0){s=-1;}else {s=0;}
-   double normalDis=((A*particle->x + B*particle->y + C*particle->z + D)/sqrt(A*A+B*B+C*C));///distance point to plane xp-Xw=distance
-   double di=A/sqrt(A*A+B*B+C*C);      double dj=B/sqrt(A*A+B*B+C*C);       double dk=C/sqrt(A*A+B*B+C*C);
-   double XXw=particle->x-di*normalDis;    double YYw=particle->y-dj*normalDis;    double ZZw=particle->z-dk*normalDis;
-   findInitialCell(s,di,dj,dk,dx,ix1ph,ix2ph,ix3ph,xp000,yp000,zp000);//find initial cell with xp000,yp000,zp000
-
-   double dis[7]={disx,disy,disz,disxy,disxz,disyz,disxyz};   
-   getAllDis(dis,particle->x,particle->y,particle->z,ix1ph,ix2ph,ix3ph,xp000,yp000,zp000,level);
-   rearangedDouble(dis);
-   getAfterCompare(dis,dx,ix1ph,ix2ph,ix3ph,xp000,yp000,zp000,Xw,Yw,Zw,particle->x,particle->y,particle->z,A,B,C, D, normalDis,di,dj,dk,cofWeightx,cofWeighty,cofWeightz,iCell,level);
-
-   double x1LB, x2LB, x3LB;
-   double offsetX1RW000 = (particle->x - xp000);
-   double offsetX2RW000 = (particle->y - yp000);
-   double offsetX3RW000 = (particle->z - zp000);
-
-   x1LB = offsetX1RW000 / dx;
-   x2LB = offsetX2RW000 / dx;
-   x3LB = offsetX3RW000 / dx;
-   x1LB -= 0.5;
-   x2LB -= 0.5;
-   x3LB -= 0.5;
-   // outICell(iCell);
-   //iProcessor->interpolate8to1WithVelocity(iCell, f, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3);
-   LBMReal tauxx,	   tauyy,	   tauzz,	   tauxy,	   tauxz,	   tauyz;
-   iHelper->interpolate8to1WithVelocityWithShearStress(iCell, x1LB, x2LB, x3LB, omega,vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz);	
-   addCorrection(vx1,vx2,vx3,tauxx,tauyy,tauzz,tauxy,tauxz,tauyz,dx,iCell,Xw, Yw, Zw, omega,cofWeightx,cofWeighty,cofWeightz,ii, x1LB, x2LB, x3LB,di,dj,dk);
-   tau[0]=tauxx;
-   tau[1]=tauyy;
-   tau[2]=tauzz;
-   tau[3]=tauxy;
-   tau[4]=tauxz;
-   tau[5]=tauyz;
-   // if (particleHasMass) {   CalcVelParticle(dx,vx1,vx2,vx3,vx1old,vx2old,vx3old,vx1oldf,vx2oldf,vx3oldf);}
-   if (particleHasMass) {   CalcVelParticle2(dx,vx1,vx2,vx3,particle->vxold,particle->vyold,particle->vzold,particle->vxoldf,particle->vyoldf,particle->vzoldf);}
-   //heuns method
-   particle->x= (particle->xold) + 1.0/2.0*(vx1 + particle->vxold)*conv->getFactorTimeLbToW(dx);
-   particle->y= (particle->yold) + 1.0/2.0*(vx2 + particle->vyold)*conv->getFactorTimeLbToW(dx);
-   particle->z= (particle->zold) + 1.0/2.0*(vx3 + particle->vzold)*conv->getFactorTimeLbToW(dx);
-   collWall(A,B,C,D,particle->x,particle->y,particle->z,particle->xold,particle->yold,particle->zold,dx,vx1,vx2,vx3,ii);
-   particle->vxold = vx1;
-   particle->vyold = vx2;
-   particle->vzold = vx3;
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::CalcVelParticle(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,
-                                                       double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf)
-{
-   double signDragx,signDragy,signDragz;
-   double dragCoff=1.0;
-   if     (vx1old>=vx1oldf)    {  signDragx=-1.0;   } 
-   else if(vx1old<vx1oldf)     {  signDragx= 1.0;    }
-   if     (vx2old>=vx2oldf)    {  signDragy=-1.0;   } 
-   else if(vx2old< vx2oldf)    {  signDragy= 1.0;    }
-   if     (vx3old>=vx3oldf)    {  signDragz=-1.0;   } 
-   else if(vx3old< vx3oldf)    {  signDragz= 1.0;    }
-   double vx1p=vx1old+signDragx*(vx1old-vx1oldf)*(vx1old-vx1oldf)*conv->getFactorTimeLbToW(dx);
-   double vx2p=vx2old+signDragy*(vx2old-vx2oldf)*(vx2old-vx2oldf)*conv->getFactorTimeLbToW(dx);
-   double vx3p=vx3old+signDragz*(vx3old-vx3oldf)*(vx3old-vx3oldf)*conv->getFactorTimeLbToW(dx);   
-
-   double signDragNextx,signDragNexty,signDragNextz;
-   if     (vx1p>=vx1)    {  signDragNextx=-1.0;   } 
-   else if(vx1p< vx1)    {  signDragNextx= 1.0;    }
-   if     (vx2p>=vx2)    {  signDragNexty=-1.0;   } 
-   else if(vx2p< vx2)    {  signDragNexty= 1.0;    }
-   if     (vx3p>=vx3)    {  signDragNextz=-1.0;   } 
-   else if(vx3p< vx3)    {  signDragNextz= 1.0;    }
-   ////////////////////velocity of particle////////////////////////////////////////////////////// 
-   double velx1oldf=vx1;
-   double velx2oldf=vx2;
-   double velx3oldf=vx3;
-
-   vx1=vx1old+1.0/2.0*( signDragNextx*(vx1p-vx1)*(vx1p-vx1)+signDragx*(vx1old-vx1oldf)*(vx1old-vx1oldf) )*conv->getFactorTimeLbToW(dx);
-   vx2=vx2old+1.0/2.0*( signDragNexty*(vx2p-vx2)*(vx2p-vx2)+signDragy*(vx2old-vx2oldf)*(vx2old-vx2oldf) )*conv->getFactorTimeLbToW(dx);
-   vx3=vx3old+1.0/2.0*( signDragNextz*(vx3p-vx3)*(vx3p-vx3)+signDragz*(vx3old-vx3oldf)*(vx3old-vx3oldf) )*conv->getFactorTimeLbToW(dx);
-
-   vx1oldf=velx1oldf;
-   vx2oldf=velx2oldf;
-   vx3oldf=velx3oldf;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::CalcVelParticle2(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,
-                                                        double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf)
-{
-   LBMReal muRE = 1.002*1e-3;//m2/s
-   double mass=2.3*1e-17;// kg
-   double Diameter=600*1e-9;//m
-   double deltatime=conv->getFactorTimeLbToW(dx)*0.001;
-   double Coff=3*PI*Diameter*muRE*deltatime/mass;
-   double exCoff=exp(-Coff);
-   //velocity of particle/// 
-   double velx1oldf=vx1;
-   double velx2oldf=vx2;
-   double velx3oldf=vx3;
-   //air
-   vx1=vx1old*exCoff+(velx1oldf-(velx1oldf)*exCoff);
-   vx2=vx2old*exCoff+(velx2oldf-(velx2oldf)*exCoff);
-   vx3=vx3old*exCoff+(velx3oldf-(velx3oldf)*exCoff);
-
-   vx1oldf=velx1oldf;
-   vx2oldf=velx2oldf;
-   vx3oldf=velx3oldf;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::findPlane(int ix1,int ix2,int ix3,Grid3DPtr grid,Block3DPtr block,double &A,double &B,double &C,double &D,double &ii)
-{
-   double x1plane=0.0,y1plane=0.0,z1plane=0.0;
-   double x2plane=0.0,y2plane=0.0,z2plane=0.0;
-   double x3plane=0.0,y3plane=0.0,z3plane=0.0;
-   D3Q27BoundaryConditionPtr bcPtr;
-   double dx = grid->getDeltaX(block);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-   BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-
-   for (int k = ix3; k <= ix3 + 1; k++){
-      for(int j = ix2; j <= ix2 + 1; j++){
-         for(int i = ix1; i <= ix1 + 1; i++)
-         {
-            UbTupleDouble3 pointplane1 =  grid->getNodeCoordinates(block,  i,	  j,	 k);
-
-            double   iph=val<1>(pointplane1);
-            double   jph=val<2>(pointplane1);
-            double   kph=val<3>(pointplane1);
-
-            if(!bcArray.isSolid(i, j, k))
-            {
-               bcPtr=bcArray.getBC(i,j,k);
-               if(bcPtr)
-               {	 
-                  for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
-                  {
-                     if( ii<=2)
-                     {
-                        LBMReal q = bcPtr->getQ(fdir);
-                        if (q!=999.00000)
-                        {
-
-                           if     ( fdir==D3Q27System::E ) 
-                           {
-                              if (i+q<=ix1+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph+q*dx;	  y1plane=jph;	 z1plane=kph;    	ii++;	} 
-                                 else if (ii==1) 	{	x2plane=iph+q*dx;     y2plane=jph;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if(ii==2) 	    {   x3plane=iph+q*dx;     y3plane=jph;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::W ) 
-                           {
-                              if (i-q>=ix1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph-q*dx;	  y1plane=jph;	 z1plane=kph;    	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph-q*dx;    y2plane=jph;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if(ii==2) 	    {   x3plane=iph-q*dx;    y3plane=jph;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::N ) 
-                           {
-                              if(j+q<=ix2+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph+q*dx;	 z1plane=kph; 	    ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph+q*dx;	 z2plane=kph;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph+q*dx;	 z3plane=kph;       if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::S ) 
-                           {
-                              if (j-q>=ix2)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph-q*dx;	 z1plane=kph; 	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph-q*dx;	 z2plane=kph;	if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph-q*dx;	 z3plane=kph;   if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-
-                           if     ( fdir==D3Q27System::T ) 
-                           {
-                              if(k+q<=ix3+1)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph;	 z1plane=kph+q*dx; 	    ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph;	 z2plane=kph+q*dx;	    if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph;	 z3plane=kph+q*dx;      if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-                           if     ( fdir==D3Q27System::B ) 
-                           {
-                              if (k-q>=ix3)
-                              {
-                                 if      (ii==0)	    {	x1plane=iph;	y1plane=jph;	 z1plane=kph-q*dx; 	ii++;	} 
-                                 else if (ii==1) 	    {	x2plane=iph;    y2plane=jph;	 z2plane=kph-q*dx;	  if  (x1plane!=x2plane||y1plane!=y2plane||z1plane!=z2plane) 	ii++;	}
-                                 else if (ii==2) 	    {   x3plane=iph;    y3plane=jph;	 z3plane=kph-q*dx;     if ((x3plane!=x1plane||y3plane!=y1plane||z3plane!=z1plane)&&(x2plane!=x3plane||y2plane!=y3plane||z2plane!=z3plane)) ii++;} 
-                              }
-                           }
-
-                        }
-                     }
-                  }
-
-               }
-
-            }
-         }
-      }
-   }
-
-   A =   y1plane* (z2plane - z3plane) + y2plane*(z3plane - z1plane) + y3plane* (z1plane - z2plane);   
-   B =   z1plane* (x2plane - x3plane) + z2plane*(x3plane - x1plane) + z3plane* (x1plane - x2plane) ;      
-   C =   x1plane* (y2plane - y3plane) + x2plane*(y3plane - y1plane) + x3plane* (y1plane - y2plane) ;       
-   D =-( x1plane*(y2plane*z3plane - y3plane*z2plane)+x2plane*(y3plane*z1plane - y1plane*z3plane) + x3plane* (y1plane* z2plane - y2plane* z1plane));
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::findInitialCell(double s,double di,double dj,double dk,double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000)
-{
-   if (s*di>0)         {            xp000=ix1ph+dx;    }
-   else if(s*di<0)     {            xp000=ix1ph-dx;    }
-   else                {            xp000=ix1ph;      }
-   if (s*dj>0)         {            yp000=ix2ph+dx;    }
-   else if(s*dj<0)     {            yp000=ix2ph-dx;    }
-   else                {            yp000=ix2ph;      }
-   if (s*dk>0)         {            zp000=ix3ph+dx;    }
-   else if(s*dk<0)     {            zp000=ix3ph-dx;    }
-   else                {            zp000=ix3ph;      }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::finddisPointToCentercell(double x1,double x2,double x3,double xp000, double yp000, double zp000,double &dis,int level)
-{	
-   UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000, yp000,  zp000,level);
-   Block3DPtr block = grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-   if(block&& block->isActive())
-   {
-      LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-      if (kernel)
-      {
-         {
-            DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-            BCArray3D<D3Q27BoundaryCondition> bcArray = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray();
-            if(block && block->isActive())
-            {	
-               double dx = grid->getDeltaX(block);
-               UbTupleInt3 nodeIndexes = grid->getNodeIndexes(block,  xp000, yp000,  zp000);
-               int ix1Se = val<1>(nodeIndexes);
-               int ix2Se = val<2>(nodeIndexes);
-               int ix3Se = val<3>(nodeIndexes);  
-               if     (!iProcessor->iCellHasSolid(bcArray, ix1Se, ix2Se,  ix3Se  ))        
-               {				 
-                  UbTupleDouble3 pointCell =  grid->getNodeCoordinates(block,  ix1Se,	  ix2Se,	 ix3Se);	 double   iph=val<1>(pointCell)+dx/2.0;	 double   jph=val<2>(pointCell)+dx/2.0;	 double   kph=val<3>(pointCell)+dx/2.0;
-                  dis=sqrt((iph-x1)*(iph-x1)+(jph-x2)*(jph-x2)+(kph-x3)*(kph-x3));
-               }
-            }	 	 	
-         }
-      }
-
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::collWall(double A,double B,double C,double D,double &x1,double &x2,double &x3,double x1old,double x2old,double x3old,double dx,double &vx1,double &vx2,double &vx3,double ii)
-{
-   if (particleHasMass)
-   {
-      double s = A*x1 + B*x2 + C*x3 + D;//The sign of s = Ax + By + Cz + D determines which side the point (x,y,z) lies with respect to the plane. If s > 0 then the point lies on the same side as the normal (A,B,C). If s < 0 then it lies on the opposite side, if s = 0 then the point (x,y,z) lies on the plane.
-      if (s>0){s=1;} else if (s<0){s=-1;}else {s=0;}
-      double normalDis=((A*x1 + B*x2 + C*x3 + D)/sqrt(A*A+B*B+C*C));///distance point to plane xp-Xw=distance
-      double di=A/sqrt(A*A+B*B+C*C);      double dj=B/sqrt(A*A+B*B+C*C);       double dk=C/sqrt(A*A+B*B+C*C);
-      A*=s;B*=s;C*=s;
-      if (abs(normalDis)<0.05*dx)
-      {
-         if (ii==3)
-         {
-            ///reflection without e factor
-            /*  double vn=(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double  vx1L=vx1-2*vn*A;
-            double  vx2L=vx2-2*vn*B;
-            double  vx3L=vx3-2*vn*C;*/
-            double vnx=A*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double vny=B*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            double vnz=C*(A*vx1 + B*vx2 + C*vx3)/(A*A+B*B+C*C);
-            ////do collision  
-            double CollitionFactor_n=0.01;
-            double CollitionFactor_bt=0.01;
-            vnx=-1*CollitionFactor_n*vnx;
-            vny=-1*CollitionFactor_n*vny;
-            vnz=-1*CollitionFactor_n*vnz;
-            double vbtx=(B*B*vx1 + C*C*vx1 - A*B*vx2 - A*C*vx3)/(A*A+B*B+C*C);
-            double vbty=(-(A*B*vx1) + A*A*vx2 + C*C*vx2 - B*C*vx3)/(A*A+B*B+C*C);
-            double vbtz=(-(A*C*vx1) - B*C*vx2 + A*A*vx3 + B*B*vx3)/(A*A+B*B+C*C);
-            vbtx=vbtx*CollitionFactor_bt;
-            vbty=vbty*CollitionFactor_bt;
-            vbtz=vbtz*CollitionFactor_bt;
-            vx1=vnx+vbtx;
-            vx2=vny+vbty;
-            vx3=vnz+vbtz;
-
-            x1 = (x1old);
-            x2 = (x2old);
-            x3 = (x3old);
-         } 
-         else   std::cout<<"there is no plane to reflect";
-      }
-   }
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::addCorrection(double &vx1,double &vx2,double &vx3,double &tauxx,double &tauyy,double &tauzz,double &tauxy,double &tauxz,double &tauyz,
-                                                     double dx,D3Q27ICell iCell,double Xw, double Yw, double Zw,double  omega,double cofWeightx,double cofWeighty,double cofWeightz,double ii,double x1LB,double x2LB,double x3LB,double di,double dj,double dk)
-{
-   //LBMReal f[D3Q27System::ENDF+1];
-   double  Udif,Vdif,Wdif;	  
-   iHelper->interpolate8to1WithVelocity(iCell, Xw, Yw, Zw, omega,Udif,Vdif,Wdif);
-
-   double Ucx,Ucy,Ucz;
-   double Vcx,Vcy,Vcz;
-   double Wcx,Wcy,Wcz;
-
-   double dxUcx,dyUcy,dzUcz;
-   double dxVcx,dyVcy,dzVcz;
-   double dxWcx,dyWcy,dzWcz;
-   //double di,dj,dk;
-
-   if (cofWeightx==0){di=0;}
-   if (cofWeighty==0){dj=0;}
-   if (cofWeightz==0){dk=0;}
-
-   double weightx=(di*di)/(di*di+dj*dj+dk*dk);
-   double weighty=(dj*dj)/(di*di+dj*dj+dk*dk);
-   double weightz=(dk*dk)/(di*di+dj*dj+dk*dk);
-   // /* if (Xw<0.5||Xw>-0.5){weightx=0;}
-   //  if (Yw<0.5||Yw>-0.5){weighty=0;}
-   //  if (Zw<0.5||Zw>-0.5){weightz=0;}
-   //*/
-   if (weightx==0){Ucx=0;Vcx=0;Wcx=0;dxUcx=0;dxVcx=0;dxWcx=0;}else{
-      Ucx=-Udif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);Vcx=-Vdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);Wcx=-Wdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(x1LB*x1LB*x1LB-x1LB/4.0);
-      dxUcx=-Udif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);dxVcx=-Vdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);dxWcx=-Wdif*weightx/(Xw*Xw*Xw-Xw/4.0)*(3.0*x1LB*x1LB-1.0/4.0);
-   }
-   if (weighty==0){Ucy=0;Vcy=0;Wcy=0;dyUcy=0;dyVcy=0;dyWcy=0;}else{
-      Ucy=-Udif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);Vcy=-Vdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);Wcy=-Wdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(x2LB*x2LB*x2LB-x2LB/4.0);
-      dyUcy=-Udif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);dyVcy=-Vdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);dyWcy=-Wdif*weighty/(Yw*Yw*Yw-Yw/4.0)*(3.0*x2LB*x2LB-1.0/4.0);
-   }
-   if (weightz==0){Ucz=0;Vcz=0;Wcz=0;dzUcz=0;dzVcz=0;dzWcz=0;}else{
-      Ucz=-Udif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);Vcz=-Vdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);Wcz=-Wdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(x3LB*x3LB*x3LB-x3LB/4.0);
-      dzUcz=-Udif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);dzVcz=-Vdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);dzWcz=-Wdif*weightz/(Zw*Zw*Zw-Zw/4.0)*(3.0*x3LB*x3LB-1.0/4.0);
-   }
-
-   double Ucor=Ucx+Ucy+Ucz;
-   double Vcor=Vcx+Vcy+Vcz;
-   double Wcor=Wcx+Wcy+Wcz;
-
-   double tauxxC=dxUcx;
-   double tauyyC=dyVcy;
-   double tauzzC=dzWcz;
-   double tauxyC=0.5*(dyUcy+dxVcx);
-   double tauxzC=0.5*(dzUcz+dxWcx);
-   double tauyzC=0.5*(dzVcz+dyWcy);
-
-   if (ii!=3) 
-   {
-      //std::cout<<"there are not 3point for making plane"<<endl<<"Ucor="<<Ucor<<endl<<"vx1="<<vx1;
-      Ucor  =0.0;
-      Vcor  =0.0;
-      Wcor  =0.0;
-      tauxxC=0.0;
-      tauyyC=0.0;
-      tauzzC=0.0;
-      tauxyC=0.0;
-      tauxzC=0.0;
-      tauyzC=0.0;
-   }
-
-   vx1+=Ucor;
-   vx2+=Vcor;
-   vx3+=Wcor;
-   tauxx+=tauxxC;
-   tauyy+=tauyyC;
-   tauzz+=tauzzC;
-   tauxy+=tauxyC;
-   tauxz+=tauxzC;
-   tauyz+=tauyzC;
-
-   vx1 = vx1 *  conv->getFactorVelocityLbToW();
-   vx2 = vx2 *  conv->getFactorVelocityLbToW();
-   vx3 = vx3 *  conv->getFactorVelocityLbToW();
-   tauxx=tauxx/dx;
-   tauyy=tauyy/dx;
-   tauzz=tauzz/dx;
-   tauxy=tauxy/dx;
-   tauxz=tauxz/dx;
-   tauyz=tauyz/dx;
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getAllDis(double dis[],double x,double y,double z,double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,int level)
-{
-   finddisPointToCentercell(x,y,z,xp000, ix2ph,  ix3ph,dis[0],level);//disx  
-   finddisPointToCentercell(x,y,z,ix1ph, yp000,  ix3ph,dis[1],level);//disy  
-   finddisPointToCentercell(x,y,z,ix1ph, ix2ph,  zp000,dis[2],level);//disz  
-   finddisPointToCentercell(x,y,z,xp000, yp000,  ix3ph,dis[3],level);//disxy 
-   finddisPointToCentercell(x,y,z,xp000, ix2ph,  zp000,dis[4],level);//disxz 
-   finddisPointToCentercell(x,y,z,ix1ph, yp000,  zp000,dis[5],level);//disyz 
-   finddisPointToCentercell(x,y,z,xp000, yp000,  zp000,dis[6],level);//disxyz  	   
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getAfterCompare(double dis[],double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000,double &Xw,
-                                                       double &Yw,double &Zw,double x1,double x2,double x3,double A,double B,double C,double D,double normalDis, double di,double dj,double dk, double &cofWeightx
-                                                       ,double &cofWeighty,double &cofWeightz,D3Q27ICell &iCell,int level)
-{
-   for (int i=0;i<7;i++)
-   {	
-      double dist=dis[i];
-      if      (dist==dirx  ){ Xw=(B*x2+C*x3+D)/(-A); Yw=x2;                 Zw=x3;	         	cofWeightx=1; cofWeighty=0; cofWeightz=0;  xp000=xp000;	yp000=ix2ph; zp000=ix3ph; getIcell(iCell,xp000, ix2ph, ix3ph,level); } //get suitable block from suitable cell
-      else if (dist==diry  ){ Xw=x1;                 Yw=(A*x1+C*x3+D)/(-B); Zw=x3;		        cofWeightx=0; cofWeighty=1; cofWeightz=0;  xp000=ix1ph;	yp000=yp000; zp000=ix3ph; getIcell(iCell,ix1ph, yp000, ix3ph,level); } 
-      else if (dist==dirz  ){ Xw=x1;                 Yw=x3;	              Zw=(B*x2+A*x1+D)/(-C);cofWeightx=0; cofWeighty=0; cofWeightz=1;  xp000=ix1ph;	yp000=ix2ph; zp000=zp000; getIcell(iCell,ix1ph, ix2ph, zp000,level); } 
-      else if (dist==dirxy ){ Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3;        		cofWeightx=1; cofWeighty=1; cofWeightz=0;  xp000=xp000; yp000=yp000; zp000=ix3ph; getIcell(iCell,xp000, yp000, ix3ph,level); } 
-      else if (dist==dirxz ){ Xw=x1-di*normalDis;    Yw=x2;                 Zw=x3-dk*normalDis;	cofWeightx=1; cofWeighty=0; cofWeightz=1;  xp000=xp000;	yp000=ix2ph; zp000=zp000; getIcell(iCell,xp000, ix2ph, zp000,level); } 
-      else if (dist==diryz ){ Xw=x1;                 Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	cofWeightx=0; cofWeighty=1; cofWeightz=1;  xp000=ix1ph;	yp000=yp000; zp000=zp000; getIcell(iCell,ix1ph, yp000, zp000,level); } 
-      else if (dist==dirxyz){ Xw=x1-di*normalDis;    Yw=x2-dj*normalDis;    Zw=x3-dk*normalDis;	cofWeightx=1; cofWeighty=1; cofWeightz=1;  xp000=xp000;	yp000=yp000; zp000=zp000; getIcell(iCell,xp000, yp000, zp000,level); } 
-
-      Xw=(Xw-xp000)/dx-0.5;       
-      Yw=(Yw-yp000)/dx-0.5;       
-      Zw=(Zw-zp000)/dx-0.5;
-      if (Xw<2.5&&Xw>-2.5&&Yw<2.50&&Yw>-2.50&&Zw<2.50&&Zw>-2.50){break;}      
-   }
-}
-
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::rearangedDouble( double dis[7])
-{
-   double item;
-   for (int i=6;i>0;i--){   
-      for(int j=0;j<i;j++){ 
-         if (dis[j]>dis[j+1])
-         {	  
-            item=dis[j];  
-            dis[j]=dis[j+1]; 
-            dis[j+1]=item;					   
-         }
-      }
-   } 
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::getIcell(D3Q27ICell &iCell,double xp000, double yp000, double zp000,int level)
-{ 
-   UbTupleInt3 blockIndexes = grid->getBlockIndexes(xp000, yp000, zp000,level);
-   Block3DPtr block= grid->getBlock(val<1>(blockIndexes), val<2>(blockIndexes), val<3>(blockIndexes), level);
-   LBMKernelETD3Q27Ptr kernel = boost::dynamic_pointer_cast<LBMKernelETD3Q27>(block->getKernel());
-   DistributionArray3DPtr distributions = kernel->getDataSet()->getFdistributions();
-   iProcessor->readICell(distributions, iCell, (int)xp000, (int)yp000, (int)zp000);
-}
-////////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::printParticle(ParticlesPtr particle)
-
-{
-   /*BOOST_FOREACH(ParticlesPtr particle, particles)
-   {*/
-   int index=particle->ID;
-   (*files[index]).precision (std::numeric_limits<double>::digits10 + 1);
-   (*files[index])<<index<<" "<<istep<<" "<<particle->x<<"  "<< particle->y<<"  "<<particle->z<<" "<<particle->vxold<<"  "<<particle->vyold<<"  "<<particle->vzold<< std::endl;
-   //}
-}
-
-///////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::printParticle(int index)
-
-{
-
-}
-//////////////////////////////////////////////////////////////////////////
-void PathLineCoProcessorMcpart::gatherData(ParticlesPtr particle)
-{
-   //int index=particle->ID;
-   //std::vector<std::vector<double> > tempData;
-   //tempData.resize(7);
-   //if (!data.count(index ))	
-   //{	
-   //	data.insert((std::make_pair(index,tempData)));	
-   //}
-   //tempData=data.at(index);
-   //int t=0;
-   //tempData[t++].push_back(istep);
-   //tempData[t++].push_back(particle->x);
-   //tempData[t++].push_back(particle->y);
-   //tempData[t++].push_back(particle->z);
-   //tempData[t++].push_back(particle->vxold);
-   //tempData[t++].push_back(particle->vyold);
-   //tempData[t++].push_back(particle->vzold);
-
-   //  data.at(index)=tempData;
-
-   datanames.resize(0);
-   datanames.push_back("ID");
-   datanames.push_back("TimeStep");
-   datanames.push_back("Vx");
-   datanames.push_back("Vy");
-   datanames.push_back("Vz");
-   //datanames.push_back("tauxx");
-   //datanames.push_back("tauyy");
-   //datanames.push_back("tauzz");
-   //datanames.push_back("tauxy");
-   //datanames.push_back("tauxz");
-   //datanames.push_back("tauyz");
-   //datanames.push_back("xoff");
-   //datanames.push_back("yoff");
-   //datanames.push_back("zoff");
-
-   data.resize(datanames.size());
-
-   int index = 0;
-   data[index++].push_back(particle->ID);
-   data[index++].push_back(istep);
-   data[index++].push_back(particle->vxold);
-   data[index++].push_back(particle->vyold);
-   data[index++].push_back(particle->vzold);
-   //data[index++].push_back(tauxx);
-   //data[index++].push_back(tauyy);
-   //data[index++].push_back(tauzz);
-   //data[index++].push_back(tauxy);
-   //data[index++].push_back(tauxz);
-   //data[index++].push_back(tauyz);
-   //data[index++].push_back(xoff);
-   //data[index++].push_back(yoff);
-   //data[index++].push_back(zoff);
-
-   nodes.push_back( makeUbTuple(  double(particle->x), double(particle->y), double(particle->z)) );
-
-}
diff --git a/depot/PathLineCoProcessorMcpart.h b/depot/PathLineCoProcessorMcpart.h
deleted file mode 100644
index 0661640ee..000000000
--- a/depot/PathLineCoProcessorMcpart.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
-*  PathLinePostprocessor.h
-*
-*  Created on: 3.6.2012
-*  Author: Fard
-*/
-
-
-#ifndef PATHLINEPOSTPROCESSORMCPART_H
-#define PATHLINEPOSTPROCESSORMCPART_H
-
-# define dirx 0
-# define diry 1
-# define dirz 2
-# define dirxy 3 
-# define dirxz 4 
-# define diryz 5
-# define dirxyz 6
-#include <mpi.h>
-#include "CoProcessor.h"
-#include "Grid3D.h"
-#include "Block3D.h"
-#include "LBMUnitConverter.h"
-#include "Communicator.h"
-#include "D3Q27InterpolationProcessor.h"
-#include "LBMKernelETD3Q27.h"
-#include "D3Q27ETBCProcessor.h"
-#include <boost/shared_ptr.hpp>
-//#include <boost/tr1/memory.hpp>
-#include "Particles.h"
-#include "basics/writer/WbWriterVtkXmlASCII.h"
-
-class PathLineCoProcessorMcpart;
-typedef boost::shared_ptr<PathLineCoProcessorMcpart> PathLineCoProcessorMcpartPtr;
-
-class PathLineCoProcessorMcpart : public CoProcessor  
-{
-public:
-   //typedef std::map<int,ParticlesPtr> ParticlesMap;
-   std::map<int,int> neighbors;
-   //std::map<ofstream,std::vector<int> > pathOfstream;
-   PathLineCoProcessorMcpart(Grid3DPtr grid, const std::string& path, WbWriter* const writer,
-      LBMUnitConverterPtr conv, UbSchedulerPtr s, CommunicatorPtr comm, 
-      std::vector<UbTupleDouble3 > Positions, LBMReal nue, D3Q27InterpolationProcessorPtr iProcessor);
-   ~PathLineCoProcessorMcpart();
-   void process(double step);
-   void getNeighborsRank();
-
-protected:
-   void collectPostprocessData();
-   //void getParticles(std::vector<Particles> *particles,std::vector<UbTupleDouble3> x);
-   void initializeParticle(double x, double y,double z,int i,int level);
-   void getParticlePerProccess(std::vector<UbTupleDouble3 >);
-   void getParticle(Particles &particle, double dx,double x, double y,double z,int level,int i);
-   void initialMovement();
-   void updateDistributedValues(std::vector<Particles> *particles,std::vector<UbTupleDouble3> &x);
-   void receiveStatusOfPoint(bool &status,int rankRoot,double x1,double x2,double x3,double level);
-   void sendStatusOfPoint(bool status,double x1,double x2,double x3,double level,int i);
-   void receiveBool(bool &variable,int rankBlock);
-   void receiveInt(int &rvalue,int root);
-   void sendBool(bool _bool,int distinationRank,int i );
-   void sendInt(int svalue,int distinationRank ,int tag);
-   void getVectorFromParticles(std::vector<double> &particlesInfomation,ParticlesPtr particles);
-   void getParticlesFromVector(std::vector<double> particlesInfomation,int numberOFVariable);
-   void updateinfo(std::vector<Particles> *particlesVec,std::vector<UbTupleDouble3> &x);
-   void allGatherDoubles(std::vector<double>& svalues, std::vector<double>& rvalues);
-   void fillOutPositions(std::vector<double> particlesInfomation,std::vector<UbTupleDouble3> &x,double numberOFVariable);
-   void updateParticles();
-   void checkParticles();
-   void finalMovement(ParticlesPtr particle,double tau[]);
-   void interpolMovement(Block3DPtr block,DistributionArray3DPtr& distributions,ParticlesPtr particle,double tau[],int ix1, int ix2, int ix3);
-   void extrapolMovement(Block3DPtr block, ParticlesPtr particle,double tau[],int ix1, int ix2, int ix3);
-   void findPlane(int ix1,int ix2,int ix3,Grid3DPtr grid,Block3DPtr block,double &A,double &B,double &C,double &D,double &ii);
-   void CalcVelParticle2(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf);
-   void CalcVelParticle(double dx,double &vx1,double &vx2,double &vx3,double vx1old,double vx2old,double vx3old,double &vx1oldf,double &vx2oldf,double &vx3oldf);
-   void findInitialCell(double s,double di,double dj,double dk,double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000);
-   void finddisPointToCentercell(double x1,double x2,double x3,double xp000, double yp000, double zp000,double &dis,int level);
-   void collWall(double A,double B,double C,double D,double &x1,double &x2,double &x3,double x1old,double x2old,double x3old,double dx,double &vx1,double &vx2,double &vx3,double ii);
-   void addCorrection(double &vx1,double &vx2,double &vx3,double &tauxx,double &tauyy,double &tauzz,double &tauxy,double &tauxz,double &tauyz,
-      double dx,D3Q27ICell iCell,double Xw, double Yw, double Zw,double  omega,double cofWeightx,double cofWeighty,double cofWeightz,double ii,double x1LB,double x2LB,double x3LB,double di,double dj,double dk);
-   void getAllDis(double dis[],double x,double y,double z,double ix1ph,double ix2ph,double ix3ph,double xp000,double yp000,double zp000,int level);
-   void rearangedDouble( double dis[7]);
-   void getWallPosition(double dx,double xp000,double yp000,double zp000,double &Xw,double &Yw,double &Zw,double x1,double x2,double x3,double A
-      ,double B,double C,double D,double normalDis, double di,double dj,double dk, double &cofWeightx,double &cofWeighty,double &cofWeightz,int dir);
-   void getIcell(D3Q27ICell &iCell,double xp000, double yp000, double zp000,int level);
-   void getAfterCompare(double dis[],double dx,double ix1ph,double ix2ph,double ix3ph,double &xp000,double &yp000,double &zp000,double &Xw,
-      double &Yw,double &Zw,double x1,double x2,double x3,double A,double B,double C,double D,double normalDis, double di,double dj,double dk, double &cofWeightx
-      ,double &cofWeighty,double &cofWeightz,D3Q27ICell &iCell,int level);
-   void printParticle(ParticlesPtr particle);
-   void printParticle(int index);
-   void initializeForPrinting(int number);
-   void gatherData(ParticlesPtr particle);
-private:
-   bool checkNodes(Block3DPtr block,double _x1,double _x2,double _x3);
-   CommunicatorPtr comm;
-   //std::map<int ,std::vector<UbTupleDouble3> > nodes;
-   //std::map<int ,std::vector<std::string> >datanames;
-   //std::map<int ,std::vector<std::vector<double> > >data;
-
-   std::vector<UbTupleDouble3> nodes;
-   std::vector<std::string> datanames;
-   std::vector<std::vector<double> > data;
-
-   std::vector<boost::shared_ptr<std::ofstream> > files;
-   std::string path;
-   WbWriter* writer;
-   LBMUnitConverterPtr conv;
-
-   D3Q27InterpolationProcessorPtr interpolation;
-   //std::vector<UbTupleDouble3> x;
-   //std::vector<UbTupleDouble3> xold;
-   //std::vector<UbTupleDouble3 >vxold;
-   //std::vector<UbTupleDouble3 > vxoldf;
-   bool particleHasMass;
-   int isExtrapolation;
-   int istep;
-   int stepcheck;
-   LBMReal nue;
-   D3Q27InterpolationProcessorPtr iProcessor;
-   D3Q27InterpolationHelperPtr iHelper;
-   //Particles particles;
-   int rank;
-   int root;
-   int maxtag;
-   std::list<ParticlesPtr> particles;
-   //std::vector<std::vector<UbTupleDouble3> > Positions;
-   //Particles particles;
-
-   //ParticlesMap particles;
-
-};
-#endif
-
-- 
GitLab