refactor lbpm_morph_pp

This commit is contained in:
James McClure 2019-10-09 12:11:51 -04:00
parent 27765d78a2
commit 80a77b9c3d

View File

@ -32,19 +32,13 @@ int main(int argc, char **argv)
//....................................................................... //.......................................................................
// Reading the domain information file // Reading the domain information file
//....................................................................... //.......................................................................
int nprocx, nprocy, nprocz, nx, ny, nz, nspheres; int n, nprocx, nprocy, nprocz, nx, ny, nz;
double Lx, Ly, Lz;
int i,j,k,n;
int BC=0;
// char fluidValue,solidValue;
int MAXTIME=1000;
int READ_FROM_BLOCK=0;
char LocalRankString[8]; char LocalRankString[8];
char LocalRankFilename[40]; char LocalRankFilename[40];
char FILENAME[128];
string filename; string filename;
double Rcrit_new, SW; double SW,Rcrit_new;
if (argc > 1){ if (argc > 1){
filename=argv[1]; filename=argv[1];
Rcrit_new=0.f; Rcrit_new=0.f;
@ -61,6 +55,7 @@ int main(int argc, char **argv)
auto ReadValues = domain_db->getVector<int>( "ReadValues" ); auto ReadValues = domain_db->getVector<int>( "ReadValues" );
auto WriteValues = domain_db->getVector<int>( "WriteValues" ); auto WriteValues = domain_db->getVector<int>( "WriteValues" );
SW = domain_db->getScalar<double>("Sw"); SW = domain_db->getScalar<double>("Sw");
auto READFILE = domain_db->getScalar<std::string>( "Filename" );
// Generate the NWP configuration // Generate the NWP configuration
//if (rank==0) printf("Initializing morphological distribution with critical radius %f \n", Rcrit); //if (rank==0) printf("Initializing morphological distribution with critical radius %f \n", Rcrit);
@ -77,21 +72,15 @@ int main(int argc, char **argv)
int N = (nx+2)*(ny+2)*(nz+2); int N = (nx+2)*(ny+2)*(nz+2);
std::shared_ptr<Domain> Dm (new Domain(domain_db,comm)); std::shared_ptr<Domain> Dm (new Domain(domain_db,comm));
std::shared_ptr<Domain> Mask (new Domain(domain_db,comm));
// std::shared_ptr<Domain> Dm (new Domain(nx,ny,nz,rank,nprocx,nprocy,nprocz,Lx,Ly,Lz,BC)); // std::shared_ptr<Domain> Dm (new Domain(nx,ny,nz,rank,nprocx,nprocy,nprocz,Lx,Ly,Lz,BC));
for (n=0; n<N; n++) Dm->id[n]=1; for (n=0; n<N; n++) Dm->id[n]=1;
Dm->CommInit(); Dm->CommInit();
signed char *id; signed char *id;
signed char *id_connected;
id = new signed char [N]; id = new signed char [N];
id_connected = new signed char [N]; Mask->Decomp(READFILE);
sprintf(LocalRankFilename,"ID.%05i",rank); Mask->CommInit();
size_t readID;
FILE *IDFILE = fopen(LocalRankFilename,"rb");
if (IDFILE==NULL) ERROR("Error opening file: ID.xxxxx");
readID=fread(id,1,N,IDFILE);
if (readID != size_t(N)) printf("lbpm_morph_pp: Error reading ID (rank=%i) \n",rank);
fclose(IDFILE);
nx+=2; ny+=2; nz+=2; nx+=2; ny+=2; nz+=2;
// Generate the signed distance map // Generate the signed distance map
@ -105,6 +94,7 @@ int main(int argc, char **argv)
for (int j=0; j<ny; j++){ for (int j=0; j<ny; j++){
for (int i=0; i<nx; i++){ for (int i=0; i<nx; i++){
n=k*nx*ny+j*nx+i; n=k*nx*ny+j*nx+i;
id[n] = Mask->id[n];
if (id[n] == 1){ if (id[n] == 1){
phase(i,j,k) = 1.0; phase(i,j,k) = 1.0;
} }
@ -120,8 +110,11 @@ int main(int argc, char **argv)
for (int i=0;i<nx;i++){ for (int i=0;i<nx;i++){
int n = k*nx*ny+j*nx+i; int n = k*nx*ny+j*nx+i;
// Initialize the solid phase // Initialize the solid phase
if (id[n] > 0) id_solid(i,j,k) = 1; if (Mask->id[n] > 0){
else id_solid(i,j,k) = 0; id_solid(i,j,k) = 1;
}
else
id_solid(i,j,k) = 0;
} }
} }
} }
@ -237,6 +230,22 @@ int main(int argc, char **argv)
FILE *ID = fopen(LocalRankFilename,"wb"); FILE *ID = fopen(LocalRankFilename,"wb");
fwrite(id,1,N,ID); fwrite(id,1,N,ID);
fclose(ID); fclose(ID);
// write the geometry to a single file
for (int k=0;k<nz;k++){
for (int j=0;j<ny;j++){
for (int i=0;i<nx;i++){
int n = k*nx*ny+j*nx+i;
Mask->id[n] = id[n];
}
}
}
MPI_Barrier(comm);
sprintf(FILENAME,READFILE.c_str());
sprintf(FILENAME+strlen(FILENAME),".morphdrain.raw");
if (rank==0) printf("Writing file to: %s \n", FILENAME);
Mask->AggregateLabels(FILENAME);
} }
MPI_Barrier(comm); MPI_Barrier(comm);