morphinit builds

This commit is contained in:
James E McClure
2018-10-22 14:49:34 -04:00
parent b82b81dfff
commit 26216b23ad
2 changed files with 12 additions and 8 deletions

2
analysis/morphology.cpp Normal file
View File

@@ -0,0 +1,2 @@
#include "analysis/morphology.h"

View File

@@ -520,7 +520,7 @@ void ScaLBL_ColorModel::Run(){
// ************************************************************************
}
void ColorModel::MorphInit(double beta, double morph_delta){
void ScaLBL_ColorModel::MorphInit(double beta, double morph_delta){
double vF = 0.f;
double vS = 0.f;
@@ -528,28 +528,30 @@ void ColorModel::MorphInit(double beta, double morph_delta){
DoubleArray phase(Nx,Ny,Nz);
IntArray phase_label(Nx,Ny,Nz);;
DoubleArray phase_distance(Nx,Ny,Nz);
Array<char> phase_id(Nx,Ny,Nz);
// Basic algorithm to
// 1. Copy phase field to CPU
ScaLBL_CopyToHost(phase, Phi, N*sizeof(double));
ScaLBL_CopyToHost(phase.data(), Phi, N*sizeof(double));
// 2. Identify connected components of phase field -> phase_label
BlobIDstruct new_index;
new_index->first = ComputeGlobalBlobIDs(Nx-2,Ny-2,Nz-2,rank_info,phase,Averages->SDs,vF,vS,phase_label,comm);
new_index->first = ComputeGlobalBlobIDs(Nx-2,Ny-2,Nz-2,Dm->rank_info,phase,Averages->SDs,vF,vS,phase_label,comm);
// only operate on component "0"
for (int k=0; k<Nz; k++){
for (int j=0; j<Ny; j++){
for (int i=0; i<Nx; i++){
int label = phase_label(i,j,k);
if (label == 0 ) phase_label(i,j,k) = 1;
else phase_label(i,j,k) = 0;
if (label == 0 ) phase_id(i,j,k) = 1;
else phase_id(i,j,k) = 0;
}
}
}
// 3. Generate a distance map to the largest object -> phase_distance
CalcDist(phase_distance,phase_label,*Dm);
CalcDist(phase_distance,phase_id,*Dm);
double factor=0.5/Beta;
double temp,value;
double factor=0.5/beta;
for (int k=0; k<Nz; k++){
for (int j=0; j<Ny; j++){
for (int i=0; i<Nx; i++){
@@ -587,7 +589,7 @@ void ColorModel::MorphInit(double beta, double morph_delta){
}
}
// 6. copy back to the device
ScaLBL_CopyToDevice(Phi,phase,N*sizeof(double));
ScaLBL_CopyToDevice(Phi,phase.data(),N*sizeof(double));
// 7. Re-initialize phase field and density
ScaLBL_PhaseField_Init(dvcMap, Phi, Den, Aq, Bq, 0, ScaLBL_Comm->LastExterior(), Np);