Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
299 changes: 218 additions & 81 deletions sorc/grid_tools.fd/regional_esg_grid.fd/pietc.f90
Original file line number Diff line number Diff line change
@@ -1,94 +1,231 @@
!> @file
!! @brief Double-precision constants.
!! @author R. J. Purser @date 2014
!! Some of the commonly used constants (pi etc) mainly for double-precision

!> Some of the commonly used constants (pi etc) mainly for double-precision
!! subroutines.
!!
!! ms10 etc are needed to satisfy the some (eg., gnu fortran) compilers'
!! more rigorous standards regarding the way "data" statements are initialized.
!! Zero and the first few units are u0,u1,u2, etc., their reciprocals being,
!! o2,o3 etc and their square roots, r2,r3. Reciprocal roots are or2,or3 etc.
!!
!! @author R. J. Purser @date 2014
module pietc
use pkind, only: dp,dpc
implicit none
logical ,parameter:: T=.true.,F=.false. !<- for pain-relief in logical ops
real(dp),parameter:: &
u0=0_dp,u1=1_dp,mu1=-u1,u2=2_dp,mu2=-u2,u3=3_dp,mu3=-u3,u4=4_dp, &
mu4=-u4,u5=5_dp,mu5=-u5,u6=6_dp,mu6=-u6,o2=u1/u2,o3=u1/u3,o4=u1/u4, &
o5=u1/u5,o6=u1/u6,mo2=-o2,mo3=-o3,mo4=-o4,mo5=-o5,mo6=-o6, &
pi =3.1415926535897932384626433832795028841971693993751058209749e0_dp, &
pi2=6.2831853071795864769252867665590057683943387987502116419498e0_dp, &
pih=1.5707963267948966192313216916397514420985846996875529104874e0_dp, &
rpi=1.7724538509055160272981674833411451827975494561223871282138e0_dp, &
! Important square-roots
r2 =1.4142135623730950488016887242096980785696718753769480731766e0_dp, &
r3 =1.7320508075688772935274463415058723669428052538103806280558e0_dp, &
r5 =2.2360679774997896964091736687312762354406183596115257242708e0_dp, &
or2=u1/r2,or3=u1/r3,or5=u1/r5, &
! Golden number:
phi=1.6180339887498948482045868343656381177203091798057628621354e0_dp, &
! Euler-Mascheroni constant:
euler=0.57721566490153286060651209008240243104215933593992359880e0_dp, &
! Degree to radians; radians to degrees:
dtor=pi/180,rtod=180/pi, &
! Sines of all main fractions of 90 degrees (down to ninths):
s10=.173648177666930348851716626769314796000375677184069387236241e0_dp,&
s11=.195090322016128267848284868477022240927691617751954807754502e0_dp,&
s13=.222520933956314404288902564496794759466355568764544955311987e0_dp,&
s15=.258819045102520762348898837624048328349068901319930513814003e0_dp,&
s18=.309016994374947424102293417182819058860154589902881431067724e0_dp,&
s20=.342020143325668733044099614682259580763083367514160628465048e0_dp,&
s22=.382683432365089771728459984030398866761344562485627041433800e0_dp,&
s26=.433883739117558120475768332848358754609990727787459876444547e0_dp,&
s30=o2, &
s34=.555570233019602224742830813948532874374937190754804045924153e0_dp,&
s36=.587785252292473129168705954639072768597652437643145991072272e0_dp,&
s39=.623489801858733530525004884004239810632274730896402105365549e0_dp,&
s40=.642787609686539326322643409907263432907559884205681790324977e0_dp,&
s45=or2, &
s50=.766044443118978035202392650555416673935832457080395245854045e0_dp,&
s51=.781831482468029808708444526674057750232334518708687528980634e0_dp,&
s54=.809016994374947424102293417182819058860154589902881431067724e0_dp,&
s56=.831469612302545237078788377617905756738560811987249963446124e0_dp,&
s60=r3*o2, &
s64=.900968867902419126236102319507445051165919162131857150053562e0_dp,&
s68=.923879532511286756128183189396788286822416625863642486115097e0_dp,&
s70=.939692620785908384054109277324731469936208134264464633090286e0_dp,&
s72=.951056516295153572116439333379382143405698634125750222447305e0_dp,&
s75=.965925826289068286749743199728897367633904839008404550402343e0_dp,&
s77=.974927912181823607018131682993931217232785800619997437648079e0_dp,&
s79=.980785280403230449126182236134239036973933730893336095002916e0_dp,&
s80=.984807753012208059366743024589523013670643251719842418790025e0_dp,&
logical ,parameter:: T=.true. !< for pain-relief in logical ops
logical ,parameter:: F=.false. !< for pain-relief in logical ops
real(dp),parameter:: u0=0_dp !< ???
real(dp),parameter:: u1=1_dp !< ???
real(dp),parameter:: mu1=-u1 !< ???
real(dp),parameter:: u2=2_dp !< ???
real(dp),parameter:: mu2=-u2 !< ???
real(dp),parameter:: u3=3_dp !< ???
real(dp),parameter:: mu3=-u3 !< ???
real(dp),parameter:: u4=4_dp !< ???
real(dp),parameter:: mu4=-u4 !< ???
real(dp),parameter:: u5=5_dp !< ???
real(dp),parameter:: mu5=-u5 !< ???
real(dp),parameter:: u6=6_dp !< ???
real(dp),parameter:: mu6=-u6 !< ???
real(dp),parameter:: o2=u1/u2 !< ???
real(dp),parameter:: o3=u1/u3 !< ???
real(dp),parameter:: o4=u1/u4 !< ???
real(dp),parameter:: o5=u1/u5 !< ???
real(dp),parameter:: o6=u1/u6 !< ???
real(dp),parameter:: mo2=-o2 !< ???
real(dp),parameter:: mo3=-o3 !< ???
real(dp),parameter:: mo4=-o4 !< ???
real(dp),parameter:: mo5=-o5 !< ???
real(dp),parameter:: mo6=-o6 !< ???
real(dp),parameter:: pi =3.1415926535897932384626433832795028841971693993751058209749e0_dp !< Pi.
real(dp),parameter:: pi2=6.2831853071795864769252867665590057683943387987502116419498e0_dp !< Pi*2.
real(dp),parameter:: pih=1.5707963267948966192313216916397514420985846996875529104874e0_dp !< ???
real(dp),parameter:: rpi=1.7724538509055160272981674833411451827975494561223871282138e0_dp !< ???
real(dp),parameter:: r2 =1.4142135623730950488016887242096980785696718753769480731766e0_dp !< Square root of 2.
real(dp),parameter:: r3 =1.7320508075688772935274463415058723669428052538103806280558e0_dp !< Square root of 3.
real(dp),parameter:: r5 =2.2360679774997896964091736687312762354406183596115257242708e0_dp !< Square root of 5.
real(dp),parameter:: or2=u1/r2 !< ???
real(dp),parameter:: or3=u1/r3 !< ???
real(dp),parameter:: or5=u1/r5 !< ???
real(dp),parameter:: phi=1.6180339887498948482045868343656381177203091798057628621354e0_dp !< Golden number.
real(dp),parameter:: euler=0.57721566490153286060651209008240243104215933593992359880e0_dp !< Euler-Mascheroni constant.
real(dp),parameter:: dtor=pi/180 !< Degree to radians
real(dp),parameter:: rtod=180/pi !< radians to degrees
! Sines of all main fractions of 90 degrees (down to ninths): !< ???
real(dp),parameter:: s10=.173648177666930348851716626769314796000375677184069387236241e0_dp !< ???
real(dp),parameter:: s11=.195090322016128267848284868477022240927691617751954807754502e0_dp !< ???
real(dp),parameter:: s13=.222520933956314404288902564496794759466355568764544955311987e0_dp !< ???
real(dp),parameter:: s15=.258819045102520762348898837624048328349068901319930513814003e0_dp !< ???
real(dp),parameter:: s18=.309016994374947424102293417182819058860154589902881431067724e0_dp !< ???
real(dp),parameter:: s20=.342020143325668733044099614682259580763083367514160628465048e0_dp !< ???
real(dp),parameter:: s22=.382683432365089771728459984030398866761344562485627041433800e0_dp !< ???
real(dp),parameter:: s26=.433883739117558120475768332848358754609990727787459876444547e0_dp !< ???
real(dp),parameter:: s30=o2 !< ???
real(dp),parameter:: s34=.555570233019602224742830813948532874374937190754804045924153e0_dp !< ???
real(dp),parameter:: s36=.587785252292473129168705954639072768597652437643145991072272e0_dp !< ???
real(dp),parameter:: s39=.623489801858733530525004884004239810632274730896402105365549e0_dp !< ???
real(dp),parameter:: s40=.642787609686539326322643409907263432907559884205681790324977e0_dp !< ???
real(dp),parameter:: s45=or2 !< ???
real(dp),parameter:: s50=.766044443118978035202392650555416673935832457080395245854045e0_dp !< ???
real(dp),parameter:: s51=.781831482468029808708444526674057750232334518708687528980634e0_dp !< ???
real(dp),parameter:: s54=.809016994374947424102293417182819058860154589902881431067724e0_dp !< ???
real(dp),parameter:: s56=.831469612302545237078788377617905756738560811987249963446124e0_dp !< ???
real(dp),parameter:: s60=r3*o2 !< ???
real(dp),parameter:: s64=.900968867902419126236102319507445051165919162131857150053562e0_dp !< ???
real(dp),parameter:: s68=.923879532511286756128183189396788286822416625863642486115097e0_dp !< ???
real(dp),parameter:: s70=.939692620785908384054109277324731469936208134264464633090286e0_dp !< ???
real(dp),parameter:: s72=.951056516295153572116439333379382143405698634125750222447305e0_dp !< ???
real(dp),parameter:: s75=.965925826289068286749743199728897367633904839008404550402343e0_dp !< ???
real(dp),parameter:: s77=.974927912181823607018131682993931217232785800619997437648079e0_dp !< ???
real(dp),parameter:: s79=.980785280403230449126182236134239036973933730893336095002916e0_dp !< ???
real(dp),parameter:: s80=.984807753012208059366743024589523013670643251719842418790025e0_dp !< ???
! ... and their minuses:
ms10=-s10,ms11=-s11,ms13=-s13,ms15=-s15,ms18=-s18,ms20=-s20,ms22=-s22,&
ms26=-s26,ms30=-s30,ms34=-s34,ms36=-s36,ms39=-s39,ms40=-s40,ms45=-s45,&
ms50=-s50,ms51=-s51,ms54=-s54,ms56=-s56,ms60=-s60,ms64=-s64,ms68=-s68,&
ms70=-s70,ms72=-s72,ms75=-s75,ms77=-s77,ms79=-s79,ms80=-s80

