public function intersect_RayTriangle(line, triangle, intersect_p) result(isIntersect)

Function computes intersection of ray with triangle

http://geomalgorithms.com/a06-_intersect-2.html
intersect_RayTriangle(): intersect a ray with a 3D triangle
Input: a ray R, and a triangle T
Output: *I = intersection point (when it exists)
Return: -1 = triangle is degenerate (a segment or point)
0 = disjoint (no intersect)
1 = intersect in unique point I1
2 = are in the same planeint
todo: when line lies in triangle, need to treat properly

Nodes of different colours represent the following:

Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.