SLIDE  3.0.0
A simulator for lithium-ion battery pack degradation
Loading...
Searching...
No Matches
XYdata.hpp
Go to the documentation of this file.
1/*
2 * XYdata.hpp
3 *
4 * Created on: 07 Feb 2022
5 * Author(s): Jorn Reniers, Volkan Kumtepeli
6 */
7
8#pragma once
9
10#include "FixedData.hpp"
11#include "../utility/interpolation.hpp"
12#include "../utility/io/read_CSVfiles.hpp"
13
14#include <stdexcept>
15#include <vector>
16#include <array>
17#include <functional>
18#include <cmath>
19#include <filesystem>
20#include <type_traits>
21#include <span>
22
23namespace slide {
24
25template <typename Tx>
26bool check_is_fixed(Tx &xdat)
27{
28 const double dt = xdat[1] - xdat[0];
29 const double tol = 0.01 * dt;
30
31 bool is_fixed = true;
32
33 for (size_t i{ 1 }; i < (xdat.size() - 1); i++) {
34 const double residual = std::abs(xdat[i + 1] - xdat[i] - dt);
35 if (residual > tol) {
36 is_fixed = false;
37 break;
38 }
39 }
40
41 return is_fixed;
42}
43
44template <typename Tx, typename Ty>
45class XYdata
46{
47 bool is_fixed{ false };
48
49public:
50 Tx x;
51 Ty y;
52
53 XYdata() = default;
54 explicit XYdata(size_t N) : x(N), y(N) {}
55 XYdata(Tx &x_, Ty &y_) : x(x_), y(y_) { check_is_fixed(); }
56
58
59 void reserve(int n) { x.reserve(n), y.reserve(n); }
60 void clear() { x.clear(), y.clear(); }
61
62 void resize(size_t n) { x.resize(n), y.resize(n); }
63
64 double interp(double x_i, bool print = false, bool bound = true) // #TODO cannot put const here.
65 {
66 return linInt(print, bound, x, y, x.size(), x_i, is_fixed);
67 }
68
69 auto size() const { return y.size(); }
70
72 {
73 is_fixed = slide::check_is_fixed(x);
74 }
75
76 template <typename Tpath>
77 void setCurve(Tpath &&path)
78 {
81 }
82};
83
85using XYdata_fv = XYdata<FixedData<double>, std::vector<double>>;
86using XYdata_vv = XYdata<std::vector<double>, std::vector<double>>;
87using XYdata_ss = XYdata<std::span<double>, std::span<double>>;
88
89template <typename Tpath>
90void loadCSV_2col(Tpath &&name, slide::XYdata_vv &data, int n = 0)
91{
93 loadCSV_2col(name, data.x, data.y, n);
94}
95
96} // namespace slide
Definition: FixedData.hpp:92
Definition: XYdata.hpp:46
double interp(double x_i, bool print=false, bool bound=true)
Definition: XYdata.hpp:64
auto size() const
Definition: XYdata.hpp:69
XYdata()=default
void reserve(int n)
Definition: XYdata.hpp:59
void setCurve(Tpath &&path)
Definition: XYdata.hpp:77
XYdata(Tx &x_, Ty &y_)
XYdata(FixedData x, Ty y) : is_fixed(true), x(x), y(y) {} #TODO this should be on but error in GCC.
Definition: XYdata.hpp:55
Ty y
Definition: XYdata.hpp:51
Tx x
Definition: XYdata.hpp:50
void check_is_fixed()
Definition: XYdata.hpp:71
void clear()
Definition: XYdata.hpp:60
void resize(size_t n)
Definition: XYdata.hpp:62
XYdata(size_t N)
Definition: XYdata.hpp:54
Slide namespace contains all the types, classes, and functions for the simulation framework.
Definition: Cell.hpp:27
bool check_is_fixed(Tx &xdat)
Definition: XYdata.hpp:26
void loadCSV_2col(Tpath &&name, slide::XYdata_vv &data, int n=0)
Definition: XYdata.hpp:90
double linInt(bool verbose, bool bound, Tx &xdat, Ty &ydat, int nin, double x, bool is_fixed=false)
Definition: interpolation.hpp:91
path
Definition: print_snapshot.m:13