Introduction
Introduction Statistics Contact Development Disclaimer Help
tadded Dirichlet and Neumann BC at the dynamic top wall - sphere - GPU-based 3D…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit 4118d84337bcf90f6d7914596e600862afc41c7e
parent 712284f13744c8f0ffdfd0102a2f081b90c3b423
Author: Anders Damsgaard <[email protected]>
Date: Fri, 19 Sep 2014 14:55:05 +0200
added Dirichlet and Neumann BC at the dynamic top wall
Diffstat:
M python/shear-starter.py | 4 ++--
M src/device.cu | 78 ++++++-----------------------…
M src/navierstokes.cuh | 7 ++++++-
3 files changed, 22 insertions(+), 67 deletions(-)
---
diff --git a/python/shear-starter.py b/python/shear-starter.py
t@@ -42,8 +42,8 @@ sim.zeroKinematics()
sim.shear(1.0/20.0)
if fluid:
- sim.num[2] *= 2
- sim.L[2] *= 2.0
+ #sim.num[2] *= 2
+ #sim.L[2] *= 2.0
sim.initFluid(mu = 1.787e-6, p = 600.0e3, hydrostatic = True)
#sim.initFluid(mu = 17.87e-4, p = 1.0e5, hydrostatic = True)
sim.setFluidBottomNoFlow()
diff --git a/src/device.cu b/src/device.cu
t@@ -841,9 +841,10 @@ __host__ void DEM::startTime()
double t_ratio; // ration between time flow in model vs. reality
// Index of dynamic top wall (if it exists)
- unsigned int wall0_iz;
+ unsigned int wall0_iz = 10000000;
// weight of fluid between two cells in z direction
const Float dp_dz = fabs(params.rho_f*params.g[2]*grid.L[2]/grid.num[2]);
+ std::cout << "dp_dz = " << dp_dz << std::endl;
// Write a log file of the number of iterations it took before
// convergence in the fluid solver
t@@ -1184,6 +1185,14 @@ __host__ void DEM::startTime()
dp_dz);
cudaThreadSynchronize();
checkForCudaErrorsIter("Post setNSepsilonAtTopWall", iter);
+#ifdef REPORT_EPSILON
+ std::cout
+ << "\n@@@@@@ TIME STEP " << iter << " @@@@@@"
+ << "\n###### EPSILON setNSepsilonAtTopWall "
+ << "######" << std::endl;
+ transferNSepsilonFromGlobalDeviceMemory();
+ printNSarray(stdout, ns.epsilon, "epsilon");
+#endif
}
// Modulate the pressures at the upper boundary cells
t@@ -1480,45 +1489,6 @@ __host__ void DEM::startTime()
printNSarray(stdout, ns.epsilon, "epsilon");
#endif
- /*smoothing<Float><<<dimGridFluid, dimBlockFluid>>>(
- dev_ns_epsilon,
- ns.bc_bot, ns.bc_top);
- cudaThreadSynchronize();
- checkForCudaErrorsIter("Post smoothing", iter);
-
-#ifdef REPORT_EPSILON
- std::cout << "\n###### JACOBI ITERATION "
- << nijac << " after smoothing(epsilon) ######"
- << std::endl;
- transferNSepsilonFromGlobalDeviceMemory();
- printNSarray(stdout, ns.epsilon, "epsilon");
-#endif
-
- setNSghostNodes<Float><<<dimGridFluid, dimBlockFluid>>>(
- dev_ns_epsilon,
- ns.bc_bot, ns.bc_top);
- cudaThreadSynchronize();
- checkForCudaErrorsIter("Post setNSghostNodesEpsilon(3)",
- iter);
- */
-
- /*if (report_epsilon == 1) {
- std::cout << "\n###### JACOBI ITERATION "
- << nijac
- << " after setNSghostNodesEpsilon(epsilon,3) ######"
- << std::endl;
- transferNSepsilonFromGlobalDeviceMemory();
- printNSarray(stdout, ns.epsilon, "epsilon");
- }*/
-
- // Store old values
- /*copyValues<Float><<<dimGridFluid, dimBlockFluid>>>(
- dev_ns_epsilon,
- dev_ns_epsilon_old);
- cudaThreadSynchronize();
- checkForCudaErrorsIter
- ("Post copyValues (epsilon->epsilon_old)", iter);*/
-
// Perform a single Jacobi iteration
if (PROFILING == 1)
startTimer(&kernel_tic);
t@@ -1529,7 +1499,8 @@ __host__ void DEM::startTime()
dev_ns_f,
ns.bc_bot,
ns.bc_top,
- ns.theta);
+ ns.theta,
+ wall0_iz);
cudaThreadSynchronize();
if (PROFILING == 1)
stopTimer(&kernel_tic, &kernel_toc, &kernel_elapsed,
t@@ -1549,11 +1520,6 @@ __host__ void DEM::startTime()
iter);
}
- // Flip flop: swap new and current array pointers
- /*Float* tmp = dev_ns_epsilon;
- dev_ns_epsilon = dev_ns_epsilon_new;
- dev_ns_epsilon_new = tmp;*/
-
// Copy new values to current values
copyValues<Float><<<dimGridFluid, dimBlockFluid>>>(
dev_ns_epsilon_new,
t@@ -1562,15 +1528,6 @@ __host__ void DEM::startTime()
checkForCudaErrorsIter
("Post copyValues (epsilon_new->epsilon)", iter);
- /*findNormalizedResiduals<<<dimGridFluid, dimBlockFluid>>>(
- dev_ns_epsilon_old,
- dev_ns_epsilon,
- dev_ns_norm,
- ns.bc_bot, ns.bc_top);
- cudaThreadSynchronize();
- checkForCudaErrorsIter("Post findNormalizedResiduals",
- iter);*/
-
#ifdef REPORT_EPSILON
std::cout << "\n###### JACOBI ITERATION "
<< nijac << " after jacobiIterationNS ######"
t@@ -1688,15 +1645,8 @@ __host__ void DEM::startTime()
stopTimer(&kernel_tic, &kernel_toc, &kernel_elapsed,
&t_updateNSvelocityPressure);
checkForCudaErrorsIter("Post updateNSvelocity", iter);
- }
-
- /*std::cout << "\n###### ITERATION "
- << iter << " ######" << std::endl;
- transferNSepsilonFromGlobalDeviceMemory();
- printNSarray(stdout, ns.epsilon, "epsilon");*/
- //transferNSepsilonNewFromGlobalDeviceMemory();
- //printNSarray(stdout, ns.epsilon_new, "epsilon_new");
- }
+ } // end iter % ns.dem == 0
+ } // end navierstokes == 1
if (np > 0) {
// Update particle kinematics
diff --git a/src/navierstokes.cuh b/src/navierstokes.cuh
t@@ -474,6 +474,7 @@ __global__ void setNSepsilonAtTopWall(
// minus the contribution due to the fluid weight.
// p_iz+1 = p_iz - rho_f*g*dz
const Float p = value - dp_dz;
+ printf("%d,%d,%d\tp = %f\n", x,y,z, p);
__syncthreads();
dev_ns_epsilon[cellidx] = p;
t@@ -2669,7 +2670,8 @@ __global__ void jacobiIterationNS(
const Float* __restrict__ dev_ns_f,
const int bc_bot,
const int bc_top,
- const Float theta)
+ const Float theta,
+ const unsigned int wall0_iz)
{
// 3D thread index
const unsigned int x = blockDim.x * blockIdx.x + threadIdx.x;
t@@ -2738,6 +2740,9 @@ __global__ void jacobiIterationNS(
+ dxdx*dydy*(e_zn + e_zp))
/(2.0*(dxdx*dydy + dxdx*dzdz + dydy*dzdz));
+ if (z == wall0_iz)
+ e_new = e;
+
// New value of epsilon in 1D update
//const Float e_new = (e_zp + e_zn - dz*dz*f)/2.0;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.