Report Typos and Errors    
Semi-Lagrangian Library
Modular library for kinetic and gyrokinetic simulations of plasmas in fusion energy devices.
sll_m_matrix_abstract.F90
Go to the documentation of this file.
1 
10 
12  !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
13 #include "sll_working_precision.h"
14 
17 
18  implicit none
19 
20  public :: &
22 
23  private
24  ! ...................................................
28 
29  contains
30  generic :: get_diagonal => get_diagonal_default, &
31  & get_diagonal_block
32 
33  procedure(sll_p_add_values_matrix_abstract) , deferred :: add_values
34  procedure(sll_p_set_values_matrix_abstract) , deferred :: set_values
35  procedure(sll_p_get_diagonal_matrix_abstract) , deferred :: get_diagonal_default
36  procedure(sll_p_get_diagonal_block_matrix_abstract), deferred :: get_diagonal_block
37  procedure(sll_p_multiply_matrix_abstract) , deferred :: multiply
38 
39  end type sll_t_matrix_abstract
40  ! ...................................................
41 
42  ! ..................................................
43  abstract interface
44  subroutine sll_p_add_values_matrix_abstract(self, i_row, i_col, arr_x)
47 
48  class(sll_t_matrix_abstract) , intent(inout) :: self
49  sll_int32 , intent(in) :: i_row
50  sll_int32 , intent(in) :: i_col
51  sll_real64, dimension(:), intent(in) :: arr_x
53  end interface
54  ! ..................................................
55 
56  ! ..................................................
57  abstract interface
58  subroutine sll_p_set_values_matrix_abstract(self, i_row, i_col, arr_x)
61 
62  class(sll_t_matrix_abstract) , intent(inout) :: self
63  sll_int32 , intent(in) :: i_row
64  sll_int32 , intent(in) :: i_col
65  sll_real64, dimension(:), intent(in) :: arr_x
67  end interface
68  ! ..................................................
69 
70  ! ..................................................
71  abstract interface
72  subroutine sll_p_get_diagonal_matrix_abstract(self, diag, i_diag)
75 
76  class(sll_t_matrix_abstract) , intent(in) :: self
77  sll_real64, dimension(:) , intent(inout) :: diag
78  sll_int32, optional, intent(in) :: i_diag
79 
81  end interface
82  ! ..................................................
83 
84  ! ..................................................
85  abstract interface
86  subroutine sll_p_get_diagonal_block_matrix_abstract(self, diag, i_diag)
89 
90  class(sll_t_matrix_abstract) , intent(in) :: self
91  sll_real64, dimension(:,:,:) , intent(inout) :: diag
92  sll_int32, optional, intent(in) :: i_diag
93 
95  end interface
96  ! ..................................................
97 
98 
99  ! ..................................................
100  abstract interface
101  subroutine sll_p_multiply_matrix_abstract(self, mat_a, mat_b)
103  import sll_t_matrix_abstract
104 
105  class(sll_t_matrix_abstract) , intent(in) :: self
106  class(sll_t_matrix_abstract) , intent(in) :: mat_a
107  class(sll_t_matrix_abstract) , intent(inout) :: mat_b
108  end subroutine sll_p_multiply_matrix_abstract
109  end interface
110  ! ..................................................
111 
112 
113 end module sll_m_matrix_abstract
module for abstract linear operator
module for abstract matrix
Module to select the kind parameter.
    Report Typos and Errors