LCOV - code coverage report
Current view: top level - num/test/src - test_bobyqa.f90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 82.0 % 50 41
Test Date: 2025-05-08 18:23:42 Functions: 66.7 % 3 2

            Line data    Source code
       1              : module test_bobyqa
       2              : 
       3              :    use num_def
       4              :    use num_lib
       5              : 
       6              :    implicit none
       7              : 
       8              :    integer :: nfcn
       9              : 
      10              : contains
      11              : 
      12            1 :    subroutine do_test_bobyqa
      13          303 :       real(dp), dimension(100) :: X, XL, XU
      14        10001 :       real(dp), dimension(10000) :: W
      15              :       real(dp), parameter :: max_valid_value = 1d99
      16              :       real(dp), parameter :: BDL = -1.0d0
      17              :       real(dp), parameter :: BDU = 1.0d0
      18            1 :       real(dp) :: f, RHOBEG, RHOend
      19              :       integer :: I, IPRINT, N, MAXFUN, NPT
      20              :       include 'formats'
      21            1 :       IPRINT = 0
      22            1 :       MAXFUN = 5000
      23            1 :       RHOend = 1.0D-6
      24            4 :       do N = 2, 6, 2
      25            3 :          nfcn = 0
      26            3 :          NPT = 2*N + 1
      27           15 :          do I = 1, N
      28           12 :             XL(I) = BDL
      29           12 :             XU(I) = BDU
      30           15 :             X(I) = DBLE(I)/DBLE(N + 1)
      31              :          end do
      32            3 :          RHOBEG = 0.2D0*X(1)
      33            3 :          write (*, '(4X,A,I2,A,I3)') 'test BOBYQA with N =', N, ' and NPT =', NPT
      34            3 :          call BOBYQA(N, NPT, X, XL, XU, RHOBEG, RHOend, IPRINT, MAXFUN, W, CALFUN, max_valid_value)
      35            3 :          call calfun(n, x, f)
      36              :          !write(*,2) 'f', nfcn, f
      37            4 :          if (abs(f) > 1d-10) write (*, *) 'failed in test of BOBYQA: min f', f
      38              :       end do
      39            1 :    end subroutine do_test_bobyqa
      40              : 
      41          293 :    subroutine calfun(n, x, f)
      42              :       use const_def, only: dp
      43              :       integer, intent(in) :: n
      44              :       real(dp), intent(in) :: x(*)
      45              :       real(dp), intent(out) :: f
      46              :       integer :: i, j, iw, np
      47          293 :       real(dp) :: sum
      48              : 
      49        32523 :       real(dp) :: Y(10, 10)
      50          293 :       nfcn = nfcn + 1
      51         1743 :       do J = 1, N
      52         1450 :          Y(1, J) = 1.0D0
      53         1743 :          Y(2, J) = 2.0D0*X(J) - 1.0D0
      54              :       end do
      55         1450 :       do I = 2, N
      56         7740 :       do J = 1, N
      57         7447 :          Y(I + 1, J) = 2.0D0*Y(2, J)*Y(I, J) - Y(I - 1, J)
      58              :       end do
      59              :       end do
      60          293 :       F = 0.0D0
      61          293 :       NP = N + 1
      62          293 :       IW = 1
      63         2036 :       do I = 1, NP
      64              :          SUM = 0.0D0
      65        10933 :          do J = 1, N
      66        10933 :             SUM = SUM + Y(I, J)
      67              :          end do
      68         1743 :          SUM = SUM/DBLE(N)
      69         1743 :          IF (IW > 0) SUM = SUM + 1.0D0/DBLE(I*I - 2*I)
      70         1743 :          IW = -IW
      71         2036 :          F = F + SUM*SUM
      72              :       end do
      73          293 :       RETURN
      74              :    end subroutine CALFUN
      75              : 
      76            0 :    subroutine xCALFUN(N, X, F)
      77              :       integer, intent(in) :: n
      78              :       real(dp), intent(in) :: x(*)
      79              :       real(dp), intent(out) :: f
      80              :       integer :: i, j
      81            0 :       real(dp) :: temp
      82            0 :       F = 0.0D0
      83            0 :       do I = 4, N, 2
      84            0 :       do J = 2, I - 2, 2
      85            0 :          TEMP = (X(I - 1) - X(J - 1))**2 + (X(I) - X(J))**2
      86            0 :          TEMP = DMAX1(TEMP, 1.0D-6)
      87            0 :          F = F + 1.0D0/DSQRT(TEMP)
      88              :       end do
      89              :       end do
      90            0 :       RETURN
      91              :    end subroutine xCALFUN
      92              : 
      93              : end module test_bobyqa
        

Generated by: LCOV version 2.0-1