From f34856b3bf8d2d596e1ae8059d73d22ad82a9939 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@hesge.ch> Date: Wed, 26 Aug 2020 12:37:18 +0200 Subject: [PATCH] added sanitizers in makefile and particle force list computation --- practical_work/forces/Makefile | 4 ++-- practical_work/forces/main.c | 9 +++++++++ practical_work/forces/particle.c | 16 +++++++++++++++- practical_work/forces/particle.h | 2 ++ practical_work/vec2/vec2.c | 4 ++++ practical_work/vec2/vec2.h | 2 ++ 6 files changed, 34 insertions(+), 3 deletions(-) diff --git a/practical_work/forces/Makefile b/practical_work/forces/Makefile index 6ef1cce..111de51 100644 --- a/practical_work/forces/Makefile +++ b/practical_work/forces/Makefile @@ -1,6 +1,6 @@ CC=gcc -OPTS=-g -O3 -Wall -Wextra -LINK=-lm +OPTS=-g -O3 -Wall -Wextra -fsanitize=address -fsanitize=leak +LINK=-lm -lasan main: main.o particle.o ../vec2/vec2.o $(CC) $(OPTS) -o $@ $^ $(LINK) diff --git a/practical_work/forces/main.c b/practical_work/forces/main.c index 61a4717..b29a965 100644 --- a/practical_work/forces/main.c +++ b/practical_work/forces/main.c @@ -1,3 +1,5 @@ +#include <stdlib.h> +#include <stdio.h> #include "../vec2/vec2.h" #include "particle.h" @@ -12,4 +14,11 @@ int main() { vec2 force = particle_compute_grav_force(parts[0], p); vec2_print(force); + vec2 *forces = particle_compute_grav_resultant_forces(parts, number); + for (int ip = 0; ip < number; ++ip) { + printf("force %d: \n", ip); + vec2_print(forces[ip]); + } + + free(parts); } \ No newline at end of file diff --git a/practical_work/forces/particle.c b/practical_work/forces/particle.c index ed3d1a5..e7a5c5e 100644 --- a/practical_work/forces/particle.c +++ b/practical_work/forces/particle.c @@ -30,7 +30,7 @@ particle particle_random_create(vec2 min_r, vec2 max_r, double min_m, double max } particle *particle_random_create_list(vec2 min_r, vec2 max_r, double min_m, double max_m, int number) { - particle *p = malloc(number * sizeof(particle_create)); + particle *p = malloc(number * sizeof(particle)); srand(time(NULL)); @@ -50,6 +50,20 @@ vec2 particle_compute_grav_force(particle lhs, particle rhs) { return vec2_mul(factor, rij); } +vec2 *particle_compute_grav_resultant_forces(particle *parts, int number) { + vec2 *forces = malloc(number * sizeof(vec2)); + for (int ip = 0; ip < number; ++ip) { + forces[ip] = vec2_create_zero(); + } + for (int ip = 0; ip < number; ++ip) { + for (int iq = ip + 1; iq < number; ++iq) { + forces[ip] = vec2_add(forces[ip], particle_compute_grav_force(parts[ip], parts[iq])); + forces[iq] = vec2_add(forces[iq], particle_compute_grav_force(parts[iq], parts[ip])); + } + } + return forces; +} + void particle_print(particle p) { printf("m = %g\n", p.m); vec2_print(p.r); diff --git a/practical_work/forces/particle.h b/practical_work/forces/particle.h index bee5261..3e4b66b 100644 --- a/practical_work/forces/particle.h +++ b/practical_work/forces/particle.h @@ -16,6 +16,8 @@ particle *particle_random_create_list(vec2 min_r, vec2 max_r, double min_m, doub vec2 particle_compute_grav_force(particle lhs, particle rhs); +vec2 *particle_compute_grav_resultant_forces(particle *parts, int number); + void particle_print(particle p); void particle_print_list(particle *p, int number); diff --git a/practical_work/vec2/vec2.c b/practical_work/vec2/vec2.c index 834ae13..abae499 100644 --- a/practical_work/vec2/vec2.c +++ b/practical_work/vec2/vec2.c @@ -7,6 +7,10 @@ vec2 vec2_create(double x_, double y_) { return v; } +vec2 vec2_create_zero() { + return vec2_create(0.0, 0.0); +} + vec2 vec2_add(vec2 lhs, vec2 rhs) { return vec2_create( lhs.x + rhs.x, diff --git a/practical_work/vec2/vec2.h b/practical_work/vec2/vec2.h index 402824d..3d4dc15 100644 --- a/practical_work/vec2/vec2.h +++ b/practical_work/vec2/vec2.h @@ -9,6 +9,8 @@ typedef struct _vec2 { vec2 vec2_create(double x_, double y_); +vec2 vec2_create_zero(); + vec2 vec2_add(vec2 lhs, vec2 rhs); vec2 vec2_sub(vec2 lhs, vec2 rhs); -- GitLab