18#include "matpack_data.h"
47 for (Index i = 0; i < in_ref.
nelem(); ++i) out.push_back(in_ref[i]);
73 for (Index i = 0; i < in_ref.
nelem(); ++i) out.push_back(in_ref[i]);
117 auto& newag = out.emplace_back(in);
118 newag.set_name(out_name);
119 newag.check(ws, verbosity);
134 for (
const auto & it : in) {
135 auto& newag = out.emplace_back(it);
136 newag.set_name(out_name);
137 newag.check(ws_in, verbosity);
151 const Vector* in_pnt;
160 const Vector& in_ref = *in_pnt;
166 out.resize(dummy.nelem() + in_ref.nelem());
169 if (dummy.nelem()) out[Range(0, dummy.nelem())] = dummy;
172 if (in_ref.nelem()) out[Range(dummy.nelem(), in_ref.nelem())] = in_ref;
185 const Matrix* in_pnt;
194 const Matrix& in_ref = *in_pnt;
199 if (!out.nrows() || !out.ncols()) {
201 }
else if (direction ==
"leading") {
202 if (out.ncols() != in_ref.ncols())
204 "Input and output matrix must have the same number of columns.");
206 out.resize(dummy.nrows() + in_ref.nrows(), dummy.ncols());
208 if (dummy.nrows() && dummy.ncols())
209 out(Range(0, dummy.nrows()), Range(0, dummy.ncols())) = dummy;
210 if (dummy.nrows() && in_ref.nrows() && in_ref.ncols())
211 out(Range(dummy.nrows(), in_ref.nrows()), Range(0, in_ref.ncols())) =
213 }
else if (direction ==
"trailing") {
214 if (out.nrows() != in_ref.nrows())
216 "Input and output matrix must have the same number of rows.");
218 out.resize(dummy.nrows(), dummy.ncols() + in_ref.ncols());
220 if (dummy.nrows() && dummy.ncols())
221 out(Range(0, dummy.nrows()), Range(0, dummy.ncols())) = dummy;
222 if (dummy.ncols() && in_ref.nrows() && in_ref.ncols())
223 out(Range(0, in_ref.nrows()), Range(dummy.ncols(), in_ref.ncols())) =
227 R
"(Dimension must be either "leading" or "trailing".)");
243 if (direction ==
"leading") {
244 if (!out.nrows() || !out.ncols()) {
245 out = ExhaustiveMatrixView{in};
247 if (out.ncols() != in.nelem())
249 "Number of elements in the input Vector has to match "
250 "the number of columns in the output Matrix.");
252 out.resize(dummy.nrows() + 1, dummy.ncols());
253 out(Range(0, dummy.nrows()), Range(0, dummy.ncols())) = dummy;
254 out(Range(dummy.nrows(), 1), Range(0, in.nelem())) = transpose(ExhaustiveMatrixView{in});
256 }
else if (direction ==
"trailing") {
257 if (!out.nrows() || !out.ncols()) {
258 out = transpose(ExhaustiveMatrixView{in});
259 }
else if (in.nelem()) {
260 if (out.nrows() != in.nelem() && out.nrows() && out.ncols())
262 "Number of elements in the input Vector has to match "
263 "the number of rows in the output Matrix.");
265 out.resize(dummy.nrows(), dummy.ncols() + 1);
266 out(Range(0, dummy.nrows()), Range(0, dummy.ncols())) = dummy;
267 out(Range(0, in.nelem()), Range(dummy.ncols(), 1)) = ExhaustiveMatrixView{in};
271 R
"(Dimension must be either "leading" or "trailing".)");
288 out.resize(dummy.nelem() + 1);
291 if (dummy.nelem()) out[Range(0, dummy.nelem())] = dummy;
294 out[Range(dummy.nelem(), 1)] = in;
311 if (!out.npages() || !out.nrows() || !out.ncols()) {
312 out.resize(1, in.nrows(), in.ncols());
313 out(0, joker, joker) = in;
315 if (out.nrows() != in.nrows() || out.ncols() != in.ncols())
317 "Number of rows and columns in the input Matrix have to match\n"
318 "the number of rows and columns in the output Tensor3.");
320 out.resize(dummy.npages() + 1, dummy.nrows(), dummy.ncols());
321 out(Range(0, dummy.npages()),
322 Range(0, dummy.nrows()),
323 Range(0, dummy.ncols())) = dummy;
324 out(dummy.npages(), Range(0, dummy.nrows()), Range(0, dummy.ncols())) = in;
339 const Tensor3* in_pnt;
348 const Tensor3& in_ref = *in_pnt;
353 if (out.nrows() != in_ref.nrows() || out.ncols() != in_ref.ncols())
355 "Tensor3 append is performed in pages dimension.\n"
356 "All other dimensions (rows, columns) must have identical\n"
357 "sizes in In and Out Tensor.");
359 out.resize(dummy.npages() + in_ref.npages(), dummy.nrows(), dummy.ncols());
361 if (dummy.npages() && dummy.nrows() && dummy.ncols())
362 out(Range(0, dummy.npages()),
363 Range(0, dummy.nrows()),
364 Range(0, dummy.ncols())) = dummy;
365 if (dummy.npages() && in_ref.npages() && in_ref.nrows() && in_ref.ncols())
366 out(Range(dummy.npages(), in_ref.npages()),
367 Range(0, in_ref.nrows()),
368 Range(0, in_ref.ncols())) = in_ref;
385 if (!out.nbooks() || !out.npages() || !out.nrows() || !out.ncols()) {
386 out.resize(1, in.npages(), in.nrows(), in.ncols());
387 out(0, joker, joker, joker) = in;
389 if (out.npages() != in.npages() || out.nrows() != in.nrows() ||
390 out.ncols() != in.ncols())
392 "Dimensions of input Tensor3 have to match corresponding\n"
393 "dimensions in the output Tensor4.");
396 dummy.nbooks() + 1, dummy.npages(), dummy.nrows(), dummy.ncols());
397 out(Range(0, dummy.nbooks()),
398 Range(0, dummy.npages()),
399 Range(0, dummy.nrows()),
400 Range(0, dummy.ncols())) = dummy;
402 Range(0, dummy.npages()),
403 Range(0, dummy.nrows()),
404 Range(0, dummy.ncols())) = in;
419 const Tensor4* in_pnt;
428 const Tensor4& in_ref = *in_pnt;
433 if (out.npages() != in_ref.npages() || out.nrows() != in_ref.nrows() ||
434 out.ncols() != in_ref.ncols())
436 "Tensor4 append is performed in books dimension.\n"
437 "All other dimensions (pages, rows, columns) must have identical\n"
438 "sizes in In and Out Tensor.");
440 out.resize(dummy.nbooks() + in_ref.nbooks(),
445 if (dummy.nbooks() && dummy.npages() && dummy.nrows() && dummy.ncols())
446 out(Range(0, dummy.nbooks()),
447 Range(0, dummy.npages()),
448 Range(0, dummy.nrows()),
449 Range(0, dummy.ncols())) = dummy;
450 if (dummy.nbooks() && in_ref.nbooks() && in_ref.npages() && in_ref.nrows() &&
452 out(Range(dummy.nbooks(), in_ref.nbooks()),
453 Range(0, in_ref.npages()),
454 Range(0, in_ref.nrows()),
455 Range(0, in_ref.ncols())) = in_ref;
Declarations for agendas.
This file contains the definition of Array.
This can be used to make arrays out of anything.
Index nelem() const ARTS_NOEXCEPT
The declarations of all the exception classes.
void Append(Array< T > &out, const String &, const Array< T > &in, const String &direction, const String &, const String &, const Verbosity &)