/* * Sub-phase averaging tools */ #ifndef SubPhase_INC #define SubPhase_INC #include #include "common/Domain.h" #include "common/Communication.h" #include "analysis/analysis.h" #include "analysis/distance.h" #include "analysis/Minkowski.h" #include "common/Utilities.h" #include "common/MPI.h" #include "IO/MeshDatabase.h" #include "IO/Reader.h" #include "IO/Writer.h" class phase{ public: int Nc; double p; double M,Px,Py,Pz,K,visc; double V,A,H,X; void reset(){ p=M=Px=Py=Pz=K=0.0; visc=0.0; V=A=H=X=0.0; Nc=1; } private: }; class interface{ public: int Nc; double M,Px,Py,Pz,K; double Mw,Mn,Pnx,Pny,Pnz,Pwx,Pwy,Pwz,Kw,Kn; double V,A,H,X; void reset(){ Nc = 0; M=Px=Py=Pz=K=0.0; V=A=H=X=0.0; Mw=Mn=Pnx=Pny=Pnz=Pwx=Pwy=Pwz=Kw=Kn=0.0; } private: }; class SubPhase{ public: std::shared_ptr Dm; double Volume; // input variables double rho_n, rho_w; double nu_n, nu_w; double gamma_wn, beta; double Fx, Fy, Fz; /* * indices * w - water phase * n - not water phase * c - connected part * d - disconnected part * i - interface region * b - bulk (total) */ // local entities phase wc,wd,wb,nc,nd,nb,solid; interface iwn,iwnc; interface ifs; // global entities phase gwc,gwd,gwb,gnc,gnd,gnb,gsolid; interface giwn,giwnc; interface gifs; /* fluid-solid wetting interaction */ double total_wetting_interaction, count_wetting_interaction; double total_wetting_interaction_global, count_wetting_interaction_global; //........................................................................... int Nx,Ny,Nz; IntArray PhaseID; // Phase ID array (solid=0, non-wetting=1, wetting=2) BlobIDArray Label_WP; // Wetting phase label BlobIDArray Label_NWP; // Non-wetting phase label index (0:nblobs-1) std::vector Label_NWP_map; // Non-wetting phase label for each index DoubleArray Rho_n; // density field DoubleArray Rho_w; // density field DoubleArray Phi; // phase indicator field DoubleArray DelPhi; // Magnitude of Gradient of the phase indicator field DoubleArray Pressure; // pressure field DoubleArray Vel_x; // velocity field DoubleArray Vel_y; DoubleArray Vel_z; DoubleArray Dissipation; DoubleArray SDs; std::shared_ptr morph_w; std::shared_ptr morph_n; std::shared_ptr morph_i; SubPhase(std::shared_ptr Dm); ~SubPhase(); void SetParams(double rhoA, double rhoB, double tauA, double tauB, double force_x, double force_y, double force_z, double alpha, double beta); void Basic(); void Full(); void Write(int time); void AggregateLabels( const std::string& filename ); private: FILE *TIMELOG; FILE *SUBPHASE; }; #endif