solve_chol Interface

public interface solve_chol

Solves the linear system for the unknown vector from a symmetric positive definite matrix . Combines factorization and solve in one call. (Specification)

Summary

One-shot factorization and solve for SPD systems (wraps LAPACK POSV).

Description

This interface computes both the Cholesky factorization and solves the linear system in a single call. Use this for one-time solves. For repeated solves with the same matrix but different RHS, use cholesky + solve_lower_chol/solve_upper_chol for better performance. Supported data types include real and complex. By default, A is not overwritten. Set overwrite_a=.true. to allow in-place factorization for better performance.


Subroutines

private pure module subroutine stdlib_linalg_c_solve_chol_many(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
complex(kind=sp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

complex(kind=sp), intent(in) :: b(:,:)

Right hand side vector or array, b[n] or b[n,nrhs]

complex(kind=sp), intent(inout), contiguous, target :: x(:,:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_c_solve_chol_one(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
complex(kind=sp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

complex(kind=sp), intent(in) :: b(:)

Right hand side vector or array, b[n] or b[n,nrhs]

complex(kind=sp), intent(inout), contiguous, target :: x(:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_d_solve_chol_many(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

real(kind=dp), intent(in) :: b(:,:)

Right hand side vector or array, b[n] or b[n,nrhs]

real(kind=dp), intent(inout), contiguous, target :: x(:,:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_d_solve_chol_one(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
real(kind=dp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

real(kind=dp), intent(in) :: b(:)

Right hand side vector or array, b[n] or b[n,nrhs]

real(kind=dp), intent(inout), contiguous, target :: x(:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_s_solve_chol_many(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
real(kind=sp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

real(kind=sp), intent(in) :: b(:,:)

Right hand side vector or array, b[n] or b[n,nrhs]

real(kind=sp), intent(inout), contiguous, target :: x(:,:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_s_solve_chol_one(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
real(kind=sp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

real(kind=sp), intent(in) :: b(:)

Right hand side vector or array, b[n] or b[n,nrhs]

real(kind=sp), intent(inout), contiguous, target :: x(:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_z_solve_chol_many(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

complex(kind=dp), intent(in) :: b(:,:)

Right hand side vector or array, b[n] or b[n,nrhs]

complex(kind=dp), intent(inout), contiguous, target :: x(:,:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop

private pure module subroutine stdlib_linalg_z_solve_chol_one(a, b, x, lower, overwrite_a, err)

Arguments

Type IntentOptional Attributes Name
complex(kind=dp), intent(inout), target :: a(:,:)

Input SPD matrix a[n,n]

complex(kind=dp), intent(in) :: b(:)

Right hand side vector or array, b[n] or b[n,nrhs]

complex(kind=dp), intent(inout), contiguous, target :: x(:)

Result array/matrix x[n] or x[n,nrhs]

logical(kind=lk), intent(in), optional :: lower

[optional] Use lower triangular factorization? Default = .true.

logical(kind=lk), intent(in), optional :: overwrite_a

[optional] Can A data be overwritten and destroyed? Default = .false.

type(linalg_state_type), intent(out), optional :: err

[optional] state return flag. On error if not requested, the code will stop