Introduction
Introduction Statistics Contact Development Disclaimer Help
tuse central differences for porosity change - sphere - GPU-based 3D discrete e…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit ef0c5c667eeab770245e87f4d4664aacee5c9081
parent 5cf55424f3bd21f92b22998c12cccb14a42c807b
Author: Anders Damsgaard <[email protected]>
Date: Wed, 26 Nov 2014 11:31:44 +0100
use central differences for porosity change
Diffstat:
M src/darcy.cuh | 49 ++++++++++++++++++-----------…
M src/device.cu | 8 ++++----
2 files changed, 32 insertions(+), 25 deletions(-)
---
diff --git a/src/darcy.cuh b/src/darcy.cuh
t@@ -277,10 +277,10 @@ __global__ void findDarcyPorosities(
const unsigned int np, // in
const Float c_phi, // in
Float* __restrict__ dev_darcy_phi, // in + out
- //Float* __restrict__ dev_darcy_dphi) // in + out
- Float* __restrict__ dev_darcy_dphi, // in + out
+ Float* __restrict__ dev_darcy_dphi) // in + out
+ //Float* __restrict__ dev_darcy_dphi, // in + out
//Float* __restrict__ dev_darcy_dphi) // out
- Float* __restrict__ dev_darcy_div_v_p) // out
+ //Float* __restrict__ dev_darcy_div_v_p) // out
{
// 3D thread index
const unsigned int x = blockDim.x * blockIdx.x + threadIdx.x;
t@@ -434,8 +434,14 @@ __global__ void findDarcyPorosities(
//phi = fmin(0.99, fmax(0.01, void_volume/cell_volume));
//phi = void_volume/cell_volume;
- /*Float dphi = phi - phi_0;*/
- Float dphi = phi_new - phi;
+ // Backwards Euler
+ //Float dphi = phi - phi_0;
+
+ // Forwards Euler
+ //Float dphi = phi_new - phi;
+
+ // Central difference
+ Float dphi = 0.5*(phi_new - phi_0);
/*if (iteration == 0)
dphi = 0.0;*/
t@@ -454,7 +460,7 @@ __global__ void findDarcyPorosities(
dev_darcy_dphi[cellidx] += dphi*c_phi;
//dev_darcy_vp_avg[cellidx] = v_avg;
//dev_darcy_d_avg[cellidx] = d_avg;
- dev_darcy_div_v_p[cellidx] = dot_epsilon_kk*c_phi;
+ //dev_darcy_div_v_p[cellidx] = dot_epsilon_kk*c_phi;
/*printf("\n%d,%d,%d: findDarcyPorosities\n"
"\tphi = %f\n"
t@@ -475,7 +481,7 @@ __global__ void findDarcyPorosities(
#ifdef CHECK_FLUID_FINITE
(void)checkFiniteFloat("phi", x, y, z, phi);
(void)checkFiniteFloat("dphi", x, y, z, dphi);
- (void)checkFiniteFloat("dot_epsilon_kk", x, y, z, dot_epsilon_kk);
+ //(void)checkFiniteFloat("dot_epsilon_kk", x, y, z, dot_epsilon_kk…
//(void)checkFiniteFloat3("v_avg", x, y, z, v_avg);
//(void)checkFiniteFloat("d_avg", x, y, z, d_avg);
#endif
t@@ -857,7 +863,7 @@ __global__ void firstDarcySolution(
const Float* __restrict__ dev_darcy_k, // in
const Float* __restrict__ dev_darcy_phi, // in
const Float* __restrict__ dev_darcy_dphi, // in
- const Float* __restrict__ dev_darcy_div_v_p, // in
+ //const Float* __restrict__ dev_darcy_div_v_p, // in
const Float3* __restrict__ dev_darcy_grad_k, // in
const Float beta_f, // in
const Float mu, // in
t@@ -903,8 +909,8 @@ __global__ void firstDarcySolution(
const Float k = dev_darcy_k[cellidx];
const Float3 grad_k = dev_darcy_grad_k[cellidx];
const Float phi = dev_darcy_phi[cellidx];
- //const Float dphi = dev_darcy_dphi[cellidx];
- const Float div_v_p = dev_darcy_div_v_p[cellidx];
+ const Float dphi = dev_darcy_dphi[cellidx];
+ //const Float div_v_p = dev_darcy_div_v_p[cellidx];
const Float p_xn = dev_darcy_p[d_idx(x-1,y,z)];
const Float p = dev_darcy_p[cellidx];
t@@ -949,8 +955,8 @@ __global__ void firstDarcySolution(
Float dp_expl =
+ (ndem*devC_dt)/(beta_f*phi*mu)*(k*laplace_p + dot(grad_k, grad_p…
- - div_v_p/(beta_f*phi);
- //- dphi/(beta_f*phi*(1.0 - phi));
+ //- div_v_p/(beta_f*phi);
+ - dphi/(beta_f*phi*(1.0 - phi));
// Dirichlet BC at dynamic top wall. wall0_iz will be larger than the
// grid if the wall isn't dynamic
t@@ -974,8 +980,8 @@ __global__ void firstDarcySolution(
"grad_k = %e, %e, %e\n"
"dp_diff = %e\n"
"dp_forc = %e\n"
- "div_v_p = %e\n"
- //"dphi = %e\n"
+ //"div_v_p = %e\n"
+ "dphi = %e\n"
//"dphi/dt = %e\n"
,
x,y,z,
t@@ -988,8 +994,9 @@ __global__ void firstDarcySolution(
grad_p.x, grad_p.y, grad_p.z,
grad_k.x, grad_k.y, grad_k.z,
dp_diff, dp_forc,
- div_v_p//,
- //dphi, dphi/(ndem*devC_dt)
+ //div_v_p//,
+ dphi//,
+ //dphi/(ndem*devC_dt)
);
#endif
t@@ -1013,7 +1020,7 @@ __global__ void updateDarcySolution(
const Float* __restrict__ dev_darcy_k, // in
const Float* __restrict__ dev_darcy_phi, // in
const Float* __restrict__ dev_darcy_dphi, // in
- const Float* __restrict__ dev_darcy_div_v_p, // in
+ //const Float* __restrict__ dev_darcy_div_v_p, // in
const Float3* __restrict__ dev_darcy_grad_k, // in
const Float beta_f, // in
const Float mu, // in
t@@ -1060,8 +1067,8 @@ __global__ void updateDarcySolution(
const Float k = dev_darcy_k[cellidx];
const Float3 grad_k = dev_darcy_grad_k[cellidx];
const Float phi = dev_darcy_phi[cellidx];
- //const Float dphi = dev_darcy_dphi[cellidx];
- const Float div_v_p = dev_darcy_div_v_p[cellidx];
+ const Float dphi = dev_darcy_dphi[cellidx];
+ //const Float div_v_p = dev_darcy_div_v_p[cellidx];
const Float p_old = dev_darcy_p_old[cellidx];
const Float dp_expl = dev_darcy_dp_expl[cellidx];
t@@ -1110,8 +1117,8 @@ __global__ void updateDarcySolution(
//Float p_new = p_old
Float dp_impl =
+ (ndem*devC_dt)/(beta_f*phi*mu)*(k*laplace_p + dot(grad_k, grad_p…
- - div_v_p/(beta_f*phi);
- //- dphi/(beta_f*phi*(1.0 - phi));
+ //- div_v_p/(beta_f*phi);
+ - dphi/(beta_f*phi*(1.0 - phi));
// Dirichlet BC at dynamic top wall. wall0_iz will be larger than the
// grid if the wall isn't dynamic
diff --git a/src/device.cu b/src/device.cu
t@@ -1796,8 +1796,8 @@ __host__ void DEM::startTime()
np,
darcy.c_phi,
dev_darcy_phi,
- dev_darcy_dphi,
- dev_darcy_div_v_p);
+ dev_darcy_dphi);//,
+ //dev_darcy_div_v_p);
cudaThreadSynchronize();
if (PROFILING == 1)
stopTimer(&kernel_tic, &kernel_toc, &kernel_elapsed,
t@@ -1976,7 +1976,7 @@ __host__ void DEM::startTime()
dev_darcy_k,
dev_darcy_phi,
dev_darcy_dphi,
- dev_darcy_div_v_p,
+ //dev_darcy_div_v_p,
dev_darcy_grad_k,
darcy.beta_f,
darcy.mu,
t@@ -2003,7 +2003,7 @@ __host__ void DEM::startTime()
dev_darcy_k,
dev_darcy_phi,
dev_darcy_dphi,
- dev_darcy_div_v_p,
+ //dev_darcy_div_v_p,
dev_darcy_grad_k,
darcy.beta_f,
darcy.mu,
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.