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