@@ -47,14 +47,14 @@ subroutine run_test_for_size(n, passed)
4747 integer :: incy
4848
4949 ! Derivative variables
50+ complex (4 ), dimension (n) :: cx_d
5051 complex (4 ), dimension (n) :: cy_d
5152 complex (4 ) :: ca_d
52- complex (4 ), dimension (n) :: cx_d
5353
5454 ! Array restoration and derivative storage
55+ complex (4 ), dimension (n) :: cx_orig, cx_d_orig
5556 complex (4 ), dimension (n) :: cy_orig, cy_d_orig
5657 complex (4 ) :: ca_orig, ca_d_orig
57- complex (4 ), dimension (n) :: cx_orig, cx_d_orig
5858 real (4 ) :: temp_re, temp_im ! For complex random init
5959 integer :: i, j
6060
@@ -80,24 +80,24 @@ subroutine run_test_for_size(n, passed)
8080 do i = 1 , n
8181 call random_number (temp_re)
8282 call random_number (temp_im)
83- cy_d (i) = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
83+ cx_d (i) = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
8484 end do
85- call random_number (temp_re)
86- call random_number (temp_im)
87- ca_d = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
8885 do i = 1 , n
8986 call random_number (temp_re)
9087 call random_number (temp_im)
91- cx_d (i) = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
88+ cy_d (i) = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
9289 end do
90+ call random_number (temp_re)
91+ call random_number (temp_im)
92+ ca_d = cmplx (temp_re * 2.0 - 1.0 , temp_im * 2.0 - 1.0 , kind= 4 )
9393
9494 ! Store _orig and _d_orig
95+ cx_d_orig = cx_d
9596 cy_d_orig = cy_d
9697 ca_d_orig = ca_d
97- cx_d_orig = cx_d
98+ cx_orig = cx
9899 cy_orig = cy
99100 ca_orig = ca
100- cx_orig = cx
101101
102102 write (* ,* ) ' Testing CAXPY (n =' , n, ' )'
103103 cy_orig = cy
@@ -108,17 +108,17 @@ subroutine run_test_for_size(n, passed)
108108 write (* ,* ) ' Function calls completed successfully'
109109
110110 ! Numerical differentiation check
111- call check_derivatives_numerically(n, nsize, cy_orig, ca_orig, cx_orig , cy_d_orig, ca_d_orig, cx_d_orig , cy_d, passed)
111+ call check_derivatives_numerically(n, nsize, cx_orig, cy_orig, ca_orig, cx_d_orig , cy_d_orig, ca_d_orig, cy_d, passed)
112112
113113 end subroutine run_test_for_size
114114
115- subroutine check_derivatives_numerically (n , nsize , cy_orig , ca_orig , cx_orig , cy_d_orig , ca_d_orig , cx_d_orig , cy_d , passed )
115+ subroutine check_derivatives_numerically (n , nsize , cx_orig , cy_orig , ca_orig , cx_d_orig , cy_d_orig , ca_d_orig , cy_d , passed )
116116 implicit none
117117 integer , intent (in ) :: n
118118 integer , intent (in ) :: nsize
119+ complex (4 ), intent (in ) :: cx_orig(n), cx_d_orig(n)
119120 complex (4 ), intent (in ) :: cy_orig(n), cy_d_orig(n)
120121 complex (4 ), intent (in ) :: ca_orig, ca_d_orig
121- complex (4 ), intent (in ) :: cx_orig(n), cx_d_orig(n)
122122 complex (4 ), intent (in ) :: cy_d(n)
123123 logical , intent (out ) :: passed
124124
@@ -129,9 +129,9 @@ subroutine check_derivatives_numerically(n, nsize, cy_orig, ca_orig, cx_orig, cy
129129 logical :: has_large_errors
130130 complex (4 ), dimension (n) :: cy_forward, cy_backward
131131 integer :: i, j
132+ complex (4 ), dimension (n) :: cx
132133 complex (4 ), dimension (n) :: cy
133134 complex (4 ) :: ca
134- complex (4 ), dimension (n) :: cx
135135
136136 max_error = 0.0e0
137137 has_large_errors = .false.
@@ -140,16 +140,16 @@ subroutine check_derivatives_numerically(n, nsize, cy_orig, ca_orig, cx_orig, cy
140140 write (* ,* ) ' Step size h =' , h
141141
142142 ! Forward perturbation: f(x + h)
143+ cx = cx_orig + h * cx_d_orig
143144 cy = cy_orig + h * cy_d_orig
144145 ca = ca_orig + h * ca_d_orig
145- cx = cx_orig + h * cx_d_orig
146146 call caxpy(nsize, ca, cx, 1 , cy, 1 )
147147 cy_forward = cy
148148
149149 ! Backward perturbation: f(x - h)
150+ cx = cx_orig - h * cx_d_orig
150151 cy = cy_orig - h * cy_d_orig
151152 ca = ca_orig - h * ca_d_orig
152- cx = cx_orig - h * cx_d_orig
153153 call caxpy(nsize, ca, cx, 1 , cy, 1 )
154154 cy_backward = cy
155155
@@ -178,7 +178,7 @@ subroutine check_derivatives_numerically(n, nsize, cy_orig, ca_orig, cx_orig, cy
178178 write (* ,* ) ' Tolerance thresholds: rtol=1.0e-3, atol=1.0e-3'
179179 passed = .not. has_large_errors
180180 if (has_large_errors) then
181- write (* ,* ) ' FAIL: Large errors detected in derivatives ( outside tolerance) '
181+ write (* ,* ) ' FAIL: Derivatives are outside tolerance'
182182 else
183183 write (* ,* ) ' PASS: Derivatives are within tolerance (rtol + atol)'
184184 end if
0 commit comments