! This file was automatically generated by SWIG (http://www.swig.org).
! Version 4.0.0
!
! Do not make changes to this file unless you know what you are doing--modify
! the SWIG interface file instead.

! ---------------------------------------------------------------
! Programmer(s): Auto-generated by swig.
! ---------------------------------------------------------------
! SUNDIALS Copyright Start
! Copyright (c) 2002-2024, Lawrence Livermore National Security
! and Southern Methodist University.
! All rights reserved.
!
! See the top-level LICENSE and NOTICE files for details.
!
! SPDX-License-Identifier: BSD-3-Clause
! SUNDIALS Copyright End
! ---------------------------------------------------------------

module fnvector_mpimanyvector_mod
 use, intrinsic :: ISO_C_BINDING
 use fsundials_core_mod
 implicit none
 private

 ! DECLARATION CONSTRUCTS
 public :: FN_VMake_MPIManyVector
 public :: FN_VNew_MPIManyVector
 public :: FN_VGetSubvector_MPIManyVector
 public :: FN_VSetSubvectorArrayPointer_MPIManyVector
 public :: FN_VGetNumSubvectors_MPIManyVector
 public :: FN_VGetVectorID_MPIManyVector
 public :: FN_VPrint_MPIManyVector
 public :: FN_VPrintFile_MPIManyVector
 public :: FN_VCloneEmpty_MPIManyVector
 public :: FN_VClone_MPIManyVector
 public :: FN_VDestroy_MPIManyVector
 public :: FN_VSpace_MPIManyVector
 public :: FN_VGetCommunicator_MPIManyVector
 public :: FN_VGetLength_MPIManyVector
 public :: FN_VGetSubvectorLocalLength_MPIManyVector
 public :: FN_VLinearSum_MPIManyVector
 public :: FN_VConst_MPIManyVector
 public :: FN_VProd_MPIManyVector
 public :: FN_VDiv_MPIManyVector
 public :: FN_VScale_MPIManyVector
 public :: FN_VAbs_MPIManyVector
 public :: FN_VInv_MPIManyVector
 public :: FN_VAddConst_MPIManyVector
 public :: FN_VDotProd_MPIManyVector
 public :: FN_VMaxNorm_MPIManyVector
 public :: FN_VWrmsNorm_MPIManyVector
 public :: FN_VWrmsNormMask_MPIManyVector
 public :: FN_VMin_MPIManyVector
 public :: FN_VWL2Norm_MPIManyVector
 public :: FN_VL1Norm_MPIManyVector
 public :: FN_VCompare_MPIManyVector
 public :: FN_VInvTest_MPIManyVector
 public :: FN_VConstrMask_MPIManyVector
 public :: FN_VMinQuotient_MPIManyVector
 public :: FN_VLinearCombination_MPIManyVector
 public :: FN_VScaleAddMulti_MPIManyVector
 public :: FN_VDotProdMulti_MPIManyVector
 public :: FN_VDotProdMultiLocal_MPIManyVector
 public :: FN_VDotProdMultiAllReduce_MPIManyVector
 public :: FN_VLinearSumVectorArray_MPIManyVector
 public :: FN_VScaleVectorArray_MPIManyVector
 public :: FN_VConstVectorArray_MPIManyVector
 public :: FN_VWrmsNormVectorArray_MPIManyVector
 public :: FN_VWrmsNormMaskVectorArray_MPIManyVector
 public :: FN_VDotProdLocal_MPIManyVector
 public :: FN_VMaxNormLocal_MPIManyVector
 public :: FN_VMinLocal_MPIManyVector
 public :: FN_VL1NormLocal_MPIManyVector
 public :: FN_VWSqrSumLocal_MPIManyVector
 public :: FN_VWSqrSumMaskLocal_MPIManyVector
 public :: FN_VInvTestLocal_MPIManyVector
 public :: FN_VConstrMaskLocal_MPIManyVector
 public :: FN_VMinQuotientLocal_MPIManyVector
 public :: FN_VBufSize_MPIManyVector
 public :: FN_VBufPack_MPIManyVector
 public :: FN_VBufUnpack_MPIManyVector
 public :: FN_VEnableFusedOps_MPIManyVector
 public :: FN_VEnableLinearCombination_MPIManyVector
 public :: FN_VEnableScaleAddMulti_MPIManyVector
 public :: FN_VEnableDotProdMulti_MPIManyVector
 public :: FN_VEnableLinearSumVectorArray_MPIManyVector
 public :: FN_VEnableScaleVectorArray_MPIManyVector
 public :: FN_VEnableConstVectorArray_MPIManyVector
 public :: FN_VEnableWrmsNormVectorArray_MPIManyVector
 public :: FN_VEnableWrmsNormMaskVectorArray_MPIManyVector
 public :: FN_VEnableDotProdMultiLocal_MPIManyVector

 public :: FN_VGetSubvectorArrayPointer_MPIManyVector


! WRAPPER DECLARATIONS
interface
function swigc_FN_VMake_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VMake_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
integer(C_INT32_T), intent(in) :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
type(C_PTR) :: fresult
end function

function swigc_FN_VNew_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VNew_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT32_T), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR) :: fresult
end function

function swigc_FN_VGetSubvector_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VGetSubvector_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT32_T), intent(in) :: farg2
type(C_PTR) :: fresult
end function

function swigc_FN_VSetSubvectorArrayPointer_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VSetSubvectorArrayPointer_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT32_T), intent(in) :: farg3
integer(C_INT) :: fresult
end function

function swigc_FN_VGetNumSubvectors_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VGetNumSubvectors_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT32_T) :: fresult
end function

function swigc_FN_VGetVectorID_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VGetVectorID_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT) :: fresult
end function

subroutine swigc_FN_VPrint_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VPrint_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
end subroutine

subroutine swigc_FN_VPrintFile_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VPrintFile_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
end subroutine

function swigc_FN_VCloneEmpty_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VCloneEmpty_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR) :: fresult
end function

function swigc_FN_VClone_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VClone_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR) :: fresult
end function

subroutine swigc_FN_VDestroy_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VDestroy_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
end subroutine

subroutine swigc_FN_VSpace_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VSpace_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
end subroutine

function swigc_FN_VGetCommunicator_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VGetCommunicator_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT) :: fresult
end function

function swigc_FN_VGetLength_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VGetLength_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT32_T) :: fresult
end function

function swigc_FN_VGetSubvectorLocalLength_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VGetSubvectorLocalLength_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT32_T), intent(in) :: farg2
integer(C_INT32_T) :: fresult
end function

subroutine swigc_FN_VLinearSum_MPIManyVector(farg1, farg2, farg3, farg4, farg5) &
bind(C, name="_wrap_FN_VLinearSum_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE), intent(in) :: farg3
type(C_PTR), value :: farg4
type(C_PTR), value :: farg5
end subroutine

subroutine swigc_FN_VConst_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VConst_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: farg1
type(C_PTR), value :: farg2
end subroutine

subroutine swigc_FN_VProd_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VProd_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
end subroutine

subroutine swigc_FN_VDiv_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VDiv_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
end subroutine

subroutine swigc_FN_VScale_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VScale_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
end subroutine

subroutine swigc_FN_VAbs_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VAbs_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
end subroutine

subroutine swigc_FN_VInv_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VInv_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
end subroutine

subroutine swigc_FN_VAddConst_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VAddConst_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE), intent(in) :: farg2
type(C_PTR), value :: farg3
end subroutine

function swigc_FN_VDotProd_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VDotProd_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VMaxNorm_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VMaxNorm_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VWrmsNorm_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VWrmsNorm_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VWrmsNormMask_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VWrmsNormMask_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VMin_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VMin_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VWL2Norm_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VWL2Norm_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VL1Norm_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VL1Norm_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

