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
31template <int dim>
33 public:
38
40
43 constexpr RealVectND () noexcept {} // NOLINT
44
45 explicit RealVectND (const std::vector<Real>& vr) noexcept {
46 BL_ASSERT(vr.size() == dim);
47 for (int i = 0; i < dim; ++i) {
48 vect[i] = vr[i];
49 }
50 }
51
53
57 template <class... Args,
58 std::enable_if_t<
59 (sizeof...(Args) + 2 == dim) &&
60 IsConvertible_v<Real, Args...>,
61 int> = 0>
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 inline 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 inline 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 inline 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 inline constexpr
167 Real* begin () noexcept { return vect; }
168
170
173 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
174 const Real* begin () const noexcept { return vect; }
175
177
180 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline constexpr
181 Real* end () noexcept { return vect + dim; }
182
184
187 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline 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
286 AMREX_GPU_HOST_DEVICE inline RealVectND operator+ (Real s) const noexcept;
287
289
293
295
300
302
306
308
312 AMREX_GPU_HOST_DEVICE inline RealVectND operator- (Real s) const noexcept;
313
315
319
321
324 [[nodiscard]] AMREX_GPU_HOST_DEVICE inline Real dotProduct (
325 const RealVectND& a_rhs) const noexcept;
326
328
331 template <int N=dim, std::enable_if_t<( N==3 ), int> = 0>
333 const RealVectND& a_rhs) const noexcept;
334
336
340
342
346 AMREX_GPU_HOST_DEVICE inline RealVectND operator* (Real s) const noexcept;
347
349
353
355
359
361
365 AMREX_GPU_HOST_DEVICE inline RealVectND operator/ (Real s) const noexcept;
366
368
371 AMREX_GPU_HOST_DEVICE inline RealVectND& scale (Real s) noexcept;
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
545 using value_type = Real;
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,
596 std::enable_if_t<
597 IsConvertible_v<Real, Args...>,
598 int> = 0>
599AMREX_GPU_HOST_DEVICE // __device__ for HIP
600RealVectND(Real, Real, Args...) -> RealVectND<sizeof...(Args)+2>;
601
602// Template deduction guide for RealVectND
603template<int dim>
604AMREX_GPU_HOST_DEVICE // __device__ for HIP
606
607// Template deduction guide for RealVectND
608template<int dim>
609AMREX_GPU_HOST_DEVICE // __device__ for HIP
611
612template <int dim>
613inline constexpr const RealVectND<dim> RealVectND<dim>::Zero{Real(0)};
614
615template <int dim>
616inline constexpr const RealVectND<dim> RealVectND<dim>::Unit{Real(1)};
617
618using RealVect = RealVectND<AMREX_SPACEDIM>;
619
620template <int dim>
622RealVectND<dim>&
624 for (int i=0; i<dim; ++i) {
625 vect[i] -= s;
626 }
627 return *this;
628}
629
630template <int dim>
634 for (int i=0; i<dim; ++i) {
635 vect[i] *= s;
636 }
637 return *this;
638}
639
640template <int dim>
644 for (int i=0; i<dim; ++i) {
645 vect[i] -= p[i];
646 }
647 return *this;
648}
649
650template <int dim>
654 return RealVectND<dim>(*this);
655}
656
657template <int dim>
661 RealVectND<dim> retval;
662 for (int i=0; i<dim; ++i) {
663 retval[i] = -vect[i];
664 }
665 return retval;
666}
667
668template <int dim>
671RealVectND<dim>::scale (Real s) noexcept {
672 for (int i=0; i<dim; ++i) {
673 vect[i] *= s;
674 }
675 return *this;
676}
677
678template <int dim>
681RealVectND<dim>::floor () const noexcept {
682 IntVectND<dim> retval;
683 for (int i=0; i<dim; ++i) {
684 retval[i] = static_cast<int>(std::floor(vect[i]));
685 }
686 return retval;
687}
688
689template <int dim>
692RealVectND<dim>::ceil () const noexcept {
693 IntVectND<dim> retval;
694 for (int i=0; i<dim; ++i) {
695 retval[i] = static_cast<int>(std::ceil(vect[i]));
696 }
697 return retval;
698}
699
700template <int dim>
703RealVectND<dim>::round () const noexcept {
704 IntVectND<dim> retval;
705 for (int i=0; i<dim; ++i) {
706 retval[i] = static_cast<int>(std::round(vect[i]));
707 }
708 return retval;
709}
710
711template <int dim>
713Real
714RealVectND<dim>::sum () const noexcept {
715 Real retval = vect[0];
716 for (int i=1; i<dim; ++i) {
717 retval += vect[i];
718 }
719 return retval;
720}
721
722template <int dim>
724Real
726 Real len = this->radSquared();
727 len = std::sqrt(len);
728 return len;
729}
730
731template <int dim>
733Real
735 Real retval = vect[0] * vect[0];
736 for (int i=1; i<dim; ++i) {
737 retval += vect[i] * vect[i];
738 }
739 return retval;
740}
741
742template <int dim>
744Real
745RealVectND<dim>::product () const noexcept {
746 Real retval = vect[0];
747 for (int i=1; i<dim; ++i) {
748 retval *= vect[i];
749 }
750 return retval;
751}
752
753template <int dim>
755bool
756RealVectND<dim>::operator< (const RealVectND<dim>& p) const noexcept {
757 bool retval = vect[0] < p[0];
758 for (int i=1; i<dim; ++i) {
759 retval = retval && vect[i] < p[i];
760 }
761 return retval;
762}
763
764template <int dim>
766bool
767RealVectND<dim>::operator<= (const RealVectND<dim>& p) const noexcept {
768 bool retval = vect[0] <= p[0];
769 for (int i=1; i<dim; ++i) {
770 retval = retval && vect[i] <= p[i];
771 }
772 return retval;
773}
774
775template <int dim>
777bool
779 bool retval = vect[0] > p[0];
780 for (int i=1; i<dim; ++i) {
781 retval = retval && vect[i] > p[i];
782 }
783 return retval;
784}
785
786template <int dim>
788bool
790 bool retval = vect[0] >= p[0];
791 for (int i=1; i<dim; ++i) {
792 retval = retval && vect[i] >= p[i];
793 }
794 return retval;
795}
796
797template <int dim>
801 for (int i=0; i<dim; ++i) {
802 vect[i] = amrex::min(vect[i], p.vect[i]);
803 }
804 return *this;
805}
806
807template <int dim>
811 for (int i=0; i<dim; ++i) {
812 vect[i] = amrex::max(vect[i], p.vect[i]);
813 }
814 return *this;
815}
816
821template <int dim>
823RealVectND<dim> min (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
824 RealVectND<dim> p(p1);
825 return p.min(p2);
826}
827
832template <int dim>
834RealVectND<dim> max (const RealVectND<dim>& p1, const RealVectND<dim>& p2) noexcept {
835 RealVectND<dim> p(p1);
836 return p.max(p2);
837}
838
839template <int dim>
841Real
842RealVectND<dim>::dotProduct (const RealVectND<dim>& a_rhs) const noexcept {
843 Real retval = vect[0] * a_rhs.vect[0];
844 for (int i=1; i<dim; ++i) {
845 retval += vect[i] * a_rhs.vect[i];
846 }
847 return retval;
848}
849
850template <int dim>
851template <int N, std::enable_if_t<( N==3 ), int>>
854RealVectND<dim>::crossProduct (const RealVectND<dim>& a_rhs) const noexcept {
855 RealVectND<dim> tmp(vect[1] * a_rhs[2] - vect[2] * a_rhs[1],
856 vect[2] * a_rhs[0] - vect[0] * a_rhs[2],
857 vect[0] * a_rhs[1] - vect[1] * a_rhs[0]);
858 return tmp;
859}
860
861template <int dim>
865 for (int i=0; i<dim; ++i) {
866 vect[i] += s;
867 }
868 return *this;
869}
870
871template <int dim>
875 for (int i=0; i<dim; ++i) {
876 vect[i] += p[i];
877 }
878 return *this;
879}
880
881template <int dim>
885 for (int i=0; i<dim; ++i) {
886 vect[i] *= p[i];
887 }
888 return *this;
889}
890
891template <int dim>
894RealVectND<dim>::operator* (Real s) const noexcept {
895 RealVectND<dim> retval;
896 for (int i=0; i<dim; ++i) {
897 retval[i] = vect[i] * s;
898 }
899 return retval;
900}
901
902template <int dim>
905RealVectND<dim>::operator- (Real s) const noexcept {
906 RealVectND<dim> retval;
907 for (int i=0; i<dim; ++i) {
908 retval[i] = vect[i] - s;
909 }
910 return retval;
911}
912
913template <int dim>
916RealVectND<dim>::operator+ (Real s) const noexcept {
917 RealVectND<dim> retval;
918 for (int i=0; i<dim; ++i) {
919 retval[i] = vect[i] + s;
920 }
921 return retval;
922}
923
924template <int dim>
928 for (int i=0; i<dim; ++i) {
929 vect[i] /= s;
930 }
931 return *this;
932}
933
934template <int dim>
938 for (int i=0; i<dim; ++i) {
939 vect[i] /= p[i];
940 }
941 return *this;
942}
943
944template <int dim>
947RealVectND<dim>::operator/ (Real s) const noexcept {
948 RealVectND<dim> retval;
949 for (int i=0; i<dim; ++i) {
950 retval[i] = vect[i] / s;
951 }
952 return retval;
953}
954
955template <int dim>
957int
958RealVectND<dim>::minDir (const bool& a_doAbs) const noexcept {
959 int mDir = 0;
960 for (int idir = 0; idir < dim; idir++) {
961 if (a_doAbs) {
962 if (std::abs(vect[idir]) < std::abs(vect[mDir])) {
963 mDir = idir;
964 }
965 } else {
966 if (vect[idir] < vect[mDir]) {
967 mDir = idir;
968 }
969 }
970 }
971 return mDir;
972}
973
974template <int dim>
976int
977RealVectND<dim>::maxDir (const bool& a_doAbs) const noexcept {
978 int mDir = 0;
979 for (int idir = 0; idir < dim; idir++) {
980 if (a_doAbs) {
981 if (std::abs(vect[idir]) > std::abs(vect[mDir])) {
982 mDir = idir;
983 }
984 } else {
985 if (vect[idir] > vect[mDir]) {
986 mDir = idir;
987 }
988 }
989 }
990 return mDir;
991}
992
1004template <int dim=AMREX_SPACEDIM>
1006RealVectND<dim> BASISREALV (int dir) noexcept {
1007 AMREX_ASSERT(dir >= 0 && dir < dim);
1008 RealVectND<dim> tmp{0.};
1009 tmp[dir] = 1;
1010 return tmp;
1011}
1012
1017
1022template <int dim>
1024RealVectND<dim> operator/ (Real s, const RealVectND<dim>& p) noexcept {
1025 RealVectND<dim> retval;
1026 for (int i=0; i<dim; ++i) {
1027 retval[i] = s / p[i];
1028 }
1029 return retval;
1030}
1031
1036template <int dim>
1038RealVectND<dim> operator+ (Real s, const RealVectND<dim>& p) noexcept {
1039 RealVectND<dim> retval;
1040 for (int i=0; i<dim; ++i) {
1041 retval[i] = p[i] + s;
1042 }
1043 return retval;
1044}
1045
1049template <int dim>
1051RealVectND<dim> operator- (Real s, const RealVectND<dim>& p) noexcept {
1052 RealVectND<dim> retval;
1053 for (int i=0; i<dim; ++i) {
1054 retval[i] = s - p[i];
1055 }
1056 return retval;
1057}
1058
1063template <int dim>
1065RealVectND<dim> operator* (Real s, const RealVectND<dim>& p) noexcept {
1066 RealVectND<dim> retval;
1067 for (int i=0; i<dim; ++i) {
1068 retval[i] = s * p[i];
1069 }
1070 return retval;
1071}
1072
1076template <int dim>
1079 RealVectND<dim> retval;
1080 for (int i=0; i<dim; ++i) {
1081 retval[i] = s[i] / p[i];
1082 }
1083 return retval;
1084}
1085
1089template <int dim>
1092 RealVectND<dim> retval;
1093 for (int i=0; i<dim; ++i) {
1094 retval[i] = p[i] + s[i];
1095 }
1096 return retval;
1097}
1098
1102template <int dim>
1105 RealVectND<dim> retval;
1106 for (int i=0; i<dim; ++i) {
1107 retval[i] = s[i] - p[i];
1108 }
1109 return retval;
1110}
1111
1115template <int dim>
1118 RealVectND<dim> retval;
1119 for (int i=0; i<dim; ++i) {
1120 retval[i] = p[i] * s[i];
1121 }
1122 return retval;
1123}
1124
1129template <int dim>
1131RealVectND<dim> scale (const RealVectND<dim>& p, Real s) noexcept {
1132 RealVectND<dim> retval;
1133 for (int i=0; i<dim; ++i) {
1134 retval[i] = s * p[i];
1135 }
1136 return retval;
1137}
1138
1139namespace detail {
1140 std::ostream& real_vector_write (std::ostream& os, const Real* p, int dim);
1141 std::istream& real_vector_read (std::istream& is, Real* p, int dim);
1142
1143 template<int dim>
1145 void RealVectCat_imp (Real*& dst, const RealVectND<dim>& src) noexcept {
1146 for (int i=0; i<dim; ++i) {
1147 dst[i] = src[i];
1148 }
1149 dst += dim;
1150 }
1151
1152 template<int dim>
1154 void RealVectSplit_imp2 (RealVectND<dim>& dst, const Real*& src) noexcept {
1155 for (int i=0; i<dim; ++i) {
1156 dst[i] = src[i];
1157 }
1158 src += dim;
1159 }
1160
1161 template<class T, std::size_t...Ns>
1163 T RealVectSplit_imp (T& retval, std::index_sequence<Ns...>, const Real * src) noexcept {
1164 (RealVectSplit_imp2(amrex::get<Ns>(retval), src), ...);
1165 return retval;
1166 }
1167}
1168
1169template<int dim>
1170std::ostream&
1171operator<< (std::ostream& os, const RealVectND<dim>& p)
1172{
1173 return detail::real_vector_write(os, p.begin(), dim);
1174}
1175
1176template<int dim>
1177std::istream&
1178operator>> (std::istream& is, RealVectND<dim>& p)
1179{
1180 return detail::real_vector_read(is, p.begin(), dim);
1181}
1182
1187template<int d, int...dims>
1190constexpr RealVectND<detail::get_sum<d, dims...>()>
1191RealVectCat (const RealVectND<d>& v, const RealVectND<dims>&...vects) noexcept {
1192 RealVectND<detail::get_sum<d, dims...>()> retval {0.};
1193 Real* dst = retval.begin();
1195 (detail::RealVectCat_imp(dst, vects), ...);
1196 return retval;
1197}
1198
1203template<int d, int...dims>
1206constexpr GpuTuple<RealVectND<d>, RealVectND<dims>...>
1207RealVectSplit (const RealVectND<detail::get_sum<d, dims...>()>& v) noexcept {
1209 return detail::RealVectSplit_imp(retval,
1210 std::make_index_sequence<1 + sizeof...(dims)>(),
1211 v.begin());
1212}
1213
1218template<int new_dim, int old_dim>
1221constexpr RealVectND<new_dim>
1223 return iv.template shrink<new_dim>();
1224}
1225
1230template<int new_dim, int old_dim>
1233constexpr RealVectND<new_dim>
1234RealVectExpand (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1235 return iv.template expand<new_dim>(fill_extra);
1236}
1237
1242template<int new_dim, int old_dim>
1245constexpr RealVectND<new_dim>
1246RealVectResize (const RealVectND<old_dim>& iv, Real fill_extra=0) noexcept {
1247 return iv.template resize<new_dim>(fill_extra);
1248}
1249
1252} // namespace amrex
1253
1254// Spcialize std::tuple_size for RealVectND. Used by structured bindings.
1255template<int dim>
1256struct std::tuple_size<amrex::RealVectND<dim>> {
1257 static constexpr std::size_t value = dim;
1258};
1259
1260// Spcialize std::tuple_element for RealVectND. Used by structured bindings.
1261template<std::size_t s, int dim>
1262struct std::tuple_element<s, amrex::RealVectND<dim>> {
1263 using type = amrex::Real;
1264};
1265
1266#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
Definition AMReX_Tuple.H:93
Definition AMReX_IntVect.H:55
A Real vector in dim-dimensional space.
Definition AMReX_RealVect.H:32
__host__ __device__ bool operator<=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:767
__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:633
__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:977
__host__ __device__ constexpr Real * end() noexcept
Definition AMReX_RealVect.H:181
constexpr RealVectND() noexcept
Definition AMReX_RealVect.H:43
__host__ __device__ RealVectND & max(const RealVectND &p) noexcept
Definition AMReX_RealVect.H:810
__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:660
__host__ __device__ constexpr bool operator==(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:205
__host__ __device__ constexpr RealVectND(Real i, Real j, Args... ks) noexcept
Definition AMReX_RealVect.H:63
__host__ static __device__ constexpr int isize() noexcept
Definition AMReX_RealVect.H:541
__host__ __device__ RealVectND & operator+=(Real s) noexcept
Definition AMReX_RealVect.H:864
RealVectND(const std::vector< Real > &vr) noexcept
Definition AMReX_RealVect.H:45
__host__ __device__ Real dotProduct(const RealVectND &a_rhs) const noexcept
Definition AMReX_RealVect.H:842
__host__ __device__ RealVectND crossProduct(const RealVectND &a_rhs) const noexcept
__host__ __device__ IntVectND< dim > round() const noexcept
Definition AMReX_RealVect.H:703
__host__ static __device__ constexpr RealVectND TheZeroVector() noexcept
Definition AMReX_RealVect.H:522
__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:947
__host__ __device__ RealVectND operator+() const noexcept
Definition AMReX_RealVect.H:653
__host__ __device__ bool operator>=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:789
__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:671
__host__ __device__ Real radSquared() const noexcept
Definition AMReX_RealVect.H:734
__host__ __device__ bool operator<(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:756
__host__ __device__ Real sum() const noexcept
Definition AMReX_RealVect.H:714
__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:745
__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:725
__host__ __device__ bool operator>(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:778
__host__ __device__ RealVectND operator*(Real s) const noexcept
Definition AMReX_RealVect.H:894
__host__ __device__ int minDir(const bool &a_doAbs) const noexcept
Definition AMReX_RealVect.H:958
__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:681
__host__ __device__ IntVectND< dim > ceil() const noexcept
Definition AMReX_RealVect.H:692
__host__ __device__ RealVectND & operator/=(Real s) noexcept
Definition AMReX_RealVect.H:927
__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:623
__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:800
__host__ __device__ constexpr bool operator!=(const RealVectND &p) const noexcept
Definition AMReX_RealVect.H:219
std::ostream & real_vector_write(std::ostream &os, const Real *p, int dim)
Definition AMReX_RealVect.cpp:7
__host__ __device__ constexpr void RealVectCat_imp(Real *&dst, const RealVectND< dim > &src) noexcept
Definition AMReX_RealVect.H:1145
__host__ __device__ constexpr void RealVectSplit_imp2(RealVectND< dim > &dst, const Real *&src) noexcept
Definition AMReX_RealVect.H:1154
__host__ __device__ constexpr T RealVectSplit_imp(T &retval, std::index_sequence< Ns... >, const Real *src) noexcept
Definition AMReX_RealVect.H:1163
__host__ __device__ constexpr int get_sum()
Definition AMReX_IntVect.H:1137
std::istream & real_vector_read(std::istream &is, Real *p, int dim)
Definition AMReX_RealVect.cpp:23
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:1234
__host__ __device__ GpuComplex< T > operator*(const GpuComplex< T > &a_x, const GpuComplex< U > &a_y) noexcept
Multiply two complex numbers.
Definition AMReX_GpuComplex.H:256
__host__ __device__ RealVectND< dim > BASISREALV(int dir) noexcept
Definition AMReX_RealVect.H:1006
__host__ __device__ constexpr const T & min(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:21
constexpr bool IsConvertible_v
Definition AMReX_TypeTraits.H:270
RealVectND< 3 > RealVect
Definition AMReX_ParmParse.H:35
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:35
__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:292
__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:1207
__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:1191
__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:1246
std::istream & operator>>(std::istream &is, BoxND< dim > &bx)
Read from istream.
Definition AMReX_Box.H:1718
std::ostream & operator<<(std::ostream &os, AmrMesh const &amr_mesh)
Definition AMReX_AmrMesh.cpp:1236
__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:1222
__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
__host__ __device__ 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:1011
Definition AMReX_FabArrayCommI.H:1000
Definition AMReX_Array.H:34
amrex::Real type
Definition AMReX_RealVect.H:1263