one_gaussian_bump.c: Prepare for alternative integrators
authorW. Trevor King <wking@tremily.us>
Tue, 12 Feb 2013 22:00:20 +0000 (17:00 -0500)
committerW. Trevor King <wking@tremily.us>
Tue, 12 Feb 2013 22:00:20 +0000 (17:00 -0500)
one_gaussian_bump.c

index 792ca6452da51b833ca8982ac802232722b74766..bc67e44d6457344ca4a77f2105afd5d9ed2b44d8 100644 (file)
@@ -68,6 +68,9 @@ typedef struct system_struct {
        void *dx_dt_state;      /* gaussian_state_t, etc. */
 } system_t;
 
+/* function type for integration */
+typedef void (*step_fn_t)(state_t *state, system_t *system, double dt);
+
 /* Potential:    V(r) = 1/2 kb^2 exp(-r^2/b^2) */
 double gaussian_energy(gaussian_state_t *state, double x, double y)
 {
@@ -123,7 +126,7 @@ double single_gaussian_energy(state_t *state, void *system)
        return kinetic + potential;
 }
 
-void step(state_t *state, system_t *system, double dt)
+void euler_step(state_t *state, system_t *system, double dt)
 {
        double *dx_dt = NULL;
        size_t i;
@@ -213,6 +216,7 @@ int main(int argc, char **argv) {
        double x[4] = {3.5, 0, 0, 0};
        system_t system = {};
        gaussian_state_t gaussian = {};
+       step_fn_t step_fn = &euler_step;
 
        state.x = (double *)x;
        state.n = sizeof(x) / sizeof(double);
@@ -228,7 +232,7 @@ int main(int argc, char **argv) {
 
        print_state(&state, &system);
        while (state.t < t_max) {
-               step(&state, &system, dt);
+               (*step_fn)(&state, &system, dt);
                print_state(&state, &system);
        }
        return 0;