ROMS
Loading...
Searching...
No Matches
uv_rotate_mod Module Reference

Functions/Subroutines

subroutine, public uv_rotate2d (ng, tile, add, lboundary, lbi, ubi, lbj, ubj, cosangler, sinangler, rmask_full, uinp, vinp, uout, vout)
 
subroutine, public uv_rotate3d (ng, tile, add, lboundary, lbi, ubi, lbj, ubj, lbk, ubk, cosangler, sinangler, rmask_full, uinp, vinp, uout, vout)
 

Function/Subroutine Documentation

◆ uv_rotate2d()

subroutine, public uv_rotate_mod::uv_rotate2d ( integer, intent(in) ng,
integer, intent(in) tile,
logical, intent(in) add,
logical, intent(in) lboundary,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:), intent(in) rmask_full,
real(r8), dimension(lbi:,lbj:), intent(in) uinp,
real(r8), dimension(lbi:,lbj:), intent(in) vinp,
real(r8), dimension(lbi:,lbj:), intent(inout) uout,
real(r8), dimension(lbi:,lbj:), intent(inout) vout )

Definition at line 28 of file uv_rotate.F.

35!***********************************************************************
36!
37 USE mod_param
38 USE mod_scalars
39!
41#ifdef DISTRIBUTE
43#endif
44!
45! Imported variable declarations.
46!
47 logical, intent(in) :: add, Lboundary
48
49 integer, intent(in) :: ng, tile
50 integer, intent(in) :: LBi, UBi, LBj, UBj
51!
52#ifdef ASSUMED_SHAPE
53 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
54 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
55# ifdef MASKING
56 real(r8), intent(in) :: rmask_full(LBi:,LBj:)
57# endif
58 real(r8), intent(in) :: Uinp(LBi:,LBj:)
59 real(r8), intent(in) :: Vinp(LBi:,LBj:)
60
61 real(r8), intent(inout) :: Uout(LBi:,LBj:)
62 real(r8), intent(inout) :: Vout(LBi:,LBj:)
63#else
64 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
65 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
66# ifdef MASKING
67 real(r8), intent(in) :: rmask_full(LBi:UBi,LBj:UBj)
68# endif
69 real(r8), intent(in) :: Uinp(LBi:UBi,LBj:UBj)
70 real(r8), intent(in) :: Vinp(LBi:UBi,LBj:UBj)
71
72 real(r8), intent(inout) :: Uout(LBi:UBi,LBj:UBj)
73 real(r8), intent(inout) :: Vout(LBi:UBi,LBj:UBj)
74#endif
75!
76! Local variable declarations.
77!
78 integer :: i, j
79
80 real(r8) :: Urho, Vrho
81
82# include "set_bounds.h"
83!
84!-----------------------------------------------------------------------
85! Rotate 2D vector components to Eastward and Northward directions.
86!-----------------------------------------------------------------------
87!
88 IF (add) THEN
89 DO j=jstr,jend
90 DO i=istr,iend
91 urho=0.5_r8*(uinp(i,j)+uinp(i+1,j))
92 vrho=0.5_r8*(vinp(i,j)+vinp(i,j+1))
93 uout(i,j)=uout(i,j)+ &
94 & urho*cosangler(i,j)- &
95 & vrho*sinangler(i,j)
96 vout(i,j)=vout(i,j)+ &
97 & vrho*cosangler(i,j)+ &
98 & urho*sinangler(i,j)
99#ifdef MASKING
100 uout(i,j)=uout(i,j)*rmask_full(i,j)
101 vout(i,j)=vout(i,j)*rmask_full(i,j)
102#endif
103 END DO
104 END DO
105 ELSE
106 DO j=jstr,jend
107 DO i=istr,iend
108 urho=0.5_r8*(uinp(i,j)+uinp(i+1,j))
109 vrho=0.5_r8*(vinp(i,j)+vinp(i,j+1))
110 uout(i,j)=urho*cosangler(i,j)- &
111 & vrho*sinangler(i,j)
112 vout(i,j)=vrho*cosangler(i,j)+ &
113 & urho*sinangler(i,j)
114#ifdef MASKING
115 uout(i,j)=uout(i,j)*rmask_full(i,j)
116 vout(i,j)=vout(i,j)*rmask_full(i,j)
117#endif
118 END DO
119 END DO
120 END IF
121!
122! Exchange boundary data, if applicable.
123!
124 IF (lboundary) THEN
125 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
126 CALL exchange_r2d_tile (ng, tile, &
127 & lbi, ubi, lbj, ubj, &
128 & uout)
129 CALL exchange_r2d_tile (ng, tile, &
130 & lbi, ubi, lbj, ubj, &
131 & vout)
132#ifdef DISTRIBUTE
133 CALL mp_exchange2d (ng, tile, inlm, 2, &
134 & lbi, ubi, lbj, ubj, &
135 & nghostpoints, &
136 & ewperiodic(ng), nsperiodic(ng), &
137 & uout, vout)
138#endif
139 END IF
140 END IF
141
142 RETURN
subroutine exchange_r2d_tile(ng, tile, lbi, ubi, lbj, ubj, a)
integer, parameter inlm
Definition mod_param.F:662
integer nghostpoints
Definition mod_param.F:710
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
subroutine mp_exchange2d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, nghost, ew_periodic, ns_periodic, a, b, c, d)

