Skip to content

Commit

Permalink
Merge f4dcda4 into 9d386e8
Browse files Browse the repository at this point in the history
  • Loading branch information
sloede committed Jul 6, 2023
2 parents 9d386e8 + f4dcda4 commit 33c6cb4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 10 deletions.
9 changes: 6 additions & 3 deletions examples/simple_trixi_controller.f90
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,21 @@ program simple_trixi_controller_f

! Initialize Trixi
call get_command_argument(1, argument)
call trixi_initialize(trim(argument) // c_null_char)
call trixi_initialize(argument)

! Set up the Trixi simulation
! We get a handle to use subsequently
call get_command_argument(2, argument)
handle = trixi_initialize_simulation(trim(argument) // c_null_char)
handle = trixi_initialize_simulation(argument)

! Get time step length
write(*, '(a, e14.8)') "Current time step length: ", trixi_calculate_dt(handle)

! Main loop
do while ( trixi_is_finished(handle) == 0 )
do
! Exit loop once simulation is completed
if ( trixi_is_finished(handle) ) exit

call trixi_step(handle)
end do

Expand Down
44 changes: 37 additions & 7 deletions src/trixi.f90
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ module LibTrixi
implicit none

interface
subroutine trixi_initialize(project_directory) bind(c)
subroutine trixi_initialize_c(project_directory) bind(c, name='trixi_initialize')
use, intrinsic :: iso_c_binding, only: c_char
character(kind=c_char), intent(in) :: project_directory(*)
character(kind=c_char), dimension(*), intent(in) :: project_directory
end subroutine

integer(c_int) function trixi_initialize_simulation(libelixir) bind(c)
integer(c_int) function trixi_initialize_simulation_c(libelixir) bind(c, name='trixi_initialize_simulation')
use, intrinsic :: iso_c_binding, only: c_char, c_int
character(kind=c_char), intent(in) :: libelixir(*)
character(kind=c_char), dimension(*), intent(in) :: libelixir
end function

real(c_double) function trixi_calculate_dt(handle) bind(c)
use, intrinsic :: iso_c_binding, only: c_int, c_double
integer(c_int), value, intent(in) :: handle
end function

integer(c_int) function trixi_is_finished(handle) bind(c)
integer(c_int) function trixi_is_finished_c(handle) bind(c, name='trixi_is_finished')
use, intrinsic :: iso_c_binding, only: c_int
integer(c_int), value, intent(in) :: handle
end function
Expand All @@ -35,9 +35,39 @@ subroutine trixi_finalize_simulation(handle) bind(c)
subroutine trixi_finalize() bind(c)
end subroutine

subroutine julia_eval_string(code) bind(c)
subroutine julia_eval_string_c(code) bind(c, name='julia_eval_string')
use, intrinsic :: iso_c_binding, only: c_char
character(kind=c_char), intent(in) :: code(*)
character(kind=c_char), dimension(*), intent(in) :: code
end subroutine
end interface

contains

logical function trixi_is_finished(handle)
use, intrinsic :: iso_c_binding, only: c_int
integer(c_int), intent(in) :: handle

trixi_is_finished = trixi_is_finished_c(handle) == 1
end function

subroutine trixi_initialize(project_directory)
use, intrinsic :: iso_c_binding, only: c_null_char
character(len=*), intent(in) :: project_directory

call trixi_initialize_c(trim(adjustl(project_directory)) // c_null_char)
end subroutine

integer(c_int) function trixi_initialize_simulation(libelixir)
use, intrinsic :: iso_c_binding, only: c_int, c_null_char
character(len=*), intent(in) :: libelixir

trixi_initialize_simulation = trixi_initialize_simulation_c(trim(adjustl(libelixir)) // c_null_char)
end function

subroutine julia_eval_string(code)
use, intrinsic :: iso_c_binding, only: c_null_char
character(len=*), intent(in) :: code

call julia_eval_string_c(trim(adjustl(code)) // c_null_char)
end subroutine
end module

0 comments on commit 33c6cb4

Please sign in to comment.