# define PASTE(a) a # define ADD_TRAIL_USCORE(a) PASTE(a)_ # define CONCATENATE(a,b) ADD_TRAIL_USCORE(a)b # define GLOBSUM_CODE # define DIM_1d # define FUNCTION_GLOBSUM CONCATENATE(glob_sum_1d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBSUM # undef DIM_1d # define DIM_2d # define OPERATION_GLOBSUM # define FUNCTION_GLOBSUM CONCATENATE(glob_sum_2d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBSUM # undef OPERATION_GLOBSUM # define OPERATION_FULL_GLOBSUM # define FUNCTION_GLOBSUM CONCATENATE(glob_sum_full_2d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBSUM # undef OPERATION_FULL_GLOBSUM # undef DIM_2d # define DIM_3d # define OPERATION_GLOBSUM # define FUNCTION_GLOBSUM CONCATENATE(glob_sum_3d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBSUM # undef OPERATION_GLOBSUM # define OPERATION_FULL_GLOBSUM # define FUNCTION_GLOBSUM CONCATENATE(glob_sum_full_3d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBSUM # undef OPERATION_FULL_GLOBSUM # undef DIM_3d # undef GLOBSUM_CODE # define GLOBMINMAX_CODE # define DIM_2d # define OPERATION_GLOBMIN # define FUNCTION_GLOBMINMAX CONCATENATE(glob_min_2d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBMINMAX # undef OPERATION_GLOBMIN # define OPERATION_GLOBMAX # define FUNCTION_GLOBMINMAX CONCATENATE(glob_max_2d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBMINMAX # undef OPERATION_GLOBMAX # undef DIM_2d # define DIM_3d # define OPERATION_GLOBMIN # define FUNCTION_GLOBMINMAX CONCATENATE(glob_min_3d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBMINMAX # undef OPERATION_GLOBMIN # define OPERATION_GLOBMAX # define FUNCTION_GLOBMINMAX CONCATENATE(glob_max_3d,PRECISION) # include "lib_fortran_generic.h90" # undef FUNCTION_GLOBMINMAX # undef OPERATION_GLOBMAX # undef DIM_3d # undef GLOBMINMAX_CODE