Actual source code: fnorm.F

petsc-3.12.2 2019-11-22
Report Typos and Errors
  1: !
  2: !
  3: !    Fortran kernel for the Norm() vector routine
  4: !
  5: #include <petsc/finclude/petscsys.h>
  6: !
  7:       subroutine FortranNormSqr(x,n,sum1)
  8:       implicit none
  9:       PetscScalar x(*)
 10:       PetscReal   sum1
 11:       PetscInt n

 13:       PetscInt i

 15:       PETSC_AssertAlignx(16,x(1))

 17:       do 10,i=1,n
 18:         sum1 = sum1 + PetscRealPart(x(i)*PetscConj(x(i)))
 19:  10   continue

 21:       return
 22:       end


 25:       subroutine FortranNormSqrUnroll(x,n,sum1)
 26:       implicit none
 27:       PetscScalar x(*)
 28:       PetscReal   sum1
 29:       PetscInt n

 31:       PetscInt i

 33:       PETSC_AssertAlignx(16,x(1))

 35:       do 10,i=1,n,4
 36:         sum1 = sum1 + PetscRealPart(x(i)*PetscConj(x(i)))                                         &
 37:      &              + PetscRealPart(x(i+1)*PetscConj(x(i+1)))                                     &
 38:      &              + PetscRealPart(x(i+2)*PetscConj(x(i+2)))                                     &
 39:      &              + PetscRealPart(x(i+3)*PetscConj(x(i+3)))
 40:  10   continue

 42:       return
 43:       end