123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- *DECK POS3D1
- SUBROUTINE POS3D1 (LP, L, MP, M, N, A, B, C, LDIMF, MDIMF, F, XRT,
- + YRT, T, D, WX, WY, C1, C2, BB)
- C***BEGIN PROLOGUE POS3D1
- C***SUBSIDIARY
- C***PURPOSE Subsidiary to POIS3D
- C***LIBRARY SLATEC
- C***TYPE SINGLE PRECISION (POS3D1-S)
- C***AUTHOR (UNKNOWN)
- C***SEE ALSO POIS3D
- C***ROUTINES CALLED COSQB, COSQF, COSQI, COST, COSTI, PIMACH, RFFTB,
- C RFFTF, RFFTI, SINQB, SINQF, SINQI, SINT, SINTI,
- C TRIDQ
- C***REVISION HISTORY (YYMMDD)
- C 801001 DATE WRITTEN
- C 890531 Changed all specific intrinsics to generic. (WRB)
- C 891009 Removed unreferenced variable. (WRB)
- C 891214 Prologue converted to Version 4.0 format. (BAB)
- C 900308 Changed call to TRID to call to TRIDQ. (WRB)
- C 900402 Added TYPE section. (WRB)
- C***END PROLOGUE POS3D1
- DIMENSION A(*) ,B(*) ,C(*) ,
- 1 F(LDIMF,MDIMF,*) ,XRT(*) ,YRT(*) ,
- 2 T(*) ,D(*) ,WX(*) ,WY(*) ,
- 3 BB(*)
- C***FIRST EXECUTABLE STATEMENT POS3D1
- PI = PIMACH(DUM)
- LR = L
- MR = M
- NR = N
- C
- C GENERATE TRANSFORM ROOTS
- C
- LRDEL = ((LP-1)*(LP-3)*(LP-5))/3
- SCALX = LR+LRDEL
- DX = PI/(2.*SCALX)
- GO TO (108,103,101,102,101),LP
- 101 DI = 0.5
- SCALX = 2.*SCALX
- GO TO 104
- 102 DI = 1.0
- GO TO 104
- 103 DI = 0.0
- 104 DO 105 I=1,LR
- XRT(I) = -4.*C1*(SIN((I-DI)*DX))**2
- 105 CONTINUE
- SCALX = 2.*SCALX
- GO TO (112,106,110,107,111),LP
- 106 CALL SINTI (LR,WX)
- GO TO 112
- 107 CALL COSTI (LR,WX)
- GO TO 112
- 108 XRT(1) = 0.
- XRT(LR) = -4.*C1
- DO 109 I=3,LR,2
- XRT(I-1) = -4.*C1*(SIN((I-1)*DX))**2
- XRT(I) = XRT(I-1)
- 109 CONTINUE
- CALL RFFTI (LR,WX)
- GO TO 112
- 110 CALL SINQI (LR,WX)
- GO TO 112
- 111 CALL COSQI (LR,WX)
- 112 CONTINUE
- MRDEL = ((MP-1)*(MP-3)*(MP-5))/3
- SCALY = MR+MRDEL
- DY = PI/(2.*SCALY)
- GO TO (120,115,113,114,113),MP
- 113 DJ = 0.5
- SCALY = 2.*SCALY
- GO TO 116
- 114 DJ = 1.0
- GO TO 116
- 115 DJ = 0.0
- 116 DO 117 J=1,MR
- YRT(J) = -4.*C2*(SIN((J-DJ)*DY))**2
- 117 CONTINUE
- SCALY = 2.*SCALY
- GO TO (124,118,122,119,123),MP
- 118 CALL SINTI (MR,WY)
- GO TO 124
- 119 CALL COSTI (MR,WY)
- GO TO 124
- 120 YRT(1) = 0.
- YRT(MR) = -4.*C2
- DO 121 J=3,MR,2
- YRT(J-1) = -4.*C2*(SIN((J-1)*DY))**2
- YRT(J) = YRT(J-1)
- 121 CONTINUE
- CALL RFFTI (MR,WY)
- GO TO 124
- 122 CALL SINQI (MR,WY)
- GO TO 124
- 123 CALL COSQI (MR,WY)
- 124 CONTINUE
- IFWRD = 1
- 125 CONTINUE
- C
- C TRANSFORM X
- C
- DO 141 J=1,MR
- DO 140 K=1,NR
- DO 126 I=1,LR
- T(I) = F(I,J,K)
- 126 CONTINUE
- GO TO (127,130,131,134,135),LP
- 127 GO TO (128,129),IFWRD
- 128 CALL RFFTF (LR,T,WX)
- GO TO 138
- 129 CALL RFFTB (LR,T,WX)
- GO TO 138
- 130 CALL SINT (LR,T,WX)
- GO TO 138
- 131 GO TO (132,133),IFWRD
- 132 CALL SINQF (LR,T,WX)
- GO TO 138
- 133 CALL SINQB (LR,T,WX)
- GO TO 138
- 134 CALL COST (LR,T,WX)
- GO TO 138
- 135 GO TO (136,137),IFWRD
- 136 CALL COSQF (LR,T,WX)
- GO TO 138
- 137 CALL COSQB (LR,T,WX)
- 138 CONTINUE
- DO 139 I=1,LR
- F(I,J,K) = T(I)
- 139 CONTINUE
- 140 CONTINUE
- 141 CONTINUE
- GO TO (142,164),IFWRD
- C
- C TRANSFORM Y
- C
- 142 CONTINUE
- DO 158 I=1,LR
- DO 157 K=1,NR
- DO 143 J=1,MR
- T(J) = F(I,J,K)
- 143 CONTINUE
- GO TO (144,147,148,151,152),MP
- 144 GO TO (145,146),IFWRD
- 145 CALL RFFTF (MR,T,WY)
- GO TO 155
- 146 CALL RFFTB (MR,T,WY)
- GO TO 155
- 147 CALL SINT (MR,T,WY)
- GO TO 155
- 148 GO TO (149,150),IFWRD
- 149 CALL SINQF (MR,T,WY)
- GO TO 155
- 150 CALL SINQB (MR,T,WY)
- GO TO 155
- 151 CALL COST (MR,T,WY)
- GO TO 155
- 152 GO TO (153,154),IFWRD
- 153 CALL COSQF (MR,T,WY)
- GO TO 155
- 154 CALL COSQB (MR,T,WY)
- 155 CONTINUE
- DO 156 J=1,MR
- F(I,J,K) = T(J)
- 156 CONTINUE
- 157 CONTINUE
- 158 CONTINUE
- GO TO (159,125),IFWRD
- 159 CONTINUE
- C
- C SOLVE TRIDIAGONAL SYSTEMS IN Z
- C
- DO 163 I=1,LR
- DO 162 J=1,MR
- DO 160 K=1,NR
- BB(K) = B(K)+XRT(I)+YRT(J)
- T(K) = F(I,J,K)
- 160 CONTINUE
- CALL TRIDQ (NR,A,BB,C,T,D)
- DO 161 K=1,NR
- F(I,J,K) = T(K)
- 161 CONTINUE
- 162 CONTINUE
- 163 CONTINUE
- IFWRD = 2
- GO TO 142
- 164 CONTINUE
- DO 167 I=1,LR
- DO 166 J=1,MR
- DO 165 K=1,NR
- F(I,J,K) = F(I,J,K)/(SCALX*SCALY)
- 165 CONTINUE
- 166 CONTINUE
- 167 CONTINUE
- RETURN
- END
|