tnoflow BC at dynamic top wall if bc_top == 1 - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit e5b95050497b410896ead7a91e9288ec8a91a236
 (DIR) parent 2acbed5f2f251f9407971a685c64bbc5500a4678
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Mon, 12 Jan 2015 13:36:10 +0100
       
       noflow BC at dynamic top wall if bc_top == 1
       
       Diffstat:
         M src/darcy.cuh                       |      22 ++++++++++++++++++++++
         M src/device.cu                       |      15 +++++++++++++++
       
       2 files changed, 37 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/src/darcy.cuh b/src/darcy.cuh
       t@@ -698,6 +698,28 @@ __global__ void setDarcyTopWallPressure(
            }
        }
        
       +// Enforce fixed-flow BC at top wall
       +__global__ void setDarcyTopWallFixedFlow(
       +    const unsigned int wall0_iz,
       +    Float* __restrict__ dev_darcy_p)
       +{
       +    // 3D thread index
       +    const unsigned int x = blockDim.x * blockIdx.x + threadIdx.x;
       +    const unsigned int y = blockDim.y * blockIdx.y + threadIdx.y;
       +    const unsigned int z = blockDim.z * blockIdx.z + threadIdx.z;
       +    
       +    // check that the thread is located at the top boundary
       +    if (x < devC_grid.num[0] &&
       +        y < devC_grid.num[1] &&
       +        z == wall0_iz+1) {
       +
       +        // Write the new pressure the top boundary cells
       +        __syncthreads();
       +        const Float new_pressure = dev_darcy_p[idx(x,y,z-2)];
       +        dev_darcy_p[idx(x,y,z)] = new_pressure;
       +    }
       +}
       +
        
        // Find the cell permeabilities from the Kozeny-Carman equation
        __global__ void findDarcyPermeabilities(
 (DIR) diff --git a/src/device.cu b/src/device.cu
       t@@ -2021,6 +2021,21 @@ __host__ void DEM::startTime()
                                checkForCudaErrorsIter("Post updateDarcySolution",
                                        iter);
        
       +                        if (darcy.bc_top == 1) {
       +                            if (PROFILING == 1)
       +                                startTimer(&kernel_tic);
       +                            setDarcyTopWallFixedFlow
       +                                <<<dimGridFluid, dimBlockFluid>>>
       +                                (wall0_iz, dev_darcy_p);
       +                            cudaThreadSynchronize();
       +                            if (PROFILING == 1)
       +                                stopTimer(&kernel_tic, &kernel_toc,
       +                                        &kernel_elapsed,
       +                                        &t_updateDarcySolution);
       +                            checkForCudaErrorsIter(
       +                                    "Post setDarcyTopWallFixedFlow", iter);
       +                        }
       +
                                // Copy new values to current values
                                if (PROFILING == 1)
                                    startTimer(&kernel_tic);