# ?_commit_Helmholtz_2D/?_commit_Helmholtz_3D

Checks consistency and correctness of user's data as well as initializes certain data structures required to solve 2D/3D Helmholtz problem.

## Syntax

void d_commit_Helmholtz_2D(double* f, double* bd_ax, double* bd_bx, double* bd_ay, double* bd_by, DFTI_DESCIPTOR* xhandle, int* ipar, double* dpar, int* stat);

void s_commit_Helmholtz_2D (float* f, float* bd_ax, float* bd_bx, float* bd_ay, float* bd_by, DFTI_DESCIPTOR* xhandle, int* ipar, float* spar, int* stat);

void d_commit_Helmholtz_3D(double* f, double* bd_ax, double* bd_bx, double* bd_ay, double* bd_by, double* bd_az, double* bd_bz, DFTI_DESCIPTOR* xhandle, DFTI_DESCIPTOR* yhandle, int* ipar, double* dpar, int* stat);

void s_commit_Helmholtz_3D(float* f, float* bd_ax, float* bd_bx, float* bd_ay, float* bd_by, float* bd_az, float* bd_bz, DFTI_DESCIPTOR* xhandle, DFTI_DESCIPTOR* yhandle, int* ipar, float* spar, int* stat);

## Input Parameters

f | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. Contains the right-hand side of the problem packed in a single vector. The size of the vector for the 2D problem is (nx+1)*(ny+1). In this case, the value of the right-hand side in the mesh point (i, j) is stored in f[i+j*(nx+1)] . The size of the vector for the 3D problem is (nx+1)*(ny+1)*(nz+1). In this case, value of the right-hand side in the mesh point (i, j, k) is stored in f[i+j*(nx+1)+k*(nx+1)*(ny+1)]. Note that to solve the Laplace problem, you should set all the elements of the array f to 0. Note also that the array f may be altered by the routine. To preserve the vector, save it in another memory location.
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).
bd_ax | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. Contains values of the boundary condition on the leftmost boundary of the domain along x-axis. For ?_commit_Helmholtz_2D, the size of the array is ny+1. In case of the Dirichlet boundary condition (value of BCtype[0] is 'D'), it contains values of the function G(ax, yj), j=0, ..., ny. In case of the Neumann boundary condition (value of BCtype[0] is 'N'), it contains values of the function g(ax, yj), j=0, ..., ny. The value corresponding to the index j is placed in bd_ax[j]. For ?_commit_Helmholtz_3D, the size of the array is (ny+1)*(nz+1). In case of the Dirichlet boundary condition (value of BCtype[0] is 'D'), it contains values of the function G(ax, yj, zk), j=0, ..., ny, k=0, ..., nz. In case of the Neumann boundary condition (value of BCtype[0] is 'N'), it contains the values of the function g(ax, yj, zk), j=0, ..., ny, k=0, ..., nz. The values are packed in the array so that the value corresponding to indices (j, k) is placed in bd_ax[j+k*(ny+1)].
bd_bx | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. Contains values of the boundary condition on the rightmost boundary of the domain along x-axis. For ?_commit_Helmholtz_2D, the size of the array is ny+1. In case of the Dirichlet boundary condition (value of BCtype[1] is 'D'), it contains values of the function G(bx, yj), j=0, ..., ny. In case of the Neumann boundary condition (value of BCtype[1] is 'N'), it contains values of the function g(bx, yj), j=0, ..., ny. The value corresponding to the index j is placed in bd_bx[j]. For ?_commit_Helmholtz_3D, the size of the array is (ny+1)*(nz+1). In case of the Dirichlet boundary condition (value of BCtype[1] is 'D'), it contains values of the function G(bx, yj, zk), j=0, ..., ny, k=0, ..., nz. In case of the Neumann boundary condition (value of BCtype[1] is 'N'), it contains the values of the function g(bx, yj, zk), j=0, ..., ny, k=0, ..., nz. The values are packed in the array so that the value corresponding to indices (j, k) is placed in bd_bx[j+k*(ny+1)].
bd_ay | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. Contains values of the boundary condition on the leftmost boundary of the domain along y-axis. For ?_commit_Helmholtz_2D, the size of the array is nx+1. In case of the Dirichlet boundary condition (value of BCtype[2] is 'D'), it contains values of the function G(xi, ay), i=0, ..., nx. In case of the Neumann boundary condition (value of BCtype[2] is 'N'), it contains values of the function g(xi, ay), i=0, ..., nx. The value corresponding to the index i is placed in bd_ay[i]. For ?_commit_Helmholtz_3D, the size of the array is (nx+1)*(nz+1). In case of the Dirichlet boundary condition (value of BCtype[2] is 'D'), it contains values of the function G(xi,ay, zk), i=0, ..., nx, k=0, ..., nz. In case of the Neumann boundary condition (value of BCtype[2] is 'N'), it contains the values of the function g(xi,ay, zk), i=0, ..., nx, k=0, ..., nz. The values are packed in the array so that the value corresponding to indices (i, k) is placed in bd_ay[i+k*(nx+1)].
bd_by | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. Contains values of the boundary condition on the rightmost boundary of the domain along y-axis. For ?_commit_Helmholtz_2D, the size of the array is nx+1. In case of the Dirichlet boundary condition (value of BCtype[3] is 'D'), it contains values of the function G(xi, by), i=0, ..., nx. In case of the Neumann boundary condition (value of BCtype[3] is 'N'), it contains values of the function g(xi, by), i=0, ..., nx. The value corresponding to the index i is placed in bd_by[i]. For ?_commit_Helmholtz_3D, the size of the array is (nx+1)*(nz+1). In case of the Dirichlet boundary condition (value of BCtype[3] is 'D'), it contains values of the function G(xi,by, zk), i=0, ..., nx, k=0, ..., nz. In case of the Neumann boundary condition (value of BCtype[3] is 'N'), it contains the values of the function g(xi,by, zk), i=0, ..., nx, k=0, ..., nz. The values are packed in the array so that the value corresponding to indices (i, k) is placed in bd_by[i+k*(nx+1)].
bd_az | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. This parameter is needed only for ?_commit_Helmholtz_3D. Contains values of the boundary condition on the leftmost boundary of the domain along z-axis. The size of the array is (nx+1)*(ny+1). In case of the Dirichlet boundary condition (value of BCtype[4] is 'D'), it contains values of the function G(xi, yj,az), i=0, ..., nx, j=0, ..., ny. In case of the Neumann boundary condition (value of BCtype[4] is 'N'), it contains the values of the function g(xi, yj,az), i=0, ..., nx, j=0, ..., ny. The values are packed in the array so that the value corresponding to indices (i, j) is placed in bd_az[i+j*(nx+1)].
bd_bz | double* for d_commit_Helmholtz_2D/d_commit_Helmholtz_3D, float* for s_commit_Helmholtz_2D/s_commit_Helmholtz_3D. This parameter is needed only for ?_commit_Helmholtz_3D. Contains values of the boundary condition on the rightmost boundary of the domain along z-axis. The size of the array is (nx+1)*(ny+1). In case of the Dirichlet boundary condition (value of BCtype[5] is 'D'), it contains values of the function G(xi, yj,bz), i=0, ..., nx, j=0, ..., ny. In case of the Neumann boundary condition (value of BCtype[5] is 'N'), it contains the values of the function g(xi, yj,bz), i=0, ..., nx, j=0, ..., ny. The values are packed in the array so that the value corresponding to indices (i, j) is placed in bd_bz[i+j*(nx+1)].

