DFH gradient works (no comm yet)

This commit is contained in:
James E McClure 2018-05-01 11:13:26 -04:00
parent 0c746bf4e3
commit fc365e9aba
2 changed files with 38 additions and 12 deletions

View File

@ -1429,7 +1429,6 @@ extern "C" void ScaLBL_D3Q19_Gradient_DFH(int *neighborList, double *Phi, double
m1 = Phi[nn]; m1 = Phi[nn];
nn = neighborList[n]%Np; nn = neighborList[n]%Np;
m2 = Phi[nn]; m2 = Phi[nn];
printf("m1=%f, m2=%f \n",m1,m2);
nn = neighborList[n+3*Np]%Np; nn = neighborList[n+3*Np]%Np;
m3 = Phi[nn]; m3 = Phi[nn];
nn = neighborList[n+2*Np]%Np; nn = neighborList[n+2*Np]%Np;
@ -1438,7 +1437,7 @@ extern "C" void ScaLBL_D3Q19_Gradient_DFH(int *neighborList, double *Phi, double
m5 = Phi[nn]; m5 = Phi[nn];
nn = neighborList[n+4*Np]%Np; nn = neighborList[n+4*Np]%Np;
m6 = Phi[nn]; m6 = Phi[nn];
/* nn = neighborList[n+7*Np]%Np; nn = neighborList[n+7*Np]%Np;
m7 = Phi[nn]; m7 = Phi[nn];
nn = neighborList[n+6*Np]%Np; nn = neighborList[n+6*Np]%Np;
m8 = Phi[nn]; m8 = Phi[nn];
@ -1462,12 +1461,12 @@ extern "C" void ScaLBL_D3Q19_Gradient_DFH(int *neighborList, double *Phi, double
m17 = Phi[nn]; m17 = Phi[nn];
nn = neighborList[n+16*Np]%Np; nn = neighborList[n+16*Np]%Np;
m18 = Phi[nn]; m18 = Phi[nn];
*/
//............Compute the Color Gradient................................... //............Compute the Color Gradient...................................
//............Compute the wn fluid Gradient................................... //............Compute the wn fluid Gradient...................................
nx = -(m1-m2+0.5*(m7-m8+m9-m10+m11-m12+m13-m14)); nx = (m1-m2+0.5*(m7-m8+m9-m10+m11-m12+m13-m14));
ny = -(m3-m4+0.5*(m7-m8-m9+m10+m15-m16+m17-m18)); ny = (m3-m4+0.5*(m7-m8-m9+m10+m15-m16+m17-m18));
nz = -(m5-m6+0.5*(m11-m12-m13+m14+m15-m16-m17+m18)); nz = (m5-m6+0.5*(m11-m12-m13+m14+m15-m16-m17+m18));
//...........Normalize the Color Gradient................................. //...........Normalize the Color Gradient.................................
// C = sqrt(nx*nx+ny*ny+nz*nz); // C = sqrt(nx*nx+ny*ny+nz*nz);

View File

@ -158,7 +158,6 @@ int main(int argc, char **argv)
Nz += 2; Nz += 2;
int N = Nx*Ny*Nz; int N = Nx*Ny*Nz;
int Np=0; // number of local pore nodes
double *PhaseLabel; double *PhaseLabel;
PhaseLabel = new double[N]; PhaseLabel = new double[N];
//....................................................................... //.......................................................................
@ -167,7 +166,6 @@ int main(int argc, char **argv)
for (i=0;i<Nx;i++){ for (i=0;i<Nx;i++){
n = k*Nx*Ny+j*Nx+i; n = k*Nx*Ny+j*Nx+i;
Dm.id[n]=1; Dm.id[n]=1;
Np++;
// Initialize gradient ColorGrad = (1,2,3) // Initialize gradient ColorGrad = (1,2,3)
double value=double(3*k+2*j+i); double value=double(3*k+2*j+i);
PhaseLabel[n]= value; PhaseLabel[n]= value;
@ -185,13 +183,23 @@ int main(int argc, char **argv)
// LBM variables // LBM variables
if (rank==0) printf ("Set up the neighborlist \n"); if (rank==0) printf ("Set up the neighborlist \n");
int Np=0; // number of local pore nodes
for (k=1;k<Nz-1;k++){
for (j=1;j<Ny-1;j++){
for (i=1;i<Nx-1;i++){
Np++;
}
}
}
Np+=32;
int neighborSize=18*Np*sizeof(int); int neighborSize=18*Np*sizeof(int);
int *neighborList; int *neighborList;
IntArray Map(Nx,Ny,Nz); IntArray Map(Nx,Ny,Nz);
neighborList= new int[18*Np]; neighborList= new int[18*Np];
ScaLBL_Comm.MemoryOptimizedLayoutAA(Map,neighborList,Dm.id,Np); Np = ScaLBL_Comm.MemoryOptimizedLayoutAA(Map,neighborList,Dm.id,Np);
MPI_Barrier(comm); MPI_Barrier(comm);
//......................device distributions................................. //......................device distributions.................................
@ -252,7 +260,20 @@ int main(int argc, char **argv)
int SIZE=3*Np*sizeof(double); int SIZE=3*Np*sizeof(double);
ScaLBL_CopyToHost(&COLORGRAD[0],&ColorGrad[0],SIZE); ScaLBL_CopyToHost(&COLORGRAD[0],&ColorGrad[0],SIZE);
for (k=1;k<Nz-1;k++){
for (j=1;j<Ny-1;j++){
for (i=1;i<Nx-1;i++){
n = k*Nx*Ny+j*Nx+i;
if (Dm.id[n] > 0){
int idx = Map(i,j,k);
printf("%i ",idx);
}
}
printf("\n");
}
printf("-------\n");
}
double CX,CY,CZ; double CX,CY,CZ;
for (k=2;k<Nz-2;k++){ for (k=2;k<Nz-2;k++){
for (j=2;j<Ny-2;j++){ for (j=2;j<Ny-2;j++){
@ -264,8 +285,14 @@ int main(int argc, char **argv)
CY=COLORGRAD[Np+idx]; CY=COLORGRAD[Np+idx];
CZ=COLORGRAD[2*Np+idx]; CZ=COLORGRAD[2*Np+idx];
double error=sqrt((CX-1.0)*(CX-1.0)+(CY-2.0)*(CY-2.0)+ (CZ-3.0)*(CZ-3.0)); double error=sqrt((CX-1.0)*(CX-1.0)+(CY-2.0)*(CY-2.0)+ (CZ-3.0)*(CZ-3.0));
if (error > 1e-8) if (error > 1e-8){
printf("i,j,k=%i,%i,%i: Color gradient=%f,%f,%f \n",i,j,k,CX,CY,CZ); printf("i,j,k=%i,%i,%i; idx=%i: Color gradient=%f,%f,%f \n",i,j,k,idx,CX,CY,CZ);
for (int q=0; q<18; q++){
int nn = neighborList[q*Np+idx]%Np;
double value= PHASE[nn];
printf(" q=%i, nn=%i, value=%f \n",q,nn,value);
}
}
} }
} }
} }