Moving runAnalysis to database input
This commit is contained in:
parent
98bbdd2458
commit
6ab72207c8
@ -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<Database> 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<int>( "restart_interval" );
|
||||
d_analysis_interval = db->getScalar<int>( "analysis_interval" );
|
||||
d_blobid_interval = db->getScalar<int>( "blobid_interval" );
|
||||
d_visualization_interval = db->getScalar<int>( "visualization_interval" );
|
||||
auto restart_file = db->getScalar<std::string>( "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<IO::DomainMesh>( Dm.rank_info,Nx-2,Ny-2,Nz-2,Lx,Ly,Lz );
|
||||
d_meshData[0].mesh = std::make_shared<IO::DomainMesh>( Dm.rank_info,Dm.Nx-2,Dm.Ny-2,Dm.Nz-2,Dm.Lx,Dm.Ly,Dm.Lz );
|
||||
auto PhaseVar = std::make_shared<IO::Variable>();
|
||||
auto PressVar = std::make_shared<IO::Variable>();
|
||||
auto SignDistVar = std::make_shared<IO::Variable>();
|
||||
@ -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<int>( "N_threads", 4 );
|
||||
auto method = db->getWithDefault<std::string>( "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;
|
||||
|
@ -23,10 +23,10 @@ class runAnalysis
|
||||
public:
|
||||
|
||||
//! Constructor
|
||||
runAnalysis( int restart_interval, int analysis_interval, int blobid_interval,
|
||||
runAnalysis( std::shared_ptr<Database> 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;
|
||||
|
@ -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"
|
||||
}
|
||||
|
||||
|
||||
|
@ -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<Database> 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)); }
|
||||
|
@ -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<Database> 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)); }
|
||||
|
@ -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<Database> 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");
|
||||
|
Loading…
Reference in New Issue
Block a user