Base linear accelerator subroutine that scales and reorders the system of equations, if necessary, updates the preconditioner, and calls the appropriate linear accelerator.
624 CLASS(ImsLinearDataType),
INTENT(INOUT) :: this
625 integer(I4B),
INTENT(INOUT) :: ICNVG
626 integer(I4B),
INTENT(IN) :: KSTP
627 integer(I4B),
INTENT(IN) :: KITER
628 integer(I4B),
INTENT(INOUT) :: IN_ITER
630 integer(I4B),
INTENT(IN) :: NCONV
631 integer(I4B),
INTENT(IN) :: CONVNMOD
632 integer(I4B),
DIMENSION(CONVNMOD + 1),
INTENT(INOUT) :: CONVMODSTART
633 character(len=31),
DIMENSION(NCONV),
INTENT(INOUT) :: CACCEL
634 type(ConvergenceSummaryType),
pointer,
intent(in) :: summary
637 integer(I4B) :: innerit
639 integer(I4B) :: itmax
643 this%EPFACT = ims_base_epfact(this%ICNVGOPT, kstp)
646 IF (this%ISCL .NE. 0)
THEN
647 CALL ims_base_scale(0, this%ISCL, &
648 this%NEQ, this%NJA, this%IA, this%JA, &
649 this%AMAT, this%X, this%RHS, &
650 this%DSCALE, this%DSCALE2)
654 IF (this%IORD /= 0)
THEN
655 CALL dperm(this%NEQ, this%AMAT, this%JA, this%IA, &
656 this%ARO, this%JARO, this%IARO, &
657 this%LORDER, this%ID, 1)
658 CALL dvperm(this%NEQ, this%X, this%LORDER)
659 CALL dvperm(this%NEQ, this%RHS, this%LORDER)
660 this%IA0 => this%IARO
661 this%JA0 => this%JARO
670 CALL ims_base_pcu(this%iout, this%NJA, this%NEQ, this%NIAPC, this%NJAPC, &
671 this%IPC, this%RELAX, this%A0, this%IA0, this%JA0, &
672 this%APC, this%IAPC, this%JAPC, this%IW, this%W, &
673 this%LEVEL, this%DROPTOL, this%NJLU, this%NJW, &
674 this%NWLU, this%JLU, this%JW, this%WLU)
691 call ims_base_residual(this%NEQ, this%NJA, this%X, this%RHS, this%D, &
692 this%A0, this%IA0, this%JA0)
693 this%L2NORM0 =
dnrm2(this%NEQ, this%D, 1)
697 IF (this%L2NORM0 == dzero)
THEN
703 IF (this%ILINMETH == 1)
THEN
704 CALL ims_base_cg(icnvg, itmax, innerit, &
705 this%NEQ, this%NJA, this%NIAPC, this%NJAPC, &
706 this%IPC, this%ICNVGOPT, this%NORTH, &
707 this%DVCLOSE, this%RCLOSE, this%L2NORM0, &
708 this%EPFACT, this%IA0, this%JA0, this%A0, &
709 this%IAPC, this%JAPC, this%APC, &
710 this%X, this%RHS, this%D, this%P, this%Q, this%Z, &
711 this%NJLU, this%IW, this%JLU, &
712 nconv, convnmod, convmodstart, &
716 ELSE IF (this%ILINMETH == 2)
THEN
717 CALL ims_base_bcgs(icnvg, itmax, innerit, &
718 this%NEQ, this%NJA, this%NIAPC, this%NJAPC, &
719 this%IPC, this%ICNVGOPT, this%NORTH, &
720 this%ISCL, this%DSCALE, &
721 this%DVCLOSE, this%RCLOSE, this%L2NORM0, &
722 this%EPFACT, this%IA0, this%JA0, this%A0, &
723 this%IAPC, this%JAPC, this%APC, &
724 this%X, this%RHS, this%D, this%P, this%Q, &
725 this%T, this%V, this%DHAT, this%PHAT, this%QHAT, &
726 this%NJLU, this%IW, this%JLU, &
727 nconv, convnmod, convmodstart, &
732 IF (this%IORD /= 0)
THEN
733 CALL dperm(this%NEQ, this%A0, this%JA0, this%IA0, &
734 this%AMAT, this%JA, this%IA, &
735 this%IORDER, this%ID, 1)
736 CALL dvperm(this%NEQ, this%X, this%IORDER)
737 CALL dvperm(this%NEQ, this%RHS, this%IORDER)
741 IF (this%ISCL .NE. 0)
THEN
742 CALL ims_base_scale(1, this%ISCL, &
743 this%NEQ, this%NJA, this%IA, this%JA, &
744 this%AMAT, this%X, this%RHS, &
745 this%DSCALE, this%DSCALE2)
real(kind=8) function dnrm2(n, x, incx)
This module contains simulation methods.
subroutine dvperm(n, x, perm)
subroutine dperm(nrow, a, ja, ia, ao, jao, iao, perm, qperm, job)