subroutine swigc_FN_VCompare_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VCompare_MPIManyVector")
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
end subroutine

function swigc_FN_VInvTest_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VInvTest_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VConstrMask_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VConstrMask_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
integer(C_INT) :: fresult
end function

function swigc_FN_VMinQuotient_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VMinQuotient_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VLinearCombination_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VLinearCombination_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
integer(C_INT) :: fresult
end function

function swigc_FN_VScaleAddMulti_MPIManyVector(farg1, farg2, farg3, farg4, farg5) &
bind(C, name="_wrap_FN_VScaleAddMulti_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
type(C_PTR), value :: farg5
integer(C_INT) :: fresult
end function

function swigc_FN_VDotProdMulti_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VDotProdMulti_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
integer(C_INT) :: fresult
end function

function swigc_FN_VDotProdMultiLocal_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VDotProdMultiLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
integer(C_INT) :: fresult
end function

function swigc_FN_VDotProdMultiAllReduce_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VDotProdMultiAllReduce_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
integer(C_INT) :: fresult
end function

function swigc_FN_VLinearSumVectorArray_MPIManyVector(farg1, farg2, farg3, farg4, farg5, farg6) &
bind(C, name="_wrap_FN_VLinearSumVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
real(C_DOUBLE), intent(in) :: farg2
type(C_PTR), value :: farg3
real(C_DOUBLE), intent(in) :: farg4
type(C_PTR), value :: farg5
type(C_PTR), value :: farg6
integer(C_INT) :: fresult
end function

function swigc_FN_VScaleVectorArray_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VScaleVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
integer(C_INT) :: fresult
end function

function swigc_FN_VConstVectorArray_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VConstVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
real(C_DOUBLE), intent(in) :: farg2
type(C_PTR), value :: farg3
integer(C_INT) :: fresult
end function

function swigc_FN_VWrmsNormVectorArray_MPIManyVector(farg1, farg2, farg3, farg4) &
bind(C, name="_wrap_FN_VWrmsNormVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
integer(C_INT) :: fresult
end function

function swigc_FN_VWrmsNormMaskVectorArray_MPIManyVector(farg1, farg2, farg3, farg4, farg5) &
bind(C, name="_wrap_FN_VWrmsNormMaskVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
integer(C_INT), intent(in) :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
type(C_PTR), value :: farg4
type(C_PTR), value :: farg5
integer(C_INT) :: fresult
end function

function swigc_FN_VDotProdLocal_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VDotProdLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VMaxNormLocal_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VMaxNormLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VMinLocal_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VMinLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VL1NormLocal_MPIManyVector(farg1) &
bind(C, name="_wrap_FN_VL1NormLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VWSqrSumLocal_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VWSqrSumLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VWSqrSumMaskLocal_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VWSqrSumMaskLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VInvTestLocal_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VInvTestLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VConstrMaskLocal_MPIManyVector(farg1, farg2, farg3) &
bind(C, name="_wrap_FN_VConstrMaskLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
type(C_PTR), value :: farg3
integer(C_INT) :: fresult
end function

function swigc_FN_VMinQuotientLocal_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VMinQuotientLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
real(C_DOUBLE) :: fresult
end function

function swigc_FN_VBufSize_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VBufSize_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VBufPack_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VBufPack_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VBufUnpack_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VBufUnpack_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
type(C_PTR), value :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableFusedOps_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableFusedOps_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableLinearCombination_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableLinearCombination_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableScaleAddMulti_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableScaleAddMulti_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableDotProdMulti_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableDotProdMulti_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableLinearSumVectorArray_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableLinearSumVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableScaleVectorArray_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableScaleVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableConstVectorArray_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableConstVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableWrmsNormVectorArray_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableWrmsNormVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableWrmsNormMaskVectorArray_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableWrmsNormMaskVectorArray_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function

function swigc_FN_VEnableDotProdMultiLocal_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VEnableDotProdMultiLocal_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
integer(C_INT), intent(in) :: farg2
integer(C_INT) :: fresult
end function


function swigc_FN_VGetSubvectorArrayPointer_MPIManyVector(farg1, farg2) &
bind(C, name="_wrap_FN_VGetSubvectorArrayPointer_MPIManyVector") &
result(fresult)
use, intrinsic :: ISO_C_BINDING
type(C_PTR), value :: farg1
#ifdef SUNDIALS_INT32_T
integer(C_INT32_T), intent(in) :: farg2
#else
integer(C_INT64_T), intent(in) :: farg2
#endif
type(C_PTR) :: fresult
end function

end interface


contains
 ! MODULE SUBPROGRAMS
function FN_VMake_MPIManyVector(comm, num_subvectors, vec_array, sunctx) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), pointer :: swig_result
integer :: comm
integer(C_INT32_T), intent(in) :: num_subvectors
type(C_PTR) :: vec_array
type(C_PTR) :: sunctx
type(C_PTR) :: fresult 
integer(C_INT) :: farg1 
integer(C_INT32_T) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = int(comm, C_INT)
farg2 = num_subvectors
farg3 = vec_array
farg4 = sunctx
fresult = swigc_FN_VMake_MPIManyVector(farg1, farg2, farg3, farg4)
call c_f_pointer(fresult, swig_result)
end function

function FN_VNew_MPIManyVector(num_subvectors, vec_array, sunctx) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), pointer :: swig_result
integer(C_INT32_T), intent(in) :: num_subvectors
type(C_PTR) :: vec_array
type(C_PTR) :: sunctx
type(C_PTR) :: fresult 
integer(C_INT32_T) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = num_subvectors
farg2 = vec_array
farg3 = sunctx
fresult = swigc_FN_VNew_MPIManyVector(farg1, farg2, farg3)
call c_f_pointer(fresult, swig_result)
end function

function FN_VGetSubvector_MPIManyVector(v, vec_num) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), pointer :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T), intent(in) :: vec_num
type(C_PTR) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT32_T) :: farg2 

farg1 = c_loc(v)
farg2 = vec_num
fresult = swigc_FN_VGetSubvector_MPIManyVector(farg1, farg2)
call c_f_pointer(fresult, swig_result)
end function

function FN_VSetSubvectorArrayPointer_MPIManyVector(v_data, v, vec_num) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
real(C_DOUBLE), dimension(*), target, intent(inout) :: v_data
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T), intent(in) :: vec_num
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
integer(C_INT32_T) :: farg3 

