Actual source code: fnorm.F

  1: !
  2: !  "$Id: fnorm.F,v 1.9 2001/08/07 03:05:24 balay Exp $";
  3: !
  4: !    Fortran kernel for the Norm() vector routine
  5: !
 6:  #include include/finclude/petscdef.h
  7: !
  8:       subroutine FortranNormSqr(x,n,sum1)
  9:       implicit none
 10:       PetscScalar      x(*)
 11:       double precision sum1
 12:       integer n

 14:       integer i

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

 20:       return
 21:       end


 24:       subroutine FortranNormSqrUnroll(x,n,sum1)
 25:       implicit none
 26:       PetscScalar      x(*)
 27:       double precision sum1
 28:       integer n

 30:       integer i

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

 39:       return
 40:       end