commit ecc6fe2a7904b99027b257d50282d0c2ea651329
parent 42819a7e94dc64e493361f2a3f7791b8e679d29f
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Fri, 3 Jul 2026 12:55:21 +0200
refactor(simulation): share column defaults between init_sim and reset_column
Diffstat:
2 files changed, 17 insertions(+), 9 deletions(-)
diff --git a/simulation.c b/simulation.c
@@ -29,6 +29,11 @@ static struct solver_stats g_stats = {0, 0, 0, 0, 0};
/* lower limit for effective normal stress sigma_n_eff for granular solver */
#define SIGMA_N_EFF_MIN 1e-1
+/* defaults shared by init_sim() and reset_column() */
+#define DEFAULT_MU_WALL 0.45
+#define DEFAULT_PHI 0.25 /* Damsgaard et al 2013 */
+#define DEFAULT_K 1.9e-15 /* Damsgaard et al 2015 */
+
/* Simulation settings */
void init_sim(struct simulation *sim) {
int ret;
@@ -39,7 +44,7 @@ void init_sim(struct simulation *sim) {
sim->G = 9.81;
sim->P_wall = 120e3;
- sim->mu_wall = 0.45;
+ sim->mu_wall = DEFAULT_MU_WALL;
sim->v_x_bot = 0.0;
sim->v_x_fix = NAN;
sim->v_x_limit = NAN;
@@ -51,7 +56,7 @@ void init_sim(struct simulation *sim) {
/* sim->C = 0.0; */ /* Henann and Kamrin 2016 */
sim->mu_s = tan(DEG2RAD(22.0)); /* Damsgaard et al 2013 */
sim->C = 0.0; /* Damsgaard et al 2013 */
- sim->phi = initval(0.25, 1);
+ sim->phi = initval(DEFAULT_PHI, 1);
sim->d = 0.04; /* Damsgaard et al 2013 */
sim->transient = 0;
sim->phi_min = 0.20;
@@ -98,7 +103,7 @@ void init_sim(struct simulation *sim) {
sim->alpha = 1e-8;
sim->D = -1.0; /* disabled when negative */
- sim->k = initval(1.9e-15, 1); /* Damsgaard et al 2015 */
+ sim->k = initval(DEFAULT_K, 1);
/* Iverson et al 1994: Storglaciaren */
/* sim->k = initval(1.3e-14, 1); */
@@ -233,14 +238,15 @@ void reset_column(struct simulation *sim) {
/* restore init_sim() defaults for porosity and permeability */
for (i = 0; i < nz; ++i) {
- sim->phi[i] = 0.25; /* init_sim default */
- sim->k[i] = 1.9e-15; /* init_sim default */
+ sim->phi[i] = DEFAULT_PHI;
+ sim->k[i] = DEFAULT_K;
}
/* reset per-column scalars to init_sim() defaults */
sim->t = 0.0;
- sim->mu_wall = 0.45;
+ sim->mu_wall = DEFAULT_MU_WALL;
sim->v_x_bot = 0.0;
+ sim->n_file = 0;
}
static void warn_parameter_value(const char message[], const double value,
diff --git a/simulation.h b/simulation.h
@@ -148,9 +148,11 @@ int prepare_arrays(struct simulation *sim);
void free_arrays(struct simulation *sim);
-/* Reset per-column state (stresses, velocities, fluidity, porosity, time)
- * without reallocating; geometry (nz, L_z, z, dz) and workspaces are kept.
- * For reuse of one prepared simulation across many independent columns. */
+/* Reset per-column state (stresses, velocities, fluidity, time, output-file
+ * counter) without reallocating; geometry (nz, L_z, z, dz), parameters, and
+ * solver workspaces are kept. phi and k are restored to the init_sim()
+ * defaults; set per-column values after the reset. For reuse of one prepared
+ * simulation across many independent columns. */
void reset_column(struct simulation *sim);
/* returns: 0 ok, 1 one or more parameters are invalid */