3 #include "sll_assert.h" 
    4 #include "sll_errors.h" 
   62       integer, 
intent(in) :: n1
 
   63       integer, 
intent(in) :: n2
 
   64       integer, 
intent(in) :: p1
 
   65       integer, 
intent(in) :: p2
 
   72       call self%block1%init(3, 3)
 
   73       call self%block2%init(3, p1, n2)
 
   74       call self%block3%init(p1, n2, 3)
 
   75       call self%block4%init(n1 - 2, n2, p1, p2)
 
   84       s = self%block1%get_shape() + self%block2%get_shape() + &
 
   85           self%block3%get_shape() + self%block4%get_shape()
 
   95       character(len=*), 
parameter :: this_sub_name = 
"sll_t_linear_operator_matrix_c1_block % dot" 
   96       character(len=64) :: err_msg
 
  106             call self%block1%dot(x%vd, y%vd)
 
  107             call self%block2%dot_incr(x%vs, y%vd)
 
  108             call self%block3%dot(x%vd, y%vs)
 
  109             call self%block4%dot_incr(x%vs, y%vs)
 
  112             err_msg = 
"y must be of type sll_t_vector_space_c1_block" 
  113             sll_error(this_sub_name, err_msg)
 
  118          err_msg = 
"x must be of type sll_t_vector_space_c1_block" 
  119          sll_error(this_sub_name, err_msg)
 
  131       character(len=*), 
parameter :: this_sub_name = 
"sll_t_linear_operator_matrix_c1_block_new_new % dot_incr" 
  132       character(len=64) :: err_msg
 
  142             call self%block1%dot_incr(x%vd, y%vd)
 
  143             call self%block2%dot_incr(x%vs, y%vd)
 
  144             call self%block3%dot_incr(x%vd, y%vs)
 
  145             call self%block4%dot_incr(x%vs, y%vs)
 
  148             err_msg = 
"y must be of type sll_t_vector_space_c1_block" 
  149             sll_error(this_sub_name, err_msg)
 
  154          err_msg = 
"x must be of type sll_t_vector_space_c1_block" 
  155          sll_error(this_sub_name, err_msg)
 
  164       real(wp), 
intent(inout) :: A(:, :)
 
  166       integer :: i, j, i1, i2, j1, j2, k1, k2
 
  169       sll_assert(
size(a, 1) == 3 + (self%n1 - 2)*self%n2)
 
  170       sll_assert(
size(a, 2) == 3 + (self%n1 - 2)*self%n2)
 
  172       associate(n1 => self%n1, &
 
  178          a(1:3, 1:3) = self%block1%A(:, :)
 
  184                a(1:3, i + 3) = self%block2%A(:, i1, i2)
 
  187          a(1:3, 4 + p1:3 + (n1 - 2)*n2) = 0.0_wp
 
  193                a(i + 3, 1:3) = self%block3%A(i1, i2, :)
 
  196          a(4 + p1:3 + (n1 - 2)*n2, 1:3) = 0.0_wp
 
  203                      j1 = modulo(i1 - 1 + k1, n1 - 2) + 1
 
  204                      j2 = modulo(i2 - 1 + k2, n2) + 1
 
  207                      a(i + 3, j + 3) = self%block4%A(k1, k2, i1, i2)
 
  221       call self%block1%free()
 
  222       call self%block2%free()
 
  223       call self%block3%free()
 
  224       call self%block4%free()
 
subroutine s_linear_operator_matrix_c1_block_new__dot_incr(self, x, y)
 
subroutine s_linear_operator_matrix_c1_block_new__to_array(self, A)
 
subroutine s_linear_operator_matrix_c1_block_new__dot(self, x, y)
 
integer function, dimension(2) f_linear_operator_matrix_c1_block_new__get_shape(self)
 
subroutine s_linear_operator_matrix_c1_block_new__free(self)
 
subroutine s_linear_operator_matrix_c1_block_new__init(self, n1, n2, p1, p2)
 
Abstract type implementing a generic vector space.
 
Vector space for wrapping 2D Fortran real arrays.
 
Module to select the kind parameter.
 
integer, parameter, public f64
f64 is the kind type for 64-bit reals (double precision)
 
Abstract base class for all vector spaces.