Skip to content
Snippets Groups Projects
Commit 0b372abd authored by Rene Halver's avatar Rene Halver
Browse files

fixed compatibility issues between refactor and fortran-interface-fixes merges

parent bb9bd212
No related branches found
No related tags found
No related merge requests found
Pipeline #25563 failed
......@@ -75,13 +75,14 @@ PROGRAM ALL_test_f
END IF
END DO
CALL ALL_init(obj,3,4.0d0)
CALL ALL_init(obj,ALL_STAGGERED,3,4.0d0)
CALL ALL_set_work(obj, real( product(coords,1)*64,8) )
CALL ALL_set_vertices(obj,2,3,vertices)
CALL ALL_set_proc_grid_params(obj,coords,dims)
CALL ALL_set_communicator(obj,cart_comm)
CALL ALL_setup(obj,ALL_STAGGERED)
CALL ALL_balance(obj,ALL_STAGGERED)
CALL ALL_setup(obj)
CALL ALL_balance(obj)
CALL ALL_get_new_number_of_vertices(obj,n_vertices)
ALLOCATE(new_vertices(3 * n_vertices))
......
......@@ -29,6 +29,7 @@ POSSIBILITY OF SUCH DAMAGE.
*/
#include "../include/ALL.hpp"
#include <vector>
extern "C"
{
......@@ -48,10 +49,13 @@ extern "C"
}
// wrapper to set the minimum domain size
void ALL_set_min_domain_size_f(ALL<double,double>* all_obj, ALL_LB_t method, int dim, double* domain_size)
void ALL_set_min_domain_size_f(ALL<double,double>* all_obj, int dim, double* domain_size)
{
if(all_obj->get_dimension() != dim) throw ALL_Invalid_Argument_Exception(__FILE__,__func__,__LINE__,"Length of array does not match dimension");
all_obj->set_min_domain_size(method, domain_size);
std::vector<double> t_domain_size(dim);
for (int i = 0; i < dim; ++i)
t_domain_size.at(i) = domain_size[i];
all_obj->set_min_domain_size(t_domain_size);
}
// wrapper to set the work (scalar only for the moment)
......
......@@ -36,15 +36,16 @@ MODULE ALL_module
TYPE(c_ptr) :: object = C_NULL_PTR
END TYPE
! definitions of enum type for different methods
INTEGER(c_short), parameter :: ALL_STAGGERED = 0
INTEGER(c_short), parameter :: ALL_TENSOR = 1
INTEGER(c_short), parameter :: ALL_UNSTRUCTURED = 2
INTEGER(c_short), parameter :: ALL_CELLS = 3
INTEGER(c_short), parameter :: ALL_VORONOI = 4
INTEGER(c_int), parameter :: ALL_STAGGERED = 0
INTEGER(c_int), parameter :: ALL_TENSOR = 1
INTEGER(c_int), parameter :: ALL_UNSTRUCTURED = 2
INTEGER(c_int), parameter :: ALL_VORONOI = 3
INTEGER(c_int), parameter :: ALL_HISTOGRAM = 4
! interface functions / subroutines to C++
INTERFACE
FUNCTION ALL_init_int(dim, gamma) RESULT(this) BIND(C,NAME="ALL_init_f")
FUNCTION ALL_init_int(method, dim, gamma) RESULT(this) BIND(C,NAME="ALL_init_f")
USE ISO_C_BINDING
INTEGER(c_int),VALUE :: method
INTEGER(c_int),VALUE :: dim
REAL(c_double),VALUE :: gamma
TYPE(c_ptr) :: this
......@@ -57,10 +58,9 @@ MODULE ALL_module
INTEGER(c_int), VALUE :: nsize
INTEGER(c_int), DIMENSION(nloc) :: size
END SUBROUTINE
SUBROUTINE ALL_set_min_domain_size_int(obj, method, dim, domain_size) BIND(C,NAME="ALL_set_min_domain_size_f")
SUBROUTINE ALL_set_min_domain_size_int(obj, dim, domain_size) BIND(C,NAME="ALL_set_min_domain_size_f")
USE ISO_C_BINDING
INTEGER(c_int), VALUE :: dim
INTEGER(c_short), VALUE :: method
REAL(c_double), DIMENSION(dim) :: domain_size
TYPE(c_ptr), VALUE :: obj
END SUBROUTINE
......@@ -81,15 +81,13 @@ MODULE ALL_module
TYPE(c_ptr), VALUE :: obj
INTEGER, VALUE :: comm
END SUBROUTINE
SUBROUTINE ALL_setup_int(obj, method) BIND(C,NAME="ALL_setup_f")
SUBROUTINE ALL_setup_int(obj) BIND(C,NAME="ALL_setup_f")
USE ISO_C_BINDING
TYPE(c_ptr), VALUE :: obj
INTEGER(c_short), VALUE :: method
END SUBROUTINE
SUBROUTINE ALL_balance_int(obj, method) BIND(C,NAME="ALL_balance_f")
SUBROUTINE ALL_balance_int(obj) BIND(C,NAME="ALL_balance_f")
USE ISO_C_BINDING
TYPE(c_ptr), VALUE :: obj
INTEGER(c_short), VALUE :: method
END SUBROUTINE
SUBROUTINE ALL_get_new_number_of_vertices_int(obj,n) &
BIND(C,NAME="ALL_get_new_number_of_vertices_f")
......@@ -119,11 +117,12 @@ MODULE ALL_module
END INTERFACE
! module subroutines to be called from Fortran code
CONTAINS
SUBROUTINE ALL_init(obj, dim, gamma)
SUBROUTINE ALL_init(obj, method, dim, gamma)
TYPE(ALL_t) :: obj
INTEGER :: method
INTEGER :: dim
REAL(8) :: gamma
obj%object = ALL_init_int(INT(dim,c_int),REAL(gamma,c_double))
obj%object = ALL_init_int(INT(method,c_int),INT(dim,c_int),REAL(gamma,c_double))
END SUBROUTINE
SUBROUTINE ALL_set_proc_grid_params(obj, loc, ranks)
TYPE(ALL_t) :: obj
......@@ -131,12 +130,11 @@ MODULE ALL_module
INTEGER, DIMENSION(size(loc)) :: ranks
call ALL_set_proc_grid_params_int(obj%object, size(loc,1), loc, size(ranks,1), ranks)
END SUBROUTINE
SUBROUTINE ALL_set_min_domain_size(obj, method, dim, domain_size)
INTEGER(c_short) :: method
SUBROUTINE ALL_set_min_domain_size(obj, dim, domain_size)
INTEGER :: dim
REAL(8), DIMENSION(dim) :: domain_size
TYPE(ALL_t) :: obj
CALL ALL_set_min_domain_size_int(obj%object, method, dim, domain_size)
CALL ALL_set_min_domain_size_int(obj%object, dim, domain_size)
END SUBROUTINE
SUBROUTINE ALL_set_work(obj, work)
TYPE(ALL_t) :: obj
......@@ -155,17 +153,15 @@ MODULE ALL_module
INTEGER :: comm
CALL ALL_set_communicator_int(obj%object, comm)
END SUBROUTINE
SUBROUTINE ALL_setup(obj, method)
SUBROUTINE ALL_setup(obj)
USE ISO_C_BINDING
TYPE(ALL_t) :: obj
INTEGER(c_short) :: method
CALL ALL_setup_int(obj%object,method)
CALL ALL_setup_int(obj%object)
END SUBROUTINE
SUBROUTINE ALL_balance(obj, method)
SUBROUTINE ALL_balance(obj)
USE ISO_C_BINDING
TYPE(ALL_t) :: obj
INTEGER(c_short) :: method
CALL ALL_balance_int(obj%object,method)
CALL ALL_balance_int(obj%object)
END SUBROUTINE
SUBROUTINE ALL_get_new_number_of_vertices(obj,n)
TYPE(ALL_t) :: obj
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment