19 type(hecmwst_local_mesh) :: hecmesh
20 type(hecmwst_matrix) :: hecmat
22 real(kind=kreal),
intent(out) :: r(:)
23 real(kind=kreal),
intent(out) :: rlag(:)
24 real(kind=kreal) :: tcomm, sum
25 integer(kind=kint) :: i, idof, ii, i0, ls, le, l, loc0, ll, j, loc, l0, k
26 integer(kind=kint) :: ndof, npndof
36 call hecmw_matresid(hecmesh, hecmat, hecmat%X, hecmat%B, r, tcomm)
37 if (fstrmat%num_lagrange > 0)
then
43 ls=fstrmat%indexU_lagrange(i-1)+1
44 le=fstrmat%indexU_lagrange(i)
48 ll=fstrmat%itemU_lagrange(l)
50 sum=sum+fstrmat%AU_lagrange(loc)*hecmat%X(npndof+ll)
56 do i=1,fstrmat%num_lagrange
57 ls=fstrmat%indexL_lagrange(i-1)+1
58 le=fstrmat%indexL_lagrange(i)
62 j=fstrmat%itemL_lagrange(l)
67 sum=sum+fstrmat%AL_lagrange(loc)*hecmat%X(ll)
70 rlag(i)=hecmat%B(npndof+i)-sum
79 type(hecmwst_local_mesh) :: hecmesh
80 type(hecmwst_matrix) :: hecmat
82 real(kind=kreal),
allocatable :: r(:)
83 real(kind=kreal),
allocatable :: rlag(:)
84 real(kind=kreal) :: bnorm2, rnorm2
85 real(kind=kreal) :: rlagnorm2
86 real(kind=kreal) :: tcomm
87 integer(kind=kint) :: i
88 allocate(r(hecmat%NDOF*hecmat%NP),rlag(fstrmat%num_lagrange))
90 call hecmw_innerproduct_r(hecmesh, hecmat%NDOF, hecmat%B, hecmat%B, bnorm2, tcomm)
93 call hecmw_innerproduct_r(hecmesh, hecmat%NDOF, r, r, rnorm2, tcomm)
96 do i=1,fstrmat%num_lagrange
97 rlagnorm2=rlagnorm2+rlag(i)*rlag(i)
100 call hecmw_allreduce_r1(hecmesh, rlagnorm2, hecmw_sum)
102 if (fstrmat%num_lagrange > 0) rnorm2=rnorm2+rlagnorm2
111 type(hecmwst_local_mesh) :: hecmesh
112 type(hecmwst_matrix) :: hecmat
114 real(kind=kreal),
allocatable :: r(:)
115 real(kind=kreal),
allocatable :: rlag(:)
116 real(kind=kreal) :: rmax, rlagmax
117 real(kind=kreal) :: tcomm
118 allocate(r(hecmat%NDOF*hecmat%NP),rlag(fstrmat%num_lagrange))
120 rmax = maxval(dabs(r))
121 if (fstrmat%num_lagrange > 0)
then
122 rlagmax = maxval(dabs(rlag))
123 if (rlagmax > rmax) rmax = rlagmax
126 call hecmw_allreduce_r1(hecmesh, rmax, hecmw_max)
This module defined coomon data and basic structures for analysis.