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