Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_RealVect.H
Go to the documentation of this file.
1#ifndef AMREX_REALVECT_H_
2#define AMREX_REALVECT_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_Box.H>
6#include <AMReX_REAL.H>
7#include <AMReX_SPACE.H>
8#include <AMReX_IntVect.H>
9#include <AMReX_Utility.H>
10#include <AMReX_Math.H>
11
12#include <cmath>
13#include <cstddef>
14#include <cstdlib>
15#include <cstring>
16#include <iosfwd>
17#include <vector>
18
19namespace amrex
20{
21
33template <int dim>
35 public:
40
42
45 constexpr RealVectND () noexcept {} // NOLINT
46
47 explicit RealVectND (const std::vector<Real>& vr) noexcept {
48 BL_ASSERT(vr.size() == dim);
49 for (int i = 0; i < dim; ++i) {
50 vect[i] = vr[i];
51 }
52 }
53
55
59 template <class... Args>
60 requires ((sizeof...(Args) + 2 == dim) &&
61 IsConvertible_v<Real, Args...>)
63 constexpr RealVectND (Real i, Real j, Args... ks) noexcept
64 : vect{i, j, static_cast<Real>(ks)...} {}
65
67 explicit constexpr RealVectND (Real s) noexcept {
68 for (int i = 0; i < dim; ++i) {
69 vect[i] = s;
70 }
71 }
72
74
79 explicit RealVectND (const Real* a) noexcept {
80 for (int i = 0; i < dim; ++i) {
81 vect[i] = a[i];
82 }
83 }
84
86
90 AMREX_GPU_HOST_DEVICE constexpr
91 RealVectND (const IntVectND<dim>& iv) noexcept {
92 for (int i = 0; i < dim; ++i) {
93 vect[i] = static_cast<Real>(iv[i]);
94 }
95 }
96
98
101 AMREX_GPU_HOST_DEVICE constexpr
102 RealVectND (const GpuArray<Real, dim> ga) noexcept {
103 for (int i = 0; i < dim; ++i) {
104 vect[i] = ga[i];
105 }
106 }
107
109
113 Real& operator[] (int i) && = delete;
114
116
120 AMREX_GPU_HOST_DEVICE constexpr
121 Real& operator[] (int i) & noexcept {
122 AMREX_ASSERT(i >= 0 && i < dim);
123 return vect[i];
124 }
125
127
130 AMREX_GPU_HOST_DEVICE constexpr
131 const Real& operator[] (int i) const& noexcept {
132 AMREX_ASSERT(i >= 0 && i < dim);
133 return vect[i];
134 }
135
137 template<std::size_t i>
138 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr
139 Real& get () noexcept {static_assert(0<=i && i<dim); return vect[i];}
140
142 template<std::size_t i>
143 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr
144 const Real& get () const noexcept {static_assert(0<=i && i<dim); return vect[i];}
145
146 [[nodiscard]] AMREX_GPU_HOST_DEVICE constexpr
147 GpuArray<Real, dim> to_array () const noexcept {
148 GpuArray<Real, dim> retval{};
149 for (int i = 0; i < dim; ++i) {
150 retval[i] = vect[i];
151 }
152 return retval;
153 }
154
161
163
166 [[nodiscard]] AMREX_GPU_HOST_DEVICE constexpr
167 Real* begin () noexcept { return vect; }
168
170
173 [[nodiscard]] AMREX_GPU_HOST_DEVICE constexpr
174 const Real* begin () const noexcept { return vect; }
175
177
180 [[nodiscard]] AMREX_GPU_HOST_DEVICE constexpr
181 Real* end () noexcept { return vect + dim; }
182
184
187 [[nodiscard]] AMREX_GPU_HOST_DEVICE constexpr
188 const Real* end () const noexcept {
189 return vect + dim;
190 }
191
198
200
204 AMREX_GPU_HOST_DEVICE constexpr
205 bool operator== (const RealVectND& p) const noexcept {
206 bool retval = vect[0] == p[0];
207 for (int i=1; i<dim; ++i) {
208 retval = retval && vect[i] == p[i];
209 }
210 return retval;
211 }
212
214
218 AMREX_GPU_HOST_DEVICE constexpr
219 bool operator!= (const RealVectND& p) const noexcept {
220 bool retval = vect[0] != p[0];
221 for (int i=1; i<dim; ++i) {
222 retval = retval || vect[i] != p[i];
223 }
224 return retval;
225 }
226
228
235 AMREX_GPU_HOST_DEVICE inline bool operator< (const RealVectND& p) const noexcept;
236
238
245 AMREX_GPU_HOST_DEVICE inline bool operator<= (const RealVectND& p) const noexcept;
246
248
255 AMREX_GPU_HOST_DEVICE inline bool operator> (const RealVectND& p) const noexcept;
256
258
266 AMREX_GPU_HOST_DEVICE inline bool operator>= (const RealVectND& p) const noexcept;
267
274
276
280
282
287
289
293
295
300
302
306
308
313
315
319
321
324 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real dotProduct (
325 const RealVectND& a_rhs) const noexcept;
326
328
332 const RealVectND& a_rhs) const noexcept requires (dim == 3);
333
334
336
340
342
347
349
353
355
359
361
366
368
372
374
378 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> floor () const noexcept;
379
381
385 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> ceil () const noexcept;
386
388
392 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> round () const noexcept;
393
400
402
406 AMREX_GPU_HOST_DEVICE inline RealVectND& min (const RealVectND& p) noexcept;
407
409
413 AMREX_GPU_HOST_DEVICE inline RealVectND& max (const RealVectND& p) noexcept;
414
421
423
426 AMREX_GPU_HOST_DEVICE inline RealVectND operator+ () const noexcept;
427
429
432 AMREX_GPU_HOST_DEVICE inline RealVectND operator- () const noexcept;
433
435
438 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real sum () const noexcept;
439
441
444 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real vectorLength () const noexcept;
445
447
450 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real radSquared () const noexcept;
451
453
456 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real product () const noexcept;
457
459
463 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline int minDir (const bool& a_doAbs) const noexcept;
464
466
470 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline int maxDir (const bool& a_doAbs) const noexcept;
471
478
480
483 [[nodiscard]] AMREX_GPU_HOST_DEVICE const Real* dataPtr () const noexcept { return vect; }
484
486
490 Real* dataPtr () noexcept { return vect; }
491
498
500
503 static const RealVectND Zero;
504
506
509 static const RealVectND Unit;
510
517
519
523 return RealVectND{0.};
524 }
525
530 return RealVectND{1.};
531 }
532
536 static constexpr std::size_t size () noexcept {
537 return static_cast<std::size_t>(dim);
538 }
539
541 static constexpr int isize () noexcept {
542 return dim;
543 }
544
546
551 template<int new_dim>
553 RealVectND<new_dim> shrink () const noexcept {
554 static_assert(new_dim <= dim);
555 return RealVectND<new_dim>(this->begin());
556 }
557
562 template<int new_dim>
564 RealVectND<new_dim> expand (Real fill_extra=0.) const noexcept {
565 static_assert(new_dim >= dim);
566 RealVectND<new_dim> retval(fill_extra);
567 for (int i=0; i<dim; ++i) {
568 retval[i] = vect[i];
569 }
570 return retval;
571 }
572
577 template<int new_dim>
579 RealVectND<new_dim> resize (Real fill_extra=0.) const noexcept {
580 if constexpr (new_dim > dim) {
581 return expand<new_dim>(fill_extra);
582 } else {
583 return shrink<new_dim>();
584 }
585 }
586
587protected:
591 Real vect[dim] = {};
592};
593
594// Template deduction guide for RealVectND
595template <class... Args>
596requires (IsConvertible_v<Real, Args...>)
597AMREX_GPU_HOST_DEVICE // __device__ for HIP
598RealVectND(Real, Real, Args...) -> RealVectND<sizeof...(Args)+2>;
599
600// Template deduction guide for RealVectND
601template<int dim>
602AMREX_GPU_HOST_DEVICE // __device__ for HIP
604
605// Template deduction guide for RealVectND
606template<int dim>
607AMREX_GPU_HOST_DEVICE // __device__ for HIP
609
610template <int dim>
611inline constexpr const RealVectND<dim> RealVectND<dim>::Zero{Real(0)};
612
613template <int dim>
614inline constexpr const RealVectND<dim> RealVectND<dim>::Unit{Real(1)};
615
616using RealVect = RealVectND<AMREX_SPACEDIM>;
617
618template <int dim>
620RealVectND<dim>&
622 for (int i=0; i<dim; ++i) {
623 vect[i] -= s;
624 }
625 return *this;
626}
627
628template <int dim>
632 for (int i=0; i<dim; ++i) {
633 vect[i] *= s;
634 }
635 return *this;
636}
637
638template <int dim>
642 for (int i=0; i<dim; ++i) {
643 vect[i] -= p[i];
644 }
645 return *this;
646}
647
648template <int dim>
652 return RealVectND<dim>(*this);
653}
654
655template <int dim>
659 RealVectND<dim> retval;
660 for (int i=0; i<dim; ++i) {
661 retval[i] = -vect[i];
662 }
663 return retval;
664}
665
666template <int dim>
670 for (int i=0; i<dim; ++i) {
671 vect[i] *= s;
672 }
673 return *this;
674}
675
676template <int dim>
679RealVectND<dim>::floor () const noexcept {
680 IntVectND<dim> retval;
681 for (int i=0; i<dim; ++i) {
682 retval[i] = static_cast<int>(std::floor(vect[i]));
683 }
684 return retval;
685}
686
687template <int dim>
690RealVectND<dim>::ceil () const noexcept {
691 IntVectND<dim> retval;
692 for (int i=0; i<dim; ++i) {
693 retval[i] = static_cast<int>(std::ceil(vect[i]));
694 }
695 return retval;
696}
697
698template <int dim>
701RealVectND<dim>::round () const noexcept {
702 IntVectND<dim> retval;
703 for (int i=0; i<dim; ++i) {
704 retval[i] = static_cast<int>(std::round(vect[i]));
705 }
706 return retval;
707}
708
709template <int dim>
711Real
712RealVectND<dim>::sum () const noexcept {
713 Real retval = vect[0];
714 for (int i=1; i<dim; ++i) {
715 retval += vect[i];
716 }
717 return retval;
718}
719
720template <int dim>
722Real
724 Real len = this->radSquared();
725 len = std::sqrt(len);
726 return len;
727}
728
729template <int dim>
731Real
733 Real retval = vect[0] * vect[0];
734 for (int i=1; i<dim; ++i) {
735 retval += vect[i] * vect[i];
736 }
737 return retval;
738}
739
740template <int dim>
742Real
743RealVectND<dim>::product () const noexcept {
744 Real retval = vect[0];
745 for (int i=1; i<dim; ++i) {
746 retval *= vect[i];
747 }
748 return retval;
749}
750
751template <int dim>
753bool
754RealVectND<dim>::operator< (const RealVectND<dim>& p) const noexcept {
755 bool retval = vect[0] < p[0];
756 for (int i=1; i<dim; ++i) {
757 retval = retval && vect[i] < p[i];
758 }
759 return retval;
760}
761
762template <int dim>
764bool
765RealVectND<dim>::operator<= (const RealVectND<dim>& p) const noexcept {
766 bool retval = vect[0] <= p[0];
767 for (int i=1; i<dim; ++i) {
768 retval = retval && vect[i] <= p[i];
769 }
770 return retval;
771}
772
773template <int dim>
775bool
777 bool retval = vect[0] > p[0];
778 for (int i=1; i<dim; ++i) {
779 retval = retval && vect[i] > p[i];
780 }
781 return retval;
782}
783
784template <int dim>
786bool
788 bool retval = vect[0] >= p[0];
789 for (int i=1; i<dim; ++i) {
790 retval = retval && vect[i] >= p[i];
791 }
792 return retval;
793}
794
795template <int dim>
799 for (int i=0; i<dim; ++i) {
800 vect[i] = amrex::min(vect[i], p.vect[i]);
801 }
802 return *this;
803}
804
805template <int dim>
809 for (int i=0; i<dim; ++i) {
810 vect[i] = amrex::max(vect[i], p.vect[i]);
811 }
812 return *this;
813}
814
819template <int dim>
821RealVectND<dim> min (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
822 RealVectND<dim> p(p1);
823 return p.min(p2);
824}
825
830template <int dim>
832RealVectND<dim> max (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
833 RealVectND<dim> p(p1);
834 return p.max(p2);
835}
836
837template <int dim>
839Real
840RealVectND<dim>::dotProduct (const RealVectND<dim>& a_rhs) const noexcept {
841 Real retval = vect[0] * a_rhs.vect[0];
842 for (int i=1; i<dim; ++i) {
843 retval += vect[i] * a_rhs.vect[i];
844 }
845 return retval;
846}
847
848template <int dim>
852 requires (dim == 3)
853{
854 RealVectND<dim> tmp(vect[1] * a_rhs[2] - vect[2] * a_rhs[1],
855 vect[2] * a_rhs[0] - vect[0] * a_rhs[2],
856 vect[0] * a_rhs[1] - vect[1] * a_rhs[0]);
857 return tmp;
858}
859
860template <int dim>
864 for (int i=0; i<dim; ++i) {
865 vect[i] += s;
866 }
867 return *this;
868}
869
870template <int dim>
874 for (int i=0; i<dim; ++i) {
875 vect[i] += p[i];
876 }
877 return *this;
878}
879
880template <int dim>
884 for (int i=0; i<dim; ++i) {
885 vect[i] *= p[i];
886 }
887 return *this;
888}
889
890template <int dim>
894 RealVectND<dim> retval;
895 for (int i=0; i<dim; ++i) {
896 retval[i] = vect[i] * s;
897 }
898 return retval;
899}
900
901template <int dim>
905 RealVectND<dim> retval;
906 for (int i=0; i<dim; ++i) {
907 retval[i] = vect[i] - s;
908 }
909 return retval;
910}
911
912template <int dim>
916 RealVectND<dim> retval;
917 for (int i=0; i<dim; ++i) {
918 retval[i] = vect[i] + s;
919 }
920 return retval;
921}
922
923template <int dim>
927 for (int i=0; i<dim; ++i) {
928 vect[i] /= s;
929 }
930 return *this;
931}
932
933template <int dim>
937 for (int i=0; i<dim; ++i) {
938 vect[i] /= p[i];
939 }
940 return *this;
941}
942
943template <int dim>
947 RealVectND<dim> retval;
948 for (int i=0; i<dim; ++i) {
949 retval[i] = vect[i] / s;
950 }
951 return retval;
952}
953
954template <int dim>
956int
957RealVectND<dim>::minDir (const bool& a_doAbs) const noexcept {
958 int mDir = 0;
959 for (int idir = 0; idir < dim; idir++) {
960 if (a_doAbs) {
961 if (std::abs(vect[idir]) < std::abs(vect[mDir])) {
962 mDir = idir;
963 }
964 } else {
965 if (vect[idir] < vect[mDir]) {
966 mDir = idir;
967 }
968 }
969 }
970 return mDir;
971}
972
973template <int dim>
975int
976RealVectND<dim>::maxDir (const bool& a_doAbs) const noexcept {
977 int mDir = 0;
978 for (int idir = 0; idir < dim; idir++) {
979 if (a_doAbs) {
980 if (std::abs(vect[idir]) > std::abs(vect[mDir])) {
981 mDir = idir;
982 }
983 } else {
984 if (vect[idir] > vect[mDir]) {
985 mDir = idir;
986 }
987 }
988 }
989 return mDir;
990}
991
1003template <int dim=AMREX_SPACEDIM>
1005RealVectND<dim> BASISREALV (int dir) noexcept {
1006 AMREX_ASSERT(dir >= 0 && dir < dim);
1007 RealVectND<dim> tmp{0.};
1008 tmp[dir] = 1;
1009 return tmp;
1010}
1011
1016
1021template <int dim>
1024 RealVectND<dim> retval;
1025 for (int i=0; i<dim; ++i) {
1026 retval[i] = s / p[i];
1027 }
1028 return retval;
1029}
1030
1035template <int dim>
1038 RealVectND<dim> retval;
1039 for (int i=0; i<dim; ++i) {
1040 retval[i] = p[i] + s;
1041 }
1042 return retval;
1043}
1044
1048template <int dim>
1051 RealVectND<dim> retval;
1052 for (int i=0; i<dim; ++i) {
1053 retval[i] = s - p[i];
1054 }
1055 return retval;
1056}
1057
1062template <int dim>
1065 RealVectND<dim> retval;
1066 for (int i=0; i<dim; ++i) {
1067 retval[i] = s * p[i];
1068 }
1069 return retval;
1070}
1071
1075template <int dim>
1078 RealVectND<dim> retval;
1079 for (int i=0; i<dim; ++i) {
1080 retval[i] = s[i] / p[i];
1081 }
1082 return retval;
1083}
1084
1088template <int dim>
1091 RealVectND<dim> retval;
1092 for (int i=0; i<dim; ++i) {
1093 retval[i] = p[i] + s[i];
1094 }
1095 return retval;
1096}
1097
1101template <int dim>
1104 RealVectND<dim> retval;
1105 for (int i=0; i<dim; ++i) {
1106 retval[i] = s[i] - p[i];
1107 }
1108 return retval;
1109}
1110
1114template <int dim>
1117 RealVectND<dim> retval;
1118 for (int i=0; i<dim; ++i) {
1119 retval[i] = p[i] * s[i];
1120 }
1121 return retval;
1122}
1123
1128template <int dim>
1131 RealVectND<dim> retval;
1132 for (int i=0; i<dim; ++i) {
1133 retval[i] = s * p[i];
1134 }
1135 return retval;
1136}
1137
1139namespace detail {
1140
1141 template<int dim>
1143 void RealVectCat_imp (Real*& dst, const RealVectND<dim>& src) noexcept {
1144 for (int i=0; i<dim; ++i) {
1145 dst[i] = src[i];
1146 }
1147 dst += dim;
1148 }
1149
1150 template<int dim>
1152 void RealVectSplit_imp2 (RealVectND<dim>& dst, const Real*& src) noexcept {
1153 for (int i=0; i<dim; ++i) {
1154 dst[i] = src[i];
1155 }
1156 src += dim;
1157 }
1158
1159 template<class T, std::size_t...Ns>
1161 T RealVectSplit_imp (T& retval, std::index_sequence<Ns...>, const Real * src) noexcept {
1162 (RealVectSplit_imp2(amrex::get<Ns>(retval), src), ...);
1163 return retval;
1164 }
1165}
1167
1174template<int dim>
1175std::ostream&
1176operator<< (std::ostream& os, const RealVectND<dim>& p)
1177{
1178 return detail::T_vector_write(os, p.begin(), dim);
1179}
1180
1189template<int dim>
1190std::istream&
1191operator>> (std::istream& is, RealVectND<dim>& p)
1192{
1193 return detail::T_vector_read(is, p.begin(), dim);
1194}
1195
1200template<int d, int...dims>
1203constexpr RealVectND<detail::get_sum<d, dims...>()>
1204RealVectCat (const RealVectND<d>& v, const RealVectND<dims>&...vects) noexcept {
1205 RealVectND<detail::get_sum<d, dims...>()> retval {0.};
1206 Real* dst = retval.begin();
1207 detail::RealVectCat_imp(dst, v);
1208 (detail::RealVectCat_imp(dst, vects), ...);
1209 return retval;
1210}
1211
1216template<int d, int...dims>
1219constexpr GpuTuple<RealVectND<d>, RealVectND<dims>...>
1220RealVectSplit (const RealVectND<detail::get_sum<d, dims...>()>& v) noexcept {
1222 return detail::RealVectSplit_imp(retval,
1223 std::make_index_sequence<1 + sizeof...(dims)>(),
1224 v.begin());
1225}
1226
1231template<int new_dim, int old_dim>
1234constexpr RealVectND<new_dim>
1236 return iv.template shrink<new_dim>();
1237}
1238
1243template<int new_dim, int old_dim>
1246constexpr RealVectND<new_dim>
1247RealVectExpand (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1248 return iv.template expand<new_dim>(fill_extra);
1249}
1250
1255template<int new_dim, int old_dim>
1258constexpr RealVectND<new_dim>
1259RealVectResize (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1260 return iv.template resize<new_dim>(fill_extra);
1261}
1262
1265} // namespace amrex
1266
1267// Spcialize std::tuple_size for RealVectND. Used by structured bindings.
1268template<int dim>
1269struct std::tuple_size<amrex::RealVectND<dim>> {
1270 static constexpr std::size_t value = dim;
1271};
1272
1273// Spcialize std::tuple_element for RealVectND. Used by structured bindings.
1274template<std::size_t s, int dim>
1275struct std::tuple_element<s, amrex::RealVectND<dim>> {
1277};
1278
1279#endif
#define BL_ASSERT(EX)
Definition AMReX_BLassert.H:39
#define AMREX_ASSERT(EX)
Definition AMReX_BLassert.H:38
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
int idir
Definition AMReX_HypreMLABecLap.cpp:1143
GPU-compatible tuple.
Definition AMReX_Tuple.H:98
An Integer Vector in dim-Dimensional Space.
Definition AMReX_IntVect.H:149
A Real vector in dim-dimensional space.
Definition AMReX_RealVect.H:34
__host__ __device__ bool operator<=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:765
__host__ __device__ constexpr const Real & get() const noexcept
Returns a reference to the i'th coordinate of the RealVectND. Used by structured bindings.
Definition AMReX_RealVect.H:144
__host__ __device__ RealVectND & operator*=(Real s) noexcept
Definition AMReX_RealVect.H:631
__host__ __device__ constexpr Real * begin() noexcept
Definition AMReX_RealVect.H:167
__host__ __device__ int maxDir(const bool &a_doAbs) const noexcept
Definition AMReX_RealVect.H:976
__host__ __device__ constexpr Real * end() noexcept
Definition AMReX_RealVect.H:181
constexpr RealVectND() noexcept
Definition AMReX_RealVect.H:45
__host__ __device__ RealVectND & max(const RealVectND &p) noexcept
Definition AMReX_RealVect.H:808
__host__ __device__ RealVectND< new_dim > shrink() const noexcept
Returns a new RealVectND of size new_dim and assigns the first new_dim values of this RealVectND to i...
Definition AMReX_RealVect.H:553
__host__ __device__ RealVectND operator-() const noexcept
Definition AMReX_RealVect.H:658
__host__ __device__ constexpr bool operator==(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:205
__host__ static __device__ constexpr int isize() noexcept
Definition AMReX_RealVect.H:541
__host__ __device__ RealVectND & operator+=(Real s) noexcept
Definition AMReX_RealVect.H:863
RealVectND(const std::vector< Real > &vr) noexcept
Definition AMReX_RealVect.H:47
__host__ __device__ Real dotProduct(const RealVectND &a_rhs) const noexcept
Definition AMReX_RealVect.H:840
__host__ __device__ IntVectND< dim > round() const noexcept
Definition AMReX_RealVect.H:701
__host__ static __device__ constexpr RealVectND TheZeroVector() noexcept
Definition AMReX_RealVect.H:522
__host__ __device__ RealVectND crossProduct(const RealVectND &a_rhs) const noexcept
Definition AMReX_RealVect.H:851
__host__ __device__ constexpr const Real * begin() const noexcept
Definition AMReX_RealVect.H:174
__host__ __device__ RealVectND operator/(Real s) const noexcept
Definition AMReX_RealVect.H:946
__host__ __device__ RealVectND operator+() const noexcept
Definition AMReX_RealVect.H:651
__host__ __device__ bool operator>=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:787
__host__ __device__ const Real * dataPtr() const noexcept
Definition AMReX_RealVect.H:483
__host__ __device__ constexpr RealVectND(Real s) noexcept
Definition AMReX_RealVect.H:67
__host__ __device__ RealVectND & scale(Real s) noexcept
Definition AMReX_RealVect.H:669
__host__ __device__ Real radSquared() const noexcept
Definition AMReX_RealVect.H:732
__host__ __device__ bool operator<(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:754
__host__ __device__ Real sum() const noexcept
Definition AMReX_RealVect.H:712
__host__ static __device__ constexpr std::size_t size() noexcept
Definition AMReX_RealVect.H:536
__host__ __device__ constexpr RealVectND(const IntVectND< dim > &iv) noexcept
Definition AMReX_RealVect.H:91
Real & operator[](int i) &&=delete
__host__ __device__ constexpr const Real * end() const noexcept
Definition AMReX_RealVect.H:188
Real vect[dim]
Definition AMReX_RealVect.H:591
__host__ __device__ Real product() const noexcept
Definition AMReX_RealVect.H:743
__host__ __device__ constexpr Real & get() noexcept
Returns a reference to the i'th coordinate of the RealVectND. Used by structured bindings.
Definition AMReX_RealVect.H:139
__host__ __device__ Real vectorLength() const noexcept
Definition AMReX_RealVect.H:723
__host__ __device__ bool operator>(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:776
__host__ __device__ RealVectND operator*(Real s) const noexcept
Definition AMReX_RealVect.H:893
__host__ __device__ int minDir(const bool &a_doAbs) const noexcept
Definition AMReX_RealVect.H:957
__host__ __device__ constexpr RealVectND(const GpuArray< Real, dim > ga) noexcept
Definition AMReX_RealVect.H:102
__host__ __device__ IntVectND< dim > floor() const noexcept
Definition AMReX_RealVect.H:679
__host__ __device__ IntVectND< dim > ceil() const noexcept
Definition AMReX_RealVect.H:690
__host__ __device__ RealVectND & operator/=(Real s) noexcept
Definition AMReX_RealVect.H:926
__host__ static __device__ constexpr RealVectND TheUnitVector() noexcept
Definition AMReX_RealVect.H:529
static const RealVectND Unit
Definition AMReX_RealVect.H:509
static const RealVectND Zero
Definition AMReX_RealVect.H:503
__host__ __device__ constexpr GpuArray< Real, dim > to_array() const noexcept
Definition AMReX_RealVect.H:147
__host__ __device__ RealVectND & operator-=(Real s) noexcept
Definition AMReX_RealVect.H:621
__host__ __device__ RealVectND< new_dim > resize(Real fill_extra=0.) const noexcept
Returns a new RealVectND of size new_dim by either shrinking or expanding this RealVectND.
Definition AMReX_RealVect.H:579
Real value_type
Definition AMReX_RealVect.H:545
__host__ __device__ Real * dataPtr() noexcept
Definition AMReX_RealVect.H:490
__host__ __device__ RealVectND(const Real *a) noexcept
Definition AMReX_RealVect.H:79
__host__ __device__ RealVectND< new_dim > expand(Real fill_extra=0.) const noexcept
Returns a new RealVectND of size new_dim and assigns all values of this RealVectND to it andĀ fill_ext...
Definition AMReX_RealVect.H:564
__host__ __device__ RealVectND & min(const RealVectND &p) noexcept
Definition AMReX_RealVect.H:798
__host__ __device__ constexpr bool operator!=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:219
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:50
std::ostream & operator<<(std::ostream &os, AmrMesh const &amr_mesh)
Stream helper; forwards to the friend declared inside AmrMesh.
Definition AMReX_AmrMesh.cpp:1306
__host__ __device__ constexpr RealVectND< new_dim > RealVectExpand(const RealVectND< old_dim > &iv, Real fill_extra=0) noexcept
Returns a new RealVectND of size new_dim and assigns all values of iv to it andĀ fill_extra to the rem...
Definition AMReX_RealVect.H:1247
__host__ __device__ GpuComplex< T > operator*(const GpuComplex< T > &a_x, const GpuComplex< U > &a_y) noexcept
Multiply two complex numbers.
Definition AMReX_GpuComplex.H:257
__host__ __device__ RealVectND< dim > BASISREALV(int dir) noexcept
Definition AMReX_RealVect.H:1005
__host__ __device__ constexpr const T & min(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:25
constexpr bool IsConvertible_v
Definition AMReX_TypeTraits.H:256
RealVectND< 3 > RealVect
Definition AMReX_ParmParse.H:37
__host__ __device__ constexpr IntVectND< dim > scale(const IntVectND< dim > &p, int s) noexcept
Returns a IntVectND obtained by multiplying each of the components of this IntVectND by s.
Definition AMReX_IntVect.H:1102
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:45
__host__ __device__ GpuComplex< T > operator/(const GpuComplex< T > &a_x, const GpuComplex< T > &a_y) noexcept
Divide a complex number by another one.
Definition AMReX_GpuComplex.H:293
__host__ __device__ constexpr GpuTuple< RealVectND< d >, RealVectND< dims >... > RealVectSplit(const RealVectND< detail::get_sum< d, dims... >()> &v) noexcept
Returns a tuple of RealVectND obtained by splitting the input RealVectND according to the dimensions ...
Definition AMReX_RealVect.H:1220
__host__ __device__ constexpr RealVectND< detail::get_sum< d, dims... >()> RealVectCat(const RealVectND< d > &v, const RealVectND< dims > &...vects) noexcept
Returns a RealVectND obtained by concatenating the input RealVectNDs. The dimension of the return val...
Definition AMReX_RealVect.H:1204
__host__ __device__ constexpr RealVectND< new_dim > RealVectResize(const RealVectND< old_dim > &iv, Real fill_extra=0) noexcept
Returns a new RealVectND of size new_dim by either shrinking or expanding iv.
Definition AMReX_RealVect.H:1259
std::istream & operator>>(std::istream &is, BoxND< dim > &bx)
Read from istream.
Definition AMReX_Box.H:1834
__host__ __device__ constexpr RealVectND< new_dim > RealVectShrink(const RealVectND< old_dim > &iv) noexcept
Returns a new RealVectND of size new_dim and assigns the first new_dim values of iv to it.
Definition AMReX_RealVect.H:1235
__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
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:43
amrex::Real type
Definition AMReX_RealVect.H:1276