/* Implementation of color lattice boltzmann model */ #include #include #include #include #include #include #include #include "common/Communication.h" #include "common/MPI.h" #include "common/Database.h" #include "common/ScaLBL.h" #include "ProfilerApp.h" #include "threadpool/thread_pool.h" class ScaLBL_GreyscaleModel{ public: ScaLBL_GreyscaleModel(int RANK, int NP, const Utilities::MPI& COMM); ~ScaLBL_GreyscaleModel(); // functions in they should be run void ReadParams(string filename); void ReadParams(std::shared_ptr db0); void SetDomain(); void ReadInput(); void Create(); void Initialize(); void Run(); void WriteDebug(); void VelocityField(); bool Restart,pBC; int timestep,timestepMax; int BoundaryCondition; int CollisionType; double tau; double tau_eff; double Den;//constant density double tolerance; double Fx,Fy,Fz,flux; double din,dout; double dp;//solid particle diameter, unit in voxel double GreyPorosity; int Nx,Ny,Nz,N,Np; int rank,nprocx,nprocy,nprocz,nprocs; double Lx,Ly,Lz; std::shared_ptr Dm; // this domain is for analysis std::shared_ptr Mask; // this domain is for lbm std::shared_ptr ScaLBL_Comm; // input database std::shared_ptr db; std::shared_ptr domain_db; std::shared_ptr greyscale_db; std::shared_ptr analysis_db; std::shared_ptr vis_db; signed char *id; int *NeighborList; double *fq; double *Permeability;//grey voxel permeability double *Porosity; double *Velocity; double *Pressure_dvc; IntArray Map; DoubleArray SignDist; DoubleArray Velocity_x; DoubleArray Velocity_y; DoubleArray Velocity_z; DoubleArray PorosityMap; DoubleArray Pressure; private: Utilities::MPI comm; int dist_mem_size; int neighborSize; // filenames char LocalRankString[8]; char LocalRankFilename[40]; char LocalRestartFile[40]; void AssignComponentLabels(double *Porosity, double *Permeablity); void AssignComponentLabels(double *Porosity,double *Permeability,const vector &File_poro,const vector &File_perm); };