From d02eff3017bda53b4053897f10e935299e2aa0ed Mon Sep 17 00:00:00 2001 From: Rex Zhe Li Date: Mon, 14 Dec 2020 01:08:59 -0500 Subject: [PATCH] done: add restart and write visfiles for greyscale Color --- common/ScaLBL.h | 2 ++ cpu/GreyscaleColor.cpp | 26 +++++++++++++++++++++++ gpu/GreyscaleColor.cu | 38 ++++++++++++++++++++++++++++++++++ models/GreyscaleColorModel.cpp | 28 +++++++++++++++---------- models/GreyscaleColorModel.h | 2 +- 5 files changed, 84 insertions(+), 12 deletions(-) diff --git a/common/ScaLBL.h b/common/ScaLBL.h index a5efe816..3b129d06 100644 --- a/common/ScaLBL.h +++ b/common/ScaLBL.h @@ -186,6 +186,8 @@ extern "C" void ScaLBL_D3Q19_AAodd_GreyscaleColor(int *d_neighborList, int *Map, double rhoA, double rhoB, double tauA, double tauB, double tauA_eff,double tauB_eff, double alpha, double beta, double Fx, double Fy, double Fz, int strideY, int strideZ, int start, int finish, int Np); +extern "C" void ScaLBL_PhaseField_InitFromRestart(double *Den, double *Aq, double *Bq, int start, int finish, int Np); + // MRT MODEL extern "C" void ScaLBL_D3Q19_AAeven_MRT(double *dist, int start, int finish, int Np, double rlx_setA, double rlx_setB, double Fx, double Fy, double Fz); diff --git a/cpu/GreyscaleColor.cpp b/cpu/GreyscaleColor.cpp index cf01cd84..057c8a7d 100644 --- a/cpu/GreyscaleColor.cpp +++ b/cpu/GreyscaleColor.cpp @@ -1338,6 +1338,32 @@ extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleColor(int *Map, double *dist, doubl } } +extern "C" void ScaLBL_PhaseField_InitFromRestart(double *Den, double *Aq, double *Bq, int start, int finish, int Np){ + int idx; + double nA,nB; + + for (idx=start; idx>>(Den, Aq, Bq, start, finish, Np); + cudaError_t err = cudaGetLastError(); + if (cudaSuccess != err){ + printf("CUDA error in ScaLBL_PhaseField_InitFromRestart: %s \n",cudaGetErrorString(err)); + } +} ////Model-2&3 //extern "C" void ScaLBL_D3Q19_AAeven_GreyscaleColor(int *Map, double *dist, double *Aq, double *Bq, double *Den, // double *Phi,double *GreySolidGrad, double *Poros,double *Perm,double *Vel, diff --git a/models/GreyscaleColorModel.cpp b/models/GreyscaleColorModel.cpp index 9ebad61c..f1b37dad 100644 --- a/models/GreyscaleColorModel.cpp +++ b/models/GreyscaleColorModel.cpp @@ -673,13 +673,17 @@ void ScaLBL_GreyscaleColorModel::Create(){ } void ScaLBL_GreyscaleColorModel::Initialize(){ - - if (rank==0) printf ("Initializing distributions \n"); - ScaLBL_D3Q19_Init(fq, Np); - //ScaLBL_D3Q19_GreyscaleColor_Init(fq, Porosity_dvc, Np); /* * This function initializes model */ + if (rank==0) printf ("Initializing distributions \n"); + ScaLBL_D3Q19_Init(fq, Np); + //ScaLBL_D3Q19_GreyscaleColor_Init(fq, Porosity_dvc, Np); + + if (rank==0) printf ("Initializing phase field \n"); + ScaLBL_PhaseField_Init(dvcMap, Phi, Den, Aq, Bq, 0, ScaLBL_Comm->LastExterior(), Np); + ScaLBL_PhaseField_Init(dvcMap, Phi, Den, Aq, Bq, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np); + if (Restart == true){ if (rank==0){ printf("Reading restart file! \n"); @@ -738,11 +742,11 @@ void ScaLBL_GreyscaleColorModel::Initialize(){ ScaLBL_DeviceBarrier(); MPI_Barrier(comm); - } - if (rank==0) printf ("Initializing phase field \n"); - ScaLBL_PhaseField_Init(dvcMap, Phi, Den, Aq, Bq, 0, ScaLBL_Comm->LastExterior(), Np); - ScaLBL_PhaseField_Init(dvcMap, Phi, Den, Aq, Bq, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np); + if (rank==0) printf ("Initializing phase field from Restart\n"); + ScaLBL_PhaseField_InitFromRestart(Den, Aq, Bq, 0, ScaLBL_Comm->LastExterior(), Np); + ScaLBL_PhaseField_InitFromRestart(Den, Aq, Bq, ScaLBL_Comm->FirstInterior(), ScaLBL_Comm->LastInterior(), Np); + } // establish reservoirs for external bC if (BoundaryCondition == 1 || BoundaryCondition == 2 || BoundaryCondition == 3 || BoundaryCondition == 4 ){ @@ -794,6 +798,8 @@ void ScaLBL_GreyscaleColorModel::Run(){ double delta_volume_target = 0.0; //TODO -------- For temporary use - should be included in the analysis framework later ------------- + int visualization_interval = 50000; + int restart_interval = 100000; if (analysis_db->keyExists( "visualization_interval" )){ visualization_interval = analysis_db->getScalar( "visualization_interval" ); } @@ -1482,11 +1488,11 @@ void ScaLBL_GreyscaleColorModel::WriteVisFiles(){ PhaseVar->type = IO::VariableType::VolumeVariable; PhaseVar->dim = 1; PhaseVar->data.resize(Dm->Nx-2,Dm->Ny-2,Dm->Nz-2); - visData[0].vars.push_back(PaseVar); + visData[0].vars.push_back(PhaseVar); ASSERT(visData[0].vars[0]->name=="Phase"); Array& PhaseData = visData[0].vars[0]->data; - ScaLBL_Comm->RegularLayout(Map,Phase,DataTemp); + ScaLBL_CopyToHost(DataTemp.data(), Phi, sizeof(double)*Nx*Ny*Nz); fillData.copy(DataTemp,PhaseData); } @@ -1546,7 +1552,7 @@ void ScaLBL_GreyscaleColorModel::WriteVisFiles(){ ASSERT(visData[0].vars[5]->name=="SignDist"); Array& SignData = visData[0].vars[5]->data; - fillData.copy(Averages.SDs,SignData); + fillData.copy(Averages->SDs,SignData); } if (vis_db->getWithDefault( "write_silo", true )){ diff --git a/models/GreyscaleColorModel.h b/models/GreyscaleColorModel.h index 1ba92c8a..8c8b4eee 100644 --- a/models/GreyscaleColorModel.h +++ b/models/GreyscaleColorModel.h @@ -90,6 +90,6 @@ private: double MorphInit(const double beta, const double morph_delta); double SeedPhaseField(const double seed_water_in_oil); double MorphOpenConnected(double target_volume_change); - double WriteVisFiles(); + void WriteVisFiles(); };