Compute, the outward normal of a triangle. To work nodes must be in counter-clockwise order. For STL this is the standard. It follows pg 136 of Jiri Blaze, CFD Principles and Applications
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_triangle_type), | intent(inout) | :: | triangle |
subroutine tem_evaluate_normal_triangle(triangle)
!--------------------------------------------------------------------------!
type(tem_triangle_type), intent(inout) :: triangle
!--------------------------------------------------------------------------!
real(kind=rk) :: outward_vector(3), delta_x(3), delta_y(3), delta_z(3)
real(kind=rk) :: magnitude_normal
!--------------------------------------------------------------------------!
! Eq.s 5.8
delta_x(1) = ( triangle%nodes(1,1) - triangle%nodes(1,2) ) * &
& ( triangle%nodes(2,1) + triangle%nodes(2,2) )
delta_x(2) = ( triangle%nodes(1,2) - triangle%nodes(1,3) ) * &
& ( triangle%nodes(2,2) + triangle%nodes(2,3) )
delta_x(3) = ( triangle%nodes(1,3) - triangle%nodes(1,1) ) * &
& ( triangle%nodes(2,3) + triangle%nodes(2,1) )
delta_y(1) = ( triangle%nodes(2,1) - triangle%nodes(2,2) ) * &
& ( triangle%nodes(3,1) + triangle%nodes(3,2) )
delta_y(2) = ( triangle%nodes(2,2) - triangle%nodes(2,3) ) * &
& ( triangle%nodes(3,2) + triangle%nodes(3,3) )
delta_y(3) = ( triangle%nodes(2,3) - triangle%nodes(2,1) ) * &
& ( triangle%nodes(3,3) + triangle%nodes(3,1) )
delta_z(1) = ( triangle%nodes(3,1) - triangle%nodes(3,2) ) * &
& ( triangle%nodes(1,1) + triangle%nodes(1,2) )
delta_z(2) = ( triangle%nodes(3,2) - triangle%nodes(3,3) ) * &
& ( triangle%nodes(1,2) + triangle%nodes(1,3) )
delta_z(3) = ( triangle%nodes(3,3) - triangle%nodes(3,1) ) * &
& ( triangle%nodes(1,3) + triangle%nodes(1,1) )
! Eq.s 5.9
outward_vector(1) = 0.5_rk * ( delta_y(1) + delta_y(2) + delta_y(3) )
outward_vector(2) = 0.5_rk * ( delta_z(1) + delta_z(2) + delta_z(3) )
outward_vector(3) = 0.5_rk * ( delta_x(1) + delta_x(2) + delta_x(3) )
! Eq.s 5.12
magnitude_normal = sqrt( outward_vector(1)**2 + outward_vector(2)**2 + outward_vector(3)**2 )
! normalization of the outward_vector
triangle%normal(:) = outward_vector(:) / magnitude_normal
end subroutine tem_evaluate_normal_triangle