Files
@ 215974bd7440
Branch filter:
Location: MD/arcos/include/mapper.h - annotation
215974bd7440
3.4 KiB
text/x-chdr
Edited file README via RhodeCode
d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf d6faa5ffcedf | /** @file mapper.h
* @brief Definitions for mapper objects.
*
* A mapper objects defines how and what to map between two grid families.
* For example, a mapper object can be used to map the charge from
* a @a cdr grid to a @a Poisson grid, or to map the @a potential of a Poisson
* grid into one of the components of the @a electric field in a @a cdr grid.
* For that, a mapper object has to implement some methods that tell us
* how to map things in the cases\n
* a) the source grid is coarser than the target grid (interpolation),\n
* b) the source and the target are at the same level (copy),\n
* c) the target grid is coarser (coarsening).
*/
#ifndef _MAPPER_H_
typedef struct mapper_t mapper_t;
#ifndef _INTERPOL2_H_
# include "interpol2.h"
#endif
#define _coarsen_params_ (mapper_t *mapper, grid_t *source, grid_t *target, \
int ir, int iz, int itheta)
#define _copy_params_ (mapper_t *mapper, grid_t *source, grid_t *target, \
int ir, int iz, int itheta)
#define _interpol_set_params_ (mapper_t *mapper, grid_t *source, \
interpol_t *interpol, int ir, \
int iz, int itheta)
#define _interpol_params_ (mapper_t *mapper, grid_t *source, grid_t *target, \
interpol_t *interpol, int ir, int iz, int itheta)
struct mapper_t {
interpol_method_t *interpol_method;
void (*coarsen) _coarsen_params_;
void (*copy) _copy_params_;
/* may return false if we are outside the source grid. */
int (*interpol_set) _interpol_set_params_;
void (*interpol) _interpol_params_;
/* This is used for the interpolation of electric fields and indicates
* the staggering of the cells. When we call the interpolator to set
* the stencil at coordinates pr, pz, the fine-grid cells whose value will
* later be calculated ir, iz with
* pr << level_diff + shift_r << (level_diff - 1) <= ir
* < pr << level_diff + shift_r << (level_diff - 1)
*
* (and the equivalent for iz).
* Hence note that for interpolation in not-staggered grids,
* (i.e. charge, densities, ...)
* shift_r = shift_z = 0.
*/
int shift_r, shift_z;
/* We provide this extra member to allow the easy creation of different
* mappers that share the same functions but have a slightly different
* behaviour. In particular this is used in cdr.c to define
* different interpolators for each species. In that case, extra is the
* species index.
*/
int extra;
};
/** Usually, we will define functions called xxxx_coarsen, xxxx_copy, etc
to implement the above interface. We define these macros to facilitate
the declaration of such functions. */
#define decl_mapper_funcs(_VAR) \
void _VAR ## _coarsen _coarsen_params_; \
void _VAR ## _copy _copy_params_; \
int _VAR ## _interpol_set _interpol_set_params_; \
void _VAR ## _interpol _interpol_params_
/** Useful to init a staggered mapper object */
#define mk_mapper_staggered(_C, _INTERPOL_METHOD, _SHIFT_R, _SHIFT_Z) \
{_INTERPOL_METHOD, _C ## _coarsen, _C ## _copy, \
_C ## _interpol_set, _C ##_interpol, _SHIFT_R, _SHIFT_Z, 0}
/** Useful to init a mapper object */
#define mk_mapper(_C, _INTERPOL_METHOD) \
mk_mapper_staggered (_C, _INTERPOL_METHOD, 0, 0)
/** Mappers that only copy or interpolate. */
#define mk_mapper_down(_C, _INTERPOL_METHOD) \
{_INTERPOL_METHOD, NULL, _C ## _copy, \
_C ## _interpol_set, _C ##_interpol, 0, 0, 0}
#define _MAPPER_H_
#endif
|