A subroutine to test the angle_between function in tem_polygon_material_test.
The only argument will be true, if all calculations result in the expected values.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
logical, | intent(out) | :: | success |
Indicator if all tests were computed correctly. |
subroutine tem_polygon_material_test_angle(success)
! ----------------------------------------------------------------------
!> Indicator if all tests were computed correctly.
logical, intent(out) :: success
! ----------------------------------------------------------------------
real(kind=rk) :: res
! ----------------------------------------------------------------------
success = .true.
write(*,*) 'Checking angle computation between two 2D Vectors:'
! 90 degree
res = angle_between( va_x = 1.0_rk, va_y = 0.0_rk, &
& vb_x = 0.0_rk, vb_y = 1.0_rk )
if (res < 0.5_rk*tolm*PI .or. res > 0.5_rk*tolp*PI) success = .false.
write(*,*) ' 90 deg:', res
! 45 degree
res = angle_between( va_x = 10.0_rk, va_y = 0.0_rk, &
& vb_x = 2.0_rk, vb_y = 2.0_rk )
if (res < 0.25_rk*tolm*PI .or. res > 0.25_rk*tolp*PI) success = .false.
write(*,*) ' 45 deg:', res
! -90 degree
res = angle_between( va_x = 10.0_rk, va_y = 0.0_rk, &
& vb_x = 0.0_rk, vb_y = -3.0_rk )
if (res < -0.5_rk*tolp*PI .or. res > -0.5_rk*tolm*PI) success = .false.
write(*,*) ' -90 deg:', res
! -135 degree
res = angle_between( va_x = 10.0_rk, va_y = 0.0_rk, &
& vb_x = -3.0_rk, vb_y = -3.0_rk )
if (res < -0.75_rk*tolp*PI .or. res > -0.75_rk*tolm*PI) success = .false.
write(*,*) '-135 deg:', res
! 120 degree
res = angle_between( va_x = 0.0_rk, va_y = 4.5_rk, &
& vb_x = -sqrt(3.0_rk), vb_y = -1.0_rk )
if ( res < 2.0_rk/3.0_rk*tolm*PI &
& .or. res > 2.0_rk/3.0_rk*tolp*PI) success = .false.
write(*,*) ' 120 deg:', res
! 0 degree
res = angle_between( va_x = 3.0_rk, va_y = -1.0_rk, &
& vb_x = 3.0_rk, vb_y = -1.0_rk )
if (res > epsilon(1.0_rk)) success = .false.
write(*,*) ' 0 deg:', res
! 180 degree
res = angle_between( va_x = -1.0_rk, va_y = -1.0_rk, &
& vb_x = 1.0_rk, vb_y = 1.0_rk )
if (res > epsilon(1.0_rk)) success = .false.
write(*,*) ' 180 deg:', res
! 0 Vector
res = angle_between( va_x = 1.0_rk, va_y = -1.0_rk, &
& vb_x = 0.0_rk, vb_y = 0.0_rk )
if (res > epsilon(1.0_rk)) success = .false.
write(*,*) 'Zero vec:', res
end subroutine tem_polygon_material_test_angle