14 integer (kind=kint),
allocatable ::
pointers(:)
15 integer (kind=kint),
allocatable ::
indices(:)
28 type (hecmwST_matrix_lagrange) :: hecLagMAT
31 integer (kind=kint) :: np
32 integer (kind=kint) :: ndof
33 integer (kind=kint) :: num_lagrange
34 integer (kind=kint) :: nn
35 integer (kind=kint) :: ierr
36 integer (kind=kint) :: i, j, k, l, countNon0
40 np = hecmat%NP ; ndof = hecmat%NDOF ; num_lagrange = heclagmat%num_lagrange
41 nn = np*ndof + num_lagrange + 1
44 numnon0 = hecmat%NPU*ndof**2+hecmat%NP*ndof*(ndof+1)/2 &
45 + (heclagmat%numU_lagrange)*ndof+heclagmat%num_lagrange
47 numnon0 = (hecmat%NPL+hecmat%NPU+hecmat%NP)*ndof**2 &
48 + (heclagmat%numL_lagrange+heclagmat%numU_lagrange)*ndof
53 if( ierr /= 0 ) stop
" Allocation error, mkl%pointers "
58 if( ierr /= 0 ) stop
" Allocation error, mkl%indices "
67 do l = hecmat%indexL(i-1)+1, hecmat%indexL(i)
69 indices(countnon0) = (hecmat%itemL(l)-1)*ndof + k
70 countnon0 = countnon0 + 1
74 indices(countnon0) = (i-1)*ndof + k
75 countnon0 = countnon0 + 1
79 indices(countnon0) = (i-1)*ndof + k
80 countnon0 = countnon0 + 1
82 do l = hecmat%indexU(i-1)+1, hecmat%indexU(i)
84 indices(countnon0) = (hecmat%itemU(l)-1)*ndof + k
85 countnon0 = countnon0 + 1
88 if( num_lagrange > 0 )
then
89 do l = heclagmat%indexU_lagrange(i-1)+1, heclagmat%indexU_lagrange(i)
90 indices(countnon0) = np*ndof + heclagmat%itemU_lagrange(l)
91 countnon0 = countnon0 + 1
98 if( num_lagrange > 0 )
then
99 do i = 1, num_lagrange
101 indices(countnon0) = np*ndof + i
102 countnon0 = countnon0 + 1
104 do l = heclagmat%indexL_lagrange(i-1)+1, heclagmat%indexL_lagrange(i)
106 indices(countnon0) = (heclagmat%itemL_lagrange(l)-1)*ndof + k
107 countnon0 = countnon0 + 1
124 type (hecmwST_matrix_lagrange) :: hecLagMAT
126 integer (kind=kint) :: np
127 integer (kind=kint) :: ndof
128 integer (kind=kint) :: num_lagrange
129 integer (kind=kint) :: ierr
130 integer (kind=kint) :: i, j, k, l
131 integer (kind=kint) :: countNon0, locINal, locINd, locINau, locINal_lag, locINau_lag
133 np = hecmat%NP ; ndof = hecmat%NDOF ; num_lagrange = heclagmat%num_lagrange
137 if( ierr /= 0 ) stop
" Allocation error, mkl%values "
144 do l = hecmat%indexL(i-1)+1, hecmat%indexL(i)
146 locinal = ((l-1)*ndof+j-1)*ndof + k
147 values(countnon0) = hecmat%AL(locinal)
148 countnon0 = countnon0 + 1
152 locind = ((i-1)*ndof+j-1)*ndof + k
153 values(countnon0) = hecmat%D(locind)
154 countnon0 = countnon0 + 1
158 locind = ((i-1)*ndof+j-1)*ndof + k
159 values(countnon0) = hecmat%D(locind)
160 countnon0 = countnon0 + 1
162 do l = hecmat%indexU(i-1)+1, hecmat%indexU(i)
164 locinau = ((l-1)*ndof+j-1)*ndof + k
165 values(countnon0) = hecmat%AU(locinau)
166 countnon0 = countnon0 + 1
169 if( num_lagrange > 0 )
then
170 do l = heclagmat%indexU_lagrange(i-1)+1, heclagmat%indexU_lagrange(i)
171 locinau_lag = (l-1)*ndof + j
172 values(countnon0) = heclagmat%AU_lagrange(locinau_lag)
173 countnon0 = countnon0 + 1
180 do i = 1, num_lagrange
181 do l = heclagmat%indexL_lagrange(i-1)+1, heclagmat%indexL_lagrange(i)
183 locinal_lag = (l-1)*ndof + k
184 values(countnon0) = heclagmat%AL_lagrange(locinal_lag)
185 countnon0 = countnon0 + 1
196 integer(kind=kint) :: ntdf
197 integer(kind=kint) :: i, j, k
198 real(kind=
kreal) :: x(ntdf)
199 real(kind=
kreal) :: y(ntdf)
205 y(i) = y(i) +
values(j)*x(k)
217 integer(kind=kint) :: ntdf
218 real(kind=
kreal),
allocatable :: y(:)
219 real(kind=
kreal) :: residual_max
221 ntdf = hecmat%NP*hecmat%NDOF + heclagmat%num_lagrange
223 allocate(y(
size(hecmat%B)))
226 residual_max=maxval(dabs(y-hecmat%B))
227 write(*,*)
' maximum residual = ',residual_max
228 if( dabs(residual_max) >= 1.0d-8)
then
229 write(*,*)
' ###Maximum residual exceeded 1.0d-8---Direct Solver### '