Basilisk CFD
Adaptive Cartesian mesh PDE framework
Loading...
Searching...
No Matches
multigrid.h
Go to the documentation of this file.
1/** @file multigrid.h
2 */
3#if DOUBLE_PRECISION
4# define SINGLE_PRECISION 0
5#else
6# define SINGLE_PRECISION 1
7#endif
8#define _GPU 1
9#define GRIDNAME "Multigrid (GPU)"
10#define GRIDPARENT Multigrid
11#define shift_level(d) (multigrid->shift[d])
12#define field_size() (multigrid->shift[depth() + 1])
13#define grid_data() (multigrid->d)
14#define field_offset(s, level) (shift_level((level) ? (level) - 1 : depth()) + (s).i*field_size())
15
16#define GPU_CODE() \
17 "#define valt(s,k,l,m)" \
18 " _data_val(_index(s,m), point.j + (l) + " \
19 " (point.i + (k))*(point.n.y + 2*GHOSTS) + _shift[point.level])\n" \
20 "#define val_red_(s) _data_val((s).i, point.j - GHOSTS +" \
21 " (point.i - GHOSTS)*NY + _shift[point.level])\n" \
22 "#define fine(a,k,l,m)" \
23 " _data_val(_index(a,m), 2*point.j - GHOSTS + (l) +" \
24 " (2*point.i - GHOSTS + (k))*(point.n.y*2 + 2*GHOSTS) +" \
25 " _shift[point.level + 1])\n" \
26 "#define coarse(a,k,l,m)" \
27 " _data_val(_index(a,m), (point.j + GHOSTS)/2 + (l) +" \
28 " ((point.i + GHOSTS)/2 + (k))*(point.n.y/2 + 2*GHOSTS) +" \
29 " _shift[point.level - 1])\n"
30
31static bool _gpu_done_ = false;
32
33#include "../multigrid.h"
34#include "../stencils.h"
35#include "gpu.h"
36#include "../multigrid-common.h"
37
43
44#include "grid.h"
void(* boundary_level)(scalar *, int l)
static void gpu_multigrid_methods()
Definition multigrid.h:38
static bool _gpu_done_
Definition multigrid.h:31
void gpu_boundary_level(scalar *list, int l)
Definition gpu.h:467
void multigrid_methods()