2 #include "sll_working_precision.h"
23 sll_int32 :: n_dofs(3)
24 sll_real64 :: delta_x(3)
25 sll_real64 :: epsilon = 1._f64
43 sll_int32 :: n_dofs(3)
44 sll_real64 :: delta_x(3)
49 self%n_total = product(n_dofs)
51 self%delta_x = delta_x
53 self%n_rows = 3*self%n_total
54 self%n_cols = 3*self%n_total
56 self%n_global_rows = self%n_rows
57 self%n_global_cols = self%n_cols
72 sll_real64,
intent( in ) :: x(:)
73 sll_real64,
intent( out ) :: y(:)
75 sll_real64 :: scratch1(3*self%n_total), scratch2(3*self%n_total)
81 call self%mass2%dot( scratch1, scratch2 )
87 call self%mass1%dot( x, scratch1 )
90 call sll_s_multiply_gt( self%n_dofs, self%delta_x, scratch1, scratch2(1:self%n_total) )
93 call sll_s_multiply_g( self%n_dofs, self%delta_x, scratch2(1:self%n_total), scratch1 )
96 call self%mass1%dot( scratch1, scratch2 )
99 y = y + self%epsilon*scratch2
module for abstract linear operator
module for a block linear operator
subroutine dot_curl_3d(self, x, y)
subroutine free_curl_3d(self)
subroutine print_info_curl_3d(self)
subroutine create_linear_operator_curl_3d(self, mass1, mass2, n_dofs, delta_x)
Utilites for Maxwell solver's with spline finite elements.
subroutine, public sll_s_multiply_g(n_dofs, delta_x, field_in, field_out)
Multiply by dicrete gradient matrix (3d version)
subroutine, public sll_s_multiply_c(n_dofs, delta_x, field_in, field_out)
Multiply by discrete curl matrix.
subroutine, public sll_s_multiply_ct(n_dofs, delta_x, field_in, field_out)
Multiply by transpose of discrete curl matrix.
subroutine, public sll_s_multiply_gt(n_dofs, delta_x, field_in, field_out)
Multiply by transpose of dicrete gradient matrix (3d version)
class for abstract linear operator
class for a linear operator_block