From 1102f2cf5879ebc7e7f9e4fc914c434466cfc77d Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Thu, 4 Sep 2025 14:45:22 +0200 Subject: [PATCH] ex1: solve --- exercise1/wave_1d | Bin 0 -> 16496 bytes exercise1/wave_1d.c | 63 +++++++++++++++++++++++++++++++------------- 2 files changed, 45 insertions(+), 18 deletions(-) create mode 100755 exercise1/wave_1d diff --git a/exercise1/wave_1d b/exercise1/wave_1d new file mode 100755 index 0000000000000000000000000000000000000000..d75f63ef85320188d7e62ca6a3dc1eea9b38e606 GIT binary patch literal 16496 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 literal 0 HcmV?d00001 diff --git a/exercise1/wave_1d.c b/exercise1/wave_1d.c index e957ab8..581f395 100644 --- a/exercise1/wave_1d.c +++ b/exercise1/wave_1d.c @@ -43,44 +43,71 @@ void domain_save(int_t step) { // Set up our three buffers, fill two with an initial cosine wave, // and set the time step. void domain_initialize(void) { - // BEGIN: T1 - ; - // END: T1 + // allocate memory + for (int i = 0; i < 3; i++) + buffers[i] = malloc((N + 2) * sizeof(real_t)); + + // apply initial condition + real_t x = 0.0f; + for (int i = 0; i < N; i++) { + U_prv(i) = cos(2 * M_PI * x); + U(i) = U_prv(i); + U_nxt(i) = 0.0f; + x += (real_t)dx / (real_t)N; + } + + // set the time-step dt according to CFL + dt = dx / c; } // TASK T2: // Return the memory to the OS. -// BEGIN: T2 void domain_finalize(void) { - ; + for (int i = 0; i < 3; i++) { + free(buffers[i]); + buffers[i] = NULL; + } } -// END: T2 // TASK: T3 // Rotate the time step buffers. -// BEGIN: T3 -; -// END: T3 +void rotate_buffers(void) { + real_t *temp = buffers[0]; + buffers[0] = buffers[1]; + buffers[1] = buffers[2]; + buffers[2] = temp; +} // TASK: T4 // Derive step t+1 from steps t and t-1. -// BEGIN: T4 -; -// END: T4 +void time_step(void) { + for (int i = 0; i < N; i++) { + U_nxt(i) = -U_prv(i) + 2 * U(i) + dt * dt * c * c / (dx * dx) * (U(i - 1) + U(i + 1) - 2 * U(i)); + } +} // TASK: T5 // Neumann (reflective) boundary condition. -// BEGIN: T5 -; -// END: T5 +void boundary(void) { + U_prv(-1) = U_prv(1); + U(-1) = U(1); + U_nxt(-1) = U_nxt(1); + U_prv(N) = U_prv(N - 2); + U(N) = U(N - 2); + U_nxt(N) = U_nxt(N - 2); +} // TASK: T6 // Main time integration. void simulate(void) { - // BEGIN: T6 int_t iteration = 0; - domain_save(iteration / snapshot_freq); - // END: T6 + while (iteration < max_iteration) { + boundary(); + time_step(); + rotate_buffers(); + domain_save(iteration / snapshot_freq); + iteration++; + } } int main(void) {