@@ -488,8 +488,8 @@ function LinearAlgebra.mul!(x_temp::AbstractArray{T,3}, A::AbstractDiffEqComposi
488488 if length (ops_1) == 0
489489 convolve_BC_left! (view (x_temp,i,:,j), view (M,i+ offset_x,:,j+ offset_z), opsA[ops_2_max_bpc_idx... ])
490490 convolve_BC_right! (view (x_temp,i,:,j), view (M,i+ offset_x,:,j+ offset_z), opsA[ops_2_max_bpc_idx... ])
491- if i <= pad[1 ] || i > size (x_temp)[1 ]- pad[1 ] # TODO 491-493
492- convolve_interior! (view (x_temp,i,:), view (M,i+ offset_y,: ), opsA[ops_2_max_bpc_idx... ])
491+ if i <= pad[1 ] || i > size (x_temp)[1 ]- pad[1 ] || j <= pad[ 3 ] || j > size (x_temp)[ 3 ] - pad[ 3 ]
492+ convolve_interior! (view (x_temp,i,:,j ), view (M,i+ offset_x,:,j + offset_z ), opsA[ops_2_max_bpc_idx... ])
493493 end
494494
495495 else
@@ -514,6 +514,40 @@ function LinearAlgebra.mul!(x_temp::AbstractArray{T,3}, A::AbstractDiffEqComposi
514514 end
515515 end
516516 end
517+ # convolve boundaries and unaccounted for interior in axis 3
518+ if length (ops_3) > 0
519+ for i in 1 : size (x_temp)[1 ]
520+ for j in 1 : size (x_temp)[2 ]
521+ # in the case of no axis 1 and 2 operators, we need to overwrite x_temp
522+ if length (ops_1) == 0 && length (ops_2) == 0
523+ convolve_BC_left! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[ops_3_max_bpc_idx... ])
524+ convolve_BC_right! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[ops_3_max_bpc_idx... ])
525+ if i <= pad[1 ] || i > size (x_temp)[1 ]- pad[1 ] # TODO 525-527
526+ convolve_interior! (view (x_temp,i,:), view (M,i+ offset_y,:), opsA[ops_3_max_bpc_idx... ])
527+ end
528+
529+ else
530+ convolve_BC_left! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[ops_3_max_bpc_idx... ], overwrite = false )
531+ convolve_BC_right! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[ops_3_max_bpc_idx... ], overwrite = false )
532+ if i <= pad[1 ] || i > size (x_temp)[1 ]- pad[1 ] || j <= pad[2 ] || j > size (x_temp)[2 ]- pad[2 ]
533+ convolve_interior! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[ops_3_max_bpc_idx... ], overwrite = false )
534+ end
535+
536+ end
537+ for Lidx in ops_3
538+ if Lidx != ops_3_max_bpc_idx[1 ]
539+ convolve_BC_left! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[Lidx], overwrite = false )
540+ convolve_BC_right! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[Lidx], overwrite = false )
541+ if i <= pad[1 ] || i > size (x_temp)[1 ]- pad[1 ] || j <= pad[2 ] || j > size (x_temp)[2 ]- pad[2 ]
542+ convolve_interior! (view (x_temp,i,j,:), view (M,i+ offset_x,j+ offset_y,:), opsA[Lidx], overwrite = false )
543+ elseif pad[3 ] - opsA[Lidx]. boundary_point_count > 0 # TODO 543-545
544+ convolve_interior_add_range! (view (x_temp,i,:), view (M,i+ offset_y,:), opsA[Lidx], pad[2 ] - opsA[Lidx]. boundary_point_count)
545+ end
546+ end
547+ end
548+ end
549+ end
550+ end
517551 end
518552
519553 # Here we compute mul! (additively) for every operator in opsB
0 commit comments