2 #include "sll_working_precision.h"
19 sll_real64,
allocatable :: mass_line_0(:)
20 sll_real64,
allocatable :: mass_line_1(:)
21 sll_real64,
pointer :: m1(:,:), m2(:,:), m4(:,:)
35 mass_line_0,mass_line_1, m1, m2, m4)
39 sll_real64 :: mass_line_0(:)
40 sll_real64 :: mass_line_1(:)
41 sll_real64,
target :: m1(:,:)
42 sll_real64,
target :: m2(:,:)
43 sll_real64,
target :: m4(:,:)
52 allocate(self%mass_line_0(degree+1))
53 allocate(self%mass_line_1(degree))
54 self%mass_line_0=mass_line_0
55 self%mass_line_1=mass_line_1
61 self%n_global_rows = self%n_rows
62 self%n_global_cols = self%n_cols
68 deallocate(self%mass_line_0)
69 deallocate(self%mass_line_1)
78 sll_real64,
intent( in ) :: x(:)
79 sll_real64,
intent( out ) :: y(:)
81 sll_int32 :: row, column
86 y(row) = (self%mass_line_1(1)+0.5_f64*self%dt*self%m1(1,row))*x(row)
87 y(self%n_dof+row)= (self%mass_line_0(1)+0.5_f64*self%dt*self%m4(1,row))*x(self%n_dof+row)
89 do column = 2, self%degree
91 self%mass_line_1(column) * &
92 (x(modulo(row+column-2,self%n_dof)+1) +&
93 x(modulo(row-column,self%n_dof)+1))+&
94 0.5_f64*self%dt*self%m1(column,row) * &
95 x(modulo(row+column-2,self%n_dof)+1)+&
96 0.5_f64*self%dt*self%m1(column,modulo(row-column,self%n_dof)+1) * &
97 x(modulo(row-column,self%n_dof)+1)
100 do column = 2, self%degree+1
101 y(self%n_dof+row) = y(self%n_dof+row) +&
102 self%mass_line_0(column) * &
103 (x(self%n_dof+modulo(row+column-2,self%n_dof)+1) +&
104 x(self%n_dof+ modulo(row-column,self%n_dof)+1))+&
105 0.5_f64*self%dt*self%m4(column,row)*&
106 x(self%n_dof+modulo(row+column-2,self%n_dof)+1)+&
107 0.5_f64*self%dt*self%m4(column,modulo(row-column,self%n_dof)+1)*&
108 x(self%n_dof+modulo(row-column,self%n_dof)+1)
111 do column = 1, 2*self%degree
113 0.5_f64*self%dt*self%m2(7-column,modulo(column-4+row-1,self%n_dof)+1)*&
114 x(self%n_dof+modulo(row+column-self%degree-2,self%n_dof)+1)
116 y(row+self%n_dof) = y(row+self%n_dof) + &
117 0.5_f64*self%dt*self%m2(column,row) * &
118 x(modulo(row+column-self%degree-1,self%n_dof)+1)
module for abstract linear operator
subroutine create_linear_operator_ecsim_ev(self, n_dof, degree, mass_line_0, mass_line_1, m1, m2, m4)
subroutine dot_mono_r2r_ecsim_ev(self, x, y)
subroutine print_info_ecsim_ev(self)
subroutine free_ecsim_ev(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