!-------------------------------------------------------------------------- !-------------------------------------------------------------------------- !-------------------------------------------------------------------------- !+ ! function angle_between_polars (polar1, polar2) result (angle) ! ! Finds the angle between two polar vectors. ! Note: This function is currently not being used by anything. ! ! Input: ! polar1 -- (spin_polar_struct) ! polar2 -- (spin_polar_struct) ! ! Output: ! angle -- Real(rp): Angle between the polar vectors !- function angle_between_polars (polar1, polar2) result (angle) use equal_mod, dummy_except => angle_between_polars implicit none type (spin_polar_struct), intent(in) :: polar1, polar2 real(rp) :: angle, arg real(rp) :: vec1(3), vec2(3) ! Round-off can make |arg| > 1 so need to check this. vec1 = polar_to_vec (polar1) vec2 = polar_to_vec (polar2) arg = dot_product(vec1,vec2) / (sqrt(dot_product(vec1, vec1) * dot_product(vec2,vec2))) if (arg >= 1) then angle = 0 elseif (arg <= -1) then angle = pi else angle = acos(arg) endif end function angle_between_polars