2 #include "sll_working_precision.h"
19 sll_real64,
allocatable :: mass_line_0(:)
20 sll_real64,
allocatable :: mass_line_1(:)
33 mass_line_0, mass_line_1)
37 sll_real64 :: mass_line_0(:)
38 sll_real64 :: mass_line_1(:)
45 allocate(self%mass_line_0(degree+1))
46 allocate(self%mass_line_1(degree))
47 self%mass_line_0=mass_line_0
48 self%mass_line_1=mass_line_1
54 self%n_global_rows = self%n_rows
55 self%n_global_cols = self%n_cols
61 deallocate(self%mass_line_0)
62 deallocate(self%mass_line_1)
68 sll_real64,
intent( in ) :: x(:)
69 sll_real64,
intent( out ) :: y(:)
71 sll_int32 :: row, column
72 sll_real64 :: scratch(self%n_dof+1)
78 y(row)= self%mass_line_0(1)*x(row)
79 scratch(row)=self%mass_line_1(1)*x(self%n_dof+row)
80 do column = 2, self%degree
81 scratch(row)=scratch(row)+&
82 self%mass_line_1(column) * &
83 (x(self%n_dof+ modulo(row+column-2,self%n_dof)+1) +&
84 x(self%n_dof+ modulo(row-column,self%n_dof)+1))
86 do column = 2, self%degree+1
88 self%mass_line_0(column) * &
89 (x(modulo(row+column-2,self%n_dof)+1) +&
90 x(modulo(row-column,self%n_dof)+1))
94 scratch(self%n_dof+1)=scratch(1)
97 0.5_f64*self%dt/self%dx*(scratch(row)-scratch(row+1))
99 y(self%n_dof+row)=x(self%n_dof+row)+ &
100 0.5_f64*self%dt/self%dx*(x(row)-x(modulo(row-2,self%n_dof)+1))
module for abstract linear operator
subroutine dot_mono_r2r_ecsim_eb(self, x, y)
subroutine print_info_ecsim_eb(self)
subroutine create_linear_operator_ecsim_eb(self, n_dof, degree, mass_line_0, mass_line_1)
subroutine free_ecsim_eb(self)
Utilites for Maxwell solver's with spline finite elements.
subroutine, public sll_s_spline_fem_mass_line(degree, mass_line)
Computes the mass line for a mass matrix with degree splines.
class for abstract linear operator