complex(dpc),parameter:: &
c0=(u0,u0),c1=(u1,u0),mc1=-c1,ci=(u0,u1),mci=-ci,cipi=ci*pi, &
! Main fractional rotations, as unimodular complex numbers:
z000=c1 ,z010=( s80,s10),z011=( s79,s11),z013=( s77,s13),&
z015=( s75,s15),z018=( s72,s18),z020=( s70,s20),z022=( s68,s22),&
z026=( s64,s26),z030=( s60,s30),z034=( s56,s34),z036=( s54,s36),&
z039=( s51,s39),z040=( s50,s40),z045=( s45,s45),z050=( s40,s50),&
z051=( s39,s51),z054=( s36,s54),z056=( s34,s56),z060=( s30,s60),&
z064=( s26,s64),z068=( s22,s68),z070=( s20,s70),z072=( s18,s72),&
z075=( s15,s75),z077=( s13,s77),z079=( s11,s79),z080=( s10,s80),&
z090=ci, z100=(ms10,s80),z101=(ms11,s79),z103=(ms13,s77),&
z105=(ms15,s75),z108=(ms18,s72),z110=(ms20,s70),z112=(ms22,s68),&
z116=(ms26,s64),z120=(ms30,s60),z124=(ms34,s56),z126=(ms36,s54),&
z129=(ms39,s51),z130=(ms40,s50),z135=(ms45,s45),z140=(ms50,s40),&
z141=(ms51,s39),z144=(ms54,s36),z146=(ms56,s34),z150=(ms60,s30),&
z154=(ms64,s26),z158=(ms68,s22),z160=(ms70,s20),z162=(ms72,s18),&
z165=(ms75,s15),z167=(ms77,s13),z169=(ms79,s11),z170=(ms80,s10),&
z180=-z000,z190=-z010,z191=-z011,z193=-z013,z195=-z015,z198=-z018,&
z200=-z020,z202=-z022,z206=-z026,z210=-z030,z214=-z034,z216=-z036,&
z219=-z039,z220=-z040,z225=-z045,z230=-z050,z231=-z051,z234=-z054,&
z236=-z056,z240=-z060,z244=-z064,z248=-z068,z250=-z070,z252=-z072,&
z255=-z075,z257=-z077,z259=-z079,z260=-z080,z270=-z090,z280=-z100,&
z281=-z101,z283=-z103,z285=-z105,z288=-z108,z290=-z110,z292=-z112,&
z296=-z116,z300=-z120,z304=-z124,z306=-z126,z309=-z129,z310=-z130,&
z315=-z135,z320=-z140,z321=-z141,z324=-z144,z326=-z146,z330=-z150,&
z334=-z154,z338=-z158,z340=-z160,z342=-z162,z345=-z165,z347=-z167,&
z349=-z169,z350=-z170
real(dp),parameter:: ms10=-s10 !< ???
real(dp),parameter:: ms11=-s11 !< ???
real(dp),parameter:: ms13=-s13 !< ???
real(dp),parameter:: ms15=-s15 !< ???
real(dp),parameter:: ms18=-s18 !< ???
real(dp),parameter:: ms20=-s20 !< ???
real(dp),parameter:: ms22=-s22 !< ???
real(dp),parameter:: ms26=-s26 !< ???
real(dp),parameter:: ms30=-s30 !< ???
real(dp),parameter:: ms34=-s34 !< ???
real(dp),parameter:: ms36=-s36 !< ???
real(dp),parameter:: ms39=-s39 !< ???
real(dp),parameter:: ms40=-s40 !< ???
real(dp),parameter:: ms45=-s45 !< ???
real(dp),parameter:: ms50=-s50 !< ???
real(dp),parameter:: ms51=-s51 !< ???
real(dp),parameter:: ms54=-s54 !< ???
real(dp),parameter:: ms56=-s56 !< ???
real(dp),parameter:: ms60=-s60 !< ???
real(dp),parameter:: ms64=-s64 !< ???
real(dp),parameter:: ms68=-s68 !< ???
real(dp),parameter:: ms70=-s70 !< ???
real(dp),parameter:: ms72=-s72 !< ???
real(dp),parameter:: ms75=-s75 !< ???
real(dp),parameter:: ms77=-s77 !< ???
real(dp),parameter:: ms79=-s79 !< ???
real(dp),parameter:: ms80=-s80 !< ???
complex(dpc),parameter:: c0=(u0,u0) !< ???
complex(dpc),parameter:: c1=(u1,u0) !< ???
complex(dpc),parameter:: mc1=-c1 !< ???
complex(dpc),parameter:: ci=(u0,u1) !< ???
complex(dpc),parameter:: mci=-ci !< ???
complex(dpc),parameter:: cipi=ci*pi !< ???
! Main fractional rotations, as unimodular complex numbers: !< ???
complex(dpc),parameter:: z000=c1 !< ???
complex(dpc),parameter:: z010=( s80,s10) !< ???
complex(dpc),parameter:: z011=( s79,s11) !< ???
complex(dpc),parameter:: z013=( s77,s13) !< ???
complex(dpc),parameter:: z015=( s75,s15) !< ???
complex(dpc),parameter:: z018=( s72,s18) !< ???
complex(dpc),parameter:: z020=( s70,s20) !< ???
complex(dpc),parameter:: z022=( s68,s22) !< ???
complex(dpc),parameter:: z026=( s64,s26) !< ???
complex(dpc),parameter:: z030=( s60,s30) !< ???
complex(dpc),parameter:: z034=( s56,s34) !< ???
complex(dpc),parameter:: z036=( s54,s36) !< ???
complex(dpc),parameter:: z039=( s51,s39) !< ???
complex(dpc),parameter:: z040=( s50,s40) !< ???
complex(dpc),parameter:: z045=( s45,s45) !< ???
complex(dpc),parameter:: z050=( s40,s50) !< ???
complex(dpc),parameter:: z051=( s39,s51) !< ???
complex(dpc),parameter:: z054=( s36,s54) !< ???
complex(dpc),parameter:: z056=( s34,s56) !< ???
complex(dpc),parameter:: z060=( s30,s60) !< ???
complex(dpc),parameter:: z064=( s26,s64) !< ???
complex(dpc),parameter:: z068=( s22,s68) !< ???
complex(dpc),parameter:: z070=( s20,s70) !< ???
complex(dpc),parameter:: z072=( s18,s72) !< ???
complex(dpc),parameter:: z075=( s15,s75) !< ???
complex(dpc),parameter:: z077=( s13,s77) !< ???
complex(dpc),parameter:: z079=( s11,s79) !< ???
complex(dpc),parameter:: z080=( s10,s80) !< ???
complex(dpc),parameter:: z090=ci !< ???
complex(dpc),parameter:: z100=(ms10,s80) !< ???
complex(dpc),parameter:: z101=(ms11,s79) !< ???
complex(dpc),parameter:: z103=(ms13,s77) !< ???
complex(dpc),parameter:: z105=(ms15,s75) !< ???
complex(dpc),parameter:: z108=(ms18,s72) !< ???
complex(dpc),parameter:: z110=(ms20,s70) !< ???
complex(dpc),parameter:: z112=(ms22,s68) !< ???
complex(dpc),parameter:: z116=(ms26,s64) !< ???
complex(dpc),parameter:: z120=(ms30,s60) !< ???
complex(dpc),parameter:: z124=(ms34,s56) !< ???
complex(dpc),parameter:: z126=(ms36,s54) !< ???
complex(dpc),parameter:: z129=(ms39,s51) !< ???
complex(dpc),parameter:: z130=(ms40,s50) !< ???
complex(dpc),parameter:: z135=(ms45,s45) !< ???
complex(dpc),parameter:: z140=(ms50,s40) !< ???
complex(dpc),parameter:: z141=(ms51,s39) !< ???
complex(dpc),parameter:: z144=(ms54,s36) !< ???
complex(dpc),parameter:: z146=(ms56,s34) !< ???
complex(dpc),parameter:: z150=(ms60,s30) !< ???
complex(dpc),parameter:: z154=(ms64,s26) !< ???
complex(dpc),parameter:: z158=(ms68,s22) !< ???
complex(dpc),parameter:: z160=(ms70,s20) !< ???
complex(dpc),parameter:: z162=(ms72,s18) !< ???
complex(dpc),parameter:: z165=(ms75,s15) !< ???
complex(dpc),parameter:: z167=(ms77,s13) !< ???
complex(dpc),parameter:: z169=(ms79,s11) !< ???
complex(dpc),parameter:: z170=(ms80,s10) !< ???
complex(dpc),parameter:: z180=-z000 !< ???
complex(dpc),parameter:: z190=-z010 !< ???
complex(dpc),parameter:: z191=-z011 !< ???
complex(dpc),parameter:: z193=-z013 !< ???
complex(dpc),parameter:: z195=-z015 !< ???
complex(dpc),parameter:: z198=-z018 !< ???
complex(dpc),parameter:: z200=-z020 !< ???
complex(dpc),parameter:: z202=-z022 !< ???
complex(dpc),parameter:: z206=-z026 !< ???
complex(dpc),parameter:: z210=-z030 !< ???
complex(dpc),parameter:: z214=-z034 !< ???
complex(dpc),parameter:: z216=-z036 !< ???
complex(dpc),parameter:: z219=-z039 !< ???
complex(dpc),parameter:: z220=-z040 !< ???
complex(dpc),parameter:: z225=-z045 !< ???
complex(dpc),parameter:: z230=-z050 !< ???
complex(dpc),parameter:: z231=-z051 !< ???
complex(dpc),parameter:: z234=-z054 !< ???
complex(dpc),parameter:: z236=-z056 !< ???
complex(dpc),parameter:: z240=-z060 !< ???
complex(dpc),parameter:: z244=-z064 !< ???
complex(dpc),parameter:: z248=-z068 !< ???
complex(dpc),parameter:: z250=-z070 !< ???
complex(dpc),parameter:: z252=-z072 !< ???
complex(dpc),parameter:: z255=-z075 !< ???
complex(dpc),parameter:: z257=-z077 !< ???
complex(dpc),parameter:: z259=-z079 !< ???
complex(dpc),parameter:: z260=-z080 !< ???
complex(dpc),parameter:: z270=-z090 !< ???
complex(dpc),parameter:: z280=-z100 !< ???
complex(dpc),parameter:: z281=-z101 !< ???
complex(dpc),parameter:: z283=-z103 !< ???
complex(dpc),parameter:: z285=-z105 !< ???
complex(dpc),parameter:: z288=-z108 !< ???
complex(dpc),parameter:: z290=-z110 !< ???
complex(dpc),parameter:: z292=-z112 !< ???
complex(dpc),parameter:: z296=-z116 !< ???
complex(dpc),parameter:: z300=-z120 !< ???
complex(dpc),parameter:: z304=-z124 !< ???
complex(dpc),parameter:: z306=-z126 !< ???
complex(dpc),parameter:: z309=-z129 !< ???
complex(dpc),parameter:: z310=-z130 !< ???
complex(dpc),parameter:: z315=-z135 !< ???
complex(dpc),parameter:: z320=-z140 !< ???
complex(dpc),parameter:: z321=-z141 !< ???
complex(dpc),parameter:: z324=-z144 !< ???
complex(dpc),parameter:: z326=-z146 !< ???
complex(dpc),parameter:: z330=-z150 !< ???
complex(dpc),parameter:: z334=-z154 !< ???
complex(dpc),parameter:: z338=-z158 !< ???
complex(dpc),parameter:: z340=-z160 !< ???
complex(dpc),parameter:: z342=-z162 !< ???
complex(dpc),parameter:: z345=-z165 !< ???
complex(dpc),parameter:: z347=-z167 !< ???
complex(dpc),parameter:: z349=-z169 !< ???
complex(dpc),parameter:: z350=-z170 !< ???
end module pietc
Loading