dcg
dcg
Computes the approximate solution vector.
Syntax
void
dcg
(
const
MKL_INT
*n
,
double
*x
,
const
double
*b
,
MKL_INT
*RCI_request
,
MKL_INT
*ipar
,
double
*dpar
,
double
*tmp
);
Include Files
- mkl.h
Description
The
dcg
routine computes the approximate solution vector using the CG method [Young71]. The routine dcg
uses the vector in the array x
before the first call as an initial approximation to the solution. The parameter RCI_request
gives you information about the task completion and requests results of certain operations that are required by the solver.Note that lengths of all vectors must be defined in a previous call to the
dcg_init
routine.Input Parameters
- n
- Sets the size of the problem.
- x
- Array of sizen. Contains the initial approximation to the solution vector.
- b
- Array of sizen. Contains the right-hand side vector.
- tmp
Output Parameters
- RCI_request
- Gives information about result of work of the routine.
- x
- Array of sizen. Contains the updated approximation to the solution vector.
- ipar
- Array of size128. Refer to the CG Common Parameters.
- dpar
- Array of size128. Refer to the CG Common Parameters.
- tmp
- Array of size(. Refer to the CG Common Parameters.n*4)
Return Values
- RCI_request=0
- Indicates that the task completed normally and the solution is found and stored in the vectorx. This occurs only if the stopping tests are fully automatic. For the user defined stopping tests, see the description of theRCI_request= 2.
- RCI_request=-1
- Indicates that the routine was interrupted because the maximum number of iterations was reached, but the relative stopping criterion was not met. This situation occurs only if you request both tests.
- RCI_request=-2
- Indicates that the routine was interrupted because of an attempt to divide by zero. This situation happens if the matrix is non-positive definite or almost non-positive definite.
- RCI_request=- 10
- Indicates that the routine was interrupted because the residual norm is invalid. This usually happens because the valuedpar[5]was altered outside of the routine, or thedcg_checkroutine was not called.
- RCI_request=-11
- Indicates that the routine was interrupted because it enters the infinite cycle. This usually happens because the valuesipar[7],ipar[8],ipar[9]were altered outside of the routine, or thedcg_checkroutine was not called.
- RCI_request= 1
- Indicates that you must multiply the matrix bytmp[0:, put the result in then- 1]tmp[, and return control back to the routinen:2*n- 1]dcg.
- RCI_request= 2
- Indicates that you must perform the stopping tests. If they fail, return control back to thedcgroutine. Otherwise, the solution is found and stored in the vectorx.
- RCI_request= 3
- Indicates that you must apply the preconditioner to[2*, put the result in then:3*n- 1][3*, and return control back to the routinen:4*n- 1]dcg.