program subroutinesAndFunctions

!//////////////////////////////////////////////////////////
!/ Este programa ejemplifica el uso de subrutinas         /
!/ y funciones. La funcion externa fun_cosineAngleVectors /
!/ esta en la carpeta fortran/subs (en introcomp-files)   / 
!//////////////////////////////////////////////////////////

real   ::  x1,y1,z1 
real   ::  x2,y2,z2
real   ::  absoluteValue , cosine


x1 = 1.0
y1 = 2.8
z1 = 5.6

x2 = 1.0
y2 = 3.1
z2 = 8.0

 call sub_absoluteValueVector(x1,y1,z1,absoluteValue)
write(*,*),"el modulo es",absoluteValue 

absoluteValue = fun_absoluteValueVector(x1,y1,z1)
write(*,*),"el modulo es",absoluteValue

 cosine = fun_cosineAngleVectors(x1,y1,z1,x2,y2,z2)
 write(*,*),"el coseno del angulo entre los vectores es:",cosine



! ============ SUBRUTINAS Y FUNCIONES ===============================
contains
subroutine sub_absoluteValueVector(xcoord,ycoord,zcoord,value)

   ! --- DECLARACIONES ---
   ! Declaraciones de Entrada
   real , intent(in)  :: xcoord,ycoord,zcoord
   
   ! Declaraciones de Salida
   real , intent(out) :: value
   ! --- FIN DECLARACIONES ---
   

   value = sqrt(xcoord**2+ycoord**2+zcoord**2)
end subroutine sub_absoluteValueVector

! ---------------------------------------------------------------------

real function fun_absoluteValueVector(xcoord,ycoord,zcoord)

   fun_absoluteValueVector = sqrt(xcoord**2+ycoord**2+zcoord**2)

end function fun_absoluteValueVector

! ---------------------------------------------------------------------

end program subroutinesAndFunctions