42 integer,
intent(in) :: n1
43 integer,
intent(in) :: n2
44 integer,
intent(in) :: p1
45 integer,
intent(in) :: p2
53 self%weak_form => weak_form
69 integer,
intent(in) :: k1
70 integer,
intent(in) :: k2
71 real(wp),
intent(in) :: data_1d_eta1(:, :, :, :)
72 real(wp),
intent(in) :: data_1d_eta2(:, :, :, :)
73 real(wp),
intent(in) :: int_volume(:, :, :, :)
74 real(wp),
intent(in) :: inv_metric(:, :, :, :, :, :)
75 real(wp),
intent(inout) :: A(-self%p1:, -self%p2:, :, :)
76 real(wp),
intent(inout) :: M(-self%p1:, -self%p2:, :, :)
78 integer :: i1, i2, j1, j2, s1, s2
80 integer :: il1, il2, jl1, jl2
82 associate(n1 => self%n1, &
90 j2 = modulo(k2 + jl2 - 2, n2) + 1
99 i2 = modulo(k2 + il2 - 2, n2) + 1
105 call self%weak_form%element_mat( &
106 test_values_and_derivs_eta1=data_1d_eta1(:, :, il1, k1), &
107 test_values_and_derivs_eta2=data_1d_eta2(:, :, il2, k2), &
108 trial_values_and_derivs_eta1=data_1d_eta1(:, :, jl1, k1), &
109 trial_values_and_derivs_eta2=data_1d_eta2(:, :, jl2, k2), &
110 int_volume=int_volume(:, :, k1, k2), &
111 inv_metric=inv_metric(:, :, k1, k2, :, :), &
116 s2 = modulo(j2 - i2 + p2, n2) - p2
118 a(s1, s2, i1, i2) = a(s1, s2, i1, i2) + ael
119 m(s1, s2, i1, i2) = m(s1, s2, i1, i2) + mel
142 integer,
intent(in) :: k1
143 integer,
intent(in) :: k2
144 real(wp),
intent(in) :: data_1d_eta1(:, :, :, :)
145 real(wp),
intent(in) :: data_1d_eta2(:, :, :, :)
146 real(wp),
intent(in) :: data_2d_rhs(:, :, :, :)
147 real(wp),
intent(in) :: int_volume(:, :, :, :)
148 real(wp),
intent(inout) :: bs(:, :)
150 integer :: i1, i2, p1, p2
155 p1 =
size(data_1d_eta1, 3) - 1
156 p2 =
size(data_1d_eta2, 3) - 1
158 associate(n1 => self%n1, n2 => self%n2)
163 i2 = modulo(il2 - 2 + k2, n2) + 1
169 call self%weak_form%element_rhs( &
170 test_values_and_derivs_eta1=data_1d_eta1(:, :, il1, k1), &
171 test_values_and_derivs_eta2=data_1d_eta2(:, :, il2, k2), &
172 data_2d_rhs=data_2d_rhs(:, :, k1, k2), &
173 int_volume=int_volume(:, :, k1, k2), &
176 bs(i1, i2) = bs(i1, i2) + bi
subroutine s_poisson_2d_fem_sps_stencil_new_assembler__init(self, n1, n2, p1, p2, weak_form)
subroutine s_poisson_2d_fem_sps_stencil_new_assembler__add_element_mat(self, k1, k2, data_1d_eta1, data_1d_eta2, int_volume, inv_metric, A, M)
subroutine s_poisson_2d_fem_sps_stencil_new_assembler__add_element_rhs(self, k1, k2, data_1d_eta1, data_1d_eta2, data_2d_rhs, int_volume, bs)
Module to select the kind parameter.
integer, parameter, public f64
f64 is the kind type for 64-bit reals (double precision)