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.
Source Code
SUBROUTINE RayNormal(t,phi,c,e1,e2)! Computes the ray normalsREAL(KIND=8),INTENT(IN)::t(3)! tangent vector (NOT normalized)REAL(KIND=8),INTENT(IN)::phi! torsionREAL(KIND=8),INTENT(IN)::c! sound speedREAL(KIND=8),INTENT(OUT)::e1(3),e2(3)! ray unit normalsRL=NORM2(t(1:2))IF(phi/=0)THEN! e1e1(1)=(c*t(1)*t(3)*COS(phi)+t(2)*SIN(phi))/RLe1(2)=(c*t(2)*t(3)*COS(phi)-t(1)*SIN(phi))/RLe1(3)=-c*RL*COS(phi)! e2e2(1)=(c*t(1)*t(3)*SIN(phi)-t(2)*COS(phi))/RLe2(2)=(c*t(2)*t(3)*SIN(phi)+t(1)*COS(phi))/RLe2(3)=-c*RL*SIN(phi)ELSEe1=[c*t(1)*t(3)/RL,c*t(2)*t(3)/RL,-c*RL]e2=[-t(2)/RL,t(1)/RL,0.0D0]END IF RETURN END SUBROUTINE RayNormal