PageRenderTime 39ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/wrfv2_fire/external/fftpack/fftpack5/msntf1.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 87 lines | 73 code | 1 blank | 13 comment | 0 complexity | 8fc7e91520c0482328a442c7e89984ad MD5 | raw file
Possible License(s): AGPL-1.0
  1. !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  2. !
  3. ! FFTPACK 5.0
  4. !
  5. ! Authors: Paul N. Swarztrauber and Richard A. Valent
  6. !
  7. ! $Id: msntf1.f,v 1.2 2004/06/15 21:29:20 rodney Exp $
  8. !
  9. !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  10. SUBROUTINE MSNTF1(LOT,JUMP,N,INC,X,WSAVE,DSUM,XH,WORK,IER)
  11. REAL X(INC,*) ,WSAVE(*) ,XH(LOT,*)
  12. DOUBLE PRECISION DSUM(*)
  13. IER = 0
  14. LJ = (LOT-1)*JUMP+1
  15. IF (N-2) 101,102,103
  16. 102 SSQRT3 = 1./SQRT(3.)
  17. DO 112 M=1,LJ,JUMP
  18. XHOLD = SSQRT3*(X(M,1)+X(M,2))
  19. X(M,2) = SSQRT3*(X(M,1)-X(M,2))
  20. X(M,1) = XHOLD
  21. 112 END DO
  22. 101 GO TO 200
  23. 103 NP1 = N+1
  24. NS2 = N/2
  25. DO 104 K=1,NS2
  26. KC = NP1-K
  27. M1 = 0
  28. DO 114 M=1,LJ,JUMP
  29. M1 = M1 + 1
  30. T1 = X(M,K)-X(M,KC)
  31. T2 = WSAVE(K)*(X(M,K)+X(M,KC))
  32. XH(M1,K+1) = T1+T2
  33. XH(M1,KC+1) = T2-T1
  34. 114 CONTINUE
  35. 104 END DO
  36. MODN = MOD(N,2)
  37. IF (MODN .EQ. 0) GO TO 124
  38. M1 = 0
  39. DO 123 M=1,LJ,JUMP
  40. M1 = M1 + 1
  41. XH(M1,NS2+2) = 4.*X(M,NS2+1)
  42. 123 END DO
  43. 124 DO 127 M=1,LOT
  44. XH(M,1) = 0.
  45. 127 END DO
  46. LNXH = LOT-1 + LOT*(NP1-1) + 1
  47. LNSV = NP1 + INT(LOG(REAL(NP1))) + 4
  48. LNWK = LOT*NP1
  49. !
  50. CALL RFFTMF(LOT,1,NP1,LOT,XH,LNXH,WSAVE(NS2+1),LNSV,WORK, &
  51. & LNWK,IER1)
  52. IF (IER1 .NE. 0) THEN
  53. IER = 20
  54. CALL XERFFT ('MSNTF1',-5)
  55. GO TO 200
  56. ENDIF
  57. !
  58. IF(MOD(NP1,2) .NE. 0) GO TO 30
  59. DO 20 M=1,LOT
  60. XH(M,NP1) = XH(M,NP1)+XH(M,NP1)
  61. 20 END DO
  62. 30 SFNP1 = 1./FLOAT(NP1)
  63. M1 = 0
  64. DO 125 M=1,LJ,JUMP
  65. M1 = M1+1
  66. X(M,1) = .5*XH(M1,1)
  67. DSUM(M1) = X(M,1)
  68. 125 END DO
  69. DO 105 I=3,N,2
  70. M1 = 0
  71. DO 115 M=1,LJ,JUMP
  72. M1 = M1+1
  73. X(M,I-1) = .5*XH(M1,I)
  74. DSUM(M1) = DSUM(M1)+.5*XH(M1,I-1)
  75. X(M,I) = DSUM(M1)
  76. 115 CONTINUE
  77. 105 END DO
  78. IF (MODN .NE. 0) GO TO 200
  79. M1 = 0
  80. DO 116 M=1,LJ,JUMP
  81. M1 = M1+1
  82. X(M,N) = .5*XH(M1,N+1)
  83. 116 END DO
  84. 200 CONTINUE
  85. RETURN
  86. END