Skip to content
Snippets Groups Projects
Commit 41332251 authored by René Heß's avatar René Heß
Browse files

Add new options to schemes

parent aa4d41df
No related branches found
No related tags found
No related merge requests found
...@@ -45,41 +45,6 @@ class CodegenGlobalOptionsArray(ImmutableRecord): ...@@ -45,41 +45,6 @@ class CodegenGlobalOptionsArray(ImmutableRecord):
opts.update(**kwargs) opts.update(**kwargs)
ImmutableRecord.__init__(self, **opts) ImmutableRecord.__init__(self, **opts)
# Arguments that are to be set from the outside
uflfile = CodegenOption(helpstr="the UFL file to compile")
debug_cache_with_stack = CodegenOption(default=False, helpstr="Store stack along with cache objects. Makes debugging caching issues easier.")
driver_file = CodegenOption(helpstr="The filename for the generated driver header")
explicit_time_stepping = CodegenOption(default=False, helpstr="use explicit time stepping")
time_stepping_order = CodegenOption(default=1, helpstr="Order of the time stepping method")
exact_solution_expression = CodegenOption(helpstr="name of the exact solution expression in the ufl file")
compare_l2errorsquared = CodegenOption(helpstr="maximal allowed l2 error squared of difference between numerical solution and interpolation of exact solution (NOTE: requires --exact-solution-expression)")
grid_info = CodegenOption(default=None, helpstr="Path to file with information about facedir and facemod variations. This can be used to limit the generation of skeleton kernels.")
l2error_tree_path = CodegenOption(default=None, helpstr="Tree pathes that should be considered for l2 error calculation. Default None means we take all of them into account.")
ini_file = CodegenOption(helpstr="An inifile to use. A generated driver will be hard-coded to it, a [formcompiler] section will be used as default values to form compiler arguments (use snake case)")
opcounter = CodegenOption(default=False, helpstr="Count operations. Note: In this case only operator applications are generated since solving and operator counting does not work. You probably want to set instrumentation level>0.")
performance_measuring = CodegenOption(default=False, helpstr="Generate opcounter codepath, but only measure times!")
instrumentation_level = CodegenOption(default=0, helpstr="Control time/opcounter measurements. 0-do nothing, 1-measure program as a whole, 2-operator applications, 3-measure kernel (eg. alpha-volume, ...), 4-parts of kernel (eg. stage 1-3 of SF)")
project_basedir = CodegenOption(helpstr="The base (build) directory of the dune-codegen project")
architecture = CodegenOption(default="haswell", helpstr="The architecture to optimize for. Possible values: haswell|knl|skylake")
yaspgrid_offset = CodegenOption(default=False, helpstr="Set to true if you want a yasp grid where the lower left corner is not in the origin.")
grid_unstructured = CodegenOption(default=False, helpstr="Set to true if you want to use an unstructured grid.")
grid_consistent = CodegenOption(default=False, helpstr="The used grid is already consistent.")
precision_bits = CodegenOption(default=64, helpstr="The number of bits for the floating point type")
overlapping = CodegenOption(default=False, helpstr="Use an overlapping solver and constraints. You still need to make sure to construct a grid with overlap! The parallel option will be set automatically.")
operators = CodegenOption(default="r", helpstr="A comma separated list of operators, each name will be interpreted as a subsection name within the formcompiler section")
target_name = CodegenOption(default=None, helpstr="The target name from CMake")
operator_to_build = CodegenOption(default=None, helpstr="The operators from the list that is about to be build now. CMake sets this one!!!")
debug_interpolate_input = CodegenOption(default=False, helpstr="Should the input for printresidual and printmatix be interpolated (instead of random input).")
use_likwid = CodegenOption(default=False, helpstr="Use likwid instead of own performance measurements.")
use_sde = CodegenOption(default=False, helpstr="Use sde instead of own performance measurements.")
autotune_google_benchmark = CodegenOption(default=False, helpstr="Use google-benchmark library for autotuning (when autotuning is activated).")
with_mpi = CodegenOption(default=True, helpstr="The module was configured with mpi")
permuting_horizontal_add = CodegenOption(default=True, helpstr="Whether SIMD horizontal_add should use a permuting implementation.")
# Arguments that are mainly to be set by logic depending on other options
max_vector_width = CodegenOption(default=256, helpstr=None)
parallel = CodegenOption(default=False, helpstr="Mark that this program should be run in parallel. If set to true the c++ code will check that there are more than 1 MPI-ranks involved and the error computation will use communication.")
class CodegenFormOptionsArray(ImmutableRecord): class CodegenFormOptionsArray(ImmutableRecord):
""" A collection of form-specific form compiler arguments """ """ A collection of form-specific form compiler arguments """
...@@ -90,59 +55,6 @@ class CodegenFormOptionsArray(ImmutableRecord): ...@@ -90,59 +55,6 @@ class CodegenFormOptionsArray(ImmutableRecord):
opts.update(**kwargs) opts.update(**kwargs)
ImmutableRecord.__init__(self, **opts) ImmutableRecord.__init__(self, **opts)
# Form specific options
form = CodegenOption(default=None, helpstr="The name of the UFL object representing the form in the UFL file")
filename = CodegenOption(default=None, helpstr="The filename to use for this LocalOperator")
classname = CodegenOption(default=None, helpstr="The name of the C++ class to generate")
numerical_jacobian = CodegenOption(default=False, helpstr="use numerical jacobians (only makes sense, if uflpdelab for some reason fails to generate analytic jacobians)")
matrix_free = CodegenOption(default=False, helpstr="Generate jacobian_apply_* methods for matrix free solvers")
print_transformations = CodegenOption(default=False, helpstr="print out dot files after ufl tree transformations")
print_transformations_dir = CodegenOption(default=".", helpstr="place where to put dot files (can be omitted)")
quadrature_order = CodegenOption(_type=int, helpstr="Quadrature order used for all integrals.")
diagonal_transformation_matrix = CodegenOption(default=False, helpstr="set option if the jacobian of the transformation is diagonal (axiparallel grids)")
constant_transformation_matrix = CodegenOption(default=False, helpstr="set option if the jacobian of the transformation is constant on a cell")
fastdg = CodegenOption(default=False, helpstr="Use FastDGGridOperator from PDELab.")
sumfact = CodegenOption(default=False, helpstr="Use sumfactorization")
sumfact_regular_jacobians = CodegenOption(default=False, helpstr="Generate non sum-factorized jacobians (only useful if sumfact is set)")
sumfact_on_boundary = CodegenOption(default=True, helpstr="Whether boundary integrals should be vectorized. It might not be worth the hassle...")
sumfact_optimize_loop_order = CodegenOption(default=False, helpstr="Optimize order of loops in sumf factorization function using autotuning.")
sumfact_performance_transformations = CodegenOption(default=False, helpstr="Apply sum factorization specific performance transformations.")
sumfact_performance_transformations_testrun = CodegenOption(default=0, helpstr="If larger than zero determines test case to run.")
vectorization_quadloop = CodegenOption(default=False, helpstr="whether to generate code with explicit vectorization")
vectorization_strategy = CodegenOption(default="none", helpstr="The identifier of the vectorization cost model. Possible values: none|explicit|model|target|autotune")
vectorization_not_fully_vectorized_error = CodegenOption(default=False, helpstr="throw an error if nonquadloop vectorization did not fully vectorize")
vectorization_horizontal = CodegenOption(default=None, helpstr="an explicit value for horizontal vectorization read by the 'explicit' strategy")
vectorization_vertical = CodegenOption(default=None, helpstr="an explicit value for vertical vectorization read by the 'explicit' strategy")
vectorization_padding = CodegenOption(default=None, helpstr="an explicit value for the allowed padding in vectorization")
vectorization_allow_quadrature_changes = CodegenOption(default=False, helpstr="whether the vectorization strategy is allowed to alter quadrature point numbers")
vectorization_list_index = CodegenOption(default=None, helpstr="Which vectorization to pick from a list (only valid with vectorization_strategy=fromlist).")
vectorization_jacobians = CodegenOption(default=True, helpstr="Whether to attempt to vectorize jacobians (takes time, often not needed)")
vectorization_target = CodegenOption(_type=float, helpstr="The cost function target for the 'target' cost model. Only needed to verify the cost model itself, do not use light-heartedly!!!")
simplify = CodegenOption(default=False, helpstr="Whether to simplify expressions using sympy")
generate_jacobians = CodegenOption(default=True, helpstr="Whether jacobian_* methods should be generated. This is set to false automatically, when numerical_jacobian is set to true.")
generate_jacobian_apply = CodegenOption(default=False, helpstr="Wether jacobian_allpy_* methods should be generated.")
generate_residuals = CodegenOption(default=True, helpstr="Whether alpha_* methods should be generated.")
unroll_dimension_loops = CodegenOption(default=False, helpstr="whether loops over the geometric dimension should be unrolled")
blockstructured = CodegenOption(default=False, helpstr="Use block structure")
number_of_blocks = CodegenOption(default=1, helpstr="Number of sub blocks in one direction")
vectorization_blockstructured = CodegenOption(default=False, helpstr="Vectorize block structuring")
vectorization_blockstructured_tail = CodegenOption(default=True, helpstr="Try to fully vectorize block structuring even when 'nunmber_of_blocks' is not divisible by vector length")
vectorization_blockstructured_tail_ordering = CodegenOption(default='consecutive', helpstr="Ordering of the tail w.r.t the vectorized loop. Possible values: consecutive|blocked")
adjoint = CodegenOption(default=False, helpstr="Generate adjoint operator")
control = CodegenOption(default=False, helpstr="Generate operator of derivative w.r.t. the control variable")
objective_function = CodegenOption(default=None, helpstr="Name of form representing the objective function in UFL file")
control_variable = CodegenOption(default=None, helpstr="Name of control variable in UFL file")
block_preconditioner_diagonal = CodegenOption(default=False, helpstr="Whether this operator should implement the diagonal part of a block preconditioner")
block_preconditioner_offdiagonal = CodegenOption(default=False, helpstr="Whether this operator should implement the off-diagonal part of a block preconditioner")
block_preconditioner_pointdiagonal = CodegenOption(default=False, helpstr="Whether this operator should implement the point diagonal part of a block preconditioner")
geometry_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for geometries. Currently implemented mixins: generic, axiparallel, equidistant, sumfact_multilinear, sumfact_axiparallel, sumfact_equidistant")
quadrature_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for quadrature. Currently implemented: generic, sumfact")
basis_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for basis function evaluation. Currently implemented: generic, sumfact")
accumulation_mixins = CodegenOption(default="generic", helpstr="A comma separated list of mixin identifiers to use for accumulation. Currently implemented: generic, sumfact, control, blockstructured")
enable_volume = CodegenOption(default=True, helpstr="Whether to assemble volume integrals")
enable_skeleton = CodegenOption(default=True, helpstr="Whether to assemble skeleton integrals")
enable_boundary = CodegenOption(default=True, helpstr="Whether to assemble boundary integrals")
# Until more sophisticated logic is needed, we keep the actual option data in this module # Until more sophisticated logic is needed, we keep the actual option data in this module
_global_options = CodegenGlobalOptionsArray() _global_options = CodegenGlobalOptionsArray()
......
...@@ -18,6 +18,10 @@ block_preconditioner_offdiagonal: ...@@ -18,6 +18,10 @@ block_preconditioner_offdiagonal:
type: boolean type: boolean
default: False default: False
helpstr: "Whether this operator should implement the off-diagonal part of a block preconditioner" helpstr: "Whether this operator should implement the off-diagonal part of a block preconditioner"
block_preconditioner_pointdiagonal:
type: boolean
default: False
helpstr: "Whether this operator should implement the point diagonal part of a block preconditioner"
blockstructured: blockstructured:
type: boolean type: boolean
default: False default: False
......
...@@ -33,6 +33,10 @@ explicit_time_stepping: ...@@ -33,6 +33,10 @@ explicit_time_stepping:
type: boolean type: boolean
default: False default: False
helpstr: "use explicit time stepping" helpstr: "use explicit time stepping"
grid_consistent:
type: boolean
default: False
helpstr: "The used grid is already consistent"
grid_info: grid_info:
type: string type: string
default: default:
...@@ -77,6 +81,10 @@ performance_measuring: ...@@ -77,6 +81,10 @@ performance_measuring:
type: boolean type: boolean
default: False default: False
helpstr: "Generate opcounter codepath, but only measure times!" helpstr: "Generate opcounter codepath, but only measure times!"
permuting_horizontal_add:
type: boolean
default: True
helpstr: "Whether SIMD horizontal_add should use a permuting implementation."
precision_bits: precision_bits:
type: integer type: integer
default: 64 default: 64
...@@ -91,6 +99,10 @@ target_name: ...@@ -91,6 +99,10 @@ target_name:
default: default:
nullable: True nullable: True
helpstr: "The target name from CMake" helpstr: "The target name from CMake"
time_stepping_order:
type: integer
default: 1
helpstr: "Order of the time stepping method"
uflfile: uflfile:
type: string type: string
default: default:
...@@ -100,6 +112,14 @@ use_likwid: ...@@ -100,6 +112,14 @@ use_likwid:
type: boolean type: boolean
default: False default: False
helpstr: "Use likwid instead of own performance measurements." helpstr: "Use likwid instead of own performance measurements."
use_sde:
type: boolean
default: False
helpstr: "Use sde instead of own performance measurements."
with_mpi:
type: boolean
default: True
helpstr: "The module was configured with mpi"
yaspgrid_offset: yaspgrid_offset:
type: boolean type: boolean
default: False default: False
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment