This module implements the evaluation of the "matrix-exponential times vector" procedure using Krylov methods.
This interface provides methods to evaluate the matrix-vector product based on the Arnoldi method.
call kexpm(c, A, b, tau, tol, info [, trans] [, kdim])
c : Output vector (or vectors). It is an intent(out) argument.
A : Linear operator to be exponentiated. It is an intent(inout) argument.
b : Vector to be multiplied by . It is an intent(in) argument.
tau : real (singe or double) time over which the matrix exponential needs to
be computed. It is an intent(in) argument.
info : integer Information flag.
trans (optional) : Whether or is being used.
(default trans=.false.)
kdim (optional) : Dimension of the Krylov subspace used in the Arnoldi method.
Best approximation of in the computed Krylov subspace
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rsp), | intent(out) | :: | c | |||
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rsp), | intent(in) | :: | b |
Input vector on which to apply . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=sp), | intent(in) | :: | tol |
Solution tolerance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best Krylov approximation of in the computed Krylov subspace.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rsp), | intent(out) | :: | C(:) | |||
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rsp), | intent(in) | :: | B(:) |
Input matrix on which to apply . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=sp), | intent(in) | :: | tol |
Solution toleance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best approximation of in the computed Krylov subspace
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rdp), | intent(out) | :: | c | |||
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rdp), | intent(in) | :: | b |
Input vector on which to apply . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=dp), | intent(in) | :: | tol |
Solution tolerance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best Krylov approximation of in the computed Krylov subspace.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rdp), | intent(out) | :: | C(:) | |||
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rdp), | intent(in) | :: | B(:) |
Input matrix on which to apply . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=dp), | intent(in) | :: | tol |
Solution toleance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best approximation of in the computed Krylov subspace
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_csp), | intent(out) | :: | c | |||
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_csp), | intent(in) | :: | b |
Input vector on which to apply . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=sp), | intent(in) | :: | tol |
Solution tolerance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best Krylov approximation of in the computed Krylov subspace.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_csp), | intent(out) | :: | C(:) | |||
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_csp), | intent(in) | :: | B(:) |
Input matrix on which to apply . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=sp), | intent(in) | :: | tol |
Solution toleance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best approximation of in the computed Krylov subspace
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_cdp), | intent(out) | :: | c | |||
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_cdp), | intent(in) | :: | b |
Input vector on which to apply . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=dp), | intent(in) | :: | tol |
Solution tolerance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Best Krylov approximation of in the computed Krylov subspace.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_cdp), | intent(out) | :: | C(:) | |||
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_cdp), | intent(in) | :: | B(:) |
Input matrix on which to apply . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| real(kind=dp), | intent(in) | :: | tol |
Solution toleance based on error estimates. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
|
| integer, | intent(in), | optional | :: | kdim |
Maximum size of the Krylov subspace. |
Utility function to evaluate the matrix-exponential times vector.
call k_exptA(vec_out, A, vec_in, tau, info, trans)
vec_out : Output vector.
A : Matrix to be exponentiated.
vec_in : Input vector.
tau : Integration time.
info : Information flag.
trans : Whether or is being used.
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_rsp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rsp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rsp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_rdp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rdp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_csp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_csp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_cdp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_cdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_cdp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Abstract interface to define the matrix exponential-vector product.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_cdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_cdp), | intent(in) | :: | vec_in |
Input vector. |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for integration. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
Abstract interface to define the matrix exponential-vector product.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_csp), | intent(in) | :: | vec_in |
Input vector. |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for integration. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
Abstract interface to define the matrix exponential-vector product.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rdp), | intent(in) | :: | vec_in |
Input vector. |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for integration. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
Abstract interface to define the matrix exponential-vector product.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rsp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rsp), | intent(in) | :: | vec_in |
Input vector. |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for integration. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use transpose ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_cdp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_cdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_cdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_cdp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_csp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_csp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_csp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_csp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_rdp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rdp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rdp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rdp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=dp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |
Wrapper for the Krylov-based evaluation of the action of the matrix exponential operator
on a vector that conforms to the abstract_exptA_rsp interface.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(abstract_vector_rsp), | intent(out) | :: | vec_out |
Solution vector. |
||
| class(abstract_linop_rsp), | intent(inout) | :: | A |
Linear operator to be exponentiated. |
||
| class(abstract_vector_rsp), | intent(in) | :: | vec_in |
Input vector to be multiplied by . |
||
| real(kind=sp), | intent(in) | :: | tau |
Time horizon for the exponentiation. |
||
| integer, | intent(out) | :: | info |
Information flag. |
||
| logical, | intent(in), | optional | :: | trans |
Use adjoint ? |