7 const Numeric extrapol,
const bool do_derivs,
const GridType type,
const std::pair<Numeric, Numeric> cycle) {
14 out.reserve(xs.
size());
18 out.emplace_back(out.back().pos, x, xi, polyorder, do_derivs, type, cycle);
20 out.emplace_back(
start_pos_finder(x, xi), x, xi, polyorder, do_derivs, type, cycle);
39 for (std::size_t i = 0; i < dim0.size(); i++) out(i) =
interpweights(dim0[i]);
51 for (std::size_t i = 0; i < dim0.size(); i++)
65 out += iw[i] * yi[
cycler(i + dim0.
pos, I)];
75 for (std::size_t i = 0; i < dim0.size(); i++)
76 out[i] =
interp(iy, iw(i), dim0[i]);
82 for (std::size_t i = 0; i < dim0.size(); i++)
83 out[i] =
interp(iy, iw(i), dim0[i]);
98 for (
Index j = 0; j < dim1.
size(); j++) out(i, j) = dim0.
lx[i] * dim1.
lx[j];
105 for (std::size_t i = 0; i < dim0.size(); i++)
106 for (std::size_t j = 0; j < dim1.size(); j++)
119 out(i, j) = (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
120 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]);
127 for (std::size_t i = 0; i < dim0.size(); i++)
128 for (std::size_t j = 0; j < dim1.size(); j++)
155 for (std::size_t i = 0; i < dim0.size(); i++)
156 for (std::size_t j = 0; j < dim1.size(); j++)
157 out(i, j) =
interp(iy, iw(i, j), dim0[i], dim1[j]);
163 Matrix out(dim0.size(), dim1.size());
164 for (std::size_t i = 0; i < dim0.size(); i++)
165 for (std::size_t j = 0; j < dim1.size(); j++)
166 out(i, j) =
interp(iy, iw(i, j), dim0[i], dim1[j]);
184 out(i, j, k) = dim0.
lx[i] * dim1.
lx[j] * dim2.
lx[k];
192 for (std::size_t i = 0; i < dim0.size(); i++)
193 for (std::size_t j = 0; j < dim1.size(); j++)
194 for (std::size_t k = 0; k < dim2.size(); k++)
209 out(i, j, k) = (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
210 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]) *
211 (dim == 2 ? dim2.
dlx[k] : dim2.
lx[k]);
219 for (std::size_t i = 0; i < dim0.size(); i++)
220 for (std::size_t j = 0; j < dim1.size(); j++)
221 for (std::size_t k = 0; k < dim2.size(); k++)
252 for (std::size_t i = 0; i < dim0.size(); i++)
253 for (std::size_t j = 0; j < dim1.size(); j++)
254 for (std::size_t k = 0; k < dim2.size(); k++)
255 out(i, j, k) =
interp(iy, iw(i, j, k), dim0[i], dim1[j], dim2[k]);
262 Tensor3 out(dim0.size(), dim1.size(), dim2.size());
263 for (std::size_t i = 0; i < dim0.size(); i++)
264 for (std::size_t j = 0; j < dim1.size(); j++)
265 for (std::size_t k = 0; k < dim2.size(); k++)
266 out(i, j, k) =
interp(iy, iw(i, j, k), dim0[i], dim1[j], dim2[k]);
285 out(i, j, k,
l) = dim0.
lx[i] * dim1.
lx[j] * dim2.
lx[k] * dim3.
lx[
l];
294 for (std::size_t i = 0; i < dim0.size(); i++)
295 for (std::size_t j = 0; j < dim1.size(); j++)
296 for (std::size_t k = 0; k < dim2.size(); k++)
297 for (std::size_t
l = 0;
l < dim3.size();
l++)
313 out(i, j, k,
l) = (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
314 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]) *
315 (dim == 2 ? dim2.
dlx[k] : dim2.
lx[k]) *
316 (dim == 3 ? dim3.
dlx[
l] : dim3.
lx[
l]);
325 for (std::size_t i = 0; i < dim0.size(); i++)
326 for (std::size_t j = 0; j < dim1.size(); j++)
327 for (std::size_t k = 0; k < dim2.size(); k++)
328 for (std::size_t
l = 0;
l < dim3.size();
l++)
350 out += iw(i, j, k,
l) *
365 for (std::size_t i = 0; i < dim0.size(); i++)
366 for (std::size_t j = 0; j < dim1.size(); j++)
367 for (std::size_t k = 0; k < dim2.size(); k++)
368 for (std::size_t
l = 0;
l < dim3.size();
l++)
370 interp(iy, iw(i, j, k,
l), dim0[i], dim1[j], dim2[k], dim3[
l]);
378 Tensor4 out(dim0.size(), dim1.size(), dim2.size(), dim3.size());
379 for (std::size_t i = 0; i < dim0.size(); i++)
380 for (std::size_t j = 0; j < dim1.size(); j++)
381 for (std::size_t k = 0; k < dim2.size(); k++)
382 for (std::size_t
l = 0;
l < dim3.size();
l++)
384 interp(iy, iw(i, j, k,
l), dim0[i], dim1[j], dim2[k], dim3[
l]);
406 dim0.
lx[i] * dim1.
lx[j] * dim2.
lx[k] * dim3.
lx[
l] * dim4.
lx[m];
417 for (std::size_t i = 0; i < dim0.size(); i++)
418 for (std::size_t j = 0; j < dim1.size(); j++)
419 for (std::size_t k = 0; k < dim2.size(); k++)
420 for (std::size_t
l = 0;
l < dim3.size();
l++)
421 for (std::size_t m = 0; m < dim4.size(); m++)
440 out(i, j, k,
l, m) = (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
441 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]) *
442 (dim == 2 ? dim2.
dlx[k] : dim2.
lx[k]) *
443 (dim == 3 ? dim3.
dlx[
l] : dim3.
lx[
l]) *
444 (dim == 4 ? dim4.
dlx[m] : dim4.
lx[m]);
455 for (std::size_t i = 0; i < dim0.size(); i++)
456 for (std::size_t j = 0; j < dim1.size(); j++)
457 for (std::size_t k = 0; k < dim2.size(); k++)
458 for (std::size_t
l = 0;
l < dim3.size();
l++)
459 for (std::size_t m = 0; m < dim4.size(); m++)
461 dim3[
l], dim4[m], dim);
483 out += iw(i, j, k,
l, m) *
500 for (std::size_t i = 0; i < dim0.size(); i++)
501 for (std::size_t j = 0; j < dim1.size(); j++)
502 for (std::size_t k = 0; k < dim2.size(); k++)
503 for (std::size_t
l = 0;
l < dim3.size();
l++)
504 for (std::size_t m = 0; m < dim4.size(); m++)
505 out(i, j, k,
l, m) =
interp(iy, iw(i, j, k,
l, m), dim0[i], dim1[j],
506 dim2[k], dim3[
l], dim4[m]);
515 Tensor5 out(dim0.size(), dim1.size(), dim2.size(), dim3.size(), dim4.size());
516 for (std::size_t i = 0; i < dim0.size(); i++)
517 for (std::size_t j = 0; j < dim1.size(); j++)
518 for (std::size_t k = 0; k < dim2.size(); k++)
519 for (std::size_t
l = 0;
l < dim3.size();
l++)
520 for (std::size_t m = 0; m < dim4.size(); m++)
521 out(i, j, k,
l, m) =
interp(iy, iw(i, j, k,
l, m), dim0[i], dim1[j],
522 dim2[k], dim3[
l], dim4[m]);
545 out(i, j, k,
l, m, n) = dim0.
lx[i] * dim1.
lx[j] * dim2.
lx[k] *
546 dim3.
lx[
l] * dim4.
lx[m] * dim5.
lx[n];
557 dim4.size(), dim5.size());
558 for (std::size_t i = 0; i < dim0.size(); i++)
559 for (std::size_t j = 0; j < dim1.size(); j++)
560 for (std::size_t k = 0; k < dim2.size(); k++)
561 for (std::size_t
l = 0;
l < dim3.size();
l++)
562 for (std::size_t m = 0; m < dim4.size(); m++)
563 for (std::size_t n = 0; n < dim5.size(); n++)
565 dim3[
l], dim4[m], dim5[n]);
584 out(i, j, k,
l, m, n) = (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
585 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]) *
586 (dim == 2 ? dim2.
dlx[k] : dim2.
lx[k]) *
587 (dim == 3 ? dim3.
dlx[
l] : dim3.
lx[
l]) *
588 (dim == 4 ? dim4.
dlx[m] : dim4.
lx[m]) *
589 (dim == 5 ? dim5.
dlx[n] : dim5.
lx[n]);
600 dim4.size(), dim5.size());
601 for (std::size_t i = 0; i < dim0.size(); i++)
602 for (std::size_t j = 0; j < dim1.size(); j++)
603 for (std::size_t k = 0; k < dim2.size(); k++)
604 for (std::size_t
l = 0;
l < dim3.size();
l++)
605 for (std::size_t m = 0; m < dim4.size(); m++)
606 for (std::size_t n = 0; n < dim5.size(); n++)
608 dim0[i], dim1[j], dim2[k], dim3[
l], dim4[m], dim5[n], dim);
633 out += iw(i, j, k,
l, m, n) *
651 for (std::size_t i = 0; i < dim0.size(); i++)
652 for (std::size_t j = 0; j < dim1.size(); j++)
653 for (std::size_t k = 0; k < dim2.size(); k++)
654 for (std::size_t
l = 0;
l < dim3.size();
l++)
655 for (std::size_t m = 0; m < dim4.size(); m++)
656 for (std::size_t n = 0; n < dim5.size(); n++)
657 out(i, j, k,
l, m, n) =
658 interp(iy, iw(i, j, k,
l, m, n), dim0[i], dim1[j], dim2[k],
659 dim3[
l], dim4[m], dim5[n]);
669 Tensor6 out(dim0.size(), dim1.size(), dim2.size(), dim3.size(), dim4.size(),
671 for (std::size_t i = 0; i < dim0.size(); i++)
672 for (std::size_t j = 0; j < dim1.size(); j++)
673 for (std::size_t k = 0; k < dim2.size(); k++)
674 for (std::size_t
l = 0;
l < dim3.size();
l++)
675 for (std::size_t m = 0; m < dim4.size(); m++)
676 for (std::size_t n = 0; n < dim5.size(); n++)
677 out(i, j, k,
l, m, n) =
678 interp(iy, iw(i, j, k,
l, m, n), dim0[i], dim1[j], dim2[k],
679 dim3[
l], dim4[m], dim5[n]);
704 out(i, j, k,
l, m, n, o) = dim0.
lx[i] * dim1.
lx[j] *
705 dim2.
lx[k] * dim3.
lx[
l] *
706 dim4.
lx[m] * dim5.
lx[n] * dim6.
lx[o];
718 dim4.size(), dim5.size(), dim6.size());
719 for (std::size_t i = 0; i < dim0.size(); i++)
720 for (std::size_t j = 0; j < dim1.size(); j++)
721 for (std::size_t k = 0; k < dim2.size(); k++)
722 for (std::size_t
l = 0;
l < dim3.size();
l++)
723 for (std::size_t m = 0; m < dim4.size(); m++)
724 for (std::size_t n = 0; n < dim5.size(); n++)
725 for (std::size_t o = 0; o < dim6.size(); o++)
726 out(i, j, k,
l, m, n, o) =
749 out(i, j, k,
l, m, n, o) =
750 (dim == 0 ? dim0.
dlx[i] : dim0.
lx[i]) *
751 (dim == 1 ? dim1.
dlx[j] : dim1.
lx[j]) *
752 (dim == 2 ? dim2.
dlx[k] : dim2.
lx[k]) *
753 (dim == 3 ? dim3.
dlx[
l] : dim3.
lx[
l]) *
754 (dim == 4 ? dim4.
dlx[m] : dim4.
lx[m]) *
755 (dim == 5 ? dim5.
dlx[n] : dim5.
lx[n]) *
756 (dim == 6 ? dim6.
dlx[o] : dim6.
lx[o]);
768 dim4.size(), dim5.size(), dim6.size());
769 for (std::size_t i = 0; i < dim0.size(); i++)
770 for (std::size_t j = 0; j < dim1.size(); j++)
771 for (std::size_t k = 0; k < dim2.size(); k++)
772 for (std::size_t
l = 0;
l < dim3.size();
l++)
773 for (std::size_t m = 0; m < dim4.size(); m++)
774 for (std::size_t n = 0; n < dim5.size(); n++)
775 for (std::size_t o = 0; o < dim6.size(); o++)
776 out(i, j, k,
l, m, n, o) =
778 dim5[n], dim6[o], dim);
805 out += iw(i, j, k,
l, m, n, o) *
825 for (std::size_t i = 0; i < dim0.size(); i++)
826 for (std::size_t j = 0; j < dim1.size(); j++)
827 for (std::size_t k = 0; k < dim2.size(); k++)
828 for (std::size_t
l = 0;
l < dim3.size();
l++)
829 for (std::size_t m = 0; m < dim4.size(); m++)
830 for (std::size_t n = 0; n < dim5.size(); n++)
831 for (std::size_t o = 0; o < dim6.size(); o++)
832 out(i, j, k,
l, m, n, o) =
833 interp(iy, iw(i, j, k,
l, m, n, o), dim0[i], dim1[j],
834 dim2[k], dim3[
l], dim4[m], dim5[n], dim6[o]);
845 Tensor7 out(dim0.size(), dim1.size(), dim2.size(), dim3.size(), dim4.size(),
846 dim5.size(), dim6.size());
847 for (std::size_t i = 0; i < dim0.size(); i++)
848 for (std::size_t j = 0; j < dim1.size(); j++)
849 for (std::size_t k = 0; k < dim2.size(); k++)
850 for (std::size_t
l = 0;
l < dim3.size();
l++)
851 for (std::size_t m = 0; m < dim4.size(); m++)
852 for (std::size_t n = 0; n < dim5.size(); n++)
853 for (std::size_t o = 0; o < dim6.size(); o++)
854 out(i, j, k,
l, m, n, o) =
855 interp(iy, iw(i, j, k,
l, m, n, o), dim0[i], dim1[j],
856 dim2[k], dim3[
l], dim4[m], dim5[n], dim6[o]);
base max(const Array< base > &x)
Max function.
base min(const Array< base > &x)
Min function.
This can be used to make arrays out of anything.
A constant view of a Matrix.
Index nrows() const noexcept
Index ncols() const noexcept
A constant view of a Tensor3.
Index npages() const
Returns the number of pages.
Index nrows() const
Returns the number of rows.
Index ncols() const
Returns the number of columns.
A constant view of a Tensor4.
Index ncols() const noexcept
Index nrows() const noexcept
Index nbooks() const noexcept
Index npages() const noexcept
A constant view of a Tensor5.
Index nrows() const noexcept
Index ncols() const noexcept
Index npages() const noexcept
Index nbooks() const noexcept
Index nshelves() const noexcept
A constant view of a Tensor6.
Index nbooks() const noexcept
Index nvitrines() const noexcept
Index ncols() const noexcept
Index npages() const noexcept
Index nshelves() const noexcept
Index nrows() const noexcept
A constant view of a Tensor7.
Index ncols() const noexcept
Index npages() const noexcept
Index nrows() const noexcept
Index nlibraries() const noexcept
Index nvitrines() const noexcept
Index nshelves() const noexcept
Index nbooks() const noexcept
A constant view of a Vector.
Index size() const noexcept
NUMERIC Numeric
The type to use for all floating point numbers.
INDEX Index
The type to use for all integer numbers and indices.
constexpr Index cycler(const Index n, const Index N) noexcept
Numeric interp(const ConstVectorView &yi, const ConstVectorView &iw, const Lagrange &dim0)
constexpr Numeric l(const Index p0, const Index n, const Numeric x, const SortedVectorType &xi, const Index j, const std::pair< Numeric, Numeric > cycle={ -180, 180}) noexcept
void check_lagrange_interpolation(const SortedVectorType &xi, const Index polyorder=1, const std::pair< Numeric, Numeric > x={std::numeric_limits< Numeric >::infinity(), -std::numeric_limits< Numeric >::infinity()}, const Numeric extrapol=0.5, const GridType type=GridType::Standard, const std::pair< Numeric, Numeric > cycle={-180, 180})
void reinterp(VectorView out, const ConstVectorView &iy, const Grid< Vector, 1 > &iw, const Array< Lagrange > &dim0)
Vector dinterpweights(const Lagrange &dim0)
constexpr Index start_pos_finder(const Numeric x, const SortedVectorType &xvec) noexcept
Vector interpweights(const Lagrange &dim0)
Array< Lagrange > LagrangeVector(const ConstVectorView &xs, const ConstVectorView &xi, const Index polyorder, const Numeric extrapol, const bool do_derivs, const GridType type, const std::pair< Numeric, Numeric > cycle)
A Lagrange interpolation computer.
Index size() const noexcept