References mod_scalars::ewperiodic, exchange_2d_mod::exchange_r2d_tile(), mod_param::inlm, mp_exchange_mod::mp_exchange2d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by set_avg_mod::set_avg_tile(), wrt_his_mod::wrt_his_nf90(), wrt_his_mod::wrt_his_pio(), wrt_quick_mod::wrt_quick_nf90(), wrt_quick_mod::wrt_quick_pio(), wrt_station_mod::wrt_station_nf90(), and wrt_station_mod::wrt_station_pio().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ uv_rotate3d()

subroutine, public uv_rotate_mod::uv_rotate3d ( integer, intent(in) ng,
integer, intent(in) tile,
logical, intent(in) add,
logical, intent(in) lboundary,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) lbk,
integer, intent(in) ubk,
real(r8), dimension(lbi:,lbj:), intent(in) cosangler,
real(r8), dimension(lbi:,lbj:), intent(in) sinangler,
real(r8), dimension(lbi:,lbj:), intent(in) rmask_full,
real(r8), dimension(lbi:,lbj:,lbk:), intent(in) uinp,
real(r8), dimension(lbi:,lbj:,lbk:), intent(in) vinp,
real(r8), dimension(lbi:,lbj:,lbk:), intent(inout) uout,
real(r8), dimension(lbi:,lbj:,lbk:), intent(inout) vout )

Definition at line 148 of file uv_rotate.F.

