MCPcopy Create free account
hub / github.com/NanoComp/meep / reduce_array_dimensions

Function reduce_array_dimensions

src/array_slice.cpp:525–551  ·  view source on GitHub ↗

get the dimensions of reduced arrays (i.e., arrays collapsed along empty dimensions of original volume)

Source from the content-addressed store, hash-verified

523// get the dimensions of reduced arrays (i.e., arrays collapsed along empty dimensions of original
524// volume)
525void reduce_array_dimensions(volume where, int rank, size_t dims[3], direction dirs[3],
526 size_t stride[3], int &reduced_rank, size_t reduced_dims[3],
527 direction reduced_dirs[3], size_t reduced_stride[3]) {
528
529 reduced_rank = 0;
530 reduced_dims[0] = reduced_dims[1] = reduced_dims[2] = stride[0] = stride[1] = stride[2] =
531 reduced_stride[0] = reduced_stride[1] = reduced_stride[2] = 1;
532 for (int r = 0; r < rank; r++) {
533 if (where.in_direction(dirs[r]) == 0.0)
534 reduced_stride[r] = 0; // degenerate dimension, to be collapsed
535 else {
536 reduced_dirs[reduced_rank] = dirs[r];
537 reduced_dims[reduced_rank++] =
538 dims[r]; // reduced_dims is the size of the array after collapsing
539 }
540 }
541 /*--------------------------------------------------------------*/
542 /*- set up strides into full and reduced arrays */
543 /*--------------------------------------------------------------*/
544 if (rank == 2)
545 stride[0] = dims[1]; // rstride is already all set in this case
546 else if (rank == 3) {
547 stride[0] = dims[1] * dims[2];
548 stride[1] = dims[2];
549 if (reduced_rank == 2) reduced_stride[reduced_stride[0] != 0 ? 0 : 1] = reduced_dims[1];
550 }
551}
552
553// data_size = 1,2 for real,complex-valued array
554realnum *collapse_array(realnum *array, int *rank, size_t dims[3], direction dirs[3], volume where,

Callers 3

dft_monitor_sizeMethod · 0.85
fourier_sourcedataMethod · 0.85
collapse_arrayFunction · 0.85

Calls 1

in_directionMethod · 0.45

Tested by

no test coverage detected