dx.f 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. *DECK DX
  2. SUBROUTINE DX (U, IDMN, I, J, UXXX, UXXXX)
  3. C***BEGIN PROLOGUE DX
  4. C***SUBSIDIARY
  5. C***PURPOSE Subsidiary to SEPELI
  6. C***LIBRARY SLATEC
  7. C***TYPE SINGLE PRECISION (DX-S)
  8. C***AUTHOR (UNKNOWN)
  9. C***DESCRIPTION
  10. C
  11. C This program computes second order finite difference
  12. C approximations to the third and fourth X
  13. C partial derivatives of U at the (I,J) mesh point.
  14. C
  15. C***SEE ALSO SEPELI
  16. C***ROUTINES CALLED (NONE)
  17. C***COMMON BLOCKS SPLPCM
  18. C***REVISION HISTORY (YYMMDD)
  19. C 801001 DATE WRITTEN
  20. C 891214 Prologue converted to Version 4.0 format. (BAB)
  21. C 900402 Added TYPE section. (WRB)
  22. C***END PROLOGUE DX
  23. C
  24. COMMON /SPLPCM/ KSWX ,KSWY ,K ,L ,
  25. 1 AIT ,BIT ,CIT ,DIT ,
  26. 2 MIT ,NIT ,IS ,MS ,
  27. 3 JS ,NS ,DLX ,DLY ,
  28. 4 TDLX3 ,TDLY3 ,DLX4 ,DLY4
  29. DIMENSION U(IDMN,*)
  30. C***FIRST EXECUTABLE STATEMENT DX
  31. IF (I.GT.2 .AND. I.LT.(K-1)) GO TO 50
  32. IF (I .EQ. 1) GO TO 10
  33. IF (I .EQ. 2) GO TO 30
  34. IF (I .EQ. K-1) GO TO 60
  35. IF (I .EQ. K) GO TO 80
  36. C
  37. C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS AT X=A
  38. C
  39. 10 IF (KSWX .EQ. 1) GO TO 20
  40. UXXX = (-5.0*U(1,J)+18.0*U(2,J)-24.0*U(3,J)+14.0*U(4,J)-
  41. 1 3.0*U(5,J))/(TDLX3)
  42. UXXXX = (3.0*U(1,J)-14.0*U(2,J)+26.0*U(3,J)-24.0*U(4,J)+
  43. 1 11.0*U(5,J)-2.0*U(6,J))/DLX4
  44. RETURN
  45. C
  46. C PERIODIC AT X=A
  47. C
  48. 20 UXXX = (-U(K-2,J)+2.0*U(K-1,J)-2.0*U(2,J)+U(3,J))/(TDLX3)
  49. UXXXX = (U(K-2,J)-4.0*U(K-1,J)+6.0*U(1,J)-4.0*U(2,J)+U(3,J))/DLX4
  50. RETURN
  51. C
  52. C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS AT X=A+DLX
  53. C
  54. 30 IF (KSWX .EQ. 1) GO TO 40
  55. UXXX = (-3.0*U(1,J)+10.0*U(2,J)-12.0*U(3,J)+6.0*U(4,J)-U(5,J))/
  56. 1 TDLX3
  57. UXXXX = (2.0*U(1,J)-9.0*U(2,J)+16.0*U(3,J)-14.0*U(4,J)+6.0*U(5,J)-
  58. 1 U(6,J))/DLX4
  59. RETURN
  60. C
  61. C PERIODIC AT X=A+DLX
  62. C
  63. 40 UXXX = (-U(K-1,J)+2.0*U(1,J)-2.0*U(3,J)+U(4,J))/(TDLX3)
  64. UXXXX = (U(K-1,J)-4.0*U(1,J)+6.0*U(2,J)-4.0*U(3,J)+U(4,J))/DLX4
  65. RETURN
  66. C
  67. C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS ON THE INTERIOR
  68. C
  69. 50 CONTINUE
  70. UXXX = (-U(I-2,J)+2.0*U(I-1,J)-2.0*U(I+1,J)+U(I+2,J))/TDLX3
  71. UXXXX = (U(I-2,J)-4.0*U(I-1,J)+6.0*U(I,J)-4.0*U(I+1,J)+U(I+2,J))/
  72. 1 DLX4
  73. RETURN
  74. C
  75. C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS AT X=B-DLX
  76. C
  77. 60 IF (KSWX .EQ. 1) GO TO 70
  78. UXXX = (U(K-4,J)-6.0*U(K-3,J)+12.0*U(K-2,J)-10.0*U(K-1,J)+
  79. 1 3.0*U(K,J))/TDLX3
  80. UXXXX = (-U(K-5,J)+6.0*U(K-4,J)-14.0*U(K-3,J)+16.0*U(K-2,J)-
  81. 1 9.0*U(K-1,J)+2.0*U(K,J))/DLX4
  82. RETURN
  83. C
  84. C PERIODIC AT X=B-DLX
  85. C
  86. 70 UXXX = (-U(K-3,J)+2.0*U(K-2,J)-2.0*U(1,J)+U(2,J))/TDLX3
  87. UXXXX = (U(K-3,J)-4.0*U(K-2,J)+6.0*U(K-1,J)-4.0*U(1,J)+U(2,J))/
  88. 1 DLX4
  89. RETURN
  90. C
  91. C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS AT X=B
  92. C
  93. 80 UXXX = -(3.0*U(K-4,J)-14.0*U(K-3,J)+24.0*U(K-2,J)-18.0*U(K-1,J)+
  94. 1 5.0*U(K,J))/TDLX3
  95. UXXXX = (-2.0*U(K-5,J)+11.0*U(K-4,J)-24.0*U(K-3,J)+26.0*U(K-2,J)-
  96. 1 14.0*U(K-1,J)+3.0*U(K,J))/DLX4
  97. RETURN
  98. END