Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_Dim3.H
Go to the documentation of this file.
1#ifndef AMREX_DIM3_H_
2#define AMREX_DIM3_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_REAL.H>
7
8#include <concepts>
9#include <iostream>
10
11namespace amrex {
12
13struct Dim3 { int x; int y; int z; };
14struct XDim3 { Real x; Real y; Real z; };
15
17Real dot_product (XDim3 const& a, XDim3 const& b)
18{
19 return a.x*b.x + a.y*b.y + a.z*b.z;
20}
21
23XDim3 cross_product (XDim3 const& a, XDim3 const& b)
24{
25 return XDim3{.x = a.y*b.z-a.z*b.y, .y = a.z*b.x-a.x*b.z, .z = a.x*b.y-a.y*b.x};
26}
27
29XDim3 operator+ (XDim3 const& a, XDim3 const& b)
30{
31 return XDim3{.x = a.x + b.x, .y = a.y + b.y, .z = a.z + b.z};
32}
33
35XDim3 operator- (XDim3 const& a, XDim3 const& b)
36{
37 return XDim3{.x = a.x - b.x, .y = a.y - b.y, .z = a.z - b.z};
38}
39
40template <typename T>
41requires (std::same_as<T, Dim3> || std::same_as<T, XDim3>)
42std::ostream& operator<< (std::ostream& os, const T& d)
43{
44 os << '(' << d.x << ',' << d.y << ',' << d.z << ')';
45 return os;
46}
47
48}
49
50#endif
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:50
__host__ __device__ Real dot_product(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:17
__host__ __device__ XDim3 cross_product(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:23
__host__ __device__ XDim3 operator-(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:35
__host__ __device__ XDim3 operator+(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:29
Definition AMReX_Dim3.H:13
int x
Definition AMReX_Dim3.H:13
int z
Definition AMReX_Dim3.H:13
int y
Definition AMReX_Dim3.H:13
Definition AMReX_Dim3.H:14
Real x
Definition AMReX_Dim3.H:14
Real z
Definition AMReX_Dim3.H:14
Real y
Definition AMReX_Dim3.H:14