# ?_init_Helmholtz_2D/?_init_Helmholtz_3D

Initializes basic data structures of the Fast 2D/3D Helmholtz Solver.

## Syntax

void d_init_Helmholtz_2D(double* ax, double* bx, double* ay, double* by, int* nx, int* ny, char* BCtype, double* q, int* ipar, double* dpar, int* stat);

void s_init_Helmholtz_2D(float* ax, float* bx, float* ay, float* by, int* nx, int* ny, char* BCtype, float* q, int* ipar, float* spar, int* stat);

void d_init_Helmholtz_3D(double* ax, double* bx, double* ay, double* by, double* az, double* bz, int* nx, int* ny, int* nz, char* BCtype, double* q, int* ipar, double* dpar, int* stat);

void s_init_Helmholtz_3D(float* ax, float* bx, float* ay, float* by, float* az, float* bz, int* nx, int* ny, int* nz, char* BCtype, float* q, int* ipar, float* spar, int* stat);

## Input Parameters

ax | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the leftmost boundary of the domain along x-axis.
bx | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the rightmost boundary of the domain along x-axis.
ay | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the leftmost boundary of the domain along y-axis.
by | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the rightmost boundary of the domain along y-axis.
az | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the leftmost boundary of the domain along z-axis. This parameter is needed only for the ?_init_Helmholtz_3D routine.
bz | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D. The coordinate of the rightmost boundary of the domain along z-axis. This parameter is needed only for the ?_init_Helmholtz_3D routine.
nx | int*. The number of mesh intervals along x-axis.
ny | int*. The number of mesh intervals along y-axis.
nz | int*. The number of mesh intervals along z-axis. This parameter is needed only for the ?_init_Helmholtz_3D routine.
BCtype | char*. Contains the type of boundary conditions on each boundary. Must contain four characters for ?_init_Helmholtz_2D and six characters for ?_init_Helmholtz_3D. Each of the characters can be 'N' (Neumann boundary condition) or 'D' (Dirichlet boundary condition). Types of boundary conditions for the boundaries should be specified in the following order: bd_ax, bd_bx, bd_ay, bd_by, bd_az, bd_bz. Boundary condition types for the last two boundaries should be specified only in the 3D case.
q | double* for d_init_Helmholtz_2D/d_init_Helmholtz_3D, float* for s_init_Helmholtz_2D/s_init_Helmholtz_3D . The constant Helmholtz coefficient. Note that to solve Poisson or Laplace problem, you should set the value of q to 0.

## Output Parameters

ipar | int array of size 128. Contains integer data to be used by Fast Helmholtz Solver (for details, refer to Common Parameters).
dpar | double array of size 5*nx/2+7 in the 2D case or 5*(nx+ny)/2+9 in the 3D case. Contains double-precision data to be used by Fast Helmholtz Solver (for details, refer to Common Parameters).
spar | float array of size 5*nx/2+7 in the 2D case or 5*(nx+ny)/2+9 in the 3D case. Contains single-precision data to be used by Fast Helmholtz Solver (for details, refer to Common Parameters).
stat | int*. Routine completion status, which is also written to ipar[0]. The status should be 0 to proceed to other PL routines.

## Description

The routines ?_init_Helmholtz_2D/?_init_Helmholtz_3D are called to initialize basic data structures for Poisson Library computations of the appropriate precision. All routines invoked after a call to a ?_init_Helmholtz_2D/?_init_Helmholtz_3D routine use values of the ipar, dpar and spar array parameters returned by the routine. Detailed description of the array parameters can be found in Common Parameters.

### Warning

Data structures initialized and created by 2D/3D flavors of the routine cannot be used by 3D/2D flavors of any PL routines, respectively.

You can skip calling this routine in your code. However, see Caveat on Parameter Modifications before doing so.

## Return Values

stat= 0 | The routine successfully completed the task. In general, to proceed with computations, the routine should complete with this stat value.
stat= -99999 | The routine failed to complete the task because of a fatal error.

Parent topic: PL Routines for the Cartesian Solver