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

Method get_source_slice

src/array_slice.cpp:748–779  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

746}
747
748complex<realnum> *fields::get_source_slice(const volume &where, component source_slice_component,
749 complex<realnum> *slice) {
750 size_t dims[3];
751 direction dirs[3];
752 vec min_max_loc[2];
753 int rank = get_array_slice_dimensions(where, dims, dirs, false, false, min_max_loc);
754 size_t slice_size = dims[0] * (rank >= 2 ? dims[1] : 1) * (rank == 3 ? dims[2] : 1);
755
756 source_slice_data data;
757 data.source_component = source_slice_component;
758 data.slice_imin = gv.round_vec(min_max_loc[0]);
759 data.slice_imax = gv.round_vec(min_max_loc[1]);
760 data.slice = new complex<realnum>[slice_size];
761 if (!data.slice) meep::abort("%s:%i: out of memory (%zu)", __FILE__, __LINE__, slice_size);
762
763 loop_in_chunks(get_source_slice_chunkloop, (void *)&data, where, Centered, true, false);
764
765 complex<realnum> *slice_collapsed = collapse_array(data.slice, &rank, dims, dirs, where);
766 rank = get_array_slice_dimensions(where, dims, dirs, true, false);
767 slice_size = dims[0] * (rank >= 2 ? dims[1] : 1) * (rank == 3 ? dims[2] : 1);
768
769 if (slice) {
770 memcpy(slice, slice_collapsed, 2 * slice_size * sizeof(realnum));
771 delete[] (complex<realnum> *)slice_collapsed;
772 }
773 else
774 slice = slice_collapsed;
775
776 array_to_all(slice, slice_size);
777
778 return slice;
779}
780
781/***************************************************************/
782/***************************************************************/

Callers 1

get_sourceMethod · 0.80

Calls 4

abortFunction · 0.85
collapse_arrayFunction · 0.85
array_to_allFunction · 0.85
round_vecMethod · 0.80

Tested by

no test coverage detected