FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
hecmw_solver_Iterative.f90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
2 ! Copyright (c) 2019 FrontISTR Commons
3 ! This software is released under the MIT License, see LICENSE.txt
4 !-------------------------------------------------------------------------------
5 
7 contains
8  !
9  !C***
10  !C*** hecmw_solve_nn
11  !C***
12  !
13  subroutine hecmw_solve_iterative (hecMESH, hecMAT)
14 
15  use hecmw_util
16  use hecmw_solver_cg
23  use m_hecmw_comm_f
25  use hecmw_precond
29 
30  implicit none
31 
32  type (hecmwST_matrix), target :: hecMAT
33  type (hecmwST_local_mesh) :: hecMESH
34 
35  integer(kind=kint) :: error
36  integer(kind=kint) :: ITER, METHOD, PRECOND, NSET, METHOD2
37  integer(kind=kint) :: iterPREmax
38  integer(kind=kint) :: ITERlog, TIMElog
39  real(kind=kreal) :: resid, sigma_diag, thresh, filter, resid2
40  real(kind=kreal) :: time_setup, time_comm, time_sol, tr
41  real(kind=kreal) :: time_ax, time_precond
42 
43  integer(kind=kint) :: NREST
44  real(kind=kreal) :: sigma
45 
46  integer(kind=kint) :: totalmpc, MPC_METHOD
47  integer(kind=kint) :: auto_sigma_diag
48 
49  !C PARAMETERs
50  iter = hecmw_mat_get_iter(hecmat)
51  method = hecmw_mat_get_method(hecmat)
52  method2 = hecmw_mat_get_method2(hecmat)
53  precond = hecmw_mat_get_precond(hecmat)
54  nset = hecmw_mat_get_nset(hecmat)
55  iterpremax= hecmw_mat_get_iterpremax(hecmat)
56  nrest = hecmw_mat_get_nrest(hecmat)
57  iterlog = hecmw_mat_get_iterlog(hecmat)
58  timelog = hecmw_mat_get_timelog(hecmat)
59  time_setup= 0.d0
60  time_comm = 0.d0
61  time_sol = 0.d0
62  resid = hecmw_mat_get_resid(hecmat)
63  sigma_diag= hecmw_mat_get_sigma_diag(hecmat)
64  sigma = hecmw_mat_get_sigma(hecmat)
65  thresh = hecmw_mat_get_thresh(hecmat)
66  filter = hecmw_mat_get_filter(hecmat)
67  if (sigma_diag.lt.0.d0) then
68  auto_sigma_diag= 1
69  sigma_diag= 1.d0
70  else
71  auto_sigma_diag= 0
72  endif
73 
74  !C ERROR CHECK
75  call hecmw_solve_check_zerodiag(hecmesh, hecmat) !C-- ZERO DIAGONAL component
76 
77  !C-- IN CASE OF MPC-CG
78  totalmpc = hecmesh%mpc%n_mpc
79  call hecmw_allreduce_i1 (hecmesh, totalmpc, hecmw_sum)
80  mpc_method = hecmw_mat_get_mpc_method(hecmat)
81  if (totalmpc > 0 .and. mpc_method == 2) then
82  call hecmw_mat_set_flag_mpcmatvec(hecmat, 1)
83  endif
84 
85  !C-- RECYCLE SETTING OF PRECONDITIONER
87 
88  ! exchange diagonal elements of overlap region
89  call hecmw_mat_dump(hecmat, hecmesh)
90  call hecmw_matvec_set_async(hecmat)
91 
92  !C ITERATIVE solver
93  error=0
94  !! Auto Sigma_diag loop
95  do
96  call hecmw_mat_set_flag_converged(hecmat, 0)
97  call hecmw_mat_set_flag_diverged(hecmat, 0)
98  if (auto_sigma_diag.eq.1) call hecmw_mat_set_sigma_diag(hecmat, sigma_diag)
99 
102  call hecmw_solve_iterative_printmsg(hecmesh,hecmat,method)
103 
104  select case(method)
105  case (1) !--CG
106  hecmat%symmetric = .true.
107  call hecmw_solve_cg( hecmesh, hecmat, iter, resid, error, time_setup, time_sol, time_comm )
108  case (2) !--BiCGSTAB
109  hecmat%symmetric = .false.
110  call hecmw_solve_bicgstab( hecmesh,hecmat, iter, resid, error,time_setup, time_sol, time_comm )
111  case (3) !--GMRES
112  hecmat%symmetric = .false.
113  call hecmw_solve_gmres( hecmesh,hecmat, iter, resid, error, time_setup, time_sol, time_comm )
114  case (4) !--GPBiCG
115  hecmat%symmetric = .false.
116  call hecmw_solve_gpbicg( hecmesh,hecmat, iter, resid, error, time_setup, time_sol, time_comm )
117  case (5) !--GMRESR
118  hecmat%symmetric = .false.
119  call hecmw_solve_gmresr( hecmesh,hecmat, iter, resid, error, time_setup, time_sol, time_comm )
120  case (6) !--GMRESREN
121  hecmat%symmetric = .false.
122  call hecmw_solve_gmresren( hecmesh,hecmat, iter, resid, error, time_setup, time_sol, time_comm )
123  case default
124  error = hecmw_solver_error_incons_pc !!未定義なMETHOD!!
125  call hecmw_solve_error (hecmesh, error)
126  end select
127 
129  .or. error==hecmw_solver_error_diverge_nan) then
130  call hecmw_mat_set_flag_diverged(hecmat, 1)
131  if ((precond>=10 .and. precond<20) .and. auto_sigma_diag==1 .and. sigma_diag<2.d0) then
132  sigma_diag = sigma_diag + 0.1
133  if (hecmesh%my_rank.eq.0) write(*,*) 'Increasing SIGMA_DIAG to', sigma_diag
134  cycle
135  elseif (method==1 .and. method2>1) then
136  if (auto_sigma_diag.eq.1) sigma_diag = 1.0
137  method = method2
138  cycle
139  endif
140  endif
141 
142  if (auto_sigma_diag.eq.1) call hecmw_mat_set_sigma_diag(hecmat, -1.d0)
143  exit
144  enddo
145 
146  if (error.ne.0) then
147  call hecmw_solve_error (hecmesh, error)
148  endif
149 
150  resid2=hecmw_rel_resid_l2(hecmesh,hecmat)
151  if (hecmesh%my_rank.eq.0 .and. (iterlog.eq.1 .or. timelog.ge.1)) then
152  write(*,"(a,1pe12.5)")'### Relative residual =', resid2
153  endif
154  if (resid2 < hecmw_mat_get_resid(hecmat)) call hecmw_mat_set_flag_converged(hecmat, 1)
155 
156  call hecmw_mat_dump_solution(hecmat)
158 
159  !C-- IN CASE OF MPC-CG
160  if (totalmpc > 0 .and. mpc_method == 2) then
161  call hecmw_mat_set_flag_mpcmatvec(hecmat, 0)
162  endif
163 
164  time_ax = hecmw_matvec_get_timer()
165  time_precond = hecmw_precond_get_timer()
166 
167  if (hecmesh%my_rank.eq.0 .and. timelog.ge.1) then
168  tr= (time_sol-time_comm)/(time_sol+1.d-24)*100.d0
169  write (*,'(/a)') '### summary of linear solver'
170  write (*,'(i10,a, 1pe16.6)') iter, ' iterations ', resid
171  write (*,'(a, 1pe16.6 )') ' set-up time : ', time_setup
172  write (*,'(a, 1pe16.6 )') ' solver time : ', time_sol
173  write (*,'(a, 1pe16.6 )') ' solver/comm time : ', time_comm
174  write (*,'(a, 1pe16.6 )') ' solver/matvec : ', time_ax
175  write (*,'(a, 1pe16.6 )') ' solver/precond : ', time_precond
176  if (iter > 0) &
177  write (*,'(a, 1pe16.6 )') ' solver/1 iter : ', time_sol / iter
178  write (*,'(a, 1pe16.6/)') ' work ratio (%) : ', tr
179  endif
180 
181  call hecmw_output_flops(hecmesh, hecmat, iter, time_ax)
182 
183  end subroutine hecmw_solve_iterative
184 
185  subroutine hecmw_output_flops(hecMESH, hecMAT, count_Ax, time_Ax)
187  use m_hecmw_comm_f
190  implicit none
191  type (hecmwST_local_mesh) :: hecMESH
192  type(hecmwst_matrix) :: hecMAT
193  integer(kint) :: N, NP, NDOF, NPU, NPL, NZ
194  integer(kint) :: base, i, count_Ax
195  real(kreal) :: time_Ax, size_matrix, flop_matrix, size_vector, memory_size, tmp, num
196  real(kreal) :: t_max, t_min, t_avg, t_sd
197  character(2) :: SI(0:6) = [' ',' K',' M',' G',' T',' P',' E']
198 
199  if(hecmw_mat_get_timelog(hecmat) /= 2) return
200 
201  n = hecmat%N
202  np = hecmat%NP
203  ndof = hecmat%NDOF
204  npu = hecmat%indexU(n)
205  npl = hecmat%indexL(n)
206  nz = n + npu + npl
207 
208  size_matrix = kreal*nz*ndof**2 &
209  + kint*(npu+npl) &
210  + kint*2*(n+1)
211  size_vector = kreal*n*ndof &
212  + kreal*np*ndof
213  memory_size = size_matrix + size_vector
214  flop_matrix = 2.0d0*nz*ndof**2
215 
216  call hecmw_allreduce_r1(hecmesh, memory_size, hecmw_sum)
217  call hecmw_allreduce_r1(hecmesh, flop_matrix, hecmw_sum)
218 
219  base = 1000 ! or 1024
220  num = memory_size
221  i = int(log(num) / log(dble(base)))
222  tmp = 1.0d0/base**i * num
223  if(hecmesh%my_rank == 0)then
224  write (*,"(a,f11.3,a,a)") "memory amount of coef. matrix: ", tmp, si(i),"B"
225  endif
226 
227  num = count_ax*memory_size/time_ax
228  i = int(log(num) / log(dble(base)))
229  tmp = 1.0d0/base**i * num
230  call hecmw_time_statistics(hecmesh, tmp, t_max, t_min, t_avg, t_sd)
231  if(hecmesh%my_rank == 0)then
232  write(*,"(a,f11.3,a,a)") "matvec memory band width : ", tmp, si(i),"B/s"
233  write(*,"(a,f11.3)") ' Max :',t_max
234  write(*,"(a,f11.3)") ' Min :',t_min
235  write(*,"(a,f11.3)") ' Avg :',t_avg
236  write(*,"(a,f11.3)") ' Std Dev :',t_sd
237  endif
238 
239  num = count_ax*flop_matrix/time_ax
240  i = int(log(num) / log(dble(base)))
241  tmp = 1.0d0/base**i * num
242  call hecmw_time_statistics(hecmesh, tmp, t_max, t_min, t_avg, t_sd)
243  if(hecmesh%my_rank == 0)then
244  write(*,"(a,f11.3,a,a)") "matvec FLOPs : ", tmp, si(i),"FLOPs"
245  write(*,"(a,f11.3)") ' Max :',t_max
246  write(*,"(a,f11.3)") ' Min :',t_min
247  write(*,"(a,f11.3)") ' Avg :',t_avg
248  write(*,"(a,f11.3)") ' Std Dev :',t_sd
249  endif
250  end subroutine hecmw_output_flops
251 
252  subroutine hecmw_solve_check_zerodiag (hecMESH, hecMAT)
256  use m_hecmw_comm_f
257  implicit none
258  type (hecmwST_local_mesh) :: hecMESH
259  type (hecmwST_matrix), target :: hecMAT
260  integer (kind=kint)::PRECOND,iterPREmax,i,j,error
261  precond = hecmw_mat_get_precond(hecmat)
262  iterpremax= hecmw_mat_get_iterpremax(hecmat)
263  !C
264  !C-- ZERO DIAGONAL component
265  error= 0
266  do i= 1, hecmat%N
267  do j = 1, hecmat%NDOF
268  if (dabs(hecmat%D(hecmat%NDOF*hecmat%NDOF*(i-1)+(j-1)*(hecmat%NDOF+1)+1)).eq.0.d0) then
270  end if
271  end do
272  enddo
273 
274  call hecmw_allreduce_i1 (hecmesh, error, hecmw_max)
275  if (error.ne.0 .and. (precond.lt.10 .and. iterpremax.gt.0)) then
276  call hecmw_solve_error (hecmesh, error)
277  endif
278 
279  end subroutine hecmw_solve_check_zerodiag
280 
281  function hecmw_solve_check_zerorhs (hecMESH, hecMAT)
285  use m_hecmw_comm_f
286  implicit none
287  type (hecmwst_local_mesh) :: hecmesh
288  type (hecmwst_matrix), target :: hecmat
289  real(kind=kreal), dimension(1) :: rhs
290  integer (kind=kint)::precond,iterpremax,i,j,error
291  logical :: hecmw_solve_check_zerorhs
292 
293  precond = hecmw_mat_get_precond(hecmat)
294  iterpremax= hecmw_mat_get_iterpremax(hecmat)
295  !C
296  !C-- ZERO RHS norm
297  error= 0
298  hecmw_solve_check_zerorhs = .false.
299 
300  rhs(1)= 0.d0
301  do i= 1, hecmat%N
302  do j = 1, hecmat%NDOF
303  rhs(1)=rhs(1) + hecmat%B(hecmat%NDOF*(i-1)+j)**2
304  end do
305  enddo
306  if (hecmesh%mpc%n_mpc > 0) then
307  do i= 1, hecmesh%mpc%n_mpc
308  rhs(1)= rhs(1) + hecmesh%mpc%mpc_const(i)**2
309  enddo
310  endif
311  call hecmw_allreduce_r (hecmesh, rhs, 1, hecmw_sum)
312 
313  if (rhs(1).eq.0.d0) then
315  call hecmw_solve_error (hecmesh, error)
316  hecmat%X(:)=0.d0
318  endif
319 
320  end function hecmw_solve_check_zerorhs
321 
322  subroutine hecmw_solve_iterative_printmsg (hecMESH, hecMAT, METHOD)
326 
327  implicit none
328  type (hecmwST_local_mesh) :: hecMESH
329  type (hecmwST_matrix), target :: hecMAT
330  integer(kind=kint) :: METHOD
331  integer(kind=kint) :: ITER, PRECOND, NSET, iterPREmax, NREST,NBFGS
332  integer(kind=kint) :: ITERlog, TIMElog
333 
334  character(len=30) :: msg_precond
335  character(len=30) :: msg_method
336 
337  iter = hecmw_mat_get_iter(hecmat)
338  ! METHOD = hecmw_mat_get_method(hecMAT)
339  precond = hecmw_mat_get_precond(hecmat)
340  nset = hecmw_mat_get_nset(hecmat)
341  iterpremax= hecmw_mat_get_iterpremax(hecmat)
342  nrest = hecmw_mat_get_nrest(hecmat)
343  nbfgs = hecmw_mat_get_nbfgs(hecmat)
344  iterlog= hecmw_mat_get_iterlog(hecmat)
345  timelog= hecmw_mat_get_timelog(hecmat)
346 
347  select case(method)
348  case (1) !--CG
349  msg_method="CG"
350  case (2) !--BiCGSTAB
351  msg_method="BiCGSTAB"
352  case (3) !--GMRES
353  msg_method="GMRES"
354  case (4) !--GPBiCG
355  msg_method="GPBiCG"
356  case (5)
357  if (nbfgs==0) then
358  msg_method="GMRESR"
359  else
360  msg_method="SUP-GMRESR"
361  endif
362  case (6)
363  msg_method="GMRESR-EN"
364  case default
365  msg_method="Unlabeled"
366  end select
367  select case(precond)
368  case (1,2)
369  msg_precond="SSOR"
370  case (3)
371  msg_precond="DIAG"
372  case (5)
373  msg_precond="ML"
374  case (7)
375  msg_precond="DirectMUMPS"
376  case (10, 11, 12)
377  write(msg_precond,"(a,i0,a)") "ILU(",precond-10,")"
378  case (20)
379  msg_precond="SAINV"
380  case (21)
381  msg_precond="RIF"
382  case default
383  msg_precond="Unlabeled"
384  end select
385  if (hecmesh%my_rank.eq.0 .and. (iterlog.eq.1 .or. timelog.ge.1)) then
386  write (*,'(a,i0,a,i0,a,a,a,a,a,i0)') '### ',hecmat%NDOF,'x',hecmat%NDOF,' BLOCK ', &
387  & trim(msg_method),", ",trim(msg_precond),", ", iterpremax
388  end if
389  end subroutine hecmw_solve_iterative_printmsg
390 
391 end module hecmw_solver_iterative
hecmw_solver_las::hecmw_matvec_unset_async
subroutine, public hecmw_matvec_unset_async
Definition: hecmw_solver_las.f90:86
hecmw_matrix_dump::hecmw_mat_dump_solution
subroutine, public hecmw_mat_dump_solution(hecMAT)
Definition: hecmw_matrix_dump.f90:340
hecmw_util::hecmw_max
integer(kind=kint), parameter hecmw_max
Definition: hecmw_util_f.F90:25
hecmw_util::kint
integer(kind=4), parameter kint
Definition: hecmw_util_f.F90:15
hecmw_matrix_misc::hecmw_mat_set_sigma_diag
subroutine, public hecmw_mat_set_sigma_diag(hecMAT, sigma_diag)
Definition: hecmw_matrix_misc.f90:679
hecmw_matrix_misc::hecmw_mat_get_iterpremax
integer(kind=kint) function, public hecmw_mat_get_iterpremax(hecMAT)
Definition: hecmw_matrix_misc.f90:352
m_hecmw_solve_error::hecmw_solver_error_diverge_nan
integer(kind=kint), parameter hecmw_solver_error_diverge_nan
Definition: hecmw_solve_error.f90:9
hecmw_solver_gpbicg::hecmw_solve_gpbicg
subroutine, public hecmw_solve_gpbicg(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_GPBiCG.f90:21
hecmw_solver_las::hecmw_matvec_clear_timer
subroutine, public hecmw_matvec_clear_timer
Definition: hecmw_solver_las.f90:231
hecmw_solver_bicgstab::hecmw_solve_bicgstab
subroutine hecmw_solve_bicgstab(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_BiCGSTAB.f90:18
hecmw_matrix_misc::hecmw_mat_get_precond
integer(kind=kint) function, public hecmw_mat_get_precond(hecMAT)
Definition: hecmw_matrix_misc.f90:321
hecmw_solver_bicgstab
Definition: hecmw_solver_BiCGSTAB.f90:11
hecmw_util::hecmw_sum
integer(kind=kint), parameter hecmw_sum
Definition: hecmw_util_f.F90:23
m_hecmw_solve_error::hecmw_solver_error_zero_diag
integer(kind=kint), parameter hecmw_solver_error_zero_diag
Definition: hecmw_solve_error.f90:9
hecmw_solver_iterative::hecmw_solve_iterative_printmsg
subroutine hecmw_solve_iterative_printmsg(hecMESH, hecMAT, METHOD)
Definition: hecmw_solver_Iterative.f90:323
m_hecmw_solve_error::hecmw_solver_error_incons_pc
integer(kind=kint), parameter hecmw_solver_error_incons_pc
Definition: hecmw_solve_error.f90:9
hecmw_solver_iterative
Definition: hecmw_solver_Iterative.f90:6
hecmw_matrix_misc::hecmw_mat_get_iter
integer(kind=kint) function, public hecmw_mat_get_iter(hecMAT)
Definition: hecmw_matrix_misc.f90:279
hecmw_solver_las
Definition: hecmw_solver_las.f90:6
hecmw_matrix_misc::hecmw_mat_get_timelog
integer(kind=kint) function, public hecmw_mat_get_timelog(hecMAT)
Definition: hecmw_matrix_misc.f90:488
hecmw_solver_gmresr::hecmw_solve_gmresr
subroutine, public hecmw_solve_gmresr(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_GMRESR.f90:20
m_hecmw_comm_f::hecmw_allreduce_r
subroutine hecmw_allreduce_r(hecMESH, val, n, ntag)
Definition: hecmw_comm_f.F90:368
hecmw_solver_iterative::hecmw_solve_iterative
subroutine hecmw_solve_iterative(hecMESH, hecMAT)
Definition: hecmw_solver_Iterative.f90:14
hecmw_matrix_misc::hecmw_mat_get_nrest
integer(kind=kint) function, public hecmw_mat_get_nrest(hecMAT)
Definition: hecmw_matrix_misc.f90:366
hecmw_solver_iterative::hecmw_output_flops
subroutine hecmw_output_flops(hecMESH, hecMAT, count_Ax, time_Ax)
Definition: hecmw_solver_Iterative.f90:186
hecmw_solver_gmres
Definition: hecmw_solver_GMRES.f90:10
hecmw_matrix_misc::hecmw_mat_get_resid
real(kind=kreal) function, public hecmw_mat_get_resid(hecMAT)
Definition: hecmw_matrix_misc.f90:672
hecmw_util
I/O and Utility.
Definition: hecmw_util_f.F90:7
hecmw_util::hecmwst_local_mesh
Definition: hecmw_util_f.F90:234
m_hecmw_comm_f::hecmw_allreduce_r1
subroutine hecmw_allreduce_r1(hecMESH, s, ntag)
Definition: hecmw_comm_f.F90:403
hecmw_matrix_misc::hecmw_mat_set_flag_diverged
subroutine, public hecmw_mat_set_flag_diverged(hecMAT, flag_diverged)
Definition: hecmw_matrix_misc.f90:625
m_hecmw_comm_f
Definition: hecmw_comm_f.F90:6
hecmw_solver_cg::hecmw_solve_cg
subroutine, public hecmw_solve_cg(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_CG.f90:21
hecmw_matrix_misc::hecmw_mat_get_iterlog
integer(kind=kint) function, public hecmw_mat_get_iterlog(hecMAT)
Definition: hecmw_matrix_misc.f90:474
hecmw_solver_gmresr
Definition: hecmw_solver_GMRESR.f90:10
hecmw_precond::hecmw_precond_get_timer
real(kind=kreal) function, public hecmw_precond_get_timer()
Definition: hecmw_precond.f90:156
hecmw_solver_las::hecmw_rel_resid_l2
real(kind=kreal) function, public hecmw_rel_resid_l2(hecMESH, hecMAT, COMMtime)
Definition: hecmw_solver_las.f90:125
hecmw_util::kreal
integer(kind=4), parameter kreal
Definition: hecmw_util_f.F90:16
hecmw_matrix_misc::hecmw_mat_get_sigma_diag
real(kind=kreal) function, public hecmw_mat_get_sigma_diag(hecMAT)
Definition: hecmw_matrix_misc.f90:694
m_hecmw_comm_f::hecmw_allreduce_i1
subroutine hecmw_allreduce_i1(hecMESH, s, ntag)
Definition: hecmw_comm_f.F90:458
hecmw_solver_gmresren
Definition: hecmw_solver_GMRESREN.f90:10
hecmw_matrix_misc::hecmw_mat_recycle_precond_setting
subroutine, public hecmw_mat_recycle_precond_setting(hecMAT)
Definition: hecmw_matrix_misc.f90:791
hecmw_solver_misc::hecmw_time_statistics
subroutine hecmw_time_statistics(hecMESH, time, t_max, t_min, t_avg, t_sd)
Definition: hecmw_solver_misc.f90:269
m_hecmw_solve_error::hecmw_solver_error_diverge_pc
integer(kind=kint), parameter hecmw_solver_error_diverge_pc
Definition: hecmw_solve_error.f90:9
hecmw_solver_gmres::hecmw_solve_gmres
subroutine, public hecmw_solve_gmres(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_GMRES.f90:20
hecmw_solver_las::hecmw_matvec_get_timer
real(kind=kreal) function, public hecmw_matvec_get_timer()
Definition: hecmw_solver_las.f90:241
hecmw_matrix_misc::hecmw_mat_get_nbfgs
integer(kind=kint) function, public hecmw_mat_get_nbfgs(hecMAT)
Definition: hecmw_matrix_misc.f90:380
hecmw_matrix_misc::hecmw_mat_set_flag_mpcmatvec
subroutine, public hecmw_mat_set_flag_mpcmatvec(hecMAT, flag_mpcmatvec)
Definition: hecmw_matrix_misc.f90:637
m_hecmw_solve_error::hecmw_solve_error
subroutine hecmw_solve_error(hecMESH, IFLAG)
Definition: hecmw_solve_error.f90:21
hecmw_matrix_misc
Definition: hecmw_matrix_misc.f90:6
m_hecmw_solve_error
Definition: hecmw_solve_error.f90:6
hecmw_matrix_dump
Definition: hecmw_matrix_dump.f90:6
hecmw_matrix_misc::hecmw_mat_get_filter
real(kind=kreal) function, public hecmw_mat_get_filter(hecMAT)
Definition: hecmw_matrix_misc.f90:742
hecmw_solver_iterative::hecmw_solve_check_zerorhs
logical function hecmw_solve_check_zerorhs(hecMESH, hecMAT)
Definition: hecmw_solver_Iterative.f90:282
hecmw_matrix_misc::hecmw_mat_set_flag_converged
subroutine, public hecmw_mat_set_flag_converged(hecMAT, flag_converged)
Definition: hecmw_matrix_misc.f90:613
hecmw_solver_cg
Definition: hecmw_solver_CG.f90:11
hecmw_matrix_misc::hecmw_mat_get_method
integer(kind=kint) function, public hecmw_mat_get_method(hecMAT)
Definition: hecmw_matrix_misc.f90:293
hecmw_matrix_misc::hecmw_mat_get_thresh
real(kind=kreal) function, public hecmw_mat_get_thresh(hecMAT)
Definition: hecmw_matrix_misc.f90:728
hecmw_solver_iterative::hecmw_solve_check_zerodiag
subroutine hecmw_solve_check_zerodiag(hecMESH, hecMAT)
Definition: hecmw_solver_Iterative.f90:253
hecmw_matrix_misc::hecmw_mat_get_method2
integer(kind=kint) function, public hecmw_mat_get_method2(hecMAT)
Definition: hecmw_matrix_misc.f90:307
hecmw_matrix_misc::hecmw_mat_get_mpc_method
integer(kind=kint) function, public hecmw_mat_get_mpc_method(hecMAT)
Definition: hecmw_matrix_misc.f90:436
hecmw_matrix_dump::hecmw_mat_dump
subroutine, public hecmw_mat_dump(hecMAT, hecMESH)
Definition: hecmw_matrix_dump.f90:32
hecmw_solver_misc
Definition: hecmw_solver_misc.f90:6
hecmw_solver_las::hecmw_matvec_set_async
subroutine, public hecmw_matvec_set_async(hecMAT)
Definition: hecmw_solver_las.f90:74
hecmw_solver_gpbicg
Definition: hecmw_solver_GPBiCG.f90:10
hecmw_precond
Definition: hecmw_precond.f90:6
hecmw_matrix_misc::hecmw_mat_get_nset
integer(kind=kint) function, public hecmw_mat_get_nset(hecMAT)
Definition: hecmw_matrix_misc.f90:335
hecmw_solver_gmresren::hecmw_solve_gmresren
subroutine, public hecmw_solve_gmresren(hecMESH, hecMAT, ITER, RESID, error, Tset, Tsol, Tcomm)
Definition: hecmw_solver_GMRESREN.f90:20
hecmw_matrix_misc::hecmw_mat_get_sigma
real(kind=kreal) function, public hecmw_mat_get_sigma(hecMAT)
Definition: hecmw_matrix_misc.f90:714
hecmw_precond::hecmw_precond_clear_timer
subroutine, public hecmw_precond_clear_timer
Definition: hecmw_precond.f90:151
m_hecmw_solve_error::hecmw_solver_error_zero_rhs
integer(kind=kint), parameter hecmw_solver_error_zero_rhs
Definition: hecmw_solve_error.f90:9
m_hecmw_solve_error::hecmw_solver_error_diverge_mat
integer(kind=kint), parameter hecmw_solver_error_diverge_mat
Definition: hecmw_solve_error.f90:9
hecmw_util::hecmwst_matrix
Definition: hecmw_util_f.F90:444