From 6d8f1281b8f65a1e20d7ac00ff17f4ba94956e4e Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@hesge.ch>
Date: Thu, 10 Sep 2020 23:20:36 +0200
Subject: [PATCH] updated rc code

---
 practical_work/rc_circuit/main.c | 20 ++++++++++++++++++++
 practical_work/rc_circuit/rc.c   | 23 +++++++++++++++++++++++
 2 files changed, 43 insertions(+)
 create mode 100644 practical_work/rc_circuit/main.c
 create mode 100644 practical_work/rc_circuit/rc.c

diff --git a/practical_work/rc_circuit/main.c b/practical_work/rc_circuit/main.c
new file mode 100644
index 0000000..82b3938
--- /dev/null
+++ b/practical_work/rc_circuit/main.c
@@ -0,0 +1,20 @@
+#include "rc.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+int main() {
+    rc_state rc = rc_state_create(1.0, 1.0, 1.0);
+
+    double v, v_ini;
+    v = v_ini = 0.0;
+
+    double dt = 0.001;
+    double max_t = 5.0;
+    for (double t = 0.0; t < max_t; t += dt) {
+        double ve = exact_solution(t, v_ini, &rc);
+        printf("t = %f, v = %f, v_e = %f, diff = %f\n", t, v, ve, ve - v);
+        v = rc_advance(v, dt, &rc);
+    }
+
+    return EXIT_SUCCESS;
+}
\ No newline at end of file
diff --git a/practical_work/rc_circuit/rc.c b/practical_work/rc_circuit/rc.c
new file mode 100644
index 0000000..0c338c0
--- /dev/null
+++ b/practical_work/rc_circuit/rc.c
@@ -0,0 +1,23 @@
+#include <math.h>
+#include "rc.h"
+#include "ode_o1.h"
+
+rc_state rc_state_create(double r, double c, double eps) {
+    rc_state rc = {.r = r, .c = c, .eps = eps};
+    return rc;
+}
+
+double rc_g(double v, void *rc) {
+    rc_state *rcs = (rc_state*)rc;
+    return 1.0 / (rcs->r * rcs->c) * (rcs->eps - v);
+}
+
+double rc_advance(double v0, double dt, rc_state *state) {
+    return advance(rc_g, v0, dt, state);
+}
+
+double exact_solution(double t, double v_ini, rc_state *state) {
+    return v_ini * exp(-t/(state->c * state->r)) - state->eps * exp(-t/(state->c * state->r)) + state->eps;
+}
+
+
-- 
GitLab