155!***********************************************************************
156!
157 USE mod_param
158 USE mod_scalars
159!
161# ifdef DISTRIBUTE
163# endif
164!
165! Imported variable declarations.
166!
167 logical, intent(in) :: add, Lboundary
168
169 integer, intent(in) :: ng, tile
170 integer, intent(in) :: LBi, UBi, LBj, UBj, LBk, UBk
171!
172# ifdef ASSUMED_SHAPE
173 real(r8), intent(in) :: CosAngler(LBi:,LBj:)
174 real(r8), intent(in) :: SinAngler(LBi:,LBj:)
175# ifdef MASKING
176 real(r8), intent(in) :: rmask_full(LBi:,LBj:)
177# endif
178 real(r8), intent(in) :: Uinp(LBi:,LBj:,LBk:)
179 real(r8), intent(in) :: Vinp(LBi:,LBj:,LBk:)
180
181 real(r8), intent(inout) :: Uout(LBi:,LBj:,LBk:)
182 real(r8), intent(inout) :: Vout(LBi:,LBj:,LBk:)
183# else
184 real(r8), intent(in) :: CosAngler(LBi:UBi,LBj:UBj)
185 real(r8), intent(in) :: SinAngler(LBi:UBi,LBj:UBj)
186# ifdef MASKING
187 real(r8), intent(in) :: rmask_full(LBi:UBi,LBj:UBj)
188# endif
189 real(r8), intent(in) :: Uinp(LBi:UBi,LBj:UBj,LBk:UBk)
190 real(r8), intent(in) :: Vinp(LBi:UBi,LBj:UBj,LBk:UBk)
191
192 real(r8), intent(inout) :: Uout(LBi:UBi,LBj:UBj,LBk:UBk)
193 real(r8), intent(inout) :: Vout(LBi:UBi,LBj:UBj,LBk:UBk)
194# endif
195!
196! Local variable declarations.
197!
198 integer :: i, j, k
199
200 real(r8) :: Urho, Vrho
201
202# include "set_bounds.h"
203!
204!-----------------------------------------------------------------------
205! Rotate 3D vector components to Eastward and Northward directions.
206!-----------------------------------------------------------------------
207!
208 IF (add) THEN
209 DO k=lbk,ubk
210 DO j=jstr,jend
211 DO i=istr,iend
212 urho=0.5_r8*(uinp(i,j,k)+uinp(i+1,j,k))
213 vrho=0.5_r8*(vinp(i,j,k)+vinp(i,j+1,k))
214 uout(i,j,k)=uout(i,j,k)+ &
215 & urho*cosangler(i,j)- &
216 & vrho*sinangler(i,j)
217 vout(i,j,k)=vout(i,j,k)+ &
218 & vrho*cosangler(i,j)+ &
219 & urho*sinangler(i,j)
220# ifdef MASKING
221 uout(i,j,k)=uout(i,j,k)*rmask_full(i,j)
222 vout(i,j,k)=vout(i,j,k)*rmask_full(i,j)
223# endif
224 END DO
225 END DO
226 END DO
227 ELSE
228 DO k=lbk,ubk
229 DO j=jstr,jend
230 DO i=istr,iend
231 urho=0.5_r8*(uinp(i,j,k)+uinp(i+1,j,k))
232 vrho=0.5_r8*(vinp(i,j,k)+vinp(i,j+1,k))
233 uout(i,j,k)=urho*cosangler(i,j)- &
234 & vrho*sinangler(i,j)
235 vout(i,j,k)=vrho*cosangler(i,j)+ &
236 & urho*sinangler(i,j)
237# ifdef MASKING
238 uout(i,j,k)=uout(i,j,k)*rmask_full(i,j)
239 vout(i,j,k)=vout(i,j,k)*rmask_full(i,j)
240# endif
241 END DO
242 END DO
243 END DO
244 END IF
245!
246! Exchange boundary data.
247!
248 IF (lboundary) THEN
249 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
250 CALL exchange_r3d_tile (ng, tile, &
251 & lbi, ubi, lbj, ubj, lbk, ubk, &
252 & uout)
253 CALL exchange_r3d_tile (ng, tile, &
254 & lbi, ubi, lbj, ubj, lbk, ubk, &
255 & vout)
256# ifdef DISTRIBUTE
257 CALL mp_exchange3d (ng, tile, inlm, 2, &
258 & lbi, ubi, lbj, ubj, lbk, ubk, &
259 & nghostpoints, &
260 & ewperiodic(ng), nsperiodic(ng), &
261 & uout, vout)
262# endif
263 END IF
264 END IF
265
266 RETURN
subroutine exchange_r3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)

References mod_scalars::ewperiodic, exchange_3d_mod::exchange_r3d_tile(), mod_param::inlm, mp_exchange_mod::mp_exchange3d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by set_avg_mod::set_avg_tile(), wrt_station_mod::wrt_station_nf90(), and wrt_station_mod::wrt_station_pio().

Here is the call graph for this function:
Here is the caller graph for this function: