diff --git a/examples/solverdummy/solverdummy.f90 b/examples/solverdummy/solverdummy.f90 index 8b0ae22..bc4909b 100644 --- a/examples/solverdummy/solverdummy.f90 +++ b/examples/solverdummy/solverdummy.f90 @@ -35,7 +35,7 @@ PROGRAM main commsize = 1 dt = 1 numberOfVertices = 3 - CALL precicef_create(participantName, config, rank, commsize, 50, 50) + CALL precicef_create(participantName, config, rank, commsize) ! Allocate dummy mesh with only one vertex CALL precicef_get_mesh_dimensions(meshName, dimensions, 50) diff --git a/precice.f90 b/precice.f90 index 0bd0390..8a939bd 100644 --- a/precice.f90 +++ b/precice.f90 @@ -3,20 +3,22 @@ module precice implicit none interface + + ! This interface contains subroutines of two kinds: + ! - precicec_ expect C-style, null-terminated strings and their sizes + ! - precicef_ automatically convert strings to null-terminated and call + ! the corresponding `precicec_`. - subroutine precicef_create(participantName, configFileName, & - & solverProcessIndex, solverProcessSize, & - & participantNameLength, configFileNameLength) & - & bind(c, name='precicef_create_') + subroutine precicec_create(participantName, configFileName, & + & solverProcessIndex, solverProcessSize) & + & bind(c, name='precicec_createParticipant') use, intrinsic :: iso_c_binding character(kind=c_char), dimension(*) :: participantName character(kind=c_char), dimension(*) :: configFileName integer(kind=c_int) :: solverProcessIndex integer(kind=c_int) :: solverProcessSize - integer(kind=c_int), value :: participantNameLength - integer(kind=c_int), value :: configFileNameLength - end subroutine precicef_create + end subroutine precicec_create subroutine precicef_initialize() & & bind(c, name='precicef_initialize_') @@ -312,4 +314,21 @@ end subroutine precicef_get_version_information end interface + contains + + subroutine precicef_create(participantName, configFileName, & + & solverProcessIndex, solverProcessSize) + + use, intrinsic :: iso_c_binding, only: c_char, c_int + character(len=*), intent(in) :: participantName + character(len=*), intent(in) :: configFileName + integer(c_int), intent(in) :: solverProcessIndex + integer(c_int), intent(in) :: solverProcessSize + + call precicec_create( & + trim(participantName)//c_null_char, & + trim(configFileName)//c_null_char, & + solverProcessIndex, solverProcessSize) + end subroutine precicef_create + end module precice