2 #include "sll_working_precision.h"
23 sll_int32 :: n_total0, n_total1
24 sll_int32 :: n_dofs(3)
25 sll_int32 :: s_deg_0(3)
26 sll_real64 :: delta_x(3)
27 sll_real64 :: epsilon = 1._f64
45 sll_int32 :: n_dofs(3)
46 sll_real64 :: delta_x(3)
47 sll_int32 :: s_deg_0(3)
53 self%delta_x = delta_x
54 self%s_deg_0 = s_deg_0
55 self%n_total0 = product(self%n_dofs)
56 self%n_total1 = (self%n_dofs(1)-1)*self%n_dofs(2)*self%n_dofs(3)
58 self%n_rows = self%n_total1+2*self%n_total0
59 self%n_cols = self%n_total1+2*self%n_total0
61 self%n_global_rows = self%n_rows
62 self%n_global_cols = self%n_cols
77 sll_real64,
intent( in ) :: x(:)
78 sll_real64,
intent( out ) :: y(:)
80 sll_real64 :: scratch0(self%n_total1+2*self%n_total0), scratch1(self%n_total1+2*self%n_total0), scratch2(self%n_total0+2*self%n_total1), scratch3(self%n_total0+2*self%n_total1)
86 call self%mass2%dot( scratch2, scratch3 )
92 call self%mass1%dot( x, scratch1 )
101 call self%mass1%dot( scratch1, scratch0 )
104 y = y + self%epsilon*scratch0
module for abstract linear operator
module for a block linear operator
subroutine free_curl_cl_3d(self)
subroutine create_linear_operator_curl_cl_3d(self, mass1, mass2, n_dofs, delta_x, s_deg_0)
subroutine print_info_curl_cl_3d(self)
subroutine dot_curl_cl_3d(self, x, y)
Utilites for Maxwell solver's with spline finite elements using sparse matrices.
subroutine, public sll_s_multiply_ct_clamped(n_dofs, delta_x, s_deg_0, field_in, field_out)
Multiply by transpose of discrete curl matrix.
subroutine, public sll_s_multiply_g_clamped(n_dofs, delta_x, s_deg_0, field_in, field_out)
Multiply by dicrete gradient matrix.
subroutine, public sll_s_multiply_c_clamped(n_dofs, delta_x, s_deg_0, field_in, field_out)
Multiply by discrete curl matrix.
subroutine, public sll_s_multiply_gt_clamped(n_dofs, delta_x, s_deg_0, field_in, field_out)
Multiply by transpose of dicrete gradient matrix.
class for abstract linear operator
class for a linear operator_block