12 use gengrid_kinds,
only : dbl_kind, int_kind
13 use grdvars,
only : debug
27 subroutine find_angq(iind,jind,xangCt,anglet,angle)
29 integer ,
intent(in) :: iind(2),jind(2)
30 real(dbl_kind),
intent(in) :: xangCt(:)
31 real(dbl_kind),
intent(in) :: anglet(:,:)
32 real(dbl_kind),
intent(out) :: angle(:,:)
37 real(dbl_kind) :: angle_0, angle_w, angle_s, angle_sw
38 real(dbl_kind) :: p25 = 0.25
53 do j = jind(1)+1,jind(2)
54 do i = iind(1),iind(2)-1
55 if (j .lt. jind(2))
then 56 angle_0 = anglet(i+1,j+1)
57 angle_w = anglet(i, j+1)
58 angle_s = anglet(i+1,j )
59 angle_sw = anglet(i ,j )
61 angle_0 = xangct(i+1 )
63 angle_s = anglet(i+1,j)
64 angle_sw = anglet(i, j)
66 angle(i,j) = atan2(p25*(sin(angle_0) + sin(angle_w) + sin(angle_s) + sin(angle_sw)), &
67 p25*(cos(angle_0) + cos(angle_w) + cos(angle_s) + cos(angle_sw)))
69 if (abs(angle(i,j)) .le. 1.0e-10)angle(i,j) = 0.0
73 end subroutine find_angq
83 subroutine find_angchk(iind,jind,angle,angchk)
85 integer ,
intent(in) :: iind(2),jind(2)
86 real(dbl_kind),
intent(in) :: angle(:,:)
87 real(dbl_kind),
intent(out) :: angchk(:,:)
91 real(dbl_kind) :: angle_0, angle_w, angle_s, angle_sw
92 real(dbl_kind) :: p25 = 0.25
107 do j = jind(1)+1,jind(2)
108 do i = iind(1)+1,iind(2)
109 angle_0 = angle(i ,j )
110 angle_w = angle(i-1,j )
111 angle_s = angle(i, j-1)
112 angle_sw = angle(i-1,j-1)
113 angchk(i,j) = atan2(p25*(sin(angle_0) + sin(angle_w) + sin(angle_s) + sin(angle_sw)), &
114 p25*(cos(angle_0) + cos(angle_w) + cos(angle_s) + cos(angle_sw)))
118 end subroutine find_angchk
130 subroutine find_ang(iind,jind,lonBu,latBu,lonCt,anglet)
132 integer ,
intent(in) :: iind(2),jind(2)
133 real(dbl_kind),
intent(in) :: lonBu(:,:)
134 real(dbl_kind),
intent(in) :: latBu(:,:)
135 real(dbl_kind),
intent(in) :: lonCt(:,:)
136 real(dbl_kind),
intent(out) :: anglet(:,:)
143 real(dbl_kind) :: len_lon
144 real(dbl_kind) :: pi_720deg
145 real(dbl_kind) :: lonB(2,2)
146 real(dbl_kind) :: lon_scale = 0.0
157 pi_720deg = atan(1.0) / 180.0
159 do j=jind(1),jind(2);
do i = iind(1),iind(2)
161 jj = j+n-2; ii = i+m-2
163 if(ii .eq. 0)ii = iind(2)
164 lonb(m,n) = modulo_around_point(lonbu(ii,jj), lonct(i,j), len_lon)
169 if(ii .eq. 0)ii = iind(2)
170 lon_scale = cos(pi_720deg*((latbu(ii,jj) + latbu(i,j)) + &
171 (latbu(i,jj) + latbu(ii,j)) ) )
172 anglet(i,j) = atan2(lon_scale*((lonb(1,2) - lonb(2,1)) + (lonb(2,2) - lonb(1,1))), &
173 (latbu(ii,j) - latbu(i,jj)) + &
174 (latbu(i,j) - latbu(ii,jj)) )
183 end subroutine find_ang
193 function modulo_around_point(x, xc, Lx)
result(x_mod)
194 use gengrid_kinds,
only : dbl_kind
196 real(dbl_kind),
intent(in) :: x
197 real(dbl_kind),
intent(in) :: xc
198 real(dbl_kind),
intent(in) :: lx
199 real(dbl_kind) :: x_mod
202 x_mod = modulo(x - (xc - 0.5*lx), lx) + (xc - 0.5*lx)
206 end function modulo_around_point