https://github.com/sevenian3/ChromaStarPy
Tip revision: 103d3d0df6d9574c49818f149e1cae8100455d10 authored by Ian Short on 06 July 2023, 18:09:20 UTC
Create ReadMe
Create ReadMe
Tip revision: 103d3d0
Ddot.py
# -*- coding: utf-8 -*-
"""
Created on Fri May 17 17:11:14 2019
@author:
"""
import math
"""
*> \brief \b DDOT
*
* =========== DOCUMENTATION ===========
*
* Online html documentation available at
* http://www.netlib.org/lapack/explore-html/
*
* Definition:
* ===========
*
* DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY)
*
* .. Scalar Arguments ..
* INTEGER INCX,INCY,N
* ..
* .. Array Arguments ..
* DOUBLE PRECISION DX(*),DY(*)
* ..
*
*
*> \par Purpose:
* =============
*>
*> \verbatim
*>
*> DDOT forms the dot product of two vectors.
*> uses unrolled loops for increments equal to one.
*> \endverbatim
*
* Arguments:
* ==========
*
*> \param[in] N
*> \verbatim
*> N is INTEGER
*> number of elements in input vector(s)
*> \endverbatim
*>
*> \param[in] DX
*> \verbatim
*> DX is DOUBLE PRECISION array, dimension ( 1 + ( N - 1
*)*abs( INCX ) )
*> \endverbatim
*>
*> \param[in] INCX
*> \verbatim
*> INCX is INTEGER
*> storage spacing between elements of DX
*> \endverbatim
*>
*> \param[in] DY
*> \verbatim
*> DY is DOUBLE PRECISION array, dimension ( 1 + ( N - 1
*)*abs( INCY ) )
*> \endverbatim
*>
*> \param[in] INCY
*> \verbatim
*> INCY is INTEGER
*> storage spacing between elements of DY
*> \endverbatim
*
* Authors:
* ========
*
*> \author Univ. of Tennessee
*> \author Univ. of California Berkeley
*> \author Univ. of Colorado Denver
*> \author NAG Ltd.
*
*> \date November 2017
*
*> \ingroup double_blas_level1
*
*> \par Further Details:
* =====================
*>
*> \verbatim
*>
*> jack dongarra, linpack, 3/11/78.
*> modified 12/3/93, array(1) declarations changed to array(*)
*> \endverbatim
*>
* =====================================================================
"""
#DOUBLE PRECISION FUNCTION ddot(N,DX,INCX,DY,INCY)
def ddot(n, dx, incx, dy, incy):
#*
#* -- Reference BLAS level1 routine (version 3.8.0) --
#* -- Reference BLAS is a software package provided by Univ. of
#* Tennessee, --
#* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG
#* Ltd..--
#* November 2017
#*
#* .. Scalar Arguments ..
#INTEGER INCX,INCY,N
#* ..
#* .. Array Arguments ..
#DOUBLE PRECISION DX(*),DY(*)
#* ..
#*
#* =====================================================================
#*
#* .. Local Scalars ..
dtemp = 0.0e0
i = 0
ix = 0
iy = 0
m = 0
mp1 = 0
#DOUBLE PRECISION DTEMP
#INTEGER I,IX,IY,M,MP1
#* ..
#* .. Intrinsic Functions ..
#INTRINSIC mod
#* ..
#ddot = 0.0d0
returnValue = 0.0e0
dtemp = 0.0e0
#IF (n.LE.0) RETURN
if (n > 0):
#IF (incx.EQ.1 .AND. incy.EQ.1) THEN
if (incx == 1 and incy == 1):
#*
#* code for both increments equal to 1
#*
#*
#* clean-up loop
#*
m = n % 5
#IF (m.NE.0) THEN
if (m != 0):
#DO i = 1,m
for i in range(m):
dtemp = dtemp + dx[i]*dy[i]
#IF (n.LT.5) THEN
if (n < 5):
#ddot=dtemp
returnValue = dtemp
#RETURN
if (n >= 5):
mp1 = m + 1
#DO i = mp1,n,5
for i in range(mp1-1, n, 5):
dtemp = dtemp + dx[i]*dy[i] + dx[i+1]*dy[i+1] +\
dx[i+2]*dy[i+2] + dx[i+3]*dy[i+3] + dx[i+4]*dy[i+4]
else:
#*
#* code for unequal increments or equal increments
#* not equal to 1
#*
#ix = 1
#iy = 1
ix = 0
iy = 0
if (incx < 0):
ix = ((-1*n)+1)*incx + 1
if (incy < 0):
iy = ((-1*n)+1)*incy + 1
#DO i = 1,n
for i in range(n):
dtemp = dtemp + dx[ix]*dy[iy]
ix = ix + incx
iy = iy + incy
#ddot = dtemp
returnValue = dtemp
return returnValue