Trigonometric functions (i.e., sin(x) and cos(x))
use radian for their argument. Using modules, you can design your own
trigonometric functions that use degree. Write a module that contains
functions for converting radian to degree and degree to radian and
sin(x) and cos(x) with arguments in degree rather than
in radian.
! --------------------------------------------------------------------
! MODULE MyTrigonometricFunctions:
! This module provides the following functions and constants
! (1) RadianToDegree() - converts its argument in radian to
! degree
! (2) DegreeToRadian() - converts its argument in degree to
! radian
! (3) MySIN() - compute the sine of its argument in
! degree
! (4) MyCOS() - compute the cosine of its argument
! in degree
! --------------------------------------------------------------------
MODULE MyTrigonometricFunctions
IMPLICIT NONE
REAL, PARAMETER :: PI = 3.1415926 ! some constants
REAL, PARAMETER :: Degree180 = 180.0
REAL, PARAMETER :: R_to_D = Degree180/PI
REAL, PARAMETER :: D_to_R = PI/Degree180
CONTAINS
! --------------------------------------------------------------------
! FUNCTION RadianToDegree():
! This function takes a REAL argument in radian and converts it to
! the equivalent degree.
! --------------------------------------------------------------------
REAL FUNCTION RadianToDegree(Radian)
IMPLICIT NONE
REAL, INTENT(IN) :: Radian
RadianToDegree = Radian * R_to_D
END FUNCTION RadianToDegree
! --------------------------------------------------------------------
! FUNCTION DegreeToRadian():
! This function takes a REAL argument in degree and converts it to
! the equivalent radian.
! --------------------------------------------------------------------
REAL FUNCTION DegreeToRadian(Degree)
IMPLICIT NONE
REAL, INTENT(IN) :: Degree
DegreeToRadian = Degree * D_to_R
END FUNCTION DegreeToRadian
! --------------------------------------------------------------------
! FUNCTION MySIN():
! This function takes a REAL argument in degree and computes its
! sine value. It does the computation by converting its argument to
! radian and uses Fortran's sin().
! --------------------------------------------------------------------
REAL FUNCTION MySIN(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
MySIN = SIN(DegreeToRadian(x))
END FUNCTION MySIN
! --------------------------------------------------------------------
! FUNCTION MySIN():
! This function takes a REAL argument in degree and computes its
! cosine value. It does the computation by converting its argument to
! radian and uses Fortran's cos().
! --------------------------------------------------------------------
REAL FUNCTION MyCOS(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
MyCOS = COS(DegreeToRadian(x))
END FUNCTION MyCOS
END MODULE MyTrigonometricFunctions
Click here to download this program.
Here is the main program:
! -----------------------------------------------------------------------
! PROGRAM TrigonFunctTest:
! This program tests the functions in module MyTrigonometricFunctions.
! Module MyTrigonometricFunctions is stored in file trigon.f90.
! Functions in that module use degree rather than radian. This program
! displays the sin(x) and cos(x) values for x=-180, -170, ..., 0, 10, 20,
! 30, ..., 160, 170 and 180. Note that the sin() and cos() function
! in module MyTrigonometricFunctions are named MySIN(x) and MyCOS(x).
! -----------------------------------------------------------------------
PROGRAM TrigonFunctTest
USE MyTrigonometricFunctions ! use a module
IMPLICIT NONE
REAL :: Begin = -180.0 ! initial value
REAL :: Final = 180.0 ! final value
REAL :: Step = 10.0 ! step size
REAL :: x
WRITE(*,*) 'Value of PI = ', PI
WRITE(*,*)
x = Begin ! start with 180 degree
DO
IF (x > Final) EXIT ! if x > 180 degree, EXIT
WRITE(*,*) 'x = ', x, 'deg sin(x) = ', MySIN(x), &
' cos(x) = ', MyCOS(x)
x = x + Step ! advance x
END DO
END PROGRAM TrigonFunctTest
Click here to download this program.
Value of PI = 3.1415925 x = -180.deg sin(x) = 8.742277657E-8 cos(x) = -1. x = -170.deg sin(x) = -0.173648298 cos(x) = -0.98480773 x = -160.deg sin(x) = -0.342020214 cos(x) = -0.939692616 x = -150.deg sin(x) = -0.50000006 cos(x) = -0.866025388 x = -140.deg sin(x) = -0.642787635 cos(x) = -0.766044438 x = -130.deg sin(x) = -0.766044438 cos(x) = -0.642787635 x = -120.deg sin(x) = -0.866025388 cos(x) = -0.50000006 x = -110.deg sin(x) = -0.939692616 cos(x) = -0.342020124 x = -100.deg sin(x) = -0.98480773 cos(x) = -0.173648193 x = -90.deg sin(x) = -1. cos(x) = -4.371138829E-8 x = -80.deg sin(x) = -0.98480773 cos(x) = 0.173648223 x = -70.deg sin(x) = -0.939692616 cos(x) = 0.342020154 x = -60.deg sin(x) = -0.866025448 cos(x) = 0.49999997 x = -50.deg sin(x) = -0.766044438 cos(x) = 0.642787635 x = -40.deg sin(x) = -0.642787576 cos(x) = 0.766044438 x = -30.deg sin(x) = -0.5 cos(x) = 0.866025388 x = -20.deg sin(x) = -0.342020124 cos(x) = 0.939692616 x = -10.deg sin(x) = -0.173648179 cos(x) = 0.98480773 x = 0.E+0deg sin(x) = 0.E+0 cos(x) = 1. x = 10.deg sin(x) = 0.173648179 cos(x) = 0.98480773 x = 20.deg sin(x) = 0.342020124 cos(x) = 0.939692616 x = 30.deg sin(x) = 0.5 cos(x) = 0.866025388 x = 40.deg sin(x) = 0.642787576 cos(x) = 0.766044438 x = 50.deg sin(x) = 0.766044438 cos(x) = 0.642787635 x = 60.deg sin(x) = 0.866025448 cos(x) = 0.49999997 x = 70.deg sin(x) = 0.939692616 cos(x) = 0.342020154 x = 80.deg sin(x) = 0.98480773 cos(x) = 0.173648223 x = 90.deg sin(x) = 1. cos(x) = -4.371138829E-8 x = 100.deg sin(x) = 0.98480773 cos(x) = -0.173648193 x = 110.deg sin(x) = 0.939692616 cos(x) = -0.342020124 x = 120.deg sin(x) = 0.866025388 cos(x) = -0.50000006 x = 130.deg sin(x) = 0.766044438 cos(x) = -0.642787635 x = 140.deg sin(x) = 0.642787635 cos(x) = -0.766044438 x = 150.deg sin(x) = 0.50000006 cos(x) = -0.866025388 x = 160.deg sin(x) = 0.342020214 cos(x) = -0.939692616 x = 170.deg sin(x) = 0.173648298 cos(x) = -0.98480773 x = 180.deg sin(x) = -8.742277657E-8 cos(x) = -1.
or with the following that generates an executable called tri-test:f90 trigon.f90 tri-test.90
f90 trigon.f90 tri-test.90 -o tri-test