#include "analysis/Minkowski.h" #include "analysis/pmmc.h" #include "common/Domain.h" #include "common/Communication.h" #include "analysis/analysis.h" #include "shared_ptr.h" #include "common/Utilities.h" #include "common/MPI_Helpers.h" #include "IO/MeshDatabase.h" #include "IO/Reader.h" #include "IO/Writer.h" #include "ProfilerApp.h" #define PI 3.14159265359 // Constructor Minkowski::Minkowski(std::shared_ptr dm): kstart(0), kfinish(0), isovalue(0), Volume(0), LOGFILE(NULL), Dm(dm), Vi(0), Vi_global(0) { Nx=dm->Nx; Ny=dm->Ny; Nz=dm->Nz; Volume=double((Nx-2)*(Ny-2)*(Nz-2))*double(Dm->nprocx()*Dm->nprocy()*Dm->nprocz()); if (Dm->rank()==0){ LOGFILE = fopen("minkowski.csv","a+"); if (fseek(LOGFILE,0,SEEK_SET) == fseek(LOGFILE,0,SEEK_CUR)) { // If LOGFILE is empty, write a short header to list the averages //fprintf(LOGFILE,"--------------------------------------------------------------------------------------\n"); fprintf(LOGFILE,"Vn An Jn Xn\n"); //miknowski measures, } } } // Destructor Minkowski::~Minkowski() { if ( LOGFILE!=NULL ) { fclose(LOGFILE); } } double Minkowski::V(){ return Vi_global; } double Minkowski::A(){ return Ai_global; } double Minkowski::J(){ return Ji_global; } double Minkowski::X(){ return Xi_global; } void Minkowski::ComputeScalar(const DoubleArray& Field, const double isovalue) { PROFILE_START("ComputeScalar"); Xi = Ji = Ai = 0.0; DECL object; int e1,e2,e3; double s,s1,s2,s3; double a1,a2,a3; //double Vx,Vy,Vz,Wx,Wy,Wz,nx,ny,nz,norm; //int Nx = Field.size(0); //int Ny = Field.size(1); //int Nz = Field.size(2); for (int k=1; kComm); // Phase averages MPI_Allreduce(&Vi,&Vi_global,1,MPI_DOUBLE,MPI_SUM,Dm->Comm); MPI_Allreduce(&Xi,&Xi_global,1,MPI_DOUBLE,MPI_SUM,Dm->Comm); MPI_Allreduce(&Ai,&Ai_global,1,MPI_DOUBLE,MPI_SUM,Dm->Comm); MPI_Allreduce(&Ji,&Ji_global,1,MPI_DOUBLE,MPI_SUM,Dm->Comm); MPI_Barrier(Dm->Comm); PROFILE_STOP("ComputeScalar"); } void Minkowski::PrintAll() { if (Dm->rank()==0){ fprintf(LOGFILE,"%.5g %.5g %.5g %.5g\n",Vi_global, Ai_global, Ji_global, Xi_global); // minkowski measures fflush(LOGFILE); } }