farg1 = c_loc(v_data(1))
farg2 = c_loc(v)
farg3 = vec_num
fresult = swigc_FN_VSetSubvectorArrayPointer_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VGetNumSubvectors_MPIManyVector(v) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT32_T) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(v)
fresult = swigc_FN_VGetNumSubvectors_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VGetVectorID_MPIManyVector(v) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(N_Vector_ID) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(v)
fresult = swigc_FN_VGetVectorID_MPIManyVector(farg1)
swig_result = fresult
end function

subroutine FN_VPrint_MPIManyVector(v)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: v
type(C_PTR) :: farg1 

farg1 = c_loc(v)
call swigc_FN_VPrint_MPIManyVector(farg1)
end subroutine

subroutine FN_VPrintFile_MPIManyVector(v, outfile)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: v
type(C_PTR) :: outfile
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(v)
farg2 = outfile
call swigc_FN_VPrintFile_MPIManyVector(farg1, farg2)
end subroutine

function FN_VCloneEmpty_MPIManyVector(w) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), pointer :: swig_result
type(N_Vector), target, intent(inout) :: w
type(C_PTR) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(w)
fresult = swigc_FN_VCloneEmpty_MPIManyVector(farg1)
call c_f_pointer(fresult, swig_result)
end function

function FN_VClone_MPIManyVector(w) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), pointer :: swig_result
type(N_Vector), target, intent(inout) :: w
type(C_PTR) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(w)
fresult = swigc_FN_VClone_MPIManyVector(farg1)
call c_f_pointer(fresult, swig_result)
end function

