From a53e0ecf6d3e5d3bb3ca32fa800f9eb17ff8ba1e Mon Sep 17 00:00:00 2001 From: Jeffrey Armstrong Date: Tue, 27 Oct 2020 14:42:15 -0400 Subject: Implemented status enums. Implemented additional Fortran wrappers for getElements and any procedures returning int arrays. --- src/clp.f90 | 96 +++++++++++++++++++++++++++++++++++++++++++++++---- src/clp_constants.F90 | 16 +++++++++ 2 files changed, 106 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/clp.f90 b/src/clp.f90 index 427ec55..2c8692a 100644 --- a/src/clp.f90 +++ b/src/clp.f90 @@ -401,21 +401,25 @@ module clp type(c_ptr), value :: model type(c_ptr) :: Clp_getVectorStarts_C end function - function Clp_getIndices(model) bind(C,name="Clp_getIndices") + + function Clp_getIndices_C(model) bind(C,name="Clp_getIndices") use iso_c_binding type(c_ptr), value :: model - type(c_ptr) :: Clp_getIndices + type(c_ptr) :: Clp_getIndices_C end function - function Clp_getVectorLengths(model) bind(C,name="Clp_getVectorLengths") + + function Clp_getVectorLengths_C(model) bind(C,name="Clp_getVectorLengths") use iso_c_binding type(c_ptr), value :: model - type(c_ptr) :: Clp_getVectorLengths + type(c_ptr) :: Clp_getVectorLengths_C end function - function Clp_getElements(model) bind(C,name="Clp_getElements") + + function Clp_getElements_C(model) bind(C,name="Clp_getElements") use iso_c_binding type(c_ptr), value :: model - type(c_ptr) :: Clp_getElements + type(c_ptr) :: Clp_getElements_C end function + function Clp_objectiveValue(model) bind(C,name="Clp_objectiveValue") use iso_c_binding type(c_ptr), value :: model @@ -1616,4 +1620,84 @@ contains end subroutine Clp_freeRay + function Clp_getIndices(model) result(res) + use iso_c_binding + implicit none + + type(c_ptr) :: model + integer(c_int), dimension(:), pointer :: res + integer::nrows + + type(c_ptr) :: c_res + + res => null() + + c_res = Clp_getIndices_C(model) + if(c_associated(c_res)) then + nrows = Clp_Numberrows(model) + call c_f_pointer(c_res, res, (/ nrows /)) + end if + + end function Clp_getIndices + + function Clp_getVectorLengths(model) result(res) + use iso_c_binding + implicit none + + type(c_ptr) :: model + integer(c_int), dimension(:), pointer :: res + integer::ncols + + type(c_ptr) :: c_res + + res => null() + + c_res = Clp_getVectorLengths_C(model) + if(c_associated(c_res)) then + ncols = Clp_Numbercolumns(model) + call c_f_pointer(c_res, res, (/ ncols /)) + end if + + end function Clp_getVectorLengths + + function Clp_getElements(model) result(res) + use iso_c_binding + use clp_constants + implicit none + + type(c_ptr) :: model + real(c_double), dimension(:), pointer :: res + integer :: n + + type(c_ptr) :: c_res + + res => null() + + c_res = Clp_getElements_C(model) + if(c_associated(c_res)) then + n = Clp_getNumElements(model) + call c_f_pointer(c_res, res, (/ n /)) + end if + + end function Clp_getElements + + subroutine Clp_integerInformation(model, str) + use iso_c_binding + use clp_interface_utils + implicit none + + type(c_ptr) :: model + character(*), intent(out) :: str + + type(c_ptr) :: cstr + + str = ' ' + + cstr = Clp_integerInformation_C(model) + if(c_associated(cstr)) then + call populate_fortran_string(cstr, str) + end if + + end subroutine Clp_integerInformation + end module clp diff --git a/src/clp_constants.F90 b/src/clp_constants.F90 index bf7b285..5a44089 100644 --- a/src/clp_constants.F90 +++ b/src/clp_constants.F90 @@ -11,4 +11,20 @@ module clp_constants integer, parameter :: CoinBigIndex_t = c_long_long #endif + enum, bind(c) + enumerator :: Status_isFree = 0 + enumerator :: Status_basic + enumerator :: Status_atUpperBound + enumerator :: Status_atLowerBound + enumerator :: Status_superBasic + enumerator :: Status_isFixed + end enum + + enum, bind(c) + enumerator :: FakeBound_noFake = 0 + enumerator :: FakeBound_lowerFake + enumerator :: FakeBound_upperFake + enumerator :: FakeBound_bothFake + end enum + end module clp_constants -- cgit v1.2.3