From 63476c3e681943eb58d86028263b98dc98391fcb Mon Sep 17 00:00:00 2001 From: Dominic Kempf <dominic.kempf@iwr.uni-heidelberg.de> Date: Tue, 5 Feb 2019 16:25:29 +0100 Subject: [PATCH] Allow grid analysis with custom analyzing executable --- cmake/modules/DuneCodegenMacros.cmake | 33 ++++++++++++++++++++++++--- dune/codegen/sumfact/analyzegrid.hh | 3 +++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/cmake/modules/DuneCodegenMacros.cmake b/cmake/modules/DuneCodegenMacros.cmake index 0bc00246..69de840c 100644 --- a/cmake/modules/DuneCodegenMacros.cmake +++ b/cmake/modules/DuneCodegenMacros.cmake @@ -45,6 +45,27 @@ # Set this option, if you do not want the target to be automatically # built. This option is forwarded to the builtin command add_executable. # +# .. cmake_param:: ANALYZE_GRID +# :option: +# +# Set this option to enable code generation time grid analysis. +# This is useful to reduce the variety of sum factorization kernels +# in unstructured grids. Note that the grid analysis tool needs to +# be able to construct your grid from the given inifile. If you have +# a custom grid construction method, you can use ANALYZE_GRID_COMMAND +# instead. +# +# .. cmake_param:: ANALYZE_GRID_COMMAND +# :multi: +# :argname command: +# +# Use this to pass a custom grid analysis command. This is necessary +# if you use a custom grid generation methdod. The inifile and the +# outputfile will be appended to this command. You can use the analysis code in +# dune/codegen/sumfact/analyzegrid.hh to write your own tool. +# Specifying this option will automatically set ANALYZE_GRID. +# +# # Add an executable to the project that gets automatically # generated at configure time with the form compiler uf2pdelab. # Regeneration is triggered correctly if the UFL file or the @@ -73,7 +94,7 @@ file(GLOB_RECURSE UFL2PDELAB_SOURCES ${UFL2PDELAB_GLOB_PATTERN}) function(add_generated_executable) set(OPTIONS EXCLUDE_FROM_ALL ANALYZE_GRID) set(SINGLE TARGET SOURCE UFLFILE INIFILE) - set(MULTI FORM_COMPILER_ARGS DEPENDS) + set(MULTI FORM_COMPILER_ARGS DEPENDS ANALYZE_GRID_COMMAND) include(CMakeParseArguments) cmake_parse_arguments(GEN "${OPTIONS}" "${SINGLE}" "${MULTI}" ${ARGN}) @@ -114,6 +135,12 @@ function(add_generated_executable) else() set(GEN_EXCLUDE_FROM_ALL "") endif() + if(GEN_ANALYZE_GRID_COMMAND) + set(GEN_ANALYZE_GRID 1) + else() + dune_module_path(MODULE dune-codegen RESULT codegenbin BUILD_DIR) + set(GEN_ANALYZE_GRID_COMMAND ${codegenbin}/bin/analyzegrid/analyze_grid) + endif() # Process analyze grid option set(ANALYZE_GRID_FILE) @@ -122,10 +149,10 @@ function(add_generated_executable) if(NOT consistent-edge-orientation_FOUND) message(FATAL_ERROR "Asked for grid analysis, but the module consistent-edge-orientation was not found!") endif() - set(ANALYZE_GRID_FILE "${GEN_INIFILE}.csv") + set(ANALYZE_GRID_FILE "${CMAKE_CURRENT_BINARY_DIR}/${GEN_TARGET}.csv") set(ANALYZE_GRID_OPTION "--grid-info=${ANALYZE_GRID_FILE}") add_custom_command(OUTPUT ${ANALYZE_GRID_FILE} - COMMAND ${CMAKE_BINARY_DIR}/bin/analyzegrid/analyze_grid ${GEN_INIFILE} ${ANALYZE_GRID_FILE} + COMMAND ${GEN_ANALYZE_GRID_COMMAND} ${GEN_INIFILE} ${ANALYZE_GRID_FILE} COMMENT "Analyzing the grid for target ${GEN_TARGET}..." ) endif() diff --git a/dune/codegen/sumfact/analyzegrid.hh b/dune/codegen/sumfact/analyzegrid.hh index cc5180b0..83e13974 100644 --- a/dune/codegen/sumfact/analyzegrid.hh +++ b/dune/codegen/sumfact/analyzegrid.hh @@ -1,6 +1,9 @@ #ifndef DUNE_CODEGEN_SUMFACT_ANALYZEGRID_HH #define DUNE_CODEGEN_SUMFACT_ANALYZEGRID_HH +#include<fstream> +#include<set> +#include<string> #include <dune/pdelab/common/intersectiontype.hh> -- GitLab