## Output Parameters

f | Vector of the right-hand side of the problem. Possibly, altered on output.
ipar | Contains integer data to be used by Fast Helmholtz Solver. Modified on output as explained in Common Parameters.
dpar | Contains double-precision data to be used by Fast Helmholtz Solver. Modified on output as explained in Common Parameters.
spar | Contains single-precision data to be used by Fast Helmholtz Solver. Modified on output as explained in Common Parameters.
xhandle, yhandle | DESCIPTOR_HANDLE*. Data structures used by the Intel MKL FFT interface (for details, refer to FFT Functions). yhandle is used only by ?_commit_Helmholtz_3D.
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 ?_commit_Helmholtz_2D/?_commit_Helmholtz_3D check consistency and correctness of the parameters to be passed to the solver routines ?_Helmholtz_2D/?_Helmholtz_3D. They also initialize data structures xhandle, yhandle as well as arrays ipar and dpar/spar, depending upon the routine precision. Refer to Common Parameters to find out which particular array elements the ?_commit_Helmholtz_2D/?_commit_Helmholtz_3D routines initialize and what values are written there.

The routines perform only a basic check for correctness and consistency. If you are going to modify parameters of PL routines, see the Caveat on Parameter Modifications section. Unlike ?_init_Helmholtz_2D/?_init_Helmholtz_3D, the routines ?_commit_Helmholtz_2D/?_commit_Helmholtz_3D are mandatory, and you cannot skip calling them in your code. Values of ax, bx, ay, by, az, bz, nx, ny, nz, and BCtype are passed to each of the routines with the ipar array and defined in a previous call to the appropriate ?_init_Helmholtz_2D/?_init_Helmholtz_3D routine.

## Return Values

stat= 1 | The routine completed without errors and produced some warnings.
stat= 0 | The routine successfully completed the task.
stat= -100 | The routine stopped because an error in the user's data was found or the data in the dpar, spar or ipar array was altered by mistake.
stat= -1000 | The routine stopped because of an Intel MKL FFT or TT interface error.
stat= -10000 | The routine stopped because the initialization failed to complete or the parameter ipar[0] was altered by mistake.
stat= -99999 | The routine failed to complete the task because of a fatal error.

Parent topic: PL Routines for the Cartesian Solver