56 theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, &
57 v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, &
58 acc_ylaglag, acc_zlaglag)
59 type(
vector_t),
intent(inout) :: x, y, z
60 integer,
intent(in) :: n
61 real(kind=
rp),
intent(in) :: theta_min
62 real(kind=
rp),
intent(in) :: theta_max
63 real(kind=
rp),
intent(in) :: theta_len
64 type(
vector_t),
intent(inout),
optional :: u, v, w
65 type(
vector_t),
intent(inout),
optional :: u_lag, v_lag, w_lag
66 type(
vector_t),
intent(inout),
optional :: u_laglag, v_laglag, w_laglag
67 type(
vector_t),
intent(inout),
optional :: acc_xlag, acc_ylag, acc_zlag
68 type(
vector_t),
intent(inout),
optional :: acc_xlaglag
69 type(
vector_t),
intent(inout),
optional :: acc_ylaglag
70 type(
vector_t),
intent(inout),
optional :: acc_zlaglag
72 real(kind=
rp) :: radius
73 real(kind=
rp) :: theta_old
74 real(kind=
rp) :: theta
75 real(kind=
rp) :: dtheta
80 radius = sqrt(x%x(i) * x%x(i) + y%x(i) * y%x(i))
81 theta_old = modulo(atan2(y%x(i), x%x(i)) + 2.0_rp * pi, &
86 theta = theta + theta_len
90 theta = theta - theta_len
93 dtheta = theta - theta_old
94 x%x(i) = radius * cos(theta)
95 y%x(i) = radius * sin(theta)
98 if (
present(u) .and.
present(v)) &
100 if (
present(u_lag) .and.
present(v_lag)) &
102 if (
present(u_laglag) .and.
present(v_laglag)) &
104 if (
present(acc_xlag) .and.
present(acc_ylag)) &
106 if (
present(acc_xlaglag) .and.
present(acc_ylaglag)) &
107 call lpt_rotate_xy(acc_xlaglag%x(i), acc_ylaglag%x(i), dtheta)
117 periodic_enabled, n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, &
118 periodic_dir_z1, periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, &
119 periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, periodic_min1, &
120 periodic_min2, periodic_min3, periodic_max1, periodic_max2, &
121 periodic_max3, periodic_shift_x1, periodic_shift_y1, &
122 periodic_shift_z1, periodic_shift_x2, periodic_shift_y2, &
123 periodic_shift_z2, periodic_shift_x3, periodic_shift_y3, &
124 periodic_shift_z3, periodic_len1, periodic_len2, periodic_len3)
125 type(
vector_t),
intent(inout) :: x, y, z
126 integer,
intent(in) :: n
127 logical,
intent(in) :: periodic_enabled
128 integer,
intent(in) :: n_periodic_dirs
129 real(kind=
rp),
intent(in) :: periodic_dir_x1, periodic_dir_y1
130 real(kind=
rp),
intent(in) :: periodic_dir_z1, periodic_dir_x2
131 real(kind=
rp),
intent(in) :: periodic_dir_y2, periodic_dir_z2
132 real(kind=
rp),
intent(in) :: periodic_dir_x3, periodic_dir_y3
133 real(kind=
rp),
intent(in) :: periodic_dir_z3
134 real(kind=
rp),
intent(in) :: periodic_min1, periodic_min2, periodic_min3
135 real(kind=
rp),
intent(in) :: periodic_max1, periodic_max2, periodic_max3
136 real(kind=
rp),
intent(in) :: periodic_shift_x1, periodic_shift_y1
137 real(kind=
rp),
intent(in) :: periodic_shift_z1, periodic_shift_x2
138 real(kind=
rp),
intent(in) :: periodic_shift_y2, periodic_shift_z2
139 real(kind=
rp),
intent(in) :: periodic_shift_x3, periodic_shift_y3
140 real(kind=
rp),
intent(in) :: periodic_shift_z3
141 real(kind=
rp),
intent(in) :: periodic_len1, periodic_len2, periodic_len3
145 real(kind=
rp) :: dir(3)
146 real(kind=
rp) :: shift(3)
147 real(kind=
rp) :: coord
148 real(kind=
rp) :: periodic_min
149 real(kind=
rp) :: periodic_max
150 real(kind=
rp) :: periodic_len
152 if (.not. periodic_enabled)
return
155 point = [x%x(i), y%x(i), z%x(i)]
156 do j = 1, n_periodic_dirs
158 periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, &
159 periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, &
160 periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, &
161 periodic_min1, periodic_min2, periodic_min3, periodic_max1, &
162 periodic_max2, periodic_max3, periodic_shift_x1, &
163 periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, &
164 periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, &
165 periodic_shift_y3, periodic_shift_z3, periodic_len1, &
166 periodic_len2, periodic_len3, dir, periodic_min, &
167 periodic_max, shift, periodic_len)
169 coord = dot_product(
point, dir)
173 coord = coord + periodic_len
178 coord = coord - periodic_len
217 periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, periodic_dir_x2, &
218 periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, periodic_dir_y3, &
219 periodic_dir_z3, periodic_min1, periodic_min2, periodic_min3, &
220 periodic_max1, periodic_max2, periodic_max3, periodic_shift_x1, &
221 periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, &
222 periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, &
223 periodic_shift_y3, periodic_shift_z3, periodic_len1, periodic_len2, &
224 periodic_len3, dir, periodic_min, periodic_max, shift, periodic_len)
225 integer,
intent(in) :: idx
226 real(kind=
rp),
intent(in) :: periodic_dir_x1, periodic_dir_y1
227 real(kind=
rp),
intent(in) :: periodic_dir_z1, periodic_dir_x2
228 real(kind=
rp),
intent(in) :: periodic_dir_y2, periodic_dir_z2
229 real(kind=
rp),
intent(in) :: periodic_dir_x3, periodic_dir_y3
230 real(kind=
rp),
intent(in) :: periodic_dir_z3
231 real(kind=
rp),
intent(in) :: periodic_min1, periodic_min2, periodic_min3
232 real(kind=
rp),
intent(in) :: periodic_max1, periodic_max2, periodic_max3
233 real(kind=
rp),
intent(in) :: periodic_shift_x1, periodic_shift_y1
234 real(kind=
rp),
intent(in) :: periodic_shift_z1, periodic_shift_x2
235 real(kind=
rp),
intent(in) :: periodic_shift_y2, periodic_shift_z2
236 real(kind=
rp),
intent(in) :: periodic_shift_x3, periodic_shift_y3
237 real(kind=
rp),
intent(in) :: periodic_shift_z3
238 real(kind=
rp),
intent(in) :: periodic_len1, periodic_len2, periodic_len3
239 real(kind=
rp),
intent(out) :: dir(3)
240 real(kind=
rp),
intent(out) :: periodic_min
241 real(kind=
rp),
intent(out) :: periodic_max
242 real(kind=
rp),
intent(out) :: shift(3)
243 real(kind=
rp),
intent(out) :: periodic_len
247 dir = [periodic_dir_x1, periodic_dir_y1, periodic_dir_z1]
248 periodic_min = periodic_min1
249 periodic_max = periodic_max1
250 shift = [periodic_shift_x1, periodic_shift_y1, periodic_shift_z1]
251 periodic_len = periodic_len1
253 dir = [periodic_dir_x2, periodic_dir_y2, periodic_dir_z2]
254 periodic_min = periodic_min2
255 periodic_max = periodic_max2
256 shift = [periodic_shift_x2, periodic_shift_y2, periodic_shift_z2]
257 periodic_len = periodic_len2
259 dir = [periodic_dir_x3, periodic_dir_y3, periodic_dir_z3]
260 periodic_min = periodic_min3
261 periodic_max = periodic_max3
262 shift = [periodic_shift_x3, periodic_shift_y3, periodic_shift_z3]
263 periodic_len = periodic_len3
266 periodic_min = 0.0_rp
267 periodic_max = 0.0_rp
269 periodic_len = 0.0_rp
pure subroutine lpt_periodic_bc_get_translational_slot(idx, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, periodic_min3, periodic_max1, periodic_max2, periodic_max3, periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, periodic_len1, periodic_len2, periodic_len3, dir, periodic_min, periodic_max, shift, periodic_len)
Extract one translational periodic slot from scalar storage.
subroutine, public lpt_periodic_bc_wrap_translational_cpu(x, y, z, n, periodic_enabled, n_periodic_dirs, periodic_dir_x1, periodic_dir_y1, periodic_dir_z1, periodic_dir_x2, periodic_dir_y2, periodic_dir_z2, periodic_dir_x3, periodic_dir_y3, periodic_dir_z3, periodic_min1, periodic_min2, periodic_min3, periodic_max1, periodic_max2, periodic_max3, periodic_shift_x1, periodic_shift_y1, periodic_shift_z1, periodic_shift_x2, periodic_shift_y2, periodic_shift_z2, periodic_shift_x3, periodic_shift_y3, periodic_shift_z3, periodic_len1, periodic_len2, periodic_len3)
Wrap particle coordinates through translational periodic directions.
subroutine, public lpt_periodic_bc_wrap_rotational_cpu(x, y, z, n, theta_min, theta_max, theta_len, u, v, w, u_lag, v_lag, w_lag, u_laglag, v_laglag, w_laglag, acc_xlag, acc_ylag, acc_zlag, acc_xlaglag, acc_ylaglag, acc_zlaglag)
Wrap particles through a rotational periodic sector on the CPU.