diff --git a/CMakeLists.txt b/CMakeLists.txt index fb83d19..7f40b77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,6 +104,13 @@ endif(C_WRAPPER) if(FORTRAN_WRAPPER) message("-- MUI Fortran wrapper: Selected") + find_package(MPI REQUIRED) + if(MPI_FOUND) + include_directories(SYSTEM ${MPI_INCLUDE_PATH}) + elseif(NOT MPI_FOUND) + message(SEND_ERROR "MPI not found") + endif(MPI_FOUND) + check_language(Fortran) if(CMAKE_Fortran_COMPILER) enable_language(Fortran) diff --git a/src/mui.h b/src/mui.h index b022179..8ff3c2a 100644 --- a/src/mui.h +++ b/src/mui.h @@ -63,9 +63,9 @@ //Include temporal samplers #include "samplers/temporal/temporal_sampler_exact.h" #include "samplers/temporal/temporal_sampler_gauss.h" +#include "samplers/temporal/temporal_sampler_gauss_adaptive.h" #include "samplers/temporal/temporal_sampler_mean.h" #include "samplers/temporal/temporal_sampler_sum.h" -#include "samplers/temporal/temporal_sampler_linear.h" //Include coupling algorithms #include "samplers/algorithm/algo_fixed_relaxation.h" @@ -120,7 +120,6 @@ namespace mui { DECLARE_SAMPLER_0ARG(temporal_sampler_gauss,SUFFIX,config_##SUFFIX);\ DECLARE_SAMPLER_0ARG(temporal_sampler_sum,SUFFIX,config_##SUFFIX);\ DECLARE_SAMPLER_0ARG(temporal_sampler_mean,SUFFIX,config_##SUFFIX);\ - DECLARE_SAMPLER_0ARG(temporal_sampler_linear,SUFFIX,config_##SUFFIX);\ DECLARE_SAMPLER_0ARG(algo_fixed_relaxation,SUFFIX,config_##SUFFIX);\ DECLARE_SAMPLER_0ARG(algo_aitken,SUFFIX,config_##SUFFIX);\ namespace geometry {\ @@ -162,7 +161,6 @@ SPECIALIZE(3fx,float,int64_t,3); DECLARE_SAMPLER_0ARG(temporal_sampler_gauss,SUFFIX,CONFIG);\ DECLARE_SAMPLER_0ARG(temporal_sampler_sum,SUFFIX,CONFIG);\ DECLARE_SAMPLER_0ARG(temporal_sampler_mean,SUFFIX,CONFIG);\ - DECLARE_SAMPLER_0ARG(temporal_sampler_linear,SUFFIX,CONFIG);\ DECLARE_SAMPLER_0ARG(algo_fixed_relaxation,SUFFIX,CONFIG);\ DECLARE_SAMPLER_0ARG(algo_aitken,SUFFIX,CONFIG);\ } diff --git a/wrappers/Fortran/mui_f_wrapper_1d.f90 b/wrappers/Fortran/mui_f_wrapper_1d.f90 index 7f10b4e..86623d2 100644 --- a/wrappers/Fortran/mui_f_wrapper_1d.f90 +++ b/wrappers/Fortran/mui_f_wrapper_1d.f90 @@ -13865,62 +13865,62 @@ end subroutine mui_announce_recv_disable_1t_f subroutine mui_barrier_1f_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_1f_f subroutine mui_barrier_1fx_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_1fx_f subroutine mui_barrier_1d_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_1d_f subroutine mui_barrier_1dx_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_1dx_f subroutine mui_barrier_1t_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_1t_f !Barrier at two time values subroutine mui_barrier_1f_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t,it + real(kind=c_float), intent(in) :: t,it end subroutine mui_barrier_1f_pair_f subroutine mui_barrier_1fx_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t,it + real(kind=c_float), intent(in) :: t,it end subroutine mui_barrier_1fx_pair_f subroutine mui_barrier_1d_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_1d_pair_f subroutine mui_barrier_1dx_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_1dx_pair_f subroutine mui_barrier_1t_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_1t_pair_f !****************************************** @@ -13931,144 +13931,144 @@ end subroutine mui_barrier_1t_pair_f subroutine mui_forget_upper_1f_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1f_f subroutine mui_forget_upper_1fx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1fx_f subroutine mui_forget_upper_1d_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1d_f subroutine mui_forget_upper_1dx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1dx_f subroutine mui_forget_upper_1t_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1t_f !Forget log between [-inf, -inf], [upper_1, upper_2] subroutine mui_forget_upper_1f_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1f_pair_f subroutine mui_forget_upper_1fx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1fx_pair_f subroutine mui_forget_upper_1d_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1d_pair_f subroutine mui_forget_upper_1dx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1dx_pair_f subroutine mui_forget_upper_1t_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_1t_pair_f !Forget log between [lower, upper] subroutine mui_forget_lower_upper_1f_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1f_f subroutine mui_forget_lower_upper_1fx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1fx_f subroutine mui_forget_lower_upper_1d_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1d_f subroutine mui_forget_lower_upper_1dx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1dx_f subroutine mui_forget_lower_upper_1t_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1t_f !Forget log between [lower_1, lower_2], [upper_1, upper_2] subroutine mui_forget_lower_upper_1f_pair_f(uniface,lower_1,lower_2,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1f_pair_f subroutine mui_forget_lower_upper_1fx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1fx_pair_f subroutine mui_forget_lower_upper_1d_pair_f(uniface,lower_1,lower_2,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1d_pair_f subroutine mui_forget_lower_upper_1dx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1dx_pair_f subroutine mui_forget_lower_upper_1t_pair_f(uniface,lower_1,lower_2,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_1t_pair_f !Set to forget log between [-inf, current-length] automatically diff --git a/wrappers/Fortran/mui_f_wrapper_2d.f90 b/wrappers/Fortran/mui_f_wrapper_2d.f90 index efdc217..53fde3b 100644 --- a/wrappers/Fortran/mui_f_wrapper_2d.f90 +++ b/wrappers/Fortran/mui_f_wrapper_2d.f90 @@ -14228,62 +14228,62 @@ end subroutine mui_announce_recv_disable_2t_f subroutine mui_barrier_2f_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_2f_f subroutine mui_barrier_2fx_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_2fx_f subroutine mui_barrier_2d_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_2d_f subroutine mui_barrier_2dx_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_2dx_f subroutine mui_barrier_2t_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_2t_f !Barrier at two time values subroutine mui_barrier_2f_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t,it + real(kind=c_float), intent(in) :: t,it end subroutine mui_barrier_2f_pair_f subroutine mui_barrier_2fx_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t,it + real(kind=c_float), intent(in) :: t,it end subroutine mui_barrier_2fx_pair_f subroutine mui_barrier_2d_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_2d_pair_f subroutine mui_barrier_2dx_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_2dx_pair_f subroutine mui_barrier_2t_pair_f(uniface,t,it) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t,it + real(kind=c_double), intent(in) :: t,it end subroutine mui_barrier_2t_pair_f !****************************************** @@ -14294,108 +14294,108 @@ end subroutine mui_barrier_2t_pair_f subroutine mui_forget_upper_2f_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2f_f subroutine mui_forget_upper_2fx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2fx_f subroutine mui_forget_upper_2d_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2d_f subroutine mui_forget_upper_2dx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2dx_f subroutine mui_forget_upper_2t_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2t_f !Forget log between [-inf, -inf], [upper_1, upper_2] subroutine mui_forget_upper_2f_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2f_pair_f subroutine mui_forget_upper_2fx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2fx_pair_f subroutine mui_forget_upper_2d_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2d_pair_f subroutine mui_forget_upper_2dx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2dx_pair_f subroutine mui_forget_upper_2t_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_2t_pair_f !Forget log between [lower, upper] subroutine mui_forget_lower_upper_2f_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2f_f subroutine mui_forget_lower_upper_2fx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2fx_f subroutine mui_forget_lower_upper_2d_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2d_f subroutine mui_forget_lower_upper_2dx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2dx_f subroutine mui_forget_lower_upper_2t_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2t_f !Forget log between [lower_1, lower_2], [upper_1, upper_2] @@ -14403,40 +14403,40 @@ subroutine mui_forget_lower_upper_2f_pair_f(uniface,lower_1,lower_2,upper_1,uppe reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2f_pair_f subroutine mui_forget_lower_upper_2fx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2fx_pair_f subroutine mui_forget_lower_upper_2d_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2d_pair_f subroutine mui_forget_lower_upper_2dx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2dx_pair_f subroutine mui_forget_lower_upper_2t_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_2t_pair_f !Set to forget log between [-inf, current-length] automatically diff --git a/wrappers/Fortran/mui_f_wrapper_3d.f90 b/wrappers/Fortran/mui_f_wrapper_3d.f90 index 3812ff2..07ea0f0 100644 --- a/wrappers/Fortran/mui_f_wrapper_3d.f90 +++ b/wrappers/Fortran/mui_f_wrapper_3d.f90 @@ -14427,62 +14427,62 @@ end subroutine mui_announce_recv_disable_3t_f subroutine mui_barrier_3f_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_3f_f subroutine mui_barrier_3fx_f(uniface,t) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t + real(kind=c_float), intent(in) :: t end subroutine mui_barrier_3fx_f subroutine mui_barrier_3d_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_3d_f subroutine mui_barrier_3dx_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_3dx_f subroutine mui_barrier_3t_f(uniface,t) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t + real(kind=c_double), intent(in) :: t end subroutine mui_barrier_3t_f !Barrier at two time values subroutine mui_barrier_3f_pair_f(uniface,t_1,t_2) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t_1,t_2 + real(kind=c_float), intent(in) :: t_1,t_2 end subroutine mui_barrier_3f_pair_f subroutine mui_barrier_3fx_pair_f(uniface,t_1,t_2) bind(C) import :: c_ptr,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: t_1,t_2 + real(kind=c_float), intent(in) :: t_1,t_2 end subroutine mui_barrier_3fx_pair_f subroutine mui_barrier_3d_pair_f(uniface,t_1,t_2) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t_1,t_2 + real(kind=c_double), intent(in) :: t_1,t_2 end subroutine mui_barrier_3d_pair_f subroutine mui_barrier_3dx_pair_f(uniface,t_1,t_2) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t_1,t_2 + real(kind=c_double), intent(in) :: t_1,t_2 end subroutine mui_barrier_3dx_pair_f subroutine mui_barrier_3t_pair_f(uniface,t_1,t_2) bind(C) import :: c_ptr,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: t_1,t_2 + real(kind=c_double), intent(in) :: t_1,t_2 end subroutine mui_barrier_3t_pair_f !****************************************** @@ -14493,108 +14493,108 @@ end subroutine mui_barrier_3t_pair_f subroutine mui_forget_upper_3f_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3f_f subroutine mui_forget_upper_3fx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3fx_f subroutine mui_forget_upper_3d_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3d_f subroutine mui_forget_upper_3dx_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3dx_f subroutine mui_forget_upper_3t_f(uniface,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3t_f !Forget log between [-inf, -inf], [upper_1, upper_2] subroutine mui_forget_upper_3f_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3f_pair_f subroutine mui_forget_upper_3fx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3fx_pair_f subroutine mui_forget_upper_3d_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3d_pair_f subroutine mui_forget_upper_3dx_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3dx_pair_f subroutine mui_forget_upper_3t_pair_f(uniface,upper_1,upper_2,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_upper_3t_pair_f !Forget log between [lower, upper] subroutine mui_forget_lower_upper_3f_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3f_f subroutine mui_forget_lower_upper_3fx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3fx_f subroutine mui_forget_lower_upper_3d_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3d_f subroutine mui_forget_lower_upper_3dx_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3dx_f subroutine mui_forget_lower_upper_3t_f(uniface,lower,upper,reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower,upper - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower,upper + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3t_f !Forget log between [lower_1, lower_2], [upper_1, upper_2] @@ -14602,40 +14602,40 @@ subroutine mui_forget_lower_upper_3f_pair_f(uniface,lower_1,lower_2,upper_1,uppe reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3f_pair_f subroutine mui_forget_lower_upper_3fx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_float type(c_ptr), intent(in), value :: uniface - real(kind=c_float), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_float), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3fx_pair_f subroutine mui_forget_lower_upper_3d_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3d_pair_f subroutine mui_forget_lower_upper_3dx_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3dx_pair_f subroutine mui_forget_lower_upper_3t_pair_f(uniface,lower_1,lower_2,upper_1,upper_2, & reset_log) bind(C) import :: c_ptr,c_int,c_double type(c_ptr), intent(in), value :: uniface - real(kind=c_double), intent(in), value :: lower_1,lower_2,upper_1,upper_2 - integer(kind=c_int), intent(in), value :: reset_log + real(kind=c_double), intent(in) :: lower_1,lower_2,upper_1,upper_2 + integer(kind=c_int), intent(in) :: reset_log end subroutine mui_forget_lower_upper_3t_pair_f !Set to forget log between [-inf, current-length] automatically diff --git a/wrappers/Fortran/unit_test.f90 b/wrappers/Fortran/unit_test.f90 index 8538558..8ee8361 100644 --- a/wrappers/Fortran/unit_test.f90 +++ b/wrappers/Fortran/unit_test.f90 @@ -112,6 +112,9 @@ program main !Commit (transmit) the pushed value at commit_time=0 call mui_commit_1d_f(uniface_1d, commit_time) + !Barrier to synchronize all domains (tests barrier function parameter passing) + call mui_barrier_1d_f(uniface_1d, commit_time) + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_1d_f(spatial_sampler_exact_1d, tolerance) call mui_create_temporal_sampler_exact_1d_f(temporal_sampler_exact_1d, tolerance) @@ -122,6 +125,9 @@ program main print *, "Fetched 1D interface value = ",fetch_result_1d + !Forget data before commit_time (tests forget function parameter passing) + call mui_forget_upper_1d_f(uniface_1d, commit_time, 1_c_int) + !Destroy created 1D MUI objects call mui_destroy_sampler_exact_1d_f(spatial_sampler_exact_1d) call mui_destroy_temporal_sampler_exact_1d_f(temporal_sampler_exact_1d) @@ -141,6 +147,9 @@ program main !Commit (transmit) the pushed value at commit_time=0 call mui_commit_2d_f(uniface_2d, commit_time) + !Barrier to synchronize all domains (tests barrier function parameter passing) + call mui_barrier_2d_f(uniface_2d, commit_time) + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_2d_f(spatial_sampler_exact_2d, tolerance) call mui_create_temporal_sampler_exact_2d_f(temporal_sampler_exact_2d, tolerance) @@ -151,6 +160,9 @@ program main print *, "Fetched 2D interface value = ",fetch_result_2d + !Forget data before commit_time (tests forget function parameter passing) + call mui_forget_upper_2d_f(uniface_2d, commit_time, 1_c_int) + !Destroy created 2D MUI objects call mui_destroy_sampler_exact_2d_f(spatial_sampler_exact_2d) call mui_destroy_temporal_sampler_exact_2d_f(temporal_sampler_exact_2d) @@ -170,6 +182,9 @@ program main !Commit (transmit) the pushed value at commit_time=0 call mui_commit_3d_f(uniface_3d, commit_time) + !Barrier to synchronize all domains (tests barrier function parameter passing) + call mui_barrier_3d_f(uniface_3d, commit_time) + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_3d_f(spatial_sampler_exact_3d, tolerance) call mui_create_temporal_sampler_exact_3d_f(temporal_sampler_exact_3d, tolerance) @@ -180,6 +195,9 @@ program main print *, "Fetched 3D interface value = ",fetch_result_3d + !Forget data before commit_time (tests forget function parameter passing) + call mui_forget_upper_3d_f(uniface_3d, commit_time, 1_c_int) + !Destroy created 3D MUI objects call mui_destroy_sampler_exact_3d_f(spatial_sampler_exact_3d) call mui_destroy_temporal_sampler_exact_3d_f(temporal_sampler_exact_3d) diff --git a/wrappers/Fortran/unit_test_multi.f90 b/wrappers/Fortran/unit_test_multi.f90 index 83de77c..2c07895 100644 --- a/wrappers/Fortran/unit_test_multi.f90 +++ b/wrappers/Fortran/unit_test_multi.f90 @@ -153,6 +153,11 @@ program main call mui_commit_1d_f(uniface_pointers_1d(i)%ptr, commit_time) end do + !Barrier to synchronize all domains (tests barrier function parameter passing) + do i = 1, interface_count + call mui_barrier_1d_f(uniface_pointers_1d(i)%ptr, commit_time) + end do + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_1d_f(spatial_sampler_exact_1d, tolerance) call mui_create_temporal_sampler_exact_1d_f(temporal_sampler_exact_1d, tolerance) @@ -165,6 +170,11 @@ program main " domian of ", domain1d end do + !Forget data before commit_time (tests forget function parameter passing) + do i = 1, interface_count + call mui_forget_upper_1d_f(uniface_pointers_1d(i)%ptr, commit_time, 1_c_int) + end do + !Destroy created 1D MUI objects call mui_destroy_sampler_exact_1d_f(spatial_sampler_exact_1d) call mui_destroy_temporal_sampler_exact_1d_f(temporal_sampler_exact_1d) @@ -222,6 +232,11 @@ program main call mui_commit_2d_f(uniface_pointers_2d(i)%ptr, commit_time) end do + !Barrier to synchronize all domains (tests barrier function parameter passing) + do i = 1, interface_count + call mui_barrier_2d_f(uniface_pointers_2d(i)%ptr, commit_time) + end do + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_2d_f(spatial_sampler_exact_2d, tolerance) call mui_create_temporal_sampler_exact_2d_f(temporal_sampler_exact_2d, tolerance) @@ -234,6 +249,11 @@ program main " domian of ", domain2d end do + !Forget all data older than commit_time for all MUI interfaces (tests forget function parameter passing) + do i = 1, interface_count + call mui_forget_upper_2d_f(uniface_pointers_2d(i)%ptr, commit_time, 1_c_int) + end do + !Destroy created 2D MUI objects call mui_destroy_sampler_exact_2d_f(spatial_sampler_exact_2d) call mui_destroy_temporal_sampler_exact_2d_f(temporal_sampler_exact_2d) @@ -292,6 +312,11 @@ program main call mui_commit_3d_f(uniface_pointers_3d(i)%ptr, commit_time) end do + !Barrier to synchronize all domains (tests barrier function parameter passing) + do i = 1, interface_count + call mui_barrier_3d_f(uniface_pointers_3d(i)%ptr, commit_time) + end do + !Create spatial and temporal samplers for fetch operation call mui_create_sampler_exact_3d_f(spatial_sampler_exact_3d, tolerance) call mui_create_temporal_sampler_exact_3d_f(temporal_sampler_exact_3d, tolerance) @@ -304,6 +329,11 @@ program main " domian of ", domain3d end do + !Forget all data older than commit_time for all MUI interfaces (tests forget function parameter passing) + do i = 1, interface_count + call mui_forget_upper_3d_f(uniface_pointers_3d(i)%ptr, commit_time, 1_c_int) + end do + !Destroy created 3D MUI objects call mui_destroy_sampler_exact_3d_f(spatial_sampler_exact_3d) call mui_destroy_temporal_sampler_exact_3d_f(temporal_sampler_exact_3d)