1#if defined(__T_C_G0)
2  USE T_C_G0
3#endif
4#if defined(__YUKAWA)
5  USE yukawa
6#endif
7  IMPLICIT NONE
8  INTEGER :: Nder
9  REAL(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: ref
10  REAL(KIND=dp) :: t1,t2,R,T
11  REAL(KIND=dp), ALLOCATABLE :: RES(:),MAXERR(:)
12  INTEGER :: I,J,Nline
13  LOGICAL :: use_gamma
14
15
16#if defined(__T_C_G0)
17  OPEN(12,FILE="T_C_G.dat")
18#endif
19#if defined(__YUKAWA)
20  OPEN(12,FILE="yukawa.dat")
21#endif
22
23  Nder=MIN(9,nderiv_max)
24  CALL INIT(Nder,12)
25  CLOSE(12)
26  ALLOCATE(RES(0:Nder),MAXERR(0:Nder))
27
28  Nline=0
29  OPEN(13,FILE="history.dat")
30  DO
31     READ(13,*,END=999) R,T
32     Nline=Nline+1
33  ENDDO
34999 CONTINUE
35  REWIND(13)
36  ALLOCATE(ref(-2:Nder,Nline))
37  DO I=1,Nline
38     READ(13,*) ref(:,I)
39  ENDDO
40  CLOSE(13)
41
42  maxerr=0
43  write(6,'(A)')       "List of points with largest errors so far"
44  write(6,'(A)')       "-----------------------------------------"
45  CALL CPU_TIME(T1)
46  DO I=1,Nline
47   R=ref(-2,I)
48   T=ref(-1,I)
49#if defined(__T_C_G0)
50   CALL T_C_G0_n(RES,use_gamma,R,T,Nder)
51   ! reference points can be outside the expected domain due to
52   ! the fact that they are rounded from arbitrary precision to
53   ! double precision
54   IF (.NOT.use_gamma) THEN
55     IF (ANY(RES.NE.0)) THEN
56       IF (ANY((abs(RES-REF(0:Nder,I)))>(maxerr))) THEN
57         maxerr=MAX(maxerr,abs(RES-REF(0:Nder,I)))
58         write(6,*) R,T,RES(0:Nder),REF(0:Nder,I)
59       ENDIF
60     ENDIF
61   ELSE
62     ! write(6,*) "oops",R,T,R**2-11*R-T
63   ENDIF
64#endif
65#if defined(__YUKAWA)
66   CALL yukawa_n(RES,R,T,Nder)
67   IF (ANY((abs(RES-REF(0:Nder,I)))>(maxerr))) THEN
68     maxerr=MAX(maxerr,abs(RES-REF(0:Nder,I)))
69     write(6,*) R,T,RES(0:Nder),REF(0:Nder,I)
70   ENDIF
71#endif
72  ENDDO
73  CALL CPU_TIME(T2)
74  write(6,'(A)')       "Summary of generation"
75  write(6,'(A)')       "---------------------"
76  write(6,'(A,I8)')    "Degree of the interpolation:                 ",degree
77  write(6,'(A,E8.3)')  "Target absolute error:                       ",target_error
78  write(6,'(A,I8)')    "Number of domains after bisection:           ",patches
79  write(6,'(A,I8)')    "Table size for polynomial coefficients [Kb]: ",(8*patches*(Nder+1)*(degree+1)*(degree+2)/2)/(1024)
80  write(6,'(A,I8)')    "Number of reference points:                  ",Nline
81  write(6,'(A,I8)')    "Tested up to derivative:                     ",Nder
82  write(6,'(A,F8.3)')  "Time for evaluation [s]:                     ",t2-t1
83  write(6,'(A,E8.3)')  "Maximum error over all reference points:     ",MAXVAL(maxerr)
84  write(6,'(A)')       "Maximum error per derivative:"
85  write(6,'(5E18.4)')  maxerr
86
87END
88
89