MODULE Numeric_Kinds_Module !========================================================================================= ! This module defines types and constants to be used throughout other codes. Here is ! defined the real type wp_kind (working precision) that defines the real type of all ! declared real variables. ! ! D. A. Brue !========================================================================================= IMPLICIT NONE ! Define compiler-dependent type constants as parameters INTEGER, PARAMETER :: i1_kind = SELECTED_INT_KIND(2) ! -128, 127 INTEGER, PARAMETER :: i2_kind = SELECTED_INT_KIND(4) ! INTEGER, PARAMETER :: i4_kind = SELECTED_INT_KIND(9) INTEGER, PARAMETER :: i8_kind = SELECTED_INT_KIND(12) INTEGER, PARAMETER :: sp_kind = SELECTED_REAL_KIND(p=6,r=30) ! single precision INTEGER, PARAMETER :: dp_kind = SELECTED_REAL_KIND(p=14,r=300) ! double precision INTEGER, PARAMETER :: qp_kind = SELECTED_REAL_KIND(p=30,r=4000) ! quadruple precision ! note above real kind types also work for complex declarations ! Select real kind to be used throughout the rest of code INTEGER, PARAMETER :: WP_Kind = dp_kind INTEGER, PARAMETER :: IW_Kind = i4_kind ! Numbers =============================================================================== INTEGER, PARAMETER :: ione = 1 INTEGER, PARAMETER :: itwo = 2 INTEGER, PARAMETER :: ithree = 3 INTEGER, PARAMETER :: ifour = 4 REAL(Kind=WP_Kind), PARAMETER :: zero = 0.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: one = 1.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: two = 2.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: three = 3.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: four = 4.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: five = 5.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: six = 6.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: seven = 7.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: eight = 8.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: nine = 9.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: ten = 10.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: eleven = 11.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: twelve = 12.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: thirteen = 13.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: fourteen = 14.0_wp_kind REAL(Kind=WP_Kind), PARAMETER :: fifteen = 15.0_wp_kind ! Fractions REAL(Kind=WP_Kind), PARAMETER :: half = 0.50_wp_kind ! Common Reals REAL(Kind=WP_Kind), PARAMETER :: pi=four*ATAN(one) ! Numerics =============================================================================== REAL(Kind=WP_Kind), PARAMETER :: wp_Small = TINY(one) ! smallest number REAL(Kind=WP_Kind), PARAMETER :: wp_Large = HUGE(one) ! largest number REAL(Kind=WP_Kind), PARAMETER :: wp_Epsilon= EPSILON(one) ! smallest difference INTEGER, PARAMETER :: wp_Prec = PRECISION(one) ! number of digits of precision INTEGER, PARAMETER :: wp_minexp = MINEXPONENT(one) ! smallest exponent INTEGER, PARAMETER :: wp_maxexp = MAXEXPONENT(one) ! largest exponent END MODULE Numeric_Kinds_Module