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 std::enable_if_t<
61 (sizeof...(Args) + 2 == dim) &&
62 IsConvertible_v<Real, Args...>,
63 int> = 0>
65 constexpr RealVectND (Real i, Real j, Args... ks) noexcept
66 : vect{i, j, static_cast<Real>(ks)...} {}
67
69 explicit constexpr RealVectND (Real s) noexcept {
70 for (int i = 0; i < dim; ++i) {
71 vect[i] = s;
72 }
73 }
74
76
81 explicit RealVectND (const Real* a) noexcept {
82 for (int i = 0; i < dim; ++i) {
83 vect[i] = a[i];
84 }
85 }
86
88
92 AMREX_GPU_HOST_DEVICE constexpr
93 RealVectND (const IntVectND<dim>& iv) noexcept {
94 for (int i = 0; i < dim; ++i) {
95 vect[i] = static_cast<Real>(iv[i]);
96 }
97 }
98
100
103 AMREX_GPU_HOST_DEVICE constexpr
104 RealVectND (const GpuArray<Real, dim> ga) noexcept {
105 for (int i = 0; i < dim; ++i) {
106 vect[i] = ga[i];
107 }
108 }
109
111
115 Real& operator[] (int i) && = delete;
116
118
122 AMREX_GPU_HOST_DEVICE inline constexpr
123 Real& operator[] (int i) & noexcept {
124 AMREX_ASSERT(i >= 0 && i < dim);
125 return vect[i];
126 }
127
129
132 AMREX_GPU_HOST_DEVICE inline constexpr
133 const Real& operator[] (int i) const& noexcept {
134 AMREX_ASSERT(i >= 0 && i < dim);
135 return vect[i];
136 }
137
139 template<std::size_t i>
140 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr
141 Real& get () noexcept {static_assert(0<=i && i<dim); return vect[i];}
142
144 template<std::size_t i>
145 [[nodiscard]] AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE constexpr
146 const Real& get () const noexcept {static_assert(0<=i && i<dim); return vect[i];}
147
148 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
149 GpuArray<Real, dim> to_array () const noexcept {
150 GpuArray<Real, dim> retval{};
151 for (int i = 0; i < dim; ++i) {
152 retval[i] = vect[i];
153 }
154 return retval;
155 }
156
163
165
168 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
169 Real* begin () noexcept { return vect; }
170
172
175 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
176 const Real* begin () const noexcept { return vect; }
177
179
182 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
183 Real* end () noexcept { return vect + dim; }
184
186
189 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
190 const Real* end () const noexcept {
191 return vect + dim;
192 }
193
200
202
206 AMREX_GPU_HOST_DEVICE constexpr
207 bool operator== (const RealVectND& p) const noexcept {
208 bool retval = vect[0] == p[0];
209 for (int i=1; i<dim; ++i) {
210 retval = retval && vect[i] == p[i];
211 }
212 return retval;
213 }
214
216
220 AMREX_GPU_HOST_DEVICE constexpr
221 bool operator!= (const RealVectND& p) const noexcept {
222 bool retval = vect[0] != p[0];
223 for (int i=1; i<dim; ++i) {
224 retval = retval || vect[i] != p[i];
225 }
226 return retval;
227 }
228
230
237 AMREX_GPU_HOST_DEVICE inline bool operator< (const RealVectND& p) const noexcept;
238
240
247 AMREX_GPU_HOST_DEVICE inline bool operator<= (const RealVectND& p) const noexcept;
248
250
257 AMREX_GPU_HOST_DEVICE inline bool operator> (const RealVectND& p) const noexcept;
258
260
268 AMREX_GPU_HOST_DEVICE inline bool operator>= (const RealVectND& p) const noexcept;
269
276
278
282
284
289
291
295
297
302
304
308
310
315
317
321
323
326 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real dotProduct (
327 const RealVectND& a_rhs) const noexcept;
328
330
333 template <int N=dim, std::enable_if_t<( N==3 ), int> = 0>
335 const RealVectND& a_rhs) const noexcept;
336
338
342
344
349
351
355
357
361
363
368
370
374
376
380 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> floor () const noexcept;
381
383
387 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> ceil () const noexcept;
388
390
394 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline IntVectND<dim> round () const noexcept;
395
402
404
408 AMREX_GPU_HOST_DEVICE inline RealVectND& min (const RealVectND& p) noexcept;
409
411
415 AMREX_GPU_HOST_DEVICE inline RealVectND& max (const RealVectND& p) noexcept;
416
423
425
428 AMREX_GPU_HOST_DEVICE inline RealVectND operator+ () const noexcept;
429
431
434 AMREX_GPU_HOST_DEVICE inline RealVectND operator- () const noexcept;
435
437
440 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real sum () const noexcept;
441
443
446 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real vectorLength () const noexcept;
447
449
452 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real radSquared () const noexcept;
453
455
458 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real product () const noexcept;
459
461
465 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline int minDir (const bool& a_doAbs) const noexcept;
466
468
472 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline int maxDir (const bool& a_doAbs) const noexcept;
473
480
482
485 [[nodiscard]] AMREX_GPU_HOST_DEVICE const Real* dataPtr () const noexcept { return vect; }
486
488
492 Real* dataPtr () noexcept { return vect; }
493
500
502
505 static const RealVectND Zero;
506
508
511 static const RealVectND Unit;
512
519
521
525 return RealVectND{0.};
526 }
527
532 return RealVectND{1.};
533 }
534
538 static constexpr std::size_t size () noexcept {
539 return static_cast<std::size_t>(dim);
540 }
541
543 static constexpr int isize () noexcept {
544 return dim;
545 }
546
548
553 template<int new_dim>
555 RealVectND<new_dim> shrink () const noexcept {
556 static_assert(new_dim <= dim);
557 return RealVectND<new_dim>(this->begin());
558 }
559
564 template<int new_dim>
566 RealVectND<new_dim> expand (Real fill_extra=0.) const noexcept {
567 static_assert(new_dim >= dim);
568 RealVectND<new_dim> retval(fill_extra);
569 for (int i=0; i<dim; ++i) {
570 retval[i] = vect[i];
571 }
572 return retval;
573 }
574
579 template<int new_dim>
581 RealVectND<new_dim> resize (Real fill_extra=0.) const noexcept {
582 if constexpr (new_dim > dim) {
583 return expand<new_dim>(fill_extra);
584 } else {
585 return shrink<new_dim>();
586 }
587 }
588
589protected:
593 Real vect[dim] = {};
594};
595
596// Template deduction guide for RealVectND
597template <class...Args,
598 std::enable_if_t<
599 IsConvertible_v<Real, Args...>,
600 int> = 0>
601AMREX_GPU_HOST_DEVICE // __device__ for HIP
602RealVectND(Real, Real, Args...) -> RealVectND<sizeof...(Args)+2>;
603
604// Template deduction guide for RealVectND
605template<int dim>
606AMREX_GPU_HOST_DEVICE // __device__ for HIP
608
609// Template deduction guide for RealVectND
610template<int dim>
611AMREX_GPU_HOST_DEVICE // __device__ for HIP
613
614template <int dim>
615inline constexpr const RealVectND<dim> RealVectND<dim>::Zero{Real(0)};
616
617template <int dim>
618inline constexpr const RealVectND<dim> RealVectND<dim>::Unit{Real(1)};
619
620using RealVect = RealVectND<AMREX_SPACEDIM>;
621
622template <int dim>
624RealVectND<dim>&
626 for (int i=0; i<dim; ++i) {
627 vect[i] -= s;
628 }
629 return *this;
630}
631
632template <int dim>
636 for (int i=0; i<dim; ++i) {
637 vect[i] *= s;
638 }
639 return *this;
640}
641
642template <int dim>
646 for (int i=0; i<dim; ++i) {
647 vect[i] -= p[i];
648 }
649 return *this;
650}
651
652template <int dim>
656 return RealVectND<dim>(*this);
657}
658
659template <int dim>
663 RealVectND<dim> retval;
664 for (int i=0; i<dim; ++i) {
665 retval[i] = -vect[i];
666 }
667 return retval;
668}
669
670template <int dim>
674 for (int i=0; i<dim; ++i) {
675 vect[i] *= s;
676 }
677 return *this;
678}
679
680template <int dim>
683RealVectND<dim>::floor () const noexcept {
684 IntVectND<dim> retval;
685 for (int i=0; i<dim; ++i) {
686 retval[i] = static_cast<int>(std::floor(vect[i]));
687 }
688 return retval;
689}
690
691template <int dim>
694RealVectND<dim>::ceil () const noexcept {
695 IntVectND<dim> retval;
696 for (int i=0; i<dim; ++i) {
697 retval[i] = static_cast<int>(std::ceil(vect[i]));
698 }
699 return retval;
700}
701
702template <int dim>
705RealVectND<dim>::round () const noexcept {
706 IntVectND<dim> retval;
707 for (int i=0; i<dim; ++i) {
708 retval[i] = static_cast<int>(std::round(vect[i]));
709 }
710 return retval;
711}
712
713template <int dim>
715Real
716RealVectND<dim>::sum () const noexcept {
717 Real retval = vect[0];
718 for (int i=1; i<dim; ++i) {
719 retval += vect[i];
720 }
721 return retval;
722}
723
724template <int dim>
726Real
728 Real len = this->radSquared();
729 len = std::sqrt(len);
730 return len;
731}
732
733template <int dim>
735Real
737 Real retval = vect[0] * vect[0];
738 for (int i=1; i<dim; ++i) {
739 retval += vect[i] * vect[i];
740 }
741 return retval;
742}
743
744template <int dim>
746Real
747RealVectND<dim>::product () const noexcept {
748 Real retval = vect[0];
749 for (int i=1; i<dim; ++i) {
750 retval *= vect[i];
751 }
752 return retval;
753}
754
755template <int dim>
757bool
758RealVectND<dim>::operator< (const RealVectND<dim>& p) const noexcept {
759 bool retval = vect[0] < p[0];
760 for (int i=1; i<dim; ++i) {
761 retval = retval && vect[i] < p[i];
762 }
763 return retval;
764}
765
766template <int dim>
768bool
769RealVectND<dim>::operator<= (const RealVectND<dim>& p) const noexcept {
770 bool retval = vect[0] <= p[0];
771 for (int i=1; i<dim; ++i) {
772 retval = retval && vect[i] <= p[i];
773 }
774 return retval;
775}
776
777template <int dim>
779bool
781 bool retval = vect[0] > p[0];
782 for (int i=1; i<dim; ++i) {
783 retval = retval && vect[i] > p[i];
784 }
785 return retval;
786}
787
788template <int dim>
790bool
792 bool retval = vect[0] >= p[0];
793 for (int i=1; i<dim; ++i) {
794 retval = retval && vect[i] >= p[i];
795 }
796 return retval;
797}
798
799template <int dim>
803 for (int i=0; i<dim; ++i) {
804 vect[i] = amrex::min(vect[i], p.vect[i]);
805 }
806 return *this;
807}
808
809template <int dim>
813 for (int i=0; i<dim; ++i) {
814 vect[i] = amrex::max(vect[i], p.vect[i]);
815 }
816 return *this;
817}
818
823template <int dim>
825RealVectND<dim> min (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
826 RealVectND<dim> p(p1);
827 return p.min(p2);
828}
829
834template <int dim>
836RealVectND<dim> max (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
837 RealVectND<dim> p(p1);
838 return p.max(p2);
839}
840
841template <int dim>
843Real
844RealVectND<dim>::dotProduct (const RealVectND<dim>& a_rhs) const noexcept {
845 Real retval = vect[0] * a_rhs.vect[0];
846 for (int i=1; i<dim; ++i) {
847 retval += vect[i] * a_rhs.vect[i];
848 }
849 return retval;
850}
851
852template <int dim>
853template <int N, std::enable_if_t<( N==3 ), int>>
856RealVectND<dim>::crossProduct (const RealVectND<dim>& a_rhs) const noexcept {
857 RealVectND<dim> tmp(vect[1] * a_rhs[2] - vect[2] * a_rhs[1],
858 vect[2] * a_rhs[0] - vect[0] * a_rhs[2],
859 vect[0] * a_rhs[1] - vect[1] * a_rhs[0]);
860 return tmp;
861}
862
863template <int dim>
867 for (int i=0; i<dim; ++i) {
868 vect[i] += s;
869 }
870 return *this;
871}
872
873template <int dim>
877 for (int i=0; i<dim; ++i) {
878 vect[i] += p[i];
879 }
880 return *this;
881}
882
883template <int dim>
887 for (int i=0; i<dim; ++i) {
888 vect[i] *= p[i];
889 }
890 return *this;
891}
892
893template <int dim>
897 RealVectND<dim> retval;
898 for (int i=0; i<dim; ++i) {
899 retval[i] = vect[i] * s;
900 }
901 return retval;
902}
903
904template <int dim>
908 RealVectND<dim> retval;
909 for (int i=0; i<dim; ++i) {
910 retval[i] = vect[i] - s;
911 }
912 return retval;
913}
914
915template <int dim>
919 RealVectND<dim> retval;
920 for (int i=0; i<dim; ++i) {
921 retval[i] = vect[i] + s;
922 }
923 return retval;
924}
925
926template <int dim>
930 for (int i=0; i<dim; ++i) {
931 vect[i] /= s;
932 }
933 return *this;
934}
935
936template <int dim>
940 for (int i=0; i<dim; ++i) {
941 vect[i] /= p[i];
942 }
943 return *this;
944}
945
946template <int dim>
950 RealVectND<dim> retval;
951 for (int i=0; i<dim; ++i) {
952 retval[i] = vect[i] / s;
953 }
954 return retval;
955}
956
957template <int dim>
959int
960RealVectND<dim>::minDir (const bool& a_doAbs) const noexcept {
961 int mDir = 0;
962 for (int idir = 0; idir < dim; idir++) {
963 if (a_doAbs) {
964 if (std::abs(vect[idir]) < std::abs(vect[mDir])) {
965 mDir = idir;
966 }
967 } else {
968 if (vect[idir] < vect[mDir]) {
969 mDir = idir;
970 }
971 }
972 }
973 return mDir;
974}
975
976template <int dim>
978int
979RealVectND<dim>::maxDir (const bool& a_doAbs) const noexcept {
980 int mDir = 0;
981 for (int idir = 0; idir < dim; idir++) {
982 if (a_doAbs) {
983 if (std::abs(vect[idir]) > std::abs(vect[mDir])) {
984 mDir = idir;
985 }
986 } else {
987 if (vect[idir] > vect[mDir]) {
988 mDir = idir;
989 }
990 }
991 }
992 return mDir;
993}
994
1006template <int dim=AMREX_SPACEDIM>
1008RealVectND<dim> BASISREALV (int dir) noexcept {
1009 AMREX_ASSERT(dir >= 0 && dir < dim);
1010 RealVectND<dim> tmp{0.};
1011 tmp[dir] = 1;
1012 return tmp;
1013}
1014
1019
1024template <int dim>
1027 RealVectND<dim> retval;
1028 for (int i=0; i<dim; ++i) {
1029 retval[i] = s / p[i];
1030 }
1031 return retval;
1032}
1033
1038template <int dim>
1041 RealVectND<dim> retval;
1042 for (int i=0; i<dim; ++i) {
1043 retval[i] = p[i] + s;
1044 }
1045 return retval;
1046}
1047
1051template <int dim>
1054 RealVectND<dim> retval;
1055 for (int i=0; i<dim; ++i) {
1056 retval[i] = s - p[i];
1057 }
1058 return retval;
1059}
1060
1065template <int dim>
1068 RealVectND<dim> retval;
1069 for (int i=0; i<dim; ++i) {
1070 retval[i] = s * p[i];
1071 }
1072 return retval;
1073}
1074
1078template <int dim>
1081 RealVectND<dim> retval;
1082 for (int i=0; i<dim; ++i) {
1083 retval[i] = s[i] / p[i];
1084 }
1085 return retval;
1086}
1087
1091template <int dim>
1094 RealVectND<dim> retval;
1095 for (int i=0; i<dim; ++i) {
1096 retval[i] = p[i] + s[i];
1097 }
1098 return retval;
1099}
1100
1104template <int dim>
1107 RealVectND<dim> retval;
1108 for (int i=0; i<dim; ++i) {
1109 retval[i] = s[i] - p[i];
1110 }
1111 return retval;
1112}
1113
1117template <int dim>
1120 RealVectND<dim> retval;
1121 for (int i=0; i<dim; ++i) {
1122 retval[i] = p[i] * s[i];
1123 }
1124 return retval;
1125}
1126
1131template <int dim>
1134 RealVectND<dim> retval;
1135 for (int i=0; i<dim; ++i) {
1136 retval[i] = s * p[i];
1137 }
1138 return retval;
1139}
1140
1142namespace detail {
1143 std::ostream& real_vector_write (std::ostream& os, const Real* p, int dim);
1144 std::istream& real_vector_read (std::istream& is, Real* p, int dim);
1145
1146 template<int dim>
1148 void RealVectCat_imp (Real*& dst, const RealVectND<dim>& src) noexcept {
1149 for (int i=0; i<dim; ++i) {
1150 dst[i] = src[i];
1151 }
1152 dst += dim;
1153 }
1154
1155 template<int dim>
1157 void RealVectSplit_imp2 (RealVectND<dim>& dst, const Real*& src) noexcept {
1158 for (int i=0; i<dim; ++i) {
1159 dst[i] = src[i];
1160 }
1161 src += dim;
1162 }
1163
1164 template<class T, std::size_t...Ns>
1166 T RealVectSplit_imp (T& retval, std::index_sequence<Ns...>, const Real * src) noexcept {
1167 (RealVectSplit_imp2(amrex::get<Ns>(retval), src), ...);
1168 return retval;
1169 }
1170}
1172
1173template<int dim>
1174std::ostream&
1175operator<< (std::ostream& os, const RealVectND<dim>& p)
1176{
1177 return detail::real_vector_write(os, p.begin(), dim);
1178}
1179
1180template<int dim>
1181std::istream&
1182operator>> (std::istream& is, RealVectND<dim>& p)
1183{
1184 return detail::real_vector_read(is, p.begin(), dim);
1185}
1186
1191template<int d, int...dims>
1194constexpr RealVectND<detail::get_sum<d, dims...>()>
1195RealVectCat (const RealVectND<d>& v, const RealVectND<dims>&...vects) noexcept {
1196 RealVectND<detail::get_sum<d, dims...>()> retval {0.};
1197 Real* dst = retval.begin();
1198 detail::RealVectCat_imp(dst, v);
1199 (detail::RealVectCat_imp(dst, vects), ...);
1200 return retval;
1201}
1202
1207template<int d, int...dims>
1210constexpr GpuTuple<RealVectND<d>, RealVectND<dims>...>
1211RealVectSplit (const RealVectND<detail::get_sum<d, dims...>()>& v) noexcept {
1213 return detail::RealVectSplit_imp(retval,
1214 std::make_index_sequence<1 + sizeof...(dims)>(),
1215 v.begin());
1216}
1217
1222template<int new_dim, int old_dim>
1225constexpr RealVectND<new_dim>
1227 return iv.template shrink<new_dim>();
1228}
1229
1234template<int new_dim, int old_dim>
1237constexpr RealVectND<new_dim>
1238RealVectExpand (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1239 return iv.template expand<new_dim>(fill_extra);
1240}
1241
1246template<int new_dim, int old_dim>
1249constexpr RealVectND<new_dim>
1250RealVectResize (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1251 return iv.template resize<new_dim>(fill_extra);
1252}
1253
1256} // namespace amrex
1257
1258// Spcialize std::tuple_size for RealVectND. Used by structured bindings.
1259template<int dim>
1260struct std::tuple_size<amrex::RealVectND<dim>> {
1261 static constexpr std::size_t value = dim;
1262};
1263
1264// Spcialize std::tuple_element for RealVectND. Used by structured bindings.
1265template<std::size_t s, int dim>
1266struct std::tuple_element<s, amrex::RealVectND<dim>> {
1268};
1269
1270#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:1093
GPU-compatible tuple.
Definition AMReX_Tuple.H:98
An Integer Vector in dim-Dimensional Space.
Definition AMReX_IntVect.H:57
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:769
__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:146
__host__ __device__ RealVectND & operator*=(Real s) noexcept
Definition AMReX_RealVect.H:635
__host__ __device__ constexpr Real * begin() noexcept
Definition AMReX_RealVect.H:169
__host__ __device__ int maxDir(const bool &a_doAbs) const noexcept
Definition AMReX_RealVect.H:979
__host__ __device__ constexpr Real * end() noexcept
Definition AMReX_RealVect.H:183
constexpr RealVectND() noexcept
Definition AMReX_RealVect.H:45
__host__ __device__ RealVectND & max(const RealVectND &p) noexcept
Definition AMReX_RealVect.H:812
__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:555
__host__ __device__ RealVectND operator-() const noexcept
Definition AMReX_RealVect.H:662
__host__ __device__ constexpr bool operator==(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:207
__host__ __device__ constexpr RealVectND(Real i, Real j, Args... ks) noexcept
Definition AMReX_RealVect.H:65
__host__ static __device__ constexpr int isize() noexcept
Definition AMReX_RealVect.H:543
__host__ __device__ RealVectND & operator+=(Real s) noexcept
Definition AMReX_RealVect.H:866
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:844
__host__ __device__ RealVectND crossProduct(const RealVectND &a_rhs) const noexcept
__host__ __device__ IntVectND< dim > round() const noexcept
Definition AMReX_RealVect.H:705
__host__ static __device__ constexpr RealVectND TheZeroVector() noexcept
Definition AMReX_RealVect.H:524
__host__ __device__ constexpr const Real * begin() const noexcept
Definition AMReX_RealVect.H:176
__host__ __device__ RealVectND operator/(Real s) const noexcept
Definition AMReX_RealVect.H:949
__host__ __device__ RealVectND operator+() const noexcept
Definition AMReX_RealVect.H:655
__host__ __device__ bool operator>=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:791
__host__ __device__ const Real * dataPtr() const noexcept
Definition AMReX_RealVect.H:485
__host__ __device__ constexpr RealVectND(Real s) noexcept
Definition AMReX_RealVect.H:69
__host__ __device__ RealVectND & scale(Real s) noexcept
Definition AMReX_RealVect.H:673
__host__ __device__ Real radSquared() const noexcept
Definition AMReX_RealVect.H:736
__host__ __device__ bool operator<(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:758
__host__ __device__ Real sum() const noexcept
Definition AMReX_RealVect.H:716
__host__ static __device__ constexpr std::size_t size() noexcept
Definition AMReX_RealVect.H:538
__host__ __device__ constexpr RealVectND(const IntVectND< dim > &iv) noexcept
Definition AMReX_RealVect.H:93
Real & operator[](int i) &&=delete
__host__ __device__ constexpr const Real * end() const noexcept
Definition AMReX_RealVect.H:190
Real vect[dim]
Definition AMReX_RealVect.H:593
__host__ __device__ Real product() const noexcept
Definition AMReX_RealVect.H:747
__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:141
__host__ __device__ Real vectorLength() const noexcept
Definition AMReX_RealVect.H:727
__host__ __device__ bool operator>(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:780
__host__ __device__ RealVectND operator*(Real s) const noexcept
Definition AMReX_RealVect.H:896
__host__ __device__ int minDir(const bool &a_doAbs) const noexcept
Definition AMReX_RealVect.H:960
__host__ __device__ constexpr RealVectND(const GpuArray< Real, dim > ga) noexcept
Definition AMReX_RealVect.H:104
__host__ __device__ IntVectND< dim > floor() const noexcept
Definition AMReX_RealVect.H:683
__host__ __device__ IntVectND< dim > ceil() const noexcept
Definition AMReX_RealVect.H:694
__host__ __device__ RealVectND & operator/=(Real s) noexcept
Definition AMReX_RealVect.H:929
__host__ static __device__ constexpr RealVectND TheUnitVector() noexcept
Definition AMReX_RealVect.H:531
static const RealVectND Unit
Definition AMReX_RealVect.H:511
static const RealVectND Zero
Definition AMReX_RealVect.H:505
__host__ __device__ constexpr GpuArray< Real, dim > to_array() const noexcept
Definition AMReX_RealVect.H:149
__host__ __device__ RealVectND & operator-=(Real s) noexcept
Definition AMReX_RealVect.H:625
__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:581
Real value_type
Definition AMReX_RealVect.H:547
__host__ __device__ Real * dataPtr() noexcept
Definition AMReX_RealVect.H:492
__host__ __device__ RealVectND(const Real *a) noexcept
Definition AMReX_RealVect.H:81
__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:566
__host__ __device__ RealVectND & min(const RealVectND &p) noexcept
Definition AMReX_RealVect.H:802
__host__ __device__ constexpr bool operator!=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:221
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_Amr.cpp:49
__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:1238
__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:1008
__host__ __device__ constexpr const T & min(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:24
constexpr bool IsConvertible_v
Definition AMReX_TypeTraits.H:276
RealVectND< 3 > RealVect
Definition AMReX_ParmParse.H:35
__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:1013
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:44
__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:1211
__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:1195
__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:1250
std::istream & operator>>(std::istream &is, BoxND< dim > &bx)
Read from istream.
Definition AMReX_Box.H:1825
std::ostream & operator<<(std::ostream &os, AmrMesh const &amr_mesh)
Definition AMReX_AmrMesh.cpp:1237
__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:1226
__host__ __device__ XDim3 operator-(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:34
__host__ __device__ XDim3 operator+(XDim3 const &a, XDim3 const &b)
Definition AMReX_Dim3.H:28
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:41
amrex::Real type
Definition AMReX_RealVect.H:1267