NeoN
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
field.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// SPDX-FileCopyrightText: 2024 NeoN authors
3#pragma once
4
5#include <Kokkos_Core.hpp>
6
7#include <iostream>
8
12#include "NeoN/core/vector.hpp"
13
15
16#include <vector>
17
18namespace NeoN
19{
20
32template<typename ValueType>
33class Field
34{
35public:
36
37 Field(const Executor& exec) : exec_(exec), internalVector_(exec, 0), boundaryData_(exec, 0, 0)
38 {}
39
40 Field(const Executor& exec, localIdx nCells, const std::vector<localIdx>& offsets)
41 : exec_(exec), internalVector_(exec, nCells), boundaryData_(exec, offsets)
42 {}
43
45 const Executor& exec,
48 )
49 : exec_(exec), internalVector_(exec, internalVector), boundaryData_(exec, boundaryData)
50 {}
51
53 const Executor& exec, const Vector<ValueType>& internalVector, std::vector<localIdx> offsets
54 )
55 : exec_(exec), internalVector_(exec, internalVector), boundaryData_(exec, offsets)
56 {}
57
58 Field(const Executor& exec, localIdx internalSize, localIdx boundarySize)
59 : exec_(exec), internalVector_(exec, internalSize), boundaryData_(exec, boundarySize)
60 {}
61
62
64 : exec_(rhs.exec_), internalVector_(rhs.internalVector_), boundaryData_(rhs.boundaryData_)
65 {}
66
67
69 : exec_(std::move(rhs.exec_)), internalVector_(std::move(rhs.internalVector_)),
70 boundaryData_(std::move(rhs.boundaryData_))
71 {}
72
73
75 {
76 internalVector_ = rhs.internalVector_;
77 boundaryData_ = rhs.boundaryData_;
78 return *this;
79 }
80
81
83 {
84 internalVector_ = std::move(rhs.internalVector_);
85 boundaryData_ = std::move(rhs.boundaryData_);
86 return *this;
87 }
88
89
90 const Vector<ValueType>& internalVector() const { return internalVector_; }
91
92
93 Vector<ValueType>& internalVector() { return internalVector_; }
94
95
96 const BoundaryData<ValueType>& boundaryData() const { return boundaryData_; }
97
98
99 BoundaryData<ValueType>& boundaryData() { return boundaryData_; }
100
101 const Executor& exec() const { return exec_; }
102
103private:
104
105 Executor exec_;
106 Vector<ValueType> internalVector_;
107 BoundaryData<ValueType> boundaryData_;
108};
109
110
111} // namespace NeoN
Represents the boundary fields for a computational domain.
Represents the domain fields for a computational domain.
Definition field.hpp:34
Field(const Executor &exec, localIdx internalSize, localIdx boundarySize)
Definition field.hpp:58
Field< ValueType > & operator=(Field< ValueType > &&rhs)
Definition field.hpp:82
Field(Field< ValueType > &&rhs)
Definition field.hpp:68
Field(const Executor &exec)
Definition field.hpp:37
Field< ValueType > & operator=(const Field< ValueType > &rhs)
Definition field.hpp:74
Field(const Executor &exec, const Vector< ValueType > &internalVector, const BoundaryData< ValueType > &boundaryData)
Definition field.hpp:44
const BoundaryData< ValueType > & boundaryData() const
Definition field.hpp:96
Field(const Executor &exec, const Vector< ValueType > &internalVector, std::vector< localIdx > offsets)
Definition field.hpp:52
Field(const Field< ValueType > &rhs)
Definition field.hpp:63
const Executor & exec() const
Definition field.hpp:101
Field(const Executor &exec, localIdx nCells, const std::vector< localIdx > &offsets)
Definition field.hpp:40
const Vector< ValueType > & internalVector() const
Definition field.hpp:90
Vector< ValueType > & internalVector()
Definition field.hpp:93
BoundaryData< ValueType > & boundaryData()
Definition field.hpp:99
A class to contain the data and executors for a field and define some basic operations.
Definition vector.hpp:53
int32_t localIdx
Definition label.hpp:30
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
Definition executor.hpp:16