From 5e3c42c22e674f281e24b003a8f216b2aa8010c4 Mon Sep 17 00:00:00 2001 From: Anna Wellmann <a.wellmann@tu-braunschweig.de> Date: Tue, 19 Oct 2021 11:03:47 +0200 Subject: [PATCH] Fix bug in getGridInterfaceIndicesBorderBulk for fine to coarse --- src/gpu/GridGenerator/grid/GridImp.cu | 47 ++++++++++++++++++++------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/src/gpu/GridGenerator/grid/GridImp.cu b/src/gpu/GridGenerator/grid/GridImp.cu index 2a2159188..ae317411c 100644 --- a/src/gpu/GridGenerator/grid/GridImp.cu +++ b/src/gpu/GridGenerator/grid/GridImp.cu @@ -1951,13 +1951,12 @@ void GridImp::getGridInterfaceIndicesFCBorderBulk(uint *iCellFccBorder, uint *&i uint *iCellFccAll = iCellFccBorder; uint *iCellFcfAll = iCellFcfBorder; - uint intFCKfcAll = this->gridInterface->fc.numberOfEntries; std::vector<uint> iCellFccBorderVector; std::vector<uint> iCellFccBulkVector; std::vector<uint> iCellFcfBorderVector; std::vector<uint> iCellFcfBulkVector; - for (uint i = 0; i < intFCKfcAll; i++) + for (uint i = 0; i < this->gridInterface->fc.numberOfEntries; i++) if (isSparseIndexInFluidNodeIndicesBorder(iCellFccAll[i])) { iCellFccBorderVector.push_back(iCellFccAll[i]); iCellFcfBorderVector.push_back(iCellFcfAll[i]); @@ -1968,7 +1967,7 @@ void GridImp::getGridInterfaceIndicesFCBorderBulk(uint *iCellFccBorder, uint *&i intFCBorderKfc = (uint)iCellFccBorderVector.size(); intFCBulkKfc = (uint)iCellFccBulkVector.size(); - iCellFccBulk = iCellFccBorder + intFCBorderKfc; + iCellFccBulk = iCellFccBorder + intFCBorderKfc; iCellFcfBulk = iCellFcfBorder + intFCBorderKfc; for (uint i = 0; i < (uint)iCellFccBorderVector.size(); i++) { @@ -1982,31 +1981,33 @@ void GridImp::getGridInterfaceIndicesFCBorderBulk(uint *iCellFccBorder, uint *&i } void GridImp::getGridInterfaceIndicesCFBorderBulk(uint *iCellCfcBorder, uint *&iCellCfcBulk, uint *iCellCffBorder, - uint *&iCellCffBulk, uint &intCFBorderKfc, uint &intCFBulkKfc, + uint *&iCellCffBulk, uint &intCFBorderKcf, uint &intCFBulkKcf, uint *neighborX_SP, uint *neighborY_SP, uint *neighborZ_SP, int level) const { // reorder the array of CFC/CFF indices and return pointers and sizes of the new subarrays uint *iCellCfcAll = iCellCfcBorder; uint *iCellCffAll = iCellCffBorder; - uint intCFKfcAll = this->gridInterface->fc.numberOfEntries; std::vector<uint> iCellCfcBorderVector; std::vector<uint> iCellCfcBulkVector; std::vector<uint> iCellCffBorderVector; std::vector<uint> iCellCffBulkVector; + std::vector<uint> sparseIndexOld; + uint sparseIndexOfICellBSW; - for (uint i = 0; i < intCFKfcAll; i++) { + for (uint i = 0; i < this->gridInterface->cf.numberOfEntries; i++) { sparseIndexOfICellBSW = iCellCfcAll[i]; + sparseIndexOld.push_back(sparseIndexOfICellBSW); - if (isSparseIndexInFluidNodeIndicesBorder(sparseIndexOfICellBSW) + if (i>1000/*isSparseIndexInFluidNodeIndicesBorder(sparseIndexOfICellBSW) || isSparseIndexInFluidNodeIndicesBorder(neighborX_SP[sparseIndexOfICellBSW]) || isSparseIndexInFluidNodeIndicesBorder(neighborY_SP[sparseIndexOfICellBSW]) || isSparseIndexInFluidNodeIndicesBorder(neighborZ_SP[sparseIndexOfICellBSW]) || isSparseIndexInFluidNodeIndicesBorder(neighborY_SP[neighborX_SP[sparseIndexOfICellBSW]]) || isSparseIndexInFluidNodeIndicesBorder(neighborZ_SP[neighborX_SP[sparseIndexOfICellBSW]]) || isSparseIndexInFluidNodeIndicesBorder(neighborZ_SP[neighborY_SP[sparseIndexOfICellBSW]]) - || isSparseIndexInFluidNodeIndicesBorder(neighborZ_SP[neighborY_SP[neighborX_SP[sparseIndexOfICellBSW]]])) { + || isSparseIndexInFluidNodeIndicesBorder(neighborZ_SP[neighborY_SP[neighborX_SP[sparseIndexOfICellBSW]]])*/) { iCellCfcBorderVector.push_back(iCellCfcAll[i]); iCellCffBorderVector.push_back(iCellCffAll[i]); @@ -2016,10 +2017,10 @@ void GridImp::getGridInterfaceIndicesCFBorderBulk(uint *iCellCfcBorder, uint *&i } } - intCFBorderKfc = (uint)iCellCfcBorderVector.size(); - intCFBulkKfc = (uint)iCellCfcBulkVector.size(); - iCellCfcBulk = iCellCfcBorder + intCFBorderKfc; - iCellCffBulk = iCellCffBorder + intCFBorderKfc; + intCFBorderKcf = (uint)iCellCfcBorderVector.size(); + intCFBulkKcf = (uint)iCellCfcBulkVector.size(); + iCellCfcBulk = iCellCfcBorder + intCFBorderKcf; + iCellCffBulk = iCellCffBorder + intCFBorderKcf; for (uint i = 0; i < (uint)iCellCfcBorderVector.size(); i++) { iCellCfcBorder[i] = iCellCfcBorderVector[i]; @@ -2029,6 +2030,28 @@ void GridImp::getGridInterfaceIndicesCFBorderBulk(uint *iCellCfcBorder, uint *&i iCellCfcBulk[i] = iCellCfcBulkVector[i]; iCellCffBulk[i] = iCellCffBulkVector[i]; } + + uint inBorder=0; + uint inBulk=0; + bool notFound; + for (auto x : sparseIndexOld) { + notFound = true; + for (uint i = 0; i < intCFBorderKcf; i++) + if (iCellCfcBorder[i] == x) { + inBorder++; + notFound = false; + break; + } + for (uint i = 0; i < intCFBulkKcf; i++) + if (iCellCfcBulk[i] == x) { + inBulk++; + notFound = false; + break; + } + if (notFound) + std::cout << x << std::endl; + } + } bool GridImp::isSparseIndexInFluidNodeIndicesBorder(uint &sparseIndex) const -- GitLab