subroutine FN_VDestroy_MPIManyVector(v)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: v
type(C_PTR) :: farg1 

farg1 = c_loc(v)
call swigc_FN_VDestroy_MPIManyVector(farg1)
end subroutine

subroutine FN_VSpace_MPIManyVector(v, lrw, liw)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T), dimension(*), target, intent(inout) :: lrw
integer(C_INT32_T), dimension(*), target, intent(inout) :: liw
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(v)
farg2 = c_loc(lrw(1))
farg3 = c_loc(liw(1))
call swigc_FN_VSpace_MPIManyVector(farg1, farg2, farg3)
end subroutine

function FN_VGetCommunicator_MPIManyVector(v) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(v)
fresult = swigc_FN_VGetCommunicator_MPIManyVector(farg1)
swig_result = int(fresult)
end function

function FN_VGetLength_MPIManyVector(v) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT32_T) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(v)
fresult = swigc_FN_VGetLength_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VGetSubvectorLocalLength_MPIManyVector(v, vec_num) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT32_T) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT32_T), intent(in) :: vec_num
integer(C_INT32_T) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT32_T) :: farg2 

farg1 = c_loc(v)
farg2 = vec_num
fresult = swigc_FN_VGetSubvectorLocalLength_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

subroutine FN_VLinearSum_MPIManyVector(a, x, b, y, z)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: a
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE), intent(in) :: b
type(N_Vector), target, intent(inout) :: y
type(N_Vector), target, intent(inout) :: z
real(C_DOUBLE) :: farg1 
type(C_PTR) :: farg2 
real(C_DOUBLE) :: farg3 
type(C_PTR) :: farg4 
type(C_PTR) :: farg5 

farg1 = a
farg2 = c_loc(x)
farg3 = b
farg4 = c_loc(y)
farg5 = c_loc(z)
call swigc_FN_VLinearSum_MPIManyVector(farg1, farg2, farg3, farg4, farg5)
end subroutine

subroutine FN_VConst_MPIManyVector(c, z)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: c
type(N_Vector), target, intent(inout) :: z
real(C_DOUBLE) :: farg1 
type(C_PTR) :: farg2 

farg1 = c
farg2 = c_loc(z)
call swigc_FN_VConst_MPIManyVector(farg1, farg2)
end subroutine

subroutine FN_VProd_MPIManyVector(x, y, z)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: y
type(N_Vector), target, intent(inout) :: z
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(x)
farg2 = c_loc(y)
farg3 = c_loc(z)
call swigc_FN_VProd_MPIManyVector(farg1, farg2, farg3)
end subroutine

subroutine FN_VDiv_MPIManyVector(x, y, z)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: y
type(N_Vector), target, intent(inout) :: z
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(x)
farg2 = c_loc(y)
farg3 = c_loc(z)
call swigc_FN_VDiv_MPIManyVector(farg1, farg2, farg3)
end subroutine

subroutine FN_VScale_MPIManyVector(c, x, z)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: c
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
real(C_DOUBLE) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c
farg2 = c_loc(x)
farg3 = c_loc(z)
call swigc_FN_VScale_MPIManyVector(farg1, farg2, farg3)
end subroutine

subroutine FN_VAbs_MPIManyVector(x, z)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(z)
call swigc_FN_VAbs_MPIManyVector(farg1, farg2)
end subroutine

subroutine FN_VInv_MPIManyVector(x, z)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(z)
call swigc_FN_VInv_MPIManyVector(farg1, farg2)
end subroutine

