From f6c7cff8daecd2587820c58715d66260dcc28563 Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Mon, 6 Oct 2025 15:16:24 +0200 Subject: [PATCH] format --- exercise4/wave_2d_parallel.c | 348 ++++++++++++++++------------------- 1 file changed, 157 insertions(+), 191 deletions(-) diff --git a/exercise4/wave_2d_parallel.c b/exercise4/wave_2d_parallel.c index 2cd5152..ca0c692 100644 --- a/exercise4/wave_2d_parallel.c +++ b/exercise4/wave_2d_parallel.c @@ -1,23 +1,22 @@ #define _XOPEN_SOURCE 600 +#include +#include +#include +#include #include #include #include -#include -#include -#include #include -#include -#include +#include #include "argument_utils.h" // TASK: T1a // Include the MPI headerfile -// BEGIN: T1a +// BEGIN: T1 ; // END: T1a - // Convert 'struct timeval' into seconds in double prec. floating point #define WALLTIME(t) ((double)(t).tv_sec + 1e-6 * (double)(t).tv_usec) @@ -25,7 +24,6 @@ typedef int64_t int_t; typedef double real_t; - // Buffers for three time steps, indexed with 2 ghost points for the boundary real_t *buffers[3] = { NULL, NULL, NULL }; @@ -33,172 +31,150 @@ real_t // TASK: T1b // Declare variables each MPI process will need // BEGIN: T1b -#define U_prv(i,j) buffers[0][((i)+1)*(N+2)+(j)+1] -#define U(i,j) buffers[1][((i)+1)*(N+2)+(j)+1] -#define U_nxt(i,j) buffers[2][((i)+1)*(N+2)+(j)+1] +#define U_prv(i, j) buffers[0][((i) + 1) * (N + 2) + (j) + 1] +#define U(i, j) buffers[1][((i) + 1) * (N + 2) + (j) + 1] +#define U_nxt(i, j) buffers[2][((i) + 1) * (N + 2) + (j) + 1] // END: T1b // Simulation parameters: size, step count, and how often to save the state int_t - M = 256, // rows - N = 256, // cols + M = 256, // rows + N = 256, // cols max_iteration = 4000, snapshot_freq = 20; // Wave equation parameters, time step is derived from the space step const real_t - c = 1.0, + c = 1.0, dx = 1.0, dy = 1.0; real_t dt; - - - // Rotate the time step buffers. -void move_buffer_window ( void ) -{ - real_t *temp = buffers[0]; - buffers[0] = buffers[1]; - buffers[1] = buffers[2]; - buffers[2] = temp; +void move_buffer_window(void) { + real_t *temp = buffers[0]; + buffers[0] = buffers[1]; + buffers[1] = buffers[2]; + buffers[2] = temp; } - // TASK: T8 // Save the present time step in a numbered file under 'data/' -void domain_save ( int_t step ) -{ -// BEGIN: T8 - char filename[256]; +void domain_save(int_t step) { + // BEGIN: T8 + char filename[256]; - // Ensure output directory exists (ignore error if it already exists) - if (mkdir("data", 0755) != 0 && errno != EEXIST) { - perror("mkdir data"); - exit(EXIT_FAILURE); + // Ensure output directory exists (ignore error if it already exists) + if (mkdir("data", 0755) != 0 && errno != EEXIST) { + perror("mkdir data"); + exit(EXIT_FAILURE); + } + + snprintf(filename, sizeof(filename), "data/%05" PRId64 ".dat", step); + + FILE *out = fopen(filename, "wb"); + if (out == NULL) { + perror("fopen output file"); + fprintf(stderr, "Failed to open '%s' for writing.\n", filename); + exit(EXIT_FAILURE); + } + + for (int_t i = 0; i < M; ++i) { + size_t written = fwrite(&U(i, 0), sizeof(real_t), (size_t)N, out); + if (written != (size_t)N) { + perror("fwrite"); + fclose(out); + exit(EXIT_FAILURE); } + } - snprintf(filename, sizeof(filename), "data/%05" PRId64 ".dat", step); - - FILE *out = fopen(filename, "wb"); - if (out == NULL) { - perror("fopen output file"); - fprintf(stderr, "Failed to open '%s' for writing.\n", filename); - exit(EXIT_FAILURE); - } - - for ( int_t i = 0; i < M; ++i ) { - size_t written = fwrite ( &U(i,0), sizeof(real_t), (size_t)N, out ); - if ( written != (size_t)N ) { - perror("fwrite"); - fclose(out); - exit(EXIT_FAILURE); - } - } - - if ( fclose(out) != 0 ) { - perror("fclose"); - exit(EXIT_FAILURE); - } -// END: T8 + if (fclose(out) != 0) { + perror("fclose"); + exit(EXIT_FAILURE); + } + // END: T8 } - // TASK: T7 // Neumann (reflective) boundary condition -void boundary_condition ( void ) -{ -// BEGIN: T7 - // Vertical ghost layers (bottom and top) - for (int_t i=0; iM; + N = options->N; + max_iteration = options->max_iteration; + snapshot_freq = options->snapshot_frequency; + // END: T3 -// TASK: T3 -// Distribute the user arguments to all the processes -// BEGIN: T3 - OPTIONS *options = parse_args( argc, argv ); - if ( !options ) - { - fprintf( stderr, "Argument parsing failed\n" ); - exit( EXIT_FAILURE ); - } + // Set up the initial state of the domain + domain_initialize(); - M = options->M; - N = options->N; - max_iteration = options->max_iteration; - snapshot_freq = options->snapshot_frequency; -// END: T3 + struct timeval t_start, t_end; - // Set up the initial state of the domain - domain_initialize(); + // TASK: T2 + // Time your code + // BEGIN: T2 + simulate(); + // END: T2 + // Clean up and shut down + domain_finalize(); - struct timeval t_start, t_end; + // TASK: T1d + // Finalise MPI + // BEGIN: T1d + ; + // END: T1d -// TASK: T2 -// Time your code -// BEGIN: T2 - simulate(); -// END: T2 - - // Clean up and shut down - domain_finalize(); - -// TASK: T1d -// Finalise MPI -// BEGIN: T1d - ; -// END: T1d - - exit ( EXIT_SUCCESS ); + exit(EXIT_SUCCESS); }