sdanrm.f 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. *DECK SDANRM
  2. REAL FUNCTION SDANRM (NEQ, V, WT, RPAR, IPAR)
  3. C***BEGIN PROLOGUE SDANRM
  4. C***SUBSIDIARY
  5. C***PURPOSE Compute vector norm for SDASSL.
  6. C***LIBRARY SLATEC (DASSL)
  7. C***TYPE SINGLE PRECISION (SDANRM-S, DDANRM-D)
  8. C***AUTHOR Petzold, Linda R., (LLNL)
  9. C***DESCRIPTION
  10. C-----------------------------------------------------------------------
  11. C THIS FUNCTION ROUTINE COMPUTES THE WEIGHTED
  12. C ROOT-MEAN-SQUARE NORM OF THE VECTOR OF LENGTH
  13. C NEQ CONTAINED IN THE ARRAY V,WITH WEIGHTS
  14. C CONTAINED IN THE ARRAY WT OF LENGTH NEQ.
  15. C SDANRM=SQRT((1/NEQ)*SUM(V(I)/WT(I))**2)
  16. C-----------------------------------------------------------------------
  17. C***ROUTINES CALLED (NONE)
  18. C***REVISION HISTORY (YYMMDD)
  19. C 830315 DATE WRITTEN
  20. C 901009 Finished conversion to SLATEC 4.0 format (F.N.Fritsch)
  21. C 901019 Merged changes made by C. Ulrich with SLATEC 4.0 format.
  22. C 901026 Added explicit declarations for all variables and minor
  23. C cosmetic changes to prologue. (FNF)
  24. C***END PROLOGUE SDANRM
  25. C
  26. INTEGER NEQ, IPAR(*)
  27. REAL V(NEQ), WT(NEQ), RPAR(*)
  28. C
  29. INTEGER I
  30. REAL SUM, VMAX
  31. C
  32. C***FIRST EXECUTABLE STATEMENT SDANRM
  33. SDANRM = 0.0E0
  34. VMAX = 0.0E0
  35. DO 10 I = 1,NEQ
  36. IF(ABS(V(I)/WT(I)) .GT. VMAX) VMAX = ABS(V(I)/WT(I))
  37. 10 CONTINUE
  38. IF(VMAX .LE. 0.0E0) GO TO 30
  39. SUM = 0.0E0
  40. DO 20 I = 1,NEQ
  41. 20 SUM = SUM + ((V(I)/WT(I))/VMAX)**2
  42. SDANRM = VMAX*SQRT(SUM/NEQ)
  43. 30 CONTINUE
  44. RETURN
  45. C------END OF FUNCTION SDANRM------
  46. END