!
!=============================================================================
module pietc
!=============================================================================
! Some of the commonly used constants (pi etc) for double-precision
! subroutines
! ms10 etc are added to satisfy the gfortran compiler. 
!=============================================================================
use pkind, only: dp,dpc
implicit none
!private:: ms10,ms13,ms18,ms20,ms22,ms26,ms30,ms36,ms39,ms40,ms45, &
!          ms50,ms51,ms54,ms60,ms64,ms68,ms70,ms72,ms77,ms80
logical ,parameter:: t=.true.,f=.false.
real(dp),parameter:: zero=0,one=1,mone=-one,two=2,mtwo=-two, &
                     three=3,mthree=-three,four=4,mfour=-four, &
                     five=5,mfive=-five,    &
                     half=one/two,third=one/three,fourth=one/four,&
                     fifth=one/five,                              & 
     pi =3.1415926535897932384626433832795028841971693993751058209749e0_dp, &
     pi2=6.2831853071795864769252867665590057683943387987502116419498e0_dp, &
     pih=1.5707963267948966192313216916397514420985846996875529104874e0_dp, &
     rpi=1.7724538509055160272981674833411451827975494561223871282138e0_dp, &
     r2 =1.4142135623730950488016887242096980785696718753769480731766e0_dp, &
     r3 =1.7320508075688772935274463415058723669428052538103806280558e0_dp, &
     r5 =2.2360679774997896964091736687312762354406183596115257242708e0_dp, &
     phi=1.6180339887498948482045868343656381177203091798057628621354e0_dp, &
     euler=0.5772156649015328606065120900824024310421593359399235988057e0_dp,&
     rh=r2/2, &
     dtor=pi/180,rtod=180/pi, &
s13=& ! sin(12.857142...)
0.2225209339563144042889025644967947594663555687645449553119870158974212e0_dp,&
s18=.30901699437494742410229341718281905886015458990288143106772431e0_dp, &
s26=& ! sin(25.714285...)
0.4338837391175581204757683328483587546099907277874598764445473035322033e0_dp,&
s30=half,&
s36=.58778525229247312916870595463907276859765243764314599107227248e0_dp,&
s39=& ! sin(38.571428...)
0.6234898018587335305250048840042398106322747308964021053655494390968537e0_dp,&
s45=rh,&
s51=& ! sin(51.428571...)
0.7818314824680298087084445266740577502323345187086875289806349580450917e0_dp,&
s54=.80901699437494742410229341718281905886015458990288143106772431e0_dp,&
s60=r3*half,&
s64=& ! sin(64.285714...)
0.9009688679024191262361023195074450511659191621318571500535624231994324e0_dp,&
s72=.95105651629515357211643933337938214340569863412575022244730564e0_dp,&
s77=& ! sin(77.142857...)
0.9749279121818236070181316829939312172327858006199974376480795750876459e0_dp
real(dp),parameter:: &
     s22=0.38268343236508978e0_dp, &
     s68=0.92387953251128674e0_dp
real(dp),parameter:: &
     s10=0.17364817766693033e0_dp, &
     s20=0.34202014332566871e0_dp, &
     s40=0.64278760968653925e0_dp, &
     s50=0.76604444311897801e0_dp, &
     s70=0.93969262078590832e0_dp, &
     s80=0.98480775301220802e0_dp 
real(dp),parameter::  &
ms10=-s10, &
ms13=-s13, &
ms18=-s18, &
ms20=-s20, &
ms22=-s22, &
ms26=-s26, &
ms30=-s30, &
ms36=-s36, &
ms39=-s39, &
ms40=-s40, &
ms45=-s45, &
ms50=-s50, &
ms51=-s51, &
ms54=-s54, &
ms60=-s60, &
ms64=-s64, &
ms68=-s68, &
ms70=-s70, &
ms72=-s72, &
ms77=-s77, &
ms80=-s80

complex(dpc),parameter:: &
     c0=(zero,zero),c1=(one,zero),mc1=-c1,ci=(zero,one),mci=-ci, &
     cipi=ci*pi,                                                 &
! Degree rotations:
     z000=c1        ,z010=( s80,s10),z013=( s77,s13),z018=( s72,s18), &
     z020=( s70,s20),z022=( s68,s22),z026=( s64,s26),z030=( s60,s30), &
     z036=( s54,s36),z039=( s51,s39),z040=( s50,s40),z045=( s45,s45), &
     z050=( s40,s50),z051=( s39,s51),z054=( s36,s54),z060=( s30,s60), &
     z064=( s26,s64),z068=( s22,s68),z070=( s20,s70),z072=( s18,s72), &
     z077=( s13,s77),z080=( s10,s80),z090=ci,        z100=(ms10,s80), &
     z103=(ms13,s77),z108=(ms18,s72),z110=(ms20,s70),z112=(ms22,s68), &
     z116=(ms26,s64),z120=(ms30,s60),z126=(ms36,s54),z129=(ms39,s51), &
     z130=(ms40,s50),z135=(ms45,s45),z140=(ms50,s40),z141=(ms51,s39), &
     z144=(ms54,s36),z150=(ms60,s30),z154=(ms64,s26),z158=(ms68,s22), &
     z160=(ms70,s20),z162=(ms72,s18),z167=(ms77,s13),z170=(ms80,s10), &
     z180=-z000,z190=-z010,z193=-z013,z198=-z018,z200=-z020,z202=-z022, &
     z206=-z026,z210=-z030,z216=-z036,z219=-z039,z220=-z040,z225=-z045, &
     z230=-z050,z231=-z051,z234=-z054,z240=-z060,z244=-z064,z248=-z068, &
     z250=-z070,z252=-z072,z257=-z077,z260=-z080,z270=-z090,z280=-z100, &
     z283=-z103,z288=-z108,z290=-z110,z292=-z112,z296=-z116,z300=-z120, &
     z306=-z126,z309=-z129,z310=-z130,z315=-z135,z320=-z140,z321=-z141, &
     z324=-z144,z330=-z150,z334=-z154,z338=-z158,z340=-z160,z342=-z162, &
     z347=-z167,z350=-z170
end module pietc