Introduction
Introduction Statistics Contact Development Disclaimer Help
twrite cell face velocities to files - sphere - GPU-based 3D discrete element m…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit e07f904c139196389023592dc85028e8cd657a3b
parent 0c32bfa91146574058a5c91800efebde8e957ec0
Author: Anders Damsgaard <[email protected]>
Date: Thu, 26 Jun 2014 11:17:19 +0200
write cell face velocities to files
Diffstat:
M python/shortening.py | 6 +++---
M src/datatypes.h | 6 +++---
M src/file_io.cpp | 9 ++++++---
M src/navierstokes.cpp | 12 ++++++------
M src/navierstokes.cuh | 27 ++++++++++++++++++++-------
M tests/cfd_inclined.py | 3 ++-
M tests/cfd_tests_neumann.py | 2 ++
7 files changed, 42 insertions(+), 23 deletions(-)
---
diff --git a/python/shortening.py b/python/shortening.py
t@@ -108,7 +108,7 @@ sim = sphere.sim('shortening-relaxation', nw=1)
sim.readlast()
sim.sid = 'shortening'
sim.cleanup()
-sim.initTemporal(current=0.0, total=20.0, file_dt = 0.01, epsilon=0.01)
+sim.initTemporal(current=0.0, total=20.0, file_dt = 0.01, epsilon=0.07)
# set colors again
y_min = numpy.min(sim.x[:,1])
t@@ -165,8 +165,8 @@ sim.gamma_wt[0] = 0.0
# Particle parameters
sim.mu_s[0] = 0.5
sim.mu_d[0] = 0.5
-sim.gamma_n[0] = 0.0
-sim.gamma_t[0] = 0.0
+sim.gamma_n[0] = 100.0
+sim.gamma_t[0] = 100.0
# push down upper wall
compressional_strain = 0.5
diff --git a/src/datatypes.h b/src/datatypes.h
t@@ -114,9 +114,9 @@ struct NavierStokes {
Float dx, dy, dz; // Cell length in each dim
Float* p; // Cell hydraulic pressures
Float3* v; // Cell fluid velocity
- //Float* v_x; // Fluid velocity in staggered grid
- //Float* v_y; // Fluid velocity in staggered grid
- //Float* v_z; // Fluid velocity in staggered grid
+ Float* v_x; // Fluid velocity in staggered grid
+ Float* v_y; // Fluid velocity in staggered grid
+ Float* v_z; // Fluid velocity in staggered grid
//Float3* v_p; // Predicted fluid velocity
//Float* v_p_x; // Predicted fluid velocity in staggered grid
//Float* v_p_y; // Predicted fluid velocity in staggered grid
diff --git a/src/file_io.cpp b/src/file_io.cpp
t@@ -468,9 +468,12 @@ void DEM::writebin(const char *target)
for (y=0; y<ns.ny; y++) {
for (x=0; x<ns.nx; x++) {
i = idx(x,y,z);
- ofs.write(as_bytes(ns.v[i].x), sizeof(Float));
- ofs.write(as_bytes(ns.v[i].y), sizeof(Float));
- ofs.write(as_bytes(ns.v[i].z), sizeof(Float));
+ //ofs.write(as_bytes(ns.v[i].x), sizeof(Float));
+ //ofs.write(as_bytes(ns.v[i].y), sizeof(Float));
+ //ofs.write(as_bytes(ns.v[i].z), sizeof(Float));
+ ofs.write(as_bytes(ns.v_x[i]), sizeof(Float));
+ ofs.write(as_bytes(ns.v_y[i]), sizeof(Float));
+ ofs.write(as_bytes(ns.v_z[i]), sizeof(Float));
ofs.write(as_bytes(ns.p[i]), sizeof(Float));
ofs.write(as_bytes(ns.phi[i]), sizeof(Float));
ofs.write(as_bytes(ns.dphi[i]), sizeof(Float));
diff --git a/src/navierstokes.cpp b/src/navierstokes.cpp
t@@ -25,9 +25,9 @@ void DEM::initNSmem()
ns.p = new Float[ncells]; // hydraulic pressure
ns.v = new Float3[ncells]; // hydraulic velocity
- //ns.v_x = new Float[ncells_st]; // hydraulic velocity in staggered grid
- //ns.v_y = new Float[ncells_st]; // hydraulic velocity in staggered grid
- //ns.v_z = new Float[ncells_st]; // hydraulic velocity in staggered grid
+ ns.v_x = new Float[ncells_st]; // hydraulic velocity in staggered grid
+ ns.v_y = new Float[ncells_st]; // hydraulic velocity in staggered grid
+ ns.v_z = new Float[ncells_st]; // hydraulic velocity in staggered grid
//ns.v_p = new Float3[ncells]; // predicted hydraulic velocity
//ns.v_p_x = new Float[ncells_st]; // pred. hydraulic velocity in st. grid
//ns.v_p_y = new Float[ncells_st]; // pred. hydraulic velocity in st. grid
t@@ -61,9 +61,9 @@ void DEM::freeNSmem()
{
delete[] ns.p;
delete[] ns.v;
- //delete[] ns.v_x;
- //delete[] ns.v_y;
- //delete[] ns.v_z;
+ delete[] ns.v_x;
+ delete[] ns.v_y;
+ delete[] ns.v_z;
//delete[] ns.v_p;
//delete[] ns.v_p_x;
//delete[] ns.v_p_y;
diff --git a/src/navierstokes.cuh b/src/navierstokes.cuh
t@@ -177,6 +177,9 @@ void DEM::transferNSfromGlobalDeviceMemory(int statusmsg)
cudaMemcpy(ns.p, dev_ns_p, memSizeF, cudaMemcpyDeviceToHost);
checkForCudaErrors("In transferNSfromGlobalDeviceMemory, dev_ns_p", 0);
cudaMemcpy(ns.v, dev_ns_v, memSizeF*3, cudaMemcpyDeviceToHost);
+ cudaMemcpy(ns.v_x, dev_ns_v_x, memSizeF, cudaMemcpyDeviceToHost);
+ cudaMemcpy(ns.v_y, dev_ns_v_y, memSizeF, cudaMemcpyDeviceToHost);
+ cudaMemcpy(ns.v_z, dev_ns_v_z, memSizeF, cudaMemcpyDeviceToHost);
//cudaMemcpy(ns.v_p, dev_ns_v_p, memSizeF*3, cudaMemcpyDeviceToHost);
cudaMemcpy(ns.phi, dev_ns_phi, memSizeF, cudaMemcpyDeviceToHost);
cudaMemcpy(ns.dphi, dev_ns_dphi, memSizeF, cudaMemcpyDeviceToHost);
t@@ -714,7 +717,7 @@ __global__ void setNSghostNodesFace(
//dev_scalarfield_z[vidx(x,y,-1)] = val_z; // Neumann free sli…
dev_scalarfield_x[vidx(x,y,-1)] = val_x; // Neumann free slip …
dev_scalarfield_y[vidx(x,y,-1)] = val_y; // Neumann free slip …
- dev_scalarfield_z[vidx(x,y,-1)] = 0.0; // Neumann free slip -z
+ dev_scalarfield_z[vidx(x,y,-1)] = 0.0; // Neumann free slip …
}
if (z == 0 && bc_bot == 2) {
//dev_scalarfield_x[vidx(x,y,-1)] = val_x; // Neumann no slip …
t@@ -2285,8 +2288,23 @@ __global__ void findPredNSvelocities(
+ porosity_term
+ advection_term;
+ //// Neumann BCs
+
+ // Free slip
+ if ((z == 0 && bc_bot == 1) || (z == nz-1 && bc_top == 1))
+ v_p.z = v.z;
+
+ // No slip
+ if ((z == 0 && bc_bot == 2) || (z == nz-1 && bc_top == 2)) {
+ v_p.x = 0.0;
+ v_p.y = 0.0;
+ v_p.z = 0.0;
+ }
+
+
#ifdef REPORT_V_P_COMPONENTS
// Report velocity components to stdout for debugging
+ if (z==0)
printf("\n[%d,%d,%d]"
"\tv_p = %+e %+e %+e\n"
"\tpres = %+e %+e %+e\n"
t@@ -2294,7 +2312,7 @@ __global__ void findPredNSvelocities(
"\tdiff = %+e %+e %+e\n"
"\tgrav = %+e %+e %+e\n"
"\tporos = %+e %+e %+e\n"
- "\tadv = %+e %+e %+e\n"
+ "\tadv = %+e %+e %+e\n",
x, y, z,
v_p.x, v_p.y, v_p.z,
pressure_term.x, pressure_term.y, pressure_term.z,
t@@ -2305,11 +2323,6 @@ __global__ void findPredNSvelocities(
advection_term.x, advection_term.y, advection_term.z);
#endif
- // Enforce Neumann BC if specified
- if ((z == 0 && bc_bot == 1) || (z == nz-1 && bc_top == 1))
- v_p.z = v.z;
- //v_p.z = 0.0;
-
// Save the predicted velocity
__syncthreads();
dev_ns_v_p_x[fidx] = v_p.x;
diff --git a/tests/cfd_inclined.py b/tests/cfd_inclined.py
t@@ -9,7 +9,8 @@ orig.defineWorldBoundaries([0.3, 0.3, 0.3], dx = 0.06)
orig.initFluid(mu=8.9e-4) # inviscid "fluids" (mu=0) won't work!
#orig.initTemporal(total = 0.5, file_dt = 0.05, dt = 1.0e-4)
orig.initTemporal(total = 1.0e-0, file_dt = 1.0e-1, dt = 1.0e-3)
-orig.bc_bot[0] = 2 # No-flow, no slip BC at bottom (Neumann)
+orig.bc_bot[0] = 1 # No-flow, free slip BC at bottom (Neumann)
+#orig.bc_bot[0] = 2 # No-flow, no slip BC at bottom (Neumann)
#orig.bc_top[0] = 1 # No-flow, free slip BC at top (Neumann)
angle = 10.0 # slab inclination in degrees
diff --git a/tests/cfd_tests_neumann.py b/tests/cfd_tests_neumann.py
t@@ -10,6 +10,7 @@ print('### CFD tests - Dirichlet/Neumann BCs ###')
print('''# Neumann bottom, Dirichlet top BC.
# No gravity, no pressure gradients => no flow''')
+'''
orig = sphere.sim("neumann", fluid = True)
cleanup(orig)
orig.defaultParams(mu_s = 0.4, mu_d = 0.4)
t@@ -37,6 +38,7 @@ else:
print(numpy.mean(py.v_f))
print(numpy.max(py.v_f))
raise Exception("Failed")
+'''
print('''# Neumann bottom, Dirichlet top BC.
# Gravity, pressure gradients => transient flow''')
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.