@@ -22,9 +22,7 @@ MODULE KPP_ROOT_Integrator
2222 USE KPP_ROOT_Global
2323 USE KPP_ROOT_Parameters
2424 USE KPP_ROOT_JacobianSP, ONLY : LU_DIAG
25- USE KPP_ROOT_LinearAlgebra, ONLY : KppDecomp, KppSolve, Set2zero, &
26- WLAMCH, WCOPY, WAXPY, &
27- WSCAL, WADD
25+ USE KPP_ROOT_LinearAlgebra, ONLY : KppDecomp, KppSolve, WLAMCH
2826
2927 IMPLICIT NONE
3028 PUBLIC
@@ -591,35 +589,35 @@ SUBROUTINE SDIRK_Integrator( N,Tinitial,Tfinal,Y,Ierr )
591589! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
592590
593591! ~~~> Starting values for Newton iterations
594- CALL Set2zero(N,Z(1 ,istage))
592+ G(1 :N) = 0.0_dp
593+ Z(1 ,istage) = 0.0_dp
595594
596- ! ~~~> Prepare the loop-independent part of the right-hand side
597- CALL Set2zero(N,G)
595+ ! ~~~> Prepare the loop-independent part of the right-hand side
598596 IF (istage > 1 ) THEN
599- DO j = 1 , istage-1
600- ! Gj(:) = sum_j Theta(i,j)*Zj(:) = H * sum_j A(i,j)*Fun(Zj)
601- CALL WAXPY(N, rkTheta(istage,j), Z(1 ,j), 1 ,G, 1 )
602- ! Zi(:) = sum_j Alpha(i,j)*Zj(:)
603- IF (StartNewton) THEN
604- CALL WAXPY(N, rkAlpha(istage,j), Z(1 ,j), 1 ,Z( 1 ,istage), 1 )
605- END IF
606- END DO
597+ DO j = 1 , istage-1
598+ ! Gj(:) = sum_j Theta(i,j)*Zj(:) = H * sum_j A(i,j)*Fun(Zj)
599+ G( 1 :N) = G( 1 :N) + rkTheta(istage,j) * Z(1 :N,j )
600+ ! Zi(:) = sum_j Alpha(i,j)*Zj(:)
601+ IF (StartNewton) THEN
602+ Z( 1 :N,istage) = Z( 1 :N,istage) + rkAlpha(istage,j) * Z(1 :N,j )
603+ END IF
604+ END DO
607605 END IF
608606
609607 ! ~~~> Initializations for Newton iteration
610608 NewtonDone = .FALSE.
611609 Fac = 0.5d0 ! Step reduction factor if too many iterations
612610
613- NewtonLoop:DO NewtonIter = 1 , NewtonMaxit
611+ NewtonLoop: DO NewtonIter = 1 , NewtonMaxit
614612
615- ! ~~~> Prepare the loop-dependent part of the right-hand side
616- CALL WADD(N,Y, Z(1 ,istage),TMP) ! TMP <- Y + Zi
617- CALL FUN_CHEM(T+ rkC(istage)* H,TMP,RHS) ! RHS <- Fun(Y+Zi)
618- ISTATUS(Nfun) = ISTATUS(Nfun) + 1
619- ! RHS(1:N) = G(1:N) - Z(1:N,istage) + (H*rkGamma)*RHS(1:N)
620- CALL WSCAL(N, H * rkGamma, RHS, 1 )
621- CALL WAXPY (N, - ONE, Z(1 ,istage), 1 , RHS, 1 )
622- CALL WAXPY (N, ONE, G, 1 , RHS, 1 )
613+ ! ~~~> Prepare the loop-dependent part of the right-hand side
614+ TMP( 1 :N) = Y( 1 :N) + Z(1 :N ,istage) ! TMP <- Y + Zi
615+ CALL FUN_CHEM(T+ rkC(istage)* H,TMP,RHS) ! RHS <- Fun(Y+Zi)
616+ ISTATUS(Nfun) = ISTATUS(Nfun) + 1
617+ ! RHS(1:N) = G(1:N) - Z(1:N,istage) + (H*rkGamma)*RHS(1:N)
618+ RHS( 1 :N) = RHS( 1 :N) * (H * rkGamma )
619+ RHS( 1 :N) = RHS( 1 :N) - Z(1 :N ,istage)
620+ RHS( 1 :N) = RHS( 1 :N) + G( 1 :N )
623621
624622! ~~~> Solve the linear system
625623 CALL SDIRK_Solve ( H, N, E, IP, IER, RHS )
@@ -648,7 +646,7 @@ SUBROUTINE SDIRK_Integrator( N,Tinitial,Tfinal,Y,Ierr )
648646 END IF
649647 NewtonIncrementOld = NewtonIncrement
650648 ! Update solution: Z(:) <-- Z(:)+RHS(:)
651- CALL WAXPY(N,ONE,RHS, 1 , Z(1 ,istage), 1 )
649+ Z( 1 :N,istage) = Z(1 :N ,istage) + RHS( 1 :N )
652650
653651 ! Check error in Newton iterations
654652 NewtonDone = (NewtonRate* NewtonIncrement <= NewtonTol)
@@ -675,9 +673,9 @@ SUBROUTINE SDIRK_Integrator( N,Tinitial,Tfinal,Y,Ierr )
675673 ISTATUS(Nstp) = ISTATUS(Nstp) + 1
676674
677675 IF (sdMethod /= BEL) THEN ! All methods but Backward Euler
678- CALL Set2zero(N,TMP)
676+ TMP( 1 :N) = 0.0_dp
679677 DO i = 1 ,rkS
680- IF (rkE(i)/= ZERO) CALL WAXPY(N, rkE(i), Z(1 ,i), 1 ,TMP, 1 )
678+ IF (rkE(i)/= ZERO) TMP( 1 :N) = TMP( 1 :N) + rkE(i) * Z(1 :N,i )
681679 END DO
682680
683681 CALL SDIRK_Solve( H, N, E, IP, IER, TMP )
@@ -704,7 +702,7 @@ SUBROUTINE SDIRK_Integrator( N,Tinitial,Tfinal,Y,Ierr )
704702 T = T + H
705703 ! Y(:) <-- Y(:) + Sum_j rkD(j)*Z_j(:)
706704 DO i = 1 ,rkS
707- IF (rkD(i)/= ZERO) CALL WAXPY(N, rkD(i), Z(1 ,i), 1 ,Y, 1 )
705+ IF (rkD(i)/= ZERO) Y( 1 :N) = Y( 1 :N) + rkD(i) * Z(1 :N,i )
708706 END DO
709707
710708! ~~~> Update scaling coefficients
@@ -921,7 +919,7 @@ SUBROUTINE SDIRK_Solve ( H, N, E, IP, ISING, RHS )
921919 KPP_REAL :: HGammaInv
922920
923921 HGammaInv = ONE/ (H* rkGamma)
924- CALL WSCAL(N,HGammaInv, RHS, 1 )
922+ RHS( 1 :N) = RHS( 1 :N) * HGammaInv
925923#ifdef FULL_ALGEBRA
926924 CALL DGETRS( ' N' , N, 1 , E, N, IP, RHS, N, ISING )
927925#else
@@ -1069,13 +1067,15 @@ SUBROUTINE Sdirk4a()
10691067! rkD(4,3)= -117.6778956422581d0
10701068! rkD(4,4)= 134.3962081008550d0
10711069! rkD(4,5)= 8.678995715052762d0
1072- !
1073- ! DO i=1,4 ! CONTi <-- Sum_j rkD(i,j)*Zj
1074- ! CALL Set2zero(N,CONT(1,i))
1075- ! DO j = 1,rkS
1076- ! CALL WAXPY(N,rkD(i,j),Z(1,j),1,CONT(1,i),1)
1077- ! END DO
1078- ! END DO
1070+ !
1071+ ! DO i=1,4 ! CONTi <-- Sum_j rkD(i,j)*Zj
1072+ ! CONT(1:N,i) = 0.0_dp
1073+ ! DO j = 1,rkS
1074+ ! IF (rkD(i,j) /= 0.0_dp) THEN
1075+ ! CONT(1:N,i) = CONT(1:N,i) + rkD(i,j) * Z(1:N,j)
1076+ ! END IF
1077+ ! END DO
1078+ ! END DO
10791079
10801080 rkELO = 4.0d0
10811081
0 commit comments