From 91f42ab74f14a44883d2d68e59750f93da1f7018 Mon Sep 17 00:00:00 2001 From: James McClure Date: Tue, 7 Apr 2020 08:45:06 -0400 Subject: [PATCH] condition unpack routines on BC for halo --- common/ScaLBL.cpp | 42 ++++++++++++++++++++------- example/Workflow/ComputeSaturation.py | 37 +++++++++++++++++++++++ 2 files changed, 69 insertions(+), 10 deletions(-) create mode 100755 example/Workflow/ComputeSaturation.py diff --git a/common/ScaLBL.cpp b/common/ScaLBL.cpp index 007a7290..12589ecf 100644 --- a/common/ScaLBL.cpp +++ b/common/ScaLBL.cpp @@ -1497,22 +1497,44 @@ void ScaLBL_Communicator::RecvHalo(double *data){ //................................................................................... ScaLBL_Scalar_Unpack(dvcRecvList_x, recvCount_x,recvbuf_x, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_y, recvCount_y,recvbuf_y, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_z, recvCount_z,recvbuf_z, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_X, recvCount_X,recvbuf_X, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_Y, recvCount_Y,recvbuf_Y, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_Z, recvCount_Z,recvbuf_Z, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_xy, recvCount_xy,recvbuf_xy, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_xY, recvCount_xY,recvbuf_xY, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_Xy, recvCount_Xy,recvbuf_Xy, data, N); ScaLBL_Scalar_Unpack(dvcRecvList_XY, recvCount_XY,recvbuf_XY, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_xz, recvCount_xz,recvbuf_xz, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_xZ, recvCount_xZ,recvbuf_xZ, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_Xz, recvCount_Xz,recvbuf_Xz, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_XZ, recvCount_XZ,recvbuf_XZ, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_yz, recvCount_yz,recvbuf_yz, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_yZ, recvCount_yZ,recvbuf_yZ, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_Yz, recvCount_Yz,recvbuf_Yz, data, N); - ScaLBL_Scalar_Unpack(dvcRecvList_YZ, recvCount_YZ,recvbuf_YZ, data, N); + + if (BoundaryCondition > 0){ + if (kproc != 0){ + //...Packing for z face(6,12,13,16,17)................................ + ScaLBL_Scalar_Unpack(dvcRecvList_z, recvCount_z,recvbuf_z, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_xz, recvCount_xz,recvbuf_xz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_Xz, recvCount_Xz,recvbuf_Xz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_yz, recvCount_yz,recvbuf_yz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_Yz, recvCount_Yz,recvbuf_Yz, data, N); + } + if (kproc != nprocz-1){ + //...Packing for Z face(5,11,14,15,18)................................ + ScaLBL_Scalar_Unpack(dvcRecvList_Z, recvCount_Z,recvbuf_Z, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_xZ, recvCount_xZ,recvbuf_xZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_XZ, recvCount_XZ,recvbuf_XZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_yZ, recvCount_yZ,recvbuf_yZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_YZ, recvCount_YZ,recvbuf_YZ, data, N); + } + } + else { + ScaLBL_Scalar_Unpack(dvcRecvList_z, recvCount_z,recvbuf_z, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_xz, recvCount_xz,recvbuf_xz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_Xz, recvCount_Xz,recvbuf_Xz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_yz, recvCount_yz,recvbuf_yz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_Yz, recvCount_Yz,recvbuf_Yz, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_Z, recvCount_Z,recvbuf_Z, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_xZ, recvCount_xZ,recvbuf_xZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_XZ, recvCount_XZ,recvbuf_XZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_yZ, recvCount_yZ,recvbuf_yZ, data, N); + ScaLBL_Scalar_Unpack(dvcRecvList_YZ, recvCount_YZ,recvbuf_YZ, data, N); + } + //................................................................................... Lock=false; // unlock the communicator after communications complete //................................................................................... diff --git a/example/Workflow/ComputeSaturation.py b/example/Workflow/ComputeSaturation.py new file mode 100755 index 00000000..56a34ece --- /dev/null +++ b/example/Workflow/ComputeSaturation.py @@ -0,0 +1,37 @@ +import sys +import numpy as np +import matplotlib.pylab as plt + +FILENAME=sys.argv[1] +Nx=int(sys.argv[2]) +Ny=int(sys.argv[3]) +Nz=int(sys.argv[4]) + +# read the input image +Output = np.fromfile(FILENAME,dtype = np.uint8) +Output.shape = (Nz,Ny,Nx) + +Oil=np.count_nonzero(Output==1) +Water=np.count_nonzero(Output==2) +Sw=Water/(Oil+Water) + +Porosity=1.0-(Oil+Water)/(Nx*Ny*Nz) + +print(FILENAME,"Porosity=", Porosity) + +SaturationProfile=np.zeros(Nz) +PorosityProfile=np.zeros(Nz) +# Compute saturation slice by slice +for idx in range(0, Nz): + Slice = Output[idx,:,:] + Oil=np.count_nonzero(Slice==1) + Water=np.count_nonzero(Slice==2) + SaturationProfile[idx]=Water/(Oil+Water) + PorosityProfile[idx]=(Oil+Water)/(Nx*Ny) + + +plt.figure() +plt.plot(SaturationProfile) +plt.xlabel('Position (z)') +plt.ylabel('Water Saturation') +plt.show()