1 #if defined(NECSX) && defined(REALHUGE) 18 REAL(8),
POINTER,
DIMENSION(:) :: h, l
23 SUBROUTINE qxmy (V1,V2,N,V3)
29 INTEGER(KIND=JPIM),
INTENT(IN) :: N
30 REAL(KIND=JPRH),
DIMENSION(N),
INTENT(IN) :: V1, V2
31 REAL(KIND=JPRH),
DIMENSION(N),
INTENT(OUT) :: V3
32 type(
quadv),
SAVE :: qv1, qv2, qv3
35 INTEGER,
SAVE :: NMAX = -1
37 IF (first .OR. n>nmax)
THEN 38 IF(.NOT.first)
DEALLOCATE (qv1%H,qv1%L,qv2%H,qv2%L,qv3%H,qv3%L)
41 ALLOCATE ( qv1%H(nmax) , qv1%L(nmax) )
42 ALLOCATE ( qv2%H(nmax) , qv2%L(nmax) )
43 ALLOCATE ( qv3%H(nmax) , qv3%L(nmax) )
54 CALL qvmulqv(qv1%H(1),qv1%L(1),qv2%H(1),qv2%L(1),qv3%H(1),qv3%L(1),n)
62 SUBROUTINE qaxpy (ALPHA,V1,V2,N)
68 INTEGER(KIND=JPIM),
INTENT(IN) :: N
69 REAL(KIND=JPRH),
INTENT(IN) :: ALPHA
70 REAL(KIND=JPRH),
DIMENSION(N),
INTENT(IN) :: V1
71 REAL(KIND=JPRH),
DIMENSION(N),
INTENT(INOUT) :: V2
72 type(
quadv),
SAVE :: qalpha
73 type(
quadv),
SAVE :: qv1, qv2, qvtmp
76 INTEGER,
SAVE :: NMAX = -1
78 IF (first .OR. n>nmax)
THEN 80 DEALLOCATE (qalpha%H,qalpha%L,qvtmp%H,qvtmp%L,qv1%H,qv1%L,qv2%H,qv2%L)
84 ALLOCATE ( qalpha%H(nmax) , qalpha%L(nmax) )
85 ALLOCATE ( qv1%H(nmax) , qv1%L(nmax) )
86 ALLOCATE ( qv2%H(nmax) , qv2%L(nmax) )
87 ALLOCATE ( qvtmp%H(nmax) , qvtmp%L(nmax) )
91 CALL r16scpqv(alpha,qalpha%H,qalpha%L,n)
100 CALL qvmulqv(qalpha%H,qalpha%L,qv1%H,qv1%L,qvtmp%H,qvtmp%L,n)
103 CALL qvaddqv(qvtmp%H,qvtmp%L,qv2%H,qv2%L,qvtmp%H,qvtmp%L,n)
117 INTEGER(KIND=JPIM),
INTENT(IN) :: N
118 INTEGER(KIND=JPIB),
INTENT(IN),
DIMENSION(N) :: I1
119 INTEGER(KIND=JPIB),
INTENT(IN),
DIMENSION(N) :: I2
120 REAL(KIND=JPRH),
INTENT(INOUT),
DIMENSION(N) :: X
121 type(
quadv),
SAVE :: qv1, qv2, qv3, qvx
123 DATA first / .true. /
124 INTEGER,
SAVE :: NMAX = -1
126 IF (first .OR. n>nmax)
THEN 128 DEALLOCATE (qv1%H,qv1%L,qv2%H,qv2%L,qv3%H,qv3%L)
129 DEALLOCATE (qvx%H,qvx%L)
133 ALLOCATE ( qv1%H(nmax) , qv1%L(nmax) )
134 ALLOCATE ( qv2%H(nmax) , qv2%L(nmax) )
135 ALLOCATE ( qv3%H(nmax) , qv3%L(nmax) )
136 ALLOCATE ( qvx%H(nmax) , qvx%L(nmax) )
143 CALL qvdivqv(qv1%H,qv1%L,qv2%H,qv2%L,qv3%H,qv3%L,n)
145 CALL qvsqrt (qv3%H,qv3%L,qvx%H,qvx%L,n)
157 SUBROUTINE i4vcpqv(I4,AHI,ALO,N)
161 INTEGER(KIND=JPIM) :: N
162 INTEGER(KIND=JPIB) :: I4(n)
163 REAL(KIND=JPRB) :: AHI(n),ALO(n)
164 REAL(KIND=JPRH) :: R16(n)
176 INTEGER(KIND=JPIM) :: N
177 REAL(KIND=JPRH) :: R16(n)
178 REAL(KIND=JPRB) :: AHI(n),ALO(n)
186 INTEGER(KIND=JPIM) :: N
187 REAL(KIND=JPRB) :: R16(2,n)
188 REAL(KIND=JPRB) :: AHI(n),ALO(n)
190 REAL(KIND=JPRB) :: AA,BB
191 INTEGER(KIND=JPIB) :: II,JJ,MSK1,MSK2,MSK3
194 parameter(msk1=z
'7FF0000000000000')
195 parameter(msk2=z
'FFF0000000000000')
196 parameter(msk3=z
'0340000000000000')
221 REAL(KIND=JPRB) :: AHI(n),ALO(n)
222 REAL(KIND=JPRH) :: R16(n)
230 REAL(KIND=JPRB) :: AHI(n),ALO(n)
231 REAL(KIND=JPRB) :: R16(2,n)
234 REAL(KIND=JPRB) :: A1,A2,AA,ZHI,ZLO,AGOMI,R
235 INTEGER(KIND=JPIB) :: II,MSK
237 parameter(msk=z
'FFF0000000000000')
249 IF (r.LT.0) zhi=a1-agomi
251 r16(2,i)=(a1-zhi)+zlo
263 REAL(KIND=JPRB) :: R16(2)
264 REAL(KIND=JPRB) :: AHI(n),ALO(n)
266 REAL(KIND=JPRB) :: AA
267 INTEGER(KIND=JPIB) :: II,MSK
269 parameter(msk=z
'FFF0000000000000')
282 SUBROUTINE qvmulqv(AHI,ALO,CHI,CLO,ACHI,ACLO,N)
287 REAL(KIND=JPRB) :: AHI(n),ALO(n),CHI(n),CLO(n),ACHI(n),ACLO(n)
289 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
290 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
292 REAL(KIND=JPRB) :: ZHI,ZLO,ZZ
293 REAL(KIND=JPRB) :: A1,A2,C1,C2,T
313 t = constant * ahi(i)
314 a1 = (ahi(i) - t) + t
316 t = constant * chi(i)
317 c1 = (chi(i) - t) + t
319 zhi = ahi(i) * chi(i)
320 zlo = (((a1 * c1 - zhi) + a1 * c2) + c1 * a2) + c2 * a2
321 zz = ((ahi(i) + alo(i)) * clo(i) + alo(i) * chi(i)) + zlo
323 aclo(i) = (zhi - achi(i)) + zz
327 SUBROUTINE qvdivqv(AHI,ALO,CHI,CLO,ACHI,ACLO,N)
332 REAL(KIND=JPRB) :: AHI(n),ALO(n),CHI(n),CLO(n),ACHI(n),ACLO(n)
334 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
335 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
337 REAL(KIND=JPRB) :: Z,ZZ,QHI,QLO
338 REAL(KIND=JPRB) :: A1,A2,C1,C2,T
360 t = constant * chi(i)
361 a1 = (chi(i) - t) + t
367 qlo = (((a1 * c1 - qhi) + a1 * c2) + c1 * a2) + c2 * a2
368 zz = ((((ahi(i) - qhi) - qlo) + alo(i)) - z*clo(i)) / (chi(i) + clo(i))
370 aclo(i) = (z - achi(i)) + zz
374 SUBROUTINE qvaddqv(AHI,ALO,CHI,CLO,ACHI,ACLO,N)
379 REAL(KIND=JPRB) :: AHI(n),ALO(n),CHI(n),CLO(n),ACHI(n),ACLO(n)
381 REAL(KIND=JPRB) :: Z,ZZ,Q
394 zz = (((q + chi(i)) + (ahi(i) - (q + z))) + alo(i)) + clo(i)
396 aclo(i) = (z - achi(i)) + zz
400 SUBROUTINE qvsubqv(AHI,ALO,CHI,CLO,ACHI,ACLO,N)
405 REAL(KIND=JPRB) :: AHI(n),ALO(n),CHI(n),CLO(n),ACHI(n),ACLO(n)
407 REAL(KIND=JPRB) :: Z,ZZ,Q
420 zz = (((q - chi(i)) + (ahi(i) - (q + z))) + alo(i)) - clo(i)
422 aclo(i) = (z - achi(i)) + zz
426 SUBROUTINE dvmuldv(A,C,ACHI,ACLO,N)
431 REAL(KIND=JPRB) :: A(n),C(n),ACHI(n),ACLO(n)
433 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
434 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
436 REAL(KIND=JPRB) :: A1,A2,C1,C2,T
456 achi(i) = a(i) * c(i)
457 aclo(i) = (((a1 * c1 - achi(i)) + a1 * c2) + c1 * a2) + c2 * a2
461 SUBROUTINE ismulqv(IS,QHI,QLO,QIHI,QILO,N)
466 REAL(KIND=JPRB) :: QHI(n),QLO(n),QIHI(n),QILO(n)
468 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
469 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
471 REAL(KIND=JPRB) :: A1,A2,Q1,Q2,T,ZHI,ZLO,ZZ
475 a1 = (dble(is) - t) + t
478 t = constant * qhi(i)
479 q1 = (qhi(i) - t) + t
482 zlo = (((a1 * q1 - zhi) + a1 * q2) + q1 * a2) + q2 * a2
483 zz = is * qlo(i) + zlo
485 qilo(i) = (zhi - qihi(i)) + zz
489 SUBROUTINE qvdivis(AHI,ALO,IS,AIHI,AILO,N)
494 REAL(KIND=JPRB) :: AHI(n),ALO(n),AIHI(n),AILO(n)
496 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
497 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
499 REAL(KIND=JPRB) :: Z,ZZ,QHI,QLO
500 REAL(KIND=JPRB) :: A1,A2,C1,C2,T
522 a1 = (dble(is) - t) + t
530 qlo = (((a1 * c1 - qhi) + a1 * c2) + c1 * a2) + c2 * a2
531 zz = (((ahi(i) - qhi) - qlo) + alo(i)) / is
533 ailo(i) = (z - aihi(i)) + zz
538 SUBROUTINE qvsqrt(AHI,ALO,BHI,BLO,N)
542 REAL(KIND=JPRB) :: AHI(n),ALO(n),BHI(n),BLO(n)
544 INTEGER,
PARAMETER :: NBITS = digits(1.0d0)
545 REAL(KIND=JPRB),
PARAMETER :: CONSTANT = 2.d0**(nbits-nbits/2)+1.d0
547 REAL(KIND=JPRB) :: A1,A2,C1,C2,T
548 REAL(KIND=JPRB) :: TTHI,TTLO,TT,RES
577 ttlo = (((a1 * c1 - tthi) + a1 * c2) + c1 * a2) + c2 * a2
578 res = (((ahi(i) - tthi) - ttlo) + alo(i)) * 0.5d0 / tt
580 blo(i) = (tt - bhi(i)) + res
subroutine sqrtivdv(I1, I2, N, X)
subroutine i4vcpqv(I4, AHI, ALO, N)
subroutine qvdivqv(AHI, ALO, CHI, CLO, ACHI, ACLO, N)
subroutine qvmulqv(AHI, ALO, CHI, CLO, ACHI, ACLO, N)
subroutine qvaddqv(AHI, ALO, CHI, CLO, ACHI, ACLO, N)
subroutine ismulqv(IS, QHI, QLO, QIHI, QILO, N)
subroutine qvcpr16v(AHI, ALO, R16, N)
subroutine qvdivis(AHI, ALO, IS, AIHI, AILO, N)
subroutine r16vcpqv(R16, AHI, ALO, N)
subroutine qaxpy(ALPHA, V1, V2, N)
subroutine qxmy(V1, V2, N, V3)
subroutine dvmuldv(A, C, ACHI, ACLO, N)
subroutine qvsubqv(AHI, ALO, CHI, CLO, ACHI, ACLO, N)
subroutine r16scpqv(R16, AHI, ALO, N)
subroutine qvsqrt(AHI, ALO, BHI, BLO, N)