1d_fd_simple_shear

continuum model for granular flows with pore-pressure dynamics
git clone git://src.adamsgaard.dk/1d_fd_simple_shear
Log | Files | Refs | README | LICENSE Back to index

commit 64a84fc4e4904e2645cf9202427d8796ee34ac9f
parent 561018bfb5915a45d9340eb3e1268a0c9e3a4b43
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date:   Wed,  6 May 2020 14:03:33 +0200

Swap array pointers instead of copying values in iterative solvers

Diffstat:
Mfluid.c | 8+++++---
Msimulation.c | 10++++++----
2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/fluid.c b/fluid.c @@ -156,8 +156,8 @@ darcy_solver_1d(struct simulation *sim, { int i, iter, solved = 0; double epsilon, theta, p_f_top, r_norm_max = NAN; - double *dp_f_dt_expl; - double *p_f_ghost_old, *dp_f_dt_impl, *p_f_ghost_new, *r_norm; + double *dp_f_dt_expl, *p_f_ghost_old, *dp_f_dt_impl, *p_f_ghost_new; + double *tmp, *r_norm; /* choose integration method, parameter in [0.0; 1.0] * epsilon = 0.0: explicit @@ -260,7 +260,9 @@ darcy_solver_1d(struct simulation *sim, print_array(p_f_ghost_new, sim->nz + 2); #endif - copy_values(p_f_ghost_new, sim->p_f_ghost, sim->nz + 2); + tmp = p_f_ghost_new; + p_f_ghost_new = sim->p_f_ghost; + sim->p_f_ghost = tmp; #ifdef DEBUG puts(".. p_f_ghost after update:"); print_array(sim->p_f_ghost, sim->nz + 2); diff --git a/simulation.c b/simulation.c @@ -634,7 +634,7 @@ implicit_1d_jacobian_poisson_solver(struct simulation *sim, { int iter, i; double r_norm_max = NAN; - double *g_ghost_out = empty(sim->nz + 2), *r_norm = empty(sim->nz); + double *tmp, *g_ghost_out = empty(sim->nz + 2), *r_norm = empty(sim->nz); for (iter = 0; iter < max_iter; ++iter) { #ifdef DEBUG @@ -657,7 +657,9 @@ implicit_1d_jacobian_poisson_solver(struct simulation *sim, sim->xi); r_norm_max = max(r_norm, sim->nz); - copy_values(g_ghost_out, sim->g_ghost, sim->nz + 2); + tmp = g_ghost_out; + g_ghost_out = sim->g_ghost; + sim->g_ghost = tmp; if (r_norm_max <= rel_tol) { set_bc_dirichlet(sim->g_ghost, sim->nz, -1, 0.0); @@ -731,8 +733,8 @@ coupled_shear_solver(struct simulation *sim, const double rel_tol) { int i, coupled_iter, stress_iter = 0; - double *r_norm, r_norm_max, *oldval; - double vel_res_norm = NAN, mu_wall_orig = sim->mu_wall; + double *r_norm, *tmp, *oldval; + double r_norm_max, vel_res_norm = NAN, mu_wall_orig = sim->mu_wall; if (sim->transient) { r_norm = empty(sim->nz);