From 9d6dc87014bd91ec30b2cc9b6b42c8573877228a Mon Sep 17 00:00:00 2001 From: Pauli Virtanen <pauli.t.virtanen@jyu.fi> Date: Tue, 2 Aug 2022 14:41:23 +0300 Subject: [PATCH] Edit --- meson.build | 9 +++++--- src/action.hpp | 15 ++++++++++++ src/common.h | 9 -------- src/common.hpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 21 ++++++++++++++++- 5 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 src/action.hpp delete mode 100644 src/common.h create mode 100644 src/common.hpp diff --git a/meson.build b/meson.build index 9615275..928852a 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,8 @@ -project('usadelndsoc', 'cpp') +project('usadelndsoc', 'cpp', + default_options : ['cpp_std=c++17']) cppad_dep = dependency('cppad') -deps = [cppad_dep] -executable('main', 'src/main.cpp', dependencies: deps) +eigen3_dep = dependency('eigen3') + +deps = [cppad_dep, eigen3_dep] +executable('main', 'src/main.cpp', dependencies : deps) diff --git a/src/action.hpp b/src/action.hpp new file mode 100644 index 0000000..6d9127f --- /dev/null +++ b/src/action.hpp @@ -0,0 +1,15 @@ +#ifndef ACTION_HPP_ +#define ACTION_HPP_ + +#include "common.hpp" + + +inline ADComplex S_2(Array<ADComplex,3> Q) +{ + size_t i = 2; + return Q(0u, i, 2u); +} + + + +#endif diff --git a/src/common.h b/src/common.h deleted file mode 100644 index de55b0f..0000000 --- a/src/common.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef COMMON_H_ -#define COMMON_H_ - -#include <cppad/cppad.hpp> - -typedef CppAD::AD<double> ADDouble; -typedef std::complex<ADDouble> ADComplex; - -#endif diff --git a/src/common.hpp b/src/common.hpp new file mode 100644 index 0000000..12d7b98 --- /dev/null +++ b/src/common.hpp @@ -0,0 +1,62 @@ +#ifndef COMMON_H_ +#define COMMON_H_ + +#include <array> +#include <tuple> +#include <iostream> + +#include <cppad/cppad.hpp> +#include <cppad/example/cppad_eigen.hpp> + +#include <Eigen/Core> + +typedef CppAD::AD<double> ADDouble; +typedef std::complex<ADDouble> ADComplex; + +template <typename Scalar, int NDim> +class Array +{ +private: + std::vector<Scalar>& data_; + std::array<size_t, NDim> shape_; + std::array<size_t, NDim> stride_; + +protected: + template <typename... Idx> + size_t index(Idx... idxs) const + { + const std::array<size_t,NDim> m{idxs...}; + size_t idx = 0; + + for (size_t i = 0; i < NDim; ++i) + idx += stride_[i] * m[i]; + + return idx; + } + +public: + Array(std::vector<Scalar>& data, std::array<size_t, NDim> shape) : data_(data), shape_(shape) + { + if (NDim > 0) { + size_t i = NDim - 1; + stride_[i] = 1; + while (i-- > 0) + stride_[i] = shape[i+1] * stride_[i+1]; + } + } + + template <typename... Idx> + Scalar& operator()(Idx... idxs) + { + return data_[index(idxs...)]; + } + + template <typename... Idx> + const Scalar&& operator()(Idx... idxs) const + { + return data_[index(idxs...)]; + } +}; + + +#endif diff --git a/src/main.cpp b/src/main.cpp index 783cb8e..7d79f02 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,27 @@ -#include "common.h" +#include "common.hpp" +#include "action.hpp" int main() { + std::vector<double> v(3*3*3); + Array<double,3> Q(v,{3,3,3}); + + for (size_t i = 0; i < 3; ++i) { + for (size_t j = 0; i < 3; ++i) { + for (size_t k = 0; i < 3; ++i) { + Q(i,j,k) = i+j+k; + } + } + } + + for (size_t i = 0; i < 3; ++i) { + for (size_t j = 0; i < 3; ++i) { + for (size_t k = 0; i < 3; ++i) { + std::cout << Q(i,j,k) << std::endl; + } + } + } return 0; } -- GitLab