40 integer,
intent(in) :: n1
41 integer,
intent(in) :: n2
47 self%weak_form => weak_form
63 integer,
intent(in) :: k1
64 integer,
intent(in) :: k2
65 real(wp),
intent(in) :: data_1d_eta1(:, :, :, :)
66 real(wp),
intent(in) :: data_1d_eta2(:, :, :, :)
67 real(wp),
intent(in) :: int_volume(:, :, :, :)
68 real(wp),
intent(in) :: inv_metric(:, :, :, :, :, :)
69 real(wp),
intent(inout) :: A(:, :)
70 real(wp),
intent(inout) :: M(:, :)
72 integer :: i, j, i1, i2, j1, j2, p1, p2
74 integer :: il1, il2, jl1, jl2
77 p1 =
size(data_1d_eta1, 3) - 1
78 p2 =
size(data_1d_eta2, 3) - 1
80 associate(n1 => self%n1, n2 => self%n2)
85 j2 = modulo(k2 + jl2 - 2, n2)
97 i2 = modulo(k2 + il2 - 2, n2)
106 call self%weak_form%element_mat( &
107 test_values_and_derivs_eta1=data_1d_eta1(:, :, il1, k1), &
108 test_values_and_derivs_eta2=data_1d_eta2(:, :, il2, k2), &
109 trial_values_and_derivs_eta1=data_1d_eta1(:, :, jl1, k1), &
110 trial_values_and_derivs_eta2=data_1d_eta2(:, :, jl2, k2), &
111 int_volume=int_volume(:, :, k1, k2), &
112 inv_metric=inv_metric(:, :, k1, k2, :, :), &
116 a(i, j) = a(i, j) + aij
117 m(i, j) = m(i, j) + mij
140 integer,
intent(in) :: k1
141 integer,
intent(in) :: k2
142 real(wp),
intent(in) :: data_1d_eta1(:, :, :, :)
143 real(wp),
intent(in) :: data_1d_eta2(:, :, :, :)
144 real(wp),
intent(in) :: data_2d_rhs(:, :, :, :)
145 real(wp),
intent(in) :: int_volume(:, :, :, :)
146 real(wp),
intent(inout) :: b(:)
148 integer :: i, i1, i2, p1, p2
153 p1 =
size(data_1d_eta1, 3) - 1
154 p2 =
size(data_1d_eta2, 3) - 1
156 associate(n1 => self%n1, n2 => self%n2)
161 i2 = modulo(k2 + il2 - 2, n2)
170 call self%weak_form%element_rhs( &
171 test_values_and_derivs_eta1=data_1d_eta1(:, :, il1, k1), &
172 test_values_and_derivs_eta2=data_1d_eta2(:, :, il2, k2), &
173 data_2d_rhs=data_2d_rhs(:, :, k1, k2), &
174 int_volume=int_volume(:, :, k1, k2), &
subroutine s_poisson_2d_fem_sps_dense_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_dense_assembler__init(self, n1, n2, weak_form)
subroutine s_poisson_2d_fem_sps_dense_assembler__add_element_rhs(self, k1, k2, data_1d_eta1, data_1d_eta2, data_2d_rhs, int_volume, b)
Module to select the kind parameter.
integer, parameter, public f64
f64 is the kind type for 64-bit reals (double precision)