6 SUBROUTINE ad_sqlq (innLoop, a, ad_a, tau, ad_tau, y, ad_y)
28 integer,
intent(in) :: innLoop
30 real(r8),
dimension(innLoop,innLoop),
intent(inout) :: a, ad_a
31 real(r8),
dimension(innLoop),
intent(inout) :: tau, ad_tau
32 real(r8),
dimension(innLoop),
intent(inout) :: y, ad_y
36 integer :: i, j, ii, jj, m, kk, iflag
38 real(r8) :: znorm, zbeta, zaii, ztemp, zbetas
39 real(r8) :: adfac, ad_znorm, ad_zbeta, ad_zaii, ad_ztemp
41 real(r8),
dimension(innLoop,innLoop) :: as
42 real(r8),
dimension(innLoop) :: arow
68 ad_zaii=ad_zaii+ad_a(ii,ii)
82 call reclqbs (iflag, kk, m, a, tau, y)
84 IF (tau(ii).ne.0.0_r8)
THEN
87 ztemp=-tau(ii)*a(ii,j+jj)
92 ad_ztemp=ad_ztemp+y(i)*ad_a(ii+i,j+jj)
93 ad_y(i)=ad_y(i)+ztemp*ad_a(ii+i,j+jj)
97 ad_tau(ii)=ad_tau(ii)-a(ii,j+jj)*ad_ztemp
98 ad_a(ii,j+jj)=ad_a(ii,j+jj)-tau(ii)*ad_ztemp
108 ad_ztemp=ad_ztemp+a(ii+i,j+jj)*ad_y(i)
109 ad_a(ii+i,j+jj)=ad_a(ii+i,j+jj)+ztemp*ad_y(i)
113 ad_a(ii,j+jj)=ad_a(ii,j+jj)+ad_ztemp
127 ad_a(ii,ii)=ad_a(ii,ii)+ad_zaii
131 ad_zbeta=ad_zbeta+ad_a(ii,ii)
145 call reclqbs (iflag, kk, m, a, tau, y)
149 znorm=znorm+a(ii,j)*a(ii,j)
152 zbeta=sqrt(znorm*znorm+a(ii,ii)*a(ii,ii))
154 zbeta=-sign(zbeta,a(ii,ii))
155 tau(ii)=(zbeta-a(ii,ii))/zbeta
159 a(ii,j)=a(ii,j)/(a(ii,ii)-zbeta)
163 adfac=ad_a(ii,j)/(a(ii,ii)-zbeta)
164 ad_zbeta=ad_zbeta+a(ii,j)*adfac
165 ad_a(ii,ii)=ad_a(ii,ii)-a(ii,j)*adfac
170 adfac=ad_tau(ii)/zbeta
171 ad_zbeta=ad_zbeta+adfac-tau(ii)*adfac
172 ad_a(ii,ii)=ad_a(ii,ii)-adfac
176 ad_zbeta=-sign(1.0_r8,zbetas)*sign(1.0_r8,a(ii,ii))*ad_zbeta
177 IF (zbetas.NE.0.0_r8)
THEN
180 adfac=ad_zbeta/zbetas
181 ad_znorm=ad_znorm+znorm*adfac
182 ad_a(ii,ii)=ad_a(ii,ii)+a(ii,ii)*adfac
189 IF (znorm.NE.0.0_r8)
THEN
192 ad_znorm=0.5_r8*ad_znorm/znorm
201 ad_a(ii,j)=ad_a(ii,j)+2.0_r8*arow(j)*ad_znorm
216 SUBROUTINE reclqbs (iflag, kk, innLoop, a, tau, y)
231 integer,
intent(in) :: innLoop, iflag, kk
232 real(r8),
dimension(innLoop,innLoop),
intent(inout) :: a
233 real(r8),
dimension(innLoop),
intent(inout) :: tau, y
237 integer :: i, j, ii, jj
238 real(r8) :: znorm, zbeta, zaii, ztemp
254 znorm=znorm+a(ii,j)*a(ii,j)
257 zbeta=sqrt(znorm*znorm+a(ii,ii)*a(ii,ii))
258 zbeta=-sign(zbeta,a(ii,ii))
259 tau(ii)=(zbeta-a(ii,ii))/zbeta
261 IF ((iflag.eq.2).and.(ii.eq.kk))
RETURN
264 a(ii,j)=a(ii,j)/(a(ii,ii)-zbeta)
273 IF (tau(ii).ne.0.0_r8)
THEN
281 y(i)=y(i)+ztemp*a(ii+i,j+jj)
285 IF ((iflag.eq.1).and.(ii.eq.kk))
RETURN
288 ztemp=-tau(ii)*a(ii,j+jj)
290 a(ii+i,j+jj)=a(ii+i,j+jj)+y(i)*ztemp