diff --git a/examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h b/examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h index d5953bd3c2f5b3a2c0305c08cebb253501b624e9..926f8053b8df24c719c33bbbe4ac7e6a29a213b9 100644 --- a/examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h +++ b/examples/hamilton-jacobi-parallel/tnlParallelEikonalSolver_impl.h @@ -1096,13 +1096,13 @@ void tnlParallelEikonalSolver<SchemeHost, SchemeDevice, Device, double, int>::ru { tmp = 0; int centreGID = (blockDim.y*blockIdx.y + (blockDim.y>>1))*(blockDim.x*gridDim.x) + blockDim.x*blockIdx.x + (blockDim.x>>1); - if(this->unusedCell_cuda[centreGID] == 0) + if(this->unusedCell_cuda[centreGID] == 0 || boundaryCondition == 0) tmp = 1; } __syncthreads(); - if(!tmp && (u[0]*u[l] <= 0.0)) - atomicMax( &tmp, 1); + /*if(!tmp && (u[0]*u[l] <= 0.0)) + atomicMax( &tmp, 1);*/ __syncthreads(); if(tmp !=1) @@ -1294,8 +1294,9 @@ void /*tnlParallelEikonalSolver<SchemeHost, SchemeDevice, Device, double, int>:: atomicMax(&newSubgridValue, INT_MAX); atomicMax(&boundary[boundary_index], 1); cudaSolver->work_u_cuda[gid] = u_cmp; + u=u_cmp; } - __threadfence(); + //__threadfence(); if(threadIdx.y == 0 && (blockIdx.y != 0)/* && (cudaSolver->currentStep & 1)*/) { u_cmp = cudaSolver->work_u_cuda[gid - blockDim.x*gridDim.x]; @@ -1622,7 +1623,7 @@ void /*tnlParallelEikonalSolver<SchemeHost, SchemeDevice, Device, double, int>:: int i = blockIdx.y * gridDim.x + blockIdx.x; int l = threadIdx.y * blockDim.x + threadIdx.x; - if(caller->getSubgridValueCUDA(i) != INT_MAX) + if(caller->getSubgridValueCUDA(i) != INT_MAX && caller->getSubgridValueCUDA(i) >= 0) { caller->getSubgridCUDA(i,caller, &u[l]); int bound = caller->getBoundaryConditionCUDA(i); @@ -1714,6 +1715,16 @@ void /*tnlParallelEikonalSolver<SchemeHost, SchemeDevice, Device, double, int>:: caller->updateSubgridCUDA(i,caller, &u[l]); __syncthreads(); } + /*if( bound ) + { + caller->runSubgridCUDA(15,u,i); + __syncthreads(); + //caller->insertSubgridCUDA(u[l],i); + //__syncthreads(); + //caller->getSubgridCUDA(i,caller, &u[l]); + caller->updateSubgridCUDA(i,caller, &u[l]); + __syncthreads(); + }*/ if(l==0)