From 6ab72207c855513cc28756416748f9e45394c31f Mon Sep 17 00:00:00 2001 From: Mark Berrill Date: Tue, 15 May 2018 11:59:01 -0400 Subject: [PATCH] Moving runAnalysis to database input --- analysis/runAnalysis.cpp | 45 +++++++++++++++++----------- analysis/runAnalysis.h | 8 ++--- example/Bubble/input.in | 10 ++++++- tests/TestBubbleDFH.cpp | 4 +-- tests/lbpm_color_macro_simulator.cpp | 4 +-- tests/lbpm_dfh_simulator.cpp | 19 ++---------- 6 files changed, 46 insertions(+), 44 deletions(-) diff --git a/analysis/runAnalysis.cpp b/analysis/runAnalysis.cpp index bffbfdb8..45581aae 100644 --- a/analysis/runAnalysis.cpp +++ b/analysis/runAnalysis.cpp @@ -281,30 +281,35 @@ runAnalysis::commWrapper runAnalysis::getComm( ) /****************************************************************** * Constructor/Destructors * ******************************************************************/ -runAnalysis::runAnalysis( int restart_interval, int analysis_interval, - int blobid_interval, const RankInfoStruct& rank_info, const ScaLBL_Communicator &ScaLBL_Comm, const Domain& Dm, - int Np, int Nx, int Ny, int Nz, double Lx, double Ly, double Lz, bool pBC, double beta, double err, - IntArray Map, const std::string& LocalRestartFile ): +runAnalysis::runAnalysis( std::shared_ptr db, + const RankInfoStruct& rank_info, const ScaLBL_Communicator &ScaLBL_Comm, const Domain& Dm, + int Np, bool pBC, double beta, double err, + IntArray Map ): d_Np( Np ), - d_restart_interval( restart_interval ), - d_analysis_interval( analysis_interval ), - d_blobid_interval( blobid_interval ), d_beta( beta ), d_ScaLBL_Comm( ScaLBL_Comm ), d_rank_info( rank_info ), d_Map( Map ), - d_fillData(Dm.Comm,Dm.rank_info,Nx-2,Ny-2,Nz-2,1,1,1,0,1), - d_restartFile( LocalRestartFile ) + d_fillData(Dm.Comm,Dm.rank_info,Dm.Nx-2,Dm.Ny-2,Dm.Nz-2,1,1,1,0,1) { - d_N[0] = Nx; - d_N[1] = Ny; - d_N[2] = Nz; + INSIST( db, "Input database is empty" ); + char rankString[20]; + sprintf(rankString,"%05d",Dm.rank); + d_N[0] = Dm.Nx; + d_N[1] = Dm.Ny; + d_N[2] = Dm.Nz; + d_restart_interval = db->getScalar( "restart_interval" ); + d_analysis_interval = db->getScalar( "analysis_interval" ); + d_blobid_interval = db->getScalar( "blobid_interval" ); + d_visualization_interval = db->getScalar( "visualization_interval" ); + auto restart_file = db->getScalar( "restart_file" ); + d_restartFile = restart_file + "." + rankString; d_rank = MPI_WORLD_RANK(); writeIDMap(ID_map_struct(),0,id_map_filename); // Create the MeshDataStruct d_meshData.resize(1); d_meshData[0].meshName = "domain"; - d_meshData[0].mesh = std::make_shared( Dm.rank_info,Nx-2,Ny-2,Nz-2,Lx,Ly,Lz ); + d_meshData[0].mesh = std::make_shared( Dm.rank_info,Dm.Nx-2,Dm.Ny-2,Dm.Nz-2,Dm.Lx,Dm.Ly,Dm.Lz ); auto PhaseVar = std::make_shared(); auto PressVar = std::make_shared(); auto SignDistVar = std::make_shared(); @@ -312,22 +317,22 @@ runAnalysis::runAnalysis( int restart_interval, int analysis_interval, PhaseVar->name = "phase"; PhaseVar->type = IO::VariableType::VolumeVariable; PhaseVar->dim = 1; - PhaseVar->data.resize(Nx-2,Ny-2,Nz-2); + PhaseVar->data.resize(Dm.Nx-2,Dm.Ny-2,Dm.Nz-2); d_meshData[0].vars.push_back(PhaseVar); PressVar->name = "Pressure"; PressVar->type = IO::VariableType::VolumeVariable; PressVar->dim = 1; - PressVar->data.resize(Nx-2,Ny-2,Nz-2); + PressVar->data.resize(Dm.Nx-2,Dm.Ny-2,Dm.Nz-2); d_meshData[0].vars.push_back(PressVar); SignDistVar->name = "SignDist"; SignDistVar->type = IO::VariableType::VolumeVariable; SignDistVar->dim = 1; - SignDistVar->data.resize(Nx-2,Ny-2,Nz-2); + SignDistVar->data.resize(Dm.Nx-2,Dm.Ny-2,Dm.Nz-2); d_meshData[0].vars.push_back(SignDistVar); BlobIDVar->name = "BlobID"; BlobIDVar->type = IO::VariableType::VolumeVariable; BlobIDVar->dim = 1; - BlobIDVar->data.resize(Nx-2,Ny-2,Nz-2); + BlobIDVar->data.resize(Dm.Nx-2,Dm.Ny-2,Dm.Nz-2); d_meshData[0].vars.push_back(BlobIDVar); // Initialize the comms MPI_Comm_dup(MPI_COMM_WORLD,&d_comm); @@ -335,6 +340,10 @@ runAnalysis::runAnalysis( int restart_interval, int analysis_interval, d_comms[i] = MPI_COMM_NULL; d_comm_used[i] = false; } + // Initialize the threads + int N_threads = db->getWithDefault( "N_threads", 4 ); + auto method = db->getWithDefault( "load_balance", "default" ); + createThreads( method, N_threads ); } runAnalysis::~runAnalysis( ) { @@ -453,7 +462,7 @@ AnalysisType runAnalysis::computeAnalysisType( int timestep ) // Write the restart file type |= AnalysisType::CreateRestart; } - if (timestep%d_restart_interval == 0) { + if (timestep%d_visualization_interval == 0) { // Write the visualization data type |= AnalysisType::WriteVis; type |= AnalysisType::CopySimState; diff --git a/analysis/runAnalysis.h b/analysis/runAnalysis.h index 9bd7aa65..c8dc1260 100644 --- a/analysis/runAnalysis.h +++ b/analysis/runAnalysis.h @@ -23,10 +23,10 @@ class runAnalysis public: //! Constructor - runAnalysis( int restart_interval, int analysis_interval, int blobid_interval, + runAnalysis( std::shared_ptr db, const RankInfoStruct& rank_info, const ScaLBL_Communicator &ScaLBL_Comm, const Domain& dm, - int Np, int Nx, int Ny, int Nz, double Lx, double Ly, double Lz, bool pBC, double beta, double err, - IntArray Map, const std::string& LocalRestartFile ); + int Np, bool pBC, double beta, double err, + IntArray Map ); //! Destructor ~runAnalysis(); @@ -85,7 +85,7 @@ private: int d_N[3]; int d_Np; int d_rank; - int d_restart_interval, d_analysis_interval, d_blobid_interval; + int d_restart_interval, d_analysis_interval, d_blobid_interval, d_visualization_interval; double d_beta; ThreadPool d_tpool; ScaLBL_Communicator d_ScaLBL_Comm; diff --git a/example/Bubble/input.in b/example/Bubble/input.in index ae2764cb..5bee6d4d 100644 --- a/example/Bubble/input.in +++ b/example/Bubble/input.in @@ -24,5 +24,13 @@ Domain { } Analysis { - + blobid_interval = 1000 // Frequency to perform blob identification + analysis_interval = 1000 // Frequency to perform analysis + restart_interval = 20000 // Frequency to write restart data + vis_interval = 20000 // Frequency to write visualization data + restart_file = "Restart" // Filename to use for restart file (will append rank) + N_threads = 4 // Number of threads to use + load_balance = "independent" // Load balance method to use: "none", "default", "independent" } + + diff --git a/tests/TestBubbleDFH.cpp b/tests/TestBubbleDFH.cpp index bf7f3b2c..f5a730d4 100644 --- a/tests/TestBubbleDFH.cpp +++ b/tests/TestBubbleDFH.cpp @@ -503,8 +503,8 @@ int main(int argc, char **argv) //************ MAIN ITERATION LOOP ***************************************/ PROFILE_START("Loop"); - runAnalysis analysis( RESTART_INTERVAL,ANALYSIS_INTERVAL,BLOBID_INTERVAL, - rank_info, ScaLBL_Comm, Dm, Np, Nx, Ny, Nz, Lx, Ly, Lz, pBC, beta, err, Map, LocalRestartFile ); + std::shared_ptr analysis_db; + runAnalysis analysis( analysis_db, rank_info, ScaLBL_Comm, Dm, Np, pBC, beta, err, Map ); analysis.createThreads( analysis_method, 4 ); while (timestep < timestepMax && err > tol ) { //if ( rank==0 ) { printf("Running timestep %i (%i MB)\n",timestep+1,(int)(Utilities::getMemoryUsage()/1048576)); } diff --git a/tests/lbpm_color_macro_simulator.cpp b/tests/lbpm_color_macro_simulator.cpp index f2a1a870..401dd100 100644 --- a/tests/lbpm_color_macro_simulator.cpp +++ b/tests/lbpm_color_macro_simulator.cpp @@ -550,8 +550,8 @@ int main(int argc, char **argv) //************ MAIN ITERATION LOOP ***************************************/ PROFILE_START("Loop"); - runAnalysis analysis( RESTART_INTERVAL,ANALYSIS_INTERVAL,BLOBID_INTERVAL, - rank_info, ScaLBL_Comm, Dm, Np, Nx, Ny, Nz, Lx, Ly, Lz, pBC, beta, err, Map, LocalRestartFile ); + std::shared_ptr analysis_db; + runAnalysis analysis( analysis_db, rank_info, ScaLBL_Comm, Dm, Np, pBC, beta, err, Map ); analysis.createThreads( analysis_method, 4 ); while (timestep < timestepMax && err > tol ) { //if ( rank==0 ) { printf("Running timestep %i (%i MB)\n",timestep+1,(int)(Utilities::getMemoryUsage()/1048576)); } diff --git a/tests/lbpm_dfh_simulator.cpp b/tests/lbpm_dfh_simulator.cpp index d5568b13..c22b6702 100644 --- a/tests/lbpm_dfh_simulator.cpp +++ b/tests/lbpm_dfh_simulator.cpp @@ -60,16 +60,6 @@ int main(int argc, char **argv) PROFILE_START("Main"); Utilities::setErrorHandlers(); - int ANALYSIS_INTERVAL = 1000; - int BLOBID_INTERVAL = 1000; - std::string analysis_method = "independent"; - if (argc >= 3) { - ANALYSIS_INTERVAL = atoi(argv[1]); - BLOBID_INTERVAL = atoi(argv[2]); - } - if (argc >= 4) - analysis_method = std::string(argv[3]); - // Variables that specify the computational domain string FILENAME; int Nx,Ny,Nz,Np; // local sub-domain size @@ -94,7 +84,6 @@ int main(int argc, char **argv) dout=1.f; int RESTART_INTERVAL=20000; - //int ANALYSIS_)INTERVAL=1000; int BLOB_ANALYSIS_INTERVAL=1000; int timestep = 6; @@ -662,15 +651,11 @@ int main(int argc, char **argv) err = 1.0; double sat_w_previous = 1.01; // slightly impossible value! if (rank==0) printf("Begin timesteps: error tolerance is %f \n", tol); - if (rank==0){ - printf("Analysis intervals: (restart) %i, (TCAT) %i, (blobtracking) %i \n",RESTART_INTERVAL,ANALYSIS_INTERVAL,BLOBID_INTERVAL); - } //************ MAIN ITERATION LOOP ***************************************/ PROFILE_START("Loop"); - runAnalysis analysis( RESTART_INTERVAL,ANALYSIS_INTERVAL,BLOBID_INTERVAL, - rank_info, ScaLBL_Comm, Dm, Np, Nx, Ny, Nz, Lx, Ly, Lz, pBC, beta, err, Map, LocalRestartFile ); - analysis.createThreads( analysis_method, 4 ); + std::shared_ptr analysis_db; + runAnalysis analysis( analysis_db, rank_info, ScaLBL_Comm, Dm, Np, pBC, beta, err, Map ); while (timestep < timestepMax && err > tol ) { //if ( rank==0 ) { printf("Running timestep %i (%i MB)\n",timestep+1,(int)(Utilities::getMemoryUsage()/1048576)); } PROFILE_START("Update");