Branch data Line data Source code
1 : : !!****m* ABINIT/m_simtet
2 : : !! NAME
3 : : !! m_simtet
4 : : !!
5 : : !! FUNCTION
6 : : !!
7 : : !! COPYRIGHT
8 : : !!
9 : : !! SOURCE
10 : :
11 : : #if defined HAVE_CONFIG_H
12 : : #include "config.h"
13 : : #endif
14 : :
15 : : #include "abi_common.h"
16 : :
17 : : module m_simtet
18 : :
19 : : use defs_basis
20 : : use m_errors, only: unused_var
21 : :
22 : : implicit none
23 : :
24 : : private
25 : :
26 : : public :: sim0onei
27 : : public :: sim0twoi
28 : : !!***
29 : :
30 : : contains
31 : :
32 : : !C file: sim0onei.f
33 : : !C date: 2011-04-01
34 : : !C who: S.Kaprzyk
35 : : !C what: Complex linear form integral over standard terahedron
36 : : !C ------------------------------------------------------------
37 : : !C - * -
38 : : !C - * 1 -
39 : : !C - SIM0=6 * dt1*dt2*dt3 ---------------------------------- -
40 : : !C - * verm(4)+(verm(1)-verm(4))*t1+ ..... -
41 : : !C - * -
42 : : !C - 0<t1+t2+t3<1 -
43 : : !C ------------------------------------------------------------
44 : 0 : SUBROUTINE SIM0ONEI(SIM0, SIM0I, VERM)
45 : :
46 : : !IMPLICIT NONE
47 : : INTEGER iuerr
48 : : PARAMETER (iuerr=6)
49 : : DOUBLE COMPLEX SIM0, SIM0I
50 : : DOUBLE COMPLEX VERM(4)
51 : : !C
52 : : DOUBLE COMPLEX SIM, SIMI
53 : : LOGICAL LONE(4),LEPS(3)
54 : : !c
55 : : DOUBLE COMPLEX VERM2D(3)
56 : : DOUBLE COMPLEX U(3)
57 : : DOUBLE PRECISION AS(3), AL(4)
58 : : INTEGER I, I1, I2, I3, K, N
59 : : DOUBLE PRECISION ZERO, EPS, SMALL
60 : : DATA EPS/1.0D-6/, SMALL/1.0D-5/
61 : : DATA ZERO/0.0D0/
62 : : !C
63 [ # # ]: 0 : DO 100 I = 1, 3
64 [ # # ]: 0 : IF (DIMAG(VERM(4))*DIMAG(VERM(I)).LT.ZERO) THEN
65 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,4)
66 : : 9010 FORMAT (' ***sim0onei: not signed ImgVERM()=',4(D13.6,1X))
67 : : !c STOP ' ***sim0onei: '
68 : : END IF
69 : 0 : 100 CONTINUE
70 [ # # ]: 0 : DO 200 I = 1, 4
71 : 0 : AL(I) = CDABS(VERM(I))
72 : 0 : 200 CONTINUE
73 [ # # ]: 0 : DO 300 N = 1, 4
74 [ # # ]: 0 : IF (AL(N).LT.SMALL) THEN
75 : 0 : I1 = MOD(N+0,4) + 1
76 : 0 : I2 = MOD(N+1,4) + 1
77 : 0 : I3 = MOD(N+2,4) + 1
78 : 0 : VERM2D(1) = VERM(I1)
79 : 0 : VERM2D(2) = VERM(I2)
80 : 0 : VERM2D(3) = VERM(I3)
81 : 0 : CALL S2D0ONEI(SIM,SIMI,VERM2D)
82 : 0 : SIM0 = 3*SIM/2
83 : 0 : SIM0I = SIMI + 1.75D0
84 : 0 : RETURN
85 : : END IF
86 : 0 : 300 CONTINUE
87 : : !c
88 : 0 : N = 4 ! N = 3, 2, 1
89 [ # # ]: 0 : DO 201 I = 1, 3
90 [ # # ]: 0 : IF (CDABS(VERM(I)).GT.CDABS(VERM(N))) N = I
91 : 0 : 201 CONTINUE
92 : : !C
93 : : !C Here are 4 cases a), b), c), d); see, Fig.3.1
94 : : !C LONE(1..4) [w1<w2<w3<ONE]; [w1<w2<ONE<w3];
95 : : !C [w1<ONE<w2<w3]; [ONE<w1<w2<w3]
96 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e]; [|w1-w2|<e,|w3-w2|<e];
97 : : !C [|w1-w2|>e,|w3-w2|<e]
98 : : !*-ASIS
99 : 0 : CALL SIM0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
100 : : !c U(1) = W(1); U(2) = W(2); U(3) = W(3)
101 [ # # ]: 0 : IF (LONE(1)) THEN
102 : 0 : CALL SIM1ONEI(U,AS,LEPS,SIM,SIMI)
103 : : END IF
104 : : !c U(1) = W(1); U(2) = W(2); U(3) = CONE/W(3)
105 [ # # ]: 0 : IF (LONE(2)) THEN
106 : 0 : CALL SIM2ONEI(U,AS,LEPS,SIM,SIMI)
107 : : END IF
108 : : !c U(1) = W(1); U(2) = CONE/W(2); U(3) = CONE/W(3)
109 [ # # ]: 0 : IF (LONE(3)) THEN
110 : 0 : CALL SIM3ONEI(U,AS,LEPS,SIM,SIMI)
111 : : END IF
112 : : !c U(1) = CONE/W(1); U(2) = CONE/W(2); U(3) = CONE/W(3)
113 [ # # ]: 0 : IF (LONE(4)) THEN
114 : 0 : CALL SIM4ONEI(U,AS,LEPS,SIM,SIMI)
115 : : END IF
116 : 0 : SIM0 = 0.75D0*SIM/VERM(N)
117 : 0 : SIM0I = log(VERM(N)) + 0.25D0*SIMI
118 : 0 : SIM0I = SIM0I + (0.25D0,0.0D0)
119 : 0 : RETURN
120 : : END SUBROUTINE SIM0ONEI
121 : : !C
122 : : !C -----------------------------------------------------------------
123 : : !C file: sim0twoi.f
124 : : !C date: 2011-04-02
125 : : !C who: S.Kaprzyk
126 : : !C what: Complex linear form integrals over standard tetrahedron
127 : : !C ------------------(i=1,2,3)--------------------------------------
128 : : !C * -
129 : : !C * t_i -
130 : : !C VERL(i)=6*dt1dt2dt3 ------------------------------------------ -
131 : : !C * VERM(4)+[VERM(1)-VERM(4)]*t1+... -
132 : : !C * -
133 : : !C 0<t1+t2+t3<1 -
134 : : !C -------------------(i=4)-----------------------------------------
135 : : !C * -
136 : : !C * 1- t1 -t2 - t3 -
137 : : !C VERL(4)=6*dt1dt2dt3 ------------------------------------------ -
138 : : !C * VERM(4)+[VERM(1)-VERM(4)]*t1+... -
139 : : !C * -
140 : : !C 0<t1+t2+t3<1 -
141 : : !C -----------------------------------------------------------------
142 : 55164096 : SUBROUTINE SIM0TWOI(VERL, VERLI, VERM)
143 : :
144 : : !IMPLICIT NONE
145 : : INTEGER iuerr
146 : : PARAMETER (iuerr=6)
147 : : DOUBLE COMPLEX VERL(4), VERLI(4), VERM(4)
148 : : !C
149 : : DOUBLE COMPLEX SIM, SIMI
150 : : DOUBLE COMPLEX VERL2D(3), VERL2DI(3), VERM2D(3)
151 : : LOGICAL LONE(4), LEPS(3)
152 : : !c
153 : : INTEGER I, I1, I2, I3, K, N
154 : : DOUBLE PRECISION AS(3), AL(4)
155 : : DOUBLE COMPLEX U(3)
156 : : DOUBLE COMPLEX CZERO
157 : : DOUBLE PRECISION EPS, SMALL
158 : : DOUBLE PRECISION ZERO
159 : : DATA EPS/1.0D-6/, SMALL/1.0D-5/
160 : : DATA ZERO/0.0D0/
161 : : !C
162 : 55164096 : CZERO = (0.0D0,0.0D0)
163 [ + + ]: 220656384 : DO 50 I = 1, 3
164 [ - + ]: 165492288 : IF (DIMAG(VERM(4))*DIMAG(VERM(I)).LT.ZERO) THEN
165 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,4)
166 : : 9010 FORMAT (' ***sim0twoi: not signed ImgVERM()=',4(D13.6,1X))
167 : : !c STOP ' ***sim0twoi: '
168 : : END IF
169 : 55164096 : 50 CONTINUE
170 [ + + ]: 275820480 : DO 200 I = 1, 4
171 : 220656384 : AL(I) = CDABS(VERM(I))
172 : 55164096 : 200 CONTINUE
173 : : !c
174 [ + + ]: 275820480 : DO 100 N = 1, 4
175 : 220656384 : VERL(N) = CZERO
176 : 220656384 : VERLI(N) = CZERO
177 : 220656384 : I1 = MOD(N+0,4) + 1
178 : 220656384 : I2 = MOD(N+1,4) + 1
179 : 220656384 : I3 = MOD(N+2,4) + 1
180 [ - + ]: 220656384 : IF (AL(I1).LT.SMALL) THEN
181 : 0 : VERM2D(1) = VERM(I2)
182 : 0 : VERM2D(2) = VERM(I3)
183 : 0 : VERM2D(3) = VERM(N)
184 : 0 : CALL S2D0TWOI(VERL2D,VERL2DI,VERM2D)
185 : 0 : VERL(N) = VERL2D(3)
186 : 0 : VERLI(N) = VERL2DI(3)*3/4
187 : 0 : GO TO 100
188 : : END IF
189 [ - + ]: 220656384 : IF (AL(I2).LT.SMALL) THEN
190 : 0 : VERM2D(1) = VERM(I3)
191 : 0 : VERM2D(2) = VERM(N)
192 : 0 : VERM2D(3) = VERM(I1)
193 : 0 : CALL S2D0TWOI(VERL2D,VERL2DI,VERM2D)
194 : 0 : VERL(N) = VERL2D(2)
195 : 0 : VERLI(N) = VERL2DI(2)*3/4
196 : 0 : GO TO 100
197 : : END IF
198 [ - + ]: 220656384 : IF (AL(I3).LT.SMALL) THEN
199 : 0 : VERM2D(1) = VERM(N)
200 : 0 : VERM2D(2) = VERM(I1)
201 : 0 : VERM2D(3) = VERM(I2)
202 : 0 : CALL S2D0TWOI(VERL2D,VERL2DI,VERM2D)
203 : 0 : VERL(N) = VERL2D(1)
204 : 0 : VERLI(N) = VERL2DI(1)*3/4
205 : 0 : GO TO 100
206 : : END IF
207 [ - + ]: 220656384 : IF (AL(N).LT.SMALL) THEN
208 : 0 : VERM2D(1) = VERM(I1)
209 : 0 : VERM2D(2) = VERM(I2)
210 : 0 : VERM2D(3) = VERM(I3)
211 : 0 : CALL S2D0ONEI(SIM,SIMI,VERM2D)
212 : 0 : VERL(N) = SIM/2
213 : 0 : VERLI(N) = SIMI/4 +1.75D0
214 : 0 : GO TO 100
215 : : END IF
216 : : !C Here are 4 cases a), b), c), d); see, Fig.3.1
217 : : !C LONE(1..4) [w1<w2<w3<ONE]; [w1<w2<ONE<w3];
218 : : !C [w1<ONE<w2<w3]; [ONE<w1<w2<w3]
219 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e]; [|w1-w2|<e,|w3-w2|<e];
220 : : !C [|w1-w2|>e,|w3-w2|<e]
221 : : !*-ASIS
222 : 220656384 : CALL SIM0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
223 : : !c U(1) = W(1); U(2) = W(2); U(3) = W(3)
224 [ + + ]: 220656384 : IF (LONE(1)) THEN
225 : 209614532 : CALL SIM1TWOI(U,AS,LEPS,SIM,SIMI)
226 : : END IF
227 : : !c U(1) = W(1); U(2) = W(2); U(3) = CONE/W(3)
228 [ + + ]: 220656384 : IF (LONE(2)) THEN
229 : 6337479 : CALL SIM2TWOI(U,AS,LEPS,SIM,SIMI)
230 : : END IF
231 : : !c U(1) = W(1); U(2) = CONE/W(2); U(3) = CONE/W(3)
232 [ + + ]: 220656384 : IF (LONE(3)) THEN
233 : 2626200 : CALL SIM3TWOI(U,AS,LEPS,SIM,SIMI)
234 : : END IF
235 : : !c U(1) = CONE/W(1); U(2) = CONE/W(2); U(3) = CONE/W(3)
236 [ + + ]: 220656384 : IF (LONE(4)) THEN
237 : 2078173 : CALL SIM4TWOI(U,AS,LEPS,SIM,SIMI)
238 : : END IF
239 : : !c
240 : 220656384 : VERL(N) = SIM/VERM(N)/8
241 : 220656384 : VERLI(N) = log(VERM(N))/4 + SIMI/32
242 : 220656384 : VERLI(N) = VERLI(N) + (0.25D0,0.0D0)
243 : 55164096 : 100 CONTINUE ! end DO ... N = 1, 4
244 : 55164096 : RETURN
245 : : END SUBROUTINE SIM0TWOI
246 : : !C
247 : : !C ---------------------------------------------------------------------
248 : : !C file: sim0ur0.f
249 : : !C date: 2011-03-16
250 : : !C who: S.Kaprzyk
251 : : !C what: R0(U)=Arth(w)/w=(ln(1+U)-ln(1-U))/(2*U)
252 : : !C what: R0(U)= 1 + U^2/3 + U^4/5 + ...
253 : 0 : DOUBLE COMPLEX FUNCTION SIM0UR0(U)
254 : :
255 : : !IMPLICIT NONE
256 : : DOUBLE COMPLEX U
257 : : !c
258 : : !c DOUBLE PRECISION DLAMCH
259 : : !c EXTERNAL DLAMCH
260 : : !c
261 : : INTEGER K
262 : : DOUBLE COMPLEX AV, BV, CV, UU
263 : : DOUBLE COMPLEX CONE
264 : : DOUBLE PRECISION DEV, TOL
265 : : DATA TOL /1.0D-13/
266 : : !c
267 : : !c TOL = DLAMCH('e')*10
268 : 0 : CONE = (1.0D0,0.0D0)
269 : 0 : UU = U*U
270 [ # # ]: 0 : IF (CDABS(U).GT.0.27D0) THEN
271 : 0 : SIM0UR0 = log((CONE+U)/(CONE-U))/(2*U)
272 : : !c SIM0UR0 = (log(CONE+U)-log(CONE-U))/(2*U)
273 : : ELSE
274 : : CV = UU
275 : : AV = CONE
276 : 0 : DO 50 K = 3, 13, 2
277 : 0 : AV = AV + CV/DBLE(K)
278 [ # # ]: 0 : CV = CV*UU
279 : 0 : 50 CONTINUE
280 : 0 : DO 100 K = 15, 49, 2
281 : 0 : BV = CV/DBLE(K)
282 : 0 : AV = AV + BV
283 : 0 : DEV = CDABS(BV)
284 [ # # ]: 0 : IF (DEV.LE.TOL*CDABS(AV)) GO TO 150
285 [ # # ]: 0 : CV = CV*UU
286 : 0 : 100 CONTINUE
287 : 0 : WRITE (std_out,9010) U, DEV, TOL
288 : : 9010 FORMAT ('***sim0ur0: U=',2(D15.8,1X),' DEV=',D14.7,' TOL=',D14.7)
289 : 0 : STOP '***sim0ur0: accuracy not reached'
290 : : 150 CONTINUE
291 : : SIM0UR0 = AV
292 : : END IF
293 : : !C
294 : : RETURN
295 : : END FUNCTION SIM0UR0
296 : : !C
297 : : !C ----------------------------------------------------------------------
298 : : !C file: sim0ux0.f
299 : : !C date: 2010-08-17
300 : : !C who: S.Kaprzyk
301 : : !C what: Complex version of X0(U)=(R0(U)/U-1-U^2/3-U^4/5)/U^6
302 : : !C R0(U)=Arth(w)/w=Log((1+U)/(1-U))/(2*U)
303 : 661969152 : DOUBLE COMPLEX FUNCTION SIM0UX0(U)
304 : :
305 : : !IMPLICIT NONE
306 : : DOUBLE COMPLEX U
307 : : !c
308 : : !c DOUBLE PRECISION DLAMCH
309 : : !c EXTERNAL DLAMCH
310 : : !c
311 : : INTEGER K
312 : : DOUBLE COMPLEX AV, CV, UU
313 : : DOUBLE COMPLEX CONE
314 : : DOUBLE PRECISION DEV, TOL
315 : : DATA TOL /1.0D-13/
316 : : !c TOL = DLAMCH('e')*10
317 : 661969152 : CONE = (1.0D0,0.0D0)
318 : 661969152 : UU = U*U
319 [ + + ]: 661969152 : IF (CDABS(U).GT.0.27D0) THEN
320 : 52466800 : SIM0UX0 =(log((CONE+U)/(CONE-U))/(2*U) - (CONE+UU*(CONE/3.0D0+UU*CONE/5.0D0)))/(UU*UU*UU)
321 : : ELSE
322 : : CV = UU
323 : : AV = CONE/7.0D0
324 : 1828507056 : DO 50 K = 9, 13, 2
325 : 1828507056 : AV = AV + CV/DBLE(K)
326 [ + + ]: 1828507056 : CV = CV*UU
327 : 609502352 : 50 CONTINUE
328 [ + - ]: 867229108 : DO 100 K = 15, 49, 2
329 : 1476731460 : AV = AV + CV/DBLE(K)
330 : 1476731460 : DEV = CDABS(CV/AV)/DBLE(K)
331 : 1476731460 : CV = CV*UU
332 [ + + ]: 1476731460 : IF (DEV.LE.TOL) GO TO 150
333 : 0 : 100 CONTINUE
334 : 0 : WRITE (std_out,9010) U, DEV, TOL
335 : : 9010 FORMAT ('***sim0ux0: U=',2(D15.8,1X), ' DEV=',D14.7,' TOL=',D14.7)
336 : 0 : STOP '***sim0ux0: accuracy not reached'
337 : : 150 CONTINUE
338 : : SIM0UX0 = AV
339 : : END IF
340 : : !C
341 : : RETURN
342 : : END FUNCTION SIM0UX0
343 : : !C
344 : : !C ----------------------------------------------------------------------
345 : : !C file: sim0udx0.f
346 : : !C date: 2010-08-17
347 : : !C who: S.Kaprzyk
348 : : !C what: Complex version of DX0(u)=dX0/du
349 : 55560960 : SUBROUTINE SIM0UDX0(U, X0, DX0)
350 : :
351 : : !IMPLICIT NONE
352 : : DOUBLE COMPLEX U, X0, DX0(4)
353 : : !c
354 : : INTEGER I
355 : : DOUBLE COMPLEX AV, BV, CV, DV
356 : : DOUBLE COMPLEX CZERO, CONE
357 : : !C
358 : 55560960 : CZERO = (0.0D0,0.0D0)
359 : 55560960 : CONE = (1.0D0,0.0D0)
360 : : !c
361 : 55560960 : AV = U
362 : 55560960 : BV = AV*AV
363 [ + + ]: 55560960 : IF (CDABS(BV).GE.0.37D0) THEN
364 : 1358638 : BV = CONE/(CONE-BV)
365 : 1358638 : CV = BV*BV
366 : 1358638 : DX0(1) = (BV-7.0D0*X0)/AV
367 : 1358638 : DX0(2) = 2.0D0*(CV-4.0D0*DX0(1)/AV)
368 : 1358638 : DX0(3) = 8.0D0*AV*CV*BV + (2.0D0*CV-9.0D0*DX0(2))/AV
369 : 1358638 : DX0(4) = 24.0D0*CV*BV*(CONE+2.0D0*AV*AV*BV) - 10.0D0*DX0(3)/AV
370 : : ELSE
371 : 54202322 : DX0(3) = CZERO
372 : 54202322 : DX0(2) = (2.0D0,0.0D0)/9.0D0
373 : 54202322 : DX0(1) = DX0(2)*AV
374 : 54202322 : DX0(4) = (24.0D0,0.0D0)/11.0D0
375 : 54202322 : CV = AV
376 : 54202322 : BV = AV*AV
377 : 54202322 : DO 50 I = 2, 48, 2
378 : 1300855728 : DV = DBLE(2+I)/DBLE(9+I)*CV
379 : 1300855728 : DX0(4) = DX0(4) + DBLE((4+I)*(3+I)*(2+I)*(1+I))/DBLE(11+I)*CV*AV
380 : 1300855728 : DX0(3) = DX0(3) + DBLE((1+I)*I)*DV
381 : 1300855728 : DX0(2) = DX0(2) + DBLE(1+I)*DV*AV
382 : 1300855728 : DX0(1) = DX0(1) + DV*BV
383 [ + + ]: 1300855728 : CV = CV*BV
384 : 54202322 : 50 CONTINUE
385 : : END IF
386 : : !C
387 : 55560960 : RETURN
388 : : END SUBROUTINE SIM0UDX0
389 : : !C
390 : : !C ----------------------------------------------------------------------
391 : : !C file: sim1onei.f
392 : : !C date: 2010-09-22
393 : : !C who: S.Kaprzyk
394 : : !C what: CASE a): [w1<w2<w3<ONE]
395 : : !C U(1)=W(1); U(2)=W(2); U(3)=W(3)
396 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
397 : : !C [|w1-w2|<e,|w3-w2|<e];
398 : : !C [|w1-w2|>e,|w3-w2|<e]
399 : 0 : SUBROUTINE SIM1ONEI(U, AS, LEPS, SIM1, SIM1I)
400 : :
401 : : !IMPLICIT NONE
402 : : DOUBLE COMPLEX U(3)
403 : : DOUBLE PRECISION AS(3)
404 : : LOGICAL LEPS(3)
405 : : DOUBLE COMPLEX SIM1, SIM1I
406 : : !C
407 : : !DOUBLE COMPLEX SIM0UX0
408 : : !EXTERNAL SIM0UX0
409 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
410 : : DOUBLE COMPLEX R0(3), QR0(3)
411 : : DOUBLE COMPLEX S0(3), QS0(3)
412 : : DOUBLE COMPLEX AV, BV, CV, DU, G(5)
413 : : INTEGER I, K !, N
414 : : DOUBLE COMPLEX CZERO, CONE
415 : : DOUBLE PRECISION ZERO, ONE
416 : : DATA ZERO/0.0D0/, ONE/1.0D0/
417 : : !C
418 : : ABI_UNUSED(as)
419 : :
420 : 0 : CZERO = (0.0D0,0.0D0)
421 : 0 : CONE = (1.0D0,0.0D0)
422 : : !C ------------------------------------------------------------------
423 : : !C R0(U) = ARTH(U)/U
424 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
425 : : !C ------------------------------------------------------------------
426 [ # # ]: 0 : DO 100 I = 1, 3
427 : 0 : AV = U(I)*U(I)
428 : 0 : X0(I) = SIM0UX0(U(I))
429 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
430 : 0 : S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
431 : 0 : 100 CONTINUE
432 : : !C -----------------------------------------------------------------
433 : : !C - The DX0(I) contains derivatives of the function X0(u) -
434 : : !C -----------------------------------------------------------------
435 [ # # # # : 0 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
# # ]
436 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
437 : : END IF
438 : 0 : DO 200 I = 1, 3, 2
439 : 0 : DU = U(I) - U(2)
440 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
441 : 0 : QX0(I) = (X0(I)-X0(2))/DU
442 : : ELSE
443 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*DU) *DU)*DU
444 : : END IF
445 : 0 : AV = U(I)
446 : 0 : G(1) = U(I) + U(2)
447 [ # # ]: 0 : DO 150 K = 2, 5
448 : 0 : AV = AV*U(I)
449 : 0 : G(K) = G(K-1)*U(2) + AV
450 : 0 : 150 CONTINUE
451 : 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
452 [ # # ]: 0 : QS0(I) = (-S0(2)-R0(2)+(CONE-U(I))*QR0(I))/(CONE+U(I))
453 : 0 : 200 CONTINUE ! end DO ... I = 1, 3, 2
454 [ # # ]: 0 : IF (LEPS(2)) THEN
455 : : !*-ASIS
456 : : QX0(2) = DX0(2)/2.0D0 + DX0(3)*(U(1)+U(3)-2.0D0*U(2))/6.0D0+ &
457 : : & DX0(4)*((U(3)-U(2))*(U(3)-U(2))+(U(1)-U(2))*(U(1)-U(2))+ &
458 : 0 : & (U(3)-U(2))*(U(1)-U(2)))/24.0D0
459 : : ELSE
460 : 0 : QX0(2) = (QX0(3)-QX0(1))/(U(3)-U(1))
461 : : END IF
462 : 0 : AV = U(1)
463 : 0 : G(1) = U(1) + U(3)
464 [ # # ]: 0 : DO 300 K = 2, 5
465 : 0 : AV = AV*U(1)
466 : 0 : G(K) = G(K-1)*U(3) + AV
467 : 0 : 300 CONTINUE
468 : : !*-ASIS
469 : : QR0(2) = CONE/3.0D0 + (G(2)+U(2)*(U(2)+G(1)))/5.0D0 + &
470 : : & (G(4)+U(2)*(G(3)+U(2)*(G(2)+U(2)*(G(1)+U(2)))))*X0(2)+ &
471 : 0 : & G(5)*QX0(3) + AV*U(1)*QX0(2)
472 : 0 : QS0(2) = (-QS0(3)-QR0(3)+(CONE-U(1))*QR0(2))/(CONE+U(1))
473 : : !c
474 : 0 : AV = (CONE+U(1))*(CONE+U(2))*(CONE+U(3))
475 : 0 : BV = U(3) + U(1) - (2.0D0,0.0D0)
476 : 0 : CV = (CONE-U(1))*(CONE-U(1))
477 : 0 : SIM1 = AV*(R0(2)+QR0(3)*BV+QR0(2)*CV)
478 : 0 : SIM1I = AV*(S0(2)+QS0(3)*BV+QS0(2)*CV)
479 : 0 : RETURN
480 : : END SUBROUTINE SIM1ONEI
481 : : !C
482 : : !C ----------------------------------------------------------------------
483 : : !C file: sim1twoi.f
484 : : !C date: 2010-09-22
485 : : !C who: S.Kaprzyk
486 : : !C what: CASE a): [w1<w2<w3<ONE]
487 : : !C U(1)=W(1); U(2)=W(2); U(3)=W(3)
488 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
489 : : !C [|w1-w2|<e,|w3-w2|<e];
490 : : !C [|w1-w2|>e,|w3-w2|<e]
491 : 209614532 : SUBROUTINE SIM1TWOI(U, AS, LEPS, SIM, SIMI)
492 : :
493 : : !IMPLICIT NONE
494 : : DOUBLE COMPLEX U(3)
495 : : DOUBLE PRECISION AS(3)
496 : : LOGICAL LEPS(3)
497 : : DOUBLE COMPLEX SIM, SIMI
498 : : !C
499 : : !DOUBLE COMPLEX SIM0UX0
500 : : !EXTERNAL SIM0UX0
501 : : !c
502 : : DOUBLE COMPLEX R4(3), X0(3), DX0(4)
503 : : DOUBLE COMPLEX QR4(3), QX0(3)
504 : : DOUBLE COMPLEX S4(3), QS4(3)
505 : : DOUBLE COMPLEX AV, BV, CV, UV, G(5)
506 : : INTEGER I, K
507 : : DOUBLE COMPLEX CZERO, CONE, CTWO
508 : : DOUBLE PRECISION ZERO, ONE
509 : : DATA ZERO/0.0D0/, ONE/1.0D0/
510 : : !C
511 : : ABI_UNUSED(as)
512 : 209614532 : CZERO = (0.0D0,0.0D0)
513 : 209614532 : CONE = (1.0D0,0.0D0)
514 : 209614532 : CTWO = (2.0D0,0.0D0)
515 : : !C -----------------------------------------------------------------
516 : : !C - -
517 : : !C - R4(W)=1+(W-1)*(ARTH(W)/W-1)/W -
518 : : !C - R4(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
519 : : !C - -
520 : : !C -----------------------------------------------------------------
521 [ + + ]: 838458128 : DO 100 I = 1, 3
522 : 628843596 : AV = U(I)
523 : 628843596 : X0(I) = SIM0UX0(AV)
524 : : !*-ASIS
525 : : R4(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
526 : 628843596 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
527 : 628843596 : S4(I) = (CONE-U(I))/(CONE+U(I))*R4(I)
528 : 209614532 : 100 CONTINUE
529 : : !C -----------------------------------------------------------------
530 : : !C - The DX0(I) Contains Derivatives Of The Function X0(W) -
531 : : !C -----------------------------------------------------------------
532 [ + + + - : 209614532 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
+ + ]
533 : 53619796 : CALL SIM0UDX0(U(2),X0(2),DX0)
534 : : END IF
535 : : !C
536 : 419229064 : DO 200 I = 1, 3, 2
537 : 419229064 : UV = U(I) - U(2)
538 [ + + ]: 419229064 : IF (LEPS(I)) THEN
539 : 53619796 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UV) *UV)*UV
540 : : ELSE
541 : 365609268 : QX0(I) = (X0(I)-X0(2))/UV
542 : : END IF
543 : 419229064 : AV = U(I)
544 : 419229064 : G(1) = U(I) + U(2)
545 [ + + ]: 2096145320 : DO 150 K = 2, 5
546 : 1676916256 : AV = AV*U(I)
547 : 1676916256 : G(K) = G(K-1)*U(2) + AV
548 : 419229064 : 150 CONTINUE
549 : : QR4(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + G(3) &
550 : 419229064 : & /5.0D0 + (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
551 [ + + ]: 419229064 : QS4(I) = (-S4(2)-R4(2)+(CONE-U(I))*QR4(I))/(CONE+U(I))
552 : 209614532 : 200 CONTINUE ! DO 750 I = 1, 3, 2
553 [ - + ]: 209614532 : IF (LEPS(2)) THEN
554 : : !*-ASIS
555 : : QX0(2) = DX0(2)/2.0D0 + DX0(3)*(U(1)+U(3)-2.0D0*U(2))/6.0D0 + &
556 : : & DX0(4)*((U(3)-U(2))*(U(3)-U(2))+(U(1)-U(2))*(U(1)-U(2))+ &
557 : 0 : & (U(3)-U(2))*(U(1)-U(2)))/24.0D0
558 : : ELSE
559 : 209614532 : QX0(2) = (QX0(3)-QX0(1))/(U(3)-U(1))
560 : : END IF
561 : 209614532 : AV = U(1)
562 : 209614532 : G(1) = U(1) + U(3)
563 [ + + ]: 1048072660 : DO 300 K = 2, 5
564 : 838458128 : AV = AV*U(1)
565 : 838458128 : G(K) = G(K-1)*U(3) + AV
566 : 209614532 : 300 CONTINUE
567 : : !*-ASIS
568 : : QR4(2) = CONE/3.0D0- (U(2)+G(1))/5.0D0 + &
569 : : & (G(2)+U(2)*(U(2)+G(1)))/5.0D0 + &
570 : : & (G(4)+(U(2)-CONE)*(G(3) + G(2)*U(2) + G(1)*U(2)*U(2) + &
571 : : & U(2)*U(2)*U(2)))*X0(2) + (G(5)-G(4))*QX0(3) + &
572 : 209614532 : & (U(1)-CONE)*AV*QX0(2)
573 : 209614532 : QS4(2) = (-QS4(3)-QR4(3)+(CONE-U(1))*QR4(2))/(CONE+U(1))
574 : : !c
575 : 209614532 : AV = (CONE+U(1))*(CONE+U(2))*(CONE+U(3))
576 : 209614532 : BV = U(3) + U(1) - (2.0D0,0.0D0)
577 : 209614532 : CV = (CONE-U(1))*(CONE-U(1))
578 : 209614532 : SIM = AV*(R4(2)+QR4(3)*BV+QR4(2)*CV)
579 : 209614532 : SIMI = AV*(S4(2)+QS4(3)*BV+QS4(2)*CV)
580 : 209614532 : RETURN
581 : : END SUBROUTINE SIM1TWOI
582 : : !C
583 : : !C ----------------------------------------------------------------------
584 : : !C file: sim2onei.f
585 : : !C date: 2010-08-19
586 : : !C who: S.Kaprzyk
587 : : !C what: CASE b) : [w1<w2<ONE<w3]
588 : : !C U(1)=W(1); U(2)=W(2); U(3)=CONE/W(3)
589 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
590 : : !C [|w1-w2|<e,|w3-w2|<e];
591 : : !C [|w1-w2|>e,|w3-w2|<e]
592 : 0 : SUBROUTINE SIM2ONEI(U,AS,LEPS, SIM2, SIM2I)
593 : :
594 : : !IMPLICIT NONE
595 : : DOUBLE COMPLEX U(3)
596 : : DOUBLE PRECISION AS(3)
597 : : LOGICAL LEPS(3)
598 : : DOUBLE COMPLEX SIM2, SIM2I
599 : : !c
600 : : !DOUBLE COMPLEX SIM0UX0
601 : : !EXTERNAL SIM0UX0
602 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
603 : : DOUBLE COMPLEX R0(3), QR0(3)
604 : : DOUBLE COMPLEX S0(3), QS0(3)
605 : : DOUBLE COMPLEX AV, BV, CV, DV, G(5)
606 : : DOUBLE COMPLEX UD
607 : : INTEGER I, K !, N
608 : : DOUBLE COMPLEX CZERO, CONE, CTWO
609 : : DOUBLE PRECISION ZERO, ONE
610 : : DATA ZERO/0.0D0/, ONE/1.0D0/
611 : : !C
612 : 0 : CZERO = (0.0D0,0.0D0)
613 : 0 : CONE = (1.0D0,0.0D0)
614 : 0 : CTWO = (2.0D0,0.0D0)
615 : : !C ------------------------------------------------------------------
616 : : !C R0(U) = ARTH(U)/U
617 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
618 : : !C ------------------------------------------------------------------
619 [ # # ]: 0 : DO 100 I = 1, 3
620 : 0 : AV = U(I)*U(I)
621 : 0 : X0(I) = SIM0UX0(U(I))
622 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
623 : 0 : S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
624 : 0 : 100 CONTINUE
625 : : !C -----------------------------------------------------------------
626 : : !C - THE DX0(I) CONTAINS DERIVATIVES OF THE FUNCTION X0(W) -
627 : : !C -----------------------------------------------------------------
628 [ # # # # : 0 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
# # ]
629 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
630 : : END IF
631 : : !c DO 400 I = 1, 3, 2
632 : 0 : I = 1
633 : 0 : UD = U(I) - U(2)
634 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
635 : 0 : QX0(I) = (X0(I)-X0(2))/UD
636 : : ELSE
637 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UD) *UD)*UD
638 : : END IF
639 : 0 : AV = U(I)
640 : 0 : G(1) = U(I) + U(2)
641 [ # # ]: 0 : DO 200 K = 2, 5
642 : 0 : AV = AV*U(I)
643 : 0 : G(K) = G(K-1)*U(2) + AV
644 : 0 : 200 CONTINUE
645 : 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
646 : 0 : QS0(I) = (-S0(2)-R0(2)+(CONE-U(I))*QR0(I))/(CONE+U(I))
647 : : !c 400 CONTINUE ! end DO ... I = 1, 3, 2
648 : 0 : AV = (CONE+U(1))*(CONE+U(2))*(U(3)+CONE) /((U(3)*U(1)-CONE)*(U(3)*U(2)-CONE))
649 : 0 : BV = CTWO - (U(1)+U(2)) - U(3)*(CONE-U(1)*U(2))
650 : 0 : CV = (U(3)*U(2)-CONE)*(CONE-U(1))**2
651 : 0 : DV = (U(3)-CONE)**2
652 : 0 : SIM2 = AV*(BV*R0(2)+CV*QR0(1)+DV*(DCMPLX(ZERO,AS(3))+U(3)*R0(3)))
653 : 0 : DV = DV*(U(3)-CONE)/(U(3)+CONE)
654 : 0 : SIM2I = AV*(BV*S0(2)+CV*QS0(1)+DV*(DCMPLX(ZERO,AS(3))+U(3)*R0(3)))
655 : : !c
656 : 0 : RETURN
657 : : END SUBROUTINE SIM2ONEI
658 : : !C
659 : : !C ----------------------------------------------------------------------
660 : : !C file: sim2twoi.f
661 : : !C date: 2010-08-19
662 : : !C who: S.Kaprzyk
663 : : !C what: CASE b) : [w1<w2<ONE<w3]
664 : : !C U(1)=W(1); U(2)=W(2); U(3)=CONE/W(3)
665 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
666 : : !C [|w1-w2|<e,|w3-w2|<e];
667 : : !C [|w1-w2|>e,|w3-w2|<e]
668 : 6337479 : SUBROUTINE SIM2TWOI(U,AS,LEPS, SIM, SIMI)
669 : :
670 : : !IMPLICIT NONE
671 : : DOUBLE COMPLEX U(3)
672 : : DOUBLE PRECISION AS(3)
673 : : LOGICAL LEPS(3)
674 : : DOUBLE COMPLEX SIM, SIMI
675 : : !C
676 : : !DOUBLE COMPLEX SIM0UX0
677 : : !EXTERNAL SIM0UX0
678 : : !c
679 : : DOUBLE COMPLEX R4(3), QR4(3)
680 : : DOUBLE COMPLEX S4(3), QS4(3)
681 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4), G(5)
682 : : DOUBLE COMPLEX AV, BV, CV, DV, UV
683 : : INTEGER I, K
684 : : DOUBLE COMPLEX CZERO, CONE, CTWO
685 : : DOUBLE PRECISION ZERO, ONE
686 : : DATA ZERO/0.0D0/, ONE/1.0D0/
687 : : !C
688 : 6337479 : CZERO = (0.0D0,0.0D0)
689 : 6337479 : CONE = (1.0D0,0.0D0)
690 : 6337479 : CTWO = (2.0D0,0.0D0)
691 : : !C -----------------------------------------------------------------
692 : : !C - -
693 : : !C - R4(W)=1+(W-1)*(ARTH(W)/W-1)/W -
694 : : !C - R4(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
695 : : !C - -
696 : : !C -----------------------------------------------------------------
697 [ + + ]: 25349916 : DO 100 I = 1, 3
698 : 19012437 : AV = U(I)
699 : 19012437 : X0(I) = SIM0UX0(AV)
700 : : !*-ASIS
701 : : R4(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
702 : 19012437 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
703 : 19012437 : S4(I) = (CONE-U(I))/(CONE+U(I))*R4(I)
704 : 6337479 : 100 CONTINUE
705 : : !C -----------------------------------------------------------------
706 : : !C - The DX0(I) Contains Derivatives Of The Function X0(W) -
707 : : !C -----------------------------------------------------------------
708 [ + + + - : 6337479 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
- + ]
709 : 716892 : CALL SIM0UDX0(U(2),X0(2),DX0)
710 : : END IF
711 : : !c DO 200 I = 1, 3, 2
712 : 6337479 : I = 1
713 : 6337479 : UV = U(I) - U(2)
714 [ + + ]: 6337479 : IF (LEPS(I)) THEN
715 : 716892 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UV) *UV)*UV
716 : : ELSE
717 : 5620587 : QX0(I) = (X0(I)-X0(2))/UV
718 : : END IF
719 : 6337479 : AV = U(I)
720 : 6337479 : G(1) = U(I) + U(2)
721 [ + + ]: 31687395 : DO 200 K = 2, 5
722 : 25349916 : AV = AV*U(I)
723 : 25349916 : G(K) = G(K-1)*U(2) + AV
724 : 6337479 : 200 CONTINUE
725 : : !*-ASIS
726 : : QR4(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + &
727 : 6337479 : & G(3) /5.0D0 + (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
728 : 6337479 : QS4(I) = (-S4(2)-R4(2)+(CONE-U(I))*QR4(I))/(CONE+U(I))
729 : : !c 200 CONTINUE ! DO ... I = 1, 3, 2
730 : : AV = (CONE+U(1))*(CONE+U(2))*(U(3)+CONE) &
731 : 6337479 : & /((U(3)*U(1)-CONE)*(U(3)*U(2)-CONE))
732 : 6337479 : BV = CTWO - (U(1)+U(2)) - U(3)*(CONE-U(1)*U(2))
733 : 6337479 : CV = (U(3)*U(2)-CONE)*(CONE-U(1))**2
734 : 6337479 : DV = (U(3)-CONE)**2
735 : : SIM = AV*(BV*R4(2)+CV*QR4(1) &
736 : 6337479 : & +DV*((CONE-U(3))*DCMPLX(ZERO,AS(3))+CONE+U(3)-U(3)*U(3)*R4(3)))
737 : 6337479 : DV = DV*(U(3)-CONE)/(U(3)+CONE)
738 : : SIMI = AV*(BV*S4(2)+CV*QS4(1) &
739 : 6337479 : & +DV*((CONE-U(3))*DCMPLX(ZERO,AS(3))+CONE+U(3)-U(3)*U(3)*R4(3)))
740 : : !C
741 : 6337479 : RETURN
742 : : END SUBROUTINE SIM2TWOI
743 : : !C
744 : : !C ----------------------------------------------------------------------
745 : : !C file: sim3onei.f
746 : : !C date: 2010-08-19
747 : : !C who: S.Kaprzyk
748 : : !C what: CASE c) : [w1<ONE<w2<w3]
749 : : !C U(1)=W(1); U(2)=CONE/W(2); U(3)=CONE/W(3)
750 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
751 : : !C [|w1-w2|<e,|w3-w2|<e];
752 : : !C [|w1-w2|>e,|w3-w2|<e]
753 : 0 : SUBROUTINE SIM3ONEI(U,AS,LEPS,SIM3,SIM3I)
754 : :
755 : : !IMPLICIT NONE
756 : : DOUBLE COMPLEX U(3)
757 : : DOUBLE PRECISION AS(3)
758 : : LOGICAL LEPS(3)
759 : : DOUBLE COMPLEX SIM3, SIM3I
760 : : !C
761 : : !DOUBLE COMPLEX SIM0UX0
762 : : !EXTERNAL SIM0UX0
763 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
764 : : DOUBLE COMPLEX R0(3), QR0(3)
765 : : DOUBLE COMPLEX S0(3), QS0(3)
766 : : DOUBLE COMPLEX AV, BV, CV, DV, UD, G(5)
767 : : INTEGER I, K !, N
768 : : DOUBLE COMPLEX CZERO, CONE, CTWO, CIMAG
769 : : DOUBLE PRECISION ZERO, ONE
770 : : DATA ZERO/0.0D0/, ONE/1.0D0/
771 : : !C
772 : 0 : CZERO = (0.0D0,0.0D0)
773 : 0 : CONE = (1.0D0,0.0D0)
774 : 0 : CTWO = (2.0D0,0.0D0)
775 : 0 : CIMAG = (0.0D0,1.0D0)
776 : : !C ------------------------------------------------------------------
777 : : !C R0(U) = ARTH(U)/U
778 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
779 : : !C ------------------------------------------------------------------
780 [ # # ]: 0 : DO 100 I = 1, 3
781 : 0 : AV = U(I)*U(I)
782 : 0 : X0(I) = SIM0UX0(U(I))
783 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
784 : : !c S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
785 : 0 : 100 CONTINUE
786 : : !C -----------------------------------------------------------------
787 : : !C - THE DX0(I) CONTAINS DERIVATIVES OF THE FUNCTION X0(U) -
788 : : !C -----------------------------------------------------------------
789 [ # # # # : 0 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
# # ]
790 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
791 : : END IF
792 : : !c DO 400 I = 1, 3, 2
793 : 0 : I = 3
794 : 0 : UD = U(I) - U(2)
795 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
796 : 0 : QX0(I) = (X0(I)-X0(2))/UD
797 : : ELSE
798 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UD) *UD)*UD
799 : : END IF
800 : 0 : AV = U(I)
801 : 0 : G(1) = U(I) + U(2)
802 [ # # ]: 0 : DO 200 K = 2, 5
803 : 0 : AV = AV*U(I)
804 : 0 : G(K) = G(K-1)*U(2) + AV
805 : 0 : 200 CONTINUE
806 : 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
807 : : !c 400 CONTINUE ! end DO ... I = 1, 3, 2
808 : 0 : QR0(3) = R0(2) + U(3)*QR0(3)
809 [ # # ]: 0 : IF (.NOT.LEPS(3)) THEN
810 : 0 : QR0(3) = QR0(3) + DCMPLX(ZERO,(AS(3)-AS(2)))/(U(3)-U(2))
811 : : END IF
812 : 0 : R0(2) = DCMPLX(ZERO,AS(2)) + U(2)*R0(2)
813 : 0 : AV = (ONE+U(1))*(U(2)+CONE)*(U(3)+CONE) /((U(1)*U(2)-CONE)*(U(1)*U(3)-CONE))
814 : 0 : BV = (CONE-U(1))**2
815 : 0 : CV = CTWO - (U(2)+U(3)) - U(1)*(CONE-U(2)*U(3))
816 : 0 : DV = (U(1)*U(2)-CONE)*(U(3)-CONE)**2
817 : 0 : SIM3 = AV*(BV*R0(1)+CV*R0(2)+DV*QR0(3))
818 : : !c
819 : 0 : S0(1) = (CONE-U(1))/(CONE+U(1))*R0(1)
820 : 0 : S0(2) = (U(2)-CONE)/(U(2)+CONE)*R0(2)
821 : 0 : QS0(3) = (-S0(2)+R0(2)+(U(3)-CONE)*QR0(3))/(U(3)+CONE)
822 : 0 : SIM3I = AV*(BV*S0(1)+CV*S0(2)+DV*QS0(3))
823 : : !c
824 : 0 : RETURN
825 : : END SUBROUTINE SIM3ONEI
826 : : !C
827 : : !C ----------------------------------------------------------------------
828 : : !C file: sim3twoi.f
829 : : !C date: 2010-08-19
830 : : !C who: S.Kaprzyk
831 : : !C what: CASE c) : [w1<ONE<w2<w3]
832 : : !C U(1)=W(1); U(2)=CONE/W(2); U(3)=CONE/W(3)
833 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
834 : : !C [|w1-w2|<e,|w3-w2|<e];
835 : : !C [|w1-w2|>e,|w3-w2|<e]
836 : 2626200 : SUBROUTINE SIM3TWOI(U,AS,LEPS,SIM,SIMI)
837 : :
838 : : !IMPLICIT NONE
839 : : DOUBLE COMPLEX U(3)
840 : : DOUBLE PRECISION AS(3)
841 : : LOGICAL LEPS(3)
842 : : DOUBLE COMPLEX SIM, SIMI
843 : : !C
844 : : !DOUBLE COMPLEX SIM0UX0
845 : : !EXTERNAL SIM0UX0
846 : : !C
847 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
848 : : DOUBLE COMPLEX R4(3), QR4(3)
849 : : DOUBLE COMPLEX S4(3), QS4(3)
850 : : DOUBLE COMPLEX AV, BV, CV, DV, UV, G(5)
851 : : INTEGER I, K
852 : : DOUBLE COMPLEX CZERO, CONE, CIMAG, CTWO
853 : : DOUBLE PRECISION ZERO, ONE
854 : : DATA ZERO/0.0D0/, ONE/1.0D0/
855 : : !C
856 : 2626200 : CZERO = (0.0D0,0.0D0)
857 : 2626200 : CIMAG = (0.0D0,1.0D0)
858 : 2626200 : CONE = (1.0D0,0.0D0)
859 : 2626200 : CTWO = (2.0D0,0.0D0)
860 : : !C -----------------------------------------------------------------
861 : : !C - -
862 : : !C - R4(W)=1+(W-1)*(ARTH(W)/W-1)/W -
863 : : !C - R4(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
864 : : !C - -
865 : : !C -----------------------------------------------------------------
866 [ + + ]: 10504800 : DO 100 I = 1, 3
867 : 7878600 : AV = U(I)
868 : 7878600 : X0(I) = SIM0UX0(AV)
869 : : !*-ASIS
870 : : R4(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
871 : 7878600 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
872 : 2626200 : 100 CONTINUE ! end DO 350 I = 1, 3
873 : : !C -----------------------------------------------------------------
874 : : !C - The DX0(I) Contains Derivatives Of The Function X0(W) -
875 : : !C -----------------------------------------------------------------
876 [ + - + - : 2626200 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
+ + ]
877 : 513524 : CALL SIM0UDX0(U(2),X0(2),DX0)
878 : : END IF
879 : : !c DO 750 I = 1, 3, 2
880 : 2626200 : I = 3
881 : 2626200 : UV = U(I) - U(2)
882 [ + + ]: 2626200 : IF (.NOT.LEPS(I)) THEN
883 : 2112676 : QX0(I) = (X0(I)-X0(2))/UV
884 : : ELSE
885 : 513524 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UV) *UV)*UV
886 : : END IF
887 : 2626200 : AV = U(I)
888 : 2626200 : G(1) = U(I) + U(2)
889 [ + + ]: 13131000 : DO 200 K = 2, 5
890 : 10504800 : AV = AV*U(I)
891 : 10504800 : G(K) = G(K-1)*U(2) + AV
892 : 2626200 : 200 CONTINUE
893 : : !*-ASIS
894 : : QR4(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + G(3)/5.0D0 + &
895 : 2626200 : & (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
896 : : !C 750 CONTINUE ! DO .. I = 1, 3, 2
897 : 2626200 : QR4(3) = -DCMPLX(ZERO,AS(2)) + CONE - (U(3)+U(2))*R4(2) - U(3)*U(3)*QR4(3)
898 [ + + ]: 2626200 : IF (.NOT.LEPS(3)) THEN
899 : 2112676 : QR4(3) = QR4(3) + (CONE-U(3))*DCMPLX(ZERO,(AS(3)-AS(2))) /(U(3)-U(2))
900 : : END IF
901 : 2626200 : R4(2) = (CONE-U(2))*DCMPLX(ZERO,AS(2)) + CONE + U(2) - U(2)*U(2)*R4(2)
902 : : !c
903 : 2626200 : AV = (ONE+U(1))*(U(2)+CONE)*(U(3)+CONE)/((U(1)*U(2)-CONE)*(U(1)*U(3)-CONE))
904 : 2626200 : BV = (CONE-U(1))**2
905 : 2626200 : CV = CTWO - (U(2)+U(3)) - U(1)*(CONE-U(2)*U(3))
906 : 2626200 : DV = (U(1)*U(2)-CONE)*(U(3)-CONE)**2
907 : 2626200 : SIM = AV*(BV*R4(1)+CV*R4(2)+DV*QR4(3))
908 : : !c
909 : 2626200 : S4(1) = (CONE-U(1))/(CONE+U(1))*R4(1)
910 : 2626200 : S4(2) = (U(2)-CONE)/(U(2)+CONE)*R4(2)
911 : 2626200 : QS4(3) = (-S4(2)+R4(2)+(U(3)-CONE)*QR4(3))/(U(3)+CONE)
912 : 2626200 : SIMI = AV*(BV*S4(1)+CV*S4(2)+DV*QS4(3))
913 : : !c
914 : 2626200 : RETURN
915 : : END SUBROUTINE SIM3TWOI
916 : : !C
917 : : !C ----------------------------------------------------------------------
918 : : !C file: sim4onei.f
919 : : !C date: 2010-09-22
920 : : !C who: S.Kaprzyk
921 : : !C what: CASE d): [ ONE<w1<w2<w3 ]
922 : : !C U(1)=CONE/W(1); U(2)=CONE/W(2); U(3)=CONE/W(3)
923 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
924 : : !C [|w1-w2|<e,|w3-w2|<e];
925 : : !C [|w1-w2|>e,|w3-w2|<e]
926 : 0 : SUBROUTINE SIM4ONEI(U,AS,LEPS,SIM4,SIM4I)
927 : :
928 : : !IMPLICIT NONE
929 : : DOUBLE COMPLEX U(3)
930 : : DOUBLE PRECISION AS(3)
931 : : LOGICAL LEPS(3)
932 : : DOUBLE COMPLEX SIM4, SIM4I
933 : : !c
934 : : !DOUBLE COMPLEX SIM0UX0
935 : : !EXTERNAL SIM0UX0
936 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
937 : : DOUBLE COMPLEX R0(3), QR0(3)
938 : : DOUBLE COMPLEX S0(3), QS0(3)
939 : : DOUBLE COMPLEX QAS(3)
940 : : DOUBLE COMPLEX AV, BV, CV, UD, G(5)
941 : : INTEGER I, K !, N
942 : : DOUBLE COMPLEX CZERO, CONE, CTWO, CIMAG
943 : : DOUBLE PRECISION ZERO, ONE
944 : : DATA ZERO/0.0D0/, ONE/1.0D0/
945 : : !C
946 : 0 : CZERO = (0.0D0,0.0D0)
947 : 0 : CONE = (1.0D0,0.0D0)
948 : 0 : CTWO = (2.0D0,0.0D0)
949 : 0 : CIMAG = (0.0D0,1.0D0)
950 : : !C ------------------------------------------------------------------
951 : : !C R0(U)=ARTH(U)/U
952 : : !C R0(U)=1+U**2/3+U**6*X0(U)
953 : : !C ------------------------------------------------------------------
954 [ # # ]: 0 : DO 100 I = 1, 3
955 : 0 : AV = U(I)*U(I)
956 : 0 : X0(I) = SIM0UX0(U(I))
957 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
958 : : !c S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
959 : 0 : 100 CONTINUE
960 : : !C -----------------------------------------------------------------
961 : : !C - THE DX0(I) CONTAINS DERIVATIVES OF THE FUNCTION X0(U)
962 : : !C -----------------------------------------------------------------
963 [ # # # # : 0 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
# # ]
964 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
965 : : END IF
966 : 0 : DO 200 I = 1, 3, 2
967 : 0 : UD = U(I) - U(2)
968 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
969 : 0 : QX0(I) = (X0(I)-X0(2))/UD
970 : 0 : QAS(I) = (AS(I)-AS(2))/UD
971 : : ELSE
972 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UD) *UD)*UD
973 : 0 : QAS(I) = CZERO
974 : : END IF
975 : 0 : AV = U(I)
976 : 0 : G(1) = U(I) + U(2)
977 [ # # ]: 0 : DO 150 K = 2, 5
978 : 0 : AV = AV*U(I)
979 : 0 : G(K) = G(K-1)*U(2) + AV
980 : 0 : 150 CONTINUE
981 [ # # ]: 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
982 : 0 : 200 CONTINUE ! end DO ... I = 1, 3, 2
983 [ # # ]: 0 : IF (LEPS(2)) THEN
984 : 0 : QAS(2) = CZERO
985 : : !*-ASIS
986 : : QX0(2) = DX0(2)/2.0D0 + DX0(3)*(U(1)+U(3)-2.0D0*U(2))/6.0D0 + &
987 : : & DX0(4)*((U(3)-U(2))*(U(3)-U(2))+(U(1)-U(2))*(U(1)-U(2)) + &
988 : 0 : & (U(3)-U(2))*(U(1)-U(2)))/24.0D0
989 : : ELSE
990 : 0 : QAS(2) = (QAS(3)-QAS(1))/(U(3)-U(1))
991 : 0 : QX0(2) = (QX0(3)-QX0(1))/(U(3)-U(1))
992 : : END IF
993 : 0 : AV = U(1)
994 : 0 : G(1) = U(1) + U(3)
995 [ # # ]: 0 : DO 300 K = 2, 5
996 : 0 : AV = AV*U(1)
997 : 0 : G(K) = G(K-1)*U(3) + AV
998 : 0 : 300 CONTINUE
999 : : !*-ASIS
1000 : : QR0(2) = CONE/3.0D0 + (G(2)+U(2)*(U(2)+G(1)))/5.0D0 + &
1001 : : & (G(4)+U(2)*(G(3)+U(2)*(G(2)+U(2)*(G(1)+U(2)))))*X0(2)+ &
1002 : 0 : & G(5)*QX0(3) + AV*U(1)*QX0(2)
1003 : : !c
1004 : 0 : QR0(2) = CIMAG*QAS(2) + QR0(3) + U(1)*QR0(2)
1005 : 0 : QR0(3) = CIMAG*QAS(3) + R0(2) + U(3)*QR0(3)
1006 : 0 : R0(2) = CIMAG*AS(2) + U(2)*R0(2)
1007 : : !c
1008 : 0 : S0(2) = (U(2)-CONE)/(U(2)+CONE)*R0(2)
1009 : 0 : QS0(3) = (-S0(2)+R0(2)+(U(3)-CONE)*QR0(3))/(U(3)+CONE)
1010 : 0 : QS0(2) = (-QS0(3)+QR0(3)+(U(1)-CONE)*QR0(2))/(U(1)+CONE)
1011 : : !c
1012 : 0 : AV = (CONE+U(1))*(CONE+U(2))*(CONE+U(3))
1013 : 0 : BV = U(3) + U(1) - CTWO
1014 : 0 : CV = (CONE-U(1))**2
1015 : 0 : SIM4 = AV*(R0(2)+BV*QR0(3)+CV*QR0(2))
1016 : 0 : SIM4I = AV*(S0(2)+BV*QS0(3)+CV*QS0(2))
1017 : : !c
1018 : 0 : RETURN
1019 : : END SUBROUTINE SIM4ONEI
1020 : : !C
1021 : : !C ----------------------------------------------------------------------
1022 : : !C file: sim4twoi.f
1023 : : !C date: 2010-09-22
1024 : : !C who: S.Kaprzyk
1025 : : !C what: CASE d): [ ONE<w1<w2<w3 ]
1026 : : !C U(1)=CONE/W(1); U(2)=CONE/W(2); U(3)=CONE/W(3)
1027 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
1028 : : !C [|w1-w2|<e,|w3-w2|<e];
1029 : : !C [|w1-w2|>e,|w3-w2|<e]
1030 : 2078173 : SUBROUTINE SIM4TWOI(U,AS,LEPS,SIM,SIMI)
1031 : :
1032 : : !IMPLICIT NONE
1033 : : DOUBLE COMPLEX U(3)
1034 : : DOUBLE PRECISION AS(3)
1035 : : LOGICAL LEPS(3)
1036 : : DOUBLE COMPLEX SIM, SIMI
1037 : : !C
1038 : : !DOUBLE COMPLEX SIM0UX0
1039 : : !EXTERNAL SIM0UX0
1040 : : !c
1041 : : DOUBLE COMPLEX X0(3), QX0(3), DX0(4)
1042 : : DOUBLE COMPLEX R4(3), QR4(3)
1043 : : DOUBLE COMPLEX S4(3), QS4(3)
1044 : : !c DOUBLE COMPLEX RU(3), TU(3)
1045 : : DOUBLE COMPLEX QAS(3), AV, BV, CV, UV, G(5)
1046 : : INTEGER I, K
1047 : : DOUBLE COMPLEX CZERO, CONE, CTWO, CIMAG
1048 : : DOUBLE PRECISION ZERO, ONE
1049 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1050 : : !C
1051 : 2078173 : CZERO = (0.0D0,0.0D0)
1052 : 2078173 : CONE = (1.0D0,0.0D0)
1053 : 2078173 : CTWO = (2.0D0,0.0D0)
1054 : 2078173 : CIMAG = (0.0D0,1.0D0)
1055 : : !C -----------------------------------------------------------------
1056 : : !C - -
1057 : : !C - R4(U)=1+(U-1)*(ARTH(U)/U-1)/U -
1058 : : !C - R4(U)=1-U/3+U**2/3-U**3/5+U**4/5+(U-1)*U**5*X0(U) -
1059 : : !C - -
1060 : : !C -----------------------------------------------------------------
1061 [ + + ]: 8312692 : DO 100 I = 1, 3
1062 : 6234519 : AV = U(I)
1063 : 6234519 : X0(I) = SIM0UX0(AV)
1064 : : !*-ASIS
1065 : : R4(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
1066 : 6234519 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
1067 : 2078173 : 100 CONTINUE ! end DO ... I = 1, 3
1068 : : !C -----------------------------------------------------------------
1069 : : !C - The DX0(I) Contains Derivatives Of The Function X0(U) -
1070 : : !C -----------------------------------------------------------------
1071 [ + + + - : 2078173 : IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
+ + ]
1072 : 710748 : CALL SIM0UDX0(U(2),X0(2),DX0)
1073 : : END IF
1074 : : !C
1075 : 4156346 : DO 200 I = 1, 3, 2
1076 : 4156346 : UV = U(I) - U(2)
1077 [ + + ]: 4156346 : IF (LEPS(I)) THEN
1078 : 710748 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UV) *UV)*UV
1079 : 710748 : QAS(I) = CZERO
1080 : : ELSE
1081 : 3445598 : QX0(I) = (X0(I)-X0(2))/UV
1082 : 3445598 : QAS(I) = (AS(I)-AS(2))/UV
1083 : : END IF
1084 : 4156346 : AV = U(I)
1085 : 4156346 : G(1) = U(I) + U(2)
1086 [ + + ]: 20781730 : DO 150 K = 2, 5
1087 : 16625384 : AV = AV*U(I)
1088 : 16625384 : G(K) = G(K-1)*U(2) + AV
1089 : 4156346 : 150 CONTINUE
1090 : : QR4(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + G(3) &
1091 [ + + ]: 4156346 : & /5.0D0 + (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
1092 : 2078173 : 200 CONTINUE ! end DO ... I = 1, 3, 2
1093 : : !C
1094 [ - + ]: 2078173 : IF (LEPS(2)) THEN
1095 : 0 : QAS(2) = CZERO
1096 : : !*-ASIS
1097 : : QX0(2) = DX0(2)/2.0D0 + DX0(3)*(U(1)+U(3)-2.0D0*U(2))/6.0D0 + &
1098 : : & DX0(4)*((U(3)-U(2))*(U(3)-U(2))+(U(1)-U(2))*(U(1)-U(2)) + &
1099 : 0 : & (U(3)-U(2))*(U(1)-U(2)))/24.0D0
1100 : : ELSE
1101 : 2078173 : QAS(2) = (QAS(3)-QAS(1))/(U(3)-U(1))
1102 : 2078173 : QX0(2) = (QX0(3)-QX0(1))/(U(3)-U(1))
1103 : : END IF
1104 : 2078173 : AV = U(1)
1105 : 2078173 : G(1) = U(1) + U(3)
1106 [ + + ]: 10390865 : DO 300 K = 2, 5
1107 : 8312692 : AV = AV*U(1)
1108 : 8312692 : G(K) = G(K-1)*U(3) + AV
1109 : 2078173 : 300 CONTINUE
1110 : : !*-ASIS
1111 : : QR4(2) = CONE/3.0D0- (U(2)+G(1))/5.0D0 + &
1112 : : & (G(2)+U(2)*(U(2)+G(1)))/5.0D0 + &
1113 : : & (G(4)+(U(2)-CONE)*(G(3) + G(2)*U(2) + G(1)*U(2)*U(2) + &
1114 : : & U(2)*U(2)*U(2)))*X0(2) + (G(5)-G(4))*QX0(3) + &
1115 : 2078173 : & (U(1)-CONE)*AV*QX0(2)
1116 : : !C
1117 : : QR4(2) = CIMAG*(-QAS(3)+(CONE-U(1))*QAS(2)) &
1118 : 2078173 : & - (R4(2)+(U(3)+U(1))*QR4(3)+U(1)*U(1)*QR4(2))
1119 : : QR4(3) = CIMAG*(-AS(2)+(CONE-U(3))*QAS(3)) + CONE - (U(3)+U(2)) &
1120 : 2078173 : & *R4(2) - U(3)*U(3)*QR4(3)
1121 : 2078173 : R4(2) = CIMAG*(CONE-U(2))*AS(2) + CONE + U(2) - U(2)*U(2)*R4(2)
1122 : : !c
1123 : 2078173 : S4(2) = (U(2)-CONE)/(U(2)+CONE)*R4(2)
1124 : 2078173 : QS4(3) = (-S4(2)+R4(2)+(U(3)-CONE)*QR4(3))/(U(3)+CONE)
1125 : 2078173 : QS4(2) = (-QS4(3)+QR4(3)+(U(1)-CONE)*QR4(2))/(U(1)+CONE)
1126 : : !c
1127 : 2078173 : AV = (CONE+U(1))*(CONE+U(2))*(CONE+U(3))
1128 : 2078173 : BV = U(3) + U(1) - CTWO
1129 : 2078173 : CV = (CONE-U(1))**2
1130 : 2078173 : SIM = AV*(R4(2)+BV*QR4(3)+CV*QR4(2))
1131 : 2078173 : SIMI = AV*(S4(2)+BV*QS4(3)+CV*QS4(2))
1132 : : !c
1133 : 2078173 : RETURN
1134 : : END SUBROUTINE SIM4TWOI
1135 : : !C
1136 : : !C ----------------------------------------------------------------------
1137 : : !C file: sim0leps.f
1138 : : !C date: 2011-03-12
1139 : : !C who: S.Kaprzyk
1140 : : !C what: Return a proper case a), b), c) or d): see, Fig.3.1
1141 : : !C INPUT:
1142 : : !C VERM(1..4) - four complex numbers
1143 : : !C N - integer number for W(I)=(VERM(I)-VERM(N))/(VERM(I)+VERM(N))
1144 : : !C EPS - critical distance |w1-w2| etc.
1145 : : !C OUTPUT:
1146 : : !C LONE(1..4) [w1<w2<w3<ONE]; [w1<w2<ONE<w3];
1147 : : !C [w1<ONE<w2<w3]; [ONE<w1<w2<w3]
1148 : : !C LEPS(1..3) [|w1-w2|<e,|w3-w2|>e];
1149 : : !C [|w1-w2|<e,|w3-w2|<e];
1150 : : !C [|w1-w2|>e,|w3-w2|<e]
1151 : 220656384 : SUBROUTINE SIM0LEPS(VERM, N, W, AS, LONE, EPS, LEPS, iuerr)
1152 : :
1153 : : !IMPLICIT NONE
1154 : : DOUBLE COMPLEX VERM(4)
1155 : : INTEGER N
1156 : : DOUBLE COMPLEX W(3)
1157 : : DOUBLE PRECISION AS(3)
1158 : : DOUBLE PRECISION EPS
1159 : : LOGICAL LONE(4), LEPS(3)
1160 : : INTEGER iuerr
1161 : : !C
1162 : : !c DOUBLE PRECISION DLAMCH
1163 : : !c EXTERNAl DLAMCH
1164 : : !C
1165 : : LOGICAL LWONE(3), LV
1166 : : DOUBLE COMPLEX AV
1167 : : DOUBLE PRECISION AL(3), AA, AIW, OZERO
1168 : : INTEGER I, II, K
1169 : : DOUBLE PRECISION ZERO, ONE, PI
1170 : : DATA ZERO/0.0D0/,ONE/1.0D0/,PI/3.141592653589793D0/
1171 : : DATA OZERO/ 1.0D-13/
1172 : : !C
1173 : : !c OZERO = DLAMCH('e')*10
1174 [ - + ]: 220656384 : IF ((N.GT.4).OR.(N.LT.1)) THEN
1175 : 0 : WRITE(iuerr,9003) N
1176 : : 9003 FORMAT(' ***sim0leps: N =',I6,' must be 1,2,3 or 4' )
1177 : 0 : STOP ' ***sim0leps: '
1178 : : ENDIF
1179 : : !c DO 100 I = 1, 4
1180 : : !c IF (I.EQ.N) GO TO 100
1181 : : !c IF (DIMAG(VERM(N))*DIMAG(VERM(I)).LT.ZERO) THEN
1182 : : !c WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,4)
1183 : : !c 9010 FORMAT (' ***sim0leps: not signed ImgVERM()=',4(D13.6,1X))
1184 : : !c STOP ' ***sim0leps: '
1185 : : !c END IF
1186 : : !c 100 CONTINUE
1187 : : II = 0
1188 [ + + ]: 1103281920 : DO 200 I = 1, 4
1189 [ + + ]: 882625536 : IF (I.EQ.N) GO TO 200
1190 : 661969152 : II = II + 1
1191 [ + + ]: 661969152 : IF (CDABS(VERM(N)-VERM(I)).LT.CDABS(VERM(N)+VERM(I))) THEN
1192 : 644144754 : LWONE(II) = .TRUE.
1193 : 644144754 : W(II) = (VERM(N)-VERM(I))/(VERM(N)+VERM(I))
1194 : 644144754 : AIW = DIMAG(W(II))
1195 [ + + ]: 644144754 : IF (DABS(AIW).GE.OZERO) THEN
1196 : 588583794 : AS(II) = 0.5D0*PI*DSIGN(ONE,AIW)
1197 : : ELSE
1198 : 55560960 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
1199 : : END IF
1200 : : ELSE
1201 : 17824398 : LWONE(II) = .FALSE.
1202 : 17824398 : W(II) = (VERM(N)+VERM(I))/(VERM(N)-VERM(I))
1203 : 17824398 : AIW = DIMAG(W(II))
1204 [ + - ]: 17824398 : IF (DABS(AIW).GE.OZERO) THEN
1205 : 17824398 : AS(II) = -0.5D0*PI*DSIGN(ONE,AIW)
1206 : : ELSE
1207 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
1208 : : END IF
1209 : : END IF
1210 : 882625536 : AL(II) = CDABS(W(II))
1211 : 220656384 : 200 CONTINUE
1212 [ + + ]: 882625536 : DO 300 I = 1, 3
1213 [ + + ]: 1985907456 : DO 250 K = I, 3
1214 [ + + + + : 1323938304 : IF (LWONE(I).AND.LWONE(K).AND.(AL(I).LT.AL(K))) GO TO 250
+ + ]
1215 [ + + + + : 1039231323 : IF (.NOT.LWONE(I).AND..NOT.LWONE(K).AND.(AL(K).LT.AL(I))) GO TO 250
+ + ]
1216 [ + + + + : 1035147868 : IF (.NOT.LWONE(I).AND.LWONE(K).AND.(ONE.LT.AL(I)*AL(K))) GO TO 250
- + ]
1217 [ + + + + : 1035147868 : IF (LWONE(I).AND..NOT.LWONE(K).AND.(AL(I)*AL(K).LT.ONE)) GO TO 250
+ - ]
1218 : 1025626548 : AA = AL(K)
1219 : 1025626548 : AL(K) = AL(I)
1220 : 1025626548 : AL(I) = AA
1221 : 1025626548 : AA = AS(K)
1222 : 1025626548 : AS(K) = AS(I)
1223 : 1025626548 : AS(I) = AA
1224 : 1025626548 : AV = W(K)
1225 : 1025626548 : W(K) = W(I)
1226 : 1025626548 : W(I) = AV
1227 : 1025626548 : LV = LWONE(K)
1228 : 1025626548 : LWONE(K) = LWONE(I)
1229 : 1323938304 : LWONE(I) = LV
1230 : 661969152 : 250 CONTINUE
1231 : 220656384 : 300 CONTINUE
1232 : : !C
1233 : 220656384 : LONE(1) = .FALSE.
1234 : 220656384 : LONE(2) = .FALSE.
1235 : 220656384 : LONE(3) = .FALSE.
1236 : 220656384 : LONE(4) = .FALSE.
1237 [ + + + + : 220656384 : IF (LWONE(1).AND.LWONE(2).AND.LWONE(3)) THEN
+ + ]
1238 : 209614532 : LONE(1) = .TRUE.
1239 : : END IF
1240 [ + + + + : 220656384 : IF (LWONE(1).AND.LWONE(2).AND.(.NOT.LWONE(3))) THEN
+ + ]
1241 : 6337479 : LONE(2) = .TRUE.
1242 : : END IF
1243 [ + + + + : 220656384 : IF (LWONE(1).AND.(.NOT.LWONE(2)).AND.(.NOT.LWONE(3))) THEN
+ - ]
1244 : 2626200 : LONE(3) = .TRUE.
1245 : : END IF
1246 [ + + + - : 220656384 : IF ((.NOT.LWONE(1)).AND.(.NOT.LWONE(2)).AND.(.NOT.LWONE(3))) THEN
+ - ]
1247 : 2078173 : LONE(4) = .TRUE.
1248 : : END IF
1249 : : !C here are 3-cases, how close are w()
1250 : 220656384 : LEPS(1) = .FALSE.
1251 : 220656384 : LEPS(2) = .FALSE.
1252 : 220656384 : LEPS(3) = .FALSE.
1253 [ + + + + ]: 220656384 : IF ( LONE(1).OR.LONE(4) ) THEN
1254 [ + + ]: 211692705 : IF (ABS(W(1)-W(2)).LE.EPS) THEN
1255 : 23298912 : LEPS(1) = .TRUE.
1256 : : END IF
1257 [ + + ]: 211692705 : IF (ABS(W(3)-W(2)).LE.EPS) THEN
1258 : 31031632 : LEPS(3) = .TRUE.
1259 : : END IF
1260 [ + + - + ]: 211692705 : IF ((ABS(W(1)-W(2)).LE.EPS).AND.(ABS(W(3)-W(2)).LE.EPS)) THEN
1261 : 0 : LEPS(2) = .TRUE.
1262 : : END IF
1263 : : END IF
1264 : : !c
1265 [ + + ]: 220656384 : IF ( LONE(2)) THEN
1266 [ + + ]: 6337479 : IF (ABS(W(1)-W(2)).LE.EPS) THEN
1267 : 716892 : LEPS(1) = .TRUE.
1268 : : END IF
1269 : : END IF
1270 : : !c
1271 [ + + ]: 220656384 : IF ( LONE(3)) THEN
1272 [ + + ]: 2626200 : IF (ABS(W(2)-W(3)).LE.EPS) THEN
1273 : 513524 : LEPS(3) = .TRUE.
1274 : : END IF
1275 : : END IF
1276 : : !C
1277 [ + + + + : 220656384 : IF ((.NOT.LONE(1)).AND.(.NOT.LONE(2)).AND.(.NOT.LONE(3)).AND. (.NOT.LONE(4))) THEN
+ + - + ]
1278 : 0 : WRITE (iuerr,9020) (LONE(I),I=1,4)
1279 : : 9020 FORMAT ('***sim0leps: LONE()=',4(L1,1X),'not in order')
1280 : 0 : STOP '***sim0leps: '
1281 : : END IF
1282 : 220656384 : RETURN
1283 : : END SUBROUTINE SIM0LEPS
1284 : : !C
1285 : : !C file: s2d0onei.f
1286 : : !C date: 2011-04-01
1287 : : !C who: S.Kaprzyk
1288 : : !C what: Complex linear form integral over standard 2-d simplex
1289 : : !C ----------------------------------------------------
1290 : : !C - * -
1291 : : !C - * 1 -
1292 : : !C - SIM0= 2* dt1dt2 ----------------------------------
1293 : : !C - * verm(3)+(verm(1)-verm(3))*t1+.. -
1294 : : !C - * -
1295 : : !C - 0<t1<1 -
1296 : : !C ----------------------------------------------------
1297 : 0 : SUBROUTINE S2D0ONEI(SIM0, SIM0I, VERM)
1298 : :
1299 : : !IMPLICIT NONE
1300 : : INTEGER iuerr
1301 : : PARAMETER (iuerr=6)
1302 : : DOUBLE COMPLEX SIM0, SIM0I
1303 : : DOUBLE COMPLEX VERM (3)
1304 : : !C
1305 : : DOUBLE COMPLEX VERM1D(2)
1306 : : DOUBLE COMPLEX SIM, SIMI
1307 : : LOGICAL LONE(3),LEPS(1)
1308 : : !c
1309 : : DOUBLE COMPLEX U(2)
1310 : : DOUBLE PRECISION AS(2), AL(3)
1311 : : INTEGER I, I1, I2, K, N
1312 : : DOUBLE PRECISION ZERO, EPS, SMALL
1313 : : DATA EPS/1.0D-6/, SMALL/1.0D-5/
1314 : : DATA ZERO/0.0D0/
1315 : : !C
1316 [ # # ]: 0 : DO 100 I = 1, 2
1317 [ # # ]: 0 : IF (DIMAG(VERM(3))*DIMAG(VERM(I)).LT.ZERO) THEN
1318 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,3)
1319 : : 9010 FORMAT (' ***s2d0onei: not signed ImgVERM()=',3(D13.6,1X))
1320 : : !c STOP ' ***s2d0onei: '
1321 : : END IF
1322 : 0 : 100 CONTINUE
1323 : : !C
1324 [ # # ]: 0 : DO 200 I = 1, 3
1325 : 0 : AL(I) = CDABS(VERM(I))
1326 : 0 : 200 CONTINUE
1327 [ # # ]: 0 : DO 300 N = 1, 3
1328 [ # # ]: 0 : IF (AL(N).LT.SMALL) THEN
1329 : 0 : I1 = MOD(N,3) + 1
1330 : 0 : I2 = MOD(N+1,3) + 1
1331 : 0 : VERM1D(1) = VERM(I1)
1332 : 0 : VERM1D(2) = VERM(I2)
1333 : 0 : CALL S1D0ONEI(SIM,SIMI,VERM1D)
1334 : 0 : SIM0 = 2*SIM
1335 : 0 : SIM0I = SIMI - 0.5D0
1336 : 0 : RETURN
1337 : : END IF
1338 : 0 : 300 CONTINUE
1339 : : !C
1340 : 0 : N = 3
1341 [ # # ]: 0 : DO 400 I = 1, 2
1342 [ # # ]: 0 : IF (AL(I).GT.AL(N)) N = I
1343 : 0 : 400 CONTINUE
1344 : : !C Here are 3 cases, how w() are placed on complex-plane
1345 : : !C LONE(1..3) [w1<w2<ONE];[w1<ONE<w2];[ONE<w1<w2]
1346 : : !C LEPS(1) [|w1-w2|<e
1347 : : !*-ASIS
1348 : 0 : CALL S2D0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
1349 : : !c U(1) = W(1); U(2) = W(2);
1350 [ # # ]: 0 : IF (LONE(1)) THEN
1351 : 0 : CALL S2D1ONEI(U,AS,LEPS,SIM,SIMI)
1352 : : END IF
1353 : : !c U(1) = W(1); U(2) = 1/W(2);
1354 [ # # ]: 0 : IF (LONE(2)) THEN
1355 : 0 : CALL S2D2ONEI(U,AS,LEPS,SIM,SIMI)
1356 : : END IF
1357 : : !c U(1) = 1/W(1); U(2) = 1/W(2);
1358 [ # # ]: 0 : IF (LONE(3)) THEN
1359 : 0 : CALL S2D3ONEI(U,AS,LEPS,SIM,SIMI)
1360 : : END IF
1361 : : !C
1362 : 0 : SIM0 = SIM/VERM(N)
1363 : 0 : SIM0I = log(VERM(N))+0.5D0*SIMI - 1.5D0
1364 : 0 : RETURN
1365 : : END SUBROUTINE S2D0ONEI
1366 : : !C
1367 : : !C ----------------------------------------------------------------------
1368 : : !C file: s2d0twoi.f
1369 : : !C date: 2011-04-01
1370 : : !C who: S.Kaprzyk
1371 : : !C what: Complex linear form integrals over standard 2-d simplex
1372 : : !C ------------------(i=1,2)----------------------------------------
1373 : : !C * -
1374 : : !C * t_i -
1375 : : !C VERL(i)=2*dt1dt2 --------------------------------------------- -
1376 : : !C * VERM(3)+[VERM(1)-VERM(3)]*t1+... -
1377 : : !C * -
1378 : : !C 0<t1+t2<1 -
1379 : : !C -------------------(i=3)-----------------------------------------
1380 : : !C * -
1381 : : !C * 1- t1 -t2
1382 : : !C VERL(3)=2*dt1dt2 -----------------------------------------------
1383 : : !C * VERM(3)+[VERM(1)-VERM(3)]*t1+... -
1384 : : !C * -
1385 : : !C 0<t1+t2<1 -
1386 : : !C -----------------------------------------------------------------
1387 : 0 : SUBROUTINE S2D0TWOI(VERL, VERLI, VERM)
1388 : :
1389 : : !IMPLICIT NONE
1390 : : INTEGER iuerr
1391 : : PARAMETER (iuerr=6)
1392 : : DOUBLE COMPLEX VERL(3), VERLI(3), VERM(3)
1393 : : !C
1394 : : DOUBLE COMPLEX SIM, SIMI
1395 : : DOUBLE COMPLEX VERL1D(2), VERL1DI(2), VERM1D(2)
1396 : : LOGICAL LONE(3),LEPS(2)
1397 : : !c
1398 : : INTEGER I, I1, I2, K, N
1399 : : DOUBLE PRECISION AS(2), AL(3)
1400 : : DOUBLE COMPLEX U(2)
1401 : : DOUBLE COMPLEX CZERO
1402 : : DOUBLE PRECISION EPS, SMALL
1403 : : DOUBLE PRECISION ZERO
1404 : : DATA EPS/1.0D-6/, SMALL/1.0D-5/
1405 : : DATA ZERO/0.0D0/
1406 : : !C
1407 : 0 : CZERO = (0.0D0,0.0D0)
1408 [ # # ]: 0 : DO 100 I = 1, 2
1409 [ # # ]: 0 : IF (DIMAG(VERM(3))*DIMAG(VERM(I)).LT.ZERO) THEN
1410 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,3)
1411 : : 9010 FORMAT (' ***s2d0twoi: not signed ImgVERM()=',3(D13.6,1X))
1412 : 0 : STOP ' ***s2d0twoi: '
1413 : : END IF
1414 : 0 : 100 CONTINUE
1415 [ # # ]: 0 : DO 200 I = 1, 3
1416 : 0 : AL(I) = CDABS(VERM(I))
1417 : 0 : 200 CONTINUE
1418 : : !C
1419 [ # # ]: 0 : DO 300 N = 1, 3
1420 : 0 : VERL(N) = CZERO
1421 : 0 : VERLI(N) = CZERO
1422 : 0 : I1 = MOD(N,3) + 1
1423 : 0 : I2 = MOD(N+1,3) + 1
1424 [ # # ]: 0 : IF (AL(I1).LT.SMALL) THEN
1425 : 0 : VERM1D(1) = VERM(I2)
1426 : 0 : VERM1D(2) = VERM(N)
1427 : 0 : CALL S1D0TWOI(VERL1D,VERL1DI,VERM1D)
1428 : 0 : VERL(N) = VERL1D(2)
1429 : 0 : VERLI(N) = VERL1DI(2)*2/3
1430 : 0 : GO TO 300
1431 : : END IF
1432 [ # # ]: 0 : IF (AL(I2).LT.SMALL) THEN
1433 : 0 : VERM1D(1) = VERM(I1)
1434 : 0 : VERM1D(2) = VERM(N)
1435 : 0 : CALL S1D0TWOI(VERL1D,VERL1DI,VERM1D)
1436 : 0 : VERL(N) = VERL1D(2)
1437 : 0 : VERLI(N) = VERL1DI(2)*2/3
1438 : 0 : GO TO 300
1439 : : END IF
1440 [ # # ]: 0 : IF (AL(N).LT.SMALL) THEN
1441 : 0 : VERM1D(1) = VERM(I1)
1442 : 0 : VERM1D(2) = VERM(I2)
1443 : 0 : CALL S1D0ONEI(SIM,SIMI,VERM1D)
1444 : 0 : VERL(N) = SIM
1445 : 0 : VERLI(N) = SIMI/3 - 0.5D0
1446 : 0 : GO TO 300
1447 : : END IF
1448 : : !C Here are 3 cases, how w() are placed on complex-plane
1449 : : !C LONE(1..3) [w1<w2<ONE];[w1<ONE<w2];[ONE<w1<w2]
1450 : : !C LEPS(1) [|w1-w2|<e
1451 : : !*-ASIS
1452 : 0 : CALL S2D0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
1453 : : !c U(1) = W(1); U(2) = W(2)
1454 [ # # ]: 0 : IF (LONE(1)) THEN
1455 : 0 : CALL S2D1TWOI(U,AS,LEPS,SIM,SIMI)
1456 : : END IF
1457 : : !c U(1) = W(1); U(2) = CONE/W(2)
1458 [ # # ]: 0 : IF (LONE(2)) THEN
1459 : 0 : CALL S2D2TWOI(U,AS,LEPS,SIM,SIMI)
1460 : : END IF
1461 : : !c U(1) = CONE/W(1); U(2) = CONE/W(2)
1462 [ # # ]: 0 : IF (LONE(3)) THEN
1463 : 0 : CALL S2D3TWOI(U,AS,LEPS,SIM,SIMI)
1464 : : END IF
1465 : : !c
1466 : 0 : VERL(N) = SIM/VERM(N)/4
1467 : 0 : VERLI(N) = (log(VERM(N))+SIMI/4)/3 - 5.0D0/18.0D0
1468 : 0 : 300 CONTINUE ! end DO ... N = 1, 3
1469 : 0 : RETURN
1470 : : END SUBROUTINE S2D0TWOI
1471 : : !C
1472 : : !C ----------------------------------------------------------------------
1473 : : !C file: s2d1onei.f
1474 : : !C date: 2011-03-23
1475 : : !C who: S.Kaprzyk
1476 : : !C what: CASE a) : [w1<w2<ONE]
1477 : : !C U(1)=W(1); U(2)=W(2)
1478 : : !C LEPS(1) [|w1-w2|<e]
1479 : 0 : SUBROUTINE S2D1ONEI(U,AS,LEPS, SIM1, SIM1I)
1480 : :
1481 : : !IMPLICIT NONE
1482 : : DOUBLE COMPLEX U(2)
1483 : : DOUBLE PRECISION AS(2)
1484 : : LOGICAL LEPS(1)
1485 : : DOUBLE COMPLEX SIM1, SIM1I
1486 : : !C
1487 : : !DOUBLE COMPLEX SIM0UX0
1488 : : !EXTERNAL SIM0UX0
1489 : : DOUBLE COMPLEX X0(2), DX0(4), R0(2), S0(2)
1490 : : DOUBLE COMPLEX QX0(1), QR0(1), QS0(1)
1491 : : DOUBLE COMPLEX AV, BV, DU, G(5)
1492 : : INTEGER I, K
1493 : : DOUBLE COMPLEX CZERO, CONE
1494 : : DOUBLE PRECISION ZERO, ONE
1495 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1496 : :
1497 : : ABI_UNUSED((/as(1)/))
1498 : : !C
1499 : 0 : CZERO = (0.0D0,0.0D0)
1500 : 0 : CONE = (1.0D0,0.0D0)
1501 : : !C ------------------------------------------------------------------
1502 : : !C R0(U) = ARTH(U)/U
1503 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
1504 : : !C ------------------------------------------------------------------
1505 [ # # ]: 0 : DO 100 I = 1, 2
1506 : 0 : AV = U(I)*U(I)
1507 : 0 : X0(I) = SIM0UX0(U(I))
1508 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
1509 : 0 : S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
1510 : 0 : 100 CONTINUE
1511 : : !C -----------------------------------------------------------------
1512 : : !C - The DX0(I) contains derivatives of the function X0(u) -
1513 : : !C -----------------------------------------------------------------
1514 : : !c IF (LEPS(1).OR.LEPS(2).OR.LEPS(3)) THEN
1515 [ # # ]: 0 : IF (LEPS(1)) THEN
1516 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
1517 : : END IF
1518 : : !c DO 200 I = 1, 3, 2
1519 : 0 : I = 1
1520 : 0 : DU = U(I) - U(2)
1521 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
1522 : 0 : QX0(I) = (X0(I)-X0(2))/DU
1523 : : ELSE
1524 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+ DX0(4)/24.0D0*DU)*DU)*DU
1525 : : END IF
1526 : 0 : AV = U(I)
1527 : 0 : G(1) = U(I) + U(2)
1528 [ # # ]: 0 : DO 150 K = 2, 5
1529 : 0 : AV = AV*U(I)
1530 : 0 : G(K) = G(K-1)*U(2) + AV
1531 : 0 : 150 CONTINUE
1532 : 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
1533 : 0 : QS0(I) = (-S0(2)-R0(2)+(CONE-U(I))*QR0(I))/(CONE+U(I))
1534 : : !C
1535 : 0 : AV = (CONE+U(1))*(CONE+U(2))
1536 : 0 : BV = (U(2)-CONE)
1537 : 0 : SIM1 = AV*(R0(1) + QR0(1)*BV)
1538 : 0 : SIM1I = AV*(S0(1) + QS0(1)*BV)
1539 : 0 : RETURN
1540 : : END SUBROUTINE S2D1ONEI
1541 : : !C
1542 : : !C ----------------------------------------------------------------------
1543 : : !C file: s2d1twoi.f
1544 : : !C date: 2010-09-22
1545 : : !C who: S.Kaprzyk
1546 : : !C what: CASE a) : [w1<w2<ONE]
1547 : : !C U(1)=W(1); U(2)=W(2)
1548 : : !C LEPS(1) [|w1-w2|<e]
1549 : 0 : SUBROUTINE S2D1TWOI(U,AS,LEPS, SIM, SIMI)
1550 : :
1551 : : !IMPLICIT NONE
1552 : : DOUBLE COMPLEX U(2)
1553 : : DOUBLE PRECISION AS(2)
1554 : : LOGICAL LEPS(2)
1555 : : DOUBLE COMPLEX SIM, SIMI
1556 : : !C
1557 : : !DOUBLE COMPLEX SIM0UX0
1558 : : !EXTERNAL SIM0UX0
1559 : : !c
1560 : : DOUBLE COMPLEX X0(2), DX0(4), R3(2), S3(2)
1561 : : DOUBLE COMPLEX QR3(1), QX0(1)
1562 : : DOUBLE COMPLEX QS3(1)
1563 : : DOUBLE COMPLEX AV, BV, UV, G(5)
1564 : : INTEGER I, K
1565 : : DOUBLE COMPLEX CZERO, CONE, CTWO
1566 : : DOUBLE PRECISION ZERO, ONE
1567 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1568 : : !C
1569 : :
1570 : : ABI_UNUSED((/as/))
1571 : 0 : CZERO = (0.0D0,0.0D0)
1572 : 0 : CONE = (1.0D0,0.0D0)
1573 : 0 : CTWO = (2.0D0,0.0D0)
1574 : : !C -----------------------------------------------------------------
1575 : : !C - -
1576 : : !C - R3(W)=1+(W-1)*(ARTH(W)/W-1)/W -
1577 : : !C - R3(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
1578 : : !C - -
1579 : : !C -----------------------------------------------------------------
1580 [ # # ]: 0 : DO 100 I = 1, 2
1581 : 0 : AV = U(I)
1582 : 0 : X0(I) = SIM0UX0(AV)
1583 : : !*-ASIS
1584 : : R3(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
1585 : 0 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
1586 : 0 : S3(I) = (CONE-U(I))/(CONE+U(I))*R3(I)
1587 : 0 : 100 CONTINUE
1588 : : !C -----------------------------------------------------------------
1589 : : !C - The DX0(I) Contains Derivatives Of The Function X0(W) -
1590 : : !C -----------------------------------------------------------------
1591 [ # # ]: 0 : IF (LEPS(1)) THEN
1592 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
1593 : : END IF
1594 : : !C
1595 : : !c DO 200 I = 1, 3, 2
1596 : 0 : I = 1
1597 : 0 : UV = U(I) - U(2)
1598 [ # # ]: 0 : IF (LEPS(I)) THEN
1599 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+ DX0(4)/24.0D0*UV)*UV)*UV
1600 : : ELSE
1601 : 0 : QX0(I) = (X0(I)-X0(2))/UV
1602 : : END IF
1603 : 0 : AV = U(I)
1604 : 0 : G(1) = U(I) + U(2)
1605 [ # # ]: 0 : DO 150 K = 2, 5
1606 : 0 : AV = AV*U(I)
1607 : 0 : G(K) = G(K-1)*U(2) + AV
1608 : 0 : 150 CONTINUE
1609 : : QR3(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + &
1610 : 0 : & G(3)/5.0D0 + (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
1611 : 0 : QS3(I) = (-S3(2)-R3(2)+(CONE-U(I))*QR3(I))/(CONE+U(I))
1612 : : !c 200 CONTINUE ! DO 750 I = 1, 3, 2
1613 : : !c
1614 : 0 : AV = (CONE+U(1))*(CONE+U(2))
1615 : 0 : BV = U(2)-CONE
1616 : 0 : SIM = AV*(R3(1) + QR3(1)*BV)
1617 : 0 : SIMI = AV*(S3(1) + QS3(1)*BV)
1618 : 0 : RETURN
1619 : : END SUBROUTINE S2D1TWOI
1620 : : !C
1621 : : !C ----------------------------------------------------------------------
1622 : : !C file: s2d2onei.f
1623 : : !C date: 2011-03-24
1624 : : !C who: S.Kaprzyk
1625 : : !C what: CASE b) : [w1<ONE<w2]
1626 : : !C U(1)=W(1); U(2)= CONE/W(2)
1627 : : !C LEPS(1) [|w1-w2|<e]
1628 : 0 : SUBROUTINE S2D2ONEI(U,AS,LEPS, SIM2, SIM2I)
1629 : :
1630 : : !IMPLICIT NONE
1631 : : DOUBLE COMPLEX U(2)
1632 : : DOUBLE PRECISION AS(2)
1633 : : LOGICAL LEPS(1)
1634 : : DOUBLE COMPLEX SIM2, SIM2I
1635 : : !c
1636 : : !DOUBLE COMPLEX SIM0UX0
1637 : : !EXTERNAL SIM0UX0
1638 : : DOUBLE COMPLEX X0(2), R0(2), S0(2) !, DX0(4)
1639 : : !c DOUBLE COMPLEX QX0(1), QR0(1), QS0(1)
1640 : : DOUBLE COMPLEX AV, BV, CV !, G(5)
1641 : : !DOUBLE COMPLEX UD
1642 : : INTEGER I !, K, N
1643 : : DOUBLE COMPLEX CZERO, CONE, CTWO
1644 : : DOUBLE PRECISION ZERO, ONE
1645 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1646 : : !C
1647 : : ABI_UNUSED(leps)
1648 : 0 : CZERO = (0.0D0,0.0D0)
1649 : 0 : CONE = (1.0D0,0.0D0)
1650 : 0 : CTWO = (2.0D0,0.0D0)
1651 : : !C ------------------------------------------------------------------
1652 : : !C R0(U) = ARTH(U)/U
1653 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
1654 : : !C ------------------------------------------------------------------
1655 [ # # ]: 0 : DO 100 I = 1, 2
1656 : 0 : AV = U(I)*U(I)
1657 : 0 : X0(I) = SIM0UX0(U(I))
1658 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
1659 : 0 : S0(I) = (CONE-U(I))/(CONE+U(I))*R0(I)
1660 : 0 : 100 CONTINUE
1661 : : !c
1662 : 0 : AV = (CONE+U(1))*(U(2)+CONE)/(CONE-U(2)*U(1))
1663 : 0 : BV = -(U(1)-CONE)
1664 : 0 : CV = (CONE-U(2))
1665 : 0 : SIM2 = AV*(BV*R0(1)+CV*(DCMPLX(ZERO,AS(2))+U(2)*R0(2)))
1666 : 0 : CV = CV*(U(2)-CONE)/(U(2)+CONE)
1667 : 0 : SIM2I= AV*(BV*S0(1)+CV*(DCMPLX(ZERO,AS(2))+U(2)*R0(2)))
1668 : : !c
1669 : 0 : RETURN
1670 : : END SUBROUTINE S2D2ONEI
1671 : : !C
1672 : : !C ----------------------------------------------------------------------
1673 : : !C file: s2d2twoi.f
1674 : : !C date: 2011-03-26
1675 : : !C who: S.Kaprzyk
1676 : : !C what: CASE b) : [w1<ONE<w2]
1677 : : !C U(1)=W(1); U(2)= CONE/W(2)
1678 : : !C LEPS(1) [|w1-w2|<e]
1679 : 0 : SUBROUTINE S2D2TWOI(U,AS,LEPS, SIM, SIMI)
1680 : :
1681 : : !IMPLICIT NONE
1682 : : DOUBLE COMPLEX U(2)
1683 : : DOUBLE PRECISION AS(2)
1684 : : LOGICAL LEPS(1)
1685 : : DOUBLE COMPLEX SIM, SIMI
1686 : : !C
1687 : : !DOUBLE COMPLEX SIM0UX0
1688 : : !EXTERNAL SIM0UX0
1689 : : !c
1690 : : DOUBLE COMPLEX X0(2), R3(2), S3(2)
1691 : : DOUBLE COMPLEX AV, BV
1692 : : INTEGER I
1693 : : DOUBLE COMPLEX CZERO, CONE
1694 : : DOUBLE PRECISION ZERO, ONE
1695 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1696 : : !C
1697 : :
1698 : : ABI_UNUSED((/leps/))
1699 : 0 : CZERO = (0.0D0,0.0D0)
1700 : 0 : CONE = (1.0D0,0.0D0)
1701 : : !C -----------------------------------------------------------------
1702 : : !C - -
1703 : : !C - R3(W)=1+(W-1)*(ARTH(W)/W-1)/W -
1704 : : !C - R3(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
1705 : : !C - -
1706 : : !C -----------------------------------------------------------------
1707 [ # # ]: 0 : DO 100 I = 1, 2
1708 : 0 : AV = U(I)
1709 : 0 : X0(I) = SIM0UX0(AV)
1710 : : !*-ASIS
1711 : : R3(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
1712 : 0 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
1713 : 0 : 100 CONTINUE
1714 : 0 : S3(1) = (CONE-U(1))/(CONE+U(1))*R3(1)
1715 : 0 : AV = (CONE+U(1))*(U(2)+CONE)/(U(1)*U(2)-CONE)
1716 : 0 : BV = (CONE-U(2))*DCMPLX(ZERO,AS(2))+CONE+U(2)-U(2)*U(2)*R3(2)
1717 : 0 : SIM = AV*((U(1)-CONE)*R3(1) - (CONE-U(2))*BV)
1718 : 0 : BV = (U(2)-CONE)/(U(2)+CONE)*BV
1719 : 0 : SIMI= AV*((U(1)-CONE)*S3(1) - (CONE-U(2))*BV)
1720 : : !C
1721 : 0 : RETURN
1722 : : END SUBROUTINE S2D2TWOI
1723 : : !C
1724 : : !C ----------------------------------------------------------------------
1725 : : !C file: s2d3onei.f
1726 : : !C date: 2011-04-01
1727 : : !C who: S.Kaprzyk
1728 : : !C what: CASE c) : [ ONE<w1<w2]
1729 : : !C U(1)=CONE/W(1); U(2)=CONE/W(2)
1730 : : !C LEPS(1) [|w1-w2|<e]
1731 : 0 : SUBROUTINE S2D3ONEI(U,AS,LEPS,SIM3,SIM3I)
1732 : :
1733 : : !IMPLICIT NONE
1734 : : DOUBLE COMPLEX U(2)
1735 : : DOUBLE PRECISION AS(2)
1736 : : LOGICAL LEPS(1)
1737 : : DOUBLE COMPLEX SIM3, SIM3I
1738 : : !c
1739 : : !DOUBLE COMPLEX SIM0UX0
1740 : : !EXTERNAL SIM0UX0
1741 : : !c
1742 : : DOUBLE COMPLEX X0(2), QX0(1), DX0(4)
1743 : : DOUBLE COMPLEX R0(2), UR0(2), QR0(1), QUR0(1)
1744 : : DOUBLE COMPLEX US0(2), QUS0(1), QAS(1)
1745 : : DOUBLE COMPLEX AV, UD, G(5)
1746 : : INTEGER I, K
1747 : : DOUBLE COMPLEX CZERO, CONE, CIMAG
1748 : : DOUBLE PRECISION ZERO, ONE
1749 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1750 : : !C
1751 : 0 : CZERO = (0.0D0,0.0D0)
1752 : 0 : CONE = (1.0D0,0.0D0)
1753 : 0 : CIMAG = (0.0D0,1.0D0)
1754 : : !C ------------------------------------------------------------------
1755 : : !C R0(U)=ARTH(U)/U
1756 : : !C R0(U)=1+U**2/3+U**6*X0(U)
1757 : : !C ------------------------------------------------------------------
1758 [ # # ]: 0 : DO 100 I = 1, 2
1759 : 0 : AV = U(I)*U(I)
1760 : 0 : X0(I) = SIM0UX0(U(I))
1761 : 0 : R0(I) = CONE + AV*(CONE/3.0D0+AV*(CONE/5.0D0+AV*X0(I)))
1762 : 0 : UR0(I)= DCMPLX(ZERO,AS(I)) + U(I)*R0(I)
1763 : 0 : 100 CONTINUE
1764 : : !C -----------------------------------------------------------------
1765 : : !C - THE DX0(I) CONTAINS DERIVATIVES OF THE FUNCTION X0(U)
1766 : : !C -----------------------------------------------------------------
1767 [ # # ]: 0 : IF (LEPS(1)) THEN
1768 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
1769 : : END IF
1770 : : !c
1771 : 0 : I = 1
1772 : 0 : UD = U(I) - U(2)
1773 [ # # ]: 0 : IF (.NOT.LEPS(I)) THEN
1774 : 0 : QX0(I) = (X0(I)-X0(2))/UD
1775 : 0 : QAS(I) = (AS(I)-AS(2))/UD
1776 : : ELSE
1777 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0 + DX0(4)/24.0D0*UD)*UD)*UD
1778 : 0 : QAS(I) = CZERO
1779 : : END IF
1780 : 0 : AV = U(I)
1781 : 0 : G(1) = U(I) + U(2)
1782 [ # # ]: 0 : DO 150 K = 2, 5
1783 : 0 : AV = AV*U(I)
1784 : 0 : G(K) = G(K-1)*U(2) + AV
1785 : 0 : 150 CONTINUE
1786 : 0 : QR0(I) = G(1)/3.0D0 + G(3)/5.0D0 + G(5)*X0(2) + AV*U(I)*QX0(I)
1787 : : !c
1788 : 0 : QUR0(1) = CIMAG*QAS(1) + R0(2) +U(1)*QR0(1)
1789 : 0 : US0(2) = (U(2)-CONE)/(U(2)+CONE)*UR0(2)
1790 : 0 : QUS0(1) = ( -US0(2)+UR0(2)+(U(1)-CONE)*QUR0(1))/(U(1)+CONE)
1791 : : !c
1792 : 0 : AV = (U(1)+CONE)*(U(2)+CONE)
1793 : 0 : SIM3 = AV*(UR0(2) + (U(1)-CONE)*QUR0(1))
1794 : 0 : SIM3I = AV*(US0(2) + (U(1)-CONE)*QUS0(1))
1795 : 0 : RETURN
1796 : : END SUBROUTINE S2D3ONEI
1797 : : !C
1798 : : !C ----------------------------------------------------------------------
1799 : : !C file: s2d3twoi.f
1800 : : !C date: 2011-03-28
1801 : : !C who: S.Kaprzyk
1802 : : !C what: CASE c) : [ ONE<w1<w2]
1803 : : !C U(1)=CONE/W(1); U(2)=CONE/W(2)
1804 : : !C LEPS(1) [|w1-w2|<e]
1805 : 0 : SUBROUTINE S2D3TWOI(U,AS,LEPS,SIM,SIMI)
1806 : :
1807 : : !IMPLICIT NONE
1808 : : DOUBLE COMPLEX U(2)
1809 : : DOUBLE PRECISION AS(2)
1810 : : LOGICAL LEPS(1)
1811 : : DOUBLE COMPLEX SIM, SIMI
1812 : : !C
1813 : : !DOUBLE COMPLEX SIM0UX0
1814 : : !EXTERNAL SIM0UX0
1815 : : !c
1816 : : DOUBLE COMPLEX X0(2), QX0(1), DX0(4)
1817 : : DOUBLE COMPLEX R3(2), UR3(2), QR3(1), QUR3(1)
1818 : : DOUBLE COMPLEX US3(2), QUS3(1)
1819 : : DOUBLE COMPLEX QAS(1), AV, UV, G(5)
1820 : : INTEGER I, K
1821 : : DOUBLE COMPLEX CZERO, CONE, CTWO, CIMAG
1822 : : DOUBLE PRECISION ZERO, ONE
1823 : : DATA ZERO/0.0D0/, ONE/1.0D0/
1824 : : !C
1825 : 0 : CZERO = (0.0D0,0.0D0)
1826 : 0 : CONE = (1.0D0,0.0D0)
1827 : 0 : CTWO = (2.0D0,0.0D0)
1828 : 0 : CIMAG = (0.0D0,1.0D0)
1829 : : !C -----------------------------------------------------------------
1830 : : !C - -
1831 : : !C - R3(U)=1+(U-1)*(ARTH(U)/U-1)/U -
1832 : : !C - R3(U)=1-U/3+U**2/3-U**3/5+U**4/5+(U-1)*U**5*X0(U) -
1833 : : !C - -
1834 : : !C -----------------------------------------------------------------
1835 [ # # ]: 0 : DO 100 I = 1, 2
1836 : 0 : AV = U(I)
1837 : 0 : X0(I) = SIM0UX0(AV)
1838 : : !*-ASIS
1839 : : R3(I) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
1840 : 0 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(I)))))
1841 : 0 : UR3(I)=(CONE-U(I))*DCMPLX(ZERO,AS(I))+CONE+U(I)-U(I)*U(I)*R3(I)
1842 : 0 : 100 CONTINUE ! end DO ... I = 1, 2
1843 : : !C -----------------------------------------------------------------
1844 : : !C - The DX0(I) Contains Derivatives Of The Function X0(U) -
1845 : : !C -----------------------------------------------------------------
1846 [ # # ]: 0 : IF (LEPS(1)) THEN
1847 : 0 : CALL SIM0UDX0(U(2),X0(2),DX0)
1848 : : END IF
1849 : : !C
1850 : 0 : I = 1
1851 : 0 : UV = U(I) - U(2)
1852 [ # # ]: 0 : IF (LEPS(I)) THEN
1853 : 0 : QX0(I) = DX0(1) + (DX0(2)/2.0D0+(DX0(3)/6.0D0+DX0(4)/24.0D0*UV)*UV)*UV
1854 : 0 : QAS(I) = CZERO
1855 : : ELSE
1856 : 0 : QX0(I) = (X0(I)-X0(2))/UV
1857 : 0 : QAS(I) = (AS(I)-AS(2))/UV
1858 : : END IF
1859 : 0 : AV = U(I)
1860 : 0 : G(1) = U(I) + U(2)
1861 [ # # ]: 0 : DO 150 K = 2, 5
1862 : 0 : AV = AV*U(I)
1863 : 0 : G(K) = G(K-1)*U(2) + AV
1864 : 0 : 150 CONTINUE
1865 : : QR3(I) = -CONE/3.0D0 + G(1)/3.0D0 - G(2)/5.0D0 + &
1866 : 0 : & G(3)/5.0D0 + (G(5)-G(4))*X0(2) + (U(I)-CONE)*AV*QX0(I)
1867 : : QUR3(1) = -DCMPLX(ZERO,AS(2))+CIMAG*(CONE-U(1))*QAS(1)+ CONE - &
1868 : 0 : & (U(1)+U(2))*R3(2)-U(1)*U(1)*QR3(1)
1869 : : !C
1870 : 0 : US3(2) = (U(2)-CONE)/(U(2)+CONE)*UR3(2)
1871 : 0 : QUS3(1)=( -US3(2)+UR3(2)+(U(1)-CONE)*QUR3(1))/(U(1)+CONE)
1872 : : !c
1873 : 0 : AV = (U(1)+CONE)*(U(2)+CONE)
1874 : 0 : SIM = AV*(UR3(2) + (U(1)-CONE)*QUR3(1))
1875 : 0 : SIMI= AV*(US3(2) + (U(1)-CONE)*QUS3(1))
1876 : : !c
1877 : 0 : RETURN
1878 : : END SUBROUTINE S2D3TWOI
1879 : : !C
1880 : : !C ----------------------------------------------------------------------
1881 : : !C file: s2d0leps.f
1882 : : !C date: 2011-04-02
1883 : : !C who: S.Kaprzyk
1884 : : !C what: Return a proper CASE:
1885 : : !C a) [w1<w2<ONE]; b) [w1<ONE<w2]; c) [ONE<w1<w2]
1886 : : !C INPUT:
1887 : : !C VERM(3) - three complex numbers
1888 : : !C N - integer number for W(I)=(VERM(I)-VERM(N))/(VERM(I)+VERM(N))
1889 : : !C EPS - critical distance |w1-w2| etc.
1890 : : !C OUTPUT:
1891 : : !C LONE(3) [w1<w2<ONE]; [w1<ONE<w2]; [ONE<w1<w2]
1892 : : !C LEPS(1) [|w1-w2|<eps]
1893 : 0 : SUBROUTINE S2D0LEPS(VERM, N, W, AS, LONE, EPS, LEPS, iuerr)
1894 : :
1895 : : !IMPLICIT NONE
1896 : : DOUBLE COMPLEX VERM(3)
1897 : : INTEGER N
1898 : : DOUBLE COMPLEX W(2)
1899 : : DOUBLE PRECISION AS(2)
1900 : : DOUBLE PRECISION EPS
1901 : : LOGICAL LONE(3), LEPS(1)
1902 : : INTEGER iuerr
1903 : : !C
1904 : : !c DOUBLE PRECISION DLAMCH
1905 : : !c EXTERNAl DLAMCH
1906 : : !C
1907 : : LOGICAL LWONE(2), LV
1908 : : DOUBLE COMPLEX AV
1909 : : DOUBLE PRECISION AL(2), AA, AIW, OZERO
1910 : : INTEGER I, II, K
1911 : : DOUBLE COMPLEX CZERO, CONE
1912 : : DOUBLE PRECISION ZERO, ONE, PI
1913 : : DATA ZERO/0.0D0/,ONE/1.0D0/,PI/3.141592653589793D0/
1914 : : DATA OZERO/ 1.0D-13/
1915 : : !c OZERO = DLAMCH('e')*10
1916 : 0 : CZERO = (0.0D0,0.0D0)
1917 : 0 : CONE = (1.0D0,0.0D0)
1918 [ # # ]: 0 : IF ((N.GT.3).OR.(N.LT.1)) THEN
1919 : 0 : WRITE (iuerr,9010) N
1920 : : 9010 FORMAT (' ***s2d0leps: N =',I6,' must be 1, or 2')
1921 : 0 : STOP ' ***s2d0leps: '
1922 : : END IF
1923 : : II = 0
1924 [ # # ]: 0 : DO 200 I = 1, 3
1925 [ # # ]: 0 : IF (I.EQ.N) GO TO 200
1926 : 0 : II = II + 1
1927 [ # # ]: 0 : IF (CDABS(VERM(N)-VERM(I)).LT.CDABS(VERM(N)+VERM(I))) THEN
1928 : 0 : LWONE(II) = .TRUE.
1929 : 0 : W(II) = (VERM(N)-VERM(I))/(VERM(N)+VERM(I))
1930 : 0 : AIW = DIMAG(W(II))
1931 [ # # ]: 0 : IF (DABS(AIW).GE.OZERO) THEN
1932 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,AIW)
1933 : : ELSE
1934 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
1935 : : END IF
1936 : : ELSE
1937 : 0 : LWONE(II) = .FALSE.
1938 : 0 : W(II) = (VERM(N)+VERM(I))/(VERM(N)-VERM(I))
1939 : 0 : AIW = DIMAG(W(II))
1940 [ # # ]: 0 : IF (DABS(AIW).GE.OZERO) THEN
1941 : 0 : AS(II) = -0.5D0*PI*DSIGN(ONE,AIW)
1942 : : ELSE
1943 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
1944 : : END IF
1945 : : END IF
1946 : 0 : AL(II) = CDABS(W(II))
1947 : 0 : 200 CONTINUE
1948 [ # # ]: 0 : DO 300 I = 1, 2
1949 [ # # ]: 0 : DO 250 K = I, 2
1950 [ # # # # : 0 : IF (LWONE(I).AND.LWONE(K).AND.(AL(I).LT.AL(K))) GO TO 250
# # ]
1951 [ # # # # : 0 : IF (.NOT.LWONE(I).AND..NOT.LWONE(K).AND.(AL(K).LT.AL(I))) GO TO 250
# # ]
1952 [ # # # # : 0 : IF (.NOT.LWONE(I).AND.LWONE(K).AND.(ONE.LT.AL(I)*AL(K))) GO TO 250
# # ]
1953 [ # # # # : 0 : IF (LWONE(I).AND..NOT.LWONE(K).AND.(AL(I)*AL(K).LT.ONE)) GO TO 250
# # ]
1954 : 0 : AA = AL(K)
1955 : 0 : AL(K) = AL(I)
1956 : 0 : AL(I) = AA
1957 : 0 : AA = AS(K)
1958 : 0 : AS(K) = AS(I)
1959 : 0 : AS(I) = AA
1960 : 0 : AV = W(K)
1961 : 0 : W(K) = W(I)
1962 : 0 : W(I) = AV
1963 : 0 : LV = LWONE(K)
1964 : 0 : LWONE(K) = LWONE(I)
1965 : 0 : LWONE(I) = LV
1966 : 0 : 250 CONTINUE
1967 : 0 : 300 CONTINUE
1968 : : !C
1969 : 0 : LONE(1) = .FALSE.
1970 : 0 : LONE(2) = .FALSE.
1971 : 0 : LONE(3) = .FALSE.
1972 [ # # # # ]: 0 : IF (LWONE(1).AND.LWONE(2)) THEN
1973 : 0 : LONE(1) = .TRUE.
1974 : : END IF
1975 [ # # # # ]: 0 : IF (LWONE(1).AND..NOT.LWONE(2)) THEN
1976 : 0 : LONE(2) = .TRUE.
1977 : : END IF
1978 [ # # # # ]: 0 : IF (.NOT.LWONE(1).AND..NOT.LWONE(2)) THEN
1979 : 0 : LONE(3) = .TRUE.
1980 : : END IF
1981 : : !C here are cases, how close are w()
1982 : 0 : LEPS(1) = .FALSE.
1983 [ # # # # : 0 : IF ( (LONE(1).OR.LONE(3)).AND. (CDABS(W(1)-W(2)).LT.EPS) ) LEPS(1)=.TRUE.
# # ]
1984 : : !c
1985 [ # # # # : 0 : IF ((.NOT.LONE(1)).AND.(.NOT.LONE(2)).AND.(.NOT.LONE(3))) THEN
# # ]
1986 : 0 : WRITE (iuerr,9030) (LONE(I),I=1,3)
1987 : : 9030 FORMAT ('***s2d0leps: LONE()=',3(L1,1X),'not in order')
1988 : 0 : STOP '***s2d0leps: '
1989 : : END IF
1990 : : !C
1991 : 0 : RETURN
1992 : : END SUBROUTINE S2D0LEPS
1993 : : !C s2d0leps()
1994 : : !C file: s1d0onei.f
1995 : : !C date: 2011-03-20
1996 : : !C who: S.Kaprzyk
1997 : : !C what: Complex linear form integral over standard 1-d simplex
1998 : : !C ----------------------------------------------------
1999 : : !C - * -
2000 : : !C - * 1 -
2001 : : !C - SIM0= * dt1 ---------------------------------- -
2002 : : !C - * verm(2)+(verm(1)-verm(2))*t1 -
2003 : : !C - * -
2004 : : !C - 0<t1<1 -
2005 : : !C ----------------------------------------------------
2006 : 0 : SUBROUTINE S1D0ONEI(SIM0, SIM0I, VERM)
2007 : :
2008 : : !IMPLICIT NONE
2009 : : INTEGER iuerr
2010 : : PARAMETER (iuerr=6)
2011 : : DOUBLE COMPLEX SIM0, SIM0I
2012 : : DOUBLE COMPLEX VERM(*)
2013 : : !C
2014 : : DOUBLE COMPLEX SIM, SIMI
2015 : : LOGICAL LONE(2),LEPS(1)
2016 : : !c
2017 : : DOUBLE COMPLEX U(1)
2018 : : DOUBLE PRECISION AS(1)
2019 : : INTEGER I, K, N
2020 : : DOUBLE COMPLEX CZERO, CONE
2021 : : DOUBLE PRECISION ZERO, EPS
2022 : : DATA EPS/1.0D-6/
2023 : : DATA ZERO/0.0D0/
2024 : : !C
2025 : 0 : CZERO = (0.0D0,0.0D0)
2026 : 0 : CONE = (1.0D0,0.0D0)
2027 : 0 : N = 2
2028 [ # # ]: 0 : DO 100 I = 1, 1
2029 [ # # ]: 0 : IF (DIMAG(VERM(N))*DIMAG(VERM(I)).LT.ZERO) THEN
2030 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,2)
2031 : : 9010 FORMAT (' ***s1d0onei: not signed ImgVERM()=',4(D13.6,1X))
2032 : : !c STOP ' ***s1d0onei: '
2033 : : END IF
2034 : 0 : 100 CONTINUE
2035 [ # # ]: 0 : DO 101 I = 1, 1
2036 [ # # ]: 0 : IF (CDABS(VERM(I)).GT.CDABS(VERM(N))) N = I
2037 : 0 : 101 CONTINUE
2038 : : !C Here are 2 cases, how w() are placed on complex-plane
2039 : : !C LONE(1..2) [w1<ONE]; [ONE<w1]
2040 : : !C LEPS(1) null
2041 : : !*-ASIS
2042 : 0 : CALL S1D0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
2043 : : !c U(1) = W(1);
2044 [ # # ]: 0 : IF (LONE(1)) THEN
2045 : 0 : CALL S1D1ONEI(U,AS,LEPS,SIM,SIMI)
2046 : : END IF
2047 : : !c U(1) = CONE/W(1)
2048 [ # # ]: 0 : IF (LONE(2)) THEN
2049 : 0 : CALL S1D2ONEI(U,AS,LEPS,SIM,SIMI)
2050 : : END IF
2051 : : !C
2052 : 0 : SIM0 = SIM/VERM(N)
2053 : 0 : SIM0I= log(VERM(N)) + SIMI - CONE
2054 : 0 : RETURN
2055 : : END SUBROUTINE S1D0ONEI
2056 : : !C
2057 : : !C ----------------------------------------------------------------------
2058 : : !C file: s1d0twoi.f
2059 : : !C date: 2011-03-24
2060 : : !C who: S.Kaprzyk
2061 : : !C what: Complex linear form integrals over standard 1d-simplex
2062 : : !C ------------------(i=1)--------------------------------------
2063 : : !C * -
2064 : : !C * t_i -
2065 : : !C VERL(i)= *dt1 ------------------------------------------ -
2066 : : !C * VERM(2)+[VERM(1)-VERM(2)]*t1 -
2067 : : !C * -
2068 : : !C 0<t1<1 -
2069 : : !C -------------------(i=2)-------------------------------------
2070 : : !C * -
2071 : : !C * 1- t1 -
2072 : : !C VERL(2)= *dt1 ------------------------------------------ -
2073 : : !C * VERM(2)+[VERM(1)-VERM(2)]*t1 -
2074 : : !C * -
2075 : : !C 0<t1<1 -
2076 : : !C -------------------------------------------------------------
2077 : 0 : SUBROUTINE S1D0TWOI(VERL, VERLI, VERM)
2078 : :
2079 : : !IMPLICIT NONE
2080 : : INTEGER iuerr
2081 : : PARAMETER (iuerr=6)
2082 : : DOUBLE COMPLEX VERL(*), VERLI(*), VERM(*)
2083 : : !C
2084 : : DOUBLE COMPLEX SIM, SIMI
2085 : : LOGICAL LONE(2),LEPS(1)
2086 : : !c
2087 : : INTEGER I, K, N
2088 : : DOUBLE PRECISION AS(1)
2089 : : DOUBLE COMPLEX U(1)
2090 : : DOUBLE COMPLEX CZERO
2091 : : DOUBLE PRECISION EPS
2092 : : DOUBLE PRECISION ZERO
2093 : : DATA EPS/1.0D-6/
2094 : : DATA ZERO/0.0D0/
2095 : : !C
2096 : 0 : CZERO = (0.0D0,0.0D0)
2097 [ # # ]: 0 : DO 50 I = 1, 1
2098 [ # # ]: 0 : IF (DIMAG(VERM(2))*DIMAG(VERM(I)).LT.ZERO) THEN
2099 [ # # # # ]: 0 : WRITE (iuerr,9010) (DIMAG(VERM(K)),K=1,2)
2100 : : 9010 FORMAT (' ***s1d0twoi: not signed ImgVERM()=',2(D13.6,1X))
2101 : 0 : STOP ' ***s1dt0woi: '
2102 : : END IF
2103 : 0 : 50 CONTINUE
2104 [ # # ]: 0 : DO 100 N = 1, 2
2105 : 0 : VERL(N) = CZERO
2106 : : !C Here are 2 cases, how w() are placed on complex-plane
2107 : : !C LONE(1..2) [w1<ONE]; [ONE<w1]
2108 : : !C LEPS(1) null
2109 : : !*-ASIS
2110 : 0 : CALL S1D0LEPS(VERM, N, U, AS, LONE, EPS, LEPS, iuerr)
2111 : : !c U(1) = W(1);
2112 [ # # ]: 0 : IF (LONE(1)) THEN
2113 : 0 : CALL S1D1TWOI(U,AS,LEPS,SIM,SIMI)
2114 : : END IF
2115 : : !c U(1) = CONE/W(1);
2116 [ # # ]: 0 : IF (LONE(2)) THEN
2117 : 0 : CALL S1D2TWOI(U,AS,LEPS,SIM,SIMI)
2118 : : END IF
2119 : : !c
2120 : 0 : VERL(N) = 0.50D0*SIM/VERM(N)
2121 : 0 : VERLI(N) = 0.50D0*log(VERM(N)) + 0.25D0*SIMI -0.25D0
2122 : 0 : 100 CONTINUE ! end DO .. N = 1, 2
2123 : 0 : RETURN
2124 : : END SUBROUTINE S1D0TWOI
2125 : : !C
2126 : : !C ----------------------------------------------------------------------
2127 : : !C file: s1d1onei.f
2128 : : !C date: 2010-09-22
2129 : : !C who: S.Kaprzyk
2130 : : !C what: CASE a) : [w1<ONE]
2131 : : !C U(1)=W(1)
2132 : : !C LEPS() null
2133 : 0 : SUBROUTINE S1D1ONEI(U,AS,LEPS, SIM1, SIM1I)
2134 : :
2135 : : !IMPLICIT NONE
2136 : : DOUBLE COMPLEX U(1)
2137 : : DOUBLE PRECISION AS(1)
2138 : : LOGICAL LEPS(1)
2139 : : DOUBLE COMPLEX SIM1, SIM1I
2140 : : !C
2141 : : !DOUBLE COMPLEX SIM0UR0
2142 : : !EXTERNAL SIM0UR0
2143 : : DOUBLE COMPLEX R0(1)
2144 : : DOUBLE COMPLEX CZERO, CONE
2145 : : DOUBLE PRECISION ZERO, ONE
2146 : : DATA ZERO/0.0D0/, ONE/1.0D0/
2147 : : !C
2148 : : ABI_UNUSED(as)
2149 : : ABI_UNUSED(leps)
2150 : 0 : CZERO = (0.0D0,0.0D0)
2151 : 0 : CONE = (1.0D0,0.0D0)
2152 : : !C ------------------------------------------------------------------
2153 : : !C R0(U) = ARTH(U)/U
2154 : : !C R0(U) = 1+U**2/3+U**6*X0(U)
2155 : : !C ------------------------------------------------------------------
2156 : 0 : R0(1) = SIM0UR0(U(1))
2157 : 0 : SIM1 = (CONE+U(1))*R0(1)
2158 : 0 : SIM1I = (CONE-U(1))*R0(1)
2159 : 0 : RETURN
2160 : : END SUBROUTINE S1D1ONEI
2161 : : !C
2162 : : !C ----------------------------------------------------------------------
2163 : : !C file: s1d1twoi.f
2164 : : !C date: 2011-03-25
2165 : : !C who: S.Kaprzyk
2166 : : !C what: CASE a) : [w1<ONE]
2167 : : !C U(1)=W(1)
2168 : : !C LEPS() null
2169 : 0 : SUBROUTINE S1D1TWOI(U,AS,LEPS, SIM, SIMI)
2170 : :
2171 : : !IMPLICIT NONE
2172 : : DOUBLE COMPLEX U(1)
2173 : : DOUBLE PRECISION AS(1)
2174 : : LOGICAL LEPS(1)
2175 : : DOUBLE COMPLEX SIM, SIMI
2176 : : !C
2177 : : !DOUBLE COMPLEX SIM0UX0
2178 : : !EXTERNAL SIM0UX0
2179 : : !c
2180 : : DOUBLE COMPLEX X0(1), R2(1), S2(1)
2181 : : DOUBLE COMPLEX AV
2182 : : DOUBLE COMPLEX CZERO, CONE
2183 : : DOUBLE PRECISION ZERO, ONE
2184 : : DATA ZERO/0.0D0/, ONE/1.0D0/
2185 : : !C
2186 : : ABI_UNUSED(as)
2187 : : ABI_UNUSED(leps)
2188 : 0 : CZERO = (0.0D0,0.0D0)
2189 : 0 : CONE = (1.0D0,0.0D0)
2190 : : !C -----------------------------------------------------------------
2191 : : !C - -
2192 : : !C - R2(W)=1+(W-1)*(ARTH(W)/W-1)/W=[1+(W-1)*R0(W)]/W -
2193 : : !C - R2(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
2194 : : !C - -
2195 : : !C -----------------------------------------------------------------
2196 : 0 : AV = U(1)
2197 : 0 : X0(1) = SIM0UX0(AV)
2198 : : !*-ASIS
2199 : : R2(1) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
2200 : 0 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(1)))))
2201 : 0 : S2(1) = (CONE-U(1))/(CONE+U(1))*R2(1)
2202 : 0 : SIM = (CONE+U(1))*R2(1)
2203 : 0 : SIMI = (CONE+U(1))*S2(1)
2204 : 0 : RETURN
2205 : : END SUBROUTINE S1D1TWOI
2206 : : !C
2207 : : !C ----------------------------------------------------------------------
2208 : : !C file: s1d2onei.f
2209 : : !C date: 2011-03-20
2210 : : !C who: S.Kaprzyk
2211 : : !C what: CASE b) : [ ONE<w1]
2212 : : !C U(1) = CONE/W(1)
2213 : : !C LEPS(1) null
2214 : 0 : SUBROUTINE S1D2ONEI(U,AS,LEPS,SIM2,SIM2I)
2215 : :
2216 : : !IMPLICIT NONE
2217 : : DOUBLE COMPLEX U(1)
2218 : : DOUBLE PRECISION AS(1)
2219 : : LOGICAL LEPS(1)
2220 : : DOUBLE COMPLEX SIM2, SIM2I
2221 : : !c
2222 : : !DOUBLE COMPLEX SIM0UR0
2223 : : !EXTERNAL SIM0UR0
2224 : : DOUBLE COMPLEX R0(1)
2225 : : DOUBLE COMPLEX CZERO, CONE, CIMAG
2226 : : DOUBLE PRECISION ZERO, ONE
2227 : : DATA ZERO/0.0D0/, ONE/1.0D0/
2228 : : !C
2229 : : ABI_UNUSED(leps)
2230 : 0 : CZERO = (0.0D0,0.0D0)
2231 : 0 : CONE = (1.0D0,0.0D0)
2232 : 0 : CIMAG = (0.0D0,1.0D0)
2233 : : !C ------------------------------------------------------------------
2234 : : !C R0(U)=ARTH(U)/U
2235 : : !C R0(U)=1+U**2/3+U**6*X0(U)
2236 : : !C ------------------------------------------------------------------
2237 : 0 : R0(1) = SIM0UR0(U(1))
2238 : 0 : SIM2 = (U(1)+CONE)*(CIMAG*AS(1)+U(1)*R0(1))
2239 : 0 : SIM2I= (U(1)-CONE)*(CIMAG*AS(1)+U(1)*R0(1))
2240 : : !c
2241 : 0 : RETURN
2242 : : END SUBROUTINE S1D2ONEI
2243 : : !C
2244 : : !C ----------------------------------------------------------------------
2245 : : !C s1d2onei()
2246 : : !C file: s1d2twoi.f
2247 : : !C date: 2011-03-25
2248 : : !C who: S.Kaprzyk
2249 : : !C what: CASE b) : [ ONE<w1]
2250 : : !C U(1) = CONE/W(1)
2251 : : !C LEPS(1) null
2252 : 0 : SUBROUTINE S1D2TWOI(U,AS,LEPS, SIM, SIMI)
2253 : :
2254 : : !IMPLICIT NONE
2255 : : DOUBLE COMPLEX U(1)
2256 : : DOUBLE PRECISION AS(1)
2257 : : LOGICAL LEPS(1)
2258 : : DOUBLE COMPLEX SIM, SIMI
2259 : : !C
2260 : : !DOUBLE COMPLEX SIM0UX0
2261 : : !EXTERNAL SIM0UX0
2262 : : !c
2263 : : DOUBLE COMPLEX X0(2), R2(2), S2(2)
2264 : : DOUBLE COMPLEX AV
2265 : : !INTEGER I
2266 : : DOUBLE COMPLEX CZERO, CONE
2267 : : DOUBLE PRECISION ZERO, ONE
2268 : : DATA ZERO/0.0D0/, ONE/1.0D0/
2269 : : !C
2270 : : ABI_UNUSED(leps)
2271 : 0 : CZERO = (0.0D0,0.0D0)
2272 : 0 : CONE = (1.0D0,0.0D0)
2273 : : !C -----------------------------------------------------------------
2274 : : !C - -
2275 : : !C - R2(W)=1+(W-1)*(ARTH(W)/W-1)/W -
2276 : : !C - R2(W)=1-W/3+W**2/3-W**3/5+W**4/5+(W-1)*W**5*X0(W) -
2277 : : !C - -
2278 : : !C -----------------------------------------------------------------
2279 : 0 : AV = U(1)
2280 : 0 : X0(1) = SIM0UX0(AV)
2281 : : !*-ASIS
2282 : : R2(1) = CONE + AV*(-CONE/3.0D0 + AV*(CONE/3.0D0 + &
2283 : 0 : & AV*((-0.2D0,0.0D0)+AV*((0.2D0,0.0D0)+AV*(AV-CONE)*X0(1)))))
2284 : : !C
2285 : 0 : R2(1)= (CONE-U(1))*DCMPLX(ZERO,AS(1))+CONE+U(1)-U(1)*U(1)*R2(1)
2286 : 0 : S2(1) = (U(1)-CONE)/(U(1)+CONE)*R2(1)
2287 : 0 : SIM = (U(1)+CONE)*R2(1)
2288 : 0 : SIMI = (U(1)+CONE)*S2(1)
2289 : : !C
2290 : 0 : RETURN
2291 : : END SUBROUTINE S1D2TWOI
2292 : : !C
2293 : : !C ----------------------------------------------------------------------
2294 : : !C file: s1d0leps.f
2295 : : !C date: 2011-04-02
2296 : : !C who: S.Kaprzyk
2297 : : !C what: Return a proper case:
2298 : : !C a) [w1<ONE]; b) [ONE<w1]
2299 : : !C INPUT:
2300 : : !C VERM(1,2) - two complex numbers
2301 : : !C N - integer number for W(I)=(VERM(I)-VERM(N))/(VERM(I)+VERM(N))
2302 : : !C EPS - critical distance
2303 : : !C OUTPUT:
2304 : : !C LONE(2) [w1<ONE]; [ONE<w1]
2305 : : !C LEPS(1) null
2306 : 0 : SUBROUTINE S1D0LEPS(VERM, N, W, AS, LONE, EPS, LEPS, iuerr)
2307 : :
2308 : : !IMPLICIT NONE
2309 : : DOUBLE COMPLEX VERM(2)
2310 : : INTEGER N
2311 : : DOUBLE COMPLEX W(1)
2312 : : DOUBLE PRECISION AS(1)
2313 : : DOUBLE PRECISION EPS
2314 : : LOGICAL LONE(2), LEPS(1)
2315 : : INTEGER iuerr
2316 : : !C
2317 : : !c DOUBLE PRECISION DLAMCH
2318 : : !c EXTERNAl DLAMCH
2319 : : !C
2320 : : LOGICAL LWONE(1)
2321 : : DOUBLE PRECISION AL(1), AIW, OZERO
2322 : : INTEGER I, II !, K
2323 : : DOUBLE COMPLEX CZERO, CONE
2324 : : DOUBLE PRECISION ZERO, ONE, PI
2325 : : DATA ZERO/0.0D0/,ONE/1.0D0/,PI/3.141592653589793D0/
2326 : : DATA OZERO/ 1.0D-13/
2327 : : ABI_UNUSED(eps)
2328 : : !c OZERO = DLAMCH('e')*10
2329 : 0 : CZERO = (0.0D0,0.0D0)
2330 : 0 : CONE = (1.0D0,0.0D0)
2331 [ # # ]: 0 : IF ((N.GT.2).OR.(N.LT.1)) THEN
2332 : 0 : WRITE (iuerr,9010) N
2333 : : 9010 FORMAT (' ***s1d0leps: N =',I6,' must be 1, or 2')
2334 : 0 : STOP ' ***s1d0leps: '
2335 : : END IF
2336 : : !C
2337 : : II = 0
2338 [ # # ]: 0 : DO 200 I = 1, 2
2339 [ # # ]: 0 : IF (I.EQ.N) GO TO 200
2340 : 0 : II = II + 1
2341 [ # # ]: 0 : IF (CDABS(VERM(N)-VERM(I)).LT.CDABS(VERM(N)+VERM(I))) THEN
2342 : 0 : LWONE(II) = .TRUE.
2343 : 0 : W(II) = (VERM(N)-VERM(I))/(VERM(N)+VERM(I))
2344 : 0 : AIW = DIMAG(W(II))
2345 [ # # ]: 0 : IF (DABS(AIW).GE.OZERO) THEN
2346 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,AIW)
2347 : : ELSE
2348 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
2349 : : END IF
2350 : : ELSE
2351 : 0 : LWONE(II) = .FALSE.
2352 : 0 : W(II) = (VERM(N)+VERM(I))/(VERM(N)-VERM(I))
2353 : 0 : AIW = DIMAG(W(II))
2354 [ # # ]: 0 : IF (DABS(AIW).GE.OZERO) THEN
2355 : 0 : AS(II) = -0.5D0*PI*DSIGN(ONE,AIW)
2356 : : ELSE
2357 : 0 : AS(II) = 0.5D0*PI*DSIGN(ONE,DREAL(VERM(I)-VERM(N)))
2358 : : END IF
2359 : : END IF
2360 : 0 : AL(II) = CDABS(W(II))
2361 : 0 : 200 CONTINUE
2362 : : !C
2363 : 0 : LONE(1) = .FALSE.
2364 : 0 : LONE(2) = .FALSE.
2365 [ # # ]: 0 : IF (LWONE(1)) THEN
2366 : 0 : LONE(1) = .TRUE.
2367 : : END IF
2368 [ # # ]: 0 : IF (.NOT.LWONE(1)) THEN
2369 : 0 : LONE(2) = .TRUE.
2370 : : END IF
2371 : : !C here are cases, how close are w()
2372 : 0 : LEPS(1) = .FALSE.
2373 : : !c
2374 [ # # # # ]: 0 : IF ((.NOT.LONE(1)).AND.(.NOT.LONE(2))) THEN
2375 : 0 : WRITE (iuerr,9030) (LONE(I),I=1,2)
2376 : : 9030 FORMAT ('***s1d0leps: LONE()=',2(L1,1X),'not in order')
2377 : 0 : STOP '***s1d0leps: '
2378 : : END IF
2379 : : !c
2380 : 0 : RETURN
2381 : : END SUBROUTINE S1D0LEPS
2382 : : !C
2383 : :
2384 : : end module m_simtet
2385 : : !!***
|