MODULE trig ! the following are simple trigometric functions with ! arguments in degrees - they exit are intrinsic functions ! on Compact (Didital) compliers and so are not needed. ! However they are not part of standard fortran95. IMPLICIT NONE PUBLIC :: SIN_D, COS_D, TAN_D, ASIN_D, ACOS_D, ATAN_D, ATAN2_D PRIVATE :: SIND4, COSD4, TAND4, ASIND4, ACOSD4, ATAND4, ATAN2d4 PRIVATE :: SIND8, COSD8, TAND8, ASIND8, ACOSD8, ATAND8, ATAN2d8 REAL (KIND=4), PARAMETER, PRIVATE :: pi4 = 3.141592653589793238_4 REAL (KIND=8), PARAMETER, PRIVATE :: pi8 = 3.141592653589793238_8 INTERFACE SIN_D MODULE PROCEDURE SIND4,SIND8 END INTERFACE SIN_D INTERFACE COS_D MODULE PROCEDURE COSD4,COSD8 END INTERFACE COS_D INTERFACE TAN_D MODULE PROCEDURE TAND4,TAND8 END INTERFACE TAN_D INTERFACE ASIN_D MODULE PROCEDURE ASIND4,ASIND8 END INTERFACE ASIN_D INTERFACE ACOS_D MODULE PROCEDURE ACOSD4,ACOSD8 END INTERFACE ACOS_D INTERFACE ATAN_D MODULE PROCEDURE ATAND4,ATAND8 END INTERFACE ATAN_D INTERFACE ATAN2_D MODULE PROCEDURE ATAN2D4,ATAN2D8 END INTERFACE ATAN2_D CONTAINS ELEMENTAL FUNCTION SIND4(theta) RESULT(funct_out) REAL (kind=4),INTENT(IN) :: theta REAL (KIND=4) :: funct_out funct_out = SIN(theta*pi4/180.0) RETURN END FUNCTION SIND4 ELEMENTAL FUNCTION SIND8(theta) RESULT(funct_out) REAL (kind=8),INTENT(IN) :: theta REAL (KIND=8) :: funct_out funct_out = SIN(theta*pi8/180.0) RETURN END FUNCTION SIND8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION COSD4(theta) RESULT(funct_out) REAL (kind=4),INTENT(IN) :: theta REAL (KIND=4) :: funct_out funct_out = COS(theta*pi4/180.0) RETURN END FUNCTION COSD4 ELEMENTAL FUNCTION COSD8(theta) RESULT(funct_out) REAL (kind=8),INTENT(IN) :: theta REAL (KIND=8) :: funct_out funct_out = COS(theta*pi8/180.0) RETURN END FUNCTION COSD8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION TAND4(theta) RESULT(funct_out) REAL (kind=4), INTENT(IN) :: theta REAL (KIND=4) :: funct_out funct_out = TAN(theta*pi4/180.0) RETURN END FUNCTION TAND4 ELEMENTAL FUNCTION TAND8(theta) RESULT(funct_out) REAL (kind=8), INTENT(IN) :: theta REAL (KIND=8) :: funct_out funct_out = TAN(theta*pi8/180.0) RETURN END FUNCTION TAND8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION ASIND4(x) RESULT(funct_out) REAL (kind=4), INTENT(IN) :: x REAL (KIND=4) :: funct_out funct_out = ASIN(x)*180.0/pi4 RETURN END FUNCTION ASIND4 ELEMENTAL FUNCTION ASIND8(x) RESULT(funct_out) REAL (kind=8), INTENT(IN) :: x REAL (KIND=8) :: funct_out funct_out = ASIN(x)*180.0/pi8 RETURN END FUNCTION ASIND8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION ACOSD4(x) RESULT(funct_out) REAL (kind=4), INTENT(IN) :: x REAL (KIND=4) :: funct_out funct_out = ACOS(x)*180.0/pi4 RETURN END FUNCTION ACOSD4 ELEMENTAL FUNCTION ACOSD8(x) RESULT(funct_out) REAL (kind=8), INTENT(IN) :: x REAL (KIND=8) :: funct_out funct_out = ACOS(x)*180.0/pi8 RETURN END FUNCTION ACOSD8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION ATAND4(x) RESULT(funct_out) REAL (kind=4), INTENT(IN) :: x REAL (KIND=4) :: funct_out funct_out = ATAN(x)*180.0/pi4 RETURN END FUNCTION ATAND4 ELEMENTAL FUNCTION ATAND8(x) RESULT(funct_out) REAL (kind=8), INTENT(IN) :: x REAL (KIND=8) :: funct_out funct_out = ATAN(x)*180.0/pi8 RETURN END FUNCTION ATAND8 !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC ELEMENTAL FUNCTION ATAN2D4(x,y) RESULT(funct_out) REAL (kind=4), INTENT(IN) :: x,y REAL (KIND=4) :: funct_out IF (x == 0.0 .AND. y == 0.0) THEN funct_out = 0.0 RETURN END IF funct_out = ATAN2(x,y)*180.0/pi4 RETURN END FUNCTION ATAN2D4 ELEMENTAL FUNCTION ATAN2D8(x,y) RESULT(funct_out) REAL (kind=8), INTENT(IN) :: x,y REAL (KIND=8) :: funct_out IF (x == 0.0 .AND. y == 0.0) THEN funct_out = 0.0 RETURN END IF funct_out = ATAN2(x,y)*180.0/pi8 RETURN END FUNCTION ATAN2D8 END MODULE trig