 |
FrontISTR
5.7.0
Large-scale structural analysis program with finit element method
|
Go to the documentation of this file.
101 integer,
parameter :: IDX_I_ITER = 1
102 integer,
parameter :: IDX_I_METHOD = 2
103 integer,
parameter :: IDX_I_PRECOND = 3
104 integer,
parameter :: IDX_I_NSET = 4
105 integer,
parameter :: IDX_I_ITERPREMAX = 5
106 integer,
parameter :: IDX_I_NREST = 6
107 integer,
parameter :: IDX_I_NBFGS = 60
108 integer,
parameter :: IDX_I_SCALING = 7
109 integer,
parameter :: IDX_I_PENALIZED = 11
110 integer,
parameter :: IDX_I_PENALIZED_B = 12
111 integer,
parameter :: IDX_I_MPC_METHOD = 13
112 integer,
parameter :: IDX_I_ESTCOND = 14
113 integer,
parameter :: IDX_I_CONTACT_ELIM = 15
114 integer,
parameter :: IDX_I_ITERLOG = 21
115 integer,
parameter :: IDX_I_TIMELOG = 22
116 integer,
parameter :: IDX_I_DUMP = 31
117 integer,
parameter :: IDX_I_DUMP_EXIT = 32
118 integer,
parameter :: IDX_I_USEJAD = 33
119 integer,
parameter :: IDX_I_NCOLOR_IN = 34
120 integer,
parameter :: IDX_I_MAXRECYCLE_PRECOND = 35
121 integer,
parameter :: IDX_I_NRECYCLE_PRECOND = 96
122 integer,
parameter :: IDX_I_FLAG_NUMFACT = 97
123 integer,
parameter :: IDX_I_FLAG_SYMBFACT = 98
124 integer,
parameter :: IDX_I_SOLVER_TYPE = 99
126 integer,
parameter :: IDX_I_METHOD2 = 8
127 integer,
parameter :: IDX_I_FLAG_CONVERGED = 81
128 integer,
parameter :: IDX_I_FLAG_DIVERGED = 82
129 integer,
parameter :: IDX_I_FLAG_MPCMATVEC = 83
131 integer,
parameter :: IDX_I_SOLVER_OPT_S = 41
132 integer,
parameter :: IDX_I_SOLVER_OPT_E = 50
134 integer,
parameter :: IDX_R_RESID = 1
135 integer,
parameter :: IDX_R_SIGMA_DIAG = 2
136 integer,
parameter :: IDX_R_SIGMA = 3
137 integer,
parameter :: IDX_R_THRESH = 4
138 integer,
parameter :: IDX_R_FILTER = 5
139 integer,
parameter :: IDX_R_PENALTY = 11
140 integer,
parameter :: IDX_R_PENALTY_ALPHA = 12
205 if (
associated(hecmat%D))
deallocate(hecmat%D)
206 if (
associated(hecmat%B))
deallocate(hecmat%B)
207 if (
associated(hecmat%X))
deallocate(hecmat%X)
208 if (
associated(hecmat%AL))
deallocate(hecmat%AL)
209 if (
associated(hecmat%AU))
deallocate(hecmat%AU)
210 if (
associated(hecmat%indexL))
deallocate(hecmat%indexL)
211 if (
associated(hecmat%indexU))
deallocate(hecmat%indexU)
212 if (
associated(hecmat%itemL))
deallocate(hecmat%itemL)
213 if (
associated(hecmat%itemU))
deallocate(hecmat%itemU)
214 if (
associated(hecmat%ALU))
deallocate(hecmat%ALU)
220 hecmat%N = hecmatorg%N
221 hecmat%NP = hecmatorg%NP
222 hecmat%NDOF = hecmatorg%NDOF
223 hecmat%NPL = hecmatorg%NPL
224 hecmat%NPU = hecmatorg%NPU
225 allocate(hecmat%indexL(0:
size(hecmatorg%indexL)-1))
226 allocate(hecmat%indexU(0:
size(hecmatorg%indexU)-1))
227 allocate(hecmat%itemL (
size(hecmatorg%itemL )))
228 allocate(hecmat%itemU (
size(hecmatorg%itemU )))
229 allocate(hecmat%D (
size(hecmatorg%D )))
230 allocate(hecmat%AL(
size(hecmatorg%AL)))
231 allocate(hecmat%AU(
size(hecmatorg%AU)))
232 allocate(hecmat%B (
size(hecmatorg%B )))
233 allocate(hecmat%X (
size(hecmatorg%X )))
234 hecmat%indexL = hecmatorg%indexL
235 hecmat%indexU = hecmatorg%indexU
236 hecmat%itemL = hecmatorg%itemL
237 hecmat%itemU = hecmatorg%itemU
248 integer(kind=kint) :: ierr
249 integer(kind=kint) :: i
251 if (hecmat%N /= hecmatorg%N) ierr = 1
252 if (hecmat%NP /= hecmatorg%NP) ierr = 1
253 if (hecmat%NDOF /= hecmatorg%NDOF) ierr = 1
254 if (hecmat%NPL /= hecmatorg%NPL) ierr = 1
255 if (hecmat%NPU /= hecmatorg%NPU) ierr = 1
257 write(0,*)
'ERROR: hecmw_mat_copy_val: different profile'
260 do i = 1,
size(hecmat%D)
261 hecmat%D(i) = hecmatorg%D(i)
263 do i = 1,
size(hecmat%AL)
264 hecmat%AL(i) = hecmatorg%AL(i)
266 do i = 1,
size(hecmat%AU)
267 hecmat%AU(i) = hecmatorg%AU(i)
273 integer(kind=kint) :: iter
275 hecmat%Iarray(idx_i_iter) = iter
287 integer(kind=kint) :: method
289 hecmat%Iarray(idx_i_method) = method
301 integer(kind=kint) :: method2
303 hecmat%Iarray(idx_i_method2) = method2
315 integer(kind=kint) :: precond
317 hecmat%Iarray(idx_i_precond) = precond
329 integer(kind=kint) :: nset
331 hecmat%Iarray(idx_i_nset) = nset
343 integer(kind=kint) :: iterpremax
345 if (iterpremax.lt.0) iterpremax= 0
346 if (iterpremax.gt.4) iterpremax= 4
348 hecmat%Iarray(idx_i_iterpremax) = iterpremax
360 integer(kind=kint) :: nrest
362 hecmat%Iarray(idx_i_nrest) = nrest
374 integer(kind=kint) :: nbfgs
376 hecmat%Iarray(idx_i_nbfgs) = nbfgs
388 integer(kind=kint) :: scaling
390 hecmat%Iarray(idx_i_scaling) = scaling
402 integer(kind=kint) :: penalized
404 hecmat%Iarray(idx_i_penalized) = penalized
416 integer(kind=kint) :: penalized_b
418 hecmat%Iarray(idx_i_penalized_b) = penalized_b
430 integer(kind=kint) :: mpc_method
432 hecmat%Iarray(idx_i_mpc_method) = mpc_method
450 integer(kind=kint) :: estcond
451 hecmat%Iarray(idx_i_estcond) = estcond
462 integer(kind=kint) :: contact_elim
463 hecmat%Iarray(idx_i_contact_elim) = contact_elim
468 integer(kind=kint) :: iterlog
470 hecmat%Iarray(idx_i_iterlog) = iterlog
482 integer(kind=kint) :: timelog
484 hecmat%Iarray(idx_i_timelog) = timelog
502 integer(kind=kint) :: dump_type
503 hecmat%Iarray(idx_i_dump) = dump_type
514 integer(kind=kint) :: dump_exit
515 hecmat%Iarray(idx_i_dump_exit) = dump_exit
526 integer(kind=kint) :: usejad
527 hecmat%Iarray(idx_i_usejad) = usejad
538 integer(kind=kint) :: ncolor_in
539 hecmat%Iarray(idx_i_ncolor_in) = ncolor_in
550 integer(kind=kint) :: maxrecycle_precond
551 if (maxrecycle_precond > 100) maxrecycle_precond = 100
552 hecmat%Iarray(idx_i_maxrecycle_precond) = maxrecycle_precond
563 hecmat%Iarray(idx_i_nrecycle_precond) = 0
568 hecmat%Iarray(idx_i_nrecycle_precond) = hecmat%Iarray(idx_i_nrecycle_precond) + 1
579 integer(kind=kint) :: flag_numfact
580 hecmat%Iarray(idx_i_flag_numfact) = flag_numfact
591 integer(kind=kint) :: flag_symbfact
592 hecmat%Iarray(idx_i_flag_symbfact) = flag_symbfact
597 hecmat%Iarray(idx_i_flag_symbfact) = 0
608 integer(kind=kint) :: solver_type
609 hecmat%Iarray(idx_i_solver_type) = solver_type
614 integer(kind=kint) :: flag_converged
615 hecmat%Iarray(idx_i_flag_converged) = flag_converged
626 integer(kind=kint) :: flag_diverged
627 hecmat%Iarray(idx_i_flag_diverged) = flag_diverged
638 integer(kind=kint) :: flag_mpcmatvec
639 hecmat%Iarray(idx_i_flag_mpcmatvec) = flag_mpcmatvec
650 integer(kind=kint) :: solver_opt(:)
651 integer(kind=kint) :: nopt
652 nopt = idx_i_solver_opt_e - idx_i_solver_opt_s + 1
653 hecmat%Iarray(idx_i_solver_opt_s:idx_i_solver_opt_e) = solver_opt(1:nopt)
658 integer(kind=kint) :: solver_opt(:)
659 integer(kind=kint) :: nopt
660 nopt = idx_i_solver_opt_e - idx_i_solver_opt_s + 1
661 solver_opt(1:nopt) = hecmat%Iarray(idx_i_solver_opt_s:idx_i_solver_opt_e)
666 real(kind=
kreal) :: resid
668 hecmat%Rarray(idx_r_resid) = resid
680 real(kind=
kreal) :: sigma_diag
682 if( sigma_diag < 0.d0 )
then
683 hecmat%Rarray(idx_r_sigma_diag) = -1.d0
684 elseif( sigma_diag < 1.d0 )
then
685 hecmat%Rarray(idx_r_sigma_diag) = 1.d0
686 elseif( sigma_diag > 2.d0 )
then
687 hecmat%Rarray(idx_r_sigma_diag) = 2.d0
689 hecmat%Rarray(idx_r_sigma_diag) = sigma_diag
702 real(kind=
kreal) :: sigma
704 if (sigma < 0.d0)
then
705 hecmat%Rarray(idx_r_sigma) = 0.d0
706 elseif (sigma > 1.d0)
then
707 hecmat%Rarray(idx_r_sigma) = 1.d0
709 hecmat%Rarray(idx_r_sigma) = sigma
722 real(kind=
kreal) :: thresh
724 hecmat%Rarray(idx_r_thresh) = thresh
736 real(kind=
kreal) :: filter
738 hecmat%Rarray(idx_r_filter) = filter
750 real(kind=
kreal) :: penalty
752 hecmat%Rarray(idx_r_penalty) = penalty
764 real(kind=
kreal) :: alpha
766 hecmat%Rarray(idx_r_penalty_alpha) = alpha
780 integer(kind=kint) :: ndiag, i
783 ndiag = hecmat%NDOF**2 * hecmat%NP
792 integer(kind=kint) :: nrecycle, maxrecycle
793 if (hecmat%Iarray(idx_i_flag_symbfact) >= 1)
then
794 hecmat%Iarray(idx_i_flag_numfact)=1
796 elseif (hecmat%Iarray(idx_i_flag_numfact) > 1)
then
798 hecmat%Iarray(idx_i_flag_numfact) = 1
799 elseif (hecmat%Iarray(idx_i_flag_numfact) == 1)
then
802 if ( nrecycle < maxrecycle )
then
803 hecmat%Iarray(idx_i_flag_numfact) = 0
819 if (
associated(src%D)) dest%D => src%D
820 if (
associated(src%B)) dest%B => src%B
821 if (
associated(src%X)) dest%X => src%X
822 if (
associated(src%ALU)) dest%ALU => src%ALU
823 if (
associated(src%AL)) dest%AL => src%AL
824 if (
associated(src%AU)) dest%AU => src%AU
825 if (
associated(src%indexL)) dest%indexL => src%indexL
826 if (
associated(src%indexU)) dest%indexU => src%indexU
827 if (
associated(src%itemL)) dest%itemL => src%itemL
828 if (
associated(src%itemU)) dest%itemU => src%itemU
829 dest%Iarray(:) = src%Iarray(:)
830 dest%Rarray(:) = src%Rarray(:)
subroutine, public hecmw_mat_reset_nrecycle_precond(hecMAT)
integer(kind=kint), parameter hecmw_max
integer(kind=kint) function, public hecmw_mat_get_flag_numfact(hecMAT)
subroutine, public hecmw_mat_init(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_solver_type(hecMAT)
subroutine, public hecmw_mat_set_iterpremax(hecMAT, iterpremax)
subroutine, public hecmw_mat_set_usejad(hecMAT, usejad)
real(kind=kreal) function, public hecmw_mat_get_penalty_alpha(hecMAT)
subroutine, public hecmw_mat_set_sigma_diag(hecMAT, sigma_diag)
subroutine, public hecmw_mat_set_iter(hecMAT, iter)
subroutine, public hecmw_mat_set_maxrecycle_precond(hecMAT, maxrecycle_precond)
integer(kind=kint) function, public hecmw_mat_get_iterpremax(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_usejad(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_flag_mpcmatvec(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_maxrecycle_precond(hecMAT)
subroutine, public hecmw_mat_clear_b(hecMAT)
subroutine, public hecmw_mat_set_ncolor_in(hecMAT, ncolor_in)
subroutine, public hecmw_mat_set_filter(hecMAT, filter)
subroutine, public hecmw_mat_set_penalty(hecMAT, penalty)
integer(kind=kint) function, public hecmw_mat_get_precond(hecMAT)
subroutine, public hecmw_mat_get_solver_opt(hecMAT, solver_opt)
subroutine, public hecmw_mat_set_nrest(hecMAT, nrest)
real(kind=kreal) function, public hecmw_mat_get_penalty(hecMAT)
subroutine, public hecmw_mat_set_contact_elim(hecMAT, contact_elim)
subroutine, public hecmw_mat_set_scaling(hecMAT, scaling)
real(kind=kreal) function, public hecmw_mat_diag_max(hecMAT, hecMESH)
subroutine, public hecmw_mat_set_thresh(hecMAT, thresh)
integer(kind=kint) function, public hecmw_mat_get_iter(hecMAT)
subroutine, public hecmw_mat_set_method2(hecMAT, method2)
subroutine, public hecmw_mat_set_mpc_method(hecMAT, mpc_method)
integer(kind=kint) function, public hecmw_mat_get_timelog(hecMAT)
subroutine, public hecmw_mat_clear_flag_symbfact(hecMAT)
subroutine, public hecmw_mat_copy_val(hecMATorg, hecMAT)
integer(kind=kint) function, public hecmw_mat_get_nrest(hecMAT)
subroutine, public hecmw_mat_set_penalty_alpha(hecMAT, alpha)
integer(kind=kint) function, public hecmw_mat_get_dump(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_ncolor_in(hecMAT)
real(kind=kreal) function, public hecmw_mat_get_resid(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_estcond(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_nrecycle_precond(hecMAT)
subroutine, public hecmw_mat_set_penalized(hecMAT, penalized)
subroutine, public hecmw_mat_set_dump_exit(hecMAT, dump_exit)
subroutine hecmw_allreduce_r1(hecMESH, s, ntag)
subroutine, public hecmw_mat_set_flag_diverged(hecMAT, flag_diverged)
integer(kind=kint) function, public hecmw_mat_get_penalized(hecMAT)
subroutine, public hecmw_mat_clear(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_flag_diverged(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_iterlog(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_flag_converged(hecMAT)
subroutine, public hecmw_mat_set_timelog(hecMAT, timelog)
integer(kind=kint) function, public hecmw_mat_get_flag_symbfact(hecMAT)
integer(kind=4), parameter kreal
real(kind=kreal) function, public hecmw_mat_get_sigma_diag(hecMAT)
subroutine, public hecmw_mat_recycle_precond_setting(hecMAT)
subroutine, public hecmw_mat_set_penalized_b(hecMAT, penalized_b)
subroutine, public hecmw_mat_set_resid(hecMAT, resid)
subroutine, public hecmw_mat_set_dump(hecMAT, dump_type)
integer(kind=kint) function, public hecmw_mat_get_nbfgs(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_penalized_b(hecMAT)
subroutine, public hecmw_mat_set_iterlog(hecMAT, iterlog)
subroutine, public hecmw_mat_set_precond(hecMAT, precond)
subroutine, public hecmw_mat_set_flag_mpcmatvec(hecMAT, flag_mpcmatvec)
subroutine hecmw_nullify_matrix(P)
subroutine, public hecmw_mat_set_solver_opt(hecMAT, solver_opt)
integer(kind=kint) function, public hecmw_mat_get_contact_elim(hecMAT)
real(kind=kreal) function, public hecmw_mat_get_filter(hecMAT)
subroutine, public hecmw_mat_set_flag_converged(hecMAT, flag_converged)
integer(kind=kint) function, public hecmw_mat_get_method(hecMAT)
subroutine, public hecmw_mat_substitute(dest, src)
real(kind=kreal) function, public hecmw_mat_get_thresh(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_dump_exit(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_method2(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_mpc_method(hecMAT)
subroutine, public hecmw_mat_set_nset(hecMAT, nset)
integer(kind=kint) function, public hecmw_mat_get_scaling(hecMAT)
subroutine, public hecmw_mat_set_estcond(hecMAT, estcond)
subroutine, public hecmw_mat_finalize(hecMAT)
subroutine, public hecmw_mat_set_flag_symbfact(hecMAT, flag_symbfact)
subroutine, public hecmw_mat_set_sigma(hecMAT, sigma)
subroutine, public hecmw_mat_copy_profile(hecMATorg, hecMAT)
subroutine, public hecmw_mat_incr_nrecycle_precond(hecMAT)
integer(kind=kint) function, public hecmw_mat_get_nset(hecMAT)
subroutine, public hecmw_mat_set_flag_numfact(hecMAT, flag_numfact)
subroutine, public hecmw_mat_set_nbfgs(hecMAT, nbfgs)
real(kind=kreal) function, public hecmw_mat_get_sigma(hecMAT)
subroutine, public hecmw_mat_set_method(hecMAT, method)
subroutine, public hecmw_mat_set_solver_type(hecMAT, solver_type)