subroutine FN_VAddConst_MPIManyVector(x, b, z)
use, intrinsic :: ISO_C_BINDING
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE), intent(in) :: b
type(N_Vector), target, intent(inout) :: z
type(C_PTR) :: farg1 
real(C_DOUBLE) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(x)
farg2 = b
farg3 = c_loc(z)
call swigc_FN_VAddConst_MPIManyVector(farg1, farg2, farg3)
end subroutine

function FN_VDotProd_MPIManyVector(x, y) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: y
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(y)
fresult = swigc_FN_VDotProd_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VMaxNorm_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VMaxNorm_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VWrmsNorm_MPIManyVector(x, w) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: w
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(w)
fresult = swigc_FN_VWrmsNorm_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VWrmsNormMask_MPIManyVector(x, w, id) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: w
type(N_Vector), target, intent(inout) :: id
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(x)
farg2 = c_loc(w)
farg3 = c_loc(id)
fresult = swigc_FN_VWrmsNormMask_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VMin_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VMin_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VWL2Norm_MPIManyVector(x, w) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: w
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(w)
fresult = swigc_FN_VWL2Norm_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VL1Norm_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VL1Norm_MPIManyVector(farg1)
swig_result = fresult
end function

subroutine FN_VCompare_MPIManyVector(c, x, z)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), intent(in) :: c
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
real(C_DOUBLE) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c
farg2 = c_loc(x)
farg3 = c_loc(z)
call swigc_FN_VCompare_MPIManyVector(farg1, farg2, farg3)
end subroutine

