PageRenderTime 51ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/wrfv2_fire/external/fftpack/fftpack5/mcsqb1.F

http://github.com/jbeezley/wrf-fire
FORTRAN Legacy | 71 lines | 57 code | 1 blank | 13 comment | 0 complexity | 46ee84caa1b8a0487bbd268370fdafcf 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: mcsqb1.f,v 1.2 2004/06/15 21:29:19 rodney Exp $
  8. !
  9. !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  10. SUBROUTINE MCSQB1 (LOT,JUMP,N,INC,X,WSAVE,WORK,IER)
  11. DIMENSION X(INC,*) ,WSAVE(*) ,WORK(LOT,*)
  12. IER = 0
  13. LJ = (LOT-1)*JUMP+1
  14. NS2 = (N+1)/2
  15. NP2 = N+2
  16. DO 101 I=3,N,2
  17. DO 201 M=1,LJ,JUMP
  18. XIM1 = X(M,I-1)+X(M,I)
  19. X(M,I) = .5*(X(M,I-1)-X(M,I))
  20. X(M,I-1) = .5*XIM1
  21. 201 CONTINUE
  22. 101 END DO
  23. DO 301 M=1,LJ,JUMP
  24. X(M,1) = .5*X(M,1)
  25. 301 END DO
  26. MODN = MOD(N,2)
  27. IF (MODN .NE. 0) GO TO 302
  28. DO 303 M=1,LJ,JUMP
  29. X(M,N) = .5*X(M,N)
  30. 303 END DO
  31. 302 CONTINUE
  32. LENX = (LOT-1)*JUMP + INC*(N-1) + 1
  33. LNSV = N + INT(LOG(REAL(N))) + 4
  34. LNWK = LOT*N
  35. !
  36. CALL RFFTMB(LOT,JUMP,N,INC,X,LENX,WSAVE(N+1),LNSV,WORK,LNWK,IER1)
  37. IF (IER1 .NE. 0) THEN
  38. IER = 20
  39. CALL XERFFT ('MCSQB1',-5)
  40. GO TO 400
  41. ENDIF
  42. !
  43. DO 102 K=2,NS2
  44. KC = NP2-K
  45. M1 = 0
  46. DO 202 M=1,LJ,JUMP
  47. M1 = M1 + 1
  48. WORK(M1,K) = WSAVE(K-1)*X(M,KC)+WSAVE(KC-1)*X(M,K)
  49. WORK(M1,KC) = WSAVE(K-1)*X(M,K)-WSAVE(KC-1)*X(M,KC)
  50. 202 CONTINUE
  51. 102 END DO
  52. IF (MODN .NE. 0) GO TO 305
  53. DO 304 M=1,LJ,JUMP
  54. X(M,NS2+1) = WSAVE(NS2)*(X(M,NS2+1)+X(M,NS2+1))
  55. 304 CONTINUE
  56. 305 DO 103 K=2,NS2
  57. KC = NP2-K
  58. M1 = 0
  59. DO 203 M=1,LJ,JUMP
  60. M1 = M1 + 1
  61. X(M,K) = WORK(M1,K)+WORK(M1,KC)
  62. X(M,KC) = WORK(M1,K)-WORK(M1,KC)
  63. 203 CONTINUE
  64. 103 END DO
  65. DO 104 M=1,LJ,JUMP
  66. X(M,1) = X(M,1)+X(M,1)
  67. 104 END DO
  68. 400 CONTINUE
  69. RETURN
  70. END