49 USE yomhook
,ONLY : lhook, dr_hook
50 USE parkind1
,ONLY : jprb
56 INTEGER kxdim,kydim,kx,ky,kcall
57 REAL pxreg(kxdim,kydim),pyreg(kxdim,kydim), &
58 pxrot(kxdim,kydim),pyrot(kxdim,kydim), &
63 REAL pi,zrad,zsycen,zcycen,zxmxc,zsxmxc,zcxmxc,zsyreg,zcyreg, &
64 zsyrot,zcyrot,zcxrot,zsxrot,zradi
66 REAL(KIND=JPRB) :: zhook_handle
70 IF (lhook) CALL dr_hook(
'REGROT_LONLAT_ROT',0,zhook_handle)
74 zsycen = sin(zrad*(pycen+90.))
75 zcycen = cos(zrad*(pycen+90.))
82 zxmxc = zrad*(pxreg(jx,jy) - pxcen)
85 zsyreg = sin(zrad*pyreg(jx,jy))
86 zcyreg = cos(zrad*pyreg(jx,jy))
87 zsyrot = zcycen*zsyreg - zsycen*zcyreg*zcxmxc
88 zsyrot = max(zsyrot,-1.0)
89 zsyrot = min(zsyrot,+1.0)
91 pyrot(jx,jy) = asin(zsyrot)*zradi
93 zcyrot = cos(pyrot(jx,jy)*zrad)
94 zcxrot = (zcycen*zcyreg*zcxmxc + &
96 zcxrot = max(zcxrot,-1.0)
97 zcxrot = min(zcxrot,+1.0)
98 zsxrot = zcyreg*zsxmxc/zcyrot
100 pxrot(jx,jy) = acos(zcxrot)*zradi
102 IF (zsxrot.LT.0.0) pxrot(jx,jy) = -pxrot(jx,jy)
107 ELSEIF (kcall.EQ.-1)
THEN
112 zsxrot = sin(zrad*pxrot(jx,jy))
113 zcxrot = cos(zrad*pxrot(jx,jy))
114 zsyrot = sin(zrad*pyrot(jx,jy))
115 zcyrot = cos(zrad*pyrot(jx,jy))
116 zsyreg = zcycen*zsyrot + zsycen*zcyrot*zcxrot
117 zsyreg = max(zsyreg,-1.0)
118 zsyreg = min(zsyreg,+1.0)
120 pyreg(jx,jy) = asin(zsyreg)*zradi
122 zcyreg = cos(pyreg(jx,jy)*zrad)
123 zcxmxc = (zcycen*zcyrot*zcxrot - &
124 zsycen*zsyrot)/zcyreg
125 zcxmxc = max(zcxmxc,-1.0)
126 zcxmxc = min(zcxmxc,+1.0)
127 zsxmxc = zcyrot*zsxrot/zcyreg
128 zxmxc = acos(zcxmxc)*zradi
129 IF (zsxmxc.LT.0.0) zxmxc = -zxmxc
131 pxreg(jx,jy) = zxmxc + pxcen
137 WRITE(6,
'(1X,''INVALID KCALL IN REGROT_LONLAT_ROT'')')
140 IF (lhook) CALL dr_hook(
'REGROT_LONLAT_ROT',1,zhook_handle)
subroutine regrot_lonlat_rot(PXREG, PYREG, PXROT, PYROT, KXDIM, KYDIM, KX, KY, PXCEN, PYCEN, KCALL)