function FN_VInvTest_MPIManyVector(x, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(z)
fresult = swigc_FN_VInvTest_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VConstrMask_MPIManyVector(c, x, m) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: c
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: m
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(c)
farg2 = c_loc(x)
farg3 = c_loc(m)
fresult = swigc_FN_VConstrMask_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VMinQuotient_MPIManyVector(num, denom) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: num
type(N_Vector), target, intent(inout) :: denom
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(num)
farg2 = c_loc(denom)
fresult = swigc_FN_VMinQuotient_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VLinearCombination_MPIManyVector(nvec, c, v, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
real(C_DOUBLE), dimension(*), target, intent(inout) :: c
type(C_PTR) :: v
type(N_Vector), target, intent(inout) :: z
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = nvec
farg2 = c_loc(c(1))
farg3 = v
farg4 = c_loc(z)
fresult = swigc_FN_VLinearCombination_MPIManyVector(farg1, farg2, farg3, farg4)
swig_result = fresult
end function

function FN_VScaleAddMulti_MPIManyVector(nvec, a, x, y, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
real(C_DOUBLE), dimension(*), target, intent(inout) :: a
type(N_Vector), target, intent(inout) :: x
type(C_PTR) :: y
type(C_PTR) :: z
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 
type(C_PTR) :: farg5 

farg1 = nvec
farg2 = c_loc(a(1))
farg3 = c_loc(x)
farg4 = y
farg5 = z
fresult = swigc_FN_VScaleAddMulti_MPIManyVector(farg1, farg2, farg3, farg4, farg5)
swig_result = fresult
end function

function FN_VDotProdMulti_MPIManyVector(nvec, x, y, dotprods) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
type(N_Vector), target, intent(inout) :: x
type(C_PTR) :: y
real(C_DOUBLE), dimension(*), target, intent(inout) :: dotprods
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = nvec
farg2 = c_loc(x)
farg3 = y
farg4 = c_loc(dotprods(1))
fresult = swigc_FN_VDotProdMulti_MPIManyVector(farg1, farg2, farg3, farg4)
swig_result = fresult
end function

function FN_VDotProdMultiLocal_MPIManyVector(nvec, x, y, dotprods) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
type(N_Vector), target, intent(inout) :: x
type(C_PTR) :: y
real(C_DOUBLE), dimension(*), target, intent(inout) :: dotprods
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = nvec
farg2 = c_loc(x)
farg3 = y
farg4 = c_loc(dotprods(1))
fresult = swigc_FN_VDotProdMultiLocal_MPIManyVector(farg1, farg2, farg3, farg4)
swig_result = fresult
end function

function FN_VDotProdMultiAllReduce_MPIManyVector(nvec_total, x, sum) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec_total
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE), dimension(*), target, intent(inout) :: sum
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = nvec_total
farg2 = c_loc(x)
farg3 = c_loc(sum(1))
fresult = swigc_FN_VDotProdMultiAllReduce_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VLinearSumVectorArray_MPIManyVector(nvec, a, x, b, y, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
real(C_DOUBLE), intent(in) :: a
type(C_PTR) :: x
real(C_DOUBLE), intent(in) :: b
type(C_PTR) :: y
type(C_PTR) :: z
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
real(C_DOUBLE) :: farg2 
type(C_PTR) :: farg3 
real(C_DOUBLE) :: farg4 
type(C_PTR) :: farg5 
type(C_PTR) :: farg6 

farg1 = nvec
farg2 = a
farg3 = x
farg4 = b
farg5 = y
farg6 = z
fresult = swigc_FN_VLinearSumVectorArray_MPIManyVector(farg1, farg2, farg3, farg4, farg5, farg6)
swig_result = fresult
end function

function FN_VScaleVectorArray_MPIManyVector(nvec, c, x, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
real(C_DOUBLE), dimension(*), target, intent(inout) :: c
type(C_PTR) :: x
type(C_PTR) :: z
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = nvec
farg2 = c_loc(c(1))
farg3 = x
farg4 = z
fresult = swigc_FN_VScaleVectorArray_MPIManyVector(farg1, farg2, farg3, farg4)
swig_result = fresult
end function

function FN_VConstVectorArray_MPIManyVector(nvecs, c, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvecs
real(C_DOUBLE), intent(in) :: c
type(C_PTR) :: z
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
real(C_DOUBLE) :: farg2 
type(C_PTR) :: farg3 

farg1 = nvecs
farg2 = c
farg3 = z
fresult = swigc_FN_VConstVectorArray_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VWrmsNormVectorArray_MPIManyVector(nvecs, x, w, nrm) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvecs
type(C_PTR) :: x
type(C_PTR) :: w
real(C_DOUBLE), dimension(*), target, intent(inout) :: nrm
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 

farg1 = nvecs
farg2 = x
farg3 = w
farg4 = c_loc(nrm(1))
fresult = swigc_FN_VWrmsNormVectorArray_MPIManyVector(farg1, farg2, farg3, farg4)
swig_result = fresult
end function

function FN_VWrmsNormMaskVectorArray_MPIManyVector(nvec, x, w, id, nrm) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
integer(C_INT), intent(in) :: nvec
type(C_PTR) :: x
type(C_PTR) :: w
type(N_Vector), target, intent(inout) :: id
real(C_DOUBLE), dimension(*), target, intent(inout) :: nrm
integer(C_INT) :: fresult 
integer(C_INT) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 
type(C_PTR) :: farg4 
type(C_PTR) :: farg5 

farg1 = nvec
farg2 = x
farg3 = w
farg4 = c_loc(id)
farg5 = c_loc(nrm(1))
fresult = swigc_FN_VWrmsNormMaskVectorArray_MPIManyVector(farg1, farg2, farg3, farg4, farg5)
swig_result = fresult
end function

function FN_VDotProdLocal_MPIManyVector(x, y) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: y
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(y)
fresult = swigc_FN_VDotProdLocal_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VMaxNormLocal_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VMaxNormLocal_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VMinLocal_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VMinLocal_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VL1NormLocal_MPIManyVector(x) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 

farg1 = c_loc(x)
fresult = swigc_FN_VL1NormLocal_MPIManyVector(farg1)
swig_result = fresult
end function

function FN_VWSqrSumLocal_MPIManyVector(x, w) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: w
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(w)
fresult = swigc_FN_VWSqrSumLocal_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VWSqrSumMaskLocal_MPIManyVector(x, w, id) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: w
type(N_Vector), target, intent(inout) :: id
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(x)
farg2 = c_loc(w)
farg3 = c_loc(id)
fresult = swigc_FN_VWSqrSumMaskLocal_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VInvTestLocal_MPIManyVector(x, z) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: z
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(z)
fresult = swigc_FN_VInvTestLocal_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VConstrMaskLocal_MPIManyVector(c, x, m) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: c
type(N_Vector), target, intent(inout) :: x
type(N_Vector), target, intent(inout) :: m
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 
type(C_PTR) :: farg3 

farg1 = c_loc(c)
farg2 = c_loc(x)
farg3 = c_loc(m)
fresult = swigc_FN_VConstrMaskLocal_MPIManyVector(farg1, farg2, farg3)
swig_result = fresult
end function

function FN_VMinQuotientLocal_MPIManyVector(num, denom) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE) :: swig_result
type(N_Vector), target, intent(inout) :: num
type(N_Vector), target, intent(inout) :: denom
real(C_DOUBLE) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(num)
farg2 = c_loc(denom)
fresult = swigc_FN_VMinQuotientLocal_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VBufSize_MPIManyVector(x, size) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: x
integer(C_INT32_T), dimension(*), target, intent(inout) :: size
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = c_loc(size(1))
fresult = swigc_FN_VBufSize_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VBufPack_MPIManyVector(x, buf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(C_PTR) :: buf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = buf
fresult = swigc_FN_VBufPack_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VBufUnpack_MPIManyVector(x, buf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: x
type(C_PTR) :: buf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
type(C_PTR) :: farg2 

farg1 = c_loc(x)
farg2 = buf
fresult = swigc_FN_VBufUnpack_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableFusedOps_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableFusedOps_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableLinearCombination_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableLinearCombination_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableScaleAddMulti_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableScaleAddMulti_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableDotProdMulti_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableDotProdMulti_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableLinearSumVectorArray_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableLinearSumVectorArray_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableScaleVectorArray_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableScaleVectorArray_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableConstVectorArray_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableConstVectorArray_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableWrmsNormVectorArray_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableWrmsNormVectorArray_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableWrmsNormMaskVectorArray_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableWrmsNormMaskVectorArray_MPIManyVector(farg1, farg2)
swig_result = fresult
end function

function FN_VEnableDotProdMultiLocal_MPIManyVector(v, tf) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
integer(C_INT) :: swig_result
type(N_Vector), target, intent(inout) :: v
integer(C_INT), intent(in) :: tf
integer(C_INT) :: fresult 
type(C_PTR) :: farg1 
integer(C_INT) :: farg2 

farg1 = c_loc(v)
farg2 = tf
fresult = swigc_FN_VEnableDotProdMultiLocal_MPIManyVector(farg1, farg2)
swig_result = fresult
end function


function FN_VGetSubvectorArrayPointer_MPIManyVector(v, vec_num) &
result(swig_result)
use, intrinsic :: ISO_C_BINDING
real(C_DOUBLE), dimension(:), pointer :: swig_result
type(N_Vector), target, intent(inout) :: v
#ifdef SUNDIALS_INT32_T
integer(C_INT32_T), intent(in) :: vec_num
#else
integer(C_INT64_T), intent(in) :: vec_num
#endif
type(C_PTR) :: fresult
type(C_PTR) :: farg1
#ifdef SUNDIALS_INT32_T
integer(C_INT32_T) :: farg2
#else
integer(C_INT64_T) :: farg2
#endif

farg1 = c_loc(v)
farg2 = vec_num
fresult = swigc_FN_VGetSubvectorArrayPointer_MPIManyVector(farg1, farg2)
call c_f_pointer(fresult, swig_result, [FN_VGetSubvectorLocalLength_MPIManyVector(v, vec_num)])
end function


end module
