23 #include "sll_memory.h"
24 #include "sll_working_precision.h"
48 sll_int32 :: stencil_r
49 sll_int32 :: stencil_s
50 sll_real64,
dimension(:),
pointer :: xx
51 sll_real64,
dimension(:, :),
pointer :: buf
66 sll_int32,
intent(in) :: nc_x1
68 sll_int32,
intent(in) :: nc_x2
69 sll_real64,
intent(in) :: x2_min
70 sll_real64,
intent(in) :: x2_max
71 sll_int32,
intent(in) :: stencil_r
72 sll_int32,
intent(in) :: stencil_s
76 sll_allocate(adv, ierr)
99 sll_int32,
intent(in) :: nc_x1
101 sll_int32,
intent(in) :: nc_x2
102 sll_real64,
intent(in) :: x2_min
103 sll_real64,
intent(in) :: x2_max
104 sll_int32,
intent(in) :: stencil_r
105 sll_int32,
intent(in) :: stencil_s
117 adv%stencil_r = stencil_r
118 adv%stencil_s = stencil_s
123 sll_allocate(adv%xx(r:s), ierr)
124 sll_allocate(adv%buf(r:s, nc_x1 + 1), ierr)
127 adv%xx(i) = real(i, f64)
161 sll_real64,
intent(in) :: a1
162 sll_real64,
intent(in) :: a2
163 sll_real64,
intent(in) :: dt
164 sll_real64,
dimension(:, :),
intent(in) :: input
165 sll_real64,
dimension(:, :),
intent(out) :: output
177 sll_real64,
dimension(:, :),
pointer :: buf
178 sll_real64,
dimension(:),
pointer :: xx
180 sll_real64 :: delta_x2
189 delta_x2 = (adv%x2_max - adv%x2_min)/real(adv%Nc_x2, f64)
192 alpha = a2*dt/delta_x2
200 dt_loc = real(ell + i0, f64)*delta_x2/a2
201 i2_loc = modulo(i2 - ell - i0 - 1, nc_x2) + 1
202 call adv_x1%advect_1d_constant( &
205 input(1:nc_x1 + 1, i2_loc), &
206 buf(ell, 1:nc_x1 + 1))
226 sll_real64,
dimension(:, :),
intent(in) :: a1
227 sll_real64,
dimension(:, :),
intent(in) :: a2
228 sll_real64,
intent(in) :: dt
229 sll_real64,
dimension(:, :),
intent(in) :: input
230 sll_real64,
dimension(:, :),
intent(out) :: output
232 print *,
'#oblic_advect_2d not implemented for the moment'
233 print *,
size(input, 1),
size(input, 2), storage_size(adv)
234 output = 0.0_f64 + a1*a2*dt
Abstract class for advection.
subroutine, public sll_s_oblic_advect_2d_constant(adv, A1, A2, dt, input, output)
solves \partial_t f + \nabla A \cdot f = 0, \ A = (A1,A2) for time step dt interpolation in aligned a...
type(sll_t_oblic_2d_advector) function, pointer, public sll_f_new_oblic_2d_advector(Nc_x1, adv_x1, Nc_x2, x2_min, x2_max, stencil_r, stencil_s)
subroutine oblic_advect_2d(adv, A1, A2, dt, input, output)
subroutine initialize_oblic_2d_advector(adv, Nc_x1, adv_x1, Nc_x2, x2_min, x2_max, stencil_r, stencil_s)
real(kind=f64) function, public sll_f_lagrange_interpolate(x, degree, xi, yi)