# ?_sph_p/?_sph_np

Computes the solution of a spherical Helmholtz problem specified by the parameters.

## Syntax

void d_sph_p(double* f, DFTI_DESCIPTOR* handle_s, DFTI_DESCIPTOR* handle_c, int* ipar, double* dpar, int* stat);

void s_sph_p(float* f, DFTI_DESCIPTOR* handle_s, DFTI_DESCIPTOR* handle_c, int* ipar, float* spar, int* stat);

void d_sph_np(double* f, DFTI_DESCIPTOR* handle, int* ipar, double* dpar, int* stat);

void s_sph_np(float* f, DFTI_DESCIPTOR* handle, int* ipar, float* spar, int* stat);

## Input Parameters

f | double* for d_sph_p/d_sph_np, float* for s_sph_p/s_sph_np. Contains the right-hand side of the problem packed in a single vector and modified by the appropriate ?_commit_sph_p/?_commit_sph_np routine. Note that an attempt to substitute the original right-hand side vector at this point will result in a wrong solution. The size of the vector is (np+1)*(nt+1) and value of the right-hand side in the mesh point (i, j) is stored in f[i+j*(np+1)] .
handle_s, handle_c, handle | DESCIPTOR_HANDLE*. Data structures used by Intel MKL FFT interface (for details, refer to FFT Functions). handle_s and handle_c are used only in ?_sph_p and handle is used only in ?_sph_np.
ipar | int array of size 128. Contains integer data to be used by Fast Helmholtz Solver on a sphere (for details, refer to Common Parameters).
dpar | double array of size 5*np/2+nt+10. Contains double-precision data to be used by Fast Helmholtz Solver on a sphere (for details, refer to Common Parameters).
spar | float array of size 5*np/2+nt+10. Contains single-precision data to be used by Fast Helmholtz Solver on a sphere (for details, refer to Common Parameters).

## Output Parameters

f | On output, contains the approximate solution to the problem packed the same way as the right-hand side of the problem was packed on input.
handle_s, handle_c, handle | Data structures used by the Intel MKL FFT interface.
ipar | Contains integer data to be used by Fast Helmholtz Solver on a sphere. Modified on output as explained in Common Parameters.
dpar | Contains double-precision data to be used by Fast Helmholtz Solver on a sphere. Modified on output as explained in Common Parameters.
spar | Contains single-precision data to be used by Fast Helmholtz Solver on a sphere. Modified on output as explained in 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 compute the approximate solution on a sphere of the Helmholtz problem defined in the previous calls to the corresponding initialization and commit routines. The solution is computed according to formulas given in Poisson Library Implemented. The f parameter, which initially holds the packed vector of the right-hand side of the problem, is replaced by the computed solution packed in the same way. Values of np and nt are passed to each of the routines with the ipar array and defined in the previous call to the appropriate ?_init_sph_p/?_init_sph_np routine.

## Return Values

stat= 1 | The routine completed without errors and produced some warnings.
stat= 0 | The routine successfully completed the task.
stat= -2 | The routine stopped because division by zero occurred. It usually happens if the data in the dpar or spar array was altered by mistake.
stat= -3 | The routine stopped because the memory was insufficient to complete the computations.
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 Spherical Solver