pure subroutine evp_fill_cell_fields_impl(mask_t, mis_in, mice_in, ci_in, &
mis_out, mice_out, ci_out, nx, ny)
!! Interior copy of the gathered `mis`/`mice`/`ci`, masked to `mask_t`
!! (defence-in-depth beyond the caller's own `wet_T` gate); ghost
!! rows/cols zeroed (the periodic wrap that follows fills them).
integer, intent(in) :: nx, ny
real(wp), intent(in) :: mask_t(nx, ny)
real(wp), intent(in) :: mis_in(nx, ny), mice_in(nx, ny), ci_in(nx, ny)
real(wp), intent(out) :: mis_out(nx, ny), mice_out(nx, ny), ci_out(nx, ny)
integer :: i, j
do concurrent(j=1:ny, i=1:nx)
mis_out(i, j) = mask_t(i, j)*mis_in(i, j)
mice_out(i, j) = mask_t(i, j)*mice_in(i, j)
ci_out(i, j) = mask_t(i, j)*ci_in(i, j)
end do
end subroutine evp_fill_cell_fields_impl