Electromagnetic Template Library (EMTL)
|
Mesh block for the 4th order Yee orhtogonal mesh. More...
#include <yee4.h>
Public Types | |
typedef base_t::contour_t | contour_t |
geometrically the contour is the same as for the 2nd order scheme, only having 4 extra input points outside its outline | |
Public Types inherited from emYeeRectBlockBase< iterate_order_t, data_structure_t > | |
typedef Box | region_t |
Synonym for enclosing region classname. | |
Public Member Functions | |
emYeeRectBlock4 (const Box &B, const indtype *ndim, const int wf=0) | |
B - бокс, в котором находится сетка, ndim - сколько точек в сетке должно быть. | |
int | get_inp_data_max_count () const |
gets the maximal possible number of inputs points for one edge of a contour | |
int | get_edge_count (const contour_it &cnti) const |
gets the number of edges for the given contour | |
int | get_inp_data_index (const contour_it &cnti, int edgenum, indtype *ind, valtype *coeff, int check=0) const |
gets the data index and coefficients of input (edge) data points to contribute to each edge center it is assumed that the pointers have space at least for get_out_data_max_count() entries if check==1 performs data index memory range validity check | |
int | StepO (int field) |
performs (optimized) explicit timestep | |
int | StepV (int field) |
performs vectorizable explicit timestep | |
int | StepC (int field) |
performs non-optimized contour-based explicit timestep | |
void | StepContour (const contour_it &cnt) |
performs explicit timestep for one single contour | |
Public Member Functions inherited from emYeeRectBlock | |
emYeeRectBlock () | |
Default constructor for pre-initialized object to allow for post-inits. | |
Public Member Functions inherited from emYeeRectBlockBase< iterate_order_t, data_structure_t > | |
emYeeRectBlockBase () | |
Default constructor for pre-initialized object to allow for post-inits. | |
Vector_3 | get_position (indtype ind, int &ftype, Vector_3 &fdir) const |
Gets the position, fieldtype and direction of a data with given index. | |
template<int Dir = 0, class interp_form_tt , typename fix_stack_t > | |
std::pair< size_t, size_t > | fill_interp_value_async (fix_stack_t &fix_stack, const interp_form_tt *entry, int depth, int action, const emtype *src, const emtype *src_vec, emtype *dest, emtype *dest_vec) |
vectorized form does nothing, direct and indirect copies work the same way | |
emInterpolation | create_interpolation (const Vector_3 &pos, const Vector_3 &dir, int fieldtype) |
Old interpolation form. | |
template<class interp_arg_tt > | |
interp_arg_tt::interp_form_t | create_interpolation (const interp_arg_tt &arg, std::vector< interp_arg_tt > *nonlocal=NULL, bool all_nonlocal=false) |
Returns the coefficients of field interpolation. | |
int | get_out_data_max_count () const |
Gets the maximal possible number of output points for a contour. | |
template<typename contour_it_t > | |
int | get_out_data_index (const contour_it_t &cnti, indtype *ind, valtype *coeff, int check=0) const |
Gets the data index and coefficients of output (central) updated data points as distributed from contour center. | |
int | get_inp_data_max_count () const |
Gets the maximal possible number of inputs points for one edge of a contour. | |
template<typename contour_it_t > | |
int | get_edge_count (const contour_it_t &cnti) const |
Gets the number of edges for the given contour. | |
template<typename contour_it_t > | |
int | get_inp_data_index (const contour_it_t &cnti, int edgenum, indtype *ind, valtype *coeff, int check=0) const |
Gets the data index and coefficients of input (edge) data points to contribute to each edge center. | |
int | mark_all_unused () |
Mark all contours as unused (the fileds will not be updated by Step). | |
int | mark_all_used (Vector_3 *vmin=NULL, Vector_3 *vmax=NULL) |
Mark all contours as used. | |
template<typename contour_it_t > | |
int | mark_cnt_used (const contour_it_t &cnti, int border=0) |
Mark the contour as used (for optimization purposes). | |
virtual int | commit_marking () |
Commits the marked contours to match iterator range. | |
int | join_markings () |
Joins local thread marking range with global range (for multithreaded processing). | |
int | auto_marking (Vector_3 *vmin, Vector_3 *vmax) |
Mark all contours in vmin to vmax box used. | |
size_t | GetDataSize () const |
emtype * | GetDataPtr () |
Gets data pointer associated with the mesh block. | |
int | SetDataPtr (EmtypePtr_t _ptr) |
Sets the pointer and clears values. | |
int | Reset () |
Clears all buffers. | |
template<class contour_it_t , class contour_table_t > | |
indtype | put_medium (const contour_it_t &it, valtype dt, contour_table_t &table) |
Records the media data from table for a contour given by. | |
template<class fix_stack_t > | |
int | StepC (int field, fix_stack_t &fl=fix_stack_t()) |
Performs non-optimized contour-based explicit timestep. | |
template<class fix_stack_t , typename contour_it_t > | |
void | StepContour (const contour_it_t &cnt, fix_stack_t &fl=fix_stack_t()) |
Performs explicit timestep for one single contour. | |
int | set_avx_axis (int axis) |
Sets the axis that will be used for (AVX/SSE) vectorization, 0=x, 1=y, 2=z, -1 = automatic setting (usually largest dimension) Vectorization works better for dimensions with uniform geometry (less object boundaries). | |
int | get_transfer_flags () const |
virtual int | get_first_updated_field () const |
Gets the first field to be updated in a bulk loop. | |
virtual int | set_first_updated_field (int _first_updated_field) |
Sets the first field to update. | |
template<typename contour_it_t > | |
Box | get_cell_bounding_box (const contour_it_t &cnti) const |
Bounding box for current yee cell. | |
template<typename contour_it_t > | |
Box | get_vec_cell_bounding_box (const contour_it_t &cnti) const |
Bounding box for vector cell that includes current iterator. | |
Public Member Functions inherited from base_yee_struc_t | |
int | adjust_dimensions (int *N, const iVector_3 &extra_cells, int *bc=NULL, valtype *courantf=NULL) |
Changes dimensions, resolution and boundary conditions according to requirements of the Block. | |
iVector_3 | get_cell_cluster () const |
int | init (const Box &B, const indtype *ndim, int wf_) |
Init override to initialize additional data. | |
void | unpack_ind (indtype ind, int &ftype, int &dir, indtype &ix, indtype &iy, indtype &iz) const |
Indexing the value. | |
indtype | pack_ind (int ftype, int dir, indtype ix, indtype iy, indtype iz) const |
Packs component indicies to integer. | |
grid_t & | get_field_grid (int ftype, int dir) |
Gets interpolation grid for each filed type and direction. The grids normally can not be used for accessing field data. | |
const grid_t & | get_field_grid (int ftype, int dir) const |
Gets interpolation grid for each filed type and direction. | |
virtual size_t | packed_size () const |
virtual size_t | data_size () const |
int | set_fix_storage (emFixStorage *fs) |
Sets a pointer for fix storage for contour fixes. | |
template<class contour_it > | |
int | set_contour_fix (const contour_it &cnti, int fix_flags, ptrdiff_t shift) |
Sets fix flags and shift from fix storage begin for a specific contour cnti. | |
template<class fix_stack_t > | |
void | apply_fixes_before (fix_stack_t &fix_stack, indtype oind, emtype *out) const |
Base data does not support contour fixes. | |
template<class fix_stack_t > | |
void | apply_fixes_after (fix_stack_t &fix_stack, indtype oind, emtype *out) const |
Base data does not support contour fixes. | |
virtual int | get_sync_hsteps () const |
Number of mesh steps per field (half steps) mesh block is performing between synchronization, i.e. | |
int | get_perm_sign () const |
Returns permutation sign if the coords are flipped: 1 = even (cycle), -1 = odd. | |
Vector_3 | get_dx (bool int_order=false) const |
Gets space steps. | |
template<typename contour_it_t > | |
Box | get_vec_cell_bounding_box_extent (const contour_it_t &cnti) const |
Bounding box for current yee cell. | |
Public Member Functions inherited from emComponent | |
emDump * | GetEmDumper () |
This function insures that the returned dumper is of true emDumper type. | |
Protected Member Functions | |
int | get_inp_data_index_unpacked (const contour_it &cnti, int edgenum, indtype *ind) const |
gets the data index and coefficients of input (edge) data points to contribute to each edge center 8 inds for each edgenum | |
Protected Member Functions inherited from emYeeRectBlockBase< iterate_order_t, data_structure_t > | |
Vector_3 | get_position (indtype ix, indtype iy, indtype iz, int cdir, int ftype, Vector_3 &fdir) const |
Data position via 3 indicies, and contour ftype. | |
template<typename contour_it_t > | |
int | get_inp_data_index_unpacked (const contour_it_t &cnti, int edgenum, indtype *ind) const |
Gets the data index and coefficients of input (edge) data points to contribute to each edge center. | |
Protected Member Functions inherited from base_yee_struc_t | |
int | StepO (int field) |
performs (optimized) explicit timestep | |
int | StepV (int field) |
performs vectorizable explicit timestep | |
indtype | get_start_ind (int field, int dir) const |
Gets starting index of the mesh of certain field and dir. All other mesh indicies for (field,dir) are then calculated by adding pack_ind(ix,iy,iz). | |
void | set_arr (emtype *sptr) |
Assigns external pointer for data array. | |
template<class contour_it > | |
indtype | put_media_type (const contour_it &cnti, valtype dt, emtype perm, emtype loss) |
Records the media data for a contour given by. | |
Additional Inherited Members | |
Static Public Member Functions inherited from base_yee_struc_t | |
static constexpr int | get_fix_aggregate_size () |
Public Attributes inherited from emYeeRectBlockBase< iterate_order_t, data_structure_t > | |
EmtypePtr_t | ptr |
main (aligned) data pointer | |
indtype | ustart [6][3] |
Grid box internal area (border excluded) limits for each field type and direction, default is [1, N-2]. | |
Vector_3 | dx |
space increments | |
Vector_3 | dx2 |
space increments divided by 2 | |
Static Public Attributes inherited from emYeeRectBlock | |
static constexpr int | c_USE_OPENMP_INIT |
Configuration flag for parallel initialization (contour analysis). | |
static constexpr int | c_USE_CONETURS = 0 |
Configuration flag for switching to LRnLA version. | |
Protected Attributes inherited from emYeeRectBlockBase< iterate_order_t, data_structure_t > | |
int | dhalo_left [3] = { 1,1,1 } |
data halos for blocks with no builtin PBCs. | |
int | force_halos = 0 |
forcing halo inclusion from both sides of the mesh. Works for axes with no builtin PBCs. | |
indtype | mstart [6][3] |
Commited local memory range for all grids. | |
indtype | estart [6][3] |
marking for grid box iterator limits for each field type and direction, default is [1, N-2]. | |
indtype | _start [6][3] |
marking for grid box memory limits for each field type and direction, default is [1, N-2]. | |
indtype | istart [6][3] |
marking grid box internal area (external border excluded) limits for each field type and direction, default is [1, N-2] | |
indtype | astart [6][3] |
marking for interpolation area (internal border included) | |
Vector_3 | origin |
Origin point of main grid. | |
Box | rbox |
Bounding region [origin+dx/4, origin+nx*dx-dx/4], where nx is dimension supplied in constructor. | |
int | first_updated_field |
grids for different field types | |
int | builtin_pbc |
Bit flags specifying that periodic boudary conditions are intrinsically built in for this mesh block (in the Step procedue). | |
int | builtin_transfers |
If not zero, means that all transfers (both for boundaries and MPI) are intrinsically built in for this mesh block (in the Step procedue). | |
Protected Attributes inherited from base_yee_struc_t | |
int | wf |
media coefficients for vectorized main loop | |
int | mpi_domains |
Number of domains in DomainDecomposition. | |
iVector_3 | decomp_recommendation |
Recommendation for DomainDecomposition layout. | |
indtype | SZ4 |
Slice sizes. | |
int | topthreads |
number of threads for processing | |
Mesh block for the 4th order Yee orhtogonal mesh.
This block class is conforming to emtMeshBlock model
int emYeeRectBlock4::get_inp_data_index | ( | const contour_it & | cnti, |
int | edgenum, | ||
indtype * | ind, | ||
valtype * | coeff, | ||
int | check = 0 |
||
) | const |
gets the data index and coefficients of input (edge) data points to contribute to each edge center it is assumed that the pointers have space at least for get_out_data_max_count() entries if check==1 performs data index memory range validity check
2 indicies and 2 coeffs