diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..c34898fa --- /dev/null +++ b/404.html @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ +

404: File not found!

+ +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_json_defaults.json b/_json_defaults.json new file mode 100644 index 00000000..67e22f7c --- /dev/null +++ b/_json_defaults.json @@ -0,0 +1,518 @@ +{ + "boundary_conditions": { + "dirichlet_boundary": [], + "neumann_boundary": [], + "normal_aligned_neumann_boundary": [], + "obstacle_displacements": [], + "periodic_boundary": { + "correspondence": [], + "enabled": false, + "fixed_macro_strain": [], + "force_zero_mean": false, + "linear_displacement_offset": [], + "tolerance": 1e-05 + }, + "pressure_boundary": [], + "pressure_cavity": [], + "rhs": { + "unit": "REQUIRED!", + "value": "REQUIRED!" + } + }, + "common": "", + "contact": { + "collision_mesh": { + "enabled": true, + "linear_map": "REQUIRED!", + "max_edge_length": "REQUIRED!", + "mesh": "REQUIRED!", + "tessellation_type": "regular" + }, + "dhat": 0.001, + "dhat_percentage": 0.8, + "enabled": false, + "epsv": 0.001, + "friction_coefficient": 0, + "periodic": false, + "use_convergent_formulation": false + }, + "geometry": "REQUIRED!", + "initial_conditions": { + "acceleration": [], + "solution": [], + "velocity": [] + }, + "input": { + "data": { + "reorder": false, + "state": "" + } + }, + "materials": "REQUIRED!", + "output": { + "advanced": { + "compute_error": true, + "curved_mesh_size": false, + "save_ccd_debug_meshes": false, + "save_nl_solve_sequence": false, + "save_solve_sequence_debug": false, + "save_time_sequence": true, + "sol_at_node": -1, + "sol_on_grid": -1, + "spectrum": false, + "timestep_prefix": "step_", + "vis_boundary_only": false + }, + "data": { + "advanced": { + "reorder_nodes": false + }, + "full_mat": "", + "mises": "", + "nodes": "", + "rest_mesh": "", + "solution": "", + "state": "", + "stiffness_mat": "", + "stress_mat": "" + }, + "directory": "", + "json": "", + "log": { + "file_level": "trace", + "level": "debug", + "path": "", + "quiet": false + }, + "paraview": { + "file_name": "", + "high_order_mesh": true, + "options": { + "acceleration": false, + "body_ids": false, + "contact_forces": false, + "discretization_order": true, + "forces": false, + "friction_forces": false, + "material": false, + "nodes": true, + "scalar_values": true, + "tensor_values": true, + "use_hdf5": false, + "velocity": false + }, + "points": false, + "skip_frame": 1, + "surface": false, + "vismesh_rel_area": 1e-05, + "volume": true, + "wireframe": false + }, + "reference": { + "gradient": [], + "solution": [] + }, + "restart_json": "" + }, + "preset_problem": { + "U": {}, + "angular_v0": 0.5, + "angular_v1": -0.5, + "axis_coordiante": 2, + "axis_coordiante0": 2, + "axis_coordiante1": 2, + "bbox_center": [], + "fixed_boundary": 5, + "force": {}, + "formulation": "", + "func": 0, + "kernel_distance": 0, + "kernel_weights": "", + "n_kernels": 0, + "n_turns": 0.5, + "time_dependent": {}, + "turning_boundary": 6, + "turning_boundary0": 5, + "turning_boundary1": 6, + "type": "REQUIRED!", + "viscosity": 1 + }, + "root_path": "", + "solver": { + "adjoint_linear": { + "AMGCL": { + "precond": { + "class": "amg", + "coarsening": { + "aggr": { + "eps_strong": 0 + }, + "estimate_spectral_radius": true, + "relax": 1, + "type": "smoothed_aggregation" + }, + "direct_coarse": false, + "max_levels": 6, + "ncycle": 2, + "relax": { + "degree": 16, + "higher": 2, + "lower": 0.008333333333, + "power_iters": 100, + "scale": true, + "type": "chebyshev" + } + }, + "solver": { + "maxiter": 1000, + "tol": 1e-10, + "type": "cg" + } + }, + "Eigen::BiCGSTAB": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::ConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::DGMRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::GMRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::LeastSquaresConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::MINRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Hypre": { + "max_iter": 1000, + "pre_max_iter": 1, + "tolerance": 1e-10 + }, + "Pardiso": { + "mtype": 11 + }, + "enable_overwrite_solver": false, + "precond": "", + "solver": "" + }, + "advanced": { + "cache_size": 900000, + "lagged_regularization_iterations": 1, + "lagged_regularization_weight": 0, + "lump_mass_matrix": false + }, + "augmented_lagrangian": { + "eta": 0.99, + "initial_weight": 1000000.0, + "max_weight": 100000000.0, + "nonlinear": { + "ADAM": { + "alpha": 0.001, + "beta_1": 0.9, + "beta_2": 0.999, + "epsilon": 1e-08 + }, + "L-BFGS": { + "history_size": 6 + }, + "L-BFGS-B": { + "history_size": 6 + }, + "Newton": { + "force_psd_projection": false, + "reg_weight_inc": 10, + "reg_weight_max": 100000000.0, + "reg_weight_min": 1e-08, + "residual_tolerance": 1e-05, + "use_psd_projection": true, + "use_psd_projection_in_regularized": true + }, + "StochasticADAM": { + "alpha": 0.001, + "beta_1": 0.9, + "beta_2": 0.999, + "epsilon": 1e-08, + "erase_component_probability": 0.3 + }, + "StochasticGradientDescent": { + "erase_component_probability": 0.3 + }, + "advanced": { + "apply_gradient_fd": "None", + "derivative_along_delta_x_tol": 0, + "f_delta": 0, + "f_delta_step_tol": 100, + "gradient_fd_eps": 1e-07 + }, + "allow_out_of_iterations": false, + "box_constraints": { + "bounds": [], + "max_change": -1 + }, + "first_grad_norm_tol": 1e-10, + "grad_norm": 1e-08, + "iterations_per_strategy": 5, + "line_search": { + "Armijo": { + "c": 0.0001 + }, + "RobustArmijo": { + "delta_relative_tolerance": 0.1 + }, + "default_init_step_size": 1, + "max_step_size_iter": 30, + "max_step_size_iter_final": 100, + "method": "RobustArmijo", + "min_step_size": 1e-10, + "min_step_size_final": 1e-20, + "step_ratio": 0.5, + "use_grad_norm_tol": 1e-06 + }, + "max_iterations": 500, + "solver": "Newton", + "x_delta": 0 + }, + "scaling": 2.0 + }, + "contact": { + "CCD": { + "broad_phase": "hash_grid", + "max_iterations": 1000000, + "tolerance": 1e-06 + }, + "barrier_stiffness": "adaptive", + "friction_convergence_tol": 0.01, + "friction_iterations": 1 + }, + "linear": { + "AMGCL": { + "precond": { + "class": "amg", + "coarsening": { + "aggr": { + "eps_strong": 0 + }, + "estimate_spectral_radius": true, + "relax": 1, + "type": "smoothed_aggregation" + }, + "direct_coarse": false, + "max_levels": 6, + "ncycle": 2, + "relax": { + "degree": 16, + "higher": 2, + "lower": 0.008333333333, + "power_iters": 100, + "scale": true, + "type": "chebyshev" + } + }, + "solver": { + "maxiter": 1000, + "tol": 1e-10, + "type": "cg" + } + }, + "Eigen::BiCGSTAB": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::ConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::DGMRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::GMRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::LeastSquaresConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Eigen::MINRES": { + "max_iter": 1000, + "tolerance": 1e-12 + }, + "Hypre": { + "max_iter": 1000, + "pre_max_iter": 1, + "tolerance": 1e-10 + }, + "Pardiso": { + "mtype": 11 + }, + "enable_overwrite_solver": false, + "precond": "", + "solver": "" + }, + "max_threads": 0, + "nonlinear": { + "ADAM": { + "alpha": 0.001, + "beta_1": 0.9, + "beta_2": 0.999, + "epsilon": 1e-08 + }, + "L-BFGS": { + "history_size": 6 + }, + "L-BFGS-B": { + "history_size": 6 + }, + "Newton": { + "force_psd_projection": false, + "reg_weight_inc": 10, + "reg_weight_max": 100000000.0, + "reg_weight_min": 1e-08, + "residual_tolerance": 1e-05, + "use_psd_projection": true, + "use_psd_projection_in_regularized": true + }, + "StochasticADAM": { + "alpha": 0.001, + "beta_1": 0.9, + "beta_2": 0.999, + "epsilon": 1e-08, + "erase_component_probability": 0.3 + }, + "StochasticGradientDescent": { + "erase_component_probability": 0.3 + }, + "advanced": { + "apply_gradient_fd": "None", + "derivative_along_delta_x_tol": 0, + "f_delta": 0, + "f_delta_step_tol": 100, + "gradient_fd_eps": 1e-07 + }, + "allow_out_of_iterations": false, + "box_constraints": { + "bounds": [], + "max_change": -1 + }, + "first_grad_norm_tol": 1e-10, + "grad_norm": 1e-08, + "iterations_per_strategy": 5, + "line_search": { + "Armijo": { + "c": 0.0001 + }, + "RobustArmijo": { + "delta_relative_tolerance": 0.1 + }, + "default_init_step_size": 1, + "max_step_size_iter": 30, + "max_step_size_iter_final": 100, + "method": "RobustArmijo", + "min_step_size": 1e-10, + "min_step_size_final": 1e-20, + "step_ratio": 0.5, + "use_grad_norm_tol": 1e-06 + }, + "max_iterations": 500, + "solver": "Newton", + "x_delta": 0 + }, + "rayleigh_damping": [] + }, + "space": { + "advanced": { + "B": 3, + "bc_method": "sample", + "count_flipped_els": true, + "discr_order_max": 4, + "force_no_ref_for_harmonic": false, + "h1_formula": false, + "integral_constraints": 2, + "isoparametric": false, + "mass_quadrature_order": -1, + "n_boundary_samples": -1, + "n_harmonic_samples": 10, + "quadrature_order": -1, + "use_particle_advection": false + }, + "basis_type": "Lagrange", + "discr_order": 1, + "poly_basis_type": "MFSHarmonic", + "pressure_discr_order": 1, + "remesh": { + "collapse": { + "abs_max_edge_length": 1e+100, + "acceptance_tolerance": -1e-08, + "culling_threshold": 0.01, + "enabled": true, + "max_depth": 3, + "rel_max_edge_length": 1 + }, + "enabled": false, + "local_relaxation": { + "local_mesh_n_ring": 2, + "local_mesh_rel_area": 0.01, + "max_nl_iterations": 1 + }, + "smooth": { + "acceptance_tolerance": -1e-08, + "enabled": false, + "max_iters": 1 + }, + "split": { + "acceptance_tolerance": 0.001, + "culling_threshold": 0.95, + "enabled": true, + "max_depth": 3, + "min_edge_length": 1e-06 + }, + "swap": { + "acceptance_tolerance": -1e-08, + "enabled": false, + "max_depth": 3 + }, + "type": "physics" + }, + "use_p_ref": false + }, + "tests": { + "err_h1": 0, + "err_h1_semi": 0, + "err_l2": 0, + "err_linf": 0, + "err_linf_grad": 0, + "err_lp": 0, + "margin": 1e-05, + "time_steps": 1 + }, + "time": { + "dt": "REQUIRED!", + "integrator": { + "beta": 0.25, + "gamma": 0.5, + "steps": 1, + "type": "REQUIRED!" + }, + "quasistatic": false, + "t0": 0, + "tend": "REQUIRED!", + "time_steps": "REQUIRED!" + }, + "units": { + "characteristic_length": 1, + "length": "m", + "mass": "kg", + "time": "s" + } +} \ No newline at end of file diff --git a/_json_spec/_json_spec.md b/_json_spec/_json_spec.md new file mode 100644 index 00000000..41fadb0c --- /dev/null +++ b/_json_spec/_json_spec.md @@ -0,0 +1,25952 @@ + + + + + + + + + +!!! json-spec "`/` (`object`)" + ``` + / + ``` +

Description

+ Root of the configuration file. +

Required

+ + + + + + ??? json-spec "`/geometry` (`list`)" + ``` + /geometry + ``` +

Description

+ List of geometry objects. + + + + ??? json-spec "`/geometry/*`" + ``` + /geometry/* + ``` + + + === "`/geometry/*` (`object`)" +

Description

+ Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+ + + + + + ??? json-spec "`/geometry/*/mesh` (`file`)" + ``` + /geometry/*/mesh + ``` +

Description

+ Path of the mesh file to load. + + **Extensions:** `['.obj', '.msh', '.stl', '.ply', '.mesh']` + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/type` (`string`)" + ``` + /geometry/*/type + ``` +

Description

+ Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc. + + **Default**: `'mesh'` + + **Options:** `['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']` + + + + + + + + + ??? json-spec "`/geometry/*/extract` (`string`)" + ``` + /geometry/*/extract + ``` +

Description

+ Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh. + + **Default**: `'volume'` + + **Options:** `['volume', 'edges', 'points', 'surface']` + + + + + + + + + ??? json-spec "`/geometry/*/unit` (`string`)" + ``` + /geometry/*/unit + ``` +

Description

+ Units of the geometric model. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/geometry/*/transformation` (`object`)" + ``` + /geometry/*/transformation + ``` +

Description

+ Geometric transformations applied to the geometry after loading it. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/transformation/translation` (`list`)" + ``` + /geometry/*/transformation/translation + ``` +

Description

+ Translate (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/translation/*` (`float`)" + ``` + /geometry/*/transformation/translation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation` (`list`)" + ``` + /geometry/*/transformation/rotation + ``` +

Description

+ Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode. + + + + + + ??? json-spec "`/geometry/*/transformation/rotation/*` (`float`)" + ``` + /geometry/*/transformation/rotation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation_mode` (`string`)" + ``` + /geometry/*/transformation/rotation_mode + ``` +

Description

+ Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector. + + **Default**: `'xyz'` + + + + + + + + + ??? json-spec "`/geometry/*/transformation/scale` (`list`)" + ``` + /geometry/*/transformation/scale + ``` +

Description

+ Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/scale/*` (`float`)" + ``` + /geometry/*/transformation/scale/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions`" + ``` + /geometry/*/transformation/dimensions + ``` + + + === "`/geometry/*/transformation/dimensions` (`float`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + **Default**: `1` + + + + === "`/geometry/*/transformation/dimensions` (`list`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions/*` (`float`)" + ``` + /geometry/*/transformation/dimensions/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection`" + ``` + /geometry/*/volume_selection + ``` + + + === "`/geometry/*/volume_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/volume_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/volume_selection` (`object`)" +

Description

+ Offsets the volume IDs loaded from the mesh. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/id_offset` (`int`)" + ``` + /geometry/*/volume_selection/id_offset + ``` +

Description

+ Offsets the volume IDs loaded from the mesh. + + **Default**: `0` + + + + + + + === "`/geometry/*/volume_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/volume_selection/*`" + ``` + /geometry/*/volume_selection/* + ``` + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box` (`list`)" + ``` + /geometry/*/volume_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box/*` (`list`)" + ``` + /geometry/*/volume_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/volume_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/radius` (`float`)" + ``` + /geometry/*/volume_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/center` (`list`)" + ``` + /geometry/*/volume_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/center/*` (`float`)" + ``` + /geometry/*/volume_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/radius` (`float`)" + ``` + /geometry/*/volume_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p1` (`list`)" + ``` + /geometry/*/volume_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p1/*` (`float`)" + ``` + /geometry/*/volume_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p2` (`list`)" + ``` + /geometry/*/volume_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p2/*` (`float`)" + ``` + /geometry/*/volume_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/point` (`list`)" + ``` + /geometry/*/volume_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/point/*` (`float`)" + ``` + /geometry/*/volume_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/normal` (`list`)" + ``` + /geometry/*/volume_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/normal/*` (`float`)" + ``` + /geometry/*/volume_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/axis`" + ``` + /geometry/*/volume_selection/*/axis + ``` + + + === "`/geometry/*/volume_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/volume_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/position` (`float`)" + ``` + /geometry/*/volume_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection`" + ``` + /geometry/*/surface_selection + ``` + + + === "`/geometry/*/surface_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/surface_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/surface_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/surface_selection/*`" + ``` + /geometry/*/surface_selection/* + ``` + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box` (`list`)" + ``` + /geometry/*/surface_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box/*` (`list`)" + ``` + /geometry/*/surface_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/surface_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/radius` (`float`)" + ``` + /geometry/*/surface_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/center` (`list`)" + ``` + /geometry/*/surface_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/center/*` (`float`)" + ``` + /geometry/*/surface_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/radius` (`float`)" + ``` + /geometry/*/surface_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p1` (`list`)" + ``` + /geometry/*/surface_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p1/*` (`float`)" + ``` + /geometry/*/surface_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p2` (`list`)" + ``` + /geometry/*/surface_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p2/*` (`float`)" + ``` + /geometry/*/surface_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/point` (`list`)" + ``` + /geometry/*/surface_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/point/*` (`float`)" + ``` + /geometry/*/surface_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/normal` (`list`)" + ``` + /geometry/*/surface_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/normal/*` (`float`)" + ``` + /geometry/*/surface_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/axis`" + ``` + /geometry/*/surface_selection/*/axis + ``` + + + === "`/geometry/*/surface_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/surface_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/position` (`float`)" + ``` + /geometry/*/surface_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/threshold` (`float`)" + ``` + /geometry/*/surface_selection/*/threshold + ``` +

Description

+ Threshold for box side selection. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id_offset` (`int`)" + ``` + /geometry/*/surface_selection/*/id_offset + ``` +

Description

+ ID offset of box side selection. + + **Default**: `0` + + + + + + + + + + + + + + + ??? json-spec "`/geometry/*/curve_selection` (`object`)" + ``` + /geometry/*/curve_selection + ``` +

Description

+ Selection of curves + + **Default**: `None` + + + + + + + ??? json-spec "`/geometry/*/point_selection`" + ``` + /geometry/*/point_selection + ``` + + + === "`/geometry/*/point_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/point_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/point_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/point_selection/*`" + ``` + /geometry/*/point_selection/* + ``` + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box` (`list`)" + ``` + /geometry/*/point_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box/*` (`list`)" + ``` + /geometry/*/point_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/point_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/radius` (`float`)" + ``` + /geometry/*/point_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/center` (`list`)" + ``` + /geometry/*/point_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/center/*` (`float`)" + ``` + /geometry/*/point_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/radius` (`float`)" + ``` + /geometry/*/point_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p1` (`list`)" + ``` + /geometry/*/point_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p1/*` (`float`)" + ``` + /geometry/*/point_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p2` (`list`)" + ``` + /geometry/*/point_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p2/*` (`float`)" + ``` + /geometry/*/point_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/point` (`list`)" + ``` + /geometry/*/point_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/point/*` (`float`)" + ``` + /geometry/*/point_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/normal` (`list`)" + ``` + /geometry/*/point_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/normal/*` (`float`)" + ``` + /geometry/*/point_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/axis`" + ``` + /geometry/*/point_selection/*/axis + ``` + + + === "`/geometry/*/point_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/point_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/position` (`float`)" + ``` + /geometry/*/point_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/threshold` (`float`)" + ``` + /geometry/*/point_selection/*/threshold + ``` +

Description

+ Threshold for box side selection. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id_offset` (`int`)" + ``` + /geometry/*/point_selection/*/id_offset + ``` +

Description

+ ID offset of box side selection. + + **Default**: `0` + + + + + + + + + + + + + + + ??? json-spec "`/geometry/*/n_refs` (`int`)" + ``` + /geometry/*/n_refs + ``` +

Description

+ number of uniform refinements + + **Default**: `0` + + + + + + + + + ??? json-spec "`/geometry/*/advanced` (`object`)" + ``` + /geometry/*/advanced + ``` +

Description

+ Advanced options for geometry + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/advanced/normalize_mesh` (`bool`)" + ``` + /geometry/*/advanced/normalize_mesh + ``` +

Description

+ Rescale the mesh to it fits in the biunit cube + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/force_linear_geometry` (`bool`)" + ``` + /geometry/*/advanced/force_linear_geometry + ``` +

Description

+ Discard high-order nodes for curved geometries + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/refinement_location` (`float`)" + ``` + /geometry/*/advanced/refinement_location + ``` +

Description

+ parametric location of the refinement + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/min_component` (`int`)" + ``` + /geometry/*/advanced/min_component + ``` +

Description

+ Size of the minumum component for collision + + **Default**: `-1` + + + + + + + + + + + + ??? json-spec "`/geometry/*/enabled` (`bool`)" + ``` + /geometry/*/enabled + ``` +

Description

+ Skips the geometry if false + + **Default**: `True` + + + + + + + + + ??? json-spec "`/geometry/*/is_obstacle` (`bool`)" + ``` + /geometry/*/is_obstacle + ``` +

Description

+ The geometry elements are not included in deforming geometry, only in collision computations + + **Default**: `False` + + + + + + + === "mesh_array" + + **Type**: mesh_array +

Description

+ Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+ + + + + + ??? json-spec "`/geometry/*/mesh` (`file`)" + ``` + /geometry/*/mesh + ``` +

Description

+ Path of the mesh file to load. + + **Extensions:** `['.obj', '.msh', '.stl', '.ply', '.mesh']` + + + + + + + + + ??? json-spec "`/geometry/*/array` (`object`)" + ``` + /geometry/*/array + ``` +

Description

+ Array of meshes +

Required

+ + + + + + ??? json-spec "`/geometry/*/array/offset` (`float`)" + ``` + /geometry/*/array/offset + ``` +

Description

+ Offset of the mesh in the array. + + + + + + + + + ??? json-spec "`/geometry/*/array/size` (`list`)" + ``` + /geometry/*/array/size + ``` +

Description

+ Size of the array (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/array/size/*` (`int`)" + ``` + /geometry/*/array/size/* + ``` +

Description

+ Size of the array (two entries for 2D problems or three entries for 3D problems). + + **Range:** `[1, inf]` + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/array/relative` (`bool`)" + ``` + /geometry/*/array/relative + ``` +

Description

+ Is the offset value relative to the mesh's dimensions. + + **Default**: `False` + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/type` (`string`)" + ``` + /geometry/*/type + ``` +

Description

+ Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc. + + **Default**: `'mesh'` + + **Options:** `['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']` + + + + + + + + + ??? json-spec "`/geometry/*/extract` (`string`)" + ``` + /geometry/*/extract + ``` +

Description

+ Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh. + + **Default**: `'volume'` + + **Options:** `['volume', 'edges', 'points', 'surface']` + + + + + + + + + ??? json-spec "`/geometry/*/unit` (`string`)" + ``` + /geometry/*/unit + ``` +

Description

+ Units of the geometric model. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/geometry/*/transformation` (`object`)" + ``` + /geometry/*/transformation + ``` +

Description

+ Geometric transformations applied to the geometry after loading it. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/transformation/translation` (`list`)" + ``` + /geometry/*/transformation/translation + ``` +

Description

+ Translate (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/translation/*` (`float`)" + ``` + /geometry/*/transformation/translation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation` (`list`)" + ``` + /geometry/*/transformation/rotation + ``` +

Description

+ Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode. + + + + + + ??? json-spec "`/geometry/*/transformation/rotation/*` (`float`)" + ``` + /geometry/*/transformation/rotation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation_mode` (`string`)" + ``` + /geometry/*/transformation/rotation_mode + ``` +

Description

+ Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector. + + **Default**: `'xyz'` + + + + + + + + + ??? json-spec "`/geometry/*/transformation/scale` (`list`)" + ``` + /geometry/*/transformation/scale + ``` +

Description

+ Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/scale/*` (`float`)" + ``` + /geometry/*/transformation/scale/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions`" + ``` + /geometry/*/transformation/dimensions + ``` + + + === "`/geometry/*/transformation/dimensions` (`float`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + **Default**: `1` + + + + === "`/geometry/*/transformation/dimensions` (`list`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions/*` (`float`)" + ``` + /geometry/*/transformation/dimensions/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection`" + ``` + /geometry/*/volume_selection + ``` + + + === "`/geometry/*/volume_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/volume_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/volume_selection` (`object`)" +

Description

+ Offsets the volume IDs loaded from the mesh. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/id_offset` (`int`)" + ``` + /geometry/*/volume_selection/id_offset + ``` +

Description

+ Offsets the volume IDs loaded from the mesh. + + **Default**: `0` + + + + + + + === "`/geometry/*/volume_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/volume_selection/*`" + ``` + /geometry/*/volume_selection/* + ``` + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box` (`list`)" + ``` + /geometry/*/volume_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box/*` (`list`)" + ``` + /geometry/*/volume_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/volume_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/radius` (`float`)" + ``` + /geometry/*/volume_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/center` (`list`)" + ``` + /geometry/*/volume_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/center/*` (`float`)" + ``` + /geometry/*/volume_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/radius` (`float`)" + ``` + /geometry/*/volume_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p1` (`list`)" + ``` + /geometry/*/volume_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p1/*` (`float`)" + ``` + /geometry/*/volume_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p2` (`list`)" + ``` + /geometry/*/volume_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/p2/*` (`float`)" + ``` + /geometry/*/volume_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/point` (`list`)" + ``` + /geometry/*/volume_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/point/*` (`float`)" + ``` + /geometry/*/volume_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/normal` (`list`)" + ``` + /geometry/*/volume_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/normal/*` (`float`)" + ``` + /geometry/*/volume_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/volume_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/id` (`int`)" + ``` + /geometry/*/volume_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/axis`" + ``` + /geometry/*/volume_selection/*/axis + ``` + + + === "`/geometry/*/volume_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/volume_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/volume_selection/*/position` (`float`)" + ``` + /geometry/*/volume_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/volume_selection/*/relative` (`bool`)" + ``` + /geometry/*/volume_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection`" + ``` + /geometry/*/surface_selection + ``` + + + === "`/geometry/*/surface_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/surface_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/surface_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/surface_selection/*`" + ``` + /geometry/*/surface_selection/* + ``` + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box` (`list`)" + ``` + /geometry/*/surface_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box/*` (`list`)" + ``` + /geometry/*/surface_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/surface_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/radius` (`float`)" + ``` + /geometry/*/surface_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/center` (`list`)" + ``` + /geometry/*/surface_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/center/*` (`float`)" + ``` + /geometry/*/surface_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/radius` (`float`)" + ``` + /geometry/*/surface_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p1` (`list`)" + ``` + /geometry/*/surface_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p1/*` (`float`)" + ``` + /geometry/*/surface_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p2` (`list`)" + ``` + /geometry/*/surface_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/p2/*` (`float`)" + ``` + /geometry/*/surface_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/point` (`list`)" + ``` + /geometry/*/surface_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/point/*` (`float`)" + ``` + /geometry/*/surface_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/normal` (`list`)" + ``` + /geometry/*/surface_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/normal/*` (`float`)" + ``` + /geometry/*/surface_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id` (`int`)" + ``` + /geometry/*/surface_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/axis`" + ``` + /geometry/*/surface_selection/*/axis + ``` + + + === "`/geometry/*/surface_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/surface_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/surface_selection/*/position` (`float`)" + ``` + /geometry/*/surface_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/relative` (`bool`)" + ``` + /geometry/*/surface_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/surface_selection/*` (`object`)" +

Description

+ Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/threshold` (`float`)" + ``` + /geometry/*/surface_selection/*/threshold + ``` +

Description

+ Threshold for box side selection. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/surface_selection/*/id_offset` (`int`)" + ``` + /geometry/*/surface_selection/*/id_offset + ``` +

Description

+ ID offset of box side selection. + + **Default**: `0` + + + + + + + + + + + + + + + ??? json-spec "`/geometry/*/curve_selection` (`object`)" + ``` + /geometry/*/curve_selection + ``` +

Description

+ Selection of curves + + **Default**: `None` + + + + + + + ??? json-spec "`/geometry/*/point_selection`" + ``` + /geometry/*/point_selection + ``` + + + === "`/geometry/*/point_selection` (`int`)" +

Description

+ Assign specified ID to all elements of the geometry. + + + + === "`/geometry/*/point_selection` (`file`)" +

Description

+ Load ids from a file; the file is required to have one ID per element of the geometry + + **Extensions:** `['.txt']` + + + + === "`/geometry/*/point_selection` (`list`)" +

Description

+ List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc. + + + + ??? json-spec "`/geometry/*/point_selection/*`" + ``` + /geometry/*/point_selection/* + ``` + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box` (`list`)" + ``` + /geometry/*/point_selection/*/box + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box/*` (`list`)" + ``` + /geometry/*/point_selection/*/box/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/box/*/*` (`float`)" + ``` + /geometry/*/point_selection/*/box/*/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/radius` (`float`)" + ``` + /geometry/*/point_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/center` (`list`)" + ``` + /geometry/*/point_selection/*/center + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/center/*` (`float`)" + ``` + /geometry/*/point_selection/*/center/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/radius` (`float`)" + ``` + /geometry/*/point_selection/*/radius + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p1` (`list`)" + ``` + /geometry/*/point_selection/*/p1 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p1/*` (`float`)" + ``` + /geometry/*/point_selection/*/p1/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p2` (`list`)" + ``` + /geometry/*/point_selection/*/p2 + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/p2/*` (`float`)" + ``` + /geometry/*/point_selection/*/p2/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/point` (`list`)" + ``` + /geometry/*/point_selection/*/point + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/point/*` (`float`)" + ``` + /geometry/*/point_selection/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/normal` (`list`)" + ``` + /geometry/*/point_selection/*/normal + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + ??? json-spec "`/geometry/*/point_selection/*/normal/*` (`float`)" + ``` + /geometry/*/point_selection/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r"[+-][xyzXYZ]" or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id` (`int`)" + ``` + /geometry/*/point_selection/*/id + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/axis`" + ``` + /geometry/*/point_selection/*/axis + ``` + + + === "`/geometry/*/point_selection/*/axis` (`int`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + === "`/geometry/*/point_selection/*/axis` (`string`)" +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + ??? json-spec "`/geometry/*/point_selection/*/position` (`float`)" + ``` + /geometry/*/point_selection/*/position + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/relative` (`bool`)" + ``` + /geometry/*/point_selection/*/relative + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `False` + + + + + + + === "`/geometry/*/point_selection/*` (`object`)" +

Description

+ Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/threshold` (`float`)" + ``` + /geometry/*/point_selection/*/threshold + ``` +

Description

+ Threshold for box side selection. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/point_selection/*/id_offset` (`int`)" + ``` + /geometry/*/point_selection/*/id_offset + ``` +

Description

+ ID offset of box side selection. + + **Default**: `0` + + + + + + + + + + + + + + + ??? json-spec "`/geometry/*/n_refs` (`int`)" + ``` + /geometry/*/n_refs + ``` +

Description

+ number of uniform refinements + + **Default**: `0` + + + + + + + + + ??? json-spec "`/geometry/*/advanced` (`object`)" + ``` + /geometry/*/advanced + ``` +

Description

+ Advanced options for geometry + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/advanced/normalize_mesh` (`bool`)" + ``` + /geometry/*/advanced/normalize_mesh + ``` +

Description

+ Rescale the mesh to it fits in the biunit cube + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/force_linear_geometry` (`bool`)" + ``` + /geometry/*/advanced/force_linear_geometry + ``` +

Description

+ Discard high-order nodes for curved geometries + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/refinement_location` (`float`)" + ``` + /geometry/*/advanced/refinement_location + ``` +

Description

+ parametric location of the refinement + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/min_component` (`int`)" + ``` + /geometry/*/advanced/min_component + ``` +

Description

+ Size of the minumum component for collision + + **Default**: `-1` + + + + + + + + + + + + ??? json-spec "`/geometry/*/enabled` (`bool`)" + ``` + /geometry/*/enabled + ``` +

Description

+ Skips the geometry if false + + **Default**: `True` + + + + + + + + + ??? json-spec "`/geometry/*/is_obstacle` (`bool`)" + ``` + /geometry/*/is_obstacle + ``` +

Description

+ The geometry elements are not included in deforming geometry, only in collision computations + + **Default**: `False` + + + + + + + === "plane" + + **Type**: plane +

Description

+ Plane geometry object defined by its origin and normal. +

Required

+ + + + + + ??? json-spec "`/geometry/*/point` (`list`)" + ``` + /geometry/*/point + ``` +

Description

+ Point on plane (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/point/*` (`float`)" + ``` + /geometry/*/point/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + + + + + + + ??? json-spec "`/geometry/*/normal` (`list`)" + ``` + /geometry/*/normal + ``` +

Description

+ Normal of plane (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/normal/*` (`float`)" + ``` + /geometry/*/normal/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + + + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/type` (`string`)" + ``` + /geometry/*/type + ``` +

Description

+ Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc. + + **Default**: `'mesh'` + + **Options:** `['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']` + + + + + + + + + ??? json-spec "`/geometry/*/enabled` (`bool`)" + ``` + /geometry/*/enabled + ``` +

Description

+ Skips the geometry if false + + **Default**: `True` + + + + + + + + + ??? json-spec "`/geometry/*/is_obstacle` (`bool`)" + ``` + /geometry/*/is_obstacle + ``` +

Description

+ The geometry elements are not included in deforming geometry, only in collision computations + + **Default**: `False` + + + + + + + === "ground" + + **Type**: ground +

Description

+ Plane orthogonal to gravity defined by its height. +

Required

+ + + + + + ??? json-spec "`/geometry/*/height` (`float`)" + ``` + /geometry/*/height + ``` +

Description

+ Height of ground plane. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/type` (`string`)" + ``` + /geometry/*/type + ``` +

Description

+ Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc. + + **Default**: `'mesh'` + + **Options:** `['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']` + + + + + + + + + ??? json-spec "`/geometry/*/enabled` (`bool`)" + ``` + /geometry/*/enabled + ``` +

Description

+ Skips the geometry if false + + **Default**: `True` + + + + + + + + + ??? json-spec "`/geometry/*/is_obstacle` (`bool`)" + ``` + /geometry/*/is_obstacle + ``` +

Description

+ The geometry elements are not included in deforming geometry, only in collision computations + + **Default**: `False` + + + + + + + === "mesh_sequence" + + **Type**: mesh_sequence +

Description

+ Mesh sequence. +

Required

+ + + + ??? json-spec "`/geometry/*/mesh_sequence`" + ``` + /geometry/*/mesh_sequence + ``` + + + === "`/geometry/*/mesh_sequence` (`string`)" +

Description

+ Directory (or GLOB) of meshes for the mesh sequence. + + + + === "`/geometry/*/mesh_sequence` (`list`)" +

Description

+ List of mesh files for the mesh sequence. + + + + + + ??? json-spec "`/geometry/*/mesh_sequence/*` (`file`)" + ``` + /geometry/*/mesh_sequence/* + ``` +

Description

+ Path of the mesh file to load. + + **Extensions:** `['.obj', '.msh', '.stl', '.ply', '.mesh']` + + + + + + + + + + + + ??? json-spec "`/geometry/*/fps` (`int`)" + ``` + /geometry/*/fps + ``` +

Description

+ Frames of the mesh sequence per second. + + + +

Optional

+ + + + + + ??? json-spec "`/geometry/*/type` (`string`)" + ``` + /geometry/*/type + ``` +

Description

+ Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc. + + **Default**: `'mesh'` + + **Options:** `['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']` + + + + + + + + + ??? json-spec "`/geometry/*/extract` (`string`)" + ``` + /geometry/*/extract + ``` +

Description

+ Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh. + + **Default**: `'volume'` + + **Options:** `['volume', 'edges', 'points', 'surface']` + + + + + + + + + ??? json-spec "`/geometry/*/unit` (`string`)" + ``` + /geometry/*/unit + ``` +

Description

+ Units of the geometric model. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/geometry/*/transformation` (`object`)" + ``` + /geometry/*/transformation + ``` +

Description

+ Geometric transformations applied to the geometry after loading it. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/transformation/translation` (`list`)" + ``` + /geometry/*/transformation/translation + ``` +

Description

+ Translate (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/translation/*` (`float`)" + ``` + /geometry/*/transformation/translation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation` (`list`)" + ``` + /geometry/*/transformation/rotation + ``` +

Description

+ Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode. + + + + + + ??? json-spec "`/geometry/*/transformation/rotation/*` (`float`)" + ``` + /geometry/*/transformation/rotation/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/rotation_mode` (`string`)" + ``` + /geometry/*/transformation/rotation_mode + ``` +

Description

+ Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector. + + **Default**: `'xyz'` + + + + + + + + + ??? json-spec "`/geometry/*/transformation/scale` (`list`)" + ``` + /geometry/*/transformation/scale + ``` +

Description

+ Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems). + + + + + + ??? json-spec "`/geometry/*/transformation/scale/*` (`float`)" + ``` + /geometry/*/transformation/scale/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions`" + ``` + /geometry/*/transformation/dimensions + ``` + + + === "`/geometry/*/transformation/dimensions` (`float`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + **Default**: `1` + + + + === "`/geometry/*/transformation/dimensions` (`list`)" +

Description

+ Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems. + + + + + + ??? json-spec "`/geometry/*/transformation/dimensions/*` (`float`)" + ``` + /geometry/*/transformation/dimensions/* + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `0` + + + + + + + + + + + + + + + ??? json-spec "`/geometry/*/n_refs` (`int`)" + ``` + /geometry/*/n_refs + ``` +

Description

+ number of uniform refinements + + **Default**: `0` + + + + + + + + + ??? json-spec "`/geometry/*/advanced` (`object`)" + ``` + /geometry/*/advanced + ``` +

Description

+ Advanced options for geometry + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/geometry/*/advanced/normalize_mesh` (`bool`)" + ``` + /geometry/*/advanced/normalize_mesh + ``` +

Description

+ Rescale the mesh to it fits in the biunit cube + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/force_linear_geometry` (`bool`)" + ``` + /geometry/*/advanced/force_linear_geometry + ``` +

Description

+ Discard high-order nodes for curved geometries + + **Default**: `False` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/refinement_location` (`float`)" + ``` + /geometry/*/advanced/refinement_location + ``` +

Description

+ parametric location of the refinement + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/geometry/*/advanced/min_component` (`int`)" + ``` + /geometry/*/advanced/min_component + ``` +

Description

+ Size of the minumum component for collision + + **Default**: `-1` + + + + + + + + + + + + ??? json-spec "`/geometry/*/enabled` (`bool`)" + ``` + /geometry/*/enabled + ``` +

Description

+ Skips the geometry if false + + **Default**: `True` + + + + + + + + + ??? json-spec "`/geometry/*/is_obstacle` (`bool`)" + ``` + /geometry/*/is_obstacle + ``` +

Description

+ The geometry elements are not included in deforming geometry, only in collision computations + + **Default**: `False` + + + + + + + + + + + + + + + ??? json-spec "`/materials` (`list`)" + ``` + /materials + ``` +

Description

+ Material Parameters lists including ID pointing to volume selection, Young's modulus ($E$), Poisson's ratio ($\nu$), Density ($\rho$), or Lamé constants ($\lambda$ and $\mu$). + + + + ??? json-spec "`/materials/*`" + ``` + /materials/* + ``` + + + === "NeoHookean" + + **Type**: NeoHookean +

Description

+ Material Parameters including ID, Young's modulus ($E$), Poisson's ratio ($\nu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "NeoHookean" + + **Type**: NeoHookean +

Description

+ Material Parameters including ID, Lamé first ($\lambda$), Lamé second ($\mu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/lambda`" + ``` + /materials/*/lambda + ``` + + + === "`/materials/*/lambda` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/lambda` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/lambda` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/lambda/value`" + ``` + /materials/*/lambda/value + ``` + + + === "`/materials/*/lambda/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/lambda/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/lambda/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/lambda/unit` (`string`)" + ``` + /materials/*/lambda/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/mu`" + ``` + /materials/*/mu + ``` + + + === "`/materials/*/mu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/mu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/mu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/mu/value`" + ``` + /materials/*/mu/value + ``` + + + === "`/materials/*/mu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/mu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/mu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/mu/unit` (`string`)" + ``` + /materials/*/mu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "MooneyRivlin" + + **Type**: MooneyRivlin +

Description

+ Material Parameters including ID, for Mooney-Rivlin +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/c1`" + ``` + /materials/*/c1 + ``` + + + === "`/materials/*/c1` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c1` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c1` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c1/value`" + ``` + /materials/*/c1/value + ``` + + + === "`/materials/*/c1/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c1/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c1/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c1/unit` (`string`)" + ``` + /materials/*/c1/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/c2`" + ``` + /materials/*/c2 + ``` + + + === "`/materials/*/c2` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c2` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c2` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c2/value`" + ``` + /materials/*/c2/value + ``` + + + === "`/materials/*/c2/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c2/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c2/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c2/unit` (`string`)" + ``` + /materials/*/c2/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/k`" + ``` + /materials/*/k + ``` + + + === "`/materials/*/k` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/k` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/k` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/k/value`" + ``` + /materials/*/k/value + ``` + + + === "`/materials/*/k/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/k/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/k/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/k/unit` (`string`)" + ``` + /materials/*/k/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "MooneyRivlin3Param" + + **Type**: MooneyRivlin3Param +

Description

+ Material Parameters including ID, for Mooney-Rivlin +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/c1`" + ``` + /materials/*/c1 + ``` + + + === "`/materials/*/c1` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c1` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c1` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c1/value`" + ``` + /materials/*/c1/value + ``` + + + === "`/materials/*/c1/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c1/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c1/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c1/unit` (`string`)" + ``` + /materials/*/c1/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/c2`" + ``` + /materials/*/c2 + ``` + + + === "`/materials/*/c2` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c2` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c2` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c2/value`" + ``` + /materials/*/c2/value + ``` + + + === "`/materials/*/c2/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c2/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c2/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c2/unit` (`string`)" + ``` + /materials/*/c2/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/c3`" + ``` + /materials/*/c3 + ``` + + + === "`/materials/*/c3` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c3` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c3` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c3/value`" + ``` + /materials/*/c3/value + ``` + + + === "`/materials/*/c3/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c3/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c3/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c3/unit` (`string`)" + ``` + /materials/*/c3/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/d1`" + ``` + /materials/*/d1 + ``` + + + === "`/materials/*/d1` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/d1` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/d1` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/d1/value`" + ``` + /materials/*/d1/value + ``` + + + === "`/materials/*/d1/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/d1/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/d1/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/d1/unit` (`string`)" + ``` + /materials/*/d1/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "MooneyRivlin3ParamSymbolic" + + **Type**: MooneyRivlin3ParamSymbolic +

Description

+ Material Parameters including ID, for Mooney-Rivlin +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/c1`" + ``` + /materials/*/c1 + ``` + + + === "`/materials/*/c1` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c1` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c1` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c1/value`" + ``` + /materials/*/c1/value + ``` + + + === "`/materials/*/c1/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c1/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c1/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c1/unit` (`string`)" + ``` + /materials/*/c1/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/c2`" + ``` + /materials/*/c2 + ``` + + + === "`/materials/*/c2` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c2` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c2` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c2/value`" + ``` + /materials/*/c2/value + ``` + + + === "`/materials/*/c2/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c2/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c2/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c2/unit` (`string`)" + ``` + /materials/*/c2/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/c3`" + ``` + /materials/*/c3 + ``` + + + === "`/materials/*/c3` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c3` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c3` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c3/value`" + ``` + /materials/*/c3/value + ``` + + + === "`/materials/*/c3/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c3/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c3/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c3/unit` (`string`)" + ``` + /materials/*/c3/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/d1`" + ``` + /materials/*/d1 + ``` + + + === "`/materials/*/d1` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/d1` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/d1` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/d1/value`" + ``` + /materials/*/d1/value + ``` + + + === "`/materials/*/d1/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/d1/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/d1/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/d1/unit` (`string`)" + ``` + /materials/*/d1/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "UnconstrainedOgden" + + **Type**: UnconstrainedOgden +

Description

+ Material Parameters including ID, for [Ogden](https://en.wikipedia.org/wiki/Ogden_hyperelastic_model). +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/alphas`" + ``` + /materials/*/alphas + ``` + + + === "`/materials/*/alphas` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/alphas` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/alphas` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/alphas/value`" + ``` + /materials/*/alphas/value + ``` + + + === "`/materials/*/alphas/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/alphas/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/alphas/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/alphas/unit` (`string`)" + ``` + /materials/*/alphas/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + ??? json-spec "`/materials/*/mus` (`list`)" + ``` + /materials/*/mus + ``` +

Description

+ Ogden mu + + + + ??? json-spec "`/materials/*/mus/*`" + ``` + /materials/*/mus/* + ``` + + + === "`/materials/*/mus/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/mus/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/mus/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/mus/*/value`" + ``` + /materials/*/mus/*/value + ``` + + + === "`/materials/*/mus/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/mus/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/mus/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/mus/*/unit` (`string`)" + ``` + /materials/*/mus/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + ??? json-spec "`/materials/*/Ds` (`list`)" + ``` + /materials/*/Ds + ``` +

Description

+ Ogden D + + + + ??? json-spec "`/materials/*/Ds/*`" + ``` + /materials/*/Ds/* + ``` + + + === "`/materials/*/Ds/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/Ds/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/Ds/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/Ds/*/value`" + ``` + /materials/*/Ds/*/value + ``` + + + === "`/materials/*/Ds/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/Ds/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/Ds/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/Ds/*/unit` (`string`)" + ``` + /materials/*/Ds/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "IncompressibleOgden" + + **Type**: IncompressibleOgden +

Description

+ Material Parameters including ID, for [Ogden](https://en.wikipedia.org/wiki/Ogden_hyperelastic_model). +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/c`" + ``` + /materials/*/c + ``` + + + === "`/materials/*/c` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c/value`" + ``` + /materials/*/c/value + ``` + + + === "`/materials/*/c/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c/unit` (`string`)" + ``` + /materials/*/c/unit + ``` +

Description

+ The unit of the Value + + + + + + + === "`/materials/*/c` (`list`)" +

Description

+ Coefficient(s) of Incompressible Ogden + + + + ??? json-spec "`/materials/*/c/*`" + ``` + /materials/*/c/* + ``` + + + === "`/materials/*/c/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/c/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/c/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/c/*/value`" + ``` + /materials/*/c/*/value + ``` + + + === "`/materials/*/c/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/c/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/c/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/c/*/unit` (`string`)" + ``` + /materials/*/c/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + ??? json-spec "`/materials/*/m`" + ``` + /materials/*/m + ``` + + + === "`/materials/*/m` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/m` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/m` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/m/value`" + ``` + /materials/*/m/value + ``` + + + === "`/materials/*/m/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/m/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/m/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/m/unit` (`string`)" + ``` + /materials/*/m/unit + ``` +

Description

+ The unit of the Value + + + + + + + === "`/materials/*/m` (`list`)" +

Description

+ Exponent(s) of Incompressible Ogden + + + + ??? json-spec "`/materials/*/m/*`" + ``` + /materials/*/m/* + ``` + + + === "`/materials/*/m/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/m/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/m/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/m/*/value`" + ``` + /materials/*/m/*/value + ``` + + + === "`/materials/*/m/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/m/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/m/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/m/*/unit` (`string`)" + ``` + /materials/*/m/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + ??? json-spec "`/materials/*/k`" + ``` + /materials/*/k + ``` + + + === "`/materials/*/k` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/k` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/k` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/k/value`" + ``` + /materials/*/k/value + ``` + + + === "`/materials/*/k/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/k/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/k/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/k/unit` (`string`)" + ``` + /materials/*/k/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "LinearElasticity" + + **Type**: LinearElasticity +

Description

+ Material Parameters including ID, Young's modulus ($E$), Poisson's ratio ($\nu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "LinearElasticity" + + **Type**: LinearElasticity +

Description

+ Material Parameters including ID, Lamé first ($\lambda$), Lamé second ($\mu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/lambda`" + ``` + /materials/*/lambda + ``` + + + === "`/materials/*/lambda` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/lambda` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/lambda` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/lambda/value`" + ``` + /materials/*/lambda/value + ``` + + + === "`/materials/*/lambda/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/lambda/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/lambda/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/lambda/unit` (`string`)" + ``` + /materials/*/lambda/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/mu`" + ``` + /materials/*/mu + ``` + + + === "`/materials/*/mu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/mu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/mu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/mu/value`" + ``` + /materials/*/mu/value + ``` + + + === "`/materials/*/mu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/mu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/mu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/mu/unit` (`string`)" + ``` + /materials/*/mu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "HookeLinearElasticity" + + **Type**: HookeLinearElasticity +

Description

+ Material Parameters including ID, E, nu, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "HookeLinearElasticity" + + **Type**: HookeLinearElasticity +

Description

+ Material Parameters including ID, E, nu, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + + + ??? json-spec "`/materials/*/elasticity_tensor` (`list`)" + ``` + /materials/*/elasticity_tensor + ``` +

Description

+ Symmetric elasticity tensor + + + + ??? json-spec "`/materials/*/elasticity_tensor/*`" + ``` + /materials/*/elasticity_tensor/* + ``` + + + === "`/materials/*/elasticity_tensor/*` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/elasticity_tensor/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/elasticity_tensor/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/elasticity_tensor/*/value`" + ``` + /materials/*/elasticity_tensor/*/value + ``` + + + === "`/materials/*/elasticity_tensor/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/elasticity_tensor/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/elasticity_tensor/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/elasticity_tensor/*/unit` (`string`)" + ``` + /materials/*/elasticity_tensor/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "SaintVenant" + + **Type**: SaintVenant +

Description

+ Material Parameters including ID, E, nu, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "SaintVenant" + + **Type**: SaintVenant +

Description

+ Material Parameters including ID, E, nu, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + + + ??? json-spec "`/materials/*/elasticity_tensor` (`list`)" + ``` + /materials/*/elasticity_tensor + ``` +

Description

+ Symmetric elasticity tensor + + + + ??? json-spec "`/materials/*/elasticity_tensor/*`" + ``` + /materials/*/elasticity_tensor/* + ``` + + + === "`/materials/*/elasticity_tensor/*` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/elasticity_tensor/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/elasticity_tensor/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/elasticity_tensor/*/value`" + ``` + /materials/*/elasticity_tensor/*/value + ``` + + + === "`/materials/*/elasticity_tensor/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/elasticity_tensor/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/elasticity_tensor/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/elasticity_tensor/*/unit` (`string`)" + ``` + /materials/*/elasticity_tensor/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "Stokes" + + **Type**: Stokes +

Description

+ Material Parameters including ID, viscosity, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/viscosity`" + ``` + /materials/*/viscosity + ``` + + + === "`/materials/*/viscosity` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/viscosity` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/viscosity` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/viscosity/value`" + ``` + /materials/*/viscosity/value + ``` + + + === "`/materials/*/viscosity/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/viscosity/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/viscosity/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/viscosity/unit` (`string`)" + ``` + /materials/*/viscosity/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "NavierStokes" + + **Type**: NavierStokes +

Description

+ Material Parameters including ID, viscosity, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/viscosity`" + ``` + /materials/*/viscosity + ``` + + + === "`/materials/*/viscosity` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/viscosity` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/viscosity` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/viscosity/value`" + ``` + /materials/*/viscosity/value + ``` + + + === "`/materials/*/viscosity/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/viscosity/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/viscosity/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/viscosity/unit` (`string`)" + ``` + /materials/*/viscosity/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "OperatorSplitting" + + **Type**: OperatorSplitting +

Description

+ Material Parameters including ID, viscosity, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/viscosity`" + ``` + /materials/*/viscosity + ``` + + + === "`/materials/*/viscosity` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/viscosity` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/viscosity` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/viscosity/value`" + ``` + /materials/*/viscosity/value + ``` + + + === "`/materials/*/viscosity/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/viscosity/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/viscosity/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/viscosity/unit` (`string`)" + ``` + /materials/*/viscosity/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "IncompressibleLinearElasticity" + + **Type**: IncompressibleLinearElasticity +

Description

+ Material Parameters including ID, Young's modulus ($E$), Poisson's ratio ($\nu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "IncompressibleLinearElasticity" + + **Type**: IncompressibleLinearElasticity +

Description

+ Material Parameters including ID, Lamé first ($\lambda$), Lamé second ($\mu$), density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/lambda`" + ``` + /materials/*/lambda + ``` + + + === "`/materials/*/lambda` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/lambda` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/lambda` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/lambda/value`" + ``` + /materials/*/lambda/value + ``` + + + === "`/materials/*/lambda/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/lambda/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/lambda/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/lambda/unit` (`string`)" + ``` + /materials/*/lambda/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/mu`" + ``` + /materials/*/mu + ``` + + + === "`/materials/*/mu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/mu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/mu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/mu/value`" + ``` + /materials/*/mu/value + ``` + + + === "`/materials/*/mu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/mu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/mu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/mu/unit` (`string`)" + ``` + /materials/*/mu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "Laplacian" + + **Type**: Laplacian +

Description

+ Material Parameters including ID, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "Helmholtz" + + **Type**: Helmholtz +

Description

+ Material Parameters including ID, k, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/k`" + ``` + /materials/*/k + ``` + + + === "`/materials/*/k` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/k` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/k` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/k/value`" + ``` + /materials/*/k/value + ``` + + + === "`/materials/*/k/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/k/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/k/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/k/unit` (`string`)" + ``` + /materials/*/k/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "Bilaplacian" + + **Type**: Bilaplacian +

Description

+ Material Parameters including ID, density ($\rho$) +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "AMIPS" + + **Type**: AMIPS +

Description

+ Material Parameters including ID +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + === "FixedCorotational" + + **Type**: FixedCorotational +

Description

+ Material Parameters including ID +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/E`" + ``` + /materials/*/E + ``` + + + === "`/materials/*/E` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/E` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/E` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/E/value`" + ``` + /materials/*/E/value + ``` + + + === "`/materials/*/E/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/E/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/E/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/E/unit` (`string`)" + ``` + /materials/*/E/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/nu`" + ``` + /materials/*/nu + ``` + + + === "`/materials/*/nu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/nu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/nu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/nu/value`" + ``` + /materials/*/nu/value + ``` + + + === "`/materials/*/nu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/nu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/nu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/nu/unit` (`string`)" + ``` + /materials/*/nu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + === "FixedCorotational" + + **Type**: FixedCorotational +

Description

+ Material Parameters including ID +

Required

+ + + + + + ??? json-spec "`/materials/*/type` (`string`)" + ``` + /materials/*/type + ``` +

Description

+ Type of material + + **Options:** `['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']` + + + + + + + ??? json-spec "`/materials/*/lambda`" + ``` + /materials/*/lambda + ``` + + + === "`/materials/*/lambda` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/lambda` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/lambda` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/lambda/value`" + ``` + /materials/*/lambda/value + ``` + + + === "`/materials/*/lambda/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/lambda/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/lambda/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/lambda/unit` (`string`)" + ``` + /materials/*/lambda/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/mu`" + ``` + /materials/*/mu + ``` + + + === "`/materials/*/mu` (`float`)" +

Description

+ Value as a constant float + + + + === "`/materials/*/mu` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/mu` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/mu/value`" + ``` + /materials/*/mu/value + ``` + + + === "`/materials/*/mu/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/mu/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/mu/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/mu/unit` (`string`)" + ``` + /materials/*/mu/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/materials/*/id`" + ``` + /materials/*/id + ``` + + + === "`/materials/*/id` (`int`)" +

Description

+ Volume selection ID + + **Default**: `0` + + + + === "`/materials/*/id` (`list`)" +

Description

+ Volume selection IDs + + + + + + ??? json-spec "`/materials/*/id/*` (`int`)" + ``` + /materials/*/id/* + ``` +

Description

+ Volume selection ID + + + + + + + + + + ??? json-spec "`/materials/*/rho`" + ``` + /materials/*/rho + ``` + + + === "`/materials/*/rho` (`float`)" +

Description

+ Value as a constant float + + **Default**: `1` + + + + === "`/materials/*/rho` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/rho` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/rho/value`" + ``` + /materials/*/rho/value + ``` + + + === "`/materials/*/rho/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/rho/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/rho/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/rho/unit` (`string`)" + ``` + /materials/*/rho/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/phi`" + ``` + /materials/*/phi + ``` + + + === "`/materials/*/phi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/phi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/phi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/phi/value`" + ``` + /materials/*/phi/value + ``` + + + === "`/materials/*/phi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/phi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/phi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/phi/unit` (`string`)" + ``` + /materials/*/phi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + ??? json-spec "`/materials/*/psi`" + ``` + /materials/*/psi + ``` + + + === "`/materials/*/psi` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/materials/*/psi` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/materials/*/psi` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/materials/*/psi/value`" + ``` + /materials/*/psi/value + ``` + + + === "`/materials/*/psi/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/materials/*/psi/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/materials/*/psi/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/materials/*/psi/unit` (`string`)" + ``` + /materials/*/psi/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/units` (`object`)" + ``` + /units + ``` +

Description

+ Basic units used in the code. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/units/length` (`string`)" + ``` + /units/length + ``` +

Description

+ Length unit. + + **Default**: `'m'` + + + + + + + + + ??? json-spec "`/units/mass` (`string`)" + ``` + /units/mass + ``` +

Description

+ Mass unit. + + **Default**: `'kg'` + + + + + + + + + ??? json-spec "`/units/time` (`string`)" + ``` + /units/time + ``` +

Description

+ Time unit. + + **Default**: `'s'` + + + + + + + + + ??? json-spec "`/units/characteristic_length` (`float`)" + ``` + /units/characteristic_length + ``` +

Description

+ Characteristic length, used for tolerances. + + **Default**: `1` + + + + + + + + + + ??? json-spec "`/preset_problem`" + ``` + /preset_problem + ``` + + + === "Linear" + + **Type**: Linear +

Description

+ TODO + + **Default**: `'skip'` +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Quadratic" + + **Type**: Quadratic +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Cubic" + + **Type**: Cubic +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Sine" + + **Type**: Sine +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Franke" + + **Type**: Franke +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "FrankeOld" + + **Type**: FrankeOld +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "GenericScalarExact" + + **Type**: GenericScalarExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/func` (`int`)" + ``` + /preset_problem/func + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + === "Zero_BC" + + **Type**: Zero_BC +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Elastic" + + **Type**: Elastic +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Walk" + + **Type**: Walk +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "TorsionElastic" + + **Type**: TorsionElastic +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/axis_coordiante` (`int`)" + ``` + /preset_problem/axis_coordiante + ``` +

Description

+ TODO + + **Default**: `2` + + + + + + + + + ??? json-spec "`/preset_problem/n_turns` (`float`)" + ``` + /preset_problem/n_turns + ``` +

Description

+ TODO + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/preset_problem/fixed_boundary` (`int`)" + ``` + /preset_problem/fixed_boundary + ``` +

Description

+ TODO + + **Default**: `5` + + + + + + + + + ??? json-spec "`/preset_problem/turning_boundary` (`int`)" + ``` + /preset_problem/turning_boundary + ``` +

Description

+ TODO + + **Default**: `6` + + + + + + + + + ??? json-spec "`/preset_problem/bbox_center` (`list`)" + ``` + /preset_problem/bbox_center + ``` +

Description

+ TODO + + + + + + ??? json-spec "`/preset_problem/bbox_center/*` (`float`)" + ``` + /preset_problem/bbox_center/* + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + + + + === "DoubleTorsionElastic" + + **Type**: DoubleTorsionElastic +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/axis_coordiante0` (`int`)" + ``` + /preset_problem/axis_coordiante0 + ``` +

Description

+ TODO + + **Default**: `2` + + + + + + + + + ??? json-spec "`/preset_problem/axis_coordiante1` (`int`)" + ``` + /preset_problem/axis_coordiante1 + ``` +

Description

+ TODO + + **Default**: `2` + + + + + + + + + ??? json-spec "`/preset_problem/angular_v0` (`float`)" + ``` + /preset_problem/angular_v0 + ``` +

Description

+ TODO + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/preset_problem/angular_v1` (`float`)" + ``` + /preset_problem/angular_v1 + ``` +

Description

+ TODO + + **Default**: `-0.5` + + + + + + + + + ??? json-spec "`/preset_problem/turning_boundary0` (`int`)" + ``` + /preset_problem/turning_boundary0 + ``` +

Description

+ TODO + + **Default**: `5` + + + + + + + + + ??? json-spec "`/preset_problem/turning_boundary1` (`int`)" + ``` + /preset_problem/turning_boundary1 + ``` +

Description

+ TODO + + **Default**: `6` + + + + + + + + + ??? json-spec "`/preset_problem/bbox_center` (`list`)" + ``` + /preset_problem/bbox_center + ``` +

Description

+ TODO + + + + + + ??? json-spec "`/preset_problem/bbox_center/*` (`float`)" + ``` + /preset_problem/bbox_center/* + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + + + + === "ElasticZeroBC" + + **Type**: ElasticZeroBC +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "ElasticExact" + + **Type**: ElasticExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "ElasticCantileverExact" + + **Type**: ElasticCantileverExact +

Description

+ TODO, add displacement, E, nu, formulation, mesh_size +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "CompressionElasticExact" + + **Type**: CompressionElasticExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "QuadraticElasticExact" + + **Type**: QuadraticElasticExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "LinearElasticExact" + + **Type**: LinearElasticExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "PointBasedTensor" + + **Type**: PointBasedTensor +

Description

+ TODO, add optionals +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Kernel" + + **Type**: Kernel +

Description

+ TODO, add optionals +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/formulation` (`string`)" + ``` + /preset_problem/formulation + ``` +

Description

+ TODO + + **Default**: `''` + + + + + + + + + ??? json-spec "`/preset_problem/n_kernels` (`int`)" + ``` + /preset_problem/n_kernels + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + + + ??? json-spec "`/preset_problem/kernel_distance` (`float`)" + ``` + /preset_problem/kernel_distance + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + + + ??? json-spec "`/preset_problem/kernel_weights` (`string`)" + ``` + /preset_problem/kernel_weights + ``` +

Description

+ TODO + + **Default**: `''` + + + + + + + === "Node" + + **Type**: Node +

Description

+ TODO, add optionals +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "TimeDependentScalar" + + **Type**: TimeDependentScalar +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "MinSurf" + + **Type**: MinSurf +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Gravity" + + **Type**: Gravity +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + === "ConstantVelocity" + + **Type**: ConstantVelocity +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "TwoSpheres" + + **Type**: TwoSpheres +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "DrivenCavity" + + **Type**: DrivenCavity +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "DrivenCavityC0" + + **Type**: DrivenCavityC0 +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "DrivenCavitySmooth" + + **Type**: DrivenCavitySmooth +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "Flow" + + **Type**: Flow +

Description

+ TODO, add inflow, outflow, inflow_amout, outflow_amout, direction, obstacle +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "FlowWithObstacle" + + **Type**: FlowWithObstacle +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + === "CornerFlow" + + **Type**: CornerFlow +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + + + + + + === "UnitFlowWithObstacle" + + **Type**: UnitFlowWithObstacle +

Description

+ TODO, add inflow_id, direction, no_slip +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + === "StokesLaw" + + **Type**: StokesLaw +

Description

+ TODO, add radius +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + + + ??? json-spec "`/preset_problem/viscosity` (`float`)" + ``` + /preset_problem/viscosity + ``` +

Description

+ TODO + + **Default**: `1` + + + + + + + === "TaylorGreenVortex" + + **Type**: TaylorGreenVortex +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/viscosity` (`float`)" + ``` + /preset_problem/viscosity + ``` +

Description

+ TODO + + **Default**: `1` + + + + + + + === "SimpleStokeProblemExact" + + **Type**: SimpleStokeProblemExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/func` (`int`)" + ``` + /preset_problem/func + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + === "SineStokeProblemExact" + + **Type**: SineStokeProblemExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "TransientStokeProblemExact" + + **Type**: TransientStokeProblemExact +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/func` (`int`)" + ``` + /preset_problem/func + ``` +

Description

+ TODO + + **Default**: `0` + + + + + + + + + ??? json-spec "`/preset_problem/viscosity` (`float`)" + ``` + /preset_problem/viscosity + ``` +

Description

+ TODO + + **Default**: `1` + + + + + + + === "Kovnaszy" + + **Type**: Kovnaszy +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + ??? json-spec "`/preset_problem/viscosity` (`float`)" + ``` + /preset_problem/viscosity + ``` +

Description

+ TODO + + **Default**: `1` + + + + + + + === "Airfoil" + + **Type**: Airfoil +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + === "Lshape" + + **Type**: Lshape +

Description

+ TODO +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + +

Optional

+ + + + + + + + + + + + + + === "TestProblem" + + **Type**: TestProblem +

Description

+ TODO, type, omega, is_scalar +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + === "BilaplacianProblemWithSolution" + + **Type**: BilaplacianProblemWithSolution +

Description

+ TODO, type, omega, is_scalar +

Required

+ + + + + + ??? json-spec "`/preset_problem/type` (`string`)" + ``` + /preset_problem/type + ``` +

Description

+ Type of preset problem to use. + + **Options:** `['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']` + + + + + + + + + + + + ??? json-spec "`/common` (`file`)" + ``` + /common + ``` +

Description

+ Path to common settings will patch the current file. + + **Default**: `''` + + **Extensions:** `['.json']` + + + + + + + + + ??? json-spec "`/root_path` (`string`)" + ``` + /root_path + ``` +

Description

+ Path for all relative paths, set automatically to the folder containing this JSON. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/space` (`object`)" + ``` + /space + ``` +

Description

+ Options related to the FE space. + + **Default**: `None` +

Optional

+ + + + ??? json-spec "`/space/discr_order`" + ``` + /space/discr_order + ``` + + + === "`/space/discr_order` (`int`)" +

Description

+ Lagrange element order for the space for the main unknown, for all elements. + + **Default**: `1` + + + + === "`/space/discr_order` (`file`)" +

Description

+ Path to file containing Lagrange element order for the space for the main unknown per element. + + **Extensions:** `['.txt', '.bin']` + + + + === "`/space/discr_order` (`list`)" +

Description

+ List of Lagrange element order for the space for the main unknown with volume IDs. + + + + + + ??? json-spec "`/space/discr_order/*` (`object`)" + ``` + /space/discr_order/* + ``` +

Description

+ Lagrange element order for the a space tagged with volume ID for the main unknown. +

Required

+ + + + ??? json-spec "`/space/discr_order/*/id`" + ``` + /space/discr_order/*/id + ``` + + + === "`/space/discr_order/*/id` (`int`)" +

Description

+ Volume selection ID to apply the discr_order to. + + + + === "`/space/discr_order/*/id` (`list`)" +

Description

+ List of volume selection IDs to apply the discr_order to. + + + + + + ??? json-spec "`/space/discr_order/*/id/*` (`int`)" + ``` + /space/discr_order/*/id/* + ``` +

Description

+ Volume selection ID to apply the discr_order to. + + + + + + + + + + + + ??? json-spec "`/space/discr_order/*/order` (`int`)" + ``` + /space/discr_order/*/order + ``` +

Description

+ Lagrange element order for the space for the main unknown, for all elements. + + + + + + + + + + + + + + + ??? json-spec "`/space/pressure_discr_order` (`int`)" + ``` + /space/pressure_discr_order + ``` +

Description

+ Lagrange element order for the space for the pressure unknown, for all elements. + + **Default**: `1` + + + + + + + + + ??? json-spec "`/space/basis_type` (`string`)" + ``` + /space/basis_type + ``` +

Description

+ Type of basis to use for non polygonal element, one of Lagrange, Spline, or Serendipity. Spline or Serendipity work only for quad/hex meshes + + **Default**: `'Lagrange'` + + **Options:** `['Lagrange', 'Spline', 'Serendipity']` + + + + + + + + + ??? json-spec "`/space/poly_basis_type` (`string`)" + ``` + /space/poly_basis_type + ``` +

Description

+ Type of basis to use for a polygonal element, one of MFSHarmonic, MeanValue, or Wachspress see 'PolySpline..' paper for details. + + **Default**: `'MFSHarmonic'` + + **Options:** `['MFSHarmonic', 'MeanValue', 'Wachspress']` + + + + + + + + + ??? json-spec "`/space/use_p_ref` (`bool`)" + ``` + /space/use_p_ref + ``` +

Description

+ Perform a priori p-refinement based on element shape, as described in 'Decoupling..' paper. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/remesh` (`object`)" + ``` + /space/remesh + ``` +

Description

+ Settings for adaptive remeshing + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/enabled` (`bool`)" + ``` + /space/remesh/enabled + ``` +

Description

+ Whether to do adaptive remeshing + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/remesh/split` (`object`)" + ``` + /space/remesh/split + ``` +

Description

+ Settings for adaptive remeshing edge splitting operations + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/split/enabled` (`bool`)" + ``` + /space/remesh/split/enabled + ``` +

Description

+ Whether to do edge splitting in adaptive remeshing + + **Default**: `True` + + + + + + + + + ??? json-spec "`/space/remesh/split/acceptance_tolerance` (`float`)" + ``` + /space/remesh/split/acceptance_tolerance + ``` +

Description

+ Accept split operation if energy decreased by at least x + + **Default**: `0.001` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/space/remesh/split/culling_threshold` (`float`)" + ``` + /space/remesh/split/culling_threshold + ``` +

Description

+ Split operation culling threshold on energy + + **Default**: `0.95` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/space/remesh/split/max_depth` (`int`)" + ``` + /space/remesh/split/max_depth + ``` +

Description

+ Maximum depth split per time-step + + **Default**: `3` + + **Range:** `[1, inf]` + + + + + + + + + ??? json-spec "`/space/remesh/split/min_edge_length` (`float`)" + ``` + /space/remesh/split/min_edge_length + ``` +

Description

+ Minimum edge length to split + + **Default**: `1e-06` + + **Range:** `[0, inf]` + + + + + + + + + + + + ??? json-spec "`/space/remesh/collapse` (`object`)" + ``` + /space/remesh/collapse + ``` +

Description

+ Settings for adaptive remeshing edge collapse operations + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/collapse/enabled` (`bool`)" + ``` + /space/remesh/collapse/enabled + ``` +

Description

+ Whether to do edge collapse in adaptive remeshing + + **Default**: `True` + + + + + + + + + ??? json-spec "`/space/remesh/collapse/acceptance_tolerance` (`float`)" + ``` + /space/remesh/collapse/acceptance_tolerance + ``` +

Description

+ Accept collapse operation if energy decreased by at least x + + **Default**: `-1e-08` + + **Range:** `[-inf, 0]` + + + + + + + + + ??? json-spec "`/space/remesh/collapse/culling_threshold` (`float`)" + ``` + /space/remesh/collapse/culling_threshold + ``` +

Description

+ Collapse operation culling threshold on energy + + **Default**: `0.01` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/space/remesh/collapse/max_depth` (`int`)" + ``` + /space/remesh/collapse/max_depth + ``` +

Description

+ Maximum depth collapse per time-step + + **Default**: `3` + + **Range:** `[1, inf]` + + + + + + + + + ??? json-spec "`/space/remesh/collapse/rel_max_edge_length` (`float`)" + ``` + /space/remesh/collapse/rel_max_edge_length + ``` +

Description

+ Length of maximum edge length to collapse relative to initial minimum edge length + + **Default**: `1` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/space/remesh/collapse/abs_max_edge_length` (`float`)" + ``` + /space/remesh/collapse/abs_max_edge_length + ``` +

Description

+ Length of maximum edge length to collapse in absolute units of distance + + **Default**: `1e+100` + + **Range:** `[0, inf]` + + + + + + + + + + + + ??? json-spec "`/space/remesh/swap` (`object`)" + ``` + /space/remesh/swap + ``` +

Description

+ Settings for adaptive remeshing edge/face swap operations + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/swap/enabled` (`bool`)" + ``` + /space/remesh/swap/enabled + ``` +

Description

+ Whether to do edge/face swap in adaptive remeshing + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/remesh/swap/acceptance_tolerance` (`float`)" + ``` + /space/remesh/swap/acceptance_tolerance + ``` +

Description

+ Accept swap operation if energy decreased by at least x + + **Default**: `-1e-08` + + **Range:** `[-inf, 0]` + + + + + + + + + ??? json-spec "`/space/remesh/swap/max_depth` (`int`)" + ``` + /space/remesh/swap/max_depth + ``` +

Description

+ Maximum depth swap per time-step + + **Default**: `3` + + **Range:** `[1, inf]` + + + + + + + + + + + + ??? json-spec "`/space/remesh/smooth` (`object`)" + ``` + /space/remesh/smooth + ``` +

Description

+ Settings for adaptive remeshing vertex smoothing operations + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/smooth/enabled` (`bool`)" + ``` + /space/remesh/smooth/enabled + ``` +

Description

+ Whether to do vertex smoothing in adaptive remeshing + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/remesh/smooth/acceptance_tolerance` (`float`)" + ``` + /space/remesh/smooth/acceptance_tolerance + ``` +

Description

+ Accept smooth operation if energy decreased by at least x + + **Default**: `-1e-08` + + **Range:** `[-inf, 0]` + + + + + + + + + ??? json-spec "`/space/remesh/smooth/max_iters` (`int`)" + ``` + /space/remesh/smooth/max_iters + ``` +

Description

+ Maximum number of smoothing iterations per time-step + + **Default**: `1` + + **Range:** `[1, inf]` + + + + + + + + + + + + ??? json-spec "`/space/remesh/local_relaxation` (`object`)" + ``` + /space/remesh/local_relaxation + ``` +

Description

+ Settings for adaptive remeshing local relaxation + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/remesh/local_relaxation/local_mesh_n_ring` (`int`)" + ``` + /space/remesh/local_relaxation/local_mesh_n_ring + ``` +

Description

+ Size of n-ring for local relaxation + + **Default**: `2` + + + + + + + + + ??? json-spec "`/space/remesh/local_relaxation/local_mesh_rel_area` (`float`)" + ``` + /space/remesh/local_relaxation/local_mesh_rel_area + ``` +

Description

+ Minimum area for local relaxation + + **Default**: `0.01` + + + + + + + + + ??? json-spec "`/space/remesh/local_relaxation/max_nl_iterations` (`int`)" + ``` + /space/remesh/local_relaxation/max_nl_iterations + ``` +

Description

+ Maximum number of nonlinear solver iterations before acceptance check + + **Default**: `1` + + + + + + + + + + + + ??? json-spec "`/space/remesh/type` (`string`)" + ``` + /space/remesh/type + ``` +

Description

+ Type of adaptive remeshing to use. + + **Default**: `'physics'` + + **Options:** `['physics', 'sizing_field']` + + + + + + + + + + + + ??? json-spec "`/space/advanced` (`object`)" + ``` + /space/advanced + ``` +

Description

+ Advanced settings for the FE space. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/space/advanced/discr_order_max` (`int`)" + ``` + /space/advanced/discr_order_max + ``` +

Description

+ Maximal discretization order in adaptive p-refinement and hp-refinement + + **Default**: `4` + + + + + + + + + ??? json-spec "`/space/advanced/isoparametric` (`bool`)" + ``` + /space/advanced/isoparametric + ``` +

Description

+ Forces geometric map basis to be the same degree as the main variable basis, irrespective of the degree associated with the geom. map degrees associated with the elements of the geometry. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/advanced/bc_method` (`string`)" + ``` + /space/advanced/bc_method + ``` +

Description

+ Method for imposing analytic Dirichet boundary conditions. If 'lsq' (least-squares fit), then the bc function is sampled at quadrature points, and the FEspace nodal values on the boundary are determined by minimizing L2 norm of the difference. If 'sample', then the analytic bc function is sampled at the boundary nodes. + + **Default**: `'sample'` + + **Options:** `['lsq', 'sample']` + + + + + + + + + ??? json-spec "`/space/advanced/n_boundary_samples` (`int`)" + ``` + /space/advanced/n_boundary_samples + ``` +

Description

+ Per-element number of boundary samples for analytic Dirichlet and Neumann boundary conditions. + + **Default**: `-1` + + + + + + + + + ??? json-spec "`/space/advanced/quadrature_order` (`int`)" + ``` + /space/advanced/quadrature_order + ``` +

Description

+ Minimal quadrature order to use in matrix and rhs assembly; the actual order is determined as min(2*(p-1)+1,quadrature_order). + + **Default**: `-1` + + + + + + + + + ??? json-spec "`/space/advanced/mass_quadrature_order` (`int`)" + ``` + /space/advanced/mass_quadrature_order + ``` +

Description

+ Minimal quadrature order to use in mass matrix assembler; the actual order is determined as min(2*p+1,quadrature_order) + + **Default**: `-1` + + + + + + + + + ??? json-spec "`/space/advanced/integral_constraints` (`int`)" + ``` + /space/advanced/integral_constraints + ``` +

Description

+ Number of constraints for non-conforming polygonal basis; 0, 1, or 2; see 'PolySpline..' paper for details. + + **Default**: `2` + + + + + + + + + ??? json-spec "`/space/advanced/n_harmonic_samples` (`int`)" + ``` + /space/advanced/n_harmonic_samples + ``` +

Description

+ If MFSHarmonics is used for a polygonal element, number of collocation samples used in the basis construction;see 'PolySpline..' paper for details. + + **Default**: `10` + + + + + + + + + ??? json-spec "`/space/advanced/force_no_ref_for_harmonic` (`bool`)" + ``` + /space/advanced/force_no_ref_for_harmonic + ``` +

Description

+ If true, do not do uniform global refinement if the mesh contains polygonal elements. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/advanced/B` (`int`)" + ``` + /space/advanced/B + ``` +

Description

+ The target deviation of the error on elements from perfect element error, for a priori geometry-dependent p-refinement, see 'Decoupling .. ' paper. + + **Default**: `3` + + + + + + + + + ??? json-spec "`/space/advanced/h1_formula` (`bool`)" + ``` + /space/advanced/h1_formula + ``` +

Description

+ + + **Default**: `False` + + + + + + + + + ??? json-spec "`/space/advanced/count_flipped_els` (`bool`)" + ``` + /space/advanced/count_flipped_els + ``` +

Description

+ Count the number of elements with Jacobian of the geometric map not positive at quadrature points. + + **Default**: `True` + + + + + + + + + ??? json-spec "`/space/advanced/use_particle_advection` (`bool`)" + ``` + /space/advanced/use_particle_advection + ``` +

Description

+ Use particle advection in splitting method for solving NS equation. + + **Default**: `False` + + + + + + + + + + + + + ??? json-spec "`/time`" + ``` + /time + ``` + + + === "`/time` (`object`)" +

Description

+ The time parameters: start time `t0`, end time `tend`, time step `dt`. + + **Default**: `'skip'` +

Required

+ + + + + + ??? json-spec "`/time/tend` (`float`)" + ``` + /time/tend + ``` +

Description

+ Ending time + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/time/dt` (`float`)" + ``` + /time/dt + ``` +

Description

+ Time step size $\Delta t$ + + **Range:** `[0, inf]` + + + +

Optional

+ + + + + + ??? json-spec "`/time/t0` (`float`)" + ``` + /time/t0 + ``` +

Description

+ Startning time + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + ??? json-spec "`/time/integrator`" + ``` + /time/integrator + ``` + + + === "`/time/integrator` (`string`)" +

Description

+ Time integrator + + **Default**: `'ImplicitEuler'` + + **Options:** `['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']` + + + + === "ImplicitEuler" + + **Type**: ImplicitEuler +

Description

+ Implicit Euler time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + + + + + === "BDF" + + **Type**: BDF +

Description

+ Backwards differentiation formula time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/steps` (`int`)" + ``` + /time/integrator/steps + ``` +

Description

+ BDF order + + **Default**: `1` + + **Range:** `[1, 6]` + + + + + + + === "ImplicitNewmark" + + **Type**: ImplicitNewmark +

Description

+ Implicit Newmark time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/gamma` (`float`)" + ``` + /time/integrator/gamma + ``` +

Description

+ Newmark gamma + + **Default**: `0.5` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/time/integrator/beta` (`float`)" + ``` + /time/integrator/beta + ``` +

Description

+ Newmark beta + + **Default**: `0.25` + + **Range:** `[0, 0.5]` + + + + + + + + + + + + ??? json-spec "`/time/quasistatic` (`bool`)" + ``` + /time/quasistatic + ``` +

Description

+ Ignore inertia in time dependent. Used for doing incremental load. + + **Default**: `False` + + + + + + + === "`/time` (`object`)" +

Description

+ The time parameters: start time `t0`, time step `dt`, number of time steps. +

Required

+ + + + + + ??? json-spec "`/time/time_steps` (`int`)" + ``` + /time/time_steps + ``` +

Description

+ Number of time steps + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/time/dt` (`float`)" + ``` + /time/dt + ``` +

Description

+ Time step size $\Delta t$ + + **Range:** `[0, inf]` + + + +

Optional

+ + + + + + ??? json-spec "`/time/t0` (`float`)" + ``` + /time/t0 + ``` +

Description

+ Startning time + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + ??? json-spec "`/time/integrator`" + ``` + /time/integrator + ``` + + + === "`/time/integrator` (`string`)" +

Description

+ Time integrator + + **Default**: `'ImplicitEuler'` + + **Options:** `['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']` + + + + === "ImplicitEuler" + + **Type**: ImplicitEuler +

Description

+ Implicit Euler time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + + + + + === "BDF" + + **Type**: BDF +

Description

+ Backwards differentiation formula time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/steps` (`int`)" + ``` + /time/integrator/steps + ``` +

Description

+ BDF order + + **Default**: `1` + + **Range:** `[1, 6]` + + + + + + + === "ImplicitNewmark" + + **Type**: ImplicitNewmark +

Description

+ Implicit Newmark time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/gamma` (`float`)" + ``` + /time/integrator/gamma + ``` +

Description

+ Newmark gamma + + **Default**: `0.5` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/time/integrator/beta` (`float`)" + ``` + /time/integrator/beta + ``` +

Description

+ Newmark beta + + **Default**: `0.25` + + **Range:** `[0, 0.5]` + + + + + + + + + + + + ??? json-spec "`/time/quasistatic` (`bool`)" + ``` + /time/quasistatic + ``` +

Description

+ Ignore inertia in time dependent. Used for doing incremental load. + + **Default**: `False` + + + + + + + === "`/time` (`object`)" +

Description

+ The time parameters: start time `t0`, end time `tend`, number of time steps. +

Required

+ + + + + + ??? json-spec "`/time/time_steps` (`int`)" + ``` + /time/time_steps + ``` +

Description

+ Number of time steps + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/time/tend` (`float`)" + ``` + /time/tend + ``` +

Description

+ Ending time + + **Range:** `[0, inf]` + + + +

Optional

+ + + + + + ??? json-spec "`/time/t0` (`float`)" + ``` + /time/t0 + ``` +

Description

+ Startning time + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + ??? json-spec "`/time/integrator`" + ``` + /time/integrator + ``` + + + === "`/time/integrator` (`string`)" +

Description

+ Time integrator + + **Default**: `'ImplicitEuler'` + + **Options:** `['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']` + + + + === "ImplicitEuler" + + **Type**: ImplicitEuler +

Description

+ Implicit Euler time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + + + + + === "BDF" + + **Type**: BDF +

Description

+ Backwards differentiation formula time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/steps` (`int`)" + ``` + /time/integrator/steps + ``` +

Description

+ BDF order + + **Default**: `1` + + **Range:** `[1, 6]` + + + + + + + === "ImplicitNewmark" + + **Type**: ImplicitNewmark +

Description

+ Implicit Newmark time integration +

Required

+ + + + + + ??? json-spec "`/time/integrator/type` (`string`)" + ``` + /time/integrator/type + ``` +

Description

+ Type of time integrator to use + + **Options:** `['ImplicitEuler', 'BDF', 'ImplicitNewmark']` + + + +

Optional

+ + + + + + ??? json-spec "`/time/integrator/gamma` (`float`)" + ``` + /time/integrator/gamma + ``` +

Description

+ Newmark gamma + + **Default**: `0.5` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/time/integrator/beta` (`float`)" + ``` + /time/integrator/beta + ``` +

Description

+ Newmark beta + + **Default**: `0.25` + + **Range:** `[0, 0.5]` + + + + + + + + + + + + ??? json-spec "`/time/quasistatic` (`bool`)" + ``` + /time/quasistatic + ``` +

Description

+ Ignore inertia in time dependent. Used for doing incremental load. + + **Default**: `False` + + + + + + + + + + + + ??? json-spec "`/contact` (`object`)" + ``` + /contact + ``` +

Description

+ Contact handling parameters. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/contact/enabled` (`bool`)" + ``` + /contact/enabled + ``` +

Description

+ True if contact handling is enabled. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/contact/dhat` (`float`)" + ``` + /contact/dhat + ``` +

Description

+ Contact barrier activation distance. + + **Default**: `0.001` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/contact/dhat_percentage` (`float`)" + ``` + /contact/dhat_percentage + ``` +

Description

+ $\hat{d}$ as percentage of the diagonal of the bounding box + + **Default**: `0.8` + + + + + + + + + ??? json-spec "`/contact/epsv` (`float`)" + ``` + /contact/epsv + ``` +

Description

+ Friction smoothing parameter. + + **Default**: `0.001` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/contact/friction_coefficient` (`float`)" + ``` + /contact/friction_coefficient + ``` +

Description

+ Coefficient of friction (global) + + **Default**: `0` + + + + + + + + + ??? json-spec "`/contact/use_convergent_formulation` (`bool`)" + ``` + /contact/use_convergent_formulation + ``` +

Description

+ Whether to use the convergent (area weighted) formulation of IPC. + + **Default**: `False` + + + + + + + ??? json-spec "`/contact/collision_mesh`" + ``` + /contact/collision_mesh + ``` + + + === "`/contact/collision_mesh` (`object`)" +

Description

+ Load a preconstructed collision mesh. + + **Default**: `'skip'` +

Required

+ + + + + + ??? json-spec "`/contact/collision_mesh/mesh` (`string`)" + ``` + /contact/collision_mesh/mesh + ``` +

Description

+ Path to preconstructed collision mesh. + + + + + + + + + ??? json-spec "`/contact/collision_mesh/linear_map` (`string`)" + ``` + /contact/collision_mesh/linear_map + ``` +

Description

+ HDF file storing the linear mapping of displacements. + + + +

Optional

+ + + + + + ??? json-spec "`/contact/collision_mesh/enabled` (`bool`)" + ``` + /contact/collision_mesh/enabled + ``` +

Description

+ + + **Default**: `True` + + + + + + + === "`/contact/collision_mesh` (`object`)" +

Description

+ Construct a collision mesh with a maximum edge length. +

Required

+ + + + + + ??? json-spec "`/contact/collision_mesh/max_edge_length` (`float`)" + ``` + /contact/collision_mesh/max_edge_length + ``` +

Description

+ Maximum edge length to use for building the collision mesh. + + + +

Optional

+ + + + + + ??? json-spec "`/contact/collision_mesh/tessellation_type` (`string`)" + ``` + /contact/collision_mesh/tessellation_type + ``` +

Description

+ Type of tessellation to use for building the collision mesh. + + **Default**: `'regular'` + + **Options:** `['regular', 'irregular']` + + + + + + + + + ??? json-spec "`/contact/collision_mesh/enabled` (`bool`)" + ``` + /contact/collision_mesh/enabled + ``` +

Description

+ + + **Default**: `True` + + + + + + + + + + + + ??? json-spec "`/contact/periodic` (`bool`)" + ``` + /contact/periodic + ``` +

Description

+ Set to true to check collision between adjacent periodic cells. + + **Default**: `False` + + + + + + + + + + + + ??? json-spec "`/solver` (`object`)" + ``` + /solver + ``` +

Description

+ The settings for the solver including linear solver, nonlinear solver, and some advanced options. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/max_threads` (`int`)" + ``` + /solver/max_threads + ``` +

Description

+ Maximum number of threads used; 0 is unlimited. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/linear` (`object`)" + ``` + /solver/linear + ``` +

Description

+ Settings for the linear solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/enable_overwrite_solver` (`bool`)" + ``` + /solver/linear/enable_overwrite_solver + ``` +

Description

+ If solver name is not present, falls back to default + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/linear/solver` (`string`)" + ``` + /solver/linear/solver + ``` +

Description

+ Linear solver type. + + **Default**: `''` + + **Options:** `['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']` + + + + + + + + + ??? json-spec "`/solver/linear/precond` (`string`)" + ``` + /solver/linear/precond + ``` +

Description

+ Preconditioner used if using an iterative linear solver. + + **Default**: `''` + + **Options:** `['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::LeastSquaresConjugateGradient` (`object`)" + ``` + /solver/linear/Eigen::LeastSquaresConjugateGradient + ``` +

Description

+ Settings for the Eigen's Least Squares Conjugate Gradient solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter` (`int`)" + ``` + /solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance` (`float`)" + ``` + /solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::DGMRES` (`object`)" + ``` + /solver/linear/Eigen::DGMRES + ``` +

Description

+ Settings for the Eigen's DGMRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::DGMRES/max_iter` (`int`)" + ``` + /solver/linear/Eigen::DGMRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::DGMRES/tolerance` (`float`)" + ``` + /solver/linear/Eigen::DGMRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::ConjugateGradient` (`object`)" + ``` + /solver/linear/Eigen::ConjugateGradient + ``` +

Description

+ Settings for the Eigen's Conjugate Gradient solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::ConjugateGradient/max_iter` (`int`)" + ``` + /solver/linear/Eigen::ConjugateGradient/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::ConjugateGradient/tolerance` (`float`)" + ``` + /solver/linear/Eigen::ConjugateGradient/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::BiCGSTAB` (`object`)" + ``` + /solver/linear/Eigen::BiCGSTAB + ``` +

Description

+ Settings for the Eigen's BiCGSTAB solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::BiCGSTAB/max_iter` (`int`)" + ``` + /solver/linear/Eigen::BiCGSTAB/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::BiCGSTAB/tolerance` (`float`)" + ``` + /solver/linear/Eigen::BiCGSTAB/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::GMRES` (`object`)" + ``` + /solver/linear/Eigen::GMRES + ``` +

Description

+ Settings for the Eigen's GMRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::GMRES/max_iter` (`int`)" + ``` + /solver/linear/Eigen::GMRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::GMRES/tolerance` (`float`)" + ``` + /solver/linear/Eigen::GMRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::MINRES` (`object`)" + ``` + /solver/linear/Eigen::MINRES + ``` +

Description

+ Settings for the Eigen's MINRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Eigen::MINRES/max_iter` (`int`)" + ``` + /solver/linear/Eigen::MINRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Eigen::MINRES/tolerance` (`float`)" + ``` + /solver/linear/Eigen::MINRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Pardiso` (`object`)" + ``` + /solver/linear/Pardiso + ``` +

Description

+ Settings for the Pardiso solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Pardiso/mtype` (`int`)" + ``` + /solver/linear/Pardiso/mtype + ``` +

Description

+ Matrix type. + + **Default**: `11` + + **Options:** `[1, 2, -2, 3, 4, -4, 6, 11, 13]` + + + + + + + + + + + + ??? json-spec "`/solver/linear/Hypre` (`object`)" + ``` + /solver/linear/Hypre + ``` +

Description

+ Settings for the Hypre solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/Hypre/max_iter` (`int`)" + ``` + /solver/linear/Hypre/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/Hypre/pre_max_iter` (`int`)" + ``` + /solver/linear/Hypre/pre_max_iter + ``` +

Description

+ Maximum number of pre iterations. + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/linear/Hypre/tolerance` (`float`)" + ``` + /solver/linear/Hypre/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-10` + + + + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL` (`object`)" + ``` + /solver/linear/AMGCL + ``` +

Description

+ Settings for the AMGCL solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/solver` (`object`)" + ``` + /solver/linear/AMGCL/solver + ``` +

Description

+ Solver settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/solver/tol` (`float`)" + ``` + /solver/linear/AMGCL/solver/tol + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/solver/maxiter` (`int`)" + ``` + /solver/linear/AMGCL/solver/maxiter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/solver/type` (`string`)" + ``` + /solver/linear/AMGCL/solver/type + ``` +

Description

+ Type of solver to use. + + **Default**: `'cg'` + + + + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond` (`object`)" + ``` + /solver/linear/AMGCL/precond + ``` +

Description

+ Preconditioner settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax` (`object`)" + ``` + /solver/linear/AMGCL/precond/relax + ``` +

Description

+ Preconditioner settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/degree` (`int`)" + ``` + /solver/linear/AMGCL/precond/relax/degree + ``` +

Description

+ Degree of the polynomial. + + **Default**: `16` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/type` (`string`)" + ``` + /solver/linear/AMGCL/precond/relax/type + ``` +

Description

+ Type of relaxation to use. + + **Default**: `'chebyshev'` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/power_iters` (`int`)" + ``` + /solver/linear/AMGCL/precond/relax/power_iters + ``` +

Description

+ Number of power iterations. + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/higher` (`float`)" + ``` + /solver/linear/AMGCL/precond/relax/higher + ``` +

Description

+ Higher level relaxation. + + **Default**: `2` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/lower` (`float`)" + ``` + /solver/linear/AMGCL/precond/relax/lower + ``` +

Description

+ Lower level relaxation. + + **Default**: `0.008333333333` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/relax/scale` (`bool`)" + ``` + /solver/linear/AMGCL/precond/relax/scale + ``` +

Description

+ Scale. + + **Default**: `True` + + + + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/class` (`string`)" + ``` + /solver/linear/AMGCL/precond/class + ``` +

Description

+ Type of preconditioner to use. + + **Default**: `'amg'` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/max_levels` (`int`)" + ``` + /solver/linear/AMGCL/precond/max_levels + ``` +

Description

+ Maximum number of levels. + + **Default**: `6` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/direct_coarse` (`bool`)" + ``` + /solver/linear/AMGCL/precond/direct_coarse + ``` +

Description

+ Use direct solver for the coarsest level. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/ncycle` (`int`)" + ``` + /solver/linear/AMGCL/precond/ncycle + ``` +

Description

+ Number of cycles. + + **Default**: `2` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening` (`object`)" + ``` + /solver/linear/AMGCL/precond/coarsening + ``` +

Description

+ Coarsening parameters. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening/type` (`string`)" + ``` + /solver/linear/AMGCL/precond/coarsening/type + ``` +

Description

+ Coarsening type. + + **Default**: `'smoothed_aggregation'` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius` (`bool`)" + ``` + /solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius + ``` +

Description

+ Should the spectral radius be estimated. + + **Default**: `True` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening/relax` (`float`)" + ``` + /solver/linear/AMGCL/precond/coarsening/relax + ``` +

Description

+ Coarsening relaxation. + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening/aggr` (`object`)" + ``` + /solver/linear/AMGCL/precond/coarsening/aggr + ``` +

Description

+ Aggregation settings. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong` (`float`)" + ``` + /solver/linear/AMGCL/precond/coarsening/aggr/eps_strong + ``` +

Description

+ Aggregation epsilon strong. + + **Default**: `0` + + + + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear` (`object`)" + ``` + /solver/adjoint_linear + ``` +

Description

+ Settings for the linear solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/enable_overwrite_solver` (`bool`)" + ``` + /solver/adjoint_linear/enable_overwrite_solver + ``` +

Description

+ If solver name is not present, falls back to default + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/solver` (`string`)" + ``` + /solver/adjoint_linear/solver + ``` +

Description

+ Linear solver type. + + **Default**: `''` + + **Options:** `['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/precond` (`string`)" + ``` + /solver/adjoint_linear/precond + ``` +

Description

+ Preconditioner used if using an iterative linear solver. + + **Default**: `''` + + **Options:** `['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient` (`object`)" + ``` + /solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient + ``` +

Description

+ Settings for the Eigen's Least Squares Conjugate Gradient solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::DGMRES` (`object`)" + ``` + /solver/adjoint_linear/Eigen::DGMRES + ``` +

Description

+ Settings for the Eigen's DGMRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::DGMRES/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::DGMRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::DGMRES/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::DGMRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::ConjugateGradient` (`object`)" + ``` + /solver/adjoint_linear/Eigen::ConjugateGradient + ``` +

Description

+ Settings for the Eigen's Conjugate Gradient solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::ConjugateGradient/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::ConjugateGradient/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::BiCGSTAB` (`object`)" + ``` + /solver/adjoint_linear/Eigen::BiCGSTAB + ``` +

Description

+ Settings for the Eigen's BiCGSTAB solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::BiCGSTAB/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::BiCGSTAB/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::GMRES` (`object`)" + ``` + /solver/adjoint_linear/Eigen::GMRES + ``` +

Description

+ Settings for the Eigen's GMRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::GMRES/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::GMRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::GMRES/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::GMRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::MINRES` (`object`)" + ``` + /solver/adjoint_linear/Eigen::MINRES + ``` +

Description

+ Settings for the Eigen's MINRES solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::MINRES/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Eigen::MINRES/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Eigen::MINRES/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Eigen::MINRES/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-12` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Pardiso` (`object`)" + ``` + /solver/adjoint_linear/Pardiso + ``` +

Description

+ Settings for the Pardiso solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Pardiso/mtype` (`int`)" + ``` + /solver/adjoint_linear/Pardiso/mtype + ``` +

Description

+ Matrix type. + + **Default**: `11` + + **Options:** `[1, 2, -2, 3, 4, -4, 6, 11, 13]` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Hypre` (`object`)" + ``` + /solver/adjoint_linear/Hypre + ``` +

Description

+ Settings for the Hypre solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/Hypre/max_iter` (`int`)" + ``` + /solver/adjoint_linear/Hypre/max_iter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Hypre/pre_max_iter` (`int`)" + ``` + /solver/adjoint_linear/Hypre/pre_max_iter + ``` +

Description

+ Maximum number of pre iterations. + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/Hypre/tolerance` (`float`)" + ``` + /solver/adjoint_linear/Hypre/tolerance + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-10` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL` (`object`)" + ``` + /solver/adjoint_linear/AMGCL + ``` +

Description

+ Settings for the AMGCL solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/solver` (`object`)" + ``` + /solver/adjoint_linear/AMGCL/solver + ``` +

Description

+ Solver settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/solver/tol` (`float`)" + ``` + /solver/adjoint_linear/AMGCL/solver/tol + ``` +

Description

+ Convergence tolerance. + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/solver/maxiter` (`int`)" + ``` + /solver/adjoint_linear/AMGCL/solver/maxiter + ``` +

Description

+ Maximum number of iterations. + + **Default**: `1000` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/solver/type` (`string`)" + ``` + /solver/adjoint_linear/AMGCL/solver/type + ``` +

Description

+ Type of solver to use. + + **Default**: `'cg'` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond` (`object`)" + ``` + /solver/adjoint_linear/AMGCL/precond + ``` +

Description

+ Preconditioner settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax` (`object`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax + ``` +

Description

+ Preconditioner settings for the AMGCL. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/degree` (`int`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/degree + ``` +

Description

+ Degree of the polynomial. + + **Default**: `16` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/type` (`string`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/type + ``` +

Description

+ Type of relaxation to use. + + **Default**: `'chebyshev'` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/power_iters` (`int`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/power_iters + ``` +

Description

+ Number of power iterations. + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/higher` (`float`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/higher + ``` +

Description

+ Higher level relaxation. + + **Default**: `2` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/lower` (`float`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/lower + ``` +

Description

+ Lower level relaxation. + + **Default**: `0.008333333333` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/relax/scale` (`bool`)" + ``` + /solver/adjoint_linear/AMGCL/precond/relax/scale + ``` +

Description

+ Scale. + + **Default**: `True` + + + + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/class` (`string`)" + ``` + /solver/adjoint_linear/AMGCL/precond/class + ``` +

Description

+ Type of preconditioner to use. + + **Default**: `'amg'` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/max_levels` (`int`)" + ``` + /solver/adjoint_linear/AMGCL/precond/max_levels + ``` +

Description

+ Maximum number of levels. + + **Default**: `6` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/direct_coarse` (`bool`)" + ``` + /solver/adjoint_linear/AMGCL/precond/direct_coarse + ``` +

Description

+ Use direct solver for the coarsest level. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/ncycle` (`int`)" + ``` + /solver/adjoint_linear/AMGCL/precond/ncycle + ``` +

Description

+ Number of cycles. + + **Default**: `2` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening` (`object`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening + ``` +

Description

+ Coarsening parameters. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening/type` (`string`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening/type + ``` +

Description

+ Coarsening type. + + **Default**: `'smoothed_aggregation'` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius` (`bool`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius + ``` +

Description

+ Should the spectral radius be estimated. + + **Default**: `True` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening/relax` (`float`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening/relax + ``` +

Description

+ Coarsening relaxation. + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening/aggr` (`object`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening/aggr + ``` +

Description

+ Aggregation settings. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong` (`float`)" + ``` + /solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong + ``` +

Description

+ Aggregation epsilon strong. + + **Default**: `0` + + + + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear` (`object`)" + ``` + /solver/nonlinear + ``` +

Description

+ Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section. + + **Default**: `None` +

Optional

+ + + + ??? json-spec "`/solver/nonlinear/solver`" + ``` + /solver/nonlinear/solver + ``` + + + === "`/solver/nonlinear/solver` (`string`)" +

Description

+ Nonlinear solver type + + **Default**: `'Newton'` + + **Options:** `['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']` + + + + === "`/solver/nonlinear/solver` (`list`)" +

Description

+ List of solvers for ballback. Eg, [{'type':'Newton'}, {'type':'L-BFGS'}, {'type':'GradientDescent'}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent + + + + ??? json-spec "`/solver/nonlinear/solver/*`" + ``` + /solver/nonlinear/solver/* + ``` + + + === "Newton" + + **Type**: Newton +

Description

+ Options for Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "ProjectedNewton" + + **Type**: ProjectedNewton +

Description

+ Options for projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "RegularizedNewton" + + **Type**: RegularizedNewton +

Description

+ Options for regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "RegularizedProjectedNewton" + + **Type**: RegularizedProjectedNewton +

Description

+ Options for regularized projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "DenseNewton" + + **Type**: DenseNewton +

Description

+ Options for Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "DenseProjectedNewton" + + **Type**: DenseProjectedNewton +

Description

+ Options for projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "DenseRegularizedNewton" + + **Type**: DenseRegularizedNewton +

Description

+ Options for regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "DenseRegularizedProjectedNewton" + + **Type**: DenseRegularizedProjectedNewton +

Description

+ Options for projected regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "GradientDescent" + + **Type**: GradientDescent +

Description

+ Options for Gradient Descent. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + + + + + === "StochasticGradientDescent" + + **Type**: StochasticGradientDescent +

Description

+ Options for Stochastic Gradient Descent. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/erase_component_probability` (`float`)" + ``` + /solver/nonlinear/solver/*/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for stochastic solvers. + + **Default**: `0.3` + + + + + + + === "L-BFGS" + + **Type**: L-BFGS +

Description

+ Options for L-BFGS. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/history_size` (`int`)" + ``` + /solver/nonlinear/solver/*/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + === "BFGS" + + **Type**: BFGS +

Description

+ Options for BFGS. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + + + + + === "ADAM" + + **Type**: ADAM +

Description

+ Options for ADAM. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/alpha` (`float`)" + ``` + /solver/nonlinear/solver/*/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/beta_1` (`float`)" + ``` + /solver/nonlinear/solver/*/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/beta_2` (`float`)" + ``` + /solver/nonlinear/solver/*/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/epsilon` (`float`)" + ``` + /solver/nonlinear/solver/*/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + === "StochasticADAM" + + **Type**: StochasticADAM +

Description

+ Options for ADAM. +

Required

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/type` (`string`)" + ``` + /solver/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/solver/*/alpha` (`float`)" + ``` + /solver/nonlinear/solver/*/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/beta_1` (`float`)" + ``` + /solver/nonlinear/solver/*/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/beta_2` (`float`)" + ``` + /solver/nonlinear/solver/*/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/epsilon` (`float`)" + ``` + /solver/nonlinear/solver/*/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/solver/*/erase_component_probability` (`float`)" + ``` + /solver/nonlinear/solver/*/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for stochastic solvers. + + **Default**: `0.3` + + + + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/x_delta` (`float`)" + ``` + /solver/nonlinear/x_delta + ``` +

Description

+ Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/nonlinear/grad_norm` (`float`)" + ``` + /solver/nonlinear/grad_norm + ``` +

Description

+ Stopping criterion: Minimal gradient norm for the iterations to continue. + + **Default**: `1e-08` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/nonlinear/first_grad_norm_tol` (`float`)" + ``` + /solver/nonlinear/first_grad_norm_tol + ``` +

Description

+ Minimal gradient norm for the iterations to not start, assume we already are at a minimum. + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/nonlinear/max_iterations` (`int`)" + ``` + /solver/nonlinear/max_iterations + ``` +

Description

+ Maximum number of iterations for a nonlinear solve. + + **Default**: `500` + + + + + + + ??? json-spec "`/solver/nonlinear/iterations_per_strategy`" + ``` + /solver/nonlinear/iterations_per_strategy + ``` + + + === "`/solver/nonlinear/iterations_per_strategy` (`int`)" +

Description

+ Number of iterations for every substrategy before reset. + + **Default**: `5` + + + + === "`/solver/nonlinear/iterations_per_strategy` (`list`)" +

Description

+ Number of iterations for every substrategy before reset. + + + + + + ??? json-spec "`/solver/nonlinear/iterations_per_strategy/*` (`int`)" + ``` + /solver/nonlinear/iterations_per_strategy/* + ``` +

Description

+ Number of iterations for every substrategy before reset. + + **Default**: `5` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search` (`object`)" + ``` + /solver/nonlinear/line_search + ``` +

Description

+ Settings for line-search in the nonlinear solver + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/line_search/method` (`string`)" + ``` + /solver/nonlinear/line_search/method + ``` +

Description

+ Line-search type + + **Default**: `'RobustArmijo'` + + **Options:** `['Armijo', 'RobustArmijo', 'Backtracking', 'None']` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/use_grad_norm_tol` (`float`)" + ``` + /solver/nonlinear/line_search/use_grad_norm_tol + ``` +

Description

+ When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy + + **Default**: `1e-06` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/min_step_size` (`float`)" + ``` + /solver/nonlinear/line_search/min_step_size + ``` +

Description

+ Mimimum step size + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/max_step_size_iter` (`int`)" + ``` + /solver/nonlinear/line_search/max_step_size_iter + ``` +

Description

+ Number of iterations + + **Default**: `30` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/min_step_size_final` (`float`)" + ``` + /solver/nonlinear/line_search/min_step_size_final + ``` +

Description

+ Mimimum step size for last descent strategy + + **Default**: `1e-20` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/max_step_size_iter_final` (`int`)" + ``` + /solver/nonlinear/line_search/max_step_size_iter_final + ``` +

Description

+ Number of iterations for last descent strategy + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/default_init_step_size` (`float`)" + ``` + /solver/nonlinear/line_search/default_init_step_size + ``` +

Description

+ Initial step size + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/step_ratio` (`float`)" + ``` + /solver/nonlinear/line_search/step_ratio + ``` +

Description

+ Ratio used to decrease the step + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/Armijo` (`object`)" + ``` + /solver/nonlinear/line_search/Armijo + ``` +

Description

+ Options for Armijo. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/line_search/Armijo/c` (`float`)" + ``` + /solver/nonlinear/line_search/Armijo/c + ``` +

Description

+ Armijo c parameter. + + **Default**: `0.0001` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/line_search/RobustArmijo` (`object`)" + ``` + /solver/nonlinear/line_search/RobustArmijo + ``` +

Description

+ Options for RobustArmijo. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance` (`float`)" + ``` + /solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance + ``` +

Description

+ Relative tolerance on E to switch to approximate. + + **Default**: `0.1` + + + + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/allow_out_of_iterations` (`bool`)" + ``` + /solver/nonlinear/allow_out_of_iterations + ``` +

Description

+ If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/nonlinear/L-BFGS` (`object`)" + ``` + /solver/nonlinear/L-BFGS + ``` +

Description

+ Options for LBFGS. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/L-BFGS/history_size` (`int`)" + ``` + /solver/nonlinear/L-BFGS/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/L-BFGS-B` (`object`)" + ``` + /solver/nonlinear/L-BFGS-B + ``` +

Description

+ Options for the boxed L-BFGS. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/L-BFGS-B/history_size` (`int`)" + ``` + /solver/nonlinear/L-BFGS-B/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton` (`object`)" + ``` + /solver/nonlinear/Newton + ``` +

Description

+ Options for Newton. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/Newton/residual_tolerance` (`float`)" + ``` + /solver/nonlinear/Newton/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/reg_weight_min` (`float`)" + ``` + /solver/nonlinear/Newton/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/reg_weight_max` (`float`)" + ``` + /solver/nonlinear/Newton/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/reg_weight_inc` (`float`)" + ``` + /solver/nonlinear/Newton/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/force_psd_projection` (`bool`)" + ``` + /solver/nonlinear/Newton/force_psd_projection + ``` +

Description

+ Force the Hessian to be PSD when using second order solvers (i.e., Newton's method). + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/use_psd_projection` (`bool`)" + ``` + /solver/nonlinear/Newton/use_psd_projection + ``` +

Description

+ Use PSD as fallback using second order solvers (i.e., Newton's method). + + **Default**: `True` + + + + + + + + + ??? json-spec "`/solver/nonlinear/Newton/use_psd_projection_in_regularized` (`bool`)" + ``` + /solver/nonlinear/Newton/use_psd_projection_in_regularized + ``` +

Description

+ Use PSD in regularized Newton. + + **Default**: `True` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/ADAM` (`object`)" + ``` + /solver/nonlinear/ADAM + ``` +

Description

+ Options for ADAM. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/ADAM/alpha` (`float`)" + ``` + /solver/nonlinear/ADAM/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/nonlinear/ADAM/beta_1` (`float`)" + ``` + /solver/nonlinear/ADAM/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/nonlinear/ADAM/beta_2` (`float`)" + ``` + /solver/nonlinear/ADAM/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/nonlinear/ADAM/epsilon` (`float`)" + ``` + /solver/nonlinear/ADAM/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM` (`object`)" + ``` + /solver/nonlinear/StochasticADAM + ``` +

Description

+ Options for ADAM. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM/alpha` (`float`)" + ``` + /solver/nonlinear/StochasticADAM/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM/beta_1` (`float`)" + ``` + /solver/nonlinear/StochasticADAM/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM/beta_2` (`float`)" + ``` + /solver/nonlinear/StochasticADAM/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM/epsilon` (`float`)" + ``` + /solver/nonlinear/StochasticADAM/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticADAM/erase_component_probability` (`float`)" + ``` + /solver/nonlinear/StochasticADAM/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for ADAM. + + **Default**: `0.3` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/StochasticGradientDescent` (`object`)" + ``` + /solver/nonlinear/StochasticGradientDescent + ``` +

Description

+ Options for Stochastic Gradient Descent. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/StochasticGradientDescent/erase_component_probability` (`float`)" + ``` + /solver/nonlinear/StochasticGradientDescent/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for StochasticGradientDescent. + + **Default**: `0.3` + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/box_constraints` (`object`)" + ``` + /solver/nonlinear/box_constraints + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/box_constraints/bounds` (`list`)" + ``` + /solver/nonlinear/box_constraints/bounds + ``` +

Description

+ Box constraints on optimization variables. + + + + ??? json-spec "`/solver/nonlinear/box_constraints/bounds/*`" + ``` + /solver/nonlinear/box_constraints/bounds/* + ``` + + + === "`/solver/nonlinear/box_constraints/bounds/*` (`list`)" +

Description

+ Box constraint values on optimization variables. + + + + + + ??? json-spec "`/solver/nonlinear/box_constraints/bounds/*/*` (`float`)" + ``` + /solver/nonlinear/box_constraints/bounds/*/* + ``` +

Description

+ Box constraint values on optimization variables. + + + + + + + === "`/solver/nonlinear/box_constraints/bounds/*` (`float`)" +

Description

+ Box constraint values on optimization variables. + + + + + + + + + + ??? json-spec "`/solver/nonlinear/box_constraints/max_change`" + ``` + /solver/nonlinear/box_constraints/max_change + ``` + + + === "`/solver/nonlinear/box_constraints/max_change` (`float`)" +

Description

+ Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint. + + **Default**: `-1` + + + + === "`/solver/nonlinear/box_constraints/max_change` (`list`)" +

Description

+ Maximum change of optimization variables in one iteration, only for solvers with box constraints. + + + + + + ??? json-spec "`/solver/nonlinear/box_constraints/max_change/*` (`float`)" + ``` + /solver/nonlinear/box_constraints/max_change/* + ``` +

Description

+ Maximum change of every optimization variable in one iteration, only for solvers with box constraints. + + + + + + + + + + + + + + + ??? json-spec "`/solver/nonlinear/advanced` (`object`)" + ``` + /solver/nonlinear/advanced + ``` +

Description

+ Nonlinear solver advanced options + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/nonlinear/advanced/f_delta` (`float`)" + ``` + /solver/nonlinear/advanced/f_delta + ``` +

Description

+ Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/nonlinear/advanced/f_delta_step_tol` (`int`)" + ``` + /solver/nonlinear/advanced/f_delta_step_tol + ``` +

Description

+ Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps. + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/nonlinear/advanced/derivative_along_delta_x_tol` (`float`)" + ``` + /solver/nonlinear/advanced/derivative_along_delta_x_tol + ``` +

Description

+ Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/nonlinear/advanced/apply_gradient_fd` (`string`)" + ``` + /solver/nonlinear/advanced/apply_gradient_fd + ``` +

Description

+ Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy. + + **Default**: `'None'` + + **Options:** `['None', 'DirectionalDerivative', 'FullFiniteDiff']` + + + + + + + + + ??? json-spec "`/solver/nonlinear/advanced/gradient_fd_eps` (`float`)" + ``` + /solver/nonlinear/advanced/gradient_fd_eps + ``` +

Description

+ Expensive Option: Eps for finite difference to verify gradient of energy. + + **Default**: `1e-07` + + + + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian` (`object`)" + ``` + /solver/augmented_lagrangian + ``` +

Description

+ Parameters for the AL for imposing Dirichlet BCs. If the bc are not imposable, we add $w\|u - bc\|^2$ to the energy ($u$ is the solution at the Dirichlet nodes and $bc$ are the Dirichlet values). After convergence, we try to impose bc again. The algorithm computes E + a/2*AL^2 - lambda AL, where E is the current energy (elastic, inertia, contact, etc.) and AL is the augmented Lagrangian energy. a starts at `initial_weight` and, in case DBC cannot be imposed, we update a as `a *= scaling` until `max_weight`. See IPC additional material + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/initial_weight` (`float`)" + ``` + /solver/augmented_lagrangian/initial_weight + ``` +

Description

+ Initial weight for AL + + **Default**: `1000000.0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/scaling` (`float`)" + ``` + /solver/augmented_lagrangian/scaling + ``` +

Description

+ Multiplication factor + + **Default**: `2.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/max_weight` (`float`)" + ``` + /solver/augmented_lagrangian/max_weight + ``` +

Description

+ Maximum weight + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/eta` (`float`)" + ``` + /solver/augmented_lagrangian/eta + ``` +

Description

+ Tolerance for increasing the weight or updating the lagrangian + + **Default**: `0.99` + + **Range:** `[0, 1]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear + ``` +

Description

+ Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section. + + **Default**: `None` +

Optional

+ + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver`" + ``` + /solver/augmented_lagrangian/nonlinear/solver + ``` + + + === "`/solver/augmented_lagrangian/nonlinear/solver` (`string`)" +

Description

+ Nonlinear solver type + + **Default**: `'Newton'` + + **Options:** `['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']` + + + + === "`/solver/augmented_lagrangian/nonlinear/solver` (`list`)" +

Description

+ List of solvers for ballback. Eg, [{'type':'Newton'}, {'type':'L-BFGS'}, {'type':'GradientDescent'}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*`" + ``` + /solver/augmented_lagrangian/nonlinear/solver/* + ``` + + + === "Newton" + + **Type**: Newton +

Description

+ Options for Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "ProjectedNewton" + + **Type**: ProjectedNewton +

Description

+ Options for projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "RegularizedNewton" + + **Type**: RegularizedNewton +

Description

+ Options for regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "RegularizedProjectedNewton" + + **Type**: RegularizedProjectedNewton +

Description

+ Options for regularized projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "DenseNewton" + + **Type**: DenseNewton +

Description

+ Options for Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "DenseProjectedNewton" + + **Type**: DenseProjectedNewton +

Description

+ Options for projected Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + === "DenseRegularizedNewton" + + **Type**: DenseRegularizedNewton +

Description

+ Options for regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "DenseRegularizedProjectedNewton" + + **Type**: DenseRegularizedProjectedNewton +

Description

+ Options for projected regularized Newton. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + === "GradientDescent" + + **Type**: GradientDescent +

Description

+ Options for Gradient Descent. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + + + + + === "StochasticGradientDescent" + + **Type**: StochasticGradientDescent +

Description

+ Options for Stochastic Gradient Descent. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for stochastic solvers. + + **Default**: `0.3` + + + + + + + === "L-BFGS" + + **Type**: L-BFGS +

Description

+ Options for L-BFGS. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/history_size` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + === "BFGS" + + **Type**: BFGS +

Description

+ Options for BFGS. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + + + + + === "ADAM" + + **Type**: ADAM +

Description

+ Options for ADAM. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/alpha` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/beta_1` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/beta_2` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/epsilon` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + === "StochasticADAM" + + **Type**: StochasticADAM +

Description

+ Options for ADAM. +

Required

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/type` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/type + ``` +

Description

+ Nonlinear solver type + + **Options:** `['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/alpha` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/beta_1` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/beta_2` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/epsilon` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for stochastic solvers. + + **Default**: `0.3` + + + + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/x_delta` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/x_delta + ``` +

Description

+ Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/grad_norm` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/grad_norm + ``` +

Description

+ Stopping criterion: Minimal gradient norm for the iterations to continue. + + **Default**: `1e-08` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/first_grad_norm_tol + ``` +

Description

+ Minimal gradient norm for the iterations to not start, assume we already are at a minimum. + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/max_iterations` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/max_iterations + ``` +

Description

+ Maximum number of iterations for a nonlinear solve. + + **Default**: `500` + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/iterations_per_strategy`" + ``` + /solver/augmented_lagrangian/nonlinear/iterations_per_strategy + ``` + + + === "`/solver/augmented_lagrangian/nonlinear/iterations_per_strategy` (`int`)" +

Description

+ Number of iterations for every substrategy before reset. + + **Default**: `5` + + + + === "`/solver/augmented_lagrangian/nonlinear/iterations_per_strategy` (`list`)" +

Description

+ Number of iterations for every substrategy before reset. + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/*` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/iterations_per_strategy/* + ``` +

Description

+ Number of iterations for every substrategy before reset. + + **Default**: `5` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search + ``` +

Description

+ Settings for line-search in the nonlinear solver + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/method` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/method + ``` +

Description

+ Line-search type + + **Default**: `'RobustArmijo'` + + **Options:** `['Armijo', 'RobustArmijo', 'Backtracking', 'None']` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol + ``` +

Description

+ When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy + + **Default**: `1e-06` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/min_step_size` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/min_step_size + ``` +

Description

+ Mimimum step size + + **Default**: `1e-10` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter + ``` +

Description

+ Number of iterations + + **Default**: `30` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final + ``` +

Description

+ Mimimum step size for last descent strategy + + **Default**: `1e-20` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final + ``` +

Description

+ Number of iterations for last descent strategy + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size + ``` +

Description

+ Initial step size + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/step_ratio` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/step_ratio + ``` +

Description

+ Ratio used to decrease the step + + **Default**: `0.5` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/Armijo` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/Armijo + ``` +

Description

+ Options for Armijo. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/Armijo/c + ``` +

Description

+ Armijo c parameter. + + **Default**: `0.0001` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo + ``` +

Description

+ Options for RobustArmijo. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance + ``` +

Description

+ Relative tolerance on E to switch to approximate. + + **Default**: `0.1` + + + + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations` (`bool`)" + ``` + /solver/augmented_lagrangian/nonlinear/allow_out_of_iterations + ``` +

Description

+ If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations. + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/L-BFGS` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/L-BFGS + ``` +

Description

+ Options for LBFGS. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/L-BFGS/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/L-BFGS-B` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/L-BFGS-B + ``` +

Description

+ Options for the boxed L-BFGS. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size + ``` +

Description

+ The number of corrections to approximate the inverse Hessian matrix. + + **Default**: `6` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton + ``` +

Description

+ Options for Newton. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance + ``` +

Description

+ Tolerance of the linear system residual. If residual is above, the direction is rejected. + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min + ``` +

Description

+ Minimum regulariztion weight. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max + ``` +

Description

+ Maximum regulariztion weight. + + **Default**: `100000000.0` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc + ``` +

Description

+ Regulariztion weight increment. + + **Default**: `10` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection` (`bool`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection + ``` +

Description

+ Force the Hessian to be PSD when using second order solvers (i.e., Newton's method). + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection` (`bool`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection + ``` +

Description

+ Use PSD as fallback using second order solvers (i.e., Newton's method). + + **Default**: `True` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized` (`bool`)" + ``` + /solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized + ``` +

Description

+ Use PSD in regularized Newton. + + **Default**: `True` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/ADAM` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/ADAM + ``` +

Description

+ Options for ADAM. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/ADAM/alpha` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/ADAM/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/ADAM/beta_1` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/ADAM/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/ADAM/beta_2` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/ADAM/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/ADAM/epsilon` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/ADAM/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM + ``` +

Description

+ Options for ADAM. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha + ``` +

Description

+ Parameter alpha for ADAM. + + **Default**: `0.001` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1 + ``` +

Description

+ Parameter beta_1 for ADAM. + + **Default**: `0.9` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2 + ``` +

Description

+ Parameter beta_2 for ADAM. + + **Default**: `0.999` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon + ``` +

Description

+ Parameter epsilon for ADAM. + + **Default**: `1e-08` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for ADAM. + + **Default**: `0.3` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticGradientDescent + ``` +

Description

+ Options for Stochastic Gradient Descent. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability + ``` +

Description

+ Probability of erasing a component on the gradient for StochasticGradientDescent. + + **Default**: `0.3` + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints + ``` +

Description

+ FIXME: Missing documentation in the specification. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints/bounds` (`list`)" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints/bounds + ``` +

Description

+ Box constraints on optimization variables. + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*`" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* + ``` + + + === "`/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*` (`list`)" +

Description

+ Box constraint values on optimization variables. + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/*` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/* + ``` +

Description

+ Box constraint values on optimization variables. + + + + + + + === "`/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*` (`float`)" +

Description

+ Box constraint values on optimization variables. + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints/max_change`" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints/max_change + ``` + + + === "`/solver/augmented_lagrangian/nonlinear/box_constraints/max_change` (`float`)" +

Description

+ Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint. + + **Default**: `-1` + + + + === "`/solver/augmented_lagrangian/nonlinear/box_constraints/max_change` (`list`)" +

Description

+ Maximum change of optimization variables in one iteration, only for solvers with box constraints. + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/*` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/box_constraints/max_change/* + ``` +

Description

+ Maximum change of every optimization variable in one iteration, only for solvers with box constraints. + + + + + + + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced` (`object`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced + ``` +

Description

+ Nonlinear solver advanced options + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced/f_delta` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced/f_delta + ``` +

Description

+ Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol` (`int`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol + ``` +

Description

+ Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps. + + **Default**: `100` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol + ``` +

Description

+ Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance. + + **Default**: `0` + + **Range:** `[0, inf]` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd` (`string`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd + ``` +

Description

+ Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy. + + **Default**: `'None'` + + **Options:** `['None', 'DirectionalDerivative', 'FullFiniteDiff']` + + + + + + + + + ??? json-spec "`/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps` (`float`)" + ``` + /solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps + ``` +

Description

+ Expensive Option: Eps for finite difference to verify gradient of energy. + + **Default**: `1e-07` + + + + + + + + + + + + + + + + + + ??? json-spec "`/solver/contact` (`object`)" + ``` + /solver/contact + ``` +

Description

+ Settings for contact handling in the solver. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/contact/CCD` (`object`)" + ``` + /solver/contact/CCD + ``` +

Description

+ CCD options + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/contact/CCD/broad_phase` (`string`)" + ``` + /solver/contact/CCD/broad_phase + ``` +

Description

+ Broad phase collision-detection algorithm to use + + **Default**: `'hash_grid'` + + **Options:** `['hash_grid', 'HG', 'brute_force', 'BF', 'spatial_hash', 'SH', 'bvh', 'BVH', 'sweep_and_prune', 'SAP', 'sweep_and_tiniest_queue', 'STQ']` + + + + + + + + + ??? json-spec "`/solver/contact/CCD/tolerance` (`float`)" + ``` + /solver/contact/CCD/tolerance + ``` +

Description

+ CCD tolerance + + **Default**: `1e-06` + + + + + + + + + ??? json-spec "`/solver/contact/CCD/max_iterations` (`int`)" + ``` + /solver/contact/CCD/max_iterations + ``` +

Description

+ Maximum number of iterations for continuous collision detection + + **Default**: `1000000` + + + + + + + + + + + + ??? json-spec "`/solver/contact/friction_iterations` (`int`)" + ``` + /solver/contact/friction_iterations + ``` +

Description

+ Maximum number of update iterations for lagged friction formulation (see IPC paper). + + **Default**: `1` + + + + + + + + + ??? json-spec "`/solver/contact/friction_convergence_tol` (`float`)" + ``` + /solver/contact/friction_convergence_tol + ``` +

Description

+ Tolerence for friction convergence + + **Default**: `0.01` + + + + + + + ??? json-spec "`/solver/contact/barrier_stiffness`" + ``` + /solver/contact/barrier_stiffness + ``` + + + === "`/solver/contact/barrier_stiffness` (`string`)" +

Description

+ How coefficient of clamped log-barrier function for contact is updated + + **Default**: `'adaptive'` + + **Options:** `['adaptive']` + + + + === "`/solver/contact/barrier_stiffness` (`float`)" +

Description

+ The coefficient of clamped log-barrier function value when not adaptive + + + + + + + + + + + + ??? json-spec "`/solver/rayleigh_damping` (`list`)" + ``` + /solver/rayleigh_damping + ``` +

Description

+ Apply Rayleigh damping. + + + + ??? json-spec "`/solver/rayleigh_damping/*`" + ``` + /solver/rayleigh_damping/* + ``` + + + === "`/solver/rayleigh_damping/*` (`object`)" +

Description

+ Apply Rayleigh damping to the given Form with a stiffness ratio. +

Required

+ + + + + + ??? json-spec "`/solver/rayleigh_damping/*/form` (`string`)" + ``` + /solver/rayleigh_damping/*/form + ``` +

Description

+ Form to damp. + + **Options:** `['elasticity', 'contact', 'friction']` + + + + + + + + + ??? json-spec "`/solver/rayleigh_damping/*/stiffness_ratio` (`float`)" + ``` + /solver/rayleigh_damping/*/stiffness_ratio + ``` +

Description

+ Ratio of to damp (stiffness = 0.75 * stiffness_ratio * Δt³). + + **Range:** `[0, inf]` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/rayleigh_damping/*/lagging_iterations` (`int`)" + ``` + /solver/rayleigh_damping/*/lagging_iterations + ``` +

Description

+ Maximum number of update iterations for lagging. + + **Default**: `1` + + + + + + + === "`/solver/rayleigh_damping/*` (`object`)" +

Description

+ Apply Rayleigh damping to the given Form with a stiffness. +

Required

+ + + + + + ??? json-spec "`/solver/rayleigh_damping/*/form` (`string`)" + ``` + /solver/rayleigh_damping/*/form + ``` +

Description

+ Form to damp. + + **Options:** `['elasticity', 'contact', 'friction']` + + + + + + + + + ??? json-spec "`/solver/rayleigh_damping/*/stiffness` (`float`)" + ``` + /solver/rayleigh_damping/*/stiffness + ``` +

Description

+ Ratio of to damp. + + **Range:** `[0, inf]` + + + +

Optional

+ + + + + + ??? json-spec "`/solver/rayleigh_damping/*/lagging_iterations` (`int`)" + ``` + /solver/rayleigh_damping/*/lagging_iterations + ``` +

Description

+ Maximum number of update iterations for lagging. + + **Default**: `1` + + + + + + + + + + + + + + + ??? json-spec "`/solver/advanced` (`object`)" + ``` + /solver/advanced + ``` +

Description

+ Advanced settings for the solver + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/solver/advanced/cache_size` (`int`)" + ``` + /solver/advanced/cache_size + ``` +

Description

+ Maximum number of elements when the assembly values are cached. + + **Default**: `900000` + + + + + + + + + ??? json-spec "`/solver/advanced/lump_mass_matrix` (`bool`)" + ``` + /solver/advanced/lump_mass_matrix + ``` +

Description

+ If true, use diagonal mass matrix with entries on the diagonal equal to the sum of entries in each row of the full mass matrix.} + + **Default**: `False` + + + + + + + + + ??? json-spec "`/solver/advanced/lagged_regularization_weight` (`float`)" + ``` + /solver/advanced/lagged_regularization_weight + ``` +

Description

+ Weight used to regularize singular static problems. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/solver/advanced/lagged_regularization_iterations` (`int`)" + ``` + /solver/advanced/lagged_regularization_iterations + ``` +

Description

+ Number of regularize singular static problems. + + **Default**: `1` + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions` (`object`)" + ``` + /boundary_conditions + ``` +

Description

+ The settings for boundary conditions. + + **Default**: `None` +

Optional

+ + + + ??? json-spec "`/boundary_conditions/rhs`" + ``` + /boundary_conditions/rhs + ``` + + + === "`/boundary_conditions/rhs` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/rhs` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/rhs` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/rhs/value`" + ``` + /boundary_conditions/rhs/value + ``` + + + === "`/boundary_conditions/rhs/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/rhs/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/rhs/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/rhs/unit` (`string`)" + ``` + /boundary_conditions/rhs/unit + ``` +

Description

+ The unit of the Value + + + + + + + === "`/boundary_conditions/rhs` (`list`)" +

Description

+ Right-hand side of the system being solved for vector-valued PDEs. + + + + ??? json-spec "`/boundary_conditions/rhs/*`" + ``` + /boundary_conditions/rhs/* + ``` + + + === "`/boundary_conditions/rhs/*` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/boundary_conditions/rhs/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/rhs/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/rhs/*/value`" + ``` + /boundary_conditions/rhs/*/value + ``` + + + === "`/boundary_conditions/rhs/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/rhs/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/rhs/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/rhs/*/unit` (`string`)" + ``` + /boundary_conditions/rhs/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary + ``` +

Description

+ The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection. + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*`" + ``` + /boundary_conditions/dirichlet_boundary/* + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*` (`object`)" +

Description

+ Dirichlet boundary condition. + + **Default**: `None` +

Required

+ + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/id`" + ``` + /boundary_conditions/dirichlet_boundary/*/id + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*/id` (`int`)" +

Description

+ ID of boundary condition from surface selection. + + **Range:** `[0, 2147483646]` + + + + === "`/boundary_conditions/dirichlet_boundary/*/id` (`string`)" +

Description

+ select all ids. + + **Options:** `['all']` + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/value + ``` +

Description

+ Values of boundary condition, length 1 for scalar-valued pde, 2/3 for vector-valued PDEs depending on the dimension. + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*`" + ``` + /boundary_conditions/dirichlet_boundary/*/value/* + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*/value`" + ``` + /boundary_conditions/dirichlet_boundary/*/value/*/value + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*/unit` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*` (`list`)" +

Description

+ Dirichlet boundary condition specified per timestep. + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*/*`" + ``` + /boundary_conditions/dirichlet_boundary/*/value/*/* + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*/*/value`" + ``` + /boundary_conditions/dirichlet_boundary/*/value/*/*/value + ``` + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/dirichlet_boundary/*/value/*/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/value/*/*/unit` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/value/*/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/time_reference` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/time_reference + ``` +

Description

+ List of times when the Dirichlet boundary condition is specified + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/time_reference/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/time_reference/* + ``` +

Description

+ Values of Dirichlet boundary condition for timestep + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation + ``` +

Description

+ interpolation of boundary condition + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*`" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/* + ``` + + + === "none" + + **Type**: none +

Description

+ interpolation of boundary condition + + **Default**: `{'type': 'none'}` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear" + + **Type**: linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear_ramp" + + **Type**: linear_ramp +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/to` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/to + ``` +

Description

+ interpolation ending time + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/from` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/from + ``` +

Description

+ interpolation starting time + + **Default**: `0` + + + + + + + === "piecewise_constant" + + **Type**: piecewise_constant +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_linear" + + **Type**: piecewise_linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_cubic" + + **Type**: piecewise_cubic +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/dirichlet_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/dimension` (`list`)" + ``` + /boundary_conditions/dirichlet_boundary/*/dimension + ``` +

Description

+ List of 2 (2D) or 3 (3D) boolean values indicating if the Dirichlet boundary condition is applied for a particular dimension. + + + + + + ??? json-spec "`/boundary_conditions/dirichlet_boundary/*/dimension/*` (`bool`)" + ``` + /boundary_conditions/dirichlet_boundary/*/dimension/* + ``` +

Description

+ value + + **Default**: `True` + + + + + + + + + + === "`/boundary_conditions/dirichlet_boundary/*` (`string`)" +

Description

+ Dirichlet boundary condition loaded from a file, , 1 for scalar, 2/3 for tensor depending on dimension. + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary` (`list`)" + ``` + /boundary_conditions/neumann_boundary + ``` +

Description

+ The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection. + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*` (`object`)" + ``` + /boundary_conditions/neumann_boundary/* + ``` +

Description

+ Neumann boundary condition + + **Default**: `None` +

Required

+ + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/id`" + ``` + /boundary_conditions/neumann_boundary/*/id + ``` + + + === "`/boundary_conditions/neumann_boundary/*/id` (`int`)" +

Description

+ ID of boundary condition from surface selection. + + **Range:** `[0, 2147483646]` + + + + === "`/boundary_conditions/neumann_boundary/*/id` (`string`)" +

Description

+ select all ids. + + **Options:** `['all']` + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/value` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/value + ``` +

Description

+ Values of boundary condition, length 1 for scalar-valued pde, 2/3 for vector-valued PDEs depending on the dimension. + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/value/*`" + ``` + /boundary_conditions/neumann_boundary/*/value/* + ``` + + + === "`/boundary_conditions/neumann_boundary/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/neumann_boundary/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/neumann_boundary/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/value/*/value`" + ``` + /boundary_conditions/neumann_boundary/*/value/*/value + ``` + + + === "`/boundary_conditions/neumann_boundary/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/neumann_boundary/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/neumann_boundary/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/value/*/unit` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation + ``` +

Description

+ interpolation of boundary condition + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*`" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/* + ``` + + + === "none" + + **Type**: none +

Description

+ interpolation of boundary condition + + **Default**: `{'type': 'none'}` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear" + + **Type**: linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear_ramp" + + **Type**: linear_ramp +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/to` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/to + ``` +

Description

+ interpolation ending time + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/from` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/from + ``` +

Description

+ interpolation starting time + + **Default**: `0` + + + + + + + === "piecewise_constant" + + **Type**: piecewise_constant +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_linear" + + **Type**: piecewise_linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_cubic" + + **Type**: piecewise_cubic +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/neumann_boundary/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/neumann_boundary/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary + ``` +

Description

+ Neumann boundary condition for normal times value for vector-valued PDEs. + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*` (`object`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/* + ``` +

Description

+ pressure BC entry + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/id` (`int`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/id + ``` +

Description

+ ID for the pressure Neumann boundary condition + + **Range:** `[0, 2147483646]` + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/value`" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/value + ``` + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/value/value`" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/value/value + ``` + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/normal_aligned_neumann_boundary/*/value/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/value/unit + ``` +

Description

+ The unit of the Value + + + + + + +

Optional

+ + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation`" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation + ``` + + + === "none" + + **Type**: none +

Description

+ interpolation of boundary condition + + **Default**: `{'type': 'none'}` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear" + + **Type**: linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear_ramp" + + **Type**: linear_ramp +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to + ``` +

Description

+ interpolation ending time + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from + ``` +

Description

+ interpolation starting time + + **Default**: `0` + + + + + + + === "piecewise_constant" + + **Type**: piecewise_constant +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_linear" + + **Type**: piecewise_linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_cubic" + + **Type**: piecewise_cubic +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values` (`list`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*` (`float`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend` (`string`)" + ``` + /boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary` (`list`)" + ``` + /boundary_conditions/pressure_boundary + ``` +

Description

+ Neumann boundary condition for normal times value for vector-valued PDEs. + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*` (`object`)" + ``` + /boundary_conditions/pressure_boundary/* + ``` +

Description

+ pressure BC entry + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/id` (`int`)" + ``` + /boundary_conditions/pressure_boundary/*/id + ``` +

Description

+ ID for the pressure Neumann boundary condition + + **Range:** `[0, 2147483646]` + + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value`" + ``` + /boundary_conditions/pressure_boundary/*/value + ``` + + + === "`/boundary_conditions/pressure_boundary/*/value` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/pressure_boundary/*/value` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/pressure_boundary/*/value` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value/value`" + ``` + /boundary_conditions/pressure_boundary/*/value/value + ``` + + + === "`/boundary_conditions/pressure_boundary/*/value/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/pressure_boundary/*/value/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/pressure_boundary/*/value/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value/unit` (`string`)" + ``` + /boundary_conditions/pressure_boundary/*/value/unit + ``` +

Description

+ The unit of the Value + + + + + + + === "`/boundary_conditions/pressure_boundary/*/value` (`list`)" +

Description

+ Values of pressure boundary condition specified per timestep + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value/*`" + ``` + /boundary_conditions/pressure_boundary/*/value/* + ``` + + + === "`/boundary_conditions/pressure_boundary/*/value/*` (`float`)" +

Description

+ Value as a constant float + + **Default**: `0` + + + + === "`/boundary_conditions/pressure_boundary/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/pressure_boundary/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value/*/value`" + ``` + /boundary_conditions/pressure_boundary/*/value/*/value + ``` + + + === "`/boundary_conditions/pressure_boundary/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/pressure_boundary/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/pressure_boundary/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/value/*/unit` (`string`)" + ``` + /boundary_conditions/pressure_boundary/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/time_reference` (`list`)" + ``` + /boundary_conditions/pressure_boundary/*/time_reference + ``` +

Description

+ List of times when the pressure boundary condition is specified + + + + + + ??? json-spec "`/boundary_conditions/pressure_boundary/*/time_reference/*` (`float`)" + ``` + /boundary_conditions/pressure_boundary/*/time_reference/* + ``` +

Description

+ Values of pressure boundary condition for timestep + + + + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/pressure_cavity` (`list`)" + ``` + /boundary_conditions/pressure_cavity + ``` +

Description

+ Neumann boundary condition for normal times value for vector-valued PDEs. + + + + + + ??? json-spec "`/boundary_conditions/pressure_cavity/*` (`object`)" + ``` + /boundary_conditions/pressure_cavity/* + ``` +

Description

+ pressure BC entry + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/pressure_cavity/*/id` (`int`)" + ``` + /boundary_conditions/pressure_cavity/*/id + ``` +

Description

+ ID for the pressure Neumann boundary condition + + **Range:** `[0, 2147483646]` + + + + + + + ??? json-spec "`/boundary_conditions/pressure_cavity/*/value`" + ``` + /boundary_conditions/pressure_cavity/*/value + ``` + + + === "`/boundary_conditions/pressure_cavity/*/value` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/pressure_cavity/*/value` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/pressure_cavity/*/value` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/pressure_cavity/*/value/value`" + ``` + /boundary_conditions/pressure_cavity/*/value/value + ``` + + + === "`/boundary_conditions/pressure_cavity/*/value/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/pressure_cavity/*/value/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/pressure_cavity/*/value/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/pressure_cavity/*/value/unit` (`string`)" + ``` + /boundary_conditions/pressure_cavity/*/value/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements` (`list`)" + ``` + /boundary_conditions/obstacle_displacements + ``` +

Description

+ The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection. + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*` (`object`)" + ``` + /boundary_conditions/obstacle_displacements/* + ``` +

Description

+ Obstacle displacements + + **Default**: `None` +

Required

+ + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/id`" + ``` + /boundary_conditions/obstacle_displacements/*/id + ``` + + + === "`/boundary_conditions/obstacle_displacements/*/id` (`int`)" +

Description

+ ID of boundary condition from surface selection. + + **Range:** `[0, 2147483646]` + + + + === "`/boundary_conditions/obstacle_displacements/*/id` (`string`)" +

Description

+ select all ids. + + **Options:** `['all']` + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/value` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/value + ``` +

Description

+ Values of boundary condition, length 1 for scalar-valued pde, 2/3 for vector-valued PDEs depending on the dimension. + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/value/*`" + ``` + /boundary_conditions/obstacle_displacements/*/value/* + ``` + + + === "`/boundary_conditions/obstacle_displacements/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/boundary_conditions/obstacle_displacements/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/boundary_conditions/obstacle_displacements/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/value/*/value`" + ``` + /boundary_conditions/obstacle_displacements/*/value/*/value + ``` + + + === "`/boundary_conditions/obstacle_displacements/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/boundary_conditions/obstacle_displacements/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/boundary_conditions/obstacle_displacements/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/value/*/unit` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation + ``` +

Description

+ interpolation of boundary condition + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*`" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/* + ``` + + + === "none" + + **Type**: none +

Description

+ interpolation of boundary condition + + **Default**: `{'type': 'none'}` +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear" + + **Type**: linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + === "linear_ramp" + + **Type**: linear_ramp +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/to` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/to + ``` +

Description

+ interpolation ending time + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/from` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/from + ``` +

Description

+ interpolation starting time + + **Default**: `0` + + + + + + + === "piecewise_constant" + + **Type**: piecewise_constant +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_linear" + + **Type**: piecewise_linear +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + === "piecewise_cubic" + + **Type**: piecewise_cubic +

Description

+ interpolation of boundary condition +

Required

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/type` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/type + ``` +

Description

+ type of interpolation of boundary condition + + **Options:** `['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']` + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points + ``` +

Description

+ interpolation time points + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/points/* + ``` +

Description

+ interpolation time point + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values` (`list`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values + ``` +

Description

+ interpolation values + + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*` (`float`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/values/* + ``` +

Description

+ interpolation value + + + + + + +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/obstacle_displacements/*/interpolation/*/extend` (`string`)" + ``` + /boundary_conditions/obstacle_displacements/*/interpolation/*/extend + ``` +

Description

+ how to extend the piecewise interpolation + + **Default**: `'constant'` + + **Options:** `['constant', 'extrapolate', 'repeat', 'repeat_offset']` + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary` (`object`)" + ``` + /boundary_conditions/periodic_boundary + ``` +

Description

+ Options for periodic boundary conditions. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/enabled` (`bool`)" + ``` + /boundary_conditions/periodic_boundary/enabled + ``` +

Description

+ + + **Default**: `False` + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/tolerance` (`float`)" + ``` + /boundary_conditions/periodic_boundary/tolerance + ``` +

Description

+ Relative tolerance of deciding periodic correspondence + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/correspondence` (`list`)" + ``` + /boundary_conditions/periodic_boundary/correspondence + ``` +

Description

+ Periodic directions for periodic boundary conditions. If not specified, default to axis-aligned directions. + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/correspondence/*` (`list`)" + ``` + /boundary_conditions/periodic_boundary/correspondence/* + ``` +

Description

+ One periodic direction. + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/correspondence/*/*` (`float`)" + ``` + /boundary_conditions/periodic_boundary/correspondence/*/* + ``` +

Description

+ One entry of a periodic direction. + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/linear_displacement_offset` (`list`)" + ``` + /boundary_conditions/periodic_boundary/linear_displacement_offset + ``` +

Description

+ + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/linear_displacement_offset/*` (`list`)" + ``` + /boundary_conditions/periodic_boundary/linear_displacement_offset/* + ``` +

Description

+ + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*`" + ``` + /boundary_conditions/periodic_boundary/linear_displacement_offset/*/* + ``` + + + === "`/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*` (`float`)" +

Description

+ + + + + === "`/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*` (`string`)" +

Description

+ + + + + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/fixed_macro_strain` (`list`)" + ``` + /boundary_conditions/periodic_boundary/fixed_macro_strain + ``` +

Description

+ + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/fixed_macro_strain/*` (`int`)" + ``` + /boundary_conditions/periodic_boundary/fixed_macro_strain/* + ``` +

Description

+ + + + + + + + + + + + + ??? json-spec "`/boundary_conditions/periodic_boundary/force_zero_mean` (`bool`)" + ``` + /boundary_conditions/periodic_boundary/force_zero_mean + ``` +

Description

+ The periodic solution is not unique, set to true to find the solution with zero mean. + + **Default**: `False` + + + + + + + + + + + + + + + ??? json-spec "`/initial_conditions` (`object`)" + ``` + /initial_conditions + ``` +

Description

+ Initial conditions for the time-dependent problem, imposed on the main variable, its derivative or second derivative + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/initial_conditions/solution` (`list`)" + ``` + /initial_conditions/solution + ``` +

Description

+ initial solution + + + + + + ??? json-spec "`/initial_conditions/solution/*` (`object`)" + ``` + /initial_conditions/solution/* + ``` +

Description

+ A list of (ID, value) pairs defining the initial conditions for the main variable values. Ids are set by selection, and values can be floats or formulas. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/initial_conditions/solution/*/id` (`int`)" + ``` + /initial_conditions/solution/*/id + ``` +

Description

+ ID from volume selections + + + + + + + + + ??? json-spec "`/initial_conditions/solution/*/value` (`list`)" + ``` + /initial_conditions/solution/*/value + ``` +

Description

+ value of the solution + + + + ??? json-spec "`/initial_conditions/solution/*/value/*`" + ``` + /initial_conditions/solution/*/value/* + ``` + + + === "`/initial_conditions/solution/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/initial_conditions/solution/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/initial_conditions/solution/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/initial_conditions/solution/*/value/*/value`" + ``` + /initial_conditions/solution/*/value/*/value + ``` + + + === "`/initial_conditions/solution/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/initial_conditions/solution/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/initial_conditions/solution/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/initial_conditions/solution/*/value/*/unit` (`string`)" + ``` + /initial_conditions/solution/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/initial_conditions/velocity` (`list`)" + ``` + /initial_conditions/velocity + ``` +

Description

+ initial velocity + + + + + + ??? json-spec "`/initial_conditions/velocity/*` (`object`)" + ``` + /initial_conditions/velocity/* + ``` +

Description

+ A list of (ID, value) pairs defining the initial conditions for the first derivative of the main variable values. Ids are set by selection, and values can be floats or formulas. + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/initial_conditions/velocity/*/id` (`int`)" + ``` + /initial_conditions/velocity/*/id + ``` +

Description

+ ID from volume selections + + + + + + + + + ??? json-spec "`/initial_conditions/velocity/*/value` (`list`)" + ``` + /initial_conditions/velocity/*/value + ``` +

Description

+ value od the initial velocity + + + + ??? json-spec "`/initial_conditions/velocity/*/value/*`" + ``` + /initial_conditions/velocity/*/value/* + ``` + + + === "`/initial_conditions/velocity/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/initial_conditions/velocity/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/initial_conditions/velocity/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/initial_conditions/velocity/*/value/*/value`" + ``` + /initial_conditions/velocity/*/value/*/value + ``` + + + === "`/initial_conditions/velocity/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/initial_conditions/velocity/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/initial_conditions/velocity/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/initial_conditions/velocity/*/value/*/unit` (`string`)" + ``` + /initial_conditions/velocity/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/initial_conditions/acceleration` (`list`)" + ``` + /initial_conditions/acceleration + ``` +

Description

+ initial acceleration + + + + + + ??? json-spec "`/initial_conditions/acceleration/*` (`object`)" + ``` + /initial_conditions/acceleration/* + ``` +

Description

+ entries + + **Default**: `None` +

Required

+ + + + + + ??? json-spec "`/initial_conditions/acceleration/*/id` (`int`)" + ``` + /initial_conditions/acceleration/*/id + ``` +

Description

+ ID from volume selections + + + + + + + + + ??? json-spec "`/initial_conditions/acceleration/*/value` (`list`)" + ``` + /initial_conditions/acceleration/*/value + ``` +

Description

+ value + + + + ??? json-spec "`/initial_conditions/acceleration/*/value/*`" + ``` + /initial_conditions/acceleration/*/value/* + ``` + + + === "`/initial_conditions/acceleration/*/value/*` (`float`)" +

Description

+ Value as a constant float + + + + === "`/initial_conditions/acceleration/*/value/*` (`string`)" +

Description

+ Value as an expression of $x,y,z,t$ or a file + + + + === "`/initial_conditions/acceleration/*/value/*` (`object`)" +

Description

+ Value with unit +

Required

+ + + + ??? json-spec "`/initial_conditions/acceleration/*/value/*/value`" + ``` + /initial_conditions/acceleration/*/value/*/value + ``` + + + === "`/initial_conditions/acceleration/*/value/*/value` (`float`)" +

Description

+ The value of the constant + + + + === "`/initial_conditions/acceleration/*/value/*/value` (`string`)" +

Description

+ The value as an expression + + + + === "`/initial_conditions/acceleration/*/value/*/value` (`file`)" +

Description

+ The value as a file + + + + + + + + + ??? json-spec "`/initial_conditions/acceleration/*/value/*/unit` (`string`)" + ``` + /initial_conditions/acceleration/*/value/*/unit + ``` +

Description

+ The unit of the Value + + + + + + + + + + + + + + + + + + + + + + + + ??? json-spec "`/output` (`object`)" + ``` + /output + ``` +

Description

+ output settings + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/directory` (`string`)" + ``` + /output/directory + ``` +

Description

+ Directory for output files. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/log` (`object`)" + ``` + /output/log + ``` +

Description

+ Setting for the output log. + + **Default**: `None` +

Optional

+ + + + ??? json-spec "`/output/log/level`" + ``` + /output/log/level + ``` + + + === "`/output/log/level` (`int`)" +

Description

+ Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off. + + **Range:** `[0, 6]` + + + + === "`/output/log/level` (`string`)" +

Description

+ Level of logging. + + **Default**: `'debug'` + + **Options:** `['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']` + + + + + + + ??? json-spec "`/output/log/file_level`" + ``` + /output/log/file_level + ``` + + + === "`/output/log/file_level` (`int`)" +

Description

+ Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off. + + **Range:** `[0, 6]` + + + + === "`/output/log/file_level` (`string`)" +

Description

+ Level of logging. + + **Default**: `'trace'` + + **Options:** `['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']` + + + + + + + + + ??? json-spec "`/output/log/path` (`string`)" + ``` + /output/log/path + ``` +

Description

+ File where to save the log; empty string is output to terminal. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/log/quiet` (`bool`)" + ``` + /output/log/quiet + ``` +

Description

+ Disable cout for logging. + + **Default**: `False` + + + + + + + + + + + + ??? json-spec "`/output/json` (`string`)" + ``` + /output/json + ``` +

Description

+ File name for JSON output statistics on time/error/etc. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/restart_json` (`string`)" + ``` + /output/restart_json + ``` +

Description

+ File name for JSON output to restart the simulation. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/paraview` (`object`)" + ``` + /output/paraview + ``` +

Description

+ Output in paraview format + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/paraview/file_name` (`string`)" + ``` + /output/paraview/file_name + ``` +

Description

+ Paraview output file name + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/paraview/vismesh_rel_area` (`float`)" + ``` + /output/paraview/vismesh_rel_area + ``` +

Description

+ relative area for the upsampled visualisation mesh + + **Default**: `1e-05` + + + + + + + + + ??? json-spec "`/output/paraview/skip_frame` (`int`)" + ``` + /output/paraview/skip_frame + ``` +

Description

+ export every skip_frame-th frames for time dependent simulations + + **Default**: `1` + + + + + + + + + ??? json-spec "`/output/paraview/high_order_mesh` (`bool`)" + ``` + /output/paraview/high_order_mesh + ``` +

Description

+ Enables/disables high-order output for paraview. Supported only for isoparametric or linear meshes with high-order solutions. + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/volume` (`bool`)" + ``` + /output/paraview/volume + ``` +

Description

+ Export volumetric mesh + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/surface` (`bool`)" + ``` + /output/paraview/surface + ``` +

Description

+ Export surface mesh (in 2d polygon) + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/wireframe` (`bool`)" + ``` + /output/paraview/wireframe + ``` +

Description

+ Export the wireframe of the mesh + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/points` (`bool`)" + ``` + /output/paraview/points + ``` +

Description

+ Export the Dirichlet points + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options` (`object`)" + ``` + /output/paraview/options + ``` +

Description

+ Optional fields in the output + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/paraview/options/use_hdf5` (`bool`)" + ``` + /output/paraview/options/use_hdf5 + ``` +

Description

+ If true, export the data as hdf5, compatible with paraview >5.11 + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/material` (`bool`)" + ``` + /output/paraview/options/material + ``` +

Description

+ If true, write out material values sampled on the vertices of the mesh + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/body_ids` (`bool`)" + ``` + /output/paraview/options/body_ids + ``` +

Description

+ Export volumes ids + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/contact_forces` (`bool`)" + ``` + /output/paraview/options/contact_forces + ``` +

Description

+ If true, write out contact forces for surface + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/friction_forces` (`bool`)" + ``` + /output/paraview/options/friction_forces + ``` +

Description

+ If true, write out friction forces for surface + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/velocity` (`bool`)" + ``` + /output/paraview/options/velocity + ``` +

Description

+ If true, write out velocities + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/acceleration` (`bool`)" + ``` + /output/paraview/options/acceleration + ``` +

Description

+ If true, write out accelerations + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/paraview/options/scalar_values` (`bool`)" + ``` + /output/paraview/options/scalar_values + ``` +

Description

+ If true, write out scalar values + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/options/tensor_values` (`bool`)" + ``` + /output/paraview/options/tensor_values + ``` +

Description

+ If true, write out tensor values + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/options/discretization_order` (`bool`)" + ``` + /output/paraview/options/discretization_order + ``` +

Description

+ If true, write out discretization order + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/options/nodes` (`bool`)" + ``` + /output/paraview/options/nodes + ``` +

Description

+ If true, write out node order + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/paraview/options/forces` (`bool`)" + ``` + /output/paraview/options/forces + ``` +

Description

+ If true, write out all variational forces on the FE mesh + + **Default**: `False` + + + + + + + + + + + + + + + ??? json-spec "`/output/data` (`object`)" + ``` + /output/data + ``` +

Description

+ File names to write output data to. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/data/solution` (`string`)" + ``` + /output/data/solution + ``` +

Description

+ Main variable solution. Unrolled [xyz, xyz, ...] using PolyFEM ordering. If reorder_nodes exports the solution with the same order the vertices of the input mesh as a #n x d file + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/full_mat` (`string`)" + ``` + /output/data/full_mat + ``` +

Description

+ System matrix without boundary conditions. Doesn't work for nonlinear problems + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/stiffness_mat` (`string`)" + ``` + /output/data/stiffness_mat + ``` +

Description

+ System matrix with boundary conditions. Doesn't work for nonlinear problems + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/stress_mat` (`string`)" + ``` + /output/data/stress_mat + ``` +

Description

+ Exports stress + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/state` (`string`)" + ``` + /output/data/state + ``` +

Description

+ Writes the complete state in PolyFEM hdf5 format, used to restart the sim + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/rest_mesh` (`string`)" + ``` + /output/data/rest_mesh + ``` +

Description

+ Writes the rest mesh in MSH format, used to restart the sim + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/mises` (`string`)" + ``` + /output/data/mises + ``` +

Description

+ File name to write per-node Von Mises stress values to. + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/nodes` (`string`)" + ``` + /output/data/nodes + ``` +

Description

+ Writes the FEM nodes + + **Default**: `''` + + + + + + + + + ??? json-spec "`/output/data/advanced` (`object`)" + ``` + /output/data/advanced + ``` +

Description

+ advanced options + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/data/advanced/reorder_nodes` (`bool`)" + ``` + /output/data/advanced/reorder_nodes + ``` +

Description

+ Reorder nodes accodring to input + + **Default**: `False` + + + + + + + + + + + + + + + ??? json-spec "`/output/advanced` (`object`)" + ``` + /output/advanced + ``` +

Description

+ Additional output options + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/advanced/timestep_prefix` (`string`)" + ``` + /output/advanced/timestep_prefix + ``` +

Description

+ Prefix for output file names for each time step, the final file is step_i.[vtu|vtm] where i is the time index. + + **Default**: `'step_'` + + + + + + + + + ??? json-spec "`/output/advanced/sol_on_grid` (`float`)" + ``` + /output/advanced/sol_on_grid + ``` +

Description

+ exports the solution sampled on a grid, specify the grid spacing + + **Default**: `-1` + + + + + + + + + ??? json-spec "`/output/advanced/compute_error` (`bool`)" + ``` + /output/advanced/compute_error + ``` +

Description

+ Enables the computation of the error. If no reference solution is provided, return the norms of the solution + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/advanced/sol_at_node` (`int`)" + ``` + /output/advanced/sol_at_node + ``` +

Description

+ Write out solution values at a specific node. the values will be written in the output JSON file + + **Default**: `-1` + + + + + + + + + ??? json-spec "`/output/advanced/vis_boundary_only` (`bool`)" + ``` + /output/advanced/vis_boundary_only + ``` +

Description

+ saves only elements touching the boundaries + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/advanced/curved_mesh_size` (`bool`)" + ``` + /output/advanced/curved_mesh_size + ``` +

Description

+ upsample curved edges to compute mesh size + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/advanced/save_solve_sequence_debug` (`bool`)" + ``` + /output/advanced/save_solve_sequence_debug + ``` +

Description

+ saves AL internal steps, for debugging + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/advanced/save_ccd_debug_meshes` (`bool`)" + ``` + /output/advanced/save_ccd_debug_meshes + ``` +

Description

+ saves AL internal steps, for debugging + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/advanced/save_time_sequence` (`bool`)" + ``` + /output/advanced/save_time_sequence + ``` +

Description

+ saves timesteps + + **Default**: `True` + + + + + + + + + ??? json-spec "`/output/advanced/save_nl_solve_sequence` (`bool`)" + ``` + /output/advanced/save_nl_solve_sequence + ``` +

Description

+ saves obj after every nonlinear iteration, for debugging + + **Default**: `False` + + + + + + + + + ??? json-spec "`/output/advanced/spectrum` (`bool`)" + ``` + /output/advanced/spectrum + ``` +

Description

+ exports the spectrum of the matrix in the output JSON. Works only if POLYSOLVE_WITH_SPECTRA is enabled + + **Default**: `False` + + + + + + + + + + + + ??? json-spec "`/output/reference` (`object`)" + ``` + /output/reference + ``` +

Description

+ Write out the analytic/numerical ground-truth solution and or its gradient + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/output/reference/solution` (`list`)" + ``` + /output/reference/solution + ``` +

Description

+ reference solution used to compute errors + + + + + + ??? json-spec "`/output/reference/solution/*` (`string`)" + ``` + /output/reference/solution/* + ``` +

Description

+ value as a function of $x,y,z,t$ + + **Default**: `''` + + + + + + + + + + + + ??? json-spec "`/output/reference/gradient` (`list`)" + ``` + /output/reference/gradient + ``` +

Description

+ gradient of the reference solution to compute errors + + + + + + ??? json-spec "`/output/reference/gradient/*` (`string`)" + ``` + /output/reference/gradient/* + ``` +

Description

+ value as a function of $x,y,z,t$ + + **Default**: `''` + + + + + + + + + + + + + + + + + + ??? json-spec "`/input` (`object`)" + ``` + /input + ``` +

Description

+ input data + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/input/data` (`object`)" + ``` + /input/data + ``` +

Description

+ input to restart time dependent sim + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/input/data/state` (`file`)" + ``` + /input/data/state + ``` +

Description

+ input state as hdf5 + + **Default**: `''` + + + + + + + + + ??? json-spec "`/input/data/reorder` (`bool`)" + ``` + /input/data/reorder + ``` +

Description

+ reorder input data + + **Default**: `False` + + + + + + + + + + + + + + + ??? json-spec "`/tests` (`object`)" + ``` + /tests + ``` +

Description

+ Used to test to compare different norms of solutions. + + **Default**: `None` +

Optional

+ + + + + + ??? json-spec "`/tests/err_h1` (`float`)" + ``` + /tests/err_h1 + ``` +

Description

+ Reference h1 solution's norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/err_h1_semi` (`float`)" + ``` + /tests/err_h1_semi + ``` +

Description

+ Reference h1 seminorm solution's norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/err_l2` (`float`)" + ``` + /tests/err_l2 + ``` +

Description

+ Reference $L^2$ solution's norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/err_linf` (`float`)" + ``` + /tests/err_linf + ``` +

Description

+ Reference $L^\infty$ solution's norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/err_linf_grad` (`float`)" + ``` + /tests/err_linf_grad + ``` +

Description

+ Reference $L^\infty$ solution's gradient norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/err_lp` (`float`)" + ``` + /tests/err_lp + ``` +

Description

+ Reference $L^8$ solution's gradient norm. + + **Default**: `0` + + + + + + + + + ??? json-spec "`/tests/margin` (`float`)" + ``` + /tests/margin + ``` +

Description

+ Reference tolerance used in tests. + + **Default**: `1e-05` + + + + + + + ??? json-spec "`/tests/time_steps`" + ``` + /tests/time_steps + ``` + + + === "`/tests/time_steps` (`int`)" +

Description

+ Number of time steps to test. + + **Default**: `1` + + **Range:** `[1, inf]` + + + + === "`/tests/time_steps` (`string`)" +

Description

+ Number of time steps to test. + + **Options:** `['all', 'static']` + + + + + + + + diff --git a/_json_spec/index.html b/_json_spec/index.html new file mode 100644 index 00000000..8e843aca --- /dev/null +++ b/_json_spec/index.html @@ -0,0 +1,16303 @@ + + + + + + + + + + + + + + + + + + + + + + json spec - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

json spec

+ + + +
+

/ (object)

+

/
+
+

Description

+Root of the configuration file. +

Required

+
+/geometry (list) +

/geometry
+
+

Description

+List of geometry objects.

+
+/geometry/* +
/geometry/*
+
+
+
+
+

Description

+Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+
+/geometry/*/mesh (file) +

/geometry/*/mesh
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/volume_selection +
/geometry/*/volume_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: None +

Optional

+
+/geometry/*/volume_selection/id_offset (int) +

/geometry/*/volume_selection/id_offset
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: 0

+
+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/volume_selection/* +
/geometry/*/volume_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/box (list) +

/geometry/*/volume_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/* (list) +

/geometry/*/volume_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/*/* (float) +

/geometry/*/volume_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/center (list) +

/geometry/*/volume_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/center/* (float) +

/geometry/*/volume_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/p1 (list) +

/geometry/*/volume_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p1/* (float) +

/geometry/*/volume_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/p2 (list) +

/geometry/*/volume_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p2/* (float) +

/geometry/*/volume_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/point (list) +

/geometry/*/volume_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/point/* (float) +

/geometry/*/volume_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/normal (list) +

/geometry/*/volume_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/normal/* (float) +

/geometry/*/volume_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/axis +
/geometry/*/volume_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/volume_selection/*/position (float) +

/geometry/*/volume_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+
+
+
+
+
+
+
+/geometry/*/surface_selection +
/geometry/*/surface_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/surface_selection/* +
/geometry/*/surface_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/box (list) +

/geometry/*/surface_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/* (list) +

/geometry/*/surface_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/*/* (float) +

/geometry/*/surface_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/center (list) +

/geometry/*/surface_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/center/* (float) +

/geometry/*/surface_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/p1 (list) +

/geometry/*/surface_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p1/* (float) +

/geometry/*/surface_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/p2 (list) +

/geometry/*/surface_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p2/* (float) +

/geometry/*/surface_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/point (list) +

/geometry/*/surface_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/point/* (float) +

/geometry/*/surface_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/normal (list) +

/geometry/*/surface_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/normal/* (float) +

/geometry/*/surface_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/axis +
/geometry/*/surface_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/surface_selection/*/position (float) +

/geometry/*/surface_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/threshold (float) +

/geometry/*/surface_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/surface_selection/*/id_offset (int) +

/geometry/*/surface_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/curve_selection (object) +

/geometry/*/curve_selection
+
+

Description

+Selection of curves

+

Default: None

+
+
+/geometry/*/point_selection +
/geometry/*/point_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/point_selection/* +
/geometry/*/point_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/box (list) +

/geometry/*/point_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/* (list) +

/geometry/*/point_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/*/* (float) +

/geometry/*/point_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/center (list) +

/geometry/*/point_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/center/* (float) +

/geometry/*/point_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/p1 (list) +

/geometry/*/point_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p1/* (float) +

/geometry/*/point_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/p2 (list) +

/geometry/*/point_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p2/* (float) +

/geometry/*/point_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/point (list) +

/geometry/*/point_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/point/* (float) +

/geometry/*/point_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/normal (list) +

/geometry/*/point_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/normal/* (float) +

/geometry/*/point_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/axis +
/geometry/*/point_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/point_selection/*/position (float) +

/geometry/*/point_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/threshold (float) +

/geometry/*/point_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/point_selection/*/id_offset (int) +

/geometry/*/point_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: mesh_array +

Description

+Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+
+/geometry/*/mesh (file) +

/geometry/*/mesh
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+
+/geometry/*/array (object) +

/geometry/*/array
+
+

Description

+Array of meshes +

Required

+
+/geometry/*/array/offset (float) +

/geometry/*/array/offset
+
+

Description

+Offset of the mesh in the array.

+
+
+/geometry/*/array/size (list) +

/geometry/*/array/size
+
+

Description

+Size of the array (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/array/size/* (int) +

/geometry/*/array/size/*
+
+

Description

+Size of the array (two entries for 2D problems or three entries for 3D problems).

+

Range: [1, inf]

+
+
+

Optional

+
+/geometry/*/array/relative (bool) +

/geometry/*/array/relative
+
+

Description

+Is the offset value relative to the mesh’s dimensions.

+

Default: False

+
+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/volume_selection +
/geometry/*/volume_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: None +

Optional

+
+/geometry/*/volume_selection/id_offset (int) +

/geometry/*/volume_selection/id_offset
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: 0

+
+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/volume_selection/* +
/geometry/*/volume_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/box (list) +

/geometry/*/volume_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/* (list) +

/geometry/*/volume_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/*/* (float) +

/geometry/*/volume_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/center (list) +

/geometry/*/volume_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/center/* (float) +

/geometry/*/volume_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/p1 (list) +

/geometry/*/volume_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p1/* (float) +

/geometry/*/volume_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/p2 (list) +

/geometry/*/volume_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p2/* (float) +

/geometry/*/volume_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/point (list) +

/geometry/*/volume_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/point/* (float) +

/geometry/*/volume_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/normal (list) +

/geometry/*/volume_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/normal/* (float) +

/geometry/*/volume_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/axis +
/geometry/*/volume_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/volume_selection/*/position (float) +

/geometry/*/volume_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+
+
+
+
+
+
+
+/geometry/*/surface_selection +
/geometry/*/surface_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/surface_selection/* +
/geometry/*/surface_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/box (list) +

/geometry/*/surface_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/* (list) +

/geometry/*/surface_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/*/* (float) +

/geometry/*/surface_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/center (list) +

/geometry/*/surface_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/center/* (float) +

/geometry/*/surface_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/p1 (list) +

/geometry/*/surface_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p1/* (float) +

/geometry/*/surface_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/p2 (list) +

/geometry/*/surface_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p2/* (float) +

/geometry/*/surface_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/point (list) +

/geometry/*/surface_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/point/* (float) +

/geometry/*/surface_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/normal (list) +

/geometry/*/surface_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/normal/* (float) +

/geometry/*/surface_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/axis +
/geometry/*/surface_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/surface_selection/*/position (float) +

/geometry/*/surface_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/threshold (float) +

/geometry/*/surface_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/surface_selection/*/id_offset (int) +

/geometry/*/surface_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/curve_selection (object) +

/geometry/*/curve_selection
+
+

Description

+Selection of curves

+

Default: None

+
+
+/geometry/*/point_selection +
/geometry/*/point_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/point_selection/* +
/geometry/*/point_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/box (list) +

/geometry/*/point_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/* (list) +

/geometry/*/point_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/*/* (float) +

/geometry/*/point_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/center (list) +

/geometry/*/point_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/center/* (float) +

/geometry/*/point_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/p1 (list) +

/geometry/*/point_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p1/* (float) +

/geometry/*/point_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/p2 (list) +

/geometry/*/point_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p2/* (float) +

/geometry/*/point_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/point (list) +

/geometry/*/point_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/point/* (float) +

/geometry/*/point_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/normal (list) +

/geometry/*/point_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/normal/* (float) +

/geometry/*/point_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/axis +
/geometry/*/point_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/point_selection/*/position (float) +

/geometry/*/point_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/threshold (float) +

/geometry/*/point_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/point_selection/*/id_offset (int) +

/geometry/*/point_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: plane +

Description

+Plane geometry object defined by its origin and normal. +

Required

+
+/geometry/*/point (list) +

/geometry/*/point
+
+

Description

+Point on plane (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/point/* (float) +

/geometry/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/normal (list) +

/geometry/*/normal
+
+

Description

+Normal of plane (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/normal/* (float) +

/geometry/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: ground +

Description

+Plane orthogonal to gravity defined by its height. +

Required

+
+/geometry/*/height (float) +

/geometry/*/height
+
+

Description

+Height of ground plane.

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: mesh_sequence +

Description

+Mesh sequence. +

Required

+
+/geometry/*/mesh_sequence +
/geometry/*/mesh_sequence
+
+
+
+
+

Description

+Directory (or GLOB) of meshes for the mesh sequence.

+
+
+

Description

+List of mesh files for the mesh sequence.

+
+/geometry/*/mesh_sequence/* (file) +

/geometry/*/mesh_sequence/*
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+
+
+
+
+
+/geometry/*/fps (int) +

/geometry/*/fps
+
+

Description

+Frames of the mesh sequence per second.

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+
+
+
+
+/materials (list) +

/materials
+
+

Description

+Material Parameters lists including ID pointing to volume selection, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), Density (\(\rho\)), or Lamé constants (\(\lambda\) and \(\mu\)).

+
+/materials/* +
/materials/*
+
+
+
+
+

Type: NeoHookean +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: NeoHookean +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin3Param +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c3 +
/materials/*/c3
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c3/value +
/materials/*/c3/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c3/unit (string) +

/materials/*/c3/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/d1 +
/materials/*/d1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/d1/value +
/materials/*/d1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/d1/unit (string) +

/materials/*/d1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin3ParamSymbolic +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c3 +
/materials/*/c3
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c3/value +
/materials/*/c3/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c3/unit (string) +

/materials/*/c3/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/d1 +
/materials/*/d1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/d1/value +
/materials/*/d1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/d1/unit (string) +

/materials/*/d1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: UnconstrainedOgden +

Description

+Material Parameters including ID, for Ogden. +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/alphas +
/materials/*/alphas
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/alphas/value +
/materials/*/alphas/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/alphas/unit (string) +

/materials/*/alphas/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mus (list) +

/materials/*/mus
+
+

Description

+Ogden mu

+
+/materials/*/mus/* +
/materials/*/mus/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mus/*/value +
/materials/*/mus/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mus/*/unit (string) +

/materials/*/mus/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+/materials/*/Ds (list) +

/materials/*/Ds
+
+

Description

+Ogden D

+
+/materials/*/Ds/* +
/materials/*/Ds/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/Ds/*/value +
/materials/*/Ds/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/Ds/*/unit (string) +

/materials/*/Ds/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleOgden +

Description

+Material Parameters including ID, for Ogden. +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c +
/materials/*/c
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c/value +
/materials/*/c/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c/unit (string) +

/materials/*/c/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Coefficient(s) of Incompressible Ogden

+
+/materials/*/c/* +
/materials/*/c/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c/*/value +
/materials/*/c/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c/*/unit (string) +

/materials/*/c/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/materials/*/m +
/materials/*/m
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/m/value +
/materials/*/m/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/m/unit (string) +

/materials/*/m/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Exponent(s) of Incompressible Ogden

+
+/materials/*/m/* +
/materials/*/m/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/m/*/value +
/materials/*/m/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/m/*/unit (string) +

/materials/*/m/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: LinearElasticity +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: LinearElasticity +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: HookeLinearElasticity +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: HookeLinearElasticity +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/elasticity_tensor (list) +

/materials/*/elasticity_tensor
+
+

Description

+Symmetric elasticity tensor

+
+/materials/*/elasticity_tensor/* +
/materials/*/elasticity_tensor/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/elasticity_tensor/*/value +
/materials/*/elasticity_tensor/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/elasticity_tensor/*/unit (string) +

/materials/*/elasticity_tensor/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: SaintVenant +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: SaintVenant +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/elasticity_tensor (list) +

/materials/*/elasticity_tensor
+
+

Description

+Symmetric elasticity tensor

+
+/materials/*/elasticity_tensor/* +
/materials/*/elasticity_tensor/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/elasticity_tensor/*/value +
/materials/*/elasticity_tensor/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/elasticity_tensor/*/unit (string) +

/materials/*/elasticity_tensor/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Stokes +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: NavierStokes +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: OperatorSplitting +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleLinearElasticity +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleLinearElasticity +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Laplacian +

Description

+Material Parameters including ID, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Helmholtz +

Description

+Material Parameters including ID, k, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Bilaplacian +

Description

+Material Parameters including ID, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: AMIPS +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+
+

Type: FixedCorotational +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: FixedCorotational +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+

Optional

+
+/units (object) +

/units
+
+

Description

+Basic units used in the code.

+

Default: None +

Optional

+
+/units/length (string) +

/units/length
+
+

Description

+Length unit.

+

Default: 'm'

+
+
+/units/mass (string) +

/units/mass
+
+

Description

+Mass unit.

+

Default: 'kg'

+
+
+/units/time (string) +

/units/time
+
+

Description

+Time unit.

+

Default: 's'

+
+
+/units/characteristic_length (float) +

/units/characteristic_length
+
+

Description

+Characteristic length, used for tolerances.

+

Default: 1

+
+
+
+/preset_problem +
/preset_problem
+
+
+
+
+

Type: Linear +

Description

+TODO

+

Default: 'skip' +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Quadratic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Cubic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Sine +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Franke +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: FrankeOld +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: GenericScalarExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+
+

Type: Zero_BC +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Elastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Walk +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TorsionElastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/axis_coordiante (int) +

/preset_problem/axis_coordiante
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/n_turns (float) +

/preset_problem/n_turns
+
+

Description

+TODO

+

Default: 0.5

+
+
+/preset_problem/fixed_boundary (int) +

/preset_problem/fixed_boundary
+
+

Description

+TODO

+

Default: 5

+
+
+/preset_problem/turning_boundary (int) +

/preset_problem/turning_boundary
+
+

Description

+TODO

+

Default: 6

+
+
+/preset_problem/bbox_center (list) +

/preset_problem/bbox_center
+
+

Description

+TODO

+
+/preset_problem/bbox_center/* (float) +

/preset_problem/bbox_center/*
+
+

Description

+TODO

+

Default: 0

+
+
+
+
+

Type: DoubleTorsionElastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/axis_coordiante0 (int) +

/preset_problem/axis_coordiante0
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/axis_coordiante1 (int) +

/preset_problem/axis_coordiante1
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/angular_v0 (float) +

/preset_problem/angular_v0
+
+

Description

+TODO

+

Default: 0.5

+
+
+/preset_problem/angular_v1 (float) +

/preset_problem/angular_v1
+
+

Description

+TODO

+

Default: -0.5

+
+
+/preset_problem/turning_boundary0 (int) +

/preset_problem/turning_boundary0
+
+

Description

+TODO

+

Default: 5

+
+
+/preset_problem/turning_boundary1 (int) +

/preset_problem/turning_boundary1
+
+

Description

+TODO

+

Default: 6

+
+
+/preset_problem/bbox_center (list) +

/preset_problem/bbox_center
+
+

Description

+TODO

+
+/preset_problem/bbox_center/* (float) +

/preset_problem/bbox_center/*
+
+

Description

+TODO

+

Default: 0

+
+
+
+
+

Type: ElasticZeroBC +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: ElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: ElasticCantileverExact +

Description

+TODO, add displacement, E, nu, formulation, mesh_size +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: CompressionElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: QuadraticElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: LinearElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: PointBasedTensor +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Kernel +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/formulation (string) +

/preset_problem/formulation
+
+

Description

+TODO

+

Default: ''

+
+
+/preset_problem/n_kernels (int) +

/preset_problem/n_kernels
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/kernel_distance (float) +

/preset_problem/kernel_distance
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/kernel_weights (string) +

/preset_problem/kernel_weights
+
+

Description

+TODO

+

Default: ''

+
+
+
+

Type: Node +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TimeDependentScalar +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: MinSurf +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Gravity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: ConstantVelocity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TwoSpheres +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavityC0 +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavitySmooth +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Flow +

Description

+TODO, add inflow, outflow, inflow_amout, outflow_amout, direction, obstacle +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: FlowWithObstacle +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: CornerFlow +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: UnitFlowWithObstacle +

Description

+TODO, add inflow_id, direction, no_slip +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: StokesLaw +

Description

+TODO, add radius +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: TaylorGreenVortex +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: SimpleStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+
+

Type: SineStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TransientStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: Kovnaszy +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: Airfoil +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: Lshape +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: TestProblem +

Description

+TODO, type, omega, is_scalar +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: BilaplacianProblemWithSolution +

Description

+TODO, type, omega, is_scalar +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+
+
+
+/common (file) +

/common
+
+

Description

+Path to common settings will patch the current file.

+

Default: ''

+

Extensions: ['.json']

+
+
+/root_path (string) +

/root_path
+
+

Description

+Path for all relative paths, set automatically to the folder containing this JSON.

+

Default: ''

+
+
+/space (object) +

/space
+
+

Description

+Options related to the FE space.

+

Default: None +

Optional

+
+/space/discr_order +
/space/discr_order
+
+
+
+
+

Description

+Lagrange element order for the space for the main unknown, for all elements.

+

Default: 1

+
+
+

Description

+Path to file containing Lagrange element order for the space for the main unknown per element.

+

Extensions: ['.txt', '.bin']

+
+
+

Description

+List of Lagrange element order for the space for the main unknown with volume IDs.

+
+/space/discr_order/* (object) +

/space/discr_order/*
+
+

Description

+Lagrange element order for the a space tagged with volume ID for the main unknown. +

Required

+
+/space/discr_order/*/id +
/space/discr_order/*/id
+
+
+
+
+

Description

+Volume selection ID to apply the discr_order to.

+
+
+

Description

+List of volume selection IDs to apply the discr_order to.

+
+/space/discr_order/*/id/* (int) +

/space/discr_order/*/id/*
+
+

Description

+Volume selection ID to apply the discr_order to.

+
+
+
+
+
+
+/space/discr_order/*/order (int) +

/space/discr_order/*/order
+
+

Description

+Lagrange element order for the space for the main unknown, for all elements.

+
+
+
+
+
+
+
+/space/pressure_discr_order (int) +

/space/pressure_discr_order
+
+

Description

+ Lagrange element order for the space for the pressure unknown, for all elements.

+

Default: 1

+
+
+/space/basis_type (string) +

/space/basis_type
+
+

Description

+Type of basis to use for non polygonal element, one of Lagrange, Spline, or Serendipity. Spline or Serendipity work only for quad/hex meshes

+

Default: 'Lagrange'

+

Options: ['Lagrange', 'Spline', 'Serendipity']

+
+
+/space/poly_basis_type (string) +

/space/poly_basis_type
+
+

Description

+Type of basis to use for a polygonal element, one of MFSHarmonic, MeanValue, or Wachspress see ‘PolySpline..’ paper for details.

+

Default: 'MFSHarmonic'

+

Options: ['MFSHarmonic', 'MeanValue', 'Wachspress']

+
+
+/space/use_p_ref (bool) +

/space/use_p_ref
+
+

Description

+Perform a priori p-refinement based on element shape, as described in ‘Decoupling..’ paper.

+

Default: False

+
+
+/space/remesh (object) +

/space/remesh
+
+

Description

+Settings for adaptive remeshing

+

Default: None +

Optional

+
+/space/remesh/enabled (bool) +

/space/remesh/enabled
+
+

Description

+Whether to do adaptive remeshing

+

Default: False

+
+
+/space/remesh/split (object) +

/space/remesh/split
+
+

Description

+Settings for adaptive remeshing edge splitting operations

+

Default: None +

Optional

+
+/space/remesh/split/enabled (bool) +

/space/remesh/split/enabled
+
+

Description

+Whether to do edge splitting in adaptive remeshing

+

Default: True

+
+
+/space/remesh/split/acceptance_tolerance (float) +

/space/remesh/split/acceptance_tolerance
+
+

Description

+Accept split operation if energy decreased by at least x

+

Default: 0.001

+

Range: [0, inf]

+
+
+/space/remesh/split/culling_threshold (float) +

/space/remesh/split/culling_threshold
+
+

Description

+Split operation culling threshold on energy

+

Default: 0.95

+

Range: [0, 1]

+
+
+/space/remesh/split/max_depth (int) +

/space/remesh/split/max_depth
+
+

Description

+Maximum depth split per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+/space/remesh/split/min_edge_length (float) +

/space/remesh/split/min_edge_length
+
+

Description

+Minimum edge length to split

+

Default: 1e-06

+

Range: [0, inf]

+
+
+
+/space/remesh/collapse (object) +

/space/remesh/collapse
+
+

Description

+Settings for adaptive remeshing edge collapse operations

+

Default: None +

Optional

+
+/space/remesh/collapse/enabled (bool) +

/space/remesh/collapse/enabled
+
+

Description

+Whether to do edge collapse in adaptive remeshing

+

Default: True

+
+
+/space/remesh/collapse/acceptance_tolerance (float) +

/space/remesh/collapse/acceptance_tolerance
+
+

Description

+Accept collapse operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/collapse/culling_threshold (float) +

/space/remesh/collapse/culling_threshold
+
+

Description

+Collapse operation culling threshold on energy

+

Default: 0.01

+

Range: [0, 1]

+
+
+/space/remesh/collapse/max_depth (int) +

/space/remesh/collapse/max_depth
+
+

Description

+Maximum depth collapse per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+/space/remesh/collapse/rel_max_edge_length (float) +

/space/remesh/collapse/rel_max_edge_length
+
+

Description

+Length of maximum edge length to collapse relative to initial minimum edge length

+

Default: 1

+

Range: [0, inf]

+
+
+/space/remesh/collapse/abs_max_edge_length (float) +

/space/remesh/collapse/abs_max_edge_length
+
+

Description

+Length of maximum edge length to collapse in absolute units of distance

+

Default: 1e+100

+

Range: [0, inf]

+
+
+
+/space/remesh/swap (object) +

/space/remesh/swap
+
+

Description

+Settings for adaptive remeshing edge/face swap operations

+

Default: None +

Optional

+
+/space/remesh/swap/enabled (bool) +

/space/remesh/swap/enabled
+
+

Description

+Whether to do edge/face swap in adaptive remeshing

+

Default: False

+
+
+/space/remesh/swap/acceptance_tolerance (float) +

/space/remesh/swap/acceptance_tolerance
+
+

Description

+Accept swap operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/swap/max_depth (int) +

/space/remesh/swap/max_depth
+
+

Description

+Maximum depth swap per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+
+/space/remesh/smooth (object) +

/space/remesh/smooth
+
+

Description

+Settings for adaptive remeshing vertex smoothing operations

+

Default: None +

Optional

+
+/space/remesh/smooth/enabled (bool) +

/space/remesh/smooth/enabled
+
+

Description

+Whether to do vertex smoothing in adaptive remeshing

+

Default: False

+
+
+/space/remesh/smooth/acceptance_tolerance (float) +

/space/remesh/smooth/acceptance_tolerance
+
+

Description

+Accept smooth operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/smooth/max_iters (int) +

/space/remesh/smooth/max_iters
+
+

Description

+Maximum number of smoothing iterations per time-step

+

Default: 1

+

Range: [1, inf]

+
+
+
+/space/remesh/local_relaxation (object) +

/space/remesh/local_relaxation
+
+

Description

+Settings for adaptive remeshing local relaxation

+

Default: None +

Optional

+
+/space/remesh/local_relaxation/local_mesh_n_ring (int) +

/space/remesh/local_relaxation/local_mesh_n_ring
+
+

Description

+Size of n-ring for local relaxation

+

Default: 2

+
+
+/space/remesh/local_relaxation/local_mesh_rel_area (float) +

/space/remesh/local_relaxation/local_mesh_rel_area
+
+

Description

+Minimum area for local relaxation

+

Default: 0.01

+
+
+/space/remesh/local_relaxation/max_nl_iterations (int) +

/space/remesh/local_relaxation/max_nl_iterations
+
+

Description

+Maximum number of nonlinear solver iterations before acceptance check

+

Default: 1

+
+
+
+/space/remesh/type (string) +

/space/remesh/type
+
+

Description

+Type of adaptive remeshing to use.

+

Default: 'physics'

+

Options: ['physics', 'sizing_field']

+
+
+
+/space/advanced (object) +

/space/advanced
+
+

Description

+Advanced settings for the FE space.

+

Default: None +

Optional

+
+/space/advanced/discr_order_max (int) +

/space/advanced/discr_order_max
+
+

Description

+Maximal discretization order in adaptive p-refinement and hp-refinement

+

Default: 4

+
+
+/space/advanced/isoparametric (bool) +

/space/advanced/isoparametric
+
+

Description

+Forces geometric map basis to be the same degree as the main variable basis, irrespective of the degree associated with the geom. map degrees associated with the elements of the geometry.

+

Default: False

+
+
+/space/advanced/bc_method (string) +

/space/advanced/bc_method
+
+

Description

+Method for imposing analytic Dirichet boundary conditions. If ‘lsq’ (least-squares fit), then the bc function is sampled at quadrature points, and the FEspace nodal values on the boundary are determined by minimizing L2 norm of the difference. If ‘sample’, then the analytic bc function is sampled at the boundary nodes.

+

Default: 'sample'

+

Options: ['lsq', 'sample']

+
+
+/space/advanced/n_boundary_samples (int) +

/space/advanced/n_boundary_samples
+
+

Description

+Per-element number of boundary samples for analytic Dirichlet and Neumann boundary conditions.

+

Default: -1

+
+
+/space/advanced/quadrature_order (int) +

/space/advanced/quadrature_order
+
+

Description

+Minimal quadrature order to use in matrix and rhs assembly; the actual order is determined as min(2*(p-1)+1,quadrature_order).

+

Default: -1

+
+
+/space/advanced/mass_quadrature_order (int) +

/space/advanced/mass_quadrature_order
+
+

Description

+Minimal quadrature order to use in mass matrix assembler; the actual order is determined as min(2*p+1,quadrature_order)

+

Default: -1

+
+
+/space/advanced/integral_constraints (int) +

/space/advanced/integral_constraints
+
+

Description

+Number of constraints for non-conforming polygonal basis; 0, 1, or 2; see ‘PolySpline..’ paper for details.

+

Default: 2

+
+
+/space/advanced/n_harmonic_samples (int) +

/space/advanced/n_harmonic_samples
+
+

Description

+If MFSHarmonics is used for a polygonal element, number of collocation samples used in the basis construction;see ‘PolySpline..’ paper for details.

+

Default: 10

+
+
+/space/advanced/force_no_ref_for_harmonic (bool) +

/space/advanced/force_no_ref_for_harmonic
+
+

Description

+If true, do not do uniform global refinement if the mesh contains polygonal elements.

+

Default: False

+
+
+/space/advanced/B (int) +

/space/advanced/B
+
+

Description

+The target deviation of the error on elements from perfect element error, for a priori geometry-dependent p-refinement, see ‘Decoupling .. ‘ paper.

+

Default: 3

+
+
+/space/advanced/h1_formula (bool) +

/space/advanced/h1_formula
+
+

Description

+

Default: False

+
+
+/space/advanced/count_flipped_els (bool) +

/space/advanced/count_flipped_els
+
+

Description

+Count the number of elements with Jacobian of the geometric map not positive at quadrature points.

+

Default: True

+
+
+/space/advanced/use_particle_advection (bool) +

/space/advanced/use_particle_advection
+
+

Description

+Use particle advection in splitting method for solving NS equation.

+

Default: False

+
+
+
+
+/time +
/time
+
+
+
+
+

Description

+The time parameters: start time t0, end time tend, time step dt.

+

Default: 'skip' +

Required

+
+/time/tend (float) +

/time/tend
+
+

Description

+Ending time

+

Range: [0, inf]

+
+
+/time/dt (float) +

/time/dt
+
+

Description

+Time step size \(\Delta t\)

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+

Description

+The time parameters: start time t0, time step dt, number of time steps. +

Required

+
+/time/time_steps (int) +

/time/time_steps
+
+

Description

+Number of time steps

+

Range: [0, inf]

+
+
+/time/dt (float) +

/time/dt
+
+

Description

+Time step size \(\Delta t\)

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+

Description

+The time parameters: start time t0, end time tend, number of time steps. +

Required

+
+/time/time_steps (int) +

/time/time_steps
+
+

Description

+Number of time steps

+

Range: [0, inf]

+
+
+/time/tend (float) +

/time/tend
+
+

Description

+Ending time

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+
+
+
+/contact (object) +

/contact
+
+

Description

+Contact handling parameters.

+

Default: None +

Optional

+
+/contact/enabled (bool) +

/contact/enabled
+
+

Description

+True if contact handling is enabled.

+

Default: False

+
+
+/contact/dhat (float) +

/contact/dhat
+
+

Description

+Contact barrier activation distance.

+

Default: 0.001

+

Range: [0, inf]

+
+
+/contact/dhat_percentage (float) +

/contact/dhat_percentage
+
+

Description

+\(\hat{d}\) as percentage of the diagonal of the bounding box

+

Default: 0.8

+
+
+/contact/epsv (float) +

/contact/epsv
+
+

Description

+Friction smoothing parameter.

+

Default: 0.001

+

Range: [0, inf]

+
+
+/contact/friction_coefficient (float) +

/contact/friction_coefficient
+
+

Description

+Coefficient of friction (global)

+

Default: 0

+
+
+/contact/use_convergent_formulation (bool) +

/contact/use_convergent_formulation
+
+

Description

+Whether to use the convergent (area weighted) formulation of IPC.

+

Default: False

+
+
+/contact/collision_mesh +
/contact/collision_mesh
+
+
+
+
+

Description

+Load a preconstructed collision mesh.

+

Default: 'skip' +

Required

+
+/contact/collision_mesh/mesh (string) +

/contact/collision_mesh/mesh
+
+

Description

+Path to preconstructed collision mesh.

+
+
+/contact/collision_mesh/linear_map (string) +

/contact/collision_mesh/linear_map
+
+

Description

+HDF file storing the linear mapping of displacements.

+
+

Optional

+
+/contact/collision_mesh/enabled (bool) +

/contact/collision_mesh/enabled
+
+

Description

+

Default: True

+
+
+
+

Description

+Construct a collision mesh with a maximum edge length. +

Required

+
+/contact/collision_mesh/max_edge_length (float) +

/contact/collision_mesh/max_edge_length
+
+

Description

+Maximum edge length to use for building the collision mesh.

+
+

Optional

+
+/contact/collision_mesh/tessellation_type (string) +

/contact/collision_mesh/tessellation_type
+
+

Description

+Type of tessellation to use for building the collision mesh.

+

Default: 'regular'

+

Options: ['regular', 'irregular']

+
+
+/contact/collision_mesh/enabled (bool) +

/contact/collision_mesh/enabled
+
+

Description

+

Default: True

+
+
+
+
+
+
+/contact/periodic (bool) +

/contact/periodic
+
+

Description

+Set to true to check collision between adjacent periodic cells.

+

Default: False

+
+
+
+/solver (object) +

/solver
+
+

Description

+The settings for the solver including linear solver, nonlinear solver, and some advanced options.

+

Default: None +

Optional

+
+/solver/max_threads (int) +

/solver/max_threads
+
+

Description

+Maximum number of threads used; 0 is unlimited.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/linear (object) +

/solver/linear
+
+

Description

+Settings for the linear solver.

+

Default: None +

Optional

+
+/solver/linear/enable_overwrite_solver (bool) +

/solver/linear/enable_overwrite_solver
+
+

Description

+If solver name is not present, falls back to default

+

Default: False

+
+
+/solver/linear/solver (string) +

/solver/linear/solver
+
+

Description

+Linear solver type.

+

Default: ''

+

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

+
+
+/solver/linear/precond (string) +

/solver/linear/precond
+
+

Description

+Preconditioner used if using an iterative linear solver.

+

Default: ''

+

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

+
+
+/solver/linear/Eigen::LeastSquaresConjugateGradient (object) +

/solver/linear/Eigen::LeastSquaresConjugateGradient
+
+

Description

+Settings for the Eigen’s Least Squares Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter (int) +

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance (float) +

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::DGMRES (object) +

/solver/linear/Eigen::DGMRES
+
+

Description

+Settings for the Eigen’s DGMRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::DGMRES/max_iter (int) +

/solver/linear/Eigen::DGMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::DGMRES/tolerance (float) +

/solver/linear/Eigen::DGMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::ConjugateGradient (object) +

/solver/linear/Eigen::ConjugateGradient
+
+

Description

+Settings for the Eigen’s Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::ConjugateGradient/max_iter (int) +

/solver/linear/Eigen::ConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::ConjugateGradient/tolerance (float) +

/solver/linear/Eigen::ConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::BiCGSTAB (object) +

/solver/linear/Eigen::BiCGSTAB
+
+

Description

+Settings for the Eigen’s BiCGSTAB solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::BiCGSTAB/max_iter (int) +

/solver/linear/Eigen::BiCGSTAB/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::BiCGSTAB/tolerance (float) +

/solver/linear/Eigen::BiCGSTAB/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::GMRES (object) +

/solver/linear/Eigen::GMRES
+
+

Description

+Settings for the Eigen’s GMRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::GMRES/max_iter (int) +

/solver/linear/Eigen::GMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::GMRES/tolerance (float) +

/solver/linear/Eigen::GMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::MINRES (object) +

/solver/linear/Eigen::MINRES
+
+

Description

+Settings for the Eigen’s MINRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::MINRES/max_iter (int) +

/solver/linear/Eigen::MINRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::MINRES/tolerance (float) +

/solver/linear/Eigen::MINRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Pardiso (object) +

/solver/linear/Pardiso
+
+

Description

+Settings for the Pardiso solver.

+

Default: None +

Optional

+
+/solver/linear/Pardiso/mtype (int) +

/solver/linear/Pardiso/mtype
+
+

Description

+Matrix type.

+

Default: 11

+

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

+
+
+
+/solver/linear/Hypre (object) +

/solver/linear/Hypre
+
+

Description

+Settings for the Hypre solver.

+

Default: None +

Optional

+
+/solver/linear/Hypre/max_iter (int) +

/solver/linear/Hypre/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Hypre/pre_max_iter (int) +

/solver/linear/Hypre/pre_max_iter
+
+

Description

+Maximum number of pre iterations.

+

Default: 1

+
+
+/solver/linear/Hypre/tolerance (float) +

/solver/linear/Hypre/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+
+/solver/linear/AMGCL (object) +

/solver/linear/AMGCL
+
+

Description

+Settings for the AMGCL solver.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/solver (object) +

/solver/linear/AMGCL/solver
+
+

Description

+Solver settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/solver/tol (float) +

/solver/linear/AMGCL/solver/tol
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+/solver/linear/AMGCL/solver/maxiter (int) +

/solver/linear/AMGCL/solver/maxiter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/AMGCL/solver/type (string) +

/solver/linear/AMGCL/solver/type
+
+

Description

+Type of solver to use.

+

Default: 'cg'

+
+
+
+/solver/linear/AMGCL/precond (object) +

/solver/linear/AMGCL/precond
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/relax (object) +

/solver/linear/AMGCL/precond/relax
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/relax/degree (int) +

/solver/linear/AMGCL/precond/relax/degree
+
+

Description

+Degree of the polynomial.

+

Default: 16

+
+
+/solver/linear/AMGCL/precond/relax/type (string) +

/solver/linear/AMGCL/precond/relax/type
+
+

Description

+Type of relaxation to use.

+

Default: 'chebyshev'

+
+
+/solver/linear/AMGCL/precond/relax/power_iters (int) +

/solver/linear/AMGCL/precond/relax/power_iters
+
+

Description

+Number of power iterations.

+

Default: 100

+
+
+/solver/linear/AMGCL/precond/relax/higher (float) +

/solver/linear/AMGCL/precond/relax/higher
+
+

Description

+Higher level relaxation.

+

Default: 2

+
+
+/solver/linear/AMGCL/precond/relax/lower (float) +

/solver/linear/AMGCL/precond/relax/lower
+
+

Description

+Lower level relaxation.

+

Default: 0.008333333333

+
+
+/solver/linear/AMGCL/precond/relax/scale (bool) +

/solver/linear/AMGCL/precond/relax/scale
+
+

Description

+Scale.

+

Default: True

+
+
+
+/solver/linear/AMGCL/precond/class (string) +

/solver/linear/AMGCL/precond/class
+
+

Description

+Type of preconditioner to use.

+

Default: 'amg'

+
+
+/solver/linear/AMGCL/precond/max_levels (int) +

/solver/linear/AMGCL/precond/max_levels
+
+

Description

+Maximum number of levels.

+

Default: 6

+
+
+/solver/linear/AMGCL/precond/direct_coarse (bool) +

/solver/linear/AMGCL/precond/direct_coarse
+
+

Description

+Use direct solver for the coarsest level.

+

Default: False

+
+
+/solver/linear/AMGCL/precond/ncycle (int) +

/solver/linear/AMGCL/precond/ncycle
+
+

Description

+Number of cycles.

+

Default: 2

+
+
+/solver/linear/AMGCL/precond/coarsening (object) +

/solver/linear/AMGCL/precond/coarsening
+
+

Description

+Coarsening parameters.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/coarsening/type (string) +

/solver/linear/AMGCL/precond/coarsening/type
+
+

Description

+Coarsening type.

+

Default: 'smoothed_aggregation'

+
+
+/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool) +

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius
+
+

Description

+Should the spectral radius be estimated.

+

Default: True

+
+
+/solver/linear/AMGCL/precond/coarsening/relax (float) +

/solver/linear/AMGCL/precond/coarsening/relax
+
+

Description

+Coarsening relaxation.

+

Default: 1

+
+
+/solver/linear/AMGCL/precond/coarsening/aggr (object) +

/solver/linear/AMGCL/precond/coarsening/aggr
+
+

Description

+Aggregation settings.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong (float) +

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong
+
+

Description

+Aggregation epsilon strong.

+

Default: 0

+
+
+
+
+
+
+
+/solver/adjoint_linear (object) +

/solver/adjoint_linear
+
+

Description

+Settings for the linear solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/enable_overwrite_solver (bool) +

/solver/adjoint_linear/enable_overwrite_solver
+
+

Description

+If solver name is not present, falls back to default

+

Default: False

+
+
+/solver/adjoint_linear/solver (string) +

/solver/adjoint_linear/solver
+
+

Description

+Linear solver type.

+

Default: ''

+

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

+
+
+/solver/adjoint_linear/precond (string) +

/solver/adjoint_linear/precond
+
+

Description

+Preconditioner used if using an iterative linear solver.

+

Default: ''

+

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

+
+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient (object) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient
+
+

Description

+Settings for the Eigen’s Least Squares Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter (int) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance (float) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::DGMRES (object) +

/solver/adjoint_linear/Eigen::DGMRES
+
+

Description

+Settings for the Eigen’s DGMRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::DGMRES/max_iter (int) +

/solver/adjoint_linear/Eigen::DGMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::DGMRES/tolerance (float) +

/solver/adjoint_linear/Eigen::DGMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::ConjugateGradient (object) +

/solver/adjoint_linear/Eigen::ConjugateGradient
+
+

Description

+Settings for the Eigen’s Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter (int) +

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance (float) +

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::BiCGSTAB (object) +

/solver/adjoint_linear/Eigen::BiCGSTAB
+
+

Description

+Settings for the Eigen’s BiCGSTAB solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter (int) +

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance (float) +

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::GMRES (object) +

/solver/adjoint_linear/Eigen::GMRES
+
+

Description

+Settings for the Eigen’s GMRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::GMRES/max_iter (int) +

/solver/adjoint_linear/Eigen::GMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::GMRES/tolerance (float) +

/solver/adjoint_linear/Eigen::GMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::MINRES (object) +

/solver/adjoint_linear/Eigen::MINRES
+
+

Description

+Settings for the Eigen’s MINRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::MINRES/max_iter (int) +

/solver/adjoint_linear/Eigen::MINRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::MINRES/tolerance (float) +

/solver/adjoint_linear/Eigen::MINRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Pardiso (object) +

/solver/adjoint_linear/Pardiso
+
+

Description

+Settings for the Pardiso solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Pardiso/mtype (int) +

/solver/adjoint_linear/Pardiso/mtype
+
+

Description

+Matrix type.

+

Default: 11

+

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

+
+
+
+/solver/adjoint_linear/Hypre (object) +

/solver/adjoint_linear/Hypre
+
+

Description

+Settings for the Hypre solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Hypre/max_iter (int) +

/solver/adjoint_linear/Hypre/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Hypre/pre_max_iter (int) +

/solver/adjoint_linear/Hypre/pre_max_iter
+
+

Description

+Maximum number of pre iterations.

+

Default: 1

+
+
+/solver/adjoint_linear/Hypre/tolerance (float) +

/solver/adjoint_linear/Hypre/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+
+/solver/adjoint_linear/AMGCL (object) +

/solver/adjoint_linear/AMGCL
+
+

Description

+Settings for the AMGCL solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/solver (object) +

/solver/adjoint_linear/AMGCL/solver
+
+

Description

+Solver settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/solver/tol (float) +

/solver/adjoint_linear/AMGCL/solver/tol
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+/solver/adjoint_linear/AMGCL/solver/maxiter (int) +

/solver/adjoint_linear/AMGCL/solver/maxiter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/AMGCL/solver/type (string) +

/solver/adjoint_linear/AMGCL/solver/type
+
+

Description

+Type of solver to use.

+

Default: 'cg'

+
+
+
+/solver/adjoint_linear/AMGCL/precond (object) +

/solver/adjoint_linear/AMGCL/precond
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/relax (object) +

/solver/adjoint_linear/AMGCL/precond/relax
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/relax/degree (int) +

/solver/adjoint_linear/AMGCL/precond/relax/degree
+
+

Description

+Degree of the polynomial.

+

Default: 16

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/type (string) +

/solver/adjoint_linear/AMGCL/precond/relax/type
+
+

Description

+Type of relaxation to use.

+

Default: 'chebyshev'

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/power_iters (int) +

/solver/adjoint_linear/AMGCL/precond/relax/power_iters
+
+

Description

+Number of power iterations.

+

Default: 100

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/higher (float) +

/solver/adjoint_linear/AMGCL/precond/relax/higher
+
+

Description

+Higher level relaxation.

+

Default: 2

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/lower (float) +

/solver/adjoint_linear/AMGCL/precond/relax/lower
+
+

Description

+Lower level relaxation.

+

Default: 0.008333333333

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/scale (bool) +

/solver/adjoint_linear/AMGCL/precond/relax/scale
+
+

Description

+Scale.

+

Default: True

+
+
+
+/solver/adjoint_linear/AMGCL/precond/class (string) +

/solver/adjoint_linear/AMGCL/precond/class
+
+

Description

+Type of preconditioner to use.

+

Default: 'amg'

+
+
+/solver/adjoint_linear/AMGCL/precond/max_levels (int) +

/solver/adjoint_linear/AMGCL/precond/max_levels
+
+

Description

+Maximum number of levels.

+

Default: 6

+
+
+/solver/adjoint_linear/AMGCL/precond/direct_coarse (bool) +

/solver/adjoint_linear/AMGCL/precond/direct_coarse
+
+

Description

+Use direct solver for the coarsest level.

+

Default: False

+
+
+/solver/adjoint_linear/AMGCL/precond/ncycle (int) +

/solver/adjoint_linear/AMGCL/precond/ncycle
+
+

Description

+Number of cycles.

+

Default: 2

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening (object) +

/solver/adjoint_linear/AMGCL/precond/coarsening
+
+

Description

+Coarsening parameters.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/coarsening/type (string) +

/solver/adjoint_linear/AMGCL/precond/coarsening/type
+
+

Description

+Coarsening type.

+

Default: 'smoothed_aggregation'

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool) +

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius
+
+

Description

+Should the spectral radius be estimated.

+

Default: True

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/relax (float) +

/solver/adjoint_linear/AMGCL/precond/coarsening/relax
+
+

Description

+Coarsening relaxation.

+

Default: 1

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/aggr (object) +

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr
+
+

Description

+Aggregation settings.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong (float) +

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong
+
+

Description

+Aggregation epsilon strong.

+

Default: 0

+
+
+
+
+
+
+
+/solver/nonlinear (object) +

/solver/nonlinear
+
+

Description

+Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

+

Default: None +

Optional

+
+/solver/nonlinear/solver +
/solver/nonlinear/solver
+
+
+
+
+

Description

+Nonlinear solver type

+

Default: 'Newton'

+

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

+
+
+

Description

+List of solvers for ballback. Eg, [{‘type’:’Newton’}, {‘type’:’L-BFGS’}, {‘type’:’GradientDescent’}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

+
+/solver/nonlinear/solver/* +
/solver/nonlinear/solver/*
+
+
+
+
+

Type: Newton +

Description

+Options for Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: ProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: RegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: RegularizedProjectedNewton +

Description

+Options for regularized projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseNewton +

Description

+Options for Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseRegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseRegularizedProjectedNewton +

Description

+Options for projected regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: GradientDescent +

Description

+Options for Gradient Descent. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: StochasticGradientDescent +

Description

+Options for Stochastic Gradient Descent. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/erase_component_probability (float) +

/solver/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+

Type: L-BFGS +

Description

+Options for L-BFGS. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/history_size (int) +

/solver/nonlinear/solver/*/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+

Type: BFGS +

Description

+Options for BFGS. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: ADAM +

Description

+Options for ADAM. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/alpha (float) +

/solver/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/solver/*/beta_1 (float) +

/solver/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/solver/*/beta_2 (float) +

/solver/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/solver/*/epsilon (float) +

/solver/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+

Type: StochasticADAM +

Description

+Options for ADAM. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/alpha (float) +

/solver/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/solver/*/beta_1 (float) +

/solver/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/solver/*/beta_2 (float) +

/solver/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/solver/*/epsilon (float) +

/solver/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/erase_component_probability (float) +

/solver/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+
+
+
+
+
+
+
+/solver/nonlinear/x_delta (float) +

/solver/nonlinear/x_delta
+
+

Description

+Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/grad_norm (float) +

/solver/nonlinear/grad_norm
+
+

Description

+Stopping criterion: Minimal gradient norm for the iterations to continue.

+

Default: 1e-08

+

Range: [0, inf]

+
+
+/solver/nonlinear/first_grad_norm_tol (float) +

/solver/nonlinear/first_grad_norm_tol
+
+

Description

+Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

+

Default: 1e-10

+
+
+/solver/nonlinear/max_iterations (int) +

/solver/nonlinear/max_iterations
+
+

Description

+Maximum number of iterations for a nonlinear solve.

+

Default: 500

+
+
+/solver/nonlinear/iterations_per_strategy +
/solver/nonlinear/iterations_per_strategy
+
+
+
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+

Description

+Number of iterations for every substrategy before reset.

+
+/solver/nonlinear/iterations_per_strategy/* (int) +

/solver/nonlinear/iterations_per_strategy/*
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+
+
+
+
+/solver/nonlinear/line_search (object) +

/solver/nonlinear/line_search
+
+

Description

+Settings for line-search in the nonlinear solver

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/method (string) +

/solver/nonlinear/line_search/method
+
+

Description

+Line-search type

+

Default: 'RobustArmijo'

+

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

+
+
+/solver/nonlinear/line_search/use_grad_norm_tol (float) +

/solver/nonlinear/line_search/use_grad_norm_tol
+
+

Description

+When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

+

Default: 1e-06

+
+
+/solver/nonlinear/line_search/min_step_size (float) +

/solver/nonlinear/line_search/min_step_size
+
+

Description

+Mimimum step size

+

Default: 1e-10

+
+
+/solver/nonlinear/line_search/max_step_size_iter (int) +

/solver/nonlinear/line_search/max_step_size_iter
+
+

Description

+Number of iterations

+

Default: 30

+
+
+/solver/nonlinear/line_search/min_step_size_final (float) +

/solver/nonlinear/line_search/min_step_size_final
+
+

Description

+Mimimum step size for last descent strategy

+

Default: 1e-20

+
+
+/solver/nonlinear/line_search/max_step_size_iter_final (int) +

/solver/nonlinear/line_search/max_step_size_iter_final
+
+

Description

+Number of iterations for last descent strategy

+

Default: 100

+
+
+/solver/nonlinear/line_search/default_init_step_size (float) +

/solver/nonlinear/line_search/default_init_step_size
+
+

Description

+Initial step size

+

Default: 1

+
+
+/solver/nonlinear/line_search/step_ratio (float) +

/solver/nonlinear/line_search/step_ratio
+
+

Description

+Ratio used to decrease the step

+

Default: 0.5

+
+
+/solver/nonlinear/line_search/Armijo (object) +

/solver/nonlinear/line_search/Armijo
+
+

Description

+Options for Armijo.

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/Armijo/c (float) +

/solver/nonlinear/line_search/Armijo/c
+
+

Description

+Armijo c parameter.

+

Default: 0.0001

+
+
+
+/solver/nonlinear/line_search/RobustArmijo (object) +

/solver/nonlinear/line_search/RobustArmijo
+
+

Description

+Options for RobustArmijo.

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float) +

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance
+
+

Description

+Relative tolerance on E to switch to approximate.

+

Default: 0.1

+
+
+
+
+/solver/nonlinear/allow_out_of_iterations (bool) +

/solver/nonlinear/allow_out_of_iterations
+
+

Description

+If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

+

Default: False

+
+
+/solver/nonlinear/L-BFGS (object) +

/solver/nonlinear/L-BFGS
+
+

Description

+Options for LBFGS.

+

Default: None +

Optional

+
+/solver/nonlinear/L-BFGS/history_size (int) +

/solver/nonlinear/L-BFGS/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/nonlinear/L-BFGS-B (object) +

/solver/nonlinear/L-BFGS-B
+
+

Description

+Options for the boxed L-BFGS.

+

Default: None +

Optional

+
+/solver/nonlinear/L-BFGS-B/history_size (int) +

/solver/nonlinear/L-BFGS-B/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/nonlinear/Newton (object) +

/solver/nonlinear/Newton
+
+

Description

+Options for Newton.

+

Default: None +

Optional

+
+/solver/nonlinear/Newton/residual_tolerance (float) +

/solver/nonlinear/Newton/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/Newton/reg_weight_min (float) +

/solver/nonlinear/Newton/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/Newton/reg_weight_max (float) +

/solver/nonlinear/Newton/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/Newton/reg_weight_inc (float) +

/solver/nonlinear/Newton/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+/solver/nonlinear/Newton/force_psd_projection (bool) +

/solver/nonlinear/Newton/force_psd_projection
+
+

Description

+Force the Hessian to be PSD when using second order solvers (i.e., Newton’s method).

+

Default: False

+
+
+/solver/nonlinear/Newton/use_psd_projection (bool) +

/solver/nonlinear/Newton/use_psd_projection
+
+

Description

+Use PSD as fallback using second order solvers (i.e., Newton’s method).

+

Default: True

+
+
+/solver/nonlinear/Newton/use_psd_projection_in_regularized (bool) +

/solver/nonlinear/Newton/use_psd_projection_in_regularized
+
+

Description

+Use PSD in regularized Newton.

+

Default: True

+
+
+
+/solver/nonlinear/ADAM (object) +

/solver/nonlinear/ADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/nonlinear/ADAM/alpha (float) +

/solver/nonlinear/ADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/ADAM/beta_1 (float) +

/solver/nonlinear/ADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/ADAM/beta_2 (float) +

/solver/nonlinear/ADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/ADAM/epsilon (float) +

/solver/nonlinear/ADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+/solver/nonlinear/StochasticADAM (object) +

/solver/nonlinear/StochasticADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/nonlinear/StochasticADAM/alpha (float) +

/solver/nonlinear/StochasticADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/StochasticADAM/beta_1 (float) +

/solver/nonlinear/StochasticADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/StochasticADAM/beta_2 (float) +

/solver/nonlinear/StochasticADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/StochasticADAM/epsilon (float) +

/solver/nonlinear/StochasticADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/nonlinear/StochasticADAM/erase_component_probability (float) +

/solver/nonlinear/StochasticADAM/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for ADAM.

+

Default: 0.3

+
+
+
+/solver/nonlinear/StochasticGradientDescent (object) +

/solver/nonlinear/StochasticGradientDescent
+
+

Description

+Options for Stochastic Gradient Descent.

+

Default: None +

Optional

+
+/solver/nonlinear/StochasticGradientDescent/erase_component_probability (float) +

/solver/nonlinear/StochasticGradientDescent/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for StochasticGradientDescent.

+

Default: 0.3

+
+
+
+/solver/nonlinear/box_constraints (object) +

/solver/nonlinear/box_constraints
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: None +

Optional

+
+/solver/nonlinear/box_constraints/bounds (list) +

/solver/nonlinear/box_constraints/bounds
+
+

Description

+Box constraints on optimization variables.

+
+/solver/nonlinear/box_constraints/bounds/* +
/solver/nonlinear/box_constraints/bounds/*
+
+
+
+
+

Description

+Box constraint values on optimization variables.

+
+/solver/nonlinear/box_constraints/bounds/*/* (float) +

/solver/nonlinear/box_constraints/bounds/*/*
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+
+
+
+/solver/nonlinear/box_constraints/max_change +
/solver/nonlinear/box_constraints/max_change
+
+
+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

+

Default: -1

+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints.

+
+/solver/nonlinear/box_constraints/max_change/* (float) +

/solver/nonlinear/box_constraints/max_change/*
+
+

Description

+Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

+
+
+
+
+
+
+
+/solver/nonlinear/advanced (object) +

/solver/nonlinear/advanced
+
+

Description

+Nonlinear solver advanced options

+

Default: None +

Optional

+
+/solver/nonlinear/advanced/f_delta (float) +

/solver/nonlinear/advanced/f_delta
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/advanced/f_delta_step_tol (int) +

/solver/nonlinear/advanced/f_delta_step_tol
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 100

+
+
+/solver/nonlinear/advanced/derivative_along_delta_x_tol (float) +

/solver/nonlinear/advanced/derivative_along_delta_x_tol
+
+

Description

+Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/advanced/apply_gradient_fd (string) +

/solver/nonlinear/advanced/apply_gradient_fd
+
+

Description

+Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

+

Default: 'None'

+

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

+
+
+/solver/nonlinear/advanced/gradient_fd_eps (float) +

/solver/nonlinear/advanced/gradient_fd_eps
+
+

Description

+Expensive Option: Eps for finite difference to verify gradient of energy.

+

Default: 1e-07

+
+
+
+
+/solver/augmented_lagrangian (object) +

/solver/augmented_lagrangian
+
+

Description

+Parameters for the AL for imposing Dirichlet BCs. If the bc are not imposable, we add \(w\|u - bc\|^2\) to the energy (\(u\) is the solution at the Dirichlet nodes and \(bc\) are the Dirichlet values). After convergence, we try to impose bc again. The algorithm computes E + a/2*AL^2 - lambda AL, where E is the current energy (elastic, inertia, contact, etc.) and AL is the augmented Lagrangian energy. a starts at initial_weight and, in case DBC cannot be imposed, we update a as a *= scaling until max_weight. See IPC additional material

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/initial_weight (float) +

/solver/augmented_lagrangian/initial_weight
+
+

Description

+Initial weight for AL

+

Default: 1000000.0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/scaling (float) +

/solver/augmented_lagrangian/scaling
+
+

Description

+Multiplication factor

+

Default: 2.0

+
+
+/solver/augmented_lagrangian/max_weight (float) +

/solver/augmented_lagrangian/max_weight
+
+

Description

+Maximum weight

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/eta (float) +

/solver/augmented_lagrangian/eta
+
+

Description

+Tolerance for increasing the weight or updating the lagrangian

+

Default: 0.99

+

Range: [0, 1]

+
+
+/solver/augmented_lagrangian/nonlinear (object) +

/solver/augmented_lagrangian/nonlinear
+
+

Description

+Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver +
/solver/augmented_lagrangian/nonlinear/solver
+
+
+
+
+

Description

+Nonlinear solver type

+

Default: 'Newton'

+

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

+
+
+

Description

+List of solvers for ballback. Eg, [{‘type’:’Newton’}, {‘type’:’L-BFGS’}, {‘type’:’GradientDescent’}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

+
+/solver/augmented_lagrangian/nonlinear/solver/* +
/solver/augmented_lagrangian/nonlinear/solver/*
+
+
+
+
+

Type: Newton +

Description

+Options for Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: ProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: RegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: RegularizedProjectedNewton +

Description

+Options for regularized projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseNewton +

Description

+Options for Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseRegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseRegularizedProjectedNewton +

Description

+Options for projected regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: GradientDescent +

Description

+Options for Gradient Descent. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: StochasticGradientDescent +

Description

+Options for Stochastic Gradient Descent. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+

Type: L-BFGS +

Description

+Options for L-BFGS. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/history_size (int) +

/solver/augmented_lagrangian/nonlinear/solver/*/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+

Type: BFGS +

Description

+Options for BFGS. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: ADAM +

Description

+Options for ADAM. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+

Type: StochasticADAM +

Description

+Options for ADAM. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+
+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/x_delta (float) +

/solver/augmented_lagrangian/nonlinear/x_delta
+
+

Description

+Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/grad_norm (float) +

/solver/augmented_lagrangian/nonlinear/grad_norm
+
+

Description

+Stopping criterion: Minimal gradient norm for the iterations to continue.

+

Default: 1e-08

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol (float) +

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol
+
+

Description

+Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

+

Default: 1e-10

+
+
+/solver/augmented_lagrangian/nonlinear/max_iterations (int) +

/solver/augmented_lagrangian/nonlinear/max_iterations
+
+

Description

+Maximum number of iterations for a nonlinear solve.

+

Default: 500

+
+
+/solver/augmented_lagrangian/nonlinear/iterations_per_strategy +
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy
+
+
+
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+

Description

+Number of iterations for every substrategy before reset.

+
+/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/* (int) +

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/*
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/line_search (object) +

/solver/augmented_lagrangian/nonlinear/line_search
+
+

Description

+Settings for line-search in the nonlinear solver

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/method (string) +

/solver/augmented_lagrangian/nonlinear/line_search/method
+
+

Description

+Line-search type

+

Default: 'RobustArmijo'

+

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol (float) +

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol
+
+

Description

+When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

+

Default: 1e-06

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/min_step_size (float) +

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size
+
+

Description

+Mimimum step size

+

Default: 1e-10

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter (int) +

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter
+
+

Description

+Number of iterations

+

Default: 30

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final (float) +

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final
+
+

Description

+Mimimum step size for last descent strategy

+

Default: 1e-20

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final (int) +

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final
+
+

Description

+Number of iterations for last descent strategy

+

Default: 100

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size (float) +

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size
+
+

Description

+Initial step size

+

Default: 1

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/step_ratio (float) +

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio
+
+

Description

+Ratio used to decrease the step

+

Default: 0.5

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/Armijo (object) +

/solver/augmented_lagrangian/nonlinear/line_search/Armijo
+
+

Description

+Options for Armijo.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c (float) +

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c
+
+

Description

+Armijo c parameter.

+

Default: 0.0001

+
+
+
+/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo (object) +

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo
+
+

Description

+Options for RobustArmijo.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance
+
+

Description

+Relative tolerance on E to switch to approximate.

+

Default: 0.1

+
+
+
+
+/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations (bool) +

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations
+
+

Description

+If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

+

Default: False

+
+
+/solver/augmented_lagrangian/nonlinear/L-BFGS (object) +

/solver/augmented_lagrangian/nonlinear/L-BFGS
+
+

Description

+Options for LBFGS.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size (int) +

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/augmented_lagrangian/nonlinear/L-BFGS-B (object) +

/solver/augmented_lagrangian/nonlinear/L-BFGS-B
+
+

Description

+Options for the boxed L-BFGS.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size (int) +

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/augmented_lagrangian/nonlinear/Newton (object) +

/solver/augmented_lagrangian/nonlinear/Newton
+
+

Description

+Options for Newton.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection
+
+

Description

+Force the Hessian to be PSD when using second order solvers (i.e., Newton’s method).

+

Default: False

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection
+
+

Description

+Use PSD as fallback using second order solvers (i.e., Newton’s method).

+

Default: True

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized
+
+

Description

+Use PSD in regularized Newton.

+

Default: True

+
+
+
+/solver/augmented_lagrangian/nonlinear/ADAM (object) +

/solver/augmented_lagrangian/nonlinear/ADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/ADAM/alpha (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM (object) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for ADAM.

+

Default: 0.3

+
+
+
+/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent (object) +

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent
+
+

Description

+Options for Stochastic Gradient Descent.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for StochasticGradientDescent.

+

Default: 0.3

+
+
+
+/solver/augmented_lagrangian/nonlinear/box_constraints (object) +

/solver/augmented_lagrangian/nonlinear/box_constraints
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds (list) +

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds
+
+

Description

+Box constraints on optimization variables.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* +
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*
+
+
+
+
+

Description

+Box constraint values on optimization variables.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/* (float) +

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/*
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/box_constraints/max_change +
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change
+
+
+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

+

Default: -1

+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/* (float) +

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/*
+
+

Description

+Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

+
+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/advanced (object) +

/solver/augmented_lagrangian/nonlinear/advanced
+
+

Description

+Nonlinear solver advanced options

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/advanced/f_delta (float) +

/solver/augmented_lagrangian/nonlinear/advanced/f_delta
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol (int) +

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 100

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol (float) +

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol
+
+

Description

+Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd (string) +

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd
+
+

Description

+Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

+

Default: 'None'

+

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps (float) +

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps
+
+

Description

+Expensive Option: Eps for finite difference to verify gradient of energy.

+

Default: 1e-07

+
+
+
+
+
+/solver/contact (object) +

/solver/contact
+
+

Description

+Settings for contact handling in the solver.

+

Default: None +

Optional

+
+/solver/contact/CCD (object) +

/solver/contact/CCD
+
+

Description

+CCD options

+

Default: None +

Optional

+
+/solver/contact/CCD/broad_phase (string) +

/solver/contact/CCD/broad_phase
+
+

Description

+Broad phase collision-detection algorithm to use

+

Default: 'hash_grid'

+

Options: ['hash_grid', 'HG', 'brute_force', 'BF', 'spatial_hash', 'SH', 'bvh', 'BVH', 'sweep_and_prune', 'SAP', 'sweep_and_tiniest_queue', 'STQ']

+
+
+/solver/contact/CCD/tolerance (float) +

/solver/contact/CCD/tolerance
+
+

Description

+CCD tolerance

+

Default: 1e-06

+
+
+/solver/contact/CCD/max_iterations (int) +

/solver/contact/CCD/max_iterations
+
+

Description

+Maximum number of iterations for continuous collision detection

+

Default: 1000000

+
+
+
+/solver/contact/friction_iterations (int) +

/solver/contact/friction_iterations
+
+

Description

+Maximum number of update iterations for lagged friction formulation (see IPC paper).

+

Default: 1

+
+
+/solver/contact/friction_convergence_tol (float) +

/solver/contact/friction_convergence_tol
+
+

Description

+Tolerence for friction convergence

+

Default: 0.01

+
+
+/solver/contact/barrier_stiffness +
/solver/contact/barrier_stiffness
+
+
+
+
+

Description

+How coefficient of clamped log-barrier function for contact is updated

+

Default: 'adaptive'

+

Options: ['adaptive']

+
+
+

Description

+The coefficient of clamped log-barrier function value when not adaptive

+
+
+
+
+
+
+/solver/rayleigh_damping (list) +

/solver/rayleigh_damping
+
+

Description

+Apply Rayleigh damping.

+
+/solver/rayleigh_damping/* +
/solver/rayleigh_damping/*
+
+
+
+
+

Description

+Apply Rayleigh damping to the given Form with a stiffness ratio. +

Required

+
+/solver/rayleigh_damping/*/form (string) +

/solver/rayleigh_damping/*/form
+
+

Description

+Form to damp.

+

Options: ['elasticity', 'contact', 'friction']

+
+
+/solver/rayleigh_damping/*/stiffness_ratio (float) +

/solver/rayleigh_damping/*/stiffness_ratio
+
+

Description

+Ratio of to damp (stiffness = 0.75 * stiffness_ratio * Δt³).

+

Range: [0, inf]

+
+

Optional

+
+/solver/rayleigh_damping/*/lagging_iterations (int) +

/solver/rayleigh_damping/*/lagging_iterations
+
+

Description

+Maximum number of update iterations for lagging.

+

Default: 1

+
+
+
+

Description

+Apply Rayleigh damping to the given Form with a stiffness. +

Required

+
+/solver/rayleigh_damping/*/form (string) +

/solver/rayleigh_damping/*/form
+
+

Description

+Form to damp.

+

Options: ['elasticity', 'contact', 'friction']

+
+
+/solver/rayleigh_damping/*/stiffness (float) +

/solver/rayleigh_damping/*/stiffness
+
+

Description

+Ratio of to damp.

+

Range: [0, inf]

+
+

Optional

+
+/solver/rayleigh_damping/*/lagging_iterations (int) +

/solver/rayleigh_damping/*/lagging_iterations
+
+

Description

+Maximum number of update iterations for lagging.

+

Default: 1

+
+
+
+
+
+
+
+/solver/advanced (object) +

/solver/advanced
+
+

Description

+Advanced settings for the solver

+

Default: None +

Optional

+
+/solver/advanced/cache_size (int) +

/solver/advanced/cache_size
+
+

Description

+Maximum number of elements when the assembly values are cached.

+

Default: 900000

+
+
+/solver/advanced/lump_mass_matrix (bool) +

/solver/advanced/lump_mass_matrix
+
+

Description

+If true, use diagonal mass matrix with entries on the diagonal equal to the sum of entries in each row of the full mass matrix.}

+

Default: False

+
+
+/solver/advanced/lagged_regularization_weight (float) +

/solver/advanced/lagged_regularization_weight
+
+

Description

+Weight used to regularize singular static problems.

+

Default: 0

+
+
+/solver/advanced/lagged_regularization_iterations (int) +

/solver/advanced/lagged_regularization_iterations
+
+

Description

+Number of regularize singular static problems.

+

Default: 1

+
+
+
+
+/boundary_conditions (object) +

/boundary_conditions
+
+

Description

+The settings for boundary conditions.

+

Default: None +

Optional

+
+/boundary_conditions/rhs +
/boundary_conditions/rhs
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/rhs/value +
/boundary_conditions/rhs/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/rhs/unit (string) +

/boundary_conditions/rhs/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Right-hand side of the system being solved for vector-valued PDEs.

+
+/boundary_conditions/rhs/* +
/boundary_conditions/rhs/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/rhs/*/value +
/boundary_conditions/rhs/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/rhs/*/unit (string) +

/boundary_conditions/rhs/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/boundary_conditions/dirichlet_boundary (list) +

/boundary_conditions/dirichlet_boundary
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/dirichlet_boundary/* +
/boundary_conditions/dirichlet_boundary/*
+
+
+
+
+

Description

+Dirichlet boundary condition.

+

Default: None +

Required

+
+/boundary_conditions/dirichlet_boundary/*/id +
/boundary_conditions/dirichlet_boundary/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value (list) +

/boundary_conditions/dirichlet_boundary/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/dirichlet_boundary/*/value/* +
/boundary_conditions/dirichlet_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/dirichlet_boundary/*/value/*/value +
/boundary_conditions/dirichlet_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value/*/unit (string) +

/boundary_conditions/dirichlet_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Dirichlet boundary condition specified per timestep.

+
+/boundary_conditions/dirichlet_boundary/*/value/*/* +
/boundary_conditions/dirichlet_boundary/*/value/*/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/dirichlet_boundary/*/value/*/*/value +
/boundary_conditions/dirichlet_boundary/*/value/*/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value/*/*/unit (string) +

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/time_reference (list) +

/boundary_conditions/dirichlet_boundary/*/time_reference
+
+

Description

+List of times when the Dirichlet boundary condition is specified

+
+/boundary_conditions/dirichlet_boundary/*/time_reference/* (float) +

/boundary_conditions/dirichlet_boundary/*/time_reference/*
+
+

Description

+Values of Dirichlet boundary condition for timestep

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/* +
/boundary_conditions/dirichlet_boundary/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/to (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/from (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/dimension (list) +

/boundary_conditions/dirichlet_boundary/*/dimension
+
+

Description

+List of 2 (2D) or 3 (3D) boolean values indicating if the Dirichlet boundary condition is applied for a particular dimension.

+
+/boundary_conditions/dirichlet_boundary/*/dimension/* (bool) +

/boundary_conditions/dirichlet_boundary/*/dimension/*
+
+

Description

+value

+

Default: True

+
+
+
+
+

Description

+Dirichlet boundary condition loaded from a file, , 1 for scalar, ⅔ for tensor depending on dimension.

+
+
+
+
+
+
+/boundary_conditions/neumann_boundary (list) +

/boundary_conditions/neumann_boundary
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/neumann_boundary/* (object) +

/boundary_conditions/neumann_boundary/*
+
+

Description

+Neumann boundary condition

+

Default: None +

Required

+
+/boundary_conditions/neumann_boundary/*/id +
/boundary_conditions/neumann_boundary/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/neumann_boundary/*/value (list) +

/boundary_conditions/neumann_boundary/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/neumann_boundary/*/value/* +
/boundary_conditions/neumann_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/neumann_boundary/*/value/*/value +
/boundary_conditions/neumann_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/neumann_boundary/*/value/*/unit (string) +

/boundary_conditions/neumann_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation (list) +

/boundary_conditions/neumann_boundary/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/neumann_boundary/*/interpolation/* +
/boundary_conditions/neumann_boundary/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/to (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/from (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary (list) +

/boundary_conditions/normal_aligned_neumann_boundary
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/normal_aligned_neumann_boundary/* (object) +

/boundary_conditions/normal_aligned_neumann_boundary/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/id (int) +

/boundary_conditions/normal_aligned_neumann_boundary/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value +
/boundary_conditions/normal_aligned_neumann_boundary/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value/value +
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation +
/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+/boundary_conditions/pressure_boundary (list) +

/boundary_conditions/pressure_boundary
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/pressure_boundary/* (object) +

/boundary_conditions/pressure_boundary/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/pressure_boundary/*/id (int) +

/boundary_conditions/pressure_boundary/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/pressure_boundary/*/value +
/boundary_conditions/pressure_boundary/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_boundary/*/value/value +
/boundary_conditions/pressure_boundary/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_boundary/*/value/unit (string) +

/boundary_conditions/pressure_boundary/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Values of pressure boundary condition specified per timestep

+
+/boundary_conditions/pressure_boundary/*/value/* +
/boundary_conditions/pressure_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_boundary/*/value/*/value +
/boundary_conditions/pressure_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_boundary/*/value/*/unit (string) +

/boundary_conditions/pressure_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/pressure_boundary/*/time_reference (list) +

/boundary_conditions/pressure_boundary/*/time_reference
+
+

Description

+List of times when the pressure boundary condition is specified

+
+/boundary_conditions/pressure_boundary/*/time_reference/* (float) +

/boundary_conditions/pressure_boundary/*/time_reference/*
+
+

Description

+Values of pressure boundary condition for timestep

+
+
+
+
+
+/boundary_conditions/pressure_cavity (list) +

/boundary_conditions/pressure_cavity
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/pressure_cavity/* (object) +

/boundary_conditions/pressure_cavity/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/pressure_cavity/*/id (int) +

/boundary_conditions/pressure_cavity/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/pressure_cavity/*/value +
/boundary_conditions/pressure_cavity/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_cavity/*/value/value +
/boundary_conditions/pressure_cavity/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_cavity/*/value/unit (string) +

/boundary_conditions/pressure_cavity/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+/boundary_conditions/obstacle_displacements (list) +

/boundary_conditions/obstacle_displacements
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/obstacle_displacements/* (object) +

/boundary_conditions/obstacle_displacements/*
+
+

Description

+Obstacle displacements

+

Default: None +

Required

+
+/boundary_conditions/obstacle_displacements/*/id +
/boundary_conditions/obstacle_displacements/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/obstacle_displacements/*/value (list) +

/boundary_conditions/obstacle_displacements/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/obstacle_displacements/*/value/* +
/boundary_conditions/obstacle_displacements/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/obstacle_displacements/*/value/*/value +
/boundary_conditions/obstacle_displacements/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/obstacle_displacements/*/value/*/unit (string) +

/boundary_conditions/obstacle_displacements/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation (list) +

/boundary_conditions/obstacle_displacements/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/obstacle_displacements/*/interpolation/* +
/boundary_conditions/obstacle_displacements/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/to (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/from (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+
+/boundary_conditions/periodic_boundary (object) +

/boundary_conditions/periodic_boundary
+
+

Description

+Options for periodic boundary conditions.

+

Default: None +

Optional

+
+/boundary_conditions/periodic_boundary/enabled (bool) +

/boundary_conditions/periodic_boundary/enabled
+
+

Description

+

Default: False

+
+
+/boundary_conditions/periodic_boundary/tolerance (float) +

/boundary_conditions/periodic_boundary/tolerance
+
+

Description

+Relative tolerance of deciding periodic correspondence

+

Default: 1e-05

+
+
+/boundary_conditions/periodic_boundary/correspondence (list) +

/boundary_conditions/periodic_boundary/correspondence
+
+

Description

+Periodic directions for periodic boundary conditions. If not specified, default to axis-aligned directions.

+
+/boundary_conditions/periodic_boundary/correspondence/* (list) +

/boundary_conditions/periodic_boundary/correspondence/*
+
+

Description

+One periodic direction.

+
+/boundary_conditions/periodic_boundary/correspondence/*/* (float) +

/boundary_conditions/periodic_boundary/correspondence/*/*
+
+

Description

+One entry of a periodic direction.

+
+
+
+
+/boundary_conditions/periodic_boundary/linear_displacement_offset (list) +

/boundary_conditions/periodic_boundary/linear_displacement_offset
+
+

Description

+
+/boundary_conditions/periodic_boundary/linear_displacement_offset/* (list) +

/boundary_conditions/periodic_boundary/linear_displacement_offset/*
+
+

Description

+
+/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* +
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*
+
+
+
+
+

Description

+
+
+

Description

+
+
+
+
+
+
+
+/boundary_conditions/periodic_boundary/fixed_macro_strain (list) +

/boundary_conditions/periodic_boundary/fixed_macro_strain
+
+

Description

+
+/boundary_conditions/periodic_boundary/fixed_macro_strain/* (int) +

/boundary_conditions/periodic_boundary/fixed_macro_strain/*
+
+

Description

+
+
+
+/boundary_conditions/periodic_boundary/force_zero_mean (bool) +

/boundary_conditions/periodic_boundary/force_zero_mean
+
+

Description

+The periodic solution is not unique, set to true to find the solution with zero mean.

+

Default: False

+
+
+
+
+/initial_conditions (object) +

/initial_conditions
+
+

Description

+Initial conditions for the time-dependent problem, imposed on the main variable, its derivative or second derivative

+

Default: None +

Optional

+
+/initial_conditions/solution (list) +

/initial_conditions/solution
+
+

Description

+initial solution

+
+/initial_conditions/solution/* (object) +

/initial_conditions/solution/*
+
+

Description

+A list of (ID, value) pairs defining the initial conditions for the main variable values. Ids are set by selection, and values can be floats or formulas.

+

Default: None +

Required

+
+/initial_conditions/solution/*/id (int) +

/initial_conditions/solution/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/solution/*/value (list) +

/initial_conditions/solution/*/value
+
+

Description

+value of the solution

+
+/initial_conditions/solution/*/value/* +
/initial_conditions/solution/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/solution/*/value/*/value +
/initial_conditions/solution/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/solution/*/value/*/unit (string) +

/initial_conditions/solution/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+/initial_conditions/velocity (list) +

/initial_conditions/velocity
+
+

Description

+initial velocity

+
+/initial_conditions/velocity/* (object) +

/initial_conditions/velocity/*
+
+

Description

+A list of (ID, value) pairs defining the initial conditions for the first derivative of the main variable values. Ids are set by selection, and values can be floats or formulas.

+

Default: None +

Required

+
+/initial_conditions/velocity/*/id (int) +

/initial_conditions/velocity/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/velocity/*/value (list) +

/initial_conditions/velocity/*/value
+
+

Description

+value od the initial velocity

+
+/initial_conditions/velocity/*/value/* +
/initial_conditions/velocity/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/velocity/*/value/*/value +
/initial_conditions/velocity/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/velocity/*/value/*/unit (string) +

/initial_conditions/velocity/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+/initial_conditions/acceleration (list) +

/initial_conditions/acceleration
+
+

Description

+initial acceleration

+
+/initial_conditions/acceleration/* (object) +

/initial_conditions/acceleration/*
+
+

Description

+entries

+

Default: None +

Required

+
+/initial_conditions/acceleration/*/id (int) +

/initial_conditions/acceleration/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/acceleration/*/value (list) +

/initial_conditions/acceleration/*/value
+
+

Description

+value

+
+/initial_conditions/acceleration/*/value/* +
/initial_conditions/acceleration/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/acceleration/*/value/*/value +
/initial_conditions/acceleration/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/acceleration/*/value/*/unit (string) +

/initial_conditions/acceleration/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/output (object) +

/output
+
+

Description

+output settings

+

Default: None +

Optional

+
+/output/directory (string) +

/output/directory
+
+

Description

+Directory for output files.

+

Default: ''

+
+
+/output/log (object) +

/output/log
+
+

Description

+Setting for the output log.

+

Default: None +

Optional

+
+/output/log/level +
/output/log/level
+
+
+
+
+

Description

+Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

+

Range: [0, 6]

+
+
+

Description

+Level of logging.

+

Default: 'debug'

+

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

+
+
+
+
+
+/output/log/file_level +
/output/log/file_level
+
+
+
+
+

Description

+Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

+

Range: [0, 6]

+
+
+

Description

+Level of logging.

+

Default: 'trace'

+

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

+
+
+
+
+
+/output/log/path (string) +

/output/log/path
+
+

Description

+File where to save the log; empty string is output to terminal.

+

Default: ''

+
+
+/output/log/quiet (bool) +

/output/log/quiet
+
+

Description

+Disable cout for logging.

+

Default: False

+
+
+
+/output/json (string) +

/output/json
+
+

Description

+File name for JSON output statistics on time/error/etc.

+

Default: ''

+
+
+/output/restart_json (string) +

/output/restart_json
+
+

Description

+File name for JSON output to restart the simulation.

+

Default: ''

+
+
+/output/paraview (object) +

/output/paraview
+
+

Description

+Output in paraview format

+

Default: None +

Optional

+
+/output/paraview/file_name (string) +

/output/paraview/file_name
+
+

Description

+Paraview output file name

+

Default: ''

+
+
+/output/paraview/vismesh_rel_area (float) +

/output/paraview/vismesh_rel_area
+
+

Description

+relative area for the upsampled visualisation mesh

+

Default: 1e-05

+
+
+/output/paraview/skip_frame (int) +

/output/paraview/skip_frame
+
+

Description

+export every skip_frame-th frames for time dependent simulations

+

Default: 1

+
+
+/output/paraview/high_order_mesh (bool) +

/output/paraview/high_order_mesh
+
+

Description

+Enables/disables high-order output for paraview. Supported only for isoparametric or linear meshes with high-order solutions.

+

Default: True

+
+
+/output/paraview/volume (bool) +

/output/paraview/volume
+
+

Description

+Export volumetric mesh

+

Default: True

+
+
+/output/paraview/surface (bool) +

/output/paraview/surface
+
+

Description

+Export surface mesh (in 2d polygon)

+

Default: False

+
+
+/output/paraview/wireframe (bool) +

/output/paraview/wireframe
+
+

Description

+Export the wireframe of the mesh

+

Default: False

+
+
+/output/paraview/points (bool) +

/output/paraview/points
+
+

Description

+Export the Dirichlet points

+

Default: False

+
+
+/output/paraview/options (object) +

/output/paraview/options
+
+

Description

+Optional fields in the output

+

Default: None +

Optional

+
+/output/paraview/options/use_hdf5 (bool) +

/output/paraview/options/use_hdf5
+
+

Description

+If true, export the data as hdf5, compatible with paraview >5.11

+

Default: False

+
+
+/output/paraview/options/material (bool) +

/output/paraview/options/material
+
+

Description

+If true, write out material values sampled on the vertices of the mesh

+

Default: False

+
+
+/output/paraview/options/body_ids (bool) +

/output/paraview/options/body_ids
+
+

Description

+Export volumes ids

+

Default: False

+
+
+/output/paraview/options/contact_forces (bool) +

/output/paraview/options/contact_forces
+
+

Description

+If true, write out contact forces for surface

+

Default: False

+
+
+/output/paraview/options/friction_forces (bool) +

/output/paraview/options/friction_forces
+
+

Description

+If true, write out friction forces for surface

+

Default: False

+
+
+/output/paraview/options/velocity (bool) +

/output/paraview/options/velocity
+
+

Description

+If true, write out velocities

+

Default: False

+
+
+/output/paraview/options/acceleration (bool) +

/output/paraview/options/acceleration
+
+

Description

+If true, write out accelerations

+

Default: False

+
+
+/output/paraview/options/scalar_values (bool) +

/output/paraview/options/scalar_values
+
+

Description

+If true, write out scalar values

+

Default: True

+
+
+/output/paraview/options/tensor_values (bool) +

/output/paraview/options/tensor_values
+
+

Description

+If true, write out tensor values

+

Default: True

+
+
+/output/paraview/options/discretization_order (bool) +

/output/paraview/options/discretization_order
+
+

Description

+If true, write out discretization order

+

Default: True

+
+
+/output/paraview/options/nodes (bool) +

/output/paraview/options/nodes
+
+

Description

+If true, write out node order

+

Default: True

+
+
+/output/paraview/options/forces (bool) +

/output/paraview/options/forces
+
+

Description

+If true, write out all variational forces on the FE mesh

+

Default: False

+
+
+
+
+/output/data (object) +

/output/data
+
+

Description

+File names to write output data to.

+

Default: None +

Optional

+
+/output/data/solution (string) +

/output/data/solution
+
+

Description

+Main variable solution. Unrolled [xyz, xyz, …] using PolyFEM ordering. If reorder_nodes exports the solution with the same order the vertices of the input mesh as a #n x d file

+

Default: ''

+
+
+/output/data/full_mat (string) +

/output/data/full_mat
+
+

Description

+System matrix without boundary conditions. Doesn’t work for nonlinear problems

+

Default: ''

+
+
+/output/data/stiffness_mat (string) +

/output/data/stiffness_mat
+
+

Description

+System matrix with boundary conditions. Doesn’t work for nonlinear problems

+

Default: ''

+
+
+/output/data/stress_mat (string) +

/output/data/stress_mat
+
+

Description

+Exports stress

+

Default: ''

+
+
+/output/data/state (string) +

/output/data/state
+
+

Description

+Writes the complete state in PolyFEM hdf5 format, used to restart the sim

+

Default: ''

+
+
+/output/data/rest_mesh (string) +

/output/data/rest_mesh
+
+

Description

+Writes the rest mesh in MSH format, used to restart the sim

+

Default: ''

+
+
+/output/data/mises (string) +

/output/data/mises
+
+

Description

+File name to write per-node Von Mises stress values to.

+

Default: ''

+
+
+/output/data/nodes (string) +

/output/data/nodes
+
+

Description

+Writes the FEM nodes

+

Default: ''

+
+
+/output/data/advanced (object) +

/output/data/advanced
+
+

Description

+advanced options

+

Default: None +

Optional

+
+/output/data/advanced/reorder_nodes (bool) +

/output/data/advanced/reorder_nodes
+
+

Description

+Reorder nodes accodring to input

+

Default: False

+
+
+
+
+/output/advanced (object) +

/output/advanced
+
+

Description

+Additional output options

+

Default: None +

Optional

+
+/output/advanced/timestep_prefix (string) +

/output/advanced/timestep_prefix
+
+

Description

+Prefix for output file names for each time step, the final file is step_i.[vtu|vtm] where i is the time index.

+

Default: 'step_'

+
+
+/output/advanced/sol_on_grid (float) +

/output/advanced/sol_on_grid
+
+

Description

+exports the solution sampled on a grid, specify the grid spacing

+

Default: -1

+
+
+/output/advanced/compute_error (bool) +

/output/advanced/compute_error
+
+

Description

+Enables the computation of the error. If no reference solution is provided, return the norms of the solution

+

Default: True

+
+
+/output/advanced/sol_at_node (int) +

/output/advanced/sol_at_node
+
+

Description

+Write out solution values at a specific node. the values will be written in the output JSON file

+

Default: -1

+
+
+/output/advanced/vis_boundary_only (bool) +

/output/advanced/vis_boundary_only
+
+

Description

+saves only elements touching the boundaries

+

Default: False

+
+
+/output/advanced/curved_mesh_size (bool) +

/output/advanced/curved_mesh_size
+
+

Description

+upsample curved edges to compute mesh size

+

Default: False

+
+
+/output/advanced/save_solve_sequence_debug (bool) +

/output/advanced/save_solve_sequence_debug
+
+

Description

+saves AL internal steps, for debugging

+

Default: False

+
+
+/output/advanced/save_ccd_debug_meshes (bool) +

/output/advanced/save_ccd_debug_meshes
+
+

Description

+saves AL internal steps, for debugging

+

Default: False

+
+
+/output/advanced/save_time_sequence (bool) +

/output/advanced/save_time_sequence
+
+

Description

+saves timesteps

+

Default: True

+
+
+/output/advanced/save_nl_solve_sequence (bool) +

/output/advanced/save_nl_solve_sequence
+
+

Description

+saves obj after every nonlinear iteration, for debugging

+

Default: False

+
+
+/output/advanced/spectrum (bool) +

/output/advanced/spectrum
+
+

Description

+exports the spectrum of the matrix in the output JSON. Works only if POLYSOLVE_WITH_SPECTRA is enabled

+

Default: False

+
+
+
+/output/reference (object) +

/output/reference
+
+

Description

+Write out the analytic/numerical ground-truth solution and or its gradient

+

Default: None +

Optional

+
+/output/reference/solution (list) +

/output/reference/solution
+
+

Description

+reference solution used to compute errors

+
+/output/reference/solution/* (string) +

/output/reference/solution/*
+
+

Description

+value as a function of \(x,y,z,t\)

+

Default: ''

+
+
+
+/output/reference/gradient (list) +

/output/reference/gradient
+
+

Description

+gradient of the reference solution to compute errors

+
+/output/reference/gradient/* (string) +

/output/reference/gradient/*
+
+

Description

+value as a function of \(x,y,z,t\)

+

Default: ''

+
+
+
+
+
+/input (object) +

/input
+
+

Description

+input data

+

Default: None +

Optional

+
+/input/data (object) +

/input/data
+
+

Description

+input to restart time dependent sim

+

Default: None +

Optional

+
+/input/data/state (file) +

/input/data/state
+
+

Description

+input state as hdf5

+

Default: ''

+
+
+/input/data/reorder (bool) +

/input/data/reorder
+
+

Description

+reorder input data

+

Default: False

+
+
+
+
+/tests (object) +

/tests
+
+

Description

+Used to test to compare different norms of solutions.

+

Default: None +

Optional

+
+/tests/err_h1 (float) +

/tests/err_h1
+
+

Description

+Reference h1 solution’s norm.

+

Default: 0

+
+
+/tests/err_h1_semi (float) +

/tests/err_h1_semi
+
+

Description

+Reference h1 seminorm solution’s norm.

+

Default: 0

+
+
+/tests/err_l2 (float) +

/tests/err_l2
+
+

Description

+Reference \(L^2\) solution’s norm.

+

Default: 0

+
+
+/tests/err_linf (float) +

/tests/err_linf
+
+

Description

+Reference \(L^\infty\) solution’s norm.

+

Default: 0

+
+
+/tests/err_linf_grad (float) +

/tests/err_linf_grad
+
+

Description

+Reference \(L^\infty\) solution’s gradient norm.

+

Default: 0

+
+
+/tests/err_lp (float) +

/tests/err_lp
+
+

Description

+Reference \(L^8\) solution’s gradient norm.

+

Default: 0

+
+
+/tests/margin (float) +

/tests/margin
+
+

Description

+Reference tolerance used in tests.

+

Default: 1e-05

+
+
+/tests/time_steps +
/tests/time_steps
+
+
+
+
+

Description

+Number of time steps to test.

+

Default: 1

+

Range: [1, inf]

+
+
+

Description

+Number of time steps to test.

+

Options: ['all', 'static']

+
+
+
+
+
+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/_polyfem_license.txt b/_polyfem_license.txt new file mode 100644 index 00000000..0ead5a1e --- /dev/null +++ b/_polyfem_license.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 polyfem + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/assets/images/favicon.png b/assets/images/favicon.png new file mode 100644 index 00000000..1cf13b9f Binary files /dev/null and b/assets/images/favicon.png differ diff --git a/assets/javascripts/bundle.19047be9.min.js b/assets/javascripts/bundle.19047be9.min.js new file mode 100644 index 00000000..0e09ba9a --- /dev/null +++ b/assets/javascripts/bundle.19047be9.min.js @@ -0,0 +1,29 @@ +"use strict";(()=>{var Ri=Object.create;var gr=Object.defineProperty;var ki=Object.getOwnPropertyDescriptor;var Hi=Object.getOwnPropertyNames,Ht=Object.getOwnPropertySymbols,Pi=Object.getPrototypeOf,yr=Object.prototype.hasOwnProperty,on=Object.prototype.propertyIsEnumerable;var nn=(e,t,r)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,P=(e,t)=>{for(var r in t||(t={}))yr.call(t,r)&&nn(e,r,t[r]);if(Ht)for(var r of Ht(t))on.call(t,r)&&nn(e,r,t[r]);return e};var an=(e,t)=>{var r={};for(var n in e)yr.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Ht)for(var n of Ht(e))t.indexOf(n)<0&&on.call(e,n)&&(r[n]=e[n]);return r};var Pt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var $i=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Hi(t))!yr.call(e,o)&&o!==r&&gr(e,o,{get:()=>t[o],enumerable:!(n=ki(t,o))||n.enumerable});return e};var yt=(e,t,r)=>(r=e!=null?Ri(Pi(e)):{},$i(t||!e||!e.__esModule?gr(r,"default",{value:e,enumerable:!0}):r,e));var cn=Pt((xr,sn)=>{(function(e,t){typeof xr=="object"&&typeof sn!="undefined"?t():typeof define=="function"&&define.amd?define(t):t()})(xr,function(){"use strict";function e(r){var n=!0,o=!1,i=null,s={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0};function a(T){return!!(T&&T!==document&&T.nodeName!=="HTML"&&T.nodeName!=="BODY"&&"classList"in T&&"contains"in T.classList)}function c(T){var Qe=T.type,De=T.tagName;return!!(De==="INPUT"&&s[Qe]&&!T.readOnly||De==="TEXTAREA"&&!T.readOnly||T.isContentEditable)}function f(T){T.classList.contains("focus-visible")||(T.classList.add("focus-visible"),T.setAttribute("data-focus-visible-added",""))}function u(T){T.hasAttribute("data-focus-visible-added")&&(T.classList.remove("focus-visible"),T.removeAttribute("data-focus-visible-added"))}function p(T){T.metaKey||T.altKey||T.ctrlKey||(a(r.activeElement)&&f(r.activeElement),n=!0)}function m(T){n=!1}function d(T){a(T.target)&&(n||c(T.target))&&f(T.target)}function h(T){a(T.target)&&(T.target.classList.contains("focus-visible")||T.target.hasAttribute("data-focus-visible-added"))&&(o=!0,window.clearTimeout(i),i=window.setTimeout(function(){o=!1},100),u(T.target))}function v(T){document.visibilityState==="hidden"&&(o&&(n=!0),G())}function G(){document.addEventListener("mousemove",N),document.addEventListener("mousedown",N),document.addEventListener("mouseup",N),document.addEventListener("pointermove",N),document.addEventListener("pointerdown",N),document.addEventListener("pointerup",N),document.addEventListener("touchmove",N),document.addEventListener("touchstart",N),document.addEventListener("touchend",N)}function oe(){document.removeEventListener("mousemove",N),document.removeEventListener("mousedown",N),document.removeEventListener("mouseup",N),document.removeEventListener("pointermove",N),document.removeEventListener("pointerdown",N),document.removeEventListener("pointerup",N),document.removeEventListener("touchmove",N),document.removeEventListener("touchstart",N),document.removeEventListener("touchend",N)}function N(T){T.target.nodeName&&T.target.nodeName.toLowerCase()==="html"||(n=!1,oe())}document.addEventListener("keydown",p,!0),document.addEventListener("mousedown",m,!0),document.addEventListener("pointerdown",m,!0),document.addEventListener("touchstart",m,!0),document.addEventListener("visibilitychange",v,!0),G(),r.addEventListener("focus",d,!0),r.addEventListener("blur",h,!0),r.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&r.host?r.host.setAttribute("data-js-focus-visible",""):r.nodeType===Node.DOCUMENT_NODE&&(document.documentElement.classList.add("js-focus-visible"),document.documentElement.setAttribute("data-js-focus-visible",""))}if(typeof window!="undefined"&&typeof document!="undefined"){window.applyFocusVisiblePolyfill=e;var t;try{t=new CustomEvent("focus-visible-polyfill-ready")}catch(r){t=document.createEvent("CustomEvent"),t.initCustomEvent("focus-visible-polyfill-ready",!1,!1,{})}window.dispatchEvent(t)}typeof document!="undefined"&&e(document)})});var fn=Pt(Er=>{(function(e){var t=function(){try{return!!Symbol.iterator}catch(f){return!1}},r=t(),n=function(f){var u={next:function(){var p=f.shift();return{done:p===void 0,value:p}}};return r&&(u[Symbol.iterator]=function(){return u}),u},o=function(f){return encodeURIComponent(f).replace(/%20/g,"+")},i=function(f){return decodeURIComponent(String(f).replace(/\+/g," "))},s=function(){var f=function(p){Object.defineProperty(this,"_entries",{writable:!0,value:{}});var m=typeof p;if(m!=="undefined")if(m==="string")p!==""&&this._fromString(p);else if(p instanceof f){var d=this;p.forEach(function(oe,N){d.append(N,oe)})}else if(p!==null&&m==="object")if(Object.prototype.toString.call(p)==="[object Array]")for(var h=0;hd[0]?1:0}),f._entries&&(f._entries={});for(var p=0;p1?i(d[1]):"")}})})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er);(function(e){var t=function(){try{var o=new e.URL("b","http://a");return o.pathname="c d",o.href==="http://a/c%20d"&&o.searchParams}catch(i){return!1}},r=function(){var o=e.URL,i=function(c,f){typeof c!="string"&&(c=String(c)),f&&typeof f!="string"&&(f=String(f));var u=document,p;if(f&&(e.location===void 0||f!==e.location.href)){f=f.toLowerCase(),u=document.implementation.createHTMLDocument(""),p=u.createElement("base"),p.href=f,u.head.appendChild(p);try{if(p.href.indexOf(f)!==0)throw new Error(p.href)}catch(T){throw new Error("URL unable to set base "+f+" due to "+T)}}var m=u.createElement("a");m.href=c,p&&(u.body.appendChild(m),m.href=m.href);var d=u.createElement("input");if(d.type="url",d.value=c,m.protocol===":"||!/:/.test(m.href)||!d.checkValidity()&&!f)throw new TypeError("Invalid URL");Object.defineProperty(this,"_anchorElement",{value:m});var h=new e.URLSearchParams(this.search),v=!0,G=!0,oe=this;["append","delete","set"].forEach(function(T){var Qe=h[T];h[T]=function(){Qe.apply(h,arguments),v&&(G=!1,oe.search=h.toString(),G=!0)}}),Object.defineProperty(this,"searchParams",{value:h,enumerable:!0});var N=void 0;Object.defineProperty(this,"_updateSearchParams",{enumerable:!1,configurable:!1,writable:!1,value:function(){this.search!==N&&(N=this.search,G&&(v=!1,this.searchParams._fromString(this.search),v=!0))}})},s=i.prototype,a=function(c){Object.defineProperty(s,c,{get:function(){return this._anchorElement[c]},set:function(f){this._anchorElement[c]=f},enumerable:!0})};["hash","host","hostname","port","protocol"].forEach(function(c){a(c)}),Object.defineProperty(s,"search",{get:function(){return this._anchorElement.search},set:function(c){this._anchorElement.search=c,this._updateSearchParams()},enumerable:!0}),Object.defineProperties(s,{toString:{get:function(){var c=this;return function(){return c.href}}},href:{get:function(){return this._anchorElement.href.replace(/\?$/,"")},set:function(c){this._anchorElement.href=c,this._updateSearchParams()},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\/?)/,"/")},set:function(c){this._anchorElement.pathname=c},enumerable:!0},origin:{get:function(){var c={"http:":80,"https:":443,"ftp:":21}[this._anchorElement.protocol],f=this._anchorElement.port!=c&&this._anchorElement.port!=="";return this._anchorElement.protocol+"//"+this._anchorElement.hostname+(f?":"+this._anchorElement.port:"")},enumerable:!0},password:{get:function(){return""},set:function(c){},enumerable:!0},username:{get:function(){return""},set:function(c){},enumerable:!0}}),i.createObjectURL=function(c){return o.createObjectURL.apply(o,arguments)},i.revokeObjectURL=function(c){return o.revokeObjectURL.apply(o,arguments)},e.URL=i};if(t()||r(),e.location!==void 0&&!("origin"in e.location)){var n=function(){return e.location.protocol+"//"+e.location.hostname+(e.location.port?":"+e.location.port:"")};try{Object.defineProperty(e.location,"origin",{get:n,enumerable:!0})}catch(o){setInterval(function(){e.location.origin=n()},100)}}})(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Er)});var Kr=Pt((Mt,qr)=>{/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */(function(t,r){typeof Mt=="object"&&typeof qr=="object"?qr.exports=r():typeof define=="function"&&define.amd?define([],r):typeof Mt=="object"?Mt.ClipboardJS=r():t.ClipboardJS=r()})(Mt,function(){return function(){var e={686:function(n,o,i){"use strict";i.d(o,{default:function(){return Ci}});var s=i(279),a=i.n(s),c=i(370),f=i.n(c),u=i(817),p=i.n(u);function m(j){try{return document.execCommand(j)}catch(O){return!1}}var d=function(O){var E=p()(O);return m("cut"),E},h=d;function v(j){var O=document.documentElement.getAttribute("dir")==="rtl",E=document.createElement("textarea");E.style.fontSize="12pt",E.style.border="0",E.style.padding="0",E.style.margin="0",E.style.position="absolute",E.style[O?"right":"left"]="-9999px";var H=window.pageYOffset||document.documentElement.scrollTop;return E.style.top="".concat(H,"px"),E.setAttribute("readonly",""),E.value=j,E}var G=function(O,E){var H=v(O);E.container.appendChild(H);var I=p()(H);return m("copy"),H.remove(),I},oe=function(O){var E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body},H="";return typeof O=="string"?H=G(O,E):O instanceof HTMLInputElement&&!["text","search","url","tel","password"].includes(O==null?void 0:O.type)?H=G(O.value,E):(H=p()(O),m("copy")),H},N=oe;function T(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?T=function(E){return typeof E}:T=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},T(j)}var Qe=function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},E=O.action,H=E===void 0?"copy":E,I=O.container,q=O.target,Me=O.text;if(H!=="copy"&&H!=="cut")throw new Error('Invalid "action" value, use either "copy" or "cut"');if(q!==void 0)if(q&&T(q)==="object"&&q.nodeType===1){if(H==="copy"&&q.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if(H==="cut"&&(q.hasAttribute("readonly")||q.hasAttribute("disabled")))throw new Error(`Invalid "target" attribute. You can't cut text from elements with "readonly" or "disabled" attributes`)}else throw new Error('Invalid "target" value, use a valid Element');if(Me)return N(Me,{container:I});if(q)return H==="cut"?h(q):N(q,{container:I})},De=Qe;function $e(j){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?$e=function(E){return typeof E}:$e=function(E){return E&&typeof Symbol=="function"&&E.constructor===Symbol&&E!==Symbol.prototype?"symbol":typeof E},$e(j)}function wi(j,O){if(!(j instanceof O))throw new TypeError("Cannot call a class as a function")}function rn(j,O){for(var E=0;E0&&arguments[0]!==void 0?arguments[0]:{};this.action=typeof I.action=="function"?I.action:this.defaultAction,this.target=typeof I.target=="function"?I.target:this.defaultTarget,this.text=typeof I.text=="function"?I.text:this.defaultText,this.container=$e(I.container)==="object"?I.container:document.body}},{key:"listenClick",value:function(I){var q=this;this.listener=f()(I,"click",function(Me){return q.onClick(Me)})}},{key:"onClick",value:function(I){var q=I.delegateTarget||I.currentTarget,Me=this.action(q)||"copy",kt=De({action:Me,container:this.container,target:this.target(q),text:this.text(q)});this.emit(kt?"success":"error",{action:Me,text:kt,trigger:q,clearSelection:function(){q&&q.focus(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(I){return vr("action",I)}},{key:"defaultTarget",value:function(I){var q=vr("target",I);if(q)return document.querySelector(q)}},{key:"defaultText",value:function(I){return vr("text",I)}},{key:"destroy",value:function(){this.listener.destroy()}}],[{key:"copy",value:function(I){var q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{container:document.body};return N(I,q)}},{key:"cut",value:function(I){return h(I)}},{key:"isSupported",value:function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:["copy","cut"],q=typeof I=="string"?[I]:I,Me=!!document.queryCommandSupported;return q.forEach(function(kt){Me=Me&&!!document.queryCommandSupported(kt)}),Me}}]),E}(a()),Ci=Ai},828:function(n){var o=9;if(typeof Element!="undefined"&&!Element.prototype.matches){var i=Element.prototype;i.matches=i.matchesSelector||i.mozMatchesSelector||i.msMatchesSelector||i.oMatchesSelector||i.webkitMatchesSelector}function s(a,c){for(;a&&a.nodeType!==o;){if(typeof a.matches=="function"&&a.matches(c))return a;a=a.parentNode}}n.exports=s},438:function(n,o,i){var s=i(828);function a(u,p,m,d,h){var v=f.apply(this,arguments);return u.addEventListener(m,v,h),{destroy:function(){u.removeEventListener(m,v,h)}}}function c(u,p,m,d,h){return typeof u.addEventListener=="function"?a.apply(null,arguments):typeof m=="function"?a.bind(null,document).apply(null,arguments):(typeof u=="string"&&(u=document.querySelectorAll(u)),Array.prototype.map.call(u,function(v){return a(v,p,m,d,h)}))}function f(u,p,m,d){return function(h){h.delegateTarget=s(h.target,p),h.delegateTarget&&d.call(u,h)}}n.exports=c},879:function(n,o){o.node=function(i){return i!==void 0&&i instanceof HTMLElement&&i.nodeType===1},o.nodeList=function(i){var s=Object.prototype.toString.call(i);return i!==void 0&&(s==="[object NodeList]"||s==="[object HTMLCollection]")&&"length"in i&&(i.length===0||o.node(i[0]))},o.string=function(i){return typeof i=="string"||i instanceof String},o.fn=function(i){var s=Object.prototype.toString.call(i);return s==="[object Function]"}},370:function(n,o,i){var s=i(879),a=i(438);function c(m,d,h){if(!m&&!d&&!h)throw new Error("Missing required arguments");if(!s.string(d))throw new TypeError("Second argument must be a String");if(!s.fn(h))throw new TypeError("Third argument must be a Function");if(s.node(m))return f(m,d,h);if(s.nodeList(m))return u(m,d,h);if(s.string(m))return p(m,d,h);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}function f(m,d,h){return m.addEventListener(d,h),{destroy:function(){m.removeEventListener(d,h)}}}function u(m,d,h){return Array.prototype.forEach.call(m,function(v){v.addEventListener(d,h)}),{destroy:function(){Array.prototype.forEach.call(m,function(v){v.removeEventListener(d,h)})}}}function p(m,d,h){return a(document.body,m,d,h)}n.exports=c},817:function(n){function o(i){var s;if(i.nodeName==="SELECT")i.focus(),s=i.value;else if(i.nodeName==="INPUT"||i.nodeName==="TEXTAREA"){var a=i.hasAttribute("readonly");a||i.setAttribute("readonly",""),i.select(),i.setSelectionRange(0,i.value.length),a||i.removeAttribute("readonly"),s=i.value}else{i.hasAttribute("contenteditable")&&i.focus();var c=window.getSelection(),f=document.createRange();f.selectNodeContents(i),c.removeAllRanges(),c.addRange(f),s=c.toString()}return s}n.exports=o},279:function(n){function o(){}o.prototype={on:function(i,s,a){var c=this.e||(this.e={});return(c[i]||(c[i]=[])).push({fn:s,ctx:a}),this},once:function(i,s,a){var c=this;function f(){c.off(i,f),s.apply(a,arguments)}return f._=s,this.on(i,f,a)},emit:function(i){var s=[].slice.call(arguments,1),a=((this.e||(this.e={}))[i]||[]).slice(),c=0,f=a.length;for(c;c{"use strict";/*! + * escape-html + * Copyright(c) 2012-2013 TJ Holowaychuk + * Copyright(c) 2015 Andreas Lubbe + * Copyright(c) 2015 Tiancheng "Timothy" Gu + * MIT Licensed + */var ns=/["'&<>]/;Go.exports=os;function os(e){var t=""+e,r=ns.exec(t);if(!r)return t;var n,o="",i=0,s=0;for(i=r.index;i0&&i[i.length-1])&&(f[0]===6||f[0]===2)){r=0;continue}if(f[0]===3&&(!i||f[1]>i[0]&&f[1]=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function W(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),o,i=[],s;try{for(;(t===void 0||t-- >0)&&!(o=n.next()).done;)i.push(o.value)}catch(a){s={error:a}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i}function D(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,i;n1||a(m,d)})})}function a(m,d){try{c(n[m](d))}catch(h){p(i[0][3],h)}}function c(m){m.value instanceof et?Promise.resolve(m.value.v).then(f,u):p(i[0][2],m)}function f(m){a("next",m)}function u(m){a("throw",m)}function p(m,d){m(d),i.shift(),i.length&&a(i[0][0],i[0][1])}}function ln(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],r;return t?t.call(e):(e=typeof Ee=="function"?Ee(e):e[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=e[i]&&function(s){return new Promise(function(a,c){s=e[i](s),o(a,c,s.done,s.value)})}}function o(i,s,a,c){Promise.resolve(c).then(function(f){i({value:f,done:a})},s)}}function C(e){return typeof e=="function"}function at(e){var t=function(n){Error.call(n),n.stack=new Error().stack},r=e(t);return r.prototype=Object.create(Error.prototype),r.prototype.constructor=r,r}var It=at(function(e){return function(r){e(this),this.message=r?r.length+` errors occurred during unsubscription: +`+r.map(function(n,o){return o+1+") "+n.toString()}).join(` + `):"",this.name="UnsubscriptionError",this.errors=r}});function Ve(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}var Ie=function(){function e(t){this.initialTeardown=t,this.closed=!1,this._parentage=null,this._finalizers=null}return e.prototype.unsubscribe=function(){var t,r,n,o,i;if(!this.closed){this.closed=!0;var s=this._parentage;if(s)if(this._parentage=null,Array.isArray(s))try{for(var a=Ee(s),c=a.next();!c.done;c=a.next()){var f=c.value;f.remove(this)}}catch(v){t={error:v}}finally{try{c&&!c.done&&(r=a.return)&&r.call(a)}finally{if(t)throw t.error}}else s.remove(this);var u=this.initialTeardown;if(C(u))try{u()}catch(v){i=v instanceof It?v.errors:[v]}var p=this._finalizers;if(p){this._finalizers=null;try{for(var m=Ee(p),d=m.next();!d.done;d=m.next()){var h=d.value;try{mn(h)}catch(v){i=i!=null?i:[],v instanceof It?i=D(D([],W(i)),W(v.errors)):i.push(v)}}}catch(v){n={error:v}}finally{try{d&&!d.done&&(o=m.return)&&o.call(m)}finally{if(n)throw n.error}}}if(i)throw new It(i)}},e.prototype.add=function(t){var r;if(t&&t!==this)if(this.closed)mn(t);else{if(t instanceof e){if(t.closed||t._hasParent(this))return;t._addParent(this)}(this._finalizers=(r=this._finalizers)!==null&&r!==void 0?r:[]).push(t)}},e.prototype._hasParent=function(t){var r=this._parentage;return r===t||Array.isArray(r)&&r.includes(t)},e.prototype._addParent=function(t){var r=this._parentage;this._parentage=Array.isArray(r)?(r.push(t),r):r?[r,t]:t},e.prototype._removeParent=function(t){var r=this._parentage;r===t?this._parentage=null:Array.isArray(r)&&Ve(r,t)},e.prototype.remove=function(t){var r=this._finalizers;r&&Ve(r,t),t instanceof e&&t._removeParent(this)},e.EMPTY=function(){var t=new e;return t.closed=!0,t}(),e}();var Sr=Ie.EMPTY;function jt(e){return e instanceof Ie||e&&"closed"in e&&C(e.remove)&&C(e.add)&&C(e.unsubscribe)}function mn(e){C(e)?e():e.unsubscribe()}var Le={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1};var st={setTimeout:function(e,t){for(var r=[],n=2;n0},enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(r){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,r)},t.prototype._subscribe=function(r){return this._throwIfClosed(),this._checkFinalizedStatuses(r),this._innerSubscribe(r)},t.prototype._innerSubscribe=function(r){var n=this,o=this,i=o.hasError,s=o.isStopped,a=o.observers;return i||s?Sr:(this.currentObservers=null,a.push(r),new Ie(function(){n.currentObservers=null,Ve(a,r)}))},t.prototype._checkFinalizedStatuses=function(r){var n=this,o=n.hasError,i=n.thrownError,s=n.isStopped;o?r.error(i):s&&r.complete()},t.prototype.asObservable=function(){var r=new F;return r.source=this,r},t.create=function(r,n){return new En(r,n)},t}(F);var En=function(e){ie(t,e);function t(r,n){var o=e.call(this)||this;return o.destination=r,o.source=n,o}return t.prototype.next=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.next)===null||o===void 0||o.call(n,r)},t.prototype.error=function(r){var n,o;(o=(n=this.destination)===null||n===void 0?void 0:n.error)===null||o===void 0||o.call(n,r)},t.prototype.complete=function(){var r,n;(n=(r=this.destination)===null||r===void 0?void 0:r.complete)===null||n===void 0||n.call(r)},t.prototype._subscribe=function(r){var n,o;return(o=(n=this.source)===null||n===void 0?void 0:n.subscribe(r))!==null&&o!==void 0?o:Sr},t}(x);var Et={now:function(){return(Et.delegate||Date).now()},delegate:void 0};var wt=function(e){ie(t,e);function t(r,n,o){r===void 0&&(r=1/0),n===void 0&&(n=1/0),o===void 0&&(o=Et);var i=e.call(this)||this;return i._bufferSize=r,i._windowTime=n,i._timestampProvider=o,i._buffer=[],i._infiniteTimeWindow=!0,i._infiniteTimeWindow=n===1/0,i._bufferSize=Math.max(1,r),i._windowTime=Math.max(1,n),i}return t.prototype.next=function(r){var n=this,o=n.isStopped,i=n._buffer,s=n._infiniteTimeWindow,a=n._timestampProvider,c=n._windowTime;o||(i.push(r),!s&&i.push(a.now()+c)),this._trimBuffer(),e.prototype.next.call(this,r)},t.prototype._subscribe=function(r){this._throwIfClosed(),this._trimBuffer();for(var n=this._innerSubscribe(r),o=this,i=o._infiniteTimeWindow,s=o._buffer,a=s.slice(),c=0;c0?e.prototype.requestAsyncId.call(this,r,n,o):(r.actions.push(this),r._scheduled||(r._scheduled=ut.requestAnimationFrame(function(){return r.flush(void 0)})))},t.prototype.recycleAsyncId=function(r,n,o){var i;if(o===void 0&&(o=0),o!=null?o>0:this.delay>0)return e.prototype.recycleAsyncId.call(this,r,n,o);var s=r.actions;n!=null&&((i=s[s.length-1])===null||i===void 0?void 0:i.id)!==n&&(ut.cancelAnimationFrame(n),r._scheduled=void 0)},t}(Wt);var Tn=function(e){ie(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.flush=function(r){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var o=this.actions,i;r=r||o.shift();do if(i=r.execute(r.state,r.delay))break;while((r=o[0])&&r.id===n&&o.shift());if(this._active=!1,i){for(;(r=o[0])&&r.id===n&&o.shift();)r.unsubscribe();throw i}},t}(Dt);var Te=new Tn(Sn);var _=new F(function(e){return e.complete()});function Vt(e){return e&&C(e.schedule)}function Cr(e){return e[e.length-1]}function Ye(e){return C(Cr(e))?e.pop():void 0}function Oe(e){return Vt(Cr(e))?e.pop():void 0}function zt(e,t){return typeof Cr(e)=="number"?e.pop():t}var pt=function(e){return e&&typeof e.length=="number"&&typeof e!="function"};function Nt(e){return C(e==null?void 0:e.then)}function qt(e){return C(e[ft])}function Kt(e){return Symbol.asyncIterator&&C(e==null?void 0:e[Symbol.asyncIterator])}function Qt(e){return new TypeError("You provided "+(e!==null&&typeof e=="object"?"an invalid object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}function Ni(){return typeof Symbol!="function"||!Symbol.iterator?"@@iterator":Symbol.iterator}var Yt=Ni();function Gt(e){return C(e==null?void 0:e[Yt])}function Bt(e){return pn(this,arguments,function(){var r,n,o,i;return $t(this,function(s){switch(s.label){case 0:r=e.getReader(),s.label=1;case 1:s.trys.push([1,,9,10]),s.label=2;case 2:return[4,et(r.read())];case 3:return n=s.sent(),o=n.value,i=n.done,i?[4,et(void 0)]:[3,5];case 4:return[2,s.sent()];case 5:return[4,et(o)];case 6:return[4,s.sent()];case 7:return s.sent(),[3,2];case 8:return[3,10];case 9:return r.releaseLock(),[7];case 10:return[2]}})})}function Jt(e){return C(e==null?void 0:e.getReader)}function U(e){if(e instanceof F)return e;if(e!=null){if(qt(e))return qi(e);if(pt(e))return Ki(e);if(Nt(e))return Qi(e);if(Kt(e))return On(e);if(Gt(e))return Yi(e);if(Jt(e))return Gi(e)}throw Qt(e)}function qi(e){return new F(function(t){var r=e[ft]();if(C(r.subscribe))return r.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")})}function Ki(e){return new F(function(t){for(var r=0;r=2;return function(n){return n.pipe(e?A(function(o,i){return e(o,i,n)}):de,ge(1),r?He(t):Vn(function(){return new Zt}))}}function zn(){for(var e=[],t=0;t=2,!0))}function pe(e){e===void 0&&(e={});var t=e.connector,r=t===void 0?function(){return new x}:t,n=e.resetOnError,o=n===void 0?!0:n,i=e.resetOnComplete,s=i===void 0?!0:i,a=e.resetOnRefCountZero,c=a===void 0?!0:a;return function(f){var u,p,m,d=0,h=!1,v=!1,G=function(){p==null||p.unsubscribe(),p=void 0},oe=function(){G(),u=m=void 0,h=v=!1},N=function(){var T=u;oe(),T==null||T.unsubscribe()};return y(function(T,Qe){d++,!v&&!h&&G();var De=m=m!=null?m:r();Qe.add(function(){d--,d===0&&!v&&!h&&(p=$r(N,c))}),De.subscribe(Qe),!u&&d>0&&(u=new rt({next:function($e){return De.next($e)},error:function($e){v=!0,G(),p=$r(oe,o,$e),De.error($e)},complete:function(){h=!0,G(),p=$r(oe,s),De.complete()}}),U(T).subscribe(u))})(f)}}function $r(e,t){for(var r=[],n=2;ne.next(document)),e}function K(e,t=document){return Array.from(t.querySelectorAll(e))}function z(e,t=document){let r=ce(e,t);if(typeof r=="undefined")throw new ReferenceError(`Missing element: expected "${e}" to be present`);return r}function ce(e,t=document){return t.querySelector(e)||void 0}function _e(){return document.activeElement instanceof HTMLElement&&document.activeElement||void 0}function tr(e){return L(b(document.body,"focusin"),b(document.body,"focusout")).pipe(ke(1),l(()=>{let t=_e();return typeof t!="undefined"?e.contains(t):!1}),V(e===_e()),B())}function Xe(e){return{x:e.offsetLeft,y:e.offsetTop}}function Qn(e){return L(b(window,"load"),b(window,"resize")).pipe(Ce(0,Te),l(()=>Xe(e)),V(Xe(e)))}function rr(e){return{x:e.scrollLeft,y:e.scrollTop}}function dt(e){return L(b(e,"scroll"),b(window,"resize")).pipe(Ce(0,Te),l(()=>rr(e)),V(rr(e)))}var Gn=function(){if(typeof Map!="undefined")return Map;function e(t,r){var n=-1;return t.some(function(o,i){return o[0]===r?(n=i,!0):!1}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(r){var n=e(this.__entries__,r),o=this.__entries__[n];return o&&o[1]},t.prototype.set=function(r,n){var o=e(this.__entries__,r);~o?this.__entries__[o][1]=n:this.__entries__.push([r,n])},t.prototype.delete=function(r){var n=this.__entries__,o=e(n,r);~o&&n.splice(o,1)},t.prototype.has=function(r){return!!~e(this.__entries__,r)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(r,n){n===void 0&&(n=null);for(var o=0,i=this.__entries__;o0},e.prototype.connect_=function(){!Dr||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),ga?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){!Dr||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var r=t.propertyName,n=r===void 0?"":r,o=va.some(function(i){return!!~n.indexOf(i)});o&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Bn=function(e,t){for(var r=0,n=Object.keys(t);r0},e}(),Xn=typeof WeakMap!="undefined"?new WeakMap:new Gn,Zn=function(){function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var r=ya.getInstance(),n=new Aa(t,r,this);Xn.set(this,n)}return e}();["observe","unobserve","disconnect"].forEach(function(e){Zn.prototype[e]=function(){var t;return(t=Xn.get(this))[e].apply(t,arguments)}});var Ca=function(){return typeof nr.ResizeObserver!="undefined"?nr.ResizeObserver:Zn}(),eo=Ca;var to=new x,Ra=$(()=>k(new eo(e=>{for(let t of e)to.next(t)}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function he(e){return{width:e.offsetWidth,height:e.offsetHeight}}function ye(e){return Ra.pipe(S(t=>t.observe(e)),g(t=>to.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(()=>he(e)))),V(he(e)))}function bt(e){return{width:e.scrollWidth,height:e.scrollHeight}}function ar(e){let t=e.parentElement;for(;t&&(e.scrollWidth<=t.scrollWidth&&e.scrollHeight<=t.scrollHeight);)t=(e=t).parentElement;return t?e:void 0}var ro=new x,ka=$(()=>k(new IntersectionObserver(e=>{for(let t of e)ro.next(t)},{threshold:0}))).pipe(g(e=>L(ze,k(e)).pipe(R(()=>e.disconnect()))),J(1));function sr(e){return ka.pipe(S(t=>t.observe(e)),g(t=>ro.pipe(A(({target:r})=>r===e),R(()=>t.unobserve(e)),l(({isIntersecting:r})=>r))))}function no(e,t=16){return dt(e).pipe(l(({y:r})=>{let n=he(e),o=bt(e);return r>=o.height-n.height-t}),B())}var cr={drawer:z("[data-md-toggle=drawer]"),search:z("[data-md-toggle=search]")};function oo(e){return cr[e].checked}function Ke(e,t){cr[e].checked!==t&&cr[e].click()}function Ue(e){let t=cr[e];return b(t,"change").pipe(l(()=>t.checked),V(t.checked))}function Ha(e,t){switch(e.constructor){case HTMLInputElement:return e.type==="radio"?/^Arrow/.test(t):!0;case HTMLSelectElement:case HTMLTextAreaElement:return!0;default:return e.isContentEditable}}function Pa(){return L(b(window,"compositionstart").pipe(l(()=>!0)),b(window,"compositionend").pipe(l(()=>!1))).pipe(V(!1))}function io(){let e=b(window,"keydown").pipe(A(t=>!(t.metaKey||t.ctrlKey)),l(t=>({mode:oo("search")?"search":"global",type:t.key,claim(){t.preventDefault(),t.stopPropagation()}})),A(({mode:t,type:r})=>{if(t==="global"){let n=_e();if(typeof n!="undefined")return!Ha(n,r)}return!0}),pe());return Pa().pipe(g(t=>t?_:e))}function le(){return new URL(location.href)}function ot(e){location.href=e.href}function ao(){return new x}function so(e,t){if(typeof t=="string"||typeof t=="number")e.innerHTML+=t.toString();else if(t instanceof Node)e.appendChild(t);else if(Array.isArray(t))for(let r of t)so(e,r)}function M(e,t,...r){let n=document.createElement(e);if(t)for(let o of Object.keys(t))typeof t[o]!="undefined"&&(typeof t[o]!="boolean"?n.setAttribute(o,t[o]):n.setAttribute(o,""));for(let o of r)so(n,o);return n}function fr(e){if(e>999){let t=+((e-950)%1e3>99);return`${((e+1e-6)/1e3).toFixed(t)}k`}else return e.toString()}function co(){return location.hash.substring(1)}function Vr(e){let t=M("a",{href:e});t.addEventListener("click",r=>r.stopPropagation()),t.click()}function $a(e){return L(b(window,"hashchange"),e).pipe(l(co),V(co()),A(t=>t.length>0),J(1))}function fo(e){return $a(e).pipe(l(t=>ce(`[id="${t}"]`)),A(t=>typeof t!="undefined"))}function zr(e){let t=matchMedia(e);return er(r=>t.addListener(()=>r(t.matches))).pipe(V(t.matches))}function uo(){let e=matchMedia("print");return L(b(window,"beforeprint").pipe(l(()=>!0)),b(window,"afterprint").pipe(l(()=>!1))).pipe(V(e.matches))}function Nr(e,t){return e.pipe(g(r=>r?t():_))}function ur(e,t={credentials:"same-origin"}){return ue(fetch(`${e}`,t)).pipe(fe(()=>_),g(r=>r.status!==200?Tt(()=>new Error(r.statusText)):k(r)))}function We(e,t){return ur(e,t).pipe(g(r=>r.json()),J(1))}function po(e,t){let r=new DOMParser;return ur(e,t).pipe(g(n=>n.text()),l(n=>r.parseFromString(n,"text/xml")),J(1))}function pr(e){let t=M("script",{src:e});return $(()=>(document.head.appendChild(t),L(b(t,"load"),b(t,"error").pipe(g(()=>Tt(()=>new ReferenceError(`Invalid script: ${e}`))))).pipe(l(()=>{}),R(()=>document.head.removeChild(t)),ge(1))))}function lo(){return{x:Math.max(0,scrollX),y:Math.max(0,scrollY)}}function mo(){return L(b(window,"scroll",{passive:!0}),b(window,"resize",{passive:!0})).pipe(l(lo),V(lo()))}function ho(){return{width:innerWidth,height:innerHeight}}function bo(){return b(window,"resize",{passive:!0}).pipe(l(ho),V(ho()))}function vo(){return Q([mo(),bo()]).pipe(l(([e,t])=>({offset:e,size:t})),J(1))}function lr(e,{viewport$:t,header$:r}){let n=t.pipe(Z("size")),o=Q([n,r]).pipe(l(()=>Xe(e)));return Q([r,t,o]).pipe(l(([{height:i},{offset:s,size:a},{x:c,y:f}])=>({offset:{x:s.x-c,y:s.y-f+i},size:a})))}(()=>{function e(n,o){parent.postMessage(n,o||"*")}function t(...n){return n.reduce((o,i)=>o.then(()=>new Promise(s=>{let a=document.createElement("script");a.src=i,a.onload=s,document.body.appendChild(a)})),Promise.resolve())}var r=class extends EventTarget{constructor(n){super(),this.url=n,this.m=i=>{i.source===this.w&&(this.dispatchEvent(new MessageEvent("message",{data:i.data})),this.onmessage&&this.onmessage(i))},this.e=(i,s,a,c,f)=>{if(s===`${this.url}`){let u=new ErrorEvent("error",{message:i,filename:s,lineno:a,colno:c,error:f});this.dispatchEvent(u),this.onerror&&this.onerror(u)}};let o=document.createElement("iframe");o.hidden=!0,document.body.appendChild(this.iframe=o),this.w.document.open(),this.w.document.write(` + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

C++ Library

+

Build

+

PolyFEM in C++ uses modern CMake and is cross-platform.

+

Compilation

+

All the C++ dependencies required to build the code are automatically downloaded through CMake. We test PolyFEM on macOS, Linux, and Windows, and it should build out-of-the-box with CMake:

+
mkdir build
+cd build
+cmake ..
+make -j4
+
+

Optional

+

Optionally, the formulas for higher-order bases can be computed at CMake time using a Python script. If you choose to do so, PolyFEM requires a working installation of Python and some additional packages to build correctly:

+
    +
  • numpy and sympy (optional)
  • +
  • quadpy (optional)
  • +
+

Usage

+

The main executable, ./PolyFEM_bin, can as command-line interface. Simply run:

+
./PolyFEM_bin --help
+
+

More detailed documentation can be found in the tutorial.

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/contact/contact.md b/details/contact/contact.md new file mode 100644 index 00000000..7db2f3cc --- /dev/null +++ b/details/contact/contact.md @@ -0,0 +1,6 @@ +PolyFEM uses Incremental Potential Contact (IPC) [[Li et al. 2020]](https://ipc-sim.github.io/) to handle contacts. + +IPC in PolyFEM is implemented through the use of the [IPC Toolkit](https://ipc-sim.github.io/ipc-toolkit/). + +!!! todo + Describe the IPC formulation and parameters. \ No newline at end of file diff --git a/details/contact/index.html b/details/contact/index.html new file mode 100644 index 00000000..0b565c68 --- /dev/null +++ b/details/contact/index.html @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Contact - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Contact

+ +

PolyFEM uses Incremental Potential Contact (IPC) [Li et al. 2020] to handle contacts.

+

IPC in PolyFEM is implemented through the use of the IPC Toolkit.

+
+

Todo

+

Describe the IPC formulation and parameters.

+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/formulations/formulations.md b/details/formulations/formulations.md new file mode 100644 index 00000000..0fdd961d --- /dev/null +++ b/details/formulations/formulations.md @@ -0,0 +1,197 @@ + + +The following formulations are available in the PolyFEM list of possible formulations. The constants can be set in `params`. All formulations support boundary conditions. For the elasticity formulations we output: + +**Cauchy stress tensor** + +\[ + \sigma = \frac 1 J \frac{\partial \Psi}{\partial F} F^T +\] + +**Frist Piola Kirchhoff stress tensor** ([Wikipedia](https://en.wikipedia.org/wiki/Stress_(mechanics)#Piola–Kirchhoff_stress_tensor)) + +\[ + P = J \sigma F^{-T} +\] + +**Second Piola Kirchhoff stress tensor** ([Wikipedia](https://en.wikipedia.org/wiki/Stress_(mechanics)#2nd_Piola–Kirchhoff_stress_tensor)) + +\[ + S = J F^{-1} \sigma F^{-T}, +\] + +where \(\Psi\) is the energy density, \(F\) the deformation gradient, and \(J=\det(F)\). + + +## Scalar + +### Laplacian +* **Constants:** none +* **Description:** solve for \(-\Delta u = f\) + +### Bilaplacian (mixed) +* **Constants:** none +* **Description:** solve for \(-\Delta^2 u = f\) + +### Helmholtz +* **Constants:** $k$ +* **Description:** solve for \(-\Delta u - k^2 u = f\) + +## Tensor + +### Linear Elasticity +* **Constants:** `E`/`nu`, `lambda`/`mu` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where + +\[ + \sigma[u] = 2 \mu \epsilon[u]+ \lambda \text{tr}(\epsilon[u]) I \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T + \nabla u\right) +\] + +### Hooke Linear Elasticity +* **Constants:** `elasticity_tensor`, `E`/`nu`, `lambda`/`mu` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where + +\[ + \sigma[u] = C : \epsilon[u] \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T + \nabla u\right) +\] + +where $C$ is the elasticity tensor + +### Incompressible Linear Elasticity (mixed) +* **Constants:** `E`/`nu`, `lambda`/`mu` +* **Description:** solve for + +\begin{align} +-\text{div}(2\mu\epsilon[u] + p I) &= f\\ +\text{div}(u) - \lambda^{-1}p &= 0 +\end{align} + +### Saint Venant–Kirchoff Elasticity +* **Constants:** `elasticity_tensor`, `E`/`nu`, `lambda`/`mu` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where + +\[ +\sigma[u] = C: \epsilon[u] \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T \nabla u + \nabla u^T + \nabla u\right) +\] + +where $C$ is the elasticity tensor + +### NeoHookean Elasticity +* **Constants:** `E`/`nu`, `lambda`/`mu` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where + +\[ + \sigma[u] = \mu (F[u] - F[u]^{-T}) + \lambda \ln(\det F[u]) F[u]^{-T} \qquad F[u] = \nabla u + I +\] + + + +### Mooney-Rivlin Elasticity + +* **Constants:** `c1`/`c2`/`k=1` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where $\sigma[u]=\nabla_u \Psi[u]$. The energy density $\Psi$ is + +\[ + \Psi[u] = c_1 (\widetilde{I_1} - d) + c_2 (\widetilde{I_2} - d) + \frac{k}{2} \ln^2(J) +\] + +where $d$ is the dimension (2 or 3), + +\begin{align} +F = \nabla u + I, \quad J = \det(F), \quad \tilde{F} = \frac{1}{\sqrt[d]{J}} F, \quad \widetilde{C} = \widetilde{F} \widetilde{F}^T, \\ +\widetilde{I_1} = \text{tr}\left(\widetilde{C}\right), \quad \text{and} \quad +\widetilde{I_2} = \frac{1}{2} \left(\left(\trace{\widetilde{C}}\right)^2 - \text{tr}\left(\widetilde{C}^2\right)\right). +\end{align} + +* **Reference**: [FEBio documentation](https://help.febio.org/FEBioTheory/FEBio_tm_3-4-Subsection-5.3.1.html) + + +### Incompressible Ogden Elasticity + +* **Constants:** `c`/`m`/`k` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where $\sigma[u]=\nabla_u \Psi[u]$. The energy density $\Psi$ is + +\[ + \Psi[u] = \sum_{i=1}^N \frac{c_i}{m_i^2} \left( + \sum_{j=1}^d \tilde{\lambda}_j^{m_i} - d + \right) + \frac{1}{2} K \ln(J)^2 +\] + +where $N$, the number of terms, is dictated by the number of coefficients given, $d$ is the dimension (2 or 3), $J = \det(F)$ where $F = \nabla u + I$, and $\tilde{\lambda}_j = J^{-\frac{1}{d}}\lambda_j$ are the eigenvalues of $\tilde{F}$ (same as in the [Mooney-Rivlin Elasticity](#mooney-rivlin-elasticity)). + + + +* **Reference**: [FEBio documentation](https://help.febio.org/FEBioTheory/FEBio_tm_3-4-Subsection-5.3.2.html) + + +### Unconstrained Ogden Elasticity + +* **Constants:** `mus`/`alphas`/`Ds` +* **Description:** solve for $-\text{div}(\sigma[u]) = f$ where $\sigma[u]=\nabla_u \Psi[u]$. The energy density $\Psi$ is + +\[ + \Psi[u] = \sum_{i=1}^N \frac{2 \mu_i}{\alpha_i^2} \left( + \sum_{j=1}^d \tilde{\lambda}_j^{\alpha_i} - d + \right) + \sum_{i=1}^N \frac{\left(J-1\right)^{2 i}}{D_i} +\] + +where $N$, the number of terms, is dictated by the number of coefficients given, $d$ is the dimension (2 or 3), $J = \det(F)$ where $F = \nabla u + I$, and $\tilde{\lambda}_j = J^{-\frac{1}{d}}\lambda_j$ where $\lambda_j$ are the eigenvalues of $F.$ + + + +* **Reference**: [ABAQUS documentation](https://classes.engineering.wustl.edu/2009/spring/mase5513/abaqus/docs/v6.6/books/stm/default.htm?startat=ch04s06ath124.html) + +### Viscous Damping +* **Constants:** `phi`/`psi` +* **Description:** an extra energy that represents dissipation, adding to the elastic energy in transient problems + +\[ + R(F,\dot{F})=\psi \|\dot{E}(F,\dot{F})\|^2+\frac{\phi}{2}\text{tr}^2\dot{E}(F,\dot{F}) +\] + +where $F[u] = \nabla u + I$ and $E[u] = \frac{1}{2}(F^TF-I)$. + +The above corresponds to the viscous Piola-Kirchhoff stress + +\[ + P=F(2\psi\dot{E}+\phi\text{tr}(\dot{E})I)=\nabla_2 R(F,\dot{F}). +\] + +### Stokes (mixed) +* **Constants:** `viscosity` ($\nu$) +* **Description:** solve for + +\begin{align} + -\nu\Delta u + \nabla p &= f\\ + -\text{div}(u) &= 0 +\end{align} + +### Navier–Stokes (mixed) +* **Constants:** `viscosity` ($\nu$) +* **Description:** solve for + +\begin{align} + u\cdot \nabla u -\nu\Delta u + \nabla p &= f\\ + -\text{div}(u) &= 0 +\end{align} + +## Implementing New Formulations + +!!! todo + Describe how to implement a new formulation in C++. diff --git a/details/formulations/index.html b/details/formulations/index.html new file mode 100644 index 00000000..e8085c6d --- /dev/null +++ b/details/formulations/index.html @@ -0,0 +1,1500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Formulations - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Formulations

+ + + +

The following formulations are available in the PolyFEM list of possible formulations. The constants can be set in params. All formulations support boundary conditions. For the elasticity formulations we output:

+

Cauchy stress tensor

+
\[ + \sigma = \frac 1 J \frac{\partial \Psi}{\partial F} F^T +\]
+

Frist Piola Kirchhoff stress tensor (Wikipedia)

+
\[ + P = J \sigma F^{-T} +\]
+

Second Piola Kirchhoff stress tensor (Wikipedia)

+
\[ + S = J F^{-1} \sigma F^{-T}, +\]
+

where \(\Psi\) is the energy density, \(F\) the deformation gradient, and \(J=\det(F)\).

+

Scalar

+

Laplacian

+
    +
  • Constants: none
  • +
  • Description: solve for \(-\Delta u = f\)
  • +
+

Bilaplacian (mixed)

+
    +
  • Constants: none
  • +
  • Description: solve for \(-\Delta^2 u = f\)
  • +
+

Helmholtz

+
    +
  • Constants: \(k\)
  • +
  • Description: solve for \(-\Delta u - k^2 u = f\)
  • +
+

Tensor

+

Linear Elasticity

+
    +
  • Constants: E/nu, lambda/mu
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where
  • +
+
\[ + \sigma[u] = 2 \mu \epsilon[u]+ \lambda \text{tr}(\epsilon[u]) I \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T + \nabla u\right) +\]
+

Hooke Linear Elasticity

+
    +
  • Constants: elasticity_tensor, E/nu, lambda/mu
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where
  • +
+
\[ + \sigma[u] = C : \epsilon[u] \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T + \nabla u\right) +\]
+

where \(C\) is the elasticity tensor

+

Incompressible Linear Elasticity (mixed)

+
    +
  • Constants: E/nu, lambda/mu
  • +
  • Description: solve for
  • +
+
\[\begin{align} +-\text{div}(2\mu\epsilon[u] + p I) &= f\\ +\text{div}(u) - \lambda^{-1}p &= 0 +\end{align}\]
+

Saint Venant–Kirchoff Elasticity

+
    +
  • Constants: elasticity_tensor, E/nu, lambda/mu
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where
  • +
+
\[ +\sigma[u] = C: \epsilon[u] \qquad \epsilon[u] = \frac 1 2 \left(\nabla u^T \nabla u + \nabla u^T + \nabla u\right) +\]
+

where \(C\) is the elasticity tensor

+

NeoHookean Elasticity

+
    +
  • Constants: E/nu, lambda/mu
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where
  • +
+
\[ + \sigma[u] = \mu (F[u] - F[u]^{-T}) + \lambda \ln(\det F[u]) F[u]^{-T} \qquad F[u] = \nabla u + I +\]
+ + +

Mooney-Rivlin Elasticity

+
    +
  • Constants: c1/c2/k=1
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where \(\sigma[u]=\nabla_u \Psi[u]\). The energy density \(\Psi\) is
  • +
+
\[ + \Psi[u] = c_1 (\widetilde{I_1} - d) + c_2 (\widetilde{I_2} - d) + \frac{k}{2} \ln^2(J) +\]
+

where \(d\) is the dimension (2 or 3),

+
\[\begin{align} +F = \nabla u + I, \quad J = \det(F), \quad \tilde{F} = \frac{1}{\sqrt[d]{J}} F, \quad \widetilde{C} = \widetilde{F} \widetilde{F}^T, \\ +\widetilde{I_1} = \text{tr}\left(\widetilde{C}\right), \quad \text{and} \quad +\widetilde{I_2} = \frac{1}{2} \left(\left(\trace{\widetilde{C}}\right)^2 - \text{tr}\left(\widetilde{C}^2\right)\right). +\end{align}\]
+ +

Incompressible Ogden Elasticity

+
    +
  • Constants: c/m/k
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where \(\sigma[u]=\nabla_u \Psi[u]\). The energy density \(\Psi\) is
  • +
+
\[ + \Psi[u] = \sum_{i=1}^N \frac{c_i}{m_i^2} \left( + \sum_{j=1}^d \tilde{\lambda}_j^{m_i} - d + \right) + \frac{1}{2} K \ln(J)^2 +\]
+

where \(N\), the number of terms, is dictated by the number of coefficients given, \(d\) is the dimension (2 or 3), \(J = \det(F)\) where \(F = \nabla u + I\), and \(\tilde{\lambda}_j = J^{-\frac{1}{d}}\lambda_j\) are the eigenvalues of \(\tilde{F}\) (same as in the Mooney-Rivlin Elasticity).

+ + + +

Unconstrained Ogden Elasticity

+
    +
  • Constants: mus/alphas/Ds
  • +
  • Description: solve for \(-\text{div}(\sigma[u]) = f\) where \(\sigma[u]=\nabla_u \Psi[u]\). The energy density \(\Psi\) is
  • +
+
\[ + \Psi[u] = \sum_{i=1}^N \frac{2 \mu_i}{\alpha_i^2} \left( + \sum_{j=1}^d \tilde{\lambda}_j^{\alpha_i} - d + \right) + \sum_{i=1}^N \frac{\left(J-1\right)^{2 i}}{D_i} +\]
+

where \(N\), the number of terms, is dictated by the number of coefficients given, \(d\) is the dimension (2 or 3), \(J = \det(F)\) where \(F = \nabla u + I\), and \(\tilde{\lambda}_j = J^{-\frac{1}{d}}\lambda_j\) where \(\lambda_j\) are the eigenvalues of \(F.\)

+ + + +

Viscous Damping

+
    +
  • Constants: phi/psi
  • +
  • Description: an extra energy that represents dissipation, adding to the elastic energy in transient problems
  • +
+
\[ + R(F,\dot{F})=\psi \|\dot{E}(F,\dot{F})\|^2+\frac{\phi}{2}\text{tr}^2\dot{E}(F,\dot{F}) +\]
+

where \(F[u] = \nabla u + I\) and \(E[u] = \frac{1}{2}(F^TF-I)\).

+

The above corresponds to the viscous Piola-Kirchhoff stress

+
\[ + P=F(2\psi\dot{E}+\phi\text{tr}(\dot{E})I)=\nabla_2 R(F,\dot{F}). +\]
+

Stokes (mixed)

+
    +
  • Constants: viscosity (\(\nu\))
  • +
  • Description: solve for
  • +
+
\[\begin{align} + -\nu\Delta u + \nabla p &= f\\ + -\text{div}(u) &= 0 +\end{align}\]
+ +
    +
  • Constants: viscosity (\(\nu\))
  • +
  • Description: solve for
  • +
+
\[\begin{align} + u\cdot \nabla u -\nu\Delta u + \nabla p &= f\\ + -\text{div}(u) &= 0 +\end{align}\]
+

Implementing New Formulations

+
+

Todo

+

Describe how to implement a new formulation in C++.

+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/miscellaneous/index.html b/details/miscellaneous/index.html new file mode 100644 index 00000000..34d8a86a --- /dev/null +++ b/details/miscellaneous/index.html @@ -0,0 +1,1089 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Miscellaneous - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Miscellaneous

+ +

Understanding solver logs

+

The nonlinear solver will log a debug message per iteration with some useful information. Take the following example log:

+
[polyfem] [debug] [Newton] iter=51 f=-1.06006e-06 ||∇f||=0.006432 ||Δx||=0.0037612 Δx⋅∇f(x)=-6.71732e-08 g=9.69072e-05 tol=1e-05 rate=0.0321861 ||step||=0.000121058
+
+

The terms in order they appear are:

+
    +
  • iter: the iteration number
  • +
  • f: the value of the objective function
  • +
  • ||∇f||: the \(L^2\)-norm of the gradient of f
  • +
  • ||Δx||: the \(L^2\)-norm of the update direction to our optimization variables (e.g., displacements/positions for elasticity)
  • +
  • Δx⋅∇f(x): the dot product between these values (this is a measure of how much progress we can expect the optimization can make)
  • +
  • g: the convergence criteria (i.e., the optimization stops when g < tol); this depends on the choice of "useGradNorm" solver parameter (for more information see here)
  • +
  • tol: the convergence criteria tolerance
  • +
  • rate: the step size the line-search produced (i.e. \(x_{i+1} = x_i + \text{rate} * \Delta x\))
  • +
  • ||step||: the L2 norm of the step (i.e. \(\|\text{rate} * \Delta x\| = \text{rate} * \|\Delta x\|\))
  • +
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/miscellaneous/miscellaneous.md b/details/miscellaneous/miscellaneous.md new file mode 100644 index 00000000..e33ac46c --- /dev/null +++ b/details/miscellaneous/miscellaneous.md @@ -0,0 +1,19 @@ +## Understanding solver logs + +The nonlinear solver will log a debug message per iteration with some useful information. Take the following example log: + +``` +[polyfem] [debug] [Newton] iter=51 f=-1.06006e-06 ||∇f||=0.006432 ||Δx||=0.0037612 Δx⋅∇f(x)=-6.71732e-08 g=9.69072e-05 tol=1e-05 rate=0.0321861 ||step||=0.000121058 +``` + +The terms in order they appear are: + +* `iter`: the iteration number +* `f`: the value of the objective function +* `||∇f||`: the $L^2$-norm of the gradient of `f` +* `||Δx||`: the $L^2$-norm of the update direction to our optimization variables (e.g., displacements/positions for elasticity) +* `Δx⋅∇f(x)`: the dot product between these values (this is a measure of how much progress we can expect the optimization can make) +* `g`: the convergence criteria (i.e., the optimization stops when `g < tol`); this depends on the choice of `"useGradNorm"` solver parameter (for more information see [here](../documentation/#nonlinear-solver)) +* `tol`: the convergence criteria tolerance +* `rate`: the step size the line-search produced (i.e. $x_{i+1} = x_i + \text{rate} * \Delta x$) +* `||step||`: the L2 norm of the step (i.e. $\|\text{rate} * \Delta x\| = \text{rate} * \|\Delta x\|$) diff --git a/details/problems/index.html b/details/problems/index.html new file mode 100644 index 00000000..db3f7c11 --- /dev/null +++ b/details/problems/index.html @@ -0,0 +1,1744 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Problems - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Problems

+ + + +

Each problem has a specific set of optional problem_params described here.

+

Generic

+

GenericScalar

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solves for generic scalar problem with specified rhs
  • +
  • Options: +
    "rhs": 3                            // Rhs of the problem
    +"dirichlet_boundary": [             // List of Dirichlet boundaries
    +{
    +    "id": 1,                        // Boundary id
    +    "value": 0                      // Boundary value
    +},
    +{
    +    "id": 2,                        // Boundary id
    +    "value": "sin(x)+y"             // Formulas are supported
    +}],
    +"neumann_boundary": [               // List of Neumann boundaries
    +{
    +    "id": 3,                        // Boundary id
    +    "value": 1,                     // Boundary value
    +},
    +{
    +    "id": 4,                        // Boundary id
    +    "value": "x^2"                  // Formulas are supported
    +}]
    +
  • +
+

GenericTensor

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: user-selected
  • +
  • Form: tensor
  • +
  • Description: solves for generic tensor problem with specified body forces
  • +
  • Options: +
    "rhs": [1, 2, 3]                    // Rhs of the problem
    +"dirichlet_boundary": [             // List of Dirichelt boundaries
    +{
    +    "id": 1,                        // Boundary id
    +    "value": [0, 0, 0],             // Boundary vector value
    +    "dimension": [                  // Which dimension are Dirichelt
    +            true,
    +            true,
    +            false                   // In this case z is free
    +        ]
    +},
    +{
    +    "id": 2,                        // Boundary id
    +    "value": ["sin(x)+y", "z^2", 0] // Formulas are supported
    +}],
    +"neumann_boundary": [               // List of Neumann boundaries
    +{
    +    "id": 3,                        // Boundary id
    +    "value": [0, 0, 0]              // Boundary vector value
    +},
    +{
    +    "id": 4,                        // Boundary id
    +    "value": ["sin(z)+y", "z^2", 0] // Formulas are supported
    +}],
    +"is_time_dependent": false,
    +"initial_solution": [0, 0, 0],
    +"initial_velocity": [0, 0, 0],
    +"initial_acceleration": [0, 0, 0]
    +
  • +
+

Specific

+

CompressionElasticExact

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f_{2D}(x,y) &= -\begin{bmatrix}(y^3 + x^2 + xy)/20\\ (3x^4 + xy^2 + x)/20\end{bmatrix}\\ +f_{3D}(x,y,z) &= -\begin{bmatrix}(xy + x^2 + y^3 + 6z)/14\\ (zx - z^3 + xy^2 + 3x^4)/14\\ (xyz + y^2z^2 - 2x)/14\end{bmatrix} +\end{align}\]
+

Cubic

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for \(f(x,y,z) = (2y-0.9)^4 + 0.1\)
  • +
+

DrivenCavity

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for zero right-hand side, and 0.25 for boundary id 1
  • +
+

Elastic

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for zero right-hand side, -0.25 for boundary id ⅕, 0.25 for id 3/6
  • +
+

ElasticExact

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f_{2D}(x,y) &= \begin{bmatrix}(y^3 + x^2 + xy)/50\\ (3x^4 + xy^2 + x)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}(xy + x^2 + y^3 + 6z)/80\\ (xz - z^3 + xy^2 + 3x^4)/80\\ (xyz + y^2 z^2 - 2x)/80\end{bmatrix} +\end{align}\]
+

ElasticZeroBC

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for [0, 0.5, 0] right-hand side and zero boundary condition
  • +
+

Flow

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for zero right-hand side, [0.25, 0, 0] for boundary id ⅓, [0, 0, 0] for 7
  • +
+

Franke

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solves for the 2D and 3D Franke function
  • +
+

Gravity

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: true
  • +
  • Form: tensor
  • +
  • Description: solves for 0.1 body force in y direction and zero for boundary 4
  • +
+

Kernel

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar/tensor
  • +
  • Description: solves the omogenous PDE with n_kernels kernels placed on the bounding box at kernel_distance
  • +
  • Options: n_kernels sets the number of kernels, kernel_distance sets the distance from the bounding box
  • +
+

Linear

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for \(f(x,y,z) = x\)
  • +
+

LinearElasticExact

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f_{2D}(x,y) &= \begin{bmatrix}-(y + x)/50\\ -(3x + y)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}-(y + x + z)/50\\ -(3x + y - z)/50\\ -(x + y - 2z)/50\end{bmatrix}\\ +\end{align}\]
+

MinSurf

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for -10 for rhs, and zero Dirichelt boundary condition
  • +
+

PointBasedTensor

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solves for point-based boudary conditions
  • +
  • Options: +
    "scaling": 1,               // Scaling factor
    +"rhs": 0,                   // Right-hand side
    +"translation": [0, 0, 0]    // Translation
    +"boundary_ids": [           // List of Dirichelt boundaries
    +{
    +    "id": 1,                // Boundary id
    +    "value": [0, 0, 0]      // Boundary vector value
    +},
    +{
    +    "id": 2,
    +    "value": {              // Rbf interpolated value
    +        "function": "",     // Function file
    +        "points": "",       // Points file
    +        "rbf": "gaussian",  // Rbf kernel
    +        "epsilon": 1.5,     // Rbf epsilon
    +        "coordinate": 2,    // Coordinate to ignore
    +
    +        "dimension": [      // Which dimension are Dirichlet
    +            true,
    +            true,
    +            false           // In this case z is free
    +        ]
    +    }
    +},
    +{
    +    "id": 2,
    +    "value": {              // Rbf interpolated value
    +        "function": "",     // Function file
    +        "points": "",       // Points file
    +        "triangles": "",    // Triangles file
    +        "coordinate": 2,    // Coordinate to ignore
    +    }
    +}]
    +
  • +
+

Quadratic

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for \(f(x,y,z) = x^2\)
  • +
+

QuadraticElasticExact

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f_{2D}(x,y) &= \begin{bmatrix} -(y^2 + x^2 + xy)/50\\ -(3x^2 + y)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}-(y^2 + x^2 + xy + yz)/50\\ -(3x^2 + y + z^2)/50\\ -(xz + y^2 - 2z)/50\end{bmatrix} +\end{align}\]
+

Sine

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f(x,y) &= \sin(10x)\sin(10y)\\ +f(x,y,z) &= \sin(10x)\sin(10y)\sin(10z) +\end{align}\]
+

TestProblem

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: scalar
  • +
  • Description: solve for extreme problem to test errors for high order discretizations
  • +
+

TimeDependentFlow

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: true
  • +
  • Form: tensor
  • +
  • Description: solve for zero right-hand side, [0.25, 0, 0] for boundary id ⅓, [0, 0, 0] for 7, and zero inital velocity
  • +
+

TimeDependentScalar

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: true
  • +
  • Form: scalar
  • +
  • Description: solve for one right-hand side, zero boundary condition, and zero time boundary
  • +
+

TorsionElastic

+
    +
  • Has exact solution: false
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for zero body forces, fixed_boundary fixed (zero displacement), turning_boundary rotating around axis_coordiante for n_turns
  • +
  • Options: fixed_boundary id of the fixed boundary, turning_boundary id of the moving boundary, axis_coordiante coordinate of the rotating axis, n_turns number of turns
  • +
+

Zero_BC

+
    +
  • Has exact solution: true
  • +
  • Time-dependent: false
  • +
  • Form: tensor
  • +
  • Description: solve for
  • +
+
\[\begin{align} +f_{2D}(x,y) &= (1 - x) x^2 y (1-y)^2\\ +f_{3D}(x,y,z) &= (1 - x) x^2 y (1-y)^2 z (1 - z) +\end{align}\]
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/problems/problems.md b/details/problems/problems.md new file mode 100644 index 00000000..c4981801 --- /dev/null +++ b/details/problems/problems.md @@ -0,0 +1,284 @@ + + +Each problem has a specific set of optional `problem_params` described here. + +## Generic + +### GenericScalar +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solves for generic scalar problem with specified rhs +* **Options:** +```js +"rhs": 3 // Rhs of the problem +"dirichlet_boundary": [ // List of Dirichlet boundaries +{ + "id": 1, // Boundary id + "value": 0 // Boundary value +}, +{ + "id": 2, // Boundary id + "value": "sin(x)+y" // Formulas are supported +}], +"neumann_boundary": [ // List of Neumann boundaries +{ + "id": 3, // Boundary id + "value": 1, // Boundary value +}, +{ + "id": 4, // Boundary id + "value": "x^2" // Formulas are supported +}] +``` + +### GenericTensor +* **Has exact solution:** false +* **Time-dependent:** user-selected +* **Form:** tensor +* **Description:** solves for generic tensor problem with specified body forces +* **Options:** +```js +"rhs": [1, 2, 3] // Rhs of the problem +"dirichlet_boundary": [ // List of Dirichelt boundaries +{ + "id": 1, // Boundary id + "value": [0, 0, 0], // Boundary vector value + "dimension": [ // Which dimension are Dirichelt + true, + true, + false // In this case z is free + ] +}, +{ + "id": 2, // Boundary id + "value": ["sin(x)+y", "z^2", 0] // Formulas are supported +}], +"neumann_boundary": [ // List of Neumann boundaries +{ + "id": 3, // Boundary id + "value": [0, 0, 0] // Boundary vector value +}, +{ + "id": 4, // Boundary id + "value": ["sin(z)+y", "z^2", 0] // Formulas are supported +}], +"is_time_dependent": false, +"initial_solution": [0, 0, 0], +"initial_velocity": [0, 0, 0], +"initial_acceleration": [0, 0, 0] +``` + +## Specific + +### CompressionElasticExact +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for + +\begin{align} +f_{2D}(x,y) &= -\begin{bmatrix}(y^3 + x^2 + xy)/20\\ (3x^4 + xy^2 + x)/20\end{bmatrix}\\ +f_{3D}(x,y,z) &= -\begin{bmatrix}(xy + x^2 + y^3 + 6z)/14\\ (zx - z^3 + xy^2 + 3x^4)/14\\ (xyz + y^2z^2 - 2x)/14\end{bmatrix} +\end{align} + +### Cubic +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for $f(x,y,z) = (2y-0.9)^4 + 0.1$ + +### DrivenCavity +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for zero right-hand side, and 0.25 for boundary id 1 + +### Elastic +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for zero right-hand side, -0.25 for boundary id 1/5, 0.25 for id 3/6 + +### ElasticExact +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for + +\begin{align} +f_{2D}(x,y) &= \begin{bmatrix}(y^3 + x^2 + xy)/50\\ (3x^4 + xy^2 + x)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}(xy + x^2 + y^3 + 6z)/80\\ (xz - z^3 + xy^2 + 3x^4)/80\\ (xyz + y^2 z^2 - 2x)/80\end{bmatrix} +\end{align} + +### ElasticZeroBC +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for [0, 0.5, 0] right-hand side and zero boundary condition + +### Flow +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for zero right-hand side, [0.25, 0, 0] for boundary id 1/3, [0, 0, 0] for 7 + +### Franke +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solves for the 2D and 3D Franke function + +### Gravity +* **Has exact solution:** false +* **Time-dependent:** true +* **Form:** tensor +* **Description:** solves for 0.1 body force in y direction and zero for boundary 4 + +### Kernel +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar/tensor +* **Description:** solves the omogenous PDE with `n_kernels` kernels placed on the bounding box at `kernel_distance` +* **Options:** `n_kernels` sets the number of kernels, `kernel_distance` sets the distance from the bounding box + +### Linear +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for $f(x,y,z) = x$ + +### LinearElasticExact +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for + +\begin{align} +f_{2D}(x,y) &= \begin{bmatrix}-(y + x)/50\\ -(3x + y)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}-(y + x + z)/50\\ -(3x + y - z)/50\\ -(x + y - 2z)/50\end{bmatrix}\\ +\end{align} + +### MinSurf +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for -10 for rhs, and zero Dirichelt boundary condition + +### PointBasedTensor +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solves for point-based boudary conditions +* **Options:** +```js +"scaling": 1, // Scaling factor +"rhs": 0, // Right-hand side +"translation": [0, 0, 0] // Translation +"boundary_ids": [ // List of Dirichelt boundaries +{ + "id": 1, // Boundary id + "value": [0, 0, 0] // Boundary vector value +}, +{ + "id": 2, + "value": { // Rbf interpolated value + "function": "", // Function file + "points": "", // Points file + "rbf": "gaussian", // Rbf kernel + "epsilon": 1.5, // Rbf epsilon + "coordinate": 2, // Coordinate to ignore + + "dimension": [ // Which dimension are Dirichlet + true, + true, + false // In this case z is free + ] + } +}, +{ + "id": 2, + "value": { // Rbf interpolated value + "function": "", // Function file + "points": "", // Points file + "triangles": "", // Triangles file + "coordinate": 2, // Coordinate to ignore + } +}] +``` + +### Quadratic +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for $f(x,y,z) = x^2$ + +### QuadraticElasticExact +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for + +\begin{align} +f_{2D}(x,y) &= \begin{bmatrix} -(y^2 + x^2 + xy)/50\\ -(3x^2 + y)/50\end{bmatrix}\\ +f_{3D}(x,y,z) &= \begin{bmatrix}-(y^2 + x^2 + xy + yz)/50\\ -(3x^2 + y + z^2)/50\\ -(xz + y^2 - 2z)/50\end{bmatrix} +\end{align} + +### Sine +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for + +\begin{align} +f(x,y) &= \sin(10x)\sin(10y)\\ +f(x,y,z) &= \sin(10x)\sin(10y)\sin(10z) +\end{align} + +### TestProblem +* **Has exact solution:** true +* **Time-dependent:** false +* **Form:** scalar +* **Description:** solve for extreme problem to test errors for high order discretizations + +### TimeDependentFlow +* **Has exact solution:** false +* **Time-dependent:** true +* **Form:** tensor +* **Description:** solve for zero right-hand side, [0.25, 0, 0] for boundary id 1/3, [0, 0, 0] for 7, and zero inital velocity + +### TimeDependentScalar +* **Has exact solution:** false +* **Time-dependent:** true +* **Form:** scalar +* **Description:** solve for one right-hand side, zero boundary condition, and zero time boundary + +### TorsionElastic +* **Has exact solution:** false +* **Time-dependent:** false +* **Form:** tensor +* **Description:** solve for zero body forces, `fixed_boundary` fixed (zero displacement), `turning_boundary` rotating around `axis_coordiante` for `n_turns` +* **Options:** `fixed_boundary` id of the fixed boundary, `turning_boundary` id of the moving boundary, `axis_coordiante` coordinate of the rotating axis, `n_turns` number of turns + +### Zero_BC +- **Has exact solution:** true +- **Time-dependent:** false +- **Form:** tensor +- **Description:** solve for + +\begin{align} +f_{2D}(x,y) &= (1 - x) x^2 y (1-y)^2\\ +f_{3D}(x,y,z) &= (1 - x) x^2 y (1-y)^2 z (1 - z) +\end{align} \ No newline at end of file diff --git a/details/solvers/index.html b/details/solvers/index.html new file mode 100644 index 00000000..6fda7dc5 --- /dev/null +++ b/details/solvers/index.html @@ -0,0 +1,1267 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Solvers - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Solvers

+ +

Linear Solver

+

PolyFEM offers several linear solver options based on compilation options. For more information, see PolySolve a stand-alone linear solver wrapper library used by PolyFEM.

+

Options: AMGCL, Eigen::BiCGSTAB, Eigen::CholmodSupernodalLLT, Eigen::ConjugateGradient, Eigen::DGMRES, Eigen::GMRES, Eigen::LeastSquaresConjugateGradient, Eigen::MINRES, Eigen::PardisoLDLT, Eigen::PardisoLU, Eigen::SimplicialLDLT, Eigen::SparseLU, Eigen::UmfPackLU, Hypre, Pardiso

+

Nonlinear Solver

+

To solve nonlinear formulations, PolyFEM offers two options: Newton’s method (newton) and L-BFGS (lbfgs).

+

The settings for the solver are stored inside the field "nonlinear". General settings include:

+
    +
  • "grad_norm" (default: 1e-8): convergence tolerance on the norm (\(L^2\)) of the gradient
  • +
  • "nl_iterations" (default: 1000): maximum number of iterations to spend solving
  • +
  • "use_grad_norm" (default: true): whether to use the gradient norm or update direction norm for convergence checks
      +
    • When optimizing a function it is natural to check for a zero (up to tolerance) gradient as this signifies an extremum. However, we also implement the convergence criteria used by Li et al. [2020]. Where instead of the gradient’s norm the update direction’s \(L^\infty\)-norm is used. This provides two benefits: (1) it expresses the convergence criteria in the units of the variable (e.g., distance for elasticity) which (2) avoids applying small updates that lead to a marginal change in the variables. Note: this criterion has been well tested for nonlinear elasticity, but your mileage may vary for other formulations. +
    • +
    +
  • +
+

Newton’s Method

+

A (projected) Newton’s method with line search.

+

L-BFGS

+

A quasi-Newton method, L-BFGS requires more iterations than the full Newton’s method but avoids expensive linear solves.

+

Reference: https://en.wikipedia.org/wiki/Limited-memory_BFGS
+Acknowledgments: The L-BFGS solver is implemented using the LBFGS++ library.

+ +
+

Todo

+

Describe line-search and its purpose.

+
+

Backtracking

+
+

Todo

+

Describe this method and its parameters.

+
+

Armijo

+
+

Todo

+

Describe this method and its parameters.

+
+

Armijo (alt)

+
+

Todo

+

Describe this method and its parameters.

+
+

More-Thuente

+
+

Todo

+

Describe this method and its parameters.

+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/solvers/solvers.md b/details/solvers/solvers.md new file mode 100644 index 00000000..ed95541b --- /dev/null +++ b/details/solvers/solvers.md @@ -0,0 +1,54 @@ +## Linear Solver + +PolyFEM offers several linear solver options based on compilation options. For more information, see [PolySolve](../polysolve.md) a stand-alone linear solver wrapper library used by PolyFEM. + +Options: `AMGCL`, `Eigen::BiCGSTAB`, `Eigen::CholmodSupernodalLLT`, `Eigen::ConjugateGradient`, `Eigen::DGMRES`, `Eigen::GMRES`, `Eigen::LeastSquaresConjugateGradient`, `Eigen::MINRES`, `Eigen::PardisoLDLT`, `Eigen::PardisoLU`, `Eigen::SimplicialLDLT`, `Eigen::SparseLU`, `Eigen::UmfPackLU`, `Hypre`, `Pardiso` + + +## Nonlinear Solver + +To solve nonlinear formulations, PolyFEM offers two options: Newton's method (`newton`) and L-BFGS (`lbfgs`). + +The settings for the solver are stored inside the field `"nonlinear"`. General settings include: + +* `"grad_norm"` (default: `1e-8`): convergence tolerance on the norm ($L^2$) of the gradient +* `"nl_iterations"` (default: `1000`): maximum number of iterations to spend solving +* `"use_grad_norm"` (default: `true`): whether to use the gradient norm or update direction norm for convergence checks + * When optimizing a function it is natural to check for a zero (up to tolerance) gradient as this signifies an extremum. However, we also implement the convergence criteria used by [Li et al. [2020]](https://ipc-sim.github.io/). Where instead of the gradient's norm the update direction's $L^\infty$-norm is used. This provides two benefits: (1) it expresses the convergence criteria in the units of the variable (e.g., distance for elasticity) which (2) avoids applying small updates that lead to a marginal change in the variables. Note: this criterion has been well tested for nonlinear elasticity, but your mileage may vary for other formulations. + + +### Newton's Method + +A (projected) Newton's method with line search. + +### L-BFGS + +A quasi-Newton method, L-BFGS requires more iterations than the full Newton's method but avoids expensive linear solves. + +Reference: https://en.wikipedia.org/wiki/Limited-memory_BFGS
+Acknowledgments: The L-BFGS solver is implemented using the [LBFGS++](https://github.com/yixuan/LBFGSpp) library. + +## Line Search + +!!! todo + Describe line-search and its purpose. + +### Backtracking + +!!! todo + Describe this method and its parameters. + +### Armijo + +!!! todo + Describe this method and its parameters. + +#### Armijo (alt) + +!!! todo + Describe this method and its parameters. + +### More-Thuente + +!!! todo + Describe this method and its parameters. \ No newline at end of file diff --git a/details/time_integrators/index.html b/details/time_integrators/index.html new file mode 100644 index 00000000..cdb2ddfb --- /dev/null +++ b/details/time_integrators/index.html @@ -0,0 +1,1159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Time Integrators - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Time Integrators

+ + + +

Implicit Euler

+
    +
  • Parameters: None
  • +
  • Description:
  • +
+
\[\begin{align} +\dot{u}^{t+1} &= \dot{u}^t + h \ddot{u}^{t+1}\\ +u^{t+1} &= u^t + h \dot{u}^{t+1} +\end{align}\]
+

where \(h\) is the time step size.

+ +

Implicit Newmark

+
    +
  • Parameters: beta, gamma
  • +
  • Description:
  • +
+
\[\begin{align} +\dot{u}^{t+1} &= \dot{u}^t + (1-\gamma)h\ddot{u}^t + \gamma h\ddot{u}^{t+1}\\ +u^{t+1} &= u^t + h\dot{u}^t + \tfrac{h^2}{2}((1-2\beta)\ddot{u}^t + 2\beta\ddot{u}^{t+1}) +\end{align}\]
+

where \(h\) is the time step size and by default \(\gamma = 0.5\) and \(\beta = 0.25\).

+ +
+

Note

+

This is equivalent to the Trapezoidal rule for \(\gamma = 0.5\) and \(\beta = 0.25\).

+
+

Backward Differentiation Formula (BDF)

+
    +
  • Parameters: num_steps
  • +
  • Description:
  • +
+
\[\begin{align} +\dot{u}^{t+1} &= (\sum_{i=0}^{n-1} \alpha_i \dot{u}^{t-i}) + h\beta\ddot{u}^{t+1}\\ +u^{t+1} &= (\sum_{i=0}^{n-1} \alpha_i u^{t-i}) + h\beta\dot{u}^{t+1} +\end{align}\]
+

where \(h\) is the time step size, the coefficients \(\alpha_i\) and \(\beta\) are choosen to make the method \(n\)-th order accurate, and \(n \in \{1, \ldots, 6\}\) is the number of previous steps to consider (default: num_steps=1). This is equivalent to implicit Euler for \(n=1\). +To initialize the values for \(i > 0\), the method starts from \(n=1\) and successively builds the history, increasing \(n\) by 1 until the \(n\)-th step. However, we know this can result in less than order \(n\) accuracy [Nishikawa 2019].

+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/details/time_integrators/time_integrators.md b/details/time_integrators/time_integrators.md new file mode 100644 index 00000000..fe1b800c --- /dev/null +++ b/details/time_integrators/time_integrators.md @@ -0,0 +1,60 @@ + + + +## Implicit Euler + +* **Parameters:** None +* **Description:** + +\begin{align} +\dot{u}^{t+1} &= \dot{u}^t + h \ddot{u}^{t+1}\\ +u^{t+1} &= u^t + h \dot{u}^{t+1} +\end{align} + +where $h$ is the time step size. + +* **Reference:** https://en.wikipedia.org/wiki/Backward_Euler_method + +## Implicit Newmark + +* **Parameters:** `beta`, `gamma` +* **Description:** + +\begin{align} +\dot{u}^{t+1} &= \dot{u}^t + (1-\gamma)h\ddot{u}^t + \gamma h\ddot{u}^{t+1}\\ +u^{t+1} &= u^t + h\dot{u}^t + \tfrac{h^2}{2}((1-2\beta)\ddot{u}^t + 2\beta\ddot{u}^{t+1}) +\end{align} + +where $h$ is the time step size and by default $\gamma = 0.5$ and $\beta = 0.25$. + +* **Reference:** https://en.wikipedia.org/wiki/Newmark-beta_method + +!!! note + This is equivalent to the [Trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule_(differential_equations)) for $\gamma = 0.5$ and $\beta = 0.25$. + +## Backward Differentiation Formula (BDF) + +* **Parameters:** `num_steps` +* **Description:** + +\begin{align} +\dot{u}^{t+1} &= (\sum_{i=0}^{n-1} \alpha_i \dot{u}^{t-i}) + h\beta\ddot{u}^{t+1}\\ +u^{t+1} &= (\sum_{i=0}^{n-1} \alpha_i u^{t-i}) + h\beta\dot{u}^{t+1} +\end{align} + +where $h$ is the time step size, the coefficients $\alpha_i$ and $\beta$ are choosen to make the method $n$-th order accurate, and $n \in \{1, \ldots, 6\}$ is the number of previous steps to consider (default: `num_steps=1`). This is equivalent to [implicit Euler](#implicit-euler) for $n=1$. +To initialize the values for $i > 0$, the method starts from $n=1$ and successively builds the history, increasing $n$ by 1 until the $n$-th step. However, we know this can result in less than order $n$ accuracy [[Nishikawa 2019]](https://www.researchgate.net/publication/332855136_On_Large_Start-Up_Error_of_BDF2). + +* **Reference:** https://en.wikipedia.org/wiki/Backward_differentiation_formula \ No newline at end of file diff --git a/extra.css b/extra.css new file mode 100644 index 00000000..25fdd928 --- /dev/null +++ b/extra.css @@ -0,0 +1,20 @@ +:root { + --md-admonition-icon--json-spec: url('data:image/svg+xml;charset=utf-8,'); +} + +.md-typeset .admonition.json-spec, +.md-typeset details.json-spec { + border-color: rgb(76, 174, 79); +} + +.md-typeset .json-spec>.admonition-title, +.md-typeset .json-spec>summary { + background-color: rgba(76, 174, 79, 0.1); +} + +.md-typeset .json-spec>.admonition-title::before, +.md-typeset .json-spec>summary::before { + background-color: rgb(76, 174, 79); + -webkit-mask-image: var(--md-admonition-icon--json-spec); + mask-image: var(--md-admonition-icon--json-spec); +} \ No newline at end of file diff --git a/img/bc_setter.png b/img/bc_setter.png new file mode 100644 index 00000000..235405c3 Binary files /dev/null and b/img/bc_setter.png differ diff --git a/img/paraview.pdf b/img/paraview.pdf new file mode 100644 index 00000000..0c5a4f48 Binary files /dev/null and b/img/paraview.pdf differ diff --git a/img/paraview.png b/img/paraview.png new file mode 100644 index 00000000..46f85cea Binary files /dev/null and b/img/paraview.png differ diff --git a/img/paraview@0.5x.png b/img/paraview@0.5x.png new file mode 100644 index 00000000..dbbc7fce Binary files /dev/null and b/img/paraview@0.5x.png differ diff --git a/img/plate_hole.obj b/img/plate_hole.obj new file mode 100644 index 00000000..f07614de --- /dev/null +++ b/img/plate_hole.obj @@ -0,0 +1,25352 @@ +v 2.5451 30.603 0 +v 4.53094 30.9063 0 +v 6.44745 31.3989 0 +v 8.28485 32.0718 0 +v 10.0334 32.9141 0 +v 11.6823 33.9155 0 +v 13.2219 35.0669 0 +v 14.6423 36.3579 0 +v 15.9328 37.7783 0 +v 17.0842 39.3179 0 +v 18.0861 40.9668 0 +v 18.9284 42.7153 0 +v 19.6008 44.5527 0 +v 20.0934 46.4692 0 +v 20.3967 48.4551 0 +v 20.5002 50.5 0 +v 100.5 50.5 0 +v 100.5 0.5 0 +v 0.500183 0.5 0 +v 0.500183 30.5 0 +v 28.1437 20.3453 0 +v 5.39234 26.278 0 +v 8.43483 28.8173 0 +v 21.8509 23.6376 0 +v 17.45 36.2575 0 +v 9.08402 28.0557 0 +v 5.62974 27.6775 0 +v 10.1071 30.525 0 +v 7.84753 30.4209 0 +v 16.2301 28.4115 0 +v 20.5482 40.8578 0 +v 50.5001 0.5 0 +v 16.5085 38.5481 0 +v 16.6472 37.8442 0 +v 13.1703 32.8307 0 +v 15.5976 36.1382 0 +v 17.2229 38.614 0 +v 13.7359 32.2254 0 +v 8.95938 25.105 0 +v 10.8241 29.6243 0 +v 16.1865 35.2023 0 +v 18.916 39.0349 0 +v 15.2875 37.0681 0 +v 19.8471 45.511 0 +v 11.198 30.5222 0 +v 10.0759 26.9013 0 +v 16.3912 36.7136 0 +v 8.24686 25.7311 0 +v 13.9321 35.7124 0 +v 10.5122 28.4704 0 +v 14.3978 35.2618 0 +v 15.92 37.1417 0 +v 15.5629 35.3873 0 +v 16.9277 32.9016 0 +v 18.1411 38.5363 0 +v 12.9066 31.3733 0 +v 16.2753 32.9275 0 +v 14.4343 32.332 0 +v 5.48919 31.1526 0 +v 19.1912 34.4656 0 +v 18.3809 34.4342 0 +v 5.59597 30.513 0 +v 20.5198 33.235 0 +v 20.4005 36.4088 0 +v 4.45264 26.8114 0 +v 16.752 34.7938 0 +v 6.00914 29.6157 0 +v 10.0793 24.3084 0 +v 11.8245 27.5191 0 +v 16.3386 35.9512 0 +v 19.9851 32.5791 0 +v 3.17328 27.2143 0 +v 10.7547 25.948 0 +v 20.3186 37.1587 0 +v 12.2163 29.9376 0 +v 11.4165 29.9044 0 +v 18.9025 33.7078 0 +v 10.6517 30.2229 0 +v 19.7005 36.7118 0 +v 15.7845 32.497 0 +v 19.8177 34.9662 0 +v 13.8774 32.9245 0 +v 17.5045 34.6124 0 +v 19.0251 39.8599 0 +v 20.9362 38.8137 0 +v 17.5851 40.1424 0 +v 3.84625 27.1186 0 +v 19.2813 38.2872 0 +v 11.7321 28.2596 0 +v 21.6399 32.5561 0 +v 13.868 34.8134 0 +v 12.5338 32.7209 0 +v 22.293 42.0211 0 +v 13.8841 29.5801 0 +v 4.30195 28.7593 0 +v 21.7405 42.9236 0 +v 21.4075 34.0983 0 +v 21.3076 40.8609 0 +v 12.4521 34.4912 0 +v 11.4106 23.9667 0 +v 6.54121 28.3447 0 +v 13.0604 34.4803 0 +v 12.7393 33.5382 0 +v 7.04387 30.4217 0 +v 12.2795 33.9194 0 +v 11.9512 32.9998 0 +v 13.5383 31.1461 0 +v 10.8578 33.4148 0 +v 12.7708 29.4767 0 +v 15.1352 32.2425 0 +v 14.9785 33.7118 0 +v 11.4598 33.3528 0 +v 11.0487 32.3155 0 +v 11.5316 31.7379 0 +v 10.1167 29.6337 0 +v 10.6585 32.8139 0 +v 13.7325 34.131 0 +v 14.4255 34.4 0 +v 21.5364 37.6168 0 +v 18.6732 38.2378 0 +v 20.3701 38.6785 0 +v 3.62716 28.4764 0 +v 14.1228 31.5968 0 +v 4.9113 28.1631 0 +v 14.4776 30.5323 0 +v 20.6398 25.2811 0 +v 20.5384 28.9754 0 +v 18.888 28.3273 0 +v 20.5562 26.505 0 +v 21.6152 30.5087 0 +v 5.17162 25.4444 0 +v 6.68973 29.7003 0 +v 5.38493 29.8998 0 +v 18.7405 37.6314 0 +v 20.6863 29.9468 0 +v 20.7881 22.0634 0 +v 23.8003 25.9998 0 +v 21.3924 25.9473 0 +v 6.42752 23.387 0 +v 20.9994 32.7629 0 +v 18.9953 32.8571 0 +v 19.6812 33.3689 0 +v 19.696 39.7141 0 +v 13.3415 24.4182 0 +v 9.72901 18.9913 0 +v 19.6531 28.8045 0 +v 8.31794 23.607 0 +v 9.53131 23.6539 0 +v 14.849 25.7067 0 +v 16.5119 26.0529 0 +v 20.0608 31.5549 0 +v 13.9385 26.3746 0 +v 7.65055 23.5293 0 +v 11.4792 20.1104 0 +v 18.2981 27.914 0 +v 20.3896 25.8788 0 +v 18.7633 35.0369 0 +v 5.99763 26.8922 0 +v 21.7425 22.9582 0 +v 10.1527 18.323 0 +v 21.0341 38.1139 0 +v 2.89722 28.5269 0 +v 4.74845 30.2253 0 +v 10.4554 19.5135 0 +v 15.6018 24.1391 0 +v 6.93402 26.8759 0 +v 12.1528 21.2432 0 +v 15.2466 30.3291 0 +v 26.037 21.2217 0 +v 3.34639 26.0178 0 +v 24.5368 37.667 0 +v 10.7186 24.0347 0 +v 15.6401 29.1466 0 +v 16.7276 23.2532 0 +v 16.8558 28.0401 0 +v 14.2019 27.129 0 +v 26.4172 33.2367 0 +v 13.8135 23.0135 0 +v 23.1167 33.1233 0 +v 23.6285 23.6618 0 +v 28.6749 23.1529 0 +v 22.5597 33.5727 0 +v 29.6007 23.653 0 +v 6.61034 25.3843 0 +v 11.5884 22.7923 0 +v 13.3682 22.0559 0 +v 26.4918 21.9193 0 +v 3.65075 23.8609 0 +v 23.0197 36.606 0 +v 22.5782 22.4978 0 +v 6.84468 24.2247 0 +v 13.0299 22.9536 0 +v 20.0256 22.5139 0 +v 19.0824 19.6107 0 +v 27.0011 37.6012 0 +v 25.2101 39.5302 0 +v 6.44085 19.8744 0 +v 4.30405 24.1704 0 +v 4.92862 17.814 0 +v 25.5684 25.1059 0 +v 4.68076 18.851 0 +v 6.58566 21.5645 0 +v 12.0733 22.1696 0 +v 6.77176 22.8436 0 +v 8.04182 22.0688 0 +v 16.071 23.6944 0 +v 12.4518 27.9234 0 +v 18.1982 39.456 0 +v 18.3521 40.2407 0 +v 18.3093 36.1321 0 +v 19.0556 35.6881 0 +v 22.0208 38.6087 0 +v 10.0122 31.7178 0 +v 20.105 35.7147 0 +v 15.2639 24.9053 0 +v 18.7986 27.3961 0 +v 22.0169 31.5277 0 +v 14.5393 26.2391 0 +v 20.1959 29.5245 0 +v 17.5264 32.6958 0 +v 6.13856 24.8387 0 +v 14.4225 23.0322 0 +v 18.1041 24.8206 0 +v 15.1504 23.0657 0 +v 26.7925 24.0847 0 +v 5.02622 24.1377 0 +v 13.1626 25.5421 0 +v 5.37666 29.1098 0 +v 16.5935 26.7858 0 +v 20.318 27.7385 0 +v 16.3291 27.4742 0 +v 19.3353 32.0648 0 +v 10.8023 27.1174 0 +v 22.041 27.485 0 +v 17.7512 25.3334 0 +v 11.5087 26.8431 0 +v 9.10237 25.8564 0 +v 14.3458 20.2825 0 +v 25.0659 37.0918 0 +v 12.5359 23.5087 0 +v 16.274 31.5953 0 +v 14.1423 22.2308 0 +v 11.1611 24.9834 0 +v 20.2632 24.0133 0 +v 28.0641 42.7903 0 +v 17.111 23.7413 0 +v 14.9621 20.3529 0 +v 18.7946 20.5878 0 +v 7.02088 23.6142 0 +v 9.97963 26.1145 0 +v 4.52926 16.5251 0 +v 19.292 24.0482 0 +v 7.46903 22.9098 0 +v 19.9424 39.0733 0 +v 12.8394 26.6333 0 +v 9.76734 28.3148 0 +v 14.9948 35.704 0 +v 9.72178 27.6158 0 +v 4.90491 27.3794 0 +v 13.4492 30.3052 0 +v 20.5432 39.3412 0 +v 10.5457 23.3612 0 +v 21.8569 33.5408 0 +v 17.1422 33.5111 0 +v 19.4352 25.5127 0 +v 10.8053 31.5399 0 +v 10.2992 31.1405 0 +v 12.9086 32.0447 0 +v 15.8201 33.3955 0 +v 17.1542 37.0939 0 +v 10.3595 27.9055 0 +v 0.500183 23 0 +v 12.0879 32.2536 0 +v 22.5597 34.5671 0 +v 12.3548 28.7527 0 +v 8.82816 23.1698 0 +v 8.13144 27.2121 0 +v 13.4505 33.495 0 +v 15.8437 29.8711 0 +v 19.9483 34.175 0 +v 11.7059 31.0364 0 +v 20.9319 39.8718 0 +v 20.9676 44.089 0 +v 19.6069 40.6333 0 +v 18.8545 40.8366 0 +v 19.5054 41.7518 0 +v 14.4109 28.9012 0 +v 22.346 40.9776 0 +v 19.9622 41.2294 0 +v 20.7728 41.86 0 +v 17.5812 27.9828 0 +v 18.1238 31.1442 0 +v 23.5131 32.6596 0 +v 13.0512 28.8341 0 +v 20.7159 32.1525 0 +v 20.5999 35.0953 0 +v 16.3678 22.1346 0 +v 23.235 22.9874 0 +v 20.245 47.4622 0 +v 5.35211 22.0908 0 +v 0.500183 19.25 0 +v 22.7878 42.6351 0 +v 11.3229 26.2345 0 +v 22.413 39.6035 0 +v 21.8464 45.3579 0 +v 25.6364 31.6503 0 +v 25.0056 30.5935 0 +v 23.042 25.8512 0 +v 4.46258 20.7247 0 +v 5.51253 23.0474 0 +v 23.8673 42.5257 0 +v 25.3802 28.4889 0 +v 22.5851 30.7151 0 +v 24.6619 21.8946 0 +v 23.8362 29.4446 0 +v 24.2008 40.4148 0 +v 23.2155 28.6296 0 +v 24.3059 39.5166 0 +v 2.75218 19.5861 0 +v 6.70702 16.5169 0 +v 25.2564 34.0531 0 +v 24.6858 27.7431 0 +v 22.0652 25.3659 0 +v 8.82593 14.1571 0 +v 2.2255 16.1504 0 +v 5.15267 15.6194 0 +v 7.02414 18.5256 0 +v 2.38767 20.9946 0 +v 20.1905 28.3993 0 +v 6.20078 25.978 0 +v 9.41722 29.5279 0 +v 18.3294 33.4518 0 +v 9.36622 24.4914 0 +v 17.3405 37.9259 0 +v 13.6591 28.4849 0 +v 16.3024 29.3513 0 +v 20.0662 30.709 0 +v 21.3596 31.8258 0 +v 4.70239 29.5119 0 +v 5.35511 26.9201 0 +v 6.39236 29.0469 0 +v 7.66558 25.5261 0 +v 18.1701 26.3133 0 +v 19.2566 30.4639 0 +v 18.4428 21.2287 0 +v 4.76954 25.9969 0 +v 21.6252 26.7548 0 +v 7.89931 24.2982 0 +v 18.2206 36.8546 0 +v 4.25666 28.1035 0 +v 15.8447 26.4982 0 +v 24.8263 25.264 0 +v 18.5768 30.5498 0 +v 21.7272 40.1356 0 +v 3.62964 27.7629 0 +v 10.4837 21.5176 0 +v 0.500183 26.75 0 +v 19.2724 31.1489 0 +v 13.1264 28.0515 0 +v 21.34 34.8112 0 +v 22.2378 26.8895 0 +v 17.1803 25.7771 0 +v 13.119 23.8038 0 +v 22.7828 26.5792 0 +v 40.5001 50.5 0 +v 27.1755 23.6207 0 +v 24.054 23.0071 0 +v 23.9674 24.3107 0 +v 16.9116 34.1147 0 +v 15.4754 27.4717 0 +v 18.6819 24.589 0 +v 15.1565 23.762 0 +v 19.5629 27.9355 0 +v 17.4357 31.4703 0 +v 13.7459 23.6191 0 +v 14.1684 21.3822 0 +v 22.2733 32.205 0 +v 17.8301 32.1403 0 +v 4.06064 26.19 0 +v 25.3125 24.5147 0 +v 13.5956 25.0349 0 +v 21.0572 29.3934 0 +v 16.155 24.835 0 +v 17.8624 27.1434 0 +v 6.58122 18.032 0 +v 4.31326 27.502 0 +v 21.156 27.4519 0 +v 23.2334 24.3353 0 +v 15.7482 25.631 0 +v 16.1405 23.0517 0 +v 15.3952 19.9087 0 +v 14.5925 23.9115 0 +v 28.8623 26.3168 0 +v 20.3418 27.1034 0 +v 17.2709 26.4944 0 +v 19.8267 26.1997 0 +v 15.3603 28.3176 0 +v 24.4485 23.7291 0 +v 15.3937 31.0682 0 +v 26.3424 41.7732 0 +v 19.0141 26.4858 0 +v 10.0957 22.1029 0 +v 19.6007 22.0328 0 +v 25.0207 33.3837 0 +v 5.83371 25.4267 0 +v 4.73621 24.7499 0 +v 25.8308 38.3403 0 +v 3.84257 21.0024 0 +v 20.4123 24.6385 0 +v 6.17945 19.0254 0 +v 24.4728 22.5136 0 +v 19.4334 29.3855 0 +v 12.4448 25.4853 0 +v 21.9427 41.4802 0 +v 23.2802 39.6425 0 +v 23.8665 31.2709 0 +v 6.24656 22.4722 0 +v 22.6263 44.8834 0 +v 7.84287 21.2227 0 +v 5.08259 20.4469 0 +v 8.67081 22.56 0 +v 24.4414 43.354 0 +v 16.855 30.0365 0 +v 21.8017 44.4918 0 +v 23.9066 41.5799 0 +v 15.2838 20.8833 0 +v 23.7509 34.8305 0 +v 12.2951 22.8425 0 +v 5.74613 17.1081 0 +v 26.4636 35.3635 0 +v 8.11184 22.8501 0 +v 24.0715 30.0264 0 +v 23.8768 43.84 0 +v 12.1323 26.4736 0 +v 23.1559 29.9987 0 +v 16.7883 30.9142 0 +v 21.4684 28.7241 0 +v 7.28273 21.6454 0 +v 23.8298 40.9408 0 +v 22.6624 41.5167 0 +v 22.8156 40.3118 0 +v 9.95575 20.3011 0 +v 8.90599 21.9758 0 +v 14.8328 29.6498 0 +v 6.22017 24.2195 0 +v 27.6838 24.5822 0 +v 4.63433 23.4732 0 +v 9.40249 26.5599 0 +v 21.4932 36.3165 0 +v 8.6766 26.4918 0 +v 18.5072 41.841 0 +v 18.9745 41.4403 0 +v 19.0357 42.125 0 +v 10.1462 28.9269 0 +v 21.3136 41.6203 0 +v 21.2279 42.4535 0 +v 20.5873 43.6371 0 +v 21.0788 43.1379 0 +v 20.0963 44.9361 0 +v 20.1253 42.6907 0 +v 11.2044 18.9576 0 +v 14.2458 24.8864 0 +v 17.0085 24.5691 0 +v 21.5663 31.1167 0 +v 21.5932 39.3181 0 +v 14.6763 27.7721 0 +v 11.6367 24.5612 0 +v 9.81954 22.7485 0 +v 12.2544 24.7127 0 +v 26.7555 35.9957 0 +v 24.3222 34.5041 0 +v 26.0656 36.0905 0 +v 5.4136 24.7561 0 +v 24.934 32.6794 0 +v 26.303 23.7349 0 +v 27.0971 41.0363 0 +v 24.8549 35.728 0 +v 23.5983 37.0752 0 +v 14.1578 33.5804 0 +v 9.21371 28.7749 0 +v 27.0461 22.5408 0 +v 16.2697 34.322 0 +v 14.861 31.6012 0 +v 18.5719 31.7423 0 +v 16.145 21.2802 0 +v 21.1679 23.7199 0 +v 10.6029 25.3161 0 +v 26.4799 40.5413 0 +v 7.97719 20.0556 0 +v 5.98087 21.8558 0 +v 24.3784 38.4752 0 +v 19.1405 22.4803 0 +v 13.4615 26.8122 0 +v 22.5621 32.8692 0 +v 21.7537 21.9899 0 +v 11.8096 25.8245 0 +v 18.8673 21.9329 0 +v 18.5693 32.3811 0 +v 22.9402 21.1519 0 +v 27.144 21.8955 0 +v 25.0133 40.3237 0 +v 25.3258 41.7599 0 +v 10.5812 16.7112 0 +v 12.3293 19.2987 0 +v 24.7323 28.54 0 +v 7.53156 14.9706 0 +v 23.7494 37.9083 0 +v 25.7375 30.8942 0 +v 24.9312 34.7531 0 +v 27.1609 40.2477 0 +v 22.7938 46.037 0 +v 28.1571 21.7681 0 +v 28.1506 27.0748 0 +v 23.1028 35.2231 0 +v 24.2014 35.4041 0 +v 22.8674 39.1602 0 +v 6.33902 16.9952 0 +v 18.1388 24.0704 0 +v 11.3407 15.959 0 +v 9.58829 21.3452 0 +v 26.4253 25.4903 0 +v 9.51278 20.7319 0 +v 3.25146 14.4092 0 +v 27.3663 36.3301 0 +v 14.7788 21.7242 0 +v 19.1779 21.4059 0 +v 25.6866 26.9208 0 +v 24.1132 47.9689 0 +v 24.6127 20.6232 0 +v 1.53404 17.3298 0 +v 7.53483 17.4503 0 +v 27.631 21.4611 0 +v 22.6306 21.6797 0 +v 16.9698 29.1638 0 +v 23.5129 40.3 0 +v 19.2646 43.634 0 +v 19.5333 43.0148 0 +v 19.9253 43.9131 0 +v 20.5687 44.5245 0 +v 60.5001 50.5 0 +v 20.1208 42.0195 0 +v 5.81983 19.8377 0 +v 15.8939 20.4594 0 +v 5.23458 16.6144 0 +v 29.8147 21.4832 0 +v 26.728 42.4387 0 +v 7.54301 13.4251 0 +v 25.7235 21.9231 0 +v 9.48558 17.5099 0 +v 3.0507 7.27591 0 +v 3.90094 17.1819 0 +v 25.9949 43.8118 0 +v 2.16774 18.4 0 +v 16.8508 21.2177 0 +v 25.6238 35.3893 0 +v 28.7222 21.5408 0 +v 7.90682 15.9179 0 +v 17.6489 30.5671 0 +v 25.1347 29.5084 0 +v 23.0567 45.4097 0 +v 25.0847 38.194 0 +v 20.4749 20.2941 0 +v 24.1786 28.1995 0 +v 22.0051 28.412 0 +v 23.0327 27.2924 0 +v 22.6267 31.3491 0 +v 26.3106 37.8041 0 +v 27.5506 35.2452 0 +v 10.5695 17.5709 0 +v 27.4382 34.1576 0 +v 2.1364 15.5 0 +v 3.55335 15.8829 0 +v 0.500183 8 0 +v 19.5233 20.529 0 +v 25.9532 25.8966 0 +v 11.9568 20.593 0 +v 3.64681 19.0893 0 +v 22.4646 45.4959 0 +v 3.18285 16.4718 0 +v 22.9988 38.5391 0 +v 2.46864 17.7741 0 +v 24.4469 31.5326 0 +v 22.2412 29.9488 0 +v 27.6524 29.5754 0 +v 24.506 33.8724 0 +v 18.654 29.0187 0 +v 23.4405 43.2361 0 +v 24.2389 28.9631 0 +v 26.132 24.5981 0 +v 11.2472 25.5876 0 +v 30.5002 50.5 0 +v 24.3032 30.6977 0 +v 6.08837 15.4458 0 +v 18.1047 30.1228 0 +v 24.1312 25.0241 0 +v 25.7826 23.2989 0 +v 24.6683 24.5219 0 +v 22.9985 37.5169 0 +v 8.55591 18.8867 0 +v 26.7679 34.6126 0 +v 12.618 20.438 0 +v 25.8215 40.2003 0 +v 7.19669 28.4343 0 +v 12.633 30.526 0 +v 8.37248 27.8892 0 +v 22.808 25.0305 0 +v 20.7253 34.3158 0 +v 18.1395 32.8536 0 +v 25.9083 30.1507 0 +v 17.7571 33.7095 0 +v 8.71417 24.1496 0 +v 20.3276 38.0981 0 +v 6.7613 26.2686 0 +v 20.8808 35.8272 0 +v 21.8843 46.7661 0 +v 9.953 25.3222 0 +v 4.19317 25.1549 0 +v 17.1061 27.3569 0 +v 19.7177 26.9829 0 +v 7.67426 18.1879 0 +v 16.6174 25.3608 0 +v 3.91736 29.5201 0 +v 12.4596 27.2225 0 +v 18.7186 25.7803 0 +v 10.5483 18.8561 0 +v 23.2019 41.0828 0 +v 16.4344 24.2291 0 +v 24.3154 36.8737 0 +v 11.849 23.4324 0 +v 11.0065 22.9657 0 +v 4.59946 22.7026 0 +v 17.8596 23.3733 0 +v 27.328 25.3336 0 +v 24.0742 27.4407 0 +v 26.6259 36.6996 0 +v 25.7154 29.1089 0 +v 23.5345 26.7162 0 +v 22.7084 27.975 0 +v 6.05605 14.2501 0 +v 23.47 27.9088 0 +v 18.9011 29.7056 0 +v 25.9883 42.4229 0 +v 22.6296 43.4076 0 +v 4.92418 19.5023 0 +v 25.356 43.7774 0 +v 0.500183 4.25 0 +v 8.78476 17.4653 0 +v 4.3705 18.2287 0 +v 25.4822 36.3425 0 +v 28.2413 26.039 0 +v 8.1057 13.7461 0 +v 27.9901 22.3539 0 +v 26.3401 43.2731 0 +v 23.2219 29.3157 0 +v 23.3136 44.8694 0 +v 22.5537 29.1601 0 +v 9.09323 15.523 0 +v 27.4459 42.4251 0 +v 19.0004 18.5954 0 +v 18.0929 29.4863 0 +v 22.2213 25.9691 0 +v 27.012 38.9146 0 +v 25.617 37.6127 0 +v 15.5963 31.7284 0 +v 21.1615 20.5886 0 +v 7.25135 20.169 0 +v 27.7782 41.4386 0 +v 23.5853 45.6898 0 +v 3.97456 14.7229 0 +v 24.6303 42.7103 0 +v 17.0871 22.7473 0 +v 22.5554 23.445 0 +v 23.1343 41.9267 0 +v 5.37392 18.7957 0 +v 24.9489 38.8808 0 +v 20.8125 46.4967 0 +v 20.2837 23.3561 0 +v 23.593 30.6961 0 +v 24.224 32.6368 0 +v 18.0095 28.6759 0 +v 6.94027 19.5035 0 +v 12.8949 24.9233 0 +v 7.59017 16.6068 0 +v 2.79204 15.5331 0 +v 6.35189 14.8404 0 +v 4.74422 21.3429 0 +v 21.6641 43.7119 0 +v 24.4157 42.0748 0 +v 6.28078 21.0454 0 +v 9.02638 19.3551 0 +v 25.8186 36.8817 0 +v 23.8061 36.4378 0 +v 25.9841 41.0926 0 +v 27.4908 33.0548 0 +v 14.0017 24.2505 0 +v 26.6808 23.2313 0 +v 13.4743 27.4594 0 +v 27.5671 26.1297 0 +v 7.15794 20.8976 0 +v 26.3003 22.7298 0 +v 23.8807 32.0138 0 +v 4.41878 15.1635 0 +v 25.0441 43.2516 0 +v 5.83748 20.5181 0 +v 26.4042 30.6559 0 +v 8.72578 13.5586 0 +v 23.5236 20.9675 0 +v 8.32803 18.3234 0 +v 23.5248 22.1477 0 +v 20.4778 45.8596 0 +v 12.2498 31.5125 0 +v 11.7831 29.3613 0 +v 20.2169 40.1613 0 +v 17.8996 37.5078 0 +v 9.1325 27.2372 0 +v 17.9719 35.2295 0 +v 8.25619 25.0232 0 +v 14.8706 32.8878 0 +v 18.938 36.7312 0 +v 15.0537 28.8829 0 +v 15.9912 30.609 0 +v 3.37626 22.2286 0 +v 23.2184 44.1886 0 +v 10.4536 20.8079 0 +v 14.9129 22.411 0 +v 8.46863 16.241 0 +v 26.5137 32.5743 0 +v 24.8522 36.4266 0 +v 19.7917 24.458 0 +v 24.4964 29.5485 0 +v 22.2698 43.9501 0 +v 23.99 21.5571 0 +v 6.89996 15.2086 0 +v 8.25971 14.3754 0 +v 22.3835 20.898 0 +v 15.6204 22.5518 0 +v 5.85303 16.2637 0 +v 3.18632 17.4817 0 +v 19.5838 37.5242 0 +v 23.7089 38.9456 0 +v 7.2652 15.8266 0 +v 16.5756 32.2611 0 +v 26.1707 27.5388 0 +v 10.4981 15.3014 0 +v 0.500183 21.125 0 +v 17.5991 21.0475 0 +v 6.51755 20.4918 0 +v 5.75096 23.8074 0 +v 11.39 21.7749 0 +v 7.16936 22.338 0 +v 27.1108 27.074 0 +v 25.9577 34.6183 0 +v 2.81173 20.3529 0 +v 0.500183 11.75 0 +v 5.12658 14.6681 0 +v 5.54631 15.1326 0 +v 8.89523 20.7526 0 +v 21.3045 22.469 0 +v 26.9088 24.6751 0 +v 13.1622 21.2894 0 +v 14.0728 25.6265 0 +v 23.2546 31.4464 0 +v 14.7618 24.5208 0 +v 21.7159 29.2934 0 +v 10.7156 22.4327 0 +v 19.7037 29.9447 0 +v 5.9036 28.5212 0 +v 22.1033 24.2776 0 +v 17.0762 35.4114 0 +v 7.80647 26.5711 0 +v 13.7197 20.7456 0 +v 11.1169 27.8068 0 +v 15.1197 34.9113 0 +v 28.0627 23.7867 0 +v 23.248 33.719 0 +v 18.2888 22.7948 0 +v 7.35714 26.0597 0 +v 7.51771 27.5861 0 +v 26.5032 38.4592 0 +v 23.1406 17.8614 0 +v 5.93297 18.1719 0 +v 6.24436 30.5034 0 +v 20.952 30.5563 0 +v 17.5877 29.1288 0 +v 7.88937 28.3878 0 +v 11.095 19.5928 0 +v 9.41091 16.2183 0 +v 26.1573 39.3577 0 +v 12.6353 21.7513 0 +v 18.7443 23.3529 0 +v 22.6813 24.0524 0 +v 9.8096 15.5006 0 +v 17.647 22.3534 0 +v 21.2352 25.3667 0 +v 20.379 19.5532 0 +v 23.5907 35.8029 0 +v 21.2537 45.8585 0 +v 9.55679 19.7635 0 +v 19.6281 23.3054 0 +v 8.33251 19.4519 0 +v 26.8302 39.6098 0 +v 0.500183 15.5 0 +v 7.25696 25.0647 0 +v 6.7857 17.4011 0 +v 26.8257 45.1902 0 +v 4.48261 20.0339 0 +v 11.478 17.9936 0 +v 24.636 44.2713 0 +v 22.2877 37.864 0 +v 22.1739 36.9448 0 +v 4.67184 22.0227 0 +v 24.0009 44.8706 0 +v 7.9435 18.8692 0 +v 20.7624 47.8912 0 +v 22.1555 36.2819 0 +v 28.3843 25.3739 0 +v 4.24168 14.1572 0 +v 3.85561 16.5096 0 +v 1.47106 16.5004 0 +v 3.11503 21.0143 0 +v 3.54052 20.1071 0 +v 23.5182 25.4304 0 +v 21.6776 24.8075 0 +v 18.2722 22.0746 0 +v 15.0476 26.5869 0 +v 7.35338 19.0463 0 +v 14.2682 28.2719 0 +v 15.5973 34.2665 0 +v 11.2316 17.0223 0 +v 27.1114 41.7898 0 +v 21.8853 21.3383 0 +v 26.8733 26.0295 0 +v 3.69421 18.067 0 +v 22.2074 47.8922 0 +v 25.4354 23.8823 0 +v 5.69476 21.1835 0 +v 23.0002 50.5 0 +v 4.80913 17.1447 0 +v 9.02526 16.8783 0 +v 19.9302 21.482 0 +v 21.2224 21.3887 0 +v 21.3129 48.6487 0 +v 24.5921 25.9856 0 +v 18.0772 20.4471 0 +v 1.21817 9.20052 0 +v 25.9883 44.5408 0 +v 20.9654 31.2211 0 +v 27.2598 43.446 0 +v 19.2884 24.8634 0 +v 25.3217 40.9316 0 +v 19.5708 36.0786 0 +v 24.2698 26.5815 0 +v 25.0143 26.5155 0 +v 21.0487 24.5495 0 +v 21.9924 34.9017 0 +v 8.22786 17.1616 0 +v 25.7668 45.1483 0 +v 9.13656 18.7075 0 +v 26.4006 29.274 0 +v 21.1667 47.3543 0 +v 20.5475 21.0376 0 +v 25.0735 31.2697 0 +v 8.5387 21.3674 0 +v 24.6897 27.0864 0 +v 25.301 42.6968 0 +v 19.9838 25.1174 0 +v 24.7708 45.0502 0 +v 21.0276 28.2868 0 +v 15.4678 21.8468 0 +v 17.5266 24.213 0 +v 25.5334 22.6674 0 +v 21.0452 45.0263 0 +v 22.6053 35.7946 0 +v 25.7353 32.7992 0 +v 17.1794 25.146 0 +v 3.48798 21.5693 0 +v 17.1899 32.0661 0 +v 28.7516 24.3432 0 +v 24.8415 23.0455 0 +v 27.0941 30.8144 0 +v 3.55515 15.1872 0 +v 8.76759 20.0357 0 +v 24.6805 41.1627 0 +v 23.2212 34.4006 0 +v 25.3342 25.8276 0 +v 26.9201 29.9908 0 +v 11.0583 28.6804 0 +v 21.1741 33.4503 0 +v 17.887 19.1963 0 +v 20.7887 22.935 0 +v 6.49686 27.6846 0 +v 27.5057 44.4333 0 +v 8.94897 18.078 0 +v 17.3091 21.758 0 +v 25.3419 44.5286 0 +v 25.5001 0.5 0 +v 26.5215 44.1752 0 +v 8.22981 20.676 0 +v 16.632 20.5437 0 +v 25.6113 38.9718 0 +v 21.784 35.5265 0 +v 26.291 26.4199 0 +v 8.11782 15.3051 0 +v 8.71575 14.9207 0 +v 25.3643 27.6718 0 +v 9.87006 16.8295 0 +v 10.2272 16.0832 0 +v 9.35302 14.4578 0 +v 12.4686 16.422 0 +v 25.408 32.2487 0 +v 6.60359 15.8624 0 +v 29.9357 25.1801 0 +v 5.53768 17.693 0 +v 27.6312 23.0184 0 +v 4.50603 15.8417 0 +v 26.7265 33.8305 0 +v 25.9514 33.7176 0 +v 7.04276 14.5051 0 +v 30.3811 36.2839 0 +v 3.978 19.6383 0 +v 29.0468 44.817 0 +v 2.13344 6.95575 0 +v 23.3785 46.2941 0 +v 25.3136 30.0799 0 +v 27.4486 31.907 0 +v 10.7401 10.812 0 +v 11.7614 16.5395 0 +v 12.2666 17.3926 0 +v 11.6702 17.428 0 +v 14.822 17.4182 0 +v 12.3678 18.3434 0 +v 13.5468 17.1528 0 +v 11.8659 18.8015 0 +v 13.7823 18.8789 0 +v 13.5076 19.8041 0 +v 12.8573 17.0093 0 +v 13.0451 17.835 0 +v 12.9859 18.8467 0 +v 14.2283 19.5147 0 +v 14.8966 18.5717 0 +v 13.2334 20.3605 0 +v 13.9523 17.9766 0 +v 14.1693 17.3581 0 +v 14.6578 15.6299 0 +v 14.5739 16.5393 0 +v 14.2788 18.5052 0 +v 13.5488 15.9862 0 +v 17.0657 16.3105 0 +v 14.1792 16.0443 0 +v 15.8411 16.6561 0 +v 15.1851 16.8413 0 +v 15.3194 16.0624 0 +v 16.1537 14.064 0 +v 16.2518 15.7691 0 +v 16.4267 16.3887 0 +v 16.9369 17.9069 0 +v 16.8375 17.0955 0 +v 18.4161 17.1287 0 +v 17.6205 17.4114 0 +v 17.4538 14.8446 0 +v 17.7924 16.6346 0 +v 17.7682 15.7121 0 +v 18.2882 18.0294 0 +v 17.0019 15.524 0 +v 16.3848 14.9061 0 +v 15.4609 15.1237 0 +v 19.948 14.4313 0 +v 18.3373 18.6987 0 +v 17.5568 18.4449 0 +v 16.6423 19.2951 0 +v 17.2475 19.0291 0 +v 16.3298 19.9169 0 +v 16.8871 14.3155 0 +v 7.70974 11.2095 0 +v 18.2339 13.441 0 +v 16.8475 13.236 0 +v 17.6693 14.0457 0 +v 17.5379 13.3571 0 +v 18.7641 14.502 0 +v 18.3016 14.0701 0 +v 13.7534 13.3048 0 +v 18.2103 15.0611 0 +v 19.4306 15.7159 0 +v 18.6332 16.2139 0 +v 18.9175 15.2077 0 +v 19.5958 15.0359 0 +v 21.4008 15.6823 0 +v 20.4139 15.5947 0 +v 14.4309 14.3797 0 +v 20.9917 14.6883 0 +v 20.7353 17.577 0 +v 14.7961 14.9591 0 +v 15.2956 14.2395 0 +v 20.9381 15.2915 0 +v 20.8269 16.5449 0 +v 14.723 13.4446 0 +v 20.879 15.9574 0 +v 20.0063 16.3367 0 +v 14.1786 13.7877 0 +v 13.0003 14.6396 0 +v 13.4411 14.0084 0 +v 12.118 13.554 0 +v 12.9249 13.3581 0 +v 12.6576 14.0168 0 +v 3.82599 7.96 0 +v 11.8338 14.8758 0 +v 25.3933 12.1685 0 +v 19.2685 16.8479 0 +v 14.3819 12.3788 0 +v 33.0189 29.2798 0 +v 20.0291 17.1577 0 +v 19.9114 18.1603 0 +v 19.116 17.7188 0 +v 19.0863 10.0261 0 +v 21.2375 7.02232 0 +v 6.72413 13.7017 0 +v 5.23273 12.5659 0 +v 5.84389 13.3105 0 +v 5.34725 13.9164 0 +v 6.79184 11.9092 0 +v 6.87912 12.81 0 +v 6.08541 12.4891 0 +v 5.52973 11.0919 0 +v 6.03042 11.7019 0 +v 5.27889 11.8083 0 +v 17.947 10.5915 0 +v 3.21488 12.0628 0 +v 6.55709 11.2696 0 +v 19.9212 10.3692 0 +v 4.2705 12.1271 0 +v 7.92895 12.3427 0 +v 8.22395 13.0184 0 +v 7.49934 9.99002 0 +v 9.1051 12.703 0 +v 7.50414 12.8012 0 +v 10.4702 12.4568 0 +v 10.3854 13.1352 0 +v 8.55332 12.4044 0 +v 9.44897 12.1201 0 +v 43.0789 14.9266 0 +v 9.825 12.6828 0 +v 13.3096 12.8723 0 +v 9.60266 13.5314 0 +v 24.0213 13.3256 0 +v 4.61487 8.66675 0 +v 11.6079 13.0329 0 +v 11.1115 14.0291 0 +v 17.5126 11.1167 0 +v 21.7175 8.15482 0 +v 22.7048 12.2129 0 +v 10.2204 14.1947 0 +v 23.3006 13.0491 0 +v 34.2836 24.2705 0 +v 21.0432 8.2369 0 +v 10.5912 13.7098 0 +v 10.7653 14.6462 0 +v 9.93747 14.8233 0 +v 20.5153 8.66433 0 +v 35.4097 23.6648 0 +v 24.7073 11.2195 0 +v 35.2284 26.7171 0 +v 27.1699 11.8338 0 +v 35.8891 25.8018 0 +v 23.3955 12.2048 0 +v 2.49285 16.9404 0 +v 1.56045 15.6735 0 +v 26.493 27.0075 0 +v 27.1293 28.2946 0 +v 27.6309 26.743 0 +v 30.5483 28.6132 0 +v 19.743 19.8586 0 +v 19.7299 19.0164 0 +v 23.6204 19.3789 0 +v 29.1948 25.5557 0 +v 28.8991 24.9765 0 +v 30.088 26.3991 0 +v 29.4899 26.1378 0 +v 29.4253 27.1009 0 +v 28.7905 26.9626 0 +v 28.7849 28.5144 0 +v 28.5967 27.7378 0 +v 27.9709 28.3006 0 +v 30.5142 27.4654 0 +v 28.2122 29.0381 0 +v 29.5879 29.9676 0 +v 27.5235 28.8808 0 +v 28.578 29.9795 0 +v 27.5545 27.6777 0 +v 30.0542 27.0309 0 +v 28.2836 24.7572 0 +v 28.96 23.7321 0 +v 29.5544 24.4635 0 +v 31.0247 24.141 0 +v 30.3347 24.5081 0 +v 31.3353 25.5566 0 +v 30.6882 25.1724 0 +v 30.6775 25.9274 0 +v 31.6048 26.8035 0 +v 30.8181 26.7074 0 +v 31.2769 26.2218 0 +v 32.3797 25.9834 0 +v 29.5947 22.557 0 +v 28.2095 21.0512 0 +v 29.2184 20.563 0 +v 28.8033 22.35 0 +v 29.2885 21.8927 0 +v 6.14918 17.5862 0 +v 2.81642 18.6479 0 +v 1.95184 19.06 0 +v 3.39283 18.5653 0 +v 0.500183 17.375 0 +v 0.500183 18.3125 0 +v 2.13563 19.6522 0 +v 0.500183 16.4375 0 +v 0.890144 19.7188 0 +v 28.8694 36.0272 0 +v 26.9348 44.6044 0 +v 27.0901 44.0125 0 +v 28.1716 43.7433 0 +v 30.1305 43.0399 0 +v 28.2992 44.5328 0 +v 28.1238 46.1197 0 +v 27.8024 45.281 0 +v 29.0678 43.1597 0 +v 28.5795 45.4642 0 +v 30.5568 46.3995 0 +v 29.3169 46.463 0 +v 28.7786 46.0888 0 +v 20.4485 49.4776 0 +v 28.4733 43.2267 0 +v 21.803 47.3988 0 +v 3.05066 8.17692 0 +v 1.72787 7.55192 0 +v 21.7502 50.5 0 +v 27.1607 32.4923 0 +v 26.5605 31.6513 0 +v 27.1099 31.4131 0 +v 28.1149 31.087 0 +v 12.8201 19.7806 0 +v 14.9458 19.3148 0 +v 15.7892 18.8858 0 +v 15.866 19.5027 0 +v 15.6184 17.9459 0 +v 16.2673 17.5771 0 +v 16.3103 18.3345 0 +v 15.0197 17.9846 0 +v 19.3025 13.57 0 +v 13.8837 15.1247 0 +v 13.1856 15.3491 0 +v 12.4965 15.1501 0 +v 12.6849 15.7905 0 +v 11.9845 15.6486 0 +v 13.8197 14.5042 0 +v 20.3776 14.9342 0 +v 23.8739 14.0833 0 +v 22.1946 16.8326 0 +v 15.7542 13.0247 0 +v 19.1936 10.9035 0 +v 20.6107 9.37901 0 +v 15.6262 13.6703 0 +v 11.217 15.2488 0 +v 20.8544 18.6187 0 +v 20.2427 18.6778 0 +v 21.6936 11.212 0 +v 6.41317 10.583 0 +v 18.6253 10.5277 0 +v 13.1955 11.0994 0 +v 4.63331 13.2968 0 +v 5.23996 13.1831 0 +v 4.60686 12.6639 0 +v 3.62646 13.0219 0 +v 4.02603 13.5397 0 +v 3.85009 10.3322 0 +v 11.7964 14.1763 0 +v 1.84749 26.9959 0 +v 23.3861 13.6777 0 +v 26.8297 27.6887 0 +v 23.8773 20.1918 0 +v 22.9946 20.2578 0 +v 21.9847 19.9055 0 +v 29.7084 28.0637 0 +v 29.0751 29.3025 0 +v 29.9172 29.1834 0 +v 31.512 30.3142 0 +v 30.5886 29.9265 0 +v 31.5896 28.0079 0 +v 32.3377 24.5948 0 +v 29.2979 23.1067 0 +v 31.3976 22.3669 0 +v 29.2517 21.1948 0 +v 1.49314 19.6283 0 +v 1.8893 20.3933 0 +v 1.45764 21.2583 0 +v 0.500183 20.1875 0 +v 2.21229 22.1481 0 +v 2.75849 21.6567 0 +v 0.857706 22.0625 0 +v 2.03747 21.5314 0 +v 1.15385 20.5665 0 +v 28.0597 35.8897 0 +v 28.8472 34.5616 0 +v 28.5766 35.2987 0 +v 28.9638 41.8939 0 +v 29.7002 43.9965 0 +v 28.9095 44.029 0 +v 1.6247 8.20212 0 +v 30.032 48.2897 0 +v 27.7599 30.3691 0 +v 29.0933 30.8455 0 +v 28.9263 32.4272 0 +v 20.83 13.0977 0 +v 19.3409 14.2137 0 +v 18.9789 11.761 0 +v 22.4889 14.6533 0 +v 29.2676 17.5591 0 +v 21.5682 16.4159 0 +v 21.4781 17.2305 0 +v 22.2333 17.7464 0 +v 22.5509 18.8769 0 +v 21.4658 18.0592 0 +v 22.0548 18.4064 0 +v 16.2422 13.4335 0 +v 13.0002 0.5 0 +v 20.7552 10.0768 0 +v 10.6429 9.69206 0 +v 21.6597 10.0139 0 +v 20.5087 18.1305 0 +v 21.0995 11.3016 0 +v 20.4282 7.94861 0 +v 33.3067 23.4453 0 +v 3.72334 12.4125 0 +v 2.10184 14.3189 0 +v 3.79158 11.2926 0 +v 4.66035 11.1896 0 +v 2.21714 10.7147 0 +v 3.09088 10.7679 0 +v 2.60977 11.4674 0 +v 2.74291 9.28228 0 +v 2.27766 12.4101 0 +v 1.54623 11.5434 0 +v 3.13931 9.973 0 +v 0.500183 9.875 0 +v 4.03391 8.99856 0 +v 3.76772 9.61236 0 +v 2.36714 9.95705 0 +v 10.8997 11.9248 0 +v 1.42277 10.1637 0 +v 4.35603 9.90967 0 +v 2.9366 12.7501 0 +v 3.00125 13.5972 0 +v 2.10033 11.8177 0 +v 0.500183 12.6875 0 +v 5.03005 10.5625 0 +v 17.1965 12.5174 0 +v 1.53575 10.849 0 +v 0.996354 8.46875 0 +v 1.97664 9.29757 0 +v 2.3304 7.81719 0 +v 2.34608 8.60339 0 +v 17.543 11.7975 0 +v 0.500183 13.625 0 +v 2.43355 13.2145 0 +v 16.8381 11.2145 0 +v 39.2139 16.5317 0 +v 0.500183 8.9375 0 +v 2.69454 14.1363 0 +v 23.9912 12.5543 0 +v 33.2266 14.1859 0 +v 21.8222 20.5472 0 +v 21.1738 19.7659 0 +v 21.6988 19.141 0 +v 30.32 28.0456 0 +v 29.2156 27.6856 0 +v 29.4435 28.6924 0 +v 31.4183 29.2438 0 +v 33.0836 27.4246 0 +v 32.0502 25.2984 0 +v 31.4615 24.787 0 +v 30.5634 23.0997 0 +v 30.3984 23.7957 0 +v 31.9954 19.4168 0 +v 2.72591 23.1772 0 +v 1.48857 22.84 0 +v 28.0615 34.6427 0 +v 28.355 33.6408 0 +v 29.5298 42.4846 0 +v 30.838 40.6646 0 +v 30.631 41.896 0 +v 30.1824 42.3812 0 +v 31.1065 42.7854 0 +v 28.722 42.551 0 +v 28.1715 42.0615 0 +v 29.632 43.3907 0 +v 30.2934 45.1392 0 +v 29.5227 45.5928 0 +v 30.176 45.8214 0 +v 23.6351 46.879 0 +v 25.5002 50.5 0 +v 28.5145 30.6035 0 +v 29.0864 30.2633 0 +v 30.4932 31.4473 0 +v 28.085 32.4582 0 +v 28.1215 31.7731 0 +v 28.5254 32.9797 0 +v 29.8659 33.5307 0 +v 29.1028 33.4811 0 +v 20.627 13.9219 0 +v 19.9646 13.7463 0 +v 19.8801 12.7319 0 +v 21.7633 13.7647 0 +v 21.2313 14.1043 0 +v 18.8637 12.715 0 +v 17.9916 12.5947 0 +v 19.379 12.2933 0 +v 20.6129 10.9491 0 +v 20.2255 11.8319 0 +v 13.2698 12.2539 0 +v 9.42997 11.4436 0 +v 21.6481 11.9298 0 +v 20.5285 12.4645 0 +v 20.9369 11.88 0 +v 21.2494 12.521 0 +v 22.3141 12.8091 0 +v 19.6086 11.684 0 +v 35.8784 26.5384 0 +v 21.323 9.39946 0 +v 5.73707 10.3957 0 +v 21.747 14.9586 0 +v 21.9362 14.3641 0 +v 22.5131 15.7661 0 +v 28.9642 19.0565 0 +v 23.3142 18.6412 0 +v 25.3278 17.7838 0 +v 24.2414 18.0256 0 +v 24.0629 18.7628 0 +v 24.7326 19.5763 0 +v 22.8983 19.527 0 +v 5.32768 9.43278 0 +v 25.9391 13.5432 0 +v 24.5905 12.9171 0 +v 2.9904 26.577 0 +v 3.36999 8.91598 0 +v 34.8784 12.7947 0 +v 0.500183 14.5625 0 +v 1.93641 14.9148 0 +v 1.29732 14.4165 0 +v 1.21487 15.1812 0 +v 1.6217 13.7253 0 +v 1.13619 12.2188 0 +v 1.23485 13.0185 0 +v 1.66587 12.5593 0 +v 35.5897 30.2184 0 +v 14.2931 12.9947 0 +v 21.2959 10.6127 0 +v 22.5766 9.11196 0 +v 25.8777 12.949 0 +v 39.9832 17.0306 0 +v 35.8817 14.484 0 +v 32.9796 31.5268 0 +v 19.6939 9.735 0 +v 36.984 23.8098 0 +v 40.1654 15.764 0 +v 35.2993 14.7996 0 +v 41.3092 17.299 0 +v 36.2192 12.5307 0 +v 4.76747 6.75338 0 +v 41.0067 15.49 0 +v 36.5782 25.3842 0 +v 24.7128 12.0389 0 +v 2.04837 25.7885 0 +v 33.6609 42.6551 0 +v 31.7028 47.6337 0 +v 36.462 14.7915 0 +v 15.4381 12.1892 0 +v 13.0468 11.6886 0 +v 33.5638 47.2922 0 +v 20.771 48.9487 0 +v 41.5384 18.4283 0 +v 35.8931 15.2825 0 +v 37.6929 12.051 0 +v 34.7992 13.3836 0 +v 14.3749 11.1234 0 +v 15.3738 11.2982 0 +v 5.36443 4.21418 0 +v 4.54418 6.0788 0 +v 11.587 11.2398 0 +v 12.4152 12.5929 0 +v 13.0909 10.0094 0 +v 6.75017 0.5 0 +v 12.4796 10.9178 0 +v 31.1456 46.1884 0 +v 2.66055 6.46375 0 +v 37.4577 14.829 0 +v 1.21795 25.765 0 +v 35.6352 13.045 0 +v 33.8619 14.6325 0 +v 40.6539 16.1898 0 +v 40.7684 16.8276 0 +v 26.4085 12.6749 0 +v 35.3127 24.4236 0 +v 23.0655 11.5981 0 +v 3.59338 26.5711 0 +v 32.9526 38.7941 0 +v 36.3973 24.6379 0 +v 21.9905 9.43316 0 +v 0.500183 25.8125 0 +v 7.36814 6.95455 0 +v 36.4573 11.7898 0 +v 37.4848 13.8238 0 +v 41.3013 16.2162 0 +v 39.8355 23.4676 0 +v 42.1124 15.4643 0 +v 40.0719 17.9432 0 +v 35.9156 13.7912 0 +v 31.1833 29.8036 0 +v 30.7397 29.2646 0 +v 31.2302 28.5879 0 +v 33.6231 29.5902 0 +v 32.4609 26.8362 0 +v 32.3021 27.628 0 +v 32.9729 28.6021 0 +v 32.8144 27.9932 0 +v 33.7319 28.0795 0 +v 33.6933 28.836 0 +v 35.7505 28.5617 0 +v 34.8047 29.3198 0 +v 34.1694 29.2607 0 +v 34.3971 30.256 0 +v 35.1721 26.0055 0 +v 34.2595 26.9088 0 +v 33.7707 27.3927 0 +v 33.3756 26.4918 0 +v 34.1852 25.9211 0 +v 34.6427 26.3833 0 +v 35.6537 27.24 0 +v 33.266 25.4769 0 +v 32.6929 25.1505 0 +v 33.6398 24.1539 0 +v 33.2895 24.7692 0 +v 34.2781 24.9247 0 +v 33.6024 25.954 0 +v 34.7209 25.4685 0 +v 35.9644 24.0036 0 +v 35.7381 25.0718 0 +v 30.4468 22.1721 0 +v 31.2168 20.8311 0 +v 31.0534 21.6289 0 +v 30.488 21.0974 0 +v 32.3419 21.4772 0 +v 30.3618 19.6218 0 +v 31.7227 21.766 0 +v 32.4692 22.5583 0 +v 30.6252 20.3425 0 +v 29.9463 20.609 0 +v 31.2041 19.7225 0 +v 30.9854 17.9791 0 +v 31.87 20.2692 0 +v 31.3116 18.8236 0 +v 33.9743 20.1433 0 +v 31.8929 20.9565 0 +v 32.8553 20.5805 0 +v 30.392 18.6936 0 +v 32.8459 17.7457 0 +v 32.5192 19.9293 0 +v 33.0248 18.8887 0 +v 33.2579 19.9604 0 +v 29.7447 19.1371 0 +v 29.6255 19.9032 0 +v 29.4294 18.3713 0 +v 30.1159 17.8123 0 +v 31.9446 18.0938 0 +v 30.3738 15.4005 0 +v 32.5708 18.3742 0 +v 31.97 18.7553 0 +v 31.7983 16.3744 0 +v 30.021 16.5825 0 +v 32.1222 17.2128 0 +v 29.832 17.2156 0 +v 30.7152 17.1344 0 +v 33.3977 16.2383 0 +v 30.879 16.216 0 +v 31.4284 16.999 0 +v 32.902 16.9115 0 +v 32.5855 16.1593 0 +v 34.3043 17.4249 0 +v 31.8021 14.8402 0 +v 33.5283 17.3726 0 +v 33.1126 14.9541 0 +v 32.0118 15.6078 0 +v 33.9601 16.7483 0 +v 33.8541 18.3225 0 +v 33.0457 15.6427 0 +v 34.1344 15.401 0 +v 31.204 15.4161 0 +v 32.4417 15.0779 0 +v 32.5527 13.8 0 +v 35.7009 16.2886 0 +v 34.8801 16.7062 0 +v 30.2873 16.0183 0 +v 28.6343 15.5832 0 +v 29.5149 15.5951 0 +v 31.5138 17.6278 0 +v 34.3923 16.1193 0 +v 35.145 15.4437 0 +v 36.2585 18.4005 0 +v 29.4201 13.184 0 +v 35.0831 16.0897 0 +v 35.3866 17.702 0 +v 29.6913 14.3807 0 +v 34.9081 17.3186 0 +v 29.8365 15.0218 0 +v 31.4893 23.3124 0 +v 31.8735 22.7979 0 +v 32.5362 23.5851 0 +v 32.9376 24.1615 0 +v 31.798 24.03 0 +v 2.77193 22.5115 0 +v 3.54262 23.0399 0 +v 3.96248 22.5311 0 +v 4.04252 21.8936 0 +v 0.500183 24.875 0 +v 0.948059 22.6339 0 +v 1.53151 22.1605 0 +v 2.15939 22.8172 0 +v 1.85537 23.7527 0 +v 27.7389 33.6193 0 +v 32.3456 41.5512 0 +v 29.742 44.7001 0 +v 29.0799 47.0002 0 +v 29.961 46.9027 0 +v 31.013 47.5441 0 +v 30.594 47.0479 0 +v 31.5472 46.668 0 +v 30.1366 47.589 0 +v 3.29658 6.658 0 +v 29.961 30.7561 0 +v 30.7489 30.7 0 +v 28.9095 31.6258 0 +v 29.7545 32.0089 0 +v 29.5824 31.3371 0 +v 30.8576 32.6932 0 +v 29.6259 32.7833 0 +v 30.2232 32.4846 0 +v 20.2404 13.2126 0 +v 18.4101 12.0888 0 +v 21.6709 13.0749 0 +v 22.752 13.698 0 +v 22.2353 13.4002 0 +v 23.1637 14.3252 0 +v 23.9811 15.5615 0 +v 23.7341 14.8364 0 +v 25.2433 14.727 0 +v 23.2129 15.4185 0 +v 24.503 14.9792 0 +v 23.3871 16.6177 0 +v 25.3502 16.2536 0 +v 23.0897 16.0487 0 +v 24.7552 15.7303 0 +v 24.4198 16.7114 0 +v 28.8017 19.8586 0 +v 25.0032 18.6711 0 +v 24.8291 18.1044 0 +v 26.915 18.8675 0 +v 27.912 19.2609 0 +v 25.8913 19.4297 0 +v 25.2795 19.2468 0 +v 25.9158 18.5019 0 +v 26.9658 17.0425 0 +v 26.3087 18.9765 0 +v 26.7739 19.8237 0 +v 26.2459 17.6319 0 +v 27.2773 19.4095 0 +v 26.0227 20.3209 0 +v 25.6736 17.0236 0 +v 24.973 17.1636 0 +v 26.3305 16.2947 0 +v 27.1156 17.9599 0 +v 25.384 20.7816 0 +v 24.8861 21.2493 0 +v 25.3292 20.0325 0 +v 26.321 16.9466 0 +v 25.8749 15.4498 0 +v 27.4875 15.9554 0 +v 26.552 18.3113 0 +v 28.1109 17.3264 0 +v 28.5522 18.1239 0 +v 27.6177 18.5468 0 +v 27.7778 17.9016 0 +v 25.2558 15.3534 0 +v 27.2155 13.641 0 +v 26.9846 16.3828 0 +v 27.6822 16.6942 0 +v 28.1895 16.1655 0 +v 26.7349 15.5313 0 +v 26.3479 14.3992 0 +v 27.6646 14.7615 0 +v 25.8707 14.8162 0 +v 27.3472 15.3245 0 +v 22.3213 11.6121 0 +v 32.1866 28.9012 0 +v 40.1142 11.7331 0 +v 2.64031 14.8419 0 +v 6.26536 9.89716 0 +v 25.6067 14.1442 0 +v 0.500183 7.0625 0 +v 14.7045 11.6794 0 +v 12.0418 10.323 0 +v 34.0851 23.5307 0 +v 4.8303 5.42838 0 +v 11.6808 12.206 0 +v 39.4455 17.4044 0 +v 36.3941 13.289 0 +v 32.4778 29.6904 0 +v 36.6836 30.6947 0 +v 32.9886 26.0202 0 +v 33.8751 25.3897 0 +v 34.7875 23.8532 0 +v 36.5266 26.1882 0 +v 33.9922 21.8309 0 +v 33.2129 18.2737 0 +v 33.8697 19.2358 0 +v 34.9235 18.7609 0 +v 34.2945 18.7717 0 +v 34.6693 19.6035 0 +v 35.8383 19.4965 0 +v 35.1769 20.9745 0 +v 35.2322 19.3137 0 +v 35.3112 20.1476 0 +v 36.7999 20.8138 0 +v 34.6417 20.4632 0 +v 35.9671 20.6785 0 +v 34.443 21.2069 0 +v 35.1617 22.2011 0 +v 33.5833 21.0606 0 +v 34.6381 21.8228 0 +v 34.3275 22.8042 0 +v 36.5011 20.0223 0 +v 35.8604 21.5963 0 +v 33.1377 21.7908 0 +v 36.6346 19.1733 0 +v 36.2775 22.7842 0 +v 32.9084 21.2062 0 +v 38.16 19.8481 0 +v 35.8346 22.2726 0 +v 37.3534 20.1526 0 +v 38.0662 17.9987 0 +v 37.4914 19.2979 0 +v 38.3374 21.5386 0 +v 38.3711 18.9103 0 +v 37.6637 20.9746 0 +v 37.7187 18.6217 0 +v 37.0871 17.8611 0 +v 40.6743 17.6332 0 +v 38.4936 20.6676 0 +v 37.2805 22.1168 0 +v 36.5323 21.9605 0 +v 36.4374 21.3338 0 +v 37.0092 18.5683 0 +v 36.2631 17.5014 0 +v 37.8811 15.764 0 +v 39.4042 18.058 0 +v 39.6947 19.7009 0 +v 37.6958 21.6208 0 +v 35.6937 17.0286 0 +v 37.7211 16.9023 0 +v 38.7238 18.2856 0 +v 39.3146 18.921 0 +v 40.0727 21.4002 0 +v 38.9494 20.0044 0 +v 39.6292 20.6072 0 +v 37.6325 17.5327 0 +v 36.9399 17.0747 0 +v 36.3311 16.6648 0 +v 36.6456 15.4221 0 +v 37.0894 16.1956 0 +v 36.3027 15.9965 0 +v 40.2868 18.5858 0 +v 38.8377 19.3635 0 +v 41.1747 20.2634 0 +v 39.1971 21.3694 0 +v 39.9227 19.1072 0 +v 40.8456 19.3638 0 +v 40.4535 20.6668 0 +v 41.4874 21.669 0 +v 40.8203 21.3227 0 +v 40.5759 22.6093 0 +v 40.5054 21.9294 0 +v 39.5416 22.3729 0 +v 43.4334 18.927 0 +v 38.8823 22.0383 0 +v 38.3106 23.9816 0 +v 38.7768 23.063 0 +v 39.6208 21.7848 0 +v 42.18 19.3856 0 +v 41.5086 19.6312 0 +v 34.281 13.6743 0 +v 2.79097 24.0565 0 +v 3.39595 24.7284 0 +v 3.55987 25.3803 0 +v 2.73068 25.4571 0 +v 1.61555 25.1656 0 +v 2.69211 24.7539 0 +v 2.33298 26.4916 0 +v 1.0832 23.4688 0 +v 0.500183 23.9375 0 +v 1.21784 24.4062 0 +v 31.5402 41.9818 0 +v 31.1413 41.3487 0 +v 32.6578 43.1038 0 +v 31.93 42.711 0 +v 32.6197 42.3038 0 +v 31.6418 44.1157 0 +v 34.5099 41.1891 0 +v 31.5744 43.37 0 +v 33.4614 41.571 0 +v 30.711 43.8239 0 +v 30.3939 44.4472 0 +v 30.7 43.2252 0 +v 31.3093 45.5846 0 +v 30.8633 48.5071 0 +v 7.46784 11.8441 0 +v 23.7807 17.342 0 +v 24.4019 17.4204 0 +v 23.9425 16.2349 0 +v 28.3617 18.7653 0 +v 24.3497 10.5754 0 +v 29.0912 16.4357 0 +v 28.4998 16.7696 0 +v 25.2881 12.8532 0 +v 27.0697 14.3497 0 +v 25.0217 13.7843 0 +v 39.8669 16.3674 0 +v 22.0568 10.5912 0 +v 35.153 23.0675 0 +v 38.4549 16.6662 0 +v 37.1452 24.8119 0 +v 40.9379 18.7079 0 +v 40.9426 14.7088 0 +v 35.5424 18.4009 0 +v 0.500183 28.625 0 +v 42.0217 17.3822 0 +v 35.2221 13.8009 0 +v 27.8099 5.95093 0 +v 38.7922 17.3593 0 +v 19.9268 11.0651 0 +v 19.95 9.11187 0 +v 25.3979 11.4758 0 +v 26.5968 13.3378 0 +v 18.3304 11.2933 0 +v 34.7228 18.0424 0 +v 37.7074 23.0979 0 +v 14.4413 10.4804 0 +v 10.1393 11.7622 0 +v 4.9758 9.94413 0 +v 24.0161 11.4742 0 +v 34.6352 43.1635 0 +v 3.91007 7.16718 0 +v 36.6926 14.1765 0 +v 1.97815 24.5004 0 +v 3.89603 6.37004 0 +v 14.9161 9.34837 0 +v 11.1257 12.5738 0 +v 12.44 11.6553 0 +v 11.3927 10.5722 0 +v 34.6754 14.5773 0 +v 32.6277 14.4503 0 +v 28.7984 6.78624 0 +v 1.39425 26.4624 0 +v 0.500183 6.125 0 +v 13.9384 11.6002 0 +v 11.0039 11.342 0 +v 16.1308 11.6913 0 +v 15.0649 12.808 0 +v 16.8027 11.925 0 +v 16.2458 12.4437 0 +v 4.67304 9.32727 0 +v 9.70415 10.3377 0 +v 24.5392 14.2849 0 +v 26.2596 11.775 0 +v 26.6347 9.30406 0 +v 26.793 10.592 0 +v 26.7484 11.2837 0 +v 26.0032 10.8883 0 +v 25.2175 10.5149 0 +v 26.128 10.0201 0 +v 24.6355 8.42337 0 +v 25.5444 9.06971 0 +v 26.0394 9.42006 0 +v 24.7206 9.64292 0 +v 27.3193 12.7342 0 +v 28.561 12.0655 0 +v 28.2956 13.3053 0 +v 27.8258 12.1875 0 +v 28.015 11.0516 0 +v 28.281 12.6539 0 +v 27.6815 13.235 0 +v 32.4379 30.6881 0 +v 32.1066 30.1752 0 +v 33.1007 30.2149 0 +v 31.7283 31.7407 0 +v 31.1883 31.2677 0 +v 31.8499 31.0572 0 +v 31.0381 31.9839 0 +v 34.9845 29.9549 0 +v 33.3031 22.6098 0 +v 42.5906 18.2797 0 +v 42.0687 14.2485 0 +v 43.3115 16.4821 0 +v 42.2556 16.4322 0 +v 41.681 16.7549 0 +v 41.8524 15.9973 0 +v 42.812 15.8553 0 +v 42.7551 17.0589 0 +v 43.9707 17.6747 0 +v 43.4576 17.1798 0 +v 44.5184 16.5934 0 +v 43.2504 17.9081 0 +v 39.1001 23.8047 0 +v 40.376 25.6174 0 +v 39.0043 25.2275 0 +v 38.8417 24.5019 0 +v 39.9117 24.6432 0 +v 38.0665 25.0566 0 +v 39.6661 24.0688 0 +v 40.6025 24.0082 0 +v 37.4597 25.8445 0 +v 37.743 24.418 0 +v 40.7369 24.8477 0 +v 40.5206 23.31 0 +v 41.9959 23.0739 0 +v 41.3188 23.5702 0 +v 41.2918 22.8234 0 +v 42.9491 25.0842 0 +v 42.2794 24.1706 0 +v 41.9189 23.6788 0 +v 37.5187 25.2623 0 +v 37.6793 27.8788 0 +v 37.6471 23.76 0 +v 41.7544 25.7943 0 +v 37.3147 26.8891 0 +v 36.4966 27.1231 0 +v 41.0936 25.4844 0 +v 41.6226 24.7698 0 +v 40.9418 26.6678 0 +v 41.2307 24.2308 0 +v 37.1079 26.328 0 +v 37.0598 27.545 0 +v 36.8659 28.6468 0 +v 36.3207 27.9447 0 +v 42.3027 24.8558 0 +v 39.4093 22.9952 0 +v 38.2228 22.4882 0 +v 38.2517 23.3741 0 +v 37.0205 22.8134 0 +v 36.3899 23.463 0 +v 33.3179 12.3776 0 +v 33.2962 13.2829 0 +v 34.0283 12.8476 0 +v 33.6743 13.7662 0 +v 38.6161 11.5526 0 +v 40.663 12.2081 0 +v 40.7412 10.2702 0 +v 38.3349 12.3365 0 +v 29.4262 8.61088 0 +v 39.8493 10.2799 0 +v 38.8 10.1339 0 +v 39.1311 14.3711 0 +v 37.299 15.4642 0 +v 33.528 40.1237 0 +v 33.8591 45.5924 0 +v 33.6229 43.9158 0 +v 33.2442 42.1714 0 +v 34.2092 41.9938 0 +v 35.7281 42.103 0 +v 34.2968 42.6243 0 +v 34.9569 42.2112 0 +v 35.5002 50.5 0 +v 26.2117 47.3041 0 +v 22.7399 47.13 0 +v 22.4733 46.569 0 +v 23.3674 47.6462 0 +v 23.1922 49.0742 0 +v 23.49 48.386 0 +v 24.51 49.2359 0 +v 22.724 48.4631 0 +v 23.8749 48.9611 0 +v 24.2502 50.5 0 +v 22.3129 49.263 0 +v 22.0216 48.5795 0 +v 23.122 49.7906 0 +v 23.6252 50.2422 0 +v 23.9573 49.642 0 +v 21.3527 49.6662 0 +v 21.1252 50.5 0 +v 22.0023 49.8682 0 +v 4.75627 7.71526 0 +v 6.03723 7.24917 0 +v 5.30887 7.24069 0 +v 5.71004 8.34325 0 +v 5.08734 8.25071 0 +v 12.05 8.43843 0 +v 13.676 10.5033 0 +v 13.9637 9.569 0 +v 14.5311 9.85249 0 +v 15.5467 10.229 0 +v 13.0738 8.89043 0 +v 16.0858 10.8615 0 +v 16.861 9.6549 0 +v 17.1718 10.3925 0 +v 16.2907 10.1409 0 +v 15.9431 9.15541 0 +v 13.354 9.44576 0 +v 10.3566 10.2811 0 +v 10.0255 11.0043 0 +v 8.6598 10.6657 0 +v 9.00797 8.32036 0 +v 26.6582 6.54127 0 +v 25.4281 9.81728 0 +v 23.5632 9.72254 0 +v 24.897 9.01786 0 +v 24.0527 9.03447 0 +v 23.3122 9.02579 0 +v 22.8224 8.02721 0 +v 23.7439 8.15657 0 +v 23.6316 5.6093 0 +v 24.6231 6.84169 0 +v 24.3859 7.63443 0 +v 23.3699 6.89854 0 +v 25.7776 7.61903 0 +v 24.0064 7.08902 0 +v 23.8862 6.33215 0 +v 25.0842 7.84746 0 +v 24.9774 5.54163 0 +v 25.6306 8.33948 0 +v 24.3145 5.77505 0 +v 24.2525 4.541 0 +v 26.7391 8.19042 0 +v 23.3539 7.58792 0 +v 28.9312 13.9238 0 +v 28.9336 14.7805 0 +v 28.1389 14.1022 0 +v 28.2957 14.9997 0 +v 33.8703 22.4173 0 +v 42.0166 18.0145 0 +v 42.7359 18.9628 0 +v 43.1428 20.0747 0 +v 42.1181 18.7334 0 +v 42.4008 14.8453 0 +v 41.6622 14.8779 0 +v 39.7151 25.3346 0 +v 39.491 26.7717 0 +v 39.7863 26.0818 0 +v 40.4152 26.2739 0 +v 41.102 22.1975 0 +v 44.9917 22.8846 0 +v 38.7696 29.8483 0 +v 36.244 29.4457 0 +v 35.5175 29.461 0 +v 30.2638 10.4944 0 +v 38.3951 14.9679 0 +v 38.009 14.3409 0 +v 38.5736 13.2443 0 +v 38.1198 13.7043 0 +v 39.2972 15.3282 0 +v 38.7092 15.8921 0 +v 40.0047 14.7125 0 +v 40.095 13.1928 0 +v 40.4417 15.1837 0 +v 40.4708 13.9777 0 +v 39.7087 13.8602 0 +v 39.0577 13.7061 0 +v 41.4543 13.0244 0 +v 41.2951 13.9636 0 +v 40.8029 13.3363 0 +v 36.9591 12.3598 0 +v 33.7967 40.8613 0 +v 32.8691 40.7814 0 +v 31.8595 40.6211 0 +v 32.9069 41.37 0 +v 32.5186 39.7713 0 +v 32.9381 40.1916 0 +v 32.5833 45.8726 0 +v 32.9353 46.6779 0 +v 32.1222 46.3444 0 +v 33.2895 46.0435 0 +v 33.0002 50.5 0 +v 32.854 47.4153 0 +v 32.3378 47.9179 0 +v 33.3368 43.2763 0 +v 25.1407 46.4013 0 +v 26.2566 46.171 0 +v 21.6978 49.1432 0 +v 6.92607 8.11095 0 +v 6.08321 9.08607 0 +v 6.36614 8.47879 0 +v 7.15423 9.06832 0 +v 6.62391 9.39064 0 +v 7.95124 8.37251 0 +v 7.36994 8.51104 0 +v 8.02919 9.26617 0 +v 8.50074 8.77481 0 +v 9.43126 9.3031 0 +v 8.27104 9.99905 0 +v 7.87866 10.5524 0 +v 7.14898 10.7151 0 +v 15.0728 10.7009 0 +v 12.3556 9.46106 0 +v 11.5079 9.64049 0 +v 12.4714 8.86949 0 +v 11.0175 8.69608 0 +v 11.8282 9.0617 0 +v 13.7795 5.90648 0 +v 15.495 9.59992 0 +v 17.7476 6.93256 0 +v 9.28192 10.82 0 +v 8.56244 11.5323 0 +v 24.161 9.96034 0 +v 23.3824 10.6784 0 +v 22.6984 10.9571 0 +v 22.7571 10.0651 0 +v 22.3151 8.48251 0 +v 22.1776 7.29182 0 +v 22.2458 7.88235 0 +v 21.5986 7.53724 0 +v 20.258 5.03654 0 +v 21.8848 6.53858 0 +v 14.232 2.85194 0 +v 22.7152 6.35626 0 +v 20.932 5.93854 0 +v 14.4946 3.86256 0 +v 19.2501 0.5 0 +v 22.74 6.99273 0 +v 26.2441 8.70574 0 +v 26.575 7.37192 0 +v 40.1648 9.58951 0 +v 38.0001 0.5 0 +v 27.1106 7.6902 0 +v 42.181 20.4013 0 +v 38.4145 27.0459 0 +v 43.7591 23.7881 0 +v 46.0223 20.1932 0 +v 37.9718 29.0034 0 +v 36.2902 28.8402 0 +v 36.2761 30.1363 0 +v 37.2412 29.7454 0 +v 29.2109 11.0615 0 +v 37.504 11.3742 0 +v 41.7661 11.9736 0 +v 31.7759 41.2569 0 +v 33.1856 39.4826 0 +v 34.9238 38.5106 0 +v 34.2415 39.3307 0 +v 34.5143 40.2399 0 +v 35.8134 40.7205 0 +v 35.0762 40.7171 0 +v 35.4417 41.3914 0 +v 30.8027 38.4242 0 +v 35.8941 44.9041 0 +v 33.4078 48.5005 0 +v 25.2141 45.655 0 +v 24.4057 45.9522 0 +v 24.4228 46.7502 0 +v 25.1942 47.4245 0 +v 24.1115 47.3198 0 +v 26.2819 45.5303 0 +v 27.1877 46.0558 0 +v 27.5689 47.3596 0 +v 26.8022 46.7601 0 +v 27.6182 46.6375 0 +v 28.3438 46.8402 0 +v 25.7881 46.7199 0 +v 7.57756 7.6973 0 +v 8.74667 6.96676 0 +v 8.38627 7.69075 0 +v 8.05639 7.07483 0 +v 8.11041 5.16128 0 +v 8.26098 6.12307 0 +v 7.13304 5.80698 0 +v 10.7766 5.23654 0 +v 7.76921 5.70738 0 +v 9.60107 5.91327 0 +v 8.97136 6.27577 0 +v 8.90697 5.43572 0 +v 11.4377 0.5 0 +v 9.79419 4.88935 0 +v 9.96726 9.71504 0 +v 10.18 8.88355 0 +v 9.56457 8.66315 0 +v 9.93428 7.43953 0 +v 9.49039 6.82657 0 +v 10.5912 6.49662 0 +v 10.4434 8.09582 0 +v 10.7668 7.31927 0 +v 9.96872 6.42118 0 +v 12.2538 6.57166 0 +v 11.4127 6.75127 0 +v 11.2126 5.94439 0 +v 12.4776 4.67706 0 +v 11.6939 5.15977 0 +v 12.0101 7.48956 0 +v 11.0854 3.40745 0 +v 12.5327 5.64408 0 +v 13.5228 7.39992 0 +v 11.3899 7.99091 0 +v 11.641 4.19632 0 +v 11.911 5.96289 0 +v 13.2949 5.11559 0 +v 13.0449 6.30375 0 +v 13.7145 6.66408 0 +v 12.8532 7.03959 0 +v 15.7537 6.45756 0 +v 12.8007 7.93946 0 +v 14.7146 6.36835 0 +v 14.193 8.39302 0 +v 11.1939 4.70404 0 +v 13.0476 2.6155 0 +v 13.3278 3.37405 0 +v 14.3411 9.03225 0 +v 13.4652 8.26331 0 +v 12.5476 3.58684 0 +v 14.2145 5.0961 0 +v 12.2443 4.11472 0 +v 11.8185 3.48123 0 +v 15.0117 5.51712 0 +v 12.4213 2.2122 0 +v 12.9568 1.43929 0 +v 9.87517 0.5 0 +v 13.2703 4.18063 0 +v 11.5398 2.57113 0 +v 12.508 2.95207 0 +v 9.87239 2.20675 0 +v 16.1252 0.5 0 +v 13.8288 3.8151 0 +v 14.4197 5.78792 0 +v 15.2626 6.08215 0 +v 16.2426 5.30893 0 +v 10.6532 2.63101 0 +v 12.2189 0.934593 0 +v 22.0355 5.24282 0 +v 14.9755 4.62034 0 +v 9.81643 3.60527 0 +v 10.7796 1.46766 0 +v 11.6882 1.67352 0 +v 22.1835 5.91667 0 +v 22.8349 5.42048 0 +v 22.785 3.75783 0 +v 23.4106 4.7663 0 +v 14.5627 0.5 0 +v 16.6691 3.014 0 +v 15.565 5.04564 0 +v 15.925 3.92544 0 +v 9.99484 2.91203 0 +v 8.29439 2.84399 0 +v 9.15193 2.6951 0 +v 10.4777 2.02339 0 +v 11.3324 1.13597 0 +v 23.6372 3.92743 0 +v 13.7814 1.00669 0 +v 15.2077 3.94148 0 +v 15.5422 2.85347 0 +v 8.86742 3.60047 0 +v 6.98196 4.9705 0 +v 11.1394 2.04389 0 +v 20.9404 2.56721 0 +v 14.8078 1.73368 0 +v 13.7604 1.96886 0 +v 9.33871 4.23923 0 +v 8.48245 4.37774 0 +v 8.31267 0.5 0 +v 25.3588 2.81633 0 +v 19.9683 2.97054 0 +v 14.4395 1.16569 0 +v 13.1532 2.01574 0 +v 13.6695 2.58486 0 +v 8.9883 4.78893 0 +v 6.93257 4.12191 0 +v 24.6185 3.55865 0 +v 6.58989 2.39216 0 +v 22.3751 0.5 0 +v 7.49499 2.41871 0 +v 7.67077 4.47243 0 +v 9.97381 1.38971 0 +v 7.66315 3.53588 0 +v 7.06958 1.47993 0 +v 9.09392 1.03694 0 +v 5.98754 5.58199 0 +v 5.6826 6.42541 0 +v 6.17344 4.59182 0 +v 6.82847 3.24372 0 +v 8.27126 3.45678 0 +v 9.11586 1.86627 0 +v 6.60426 5.4706 0 +v 5.36529 5.83385 0 +v 6.57588 6.52906 0 +v 5.50051 4.97802 0 +v 6.0889 3.71756 0 +v 7.37969 3.00731 0 +v 8.24659 1.96987 0 +v 5.81115 2.21359 0 +v 7.63032 1.79161 0 +v 7.70155 1.00319 0 +v 5.22723 3.23729 0 +v 3.25767 4.01199 0 +v 5.18767 0.5 0 +v 3.62518 0.5 0 +v 6.09227 2.96145 0 +v 5.0614 2.46432 0 +v 5.69913 1.28413 0 +v 4.03193 3.08944 0 +v 4.65526 2.95572 0 +v 4.52309 3.85925 0 +v 4.15116 2.12554 0 +v 6.50287 1.76417 0 +v 4.68863 4.64148 0 +v 3.68671 5.22806 0 +v 3.19222 5.86134 0 +v 3.94524 4.39017 0 +v 4.29524 5.1185 0 +v 1.78606 5.15614 0 +v 3.85988 3.73123 0 +v 2.396 5.69445 0 +v 1.75417 6.21882 0 +v 2.6678 4.77177 0 +v 3.06443 5.25186 0 +v 3.34842 4.66113 0 +v 0.500183 2.375 0 +v 4.86624 1.59646 0 +v 5.96892 0.5 0 +v 6.36564 1.08105 0 +v 1.74246 3.85256 0 +v 1.09562 6.59375 0 +v 1.13454 7.25575 0 +v 3.23353 2.50136 0 +v 3.27188 3.25626 0 +v 2.53288 3.62036 0 +v 2.2836 4.23318 0 +v 2.13583 1.3283 0 +v 2.65656 2.93936 0 +v 2.46723 2.09094 0 +v 4.06156 1.25667 0 +v 1.55684 2.73943 0 +v 1.99153 3.23899 0 +v 2.06268 0.5 0 +v 4.40643 0.5 0 +v 1.76961 2.07484 0 +v 2.14889 2.60731 0 +v 1.31851 1.39045 0 +v 2.84393 0.848384 0 +v 3.20399 1.63592 0 +v 8.73161 9.4518 0 +v 17.0516 8.21145 0 +v 28.364 8.14871 0 +v 27.8498 8.85623 0 +v 42.5448 19.8931 0 +v 43.1831 21.7732 0 +v 41.5992 20.9065 0 +v 42.4277 21.273 0 +v 42.8161 20.6923 0 +v 43.9652 20.9049 0 +v 42.3524 22.2072 0 +v 43.2185 22.8529 0 +v 42.7051 23.4805 0 +v 42.9409 22.3215 0 +v 37.8223 27.2641 0 +v 37.9393 26.4434 0 +v 38.4177 25.7881 0 +v 39.1051 25.9202 0 +v 38.86 26.5445 0 +v 43.0955 24.2746 0 +v 37.5168 28.5214 0 +v 38.8529 28.1738 0 +v 36.8408 29.2688 0 +v 38.0073 29.769 0 +v 38.215 31.4753 0 +v 38.3063 30.5984 0 +v 40.1778 31.2363 0 +v 37.5135 30.9591 0 +v 37.6076 30.3006 0 +v 39.1691 31.1313 0 +v 36.3864 33.0625 0 +v 38.9693 30.4898 0 +v 40.272 29.7324 0 +v 39.5341 29.9621 0 +v 39.2815 29.0344 0 +v 40.099 30.4764 0 +v 42.1899 30.5706 0 +v 41.1341 30.753 0 +v 36.7547 31.9062 0 +v 38.6227 29.188 0 +v 40.3041 27.9881 0 +v 36.9521 31.2868 0 +v 39.6108 28.3334 0 +v 39.3766 27.5659 0 +v 40.306 28.8606 0 +v 39.8501 29.2794 0 +v 42.4242 28.4197 0 +v 41.5116 29.3441 0 +v 40.8226 29.3172 0 +v 41.2032 28.403 0 +v 41.141 29.9998 0 +v 41.8409 29.9628 0 +v 42.3734 29.2823 0 +v 41.0572 27.5377 0 +v 41.8094 28.7254 0 +v 44.7224 28.9878 0 +v 41.8213 27.8538 0 +v 43.3279 26.8529 0 +v 42.6921 27.5302 0 +v 43.5206 28.9171 0 +v 41.942 26.8452 0 +v 42.8768 28.8791 0 +v 43.7194 27.8574 0 +v 42.635 26.8395 0 +v 42.9978 25.9987 0 +v 43.0674 28.1283 0 +v 43.2839 27.4486 0 +v 42.325 26.2071 0 +v 42.4282 25.5295 0 +v 44.9538 25.436 0 +v 44.0216 24.8601 0 +v 44.0779 26.0721 0 +v 43.5207 26.2875 0 +v 43.5736 25.5095 0 +v 28.6102 11.385 0 +v 30.0071 7.96642 0 +v 39.3187 12.9479 0 +v 39.1486 12.159 0 +v 33.8944 38.348 0 +v 31.8309 38.8809 0 +v 32.1896 47.1367 0 +v 25.7713 47.942 0 +v 24.3554 48.5518 0 +v 24.974 48.4265 0 +v 30.3534 49.4437 0 +v 30.3355 48.8269 0 +v 28.0002 50.5 0 +v 25.8623 48.7118 0 +v 10.1366 5.4841 0 +v 10.6022 5.88333 0 +v 15.136 7.55641 0 +v 14.3541 7.22357 0 +v 14.5507 7.84646 0 +v 15.2278 8.47714 0 +v 16.079 7.92733 0 +v 15.8618 8.52486 0 +v 20.0245 6.77924 0 +v 21.155 5.06913 0 +v 20.0141 2.06765 0 +v 21.7867 4.18559 0 +v 21.6713 4.77066 0 +v 10.6564 0.5 0 +v 22.5776 4.58479 0 +v 17.3473 4.32712 0 +v 16.0572 3.27391 0 +v 14.8867 3.22128 0 +v 14.8756 2.47597 0 +v 16.2693 1.78465 0 +v 15.5441 2.07297 0 +v 15.3439 0.5 0 +v 15.7345 1.19426 0 +v 15.0887 1.10059 0 +v 23.4571 2.6065 0 +v 37.6113 12.7489 0 +v 8.39214 1.25081 0 +v 0.500183 5.1875 0 +v 1.13207 4.71875 0 +v 1.15494 5.65625 0 +v 0.918682 3.41788 0 +v 1.11744 4.03914 0 +v 0.943979 2.80232 0 +v 1.28143 0.5 0 +v 0.500183 1.4375 0 +v 1.08936 2.03234 0 +v 9.04942 10.0797 0 +v 16.6788 8.89652 0 +v 40.7576 11.5443 0 +v 28.0384 7.39485 0 +v 27.135 8.78924 0 +v 27.5474 8.23566 0 +v 39.9091 12.4294 0 +v 27.3769 6.92179 0 +v 29.193 9.44662 0 +v 39.2376 10.7294 0 +v 28.619 8.92924 0 +v 39.9098 11.0366 0 +v 28.21 9.95999 0 +v 31.0506 10.2132 0 +v 29.9257 9.20065 0 +v 30.698 9.17329 0 +v 40.5532 10.9004 0 +v 31.2679 8.33563 0 +v 27.1651 5.89021 0 +v 29.155 7.78237 0 +v 31.8822 10.2944 0 +v 30.0954 5.47477 0 +v 34.4238 12.3467 0 +v 31.9938 11.3374 0 +v 43.3311 21.1202 0 +v 44.2949 19.7558 0 +v 44.2961 21.9893 0 +v 44.1034 22.9653 0 +v 43.7276 22.3841 0 +v 38.1853 28.3475 0 +v 39.444 33.3892 0 +v 41.5086 26.3803 0 +v 44.1489 28.4865 0 +v 45.2924 27.2446 0 +v 44.9849 28.1089 0 +v 44.4609 27.4356 0 +v 47.4668 28.5051 0 +v 44.7133 26.6291 0 +v 46.1266 28.9286 0 +v 44.04 26.8612 0 +v 44.6983 26.0053 0 +v 45.8877 26.1972 0 +v 45.4143 28.7158 0 +v 46.0389 27.9234 0 +v 45.4623 29.8539 0 +v 45.3671 26.5942 0 +v 44.9155 24.0731 0 +v 44.4231 23.5825 0 +v 44.2984 25.4546 0 +v 25.999 4.16518 0 +v 34.3607 38.7359 0 +v 33.653 38.9859 0 +v 32.5205 36.6645 0 +v 32.4152 39.1404 0 +v 31.6197 39.7547 0 +v 31.3341 40.3001 0 +v 30.4017 39.551 0 +v 31.0923 39.1648 0 +v 30.9838 39.7813 0 +v 29.0988 49.1713 0 +v 24.7297 47.8476 0 +v 15.1952 6.86665 0 +v 15.8704 7.20262 0 +v 16.7536 6.68268 0 +v 20.6931 6.59081 0 +v 20.049 5.89553 0 +v 18.8489 6.30439 0 +v 19.525 6.32317 0 +v 19.1498 5.22184 0 +v 19.7436 5.36629 0 +v 18.3425 2.43553 0 +v 16.7233 3.8177 0 +v 16.6029 4.60199 0 +v 15.9703 4.55794 0 +v 16.1678 2.49733 0 +v 22.3853 2.75263 0 +v 24.2286 2.25696 0 +v 24.7464 2.94586 0 +v 25.1716 4.32412 0 +v 25.3877 3.58543 0 +v 29.572 4.79695 0 +v 35.3898 11.8554 0 +v 31.8694 7.52036 0 +v 25.6531 5.02519 0 +v 24.8206 4.89236 0 +v 39.33 11.4626 0 +v 25.8514 5.98493 0 +v 26.3136 4.94669 0 +v 42.2867 8.37704 0 +v 26.5175 5.8821 0 +v 41.1965 11.0372 0 +v 25.8811 6.80499 0 +v 25.2613 7.13977 0 +v 25.2221 6.39154 0 +v 27.1995 5.2435 0 +v 28.6634 7.39646 0 +v 30.2912 8.60497 0 +v 30.333 9.78525 0 +v 34.2566 11.7307 0 +v 41.2934 9.11579 0 +v 42.2278 9.90642 0 +v 30.9554 11.1883 0 +v 31.2852 12.1108 0 +v 41.5399 10.3147 0 +v 30.0164 12.0441 0 +v 42.4342 11.0377 0 +v 41.6239 9.67264 0 +v 42.1778 9.13868 0 +v 41.8154 10.8886 0 +v 44.284 9.05102 0 +v 43.2459 9.45462 0 +v 32.502 6.51875 0 +v 31.4352 11.537 0 +v 30.1748 11.2748 0 +v 30.6647 11.8124 0 +v 40.8354 9.60599 0 +v 28.9904 10.2564 0 +v 29.6514 9.99155 0 +v 28.4278 10.5621 0 +v 29.6506 10.6169 0 +v 27.56 10.4071 0 +v 27.3571 11.0332 0 +v 27.034 9.9087 0 +v 43.8082 20.238 0 +v 45.1923 21.1231 0 +v 39.0484 32.2917 0 +v 41.6365 32.935 0 +v 46.1573 27.0433 0 +v 48.3019 25.8941 0 +v 47.0011 27.6048 0 +v 47.1229 26.2697 0 +v 46.4914 26.4709 0 +v 46.6881 28.3731 0 +v 44.041 30.3191 0 +v 47.3664 30.5198 0 +v 44.7272 24.7604 0 +v 45.9504 24.7259 0 +v 32.9996 37.6759 0 +v 32.5082 49.7951 0 +v 29.2502 50.5 0 +v 17.0995 7.40868 0 +v 16.3724 6.04255 0 +v 17.3874 5.48463 0 +v 16.8494 5.17289 0 +v 19.469 3.72417 0 +v 22.056 3.45658 0 +v 23.3195 3.29801 0 +v 24.7189 0.906208 0 +v 21.2859 3.56127 0 +v 20.3889 3.7708 0 +v 20.9843 4.2947 0 +v 19.8979 4.35966 0 +v 24.0222 3.07841 0 +v 21.6406 2.83326 0 +v 20.8126 0.5 0 +v 21.4835 2.19227 0 +v 22.6501 1.2136 0 +v 23.1564 0.5 0 +v 19.2287 2.48045 0 +v 20.7281 3.19807 0 +v 22.7584 1.97062 0 +v 18.747 3.2186 0 +v 18.4689 0.982228 0 +v 22.1333 2.15237 0 +v 21.5939 0.5 0 +v 23.9376 0.5 0 +v 18.5239 4.30558 0 +v 17.6932 3.26697 0 +v 19.3933 1.84001 0 +v 20.0314 0.5 0 +v 21.2033 1.32425 0 +v 18.8706 3.81038 0 +v 19.3746 1.13279 0 +v 21.8885 1.1443 0 +v 20.1547 1.28528 0 +v 37.0978 13.2333 0 +v 35.747 8.94674 0 +v 38.1707 10.7736 0 +v 36.8609 9.99012 0 +v 37.3953 10.5833 0 +v 36.7778 11.0711 0 +v 37.8628 9.62466 0 +v 38.1816 10.1549 0 +v 43.1293 12.9498 0 +v 41.2805 12.4012 0 +v 28.068 6.64802 0 +v 30.8566 7.40274 0 +v 31.7337 9.26523 0 +v 31.5326 10.8593 0 +v 33.2749 10.6728 0 +v 32.2914 12.3214 0 +v 32.7791 12.8176 0 +v 43.4108 8.34206 0 +v 44.4775 11.0858 0 +v 43.0314 10.3443 0 +v 44.0589 10.1213 0 +v 43.45 11.3088 0 +v 43.4913 9.98446 0 +v 43.0076 10.9277 0 +v 27.6394 9.53556 0 +v 44.523 21.3274 0 +v 45.1873 22.0147 0 +v 46.6371 21.5772 0 +v 46.1837 22.6956 0 +v 45.8448 21.5726 0 +v 45.8466 20.8717 0 +v 46.2381 22.0666 0 +v 47.232 22.4694 0 +v 45.5502 22.5532 0 +v 38.8287 31.6824 0 +v 39.6131 31.764 0 +v 40.6494 32.307 0 +v 37.9047 33.324 0 +v 41.8479 31.7375 0 +v 48.5042 27.3978 0 +v 44.6558 29.7938 0 +v 43.9274 29.5636 0 +v 43.0658 30.0795 0 +v 42.4647 29.9023 0 +v 46.5124 29.9066 0 +v 46.9519 29.1802 0 +v 48.1344 29.5482 0 +v 47.2119 29.8337 0 +v 47.6103 29.1484 0 +v 33.2702 38.2474 0 +v 32.3431 38.2084 0 +v 31.5473 38.1336 0 +v 30.7982 37.3134 0 +v 32.0187 37.389 0 +v 31.3982 37.5177 0 +v 31.4232 36.4609 0 +v 31.9295 36.7911 0 +v 34.7763 36.2153 0 +v 31.6486 49.7862 0 +v 31.2734 49.1706 0 +v 31.7119 48.4647 0 +v 32.5532 48.7961 0 +v 31.9577 49.1349 0 +v 31.7502 50.5 0 +v 34.2046 49.5633 0 +v 34.2502 50.5 0 +v 33.1871 49.1862 0 +v 29.8752 50.0485 0 +v 29.2404 49.8282 0 +v 28.3555 49.6753 0 +v 28.6252 50.5 0 +v 28.4554 49.0224 0 +v 28.0848 48.4758 0 +v 28.5403 47.7096 0 +v 29.3521 47.83 0 +v 29.3749 48.5289 0 +v 26.7502 50.5 0 +v 27.9345 47.8679 0 +v 26.9564 48.4323 0 +v 26.3312 48.266 0 +v 28.7363 48.3447 0 +v 27.3752 49.7418 0 +v 27.3752 50.5 0 +v 26.3884 49.5651 0 +v 18.3008 5.56893 0 +v 18.1079 6.28469 0 +v 17.9031 4.88729 0 +v 18.5524 4.95806 0 +v 17.0854 1.57034 0 +v 19.2038 4.51301 0 +v 17.9285 3.93028 0 +v 20.7181 1.87091 0 +v 34.9842 10.3293 0 +v 36.9764 8.75053 0 +v 38.9992 8.65026 0 +v 42.2789 12.6975 0 +v 42.6449 11.8946 0 +v 42.4984 13.5169 0 +v 43.4548 12.1616 0 +v 43.4555 13.9472 0 +v 42.7923 14.2367 0 +v 41.8342 13.5719 0 +v 44.0798 11.7317 0 +v 46.0187 12.4802 0 +v 44.5289 13.054 0 +v 45.1187 11.926 0 +v 44.1178 12.4562 0 +v 31.3293 7.75146 0 +v 30.6693 8.04241 0 +v 29.8937 6.8735 0 +v 29.673 7.44874 0 +v 26.2288 3.16871 0 +v 31.1831 9.58858 0 +v 31.2415 8.93037 0 +v 32.2454 8.42729 0 +v 34.236 7.07045 0 +v 32.9783 9.45004 0 +v 33.0995 7.54171 0 +v 32.3952 9.09395 0 +v 32.3689 9.79255 0 +v 32.5787 10.483 0 +v 32.4798 7.79868 0 +v 33.4206 11.5221 0 +v 32.8301 11.8851 0 +v 32.7644 11.1733 0 +v 31.5804 13.2094 0 +v 43.6454 8.94535 0 +v 42.8634 8.8294 0 +v 47.5068 4.36837 0 +v 45.8157 9.93189 0 +v 43.6367 10.6547 0 +v 46.9738 23.815 0 +v 49.3382 20.4205 0 +v 40.933 31.5429 0 +v 40.6037 33.4685 0 +v 39.8458 32.6243 0 +v 40.4109 32.8793 0 +v 38.1167 32.4092 0 +v 37.2398 32.688 0 +v 37.5396 31.8762 0 +v 38.6877 33.0417 0 +v 41.7326 31.0701 0 +v 41.3663 32.2699 0 +v 47.7893 27.7676 0 +v 47.5409 26.981 0 +v 48.6355 28.5274 0 +v 46.8976 26.9698 0 +v 47.7983 26.3513 0 +v 48.0548 28.323 0 +v 46.0043 29.5419 0 +v 45.8977 31.6641 0 +v 29.0298 37.876 0 +v 28.2846 37.0099 0 +v 27.9564 36.4931 0 +v 30.8475 36.6942 0 +v 31.1848 34.7087 0 +v 34.5747 37.3806 0 +v 27.5003 48.9801 0 +v 26.8461 49.0857 0 +v 26.1252 50.2044 0 +v 25.4362 49.5563 0 +v 24.8752 50.0683 0 +v 25.0979 49.0353 0 +v 17.3579 6.23567 0 +v 17.9235 1.66695 0 +v 17.3867 2.3584 0 +v 17.6877 0.5 0 +v 18.665 1.69791 0 +v 16.9064 0.5 0 +v 16.5158 1.10657 0 +v 17.5604 1.13303 0 +v 35.9779 10.466 0 +v 34.8916 11.1708 0 +v 34.0896 10.9012 0 +v 35.6466 11.1449 0 +v 33.941 9.86394 0 +v 37.2124 9.3977 0 +v 36.4299 9.33389 0 +v 35.7586 9.72214 0 +v 38.6168 9.35408 0 +v 37.9415 8.65829 0 +v 39.4122 9.33051 0 +v 40.1468 8.41893 0 +v 40.6147 8.94076 0 +v 41.2077 7.93832 0 +v 39.9443 9.00746 0 +v 37.2105 6.10439 0 +v 37.339 7.44919 0 +v 37.4078 8.16957 0 +v 44.695 14.9859 0 +v 43.8084 13.2797 0 +v 44.4406 14.0347 0 +v 45.6122 13.6459 0 +v 43.8967 14.6898 0 +v 43.7381 15.6297 0 +v 45.1932 14.343 0 +v 47.2808 15.1231 0 +v 45.9665 15.4568 0 +v 45.4048 15.0215 0 +v 46.2955 14.4523 0 +v 45.159 15.9188 0 +v 44.9419 13.5855 0 +v 45.3136 12.8705 0 +v 43.9402 16.2638 0 +v 46.7799 17.8158 0 +v 45.7131 17.0863 0 +v 45.2108 16.6094 0 +v 45.9873 16.2945 0 +v 44.8719 17.4693 0 +v 46.7674 15.856 0 +v 46.5912 16.947 0 +v 45.7212 18.2193 0 +v 48.8198 16.7473 0 +v 45.4641 17.6546 0 +v 47.7329 17.1538 0 +v 47.1192 17.2872 0 +v 47.2677 16.4918 0 +v 48.077 16.4175 0 +v 47.6132 15.8107 0 +v 49.2993 14.5713 0 +v 48.8762 15.6189 0 +v 48.1551 15.1245 0 +v 47.7207 13.4178 0 +v 48.7882 14.9741 0 +v 48.2669 14.1874 0 +v 47.3789 14.239 0 +v 49.3572 12.8351 0 +v 46.8937 14.6327 0 +v 48.6212 13.3574 0 +v 46.585 15.219 0 +v 48.0639 11.7924 0 +v 49.4221 13.7063 0 +v 48.5634 12.4963 0 +v 48.897 14.073 0 +v 51.7365 13.0958 0 +v 47.7166 12.568 0 +v 49.5605 11.2595 0 +v 50.8289 14.3472 0 +v 46.8432 12.9971 0 +v 46.9082 11.7405 0 +v 49.2365 12.0186 0 +v 48.7546 11.3642 0 +v 50.6516 12.174 0 +v 47.5563 10.2025 0 +v 49.9178 12.3351 0 +v 48.9786 9.93435 0 +v 48.0097 10.9338 0 +v 50.5097 13.2794 0 +v 49.0757 10.6821 0 +v 50.3052 10.1422 0 +v 49.7694 10.5919 0 +v 50.6735 11.1248 0 +v 50.0311 14.234 0 +v 50.2459 15.5871 0 +v 49.9156 14.9459 0 +v 49.5595 15.5351 0 +v 49.8291 16.5314 0 +v 46.1537 13.181 0 +v 46.6789 13.766 0 +v 47.4758 11.9946 0 +v 46.6695 12.3581 0 +v 47.1728 10.9465 0 +v 46.062 11.0174 0 +v 46.6633 10.213 0 +v 48.3011 10.247 0 +v 48.0172 8.74123 0 +v 48.3481 9.45846 0 +v 49.6113 8.44063 0 +v 49.1075 9.10808 0 +v 48.7641 8.325 0 +v 50.0141 9.2686 0 +v 49.8648 13.2353 0 +v 47.0987 9.2549 0 +v 47.2694 6.52104 0 +v 49.6684 9.86908 0 +v 63.0001 0.5 0 +v 46.4211 9.52493 0 +v 45.4691 8.76248 0 +v 47.8493 7.56174 0 +v 51.5604 9.23865 0 +v 48.16 8.11921 0 +v 49.4317 6.59506 0 +v 50.7919 9.49471 0 +v 50.8145 8.28123 0 +v 51.5092 10.3662 0 +v 51.018 8.89196 0 +v 51.6746 8.46225 0 +v 50.9343 10.1084 0 +v 33.4192 1.77479 0 +v 53.2891 10.2291 0 +v 49.3029 7.53912 0 +v 50.2501 8.64182 0 +v 48.5669 6.95785 0 +v 50.4032 7.20847 0 +v 50.1313 7.90429 0 +v 48.6316 7.63248 0 +v 47.8759 6.86501 0 +v 48.3956 5.242 0 +v 48.3283 6.11519 0 +v 49.7777 7.1231 0 +v 45.4183 5.07641 0 +v 49.1479 5.73914 0 +v 46.911 4.99085 0 +v 50.111 3.46389 0 +v 50.6703 5.7094 0 +v 45.2861 6.42868 0 +v 27.0626 0.5 0 +v 49.4183 4.51214 0 +v 49.9137 5.96024 0 +v 49.7126 5.22027 0 +v 50.4966 6.45178 0 +v 42.7323 1.24839 0 +v 51.216 6.92472 0 +v 44.2501 0.5 0 +v 46.3828 4.5329 0 +v 49.0472 5.07367 0 +v 51.9735 2.19298 0 +v 32.1408 1.08014 0 +v 32.9679 1.38997 0 +v 35.6564 0.5 0 +v 37.0229 2.53434 0 +v 34.6384 2.06794 0 +v 32.5314 0.5 0 +v 33.4687 1.07218 0 +v 32.6881 1.94516 0 +v 50.9947 7.5969 0 +v 44.2666 5.64644 0 +v 47.7726 4.98683 0 +v 49.1576 1.935 0 +v 45.9899 3.95474 0 +v 28.0564 5.12125 0 +v 46.7137 3.88539 0 +v 30.9896 4.59921 0 +v 28.8479 5.37617 0 +v 28.7117 4.55586 0 +v 29.0615 6.1798 0 +v 27.4281 3.78153 0 +v 31.711 12.5854 0 +v 32.2445 13.2117 0 +v 31.756 14.016 0 +v 30.807 14.4508 0 +v 30.6085 12.8817 0 +v 42.8033 6.89753 0 +v 44.9668 10.3003 0 +v 44.6176 9.67996 0 +v 45.582 10.5556 0 +v 45.3764 11.2496 0 +v 45.9265 11.7454 0 +v 46.8168 23.0873 0 +v 48.095 21.2495 0 +v 42.5573 35.9839 0 +v 51.6127 27.609 0 +v 45.9464 30.6949 0 +v 44.9449 30.7546 0 +v 46.6564 30.6074 0 +v 47.1602 31.7698 0 +v 47.0794 31.1144 0 +v 48.2331 31.3048 0 +v 45.4283 30.4333 0 +v 45.4714 31.1569 0 +v 44.3181 32.559 0 +v 44.6638 31.668 0 +v 45.2832 32.4209 0 +v 43.2541 31.6337 0 +v 44.2501 31.0408 0 +v 43.9582 31.6833 0 +v 45.2812 31.7913 0 +v 46.4437 32.7355 0 +v 45.1729 35.0896 0 +v 45.9332 32.3209 0 +v 44.9803 33.745 0 +v 44.8772 33.0247 0 +v 45.7324 33.2698 0 +v 47.4288 34.7873 0 +v 45.8604 34.3051 0 +v 29.7668 37.1321 0 +v 27.9761 38.029 0 +v 31.0296 35.6221 0 +v 29.9023 35.1661 0 +v 29.2609 35.4467 0 +v 29.6315 36.1189 0 +v 32.3152 35.3706 0 +v 30.372 35.6264 0 +v 31.7326 35.804 0 +v 31.6912 35.1401 0 +v 32.6001 33.5601 0 +v 32.3041 34.4412 0 +v 31.5334 33.692 0 +v 34.0964 34.5531 0 +v 32.0984 33.8818 0 +v 33.1754 34.8955 0 +v 32.9931 34.1824 0 +v 33.958 33.1378 0 +v 33.3356 33.5309 0 +v 32.929 32.5694 0 +v 33.9729 33.8508 0 +v 35.1836 33.4688 0 +v 34.5224 33.4826 0 +v 34.8293 32.3459 0 +v 33.9545 35.5813 0 +v 33.7492 35.0291 0 +v 33.0971 35.7699 0 +v 33.7425 36.6609 0 +v 32.483 36.0072 0 +v 33.6136 36.075 0 +v 34.472 38.0313 0 +v 33.7918 37.5529 0 +v 37.1042 37.218 0 +v 36.5722 10.5116 0 +v 34.3569 10.3336 0 +v 33.3043 10.0183 0 +v 33.9345 8.55273 0 +v 33.0826 8.58938 0 +v 33.487 8.07195 0 +v 34.8051 9.32882 0 +v 35.1775 9.77842 0 +v 39.3634 9.92828 0 +v 41.6076 8.50108 0 +v 39.6841 5.98613 0 +v 38.4627 7.64389 0 +v 44.4675 15.6808 0 +v 46.6579 19.0863 0 +v 48.8969 18.6096 0 +v 51.0634 12.7887 0 +v 51.9417 11.755 0 +v 51.6491 12.3963 0 +v 52.9266 12.5918 0 +v 52.2601 12.6751 0 +v 52.7403 13.809 0 +v 51.1933 13.6567 0 +v 51.9552 13.8511 0 +v 52.461 15.9451 0 +v 52.4024 14.8512 0 +v 50.1711 11.6392 0 +v 49.231 16.2022 0 +v 47.6914 9.55298 0 +v 44.5997 7.76999 0 +v 47.1471 8.26337 0 +v 47.4328 8.77425 0 +v 46.961 7.37485 0 +v 46.1575 8.00687 0 +v 46.4969 8.72987 0 +v 46.363 6.67625 0 +v 46.2878 7.34581 0 +v 45.4345 7.521 0 +v 45.7422 5.96401 0 +v 45.5439 8.13918 0 +v 45.726 6.90872 0 +v 44.7718 6.82798 0 +v 43.7972 7.1367 0 +v 47.5292 5.61445 0 +v 46.1742 5.2001 0 +v 54.3948 10.226 0 +v 52.2559 9.83515 0 +v 47.7825 0.966897 0 +v 52.2581 10.6287 0 +v 51.6814 11.0743 0 +v 50.6763 4.5155 0 +v 50.0469 4.66614 0 +v 41.9064 0.5 0 +v 36.3166 1.24829 0 +v 34.0939 0.5 0 +v 26.7133 3.9726 0 +v 31.7501 0.5 0 +v 31.4172 6.99484 0 +v 45.8126 0.5 0 +v 29.4543 5.64519 0 +v 46.6394 5.80857 0 +v 27.2324 4.49979 0 +v 26.736 1.54781 0 +v 28.4644 5.90831 0 +v 28.5068 3.83574 0 +v 29.1898 4.0306 0 +v 29.8693 3.82366 0 +v 27.9614 4.34863 0 +v 30.2925 4.78164 0 +v 26.0232 2.42617 0 +v 25.3702 2.07498 0 +v 28.0918 3.0088 0 +v 25.5096 1.29363 0 +v 29.1787 2.7751 0 +v 24.828 2.34549 0 +v 30.8931 13.6428 0 +v 30.2761 13.9856 0 +v 29.9368 12.7284 0 +v 29.2265 12.4435 0 +v 29.3721 11.7508 0 +v 42.8294 7.73659 0 +v 41.9855 7.57167 0 +v 43.4754 7.69814 0 +v 41.0139 6.51891 0 +v 41.3341 7.19812 0 +v 40.2241 7.30633 0 +v 41.9546 6.4905 0 +v 42.2207 7.02394 0 +v 41.4077 3.97046 0 +v 42.9241 5.55749 0 +v 41.4473 5.28124 0 +v 42.6135 6.20496 0 +v 42.025 5.74993 0 +v 43.5369 6.24964 0 +v 41.3814 5.95287 0 +v 40.5294 5.80208 0 +v 43.5968 5.57919 0 +v 43.3189 3.75598 0 +v 44.0355 4.57954 0 +v 44.2396 6.35675 0 +v 39.7613 4.30736 0 +v 39.9463 5.15703 0 +v 38.4033 5.12503 0 +v 40.6696 4.55459 0 +v 39.1802 4.87884 0 +v 38.9917 5.6329 0 +v 38.2778 3.3801 0 +v 38.8928 6.68196 0 +v 38.1419 6.02271 0 +v 38.9085 4.02139 0 +v 41.3285 4.62884 0 +v 42.4266 4.42699 0 +v 42.111 5.05361 0 +v 38.0515 6.88293 0 +v 38.0077 4.27649 0 +v 39.5626 0.5 0 +v 37.378 6.76691 0 +v 35.8168 7.01982 0 +v 36.6254 7.06609 0 +v 36.5262 7.96554 0 +v 37.3745 5.08812 0 +v 39.6162 3.32536 0 +v 36.3226 8.60386 0 +v 37.8763 5.45846 0 +v 34.9727 3.64228 0 +v 38.947 3.35273 0 +v 41.1251 0.5 0 +v 38.5855 2.70801 0 +v 37.7581 1.42161 0 +v 34.1044 3.81617 0 +v 37.8761 2.36713 0 +v 38.4546 2.07191 0 +v 39.4625 2.19598 0 +v 40.5246 3.61291 0 +v 37.1785 3.53777 0 +v 37.5287 2.9533 0 +v 40.3287 2.6532 0 +v 37.7648 3.71441 0 +v 39.7321 2.73443 0 +v 37.3321 1.95489 0 +v 40.0995 2.03825 0 +v 47.429 21.6936 0 +v 39.8427 36.0759 0 +v 41.8139 34.5449 0 +v 50.0389 27.7919 0 +v 48.2428 30.4232 0 +v 49.8876 29.7753 0 +v 49.3713 30.8765 0 +v 48.9818 29.8875 0 +v 48.7189 30.8693 0 +v 48.7573 29.2205 0 +v 49.6259 28.7106 0 +v 49.4877 30.2594 0 +v 50.6277 30.7939 0 +v 42.9408 30.8831 0 +v 43.6108 30.8349 0 +v 42.5368 31.4925 0 +v 42.6929 32.5921 0 +v 48.4083 33.1794 0 +v 45.1802 34.4025 0 +v 43.589 34.7292 0 +v 44.4199 34.738 0 +v 44.1358 36.3285 0 +v 43.9965 35.483 0 +v 44.7539 35.7924 0 +v 46.4901 36.3511 0 +v 45.3061 37.0535 0 +v 45.6863 35.872 0 +v 44.8338 36.5089 0 +v 44.1949 37.54 0 +v 43.3764 36.0194 0 +v 43.432 36.97 0 +v 42.9975 35.2943 0 +v 42.1883 35.263 0 +v 42.7244 34.4164 0 +v 41.2065 36.2206 0 +v 41.258 35.2913 0 +v 41.8453 35.8935 0 +v 42.0551 37.0907 0 +v 45.9905 35.1127 0 +v 46.6294 34.5954 0 +v 47.2909 33.601 0 +v 46.8361 35.4952 0 +v 47.1424 34.2194 0 +v 45.8173 36.5661 0 +v 46.6206 37.9203 0 +v 46.0631 37.3356 0 +v 45.2624 38.6572 0 +v 45.4368 37.8595 0 +v 46.0024 38.4011 0 +v 44.7082 38.1182 0 +v 47.6067 39.8258 0 +v 44.8347 37.489 0 +v 43.5332 39.8807 0 +v 46.9368 38.9646 0 +v 43.5568 38.6235 0 +v 44.0509 38.1848 0 +v 43.279 37.813 0 +v 44.0489 36.9399 0 +v 42.1579 33.6923 0 +v 43.5426 33.506 0 +v 44.2079 33.2598 0 +v 44.0112 34.1007 0 +v 40.5701 35.7192 0 +v 39.6356 34.7337 0 +v 40.504 34.8461 0 +v 39.9489 35.3725 0 +v 38.7702 35.5543 0 +v 46.4899 33.5376 0 +v 48.9688 36.8553 0 +v 41.9097 38.7351 0 +v 42.7658 37.2845 0 +v 42.5568 36.651 0 +v 42.4683 38.0868 0 +v 41.3408 33.8584 0 +v 41.1182 34.5181 0 +v 42.2617 33.0626 0 +v 43.3179 34.127 0 +v 40.1555 34.1285 0 +v 47.7763 36.3732 0 +v 42.7477 38.8923 0 +v 47.1374 36.1149 0 +v 47.7371 35.5508 0 +v 48.9551 34.6148 0 +v 48.6535 35.9193 0 +v 48.2159 34.9134 0 +v 48.2948 34.0445 0 +v 48.787 35.2631 0 +v 50.6173 35.3916 0 +v 49.67 35.7844 0 +v 43.315 39.2478 0 +v 42.5282 39.8731 0 +v 48.4096 36.5226 0 +v 48.0018 37.8444 0 +v 47.9388 37.1011 0 +v 47.2918 37.5302 0 +v 47.036 36.8421 0 +v 47.3709 38.3109 0 +v 48.3229 38.9385 0 +v 47.6299 38.9539 0 +v 47.9115 33.5542 0 +v 47.5322 32.6635 0 +v 49.2148 36.2513 0 +v 50.6364 37.1822 0 +v 49.8346 36.8557 0 +v 47.0098 33.0288 0 +v 46.9665 32.3747 0 +v 47.8925 31.9892 0 +v 49.1103 32.1683 0 +v 48.5307 31.8798 0 +v 50.5332 36.2879 0 +v 49.6956 38.3449 0 +v 52.9939 36.4569 0 +v 49.4013 37.5664 0 +v 50.1312 37.7354 0 +v 48.83 38.2272 0 +v 51.8739 38.8198 0 +v 50.7696 38.6519 0 +v 51.7478 36.6008 0 +v 48.6559 37.5166 0 +v 51.0804 36.6778 0 +v 51.3245 35.8635 0 +v 52.242 33.7224 0 +v 52.2868 35.8011 0 +v 51.5846 34.7078 0 +v 52.3596 36.4317 0 +v 52.6257 37.7292 0 +v 53.942 34.7256 0 +v 51.2324 35.2357 0 +v 53.2499 35.4718 0 +v 30.1685 37.8714 0 +v 29.9546 38.7571 0 +v 28.7892 39.9363 0 +v 29.6005 38.2029 0 +v 28.9985 38.9777 0 +v 29.5618 39.6028 0 +v 27.9952 39.2609 0 +v 30.0288 40.3394 0 +v 28.5724 39.3869 0 +v 30.1595 41.1836 0 +v 29.6937 41.7611 0 +v 29.1581 40.89 0 +v 29.0209 37.1301 0 +v 27.6783 37.3826 0 +v 27.2124 36.9482 0 +v 28.4543 37.6175 0 +v 27.2954 38.2555 0 +v 30.6657 33.9625 0 +v 30.4475 34.668 0 +v 30.5122 33.2901 0 +v 31.9645 32.7991 0 +v 32.5179 32.9829 0 +v 31.3803 33.0676 0 +v 32.3228 32.1636 0 +v 33.8411 32.1339 0 +v 35.6006 32.7199 0 +v 35.6704 31.5935 0 +v 36.2197 32.3725 0 +v 35.4043 32.1424 0 +v 34.9121 35.1896 0 +v 34.3935 36.7492 0 +v 33.1325 36.9938 0 +v 35.859 37.6028 0 +v 33.652 9.20976 0 +v 34.9377 8.30368 0 +v 35.7158 8.05862 0 +v 38.4676 8.28748 0 +v 46.4043 18.4208 0 +v 48.5533 17.6911 0 +v 48.3403 17.1214 0 +v 49.4975 17.4481 0 +v 47.7209 18.5259 0 +v 49.1353 17.9969 0 +v 50.7947 18.698 0 +v 49.847 18.6267 0 +v 47.8689 17.8411 0 +v 48.328 18.2988 0 +v 50.7953 17.3993 0 +v 50.2422 19.7078 0 +v 50.3671 18.0485 0 +v 50.1365 17.161 0 +v 49.3576 19.4184 0 +v 50.2896 19.0777 0 +v 49.6812 19.9258 0 +v 50.3179 20.7335 0 +v 48.2412 19.5187 0 +v 48.7765 19.2138 0 +v 51.198 11.6605 0 +v 75.5 0.5 0 +v 51.404 15.4531 0 +v 51.6143 14.6036 0 +v 44.1401 8.33612 0 +v 44.841 8.4356 0 +v 34.6941 1.27451 0 +v 33.4066 6.67634 0 +v 33.3563 4.29009 0 +v 33.1476 5.48815 0 +v 33.0349 6.13505 0 +v 34.3036 5.85844 0 +v 34.0222 6.45063 0 +v 31.5141 5.74158 0 +v 32.3411 5.68092 0 +v 31.8672 4.88789 0 +v 31.9893 3.03848 0 +v 31.6903 3.94747 0 +v 30.7934 3.68576 0 +v 32.6005 3.74322 0 +v 30.3926 4.16497 0 +v 26.2332 0.888116 0 +v 31.3803 3.34185 0 +v 28.6251 0.5 0 +v 33.3126 0.5 0 +v 32.5948 4.5468 0 +v 27.3476 2.45919 0 +v 26.6803 2.64394 0 +v 34.8751 0.5 0 +v 32.6943 3.04444 0 +v 27.175 3.13332 0 +v 31.4912 2.43897 0 +v 36.4376 0.5 0 +v 32.2129 2.34608 0 +v 33.92 1.457 0 +v 33.2315 3.66689 0 +v 30.1972 2.85599 0 +v 27.9788 3.58312 0 +v 28.7055 3.21845 0 +v 30.9014 2.82478 0 +v 28.8742 2.13121 0 +v 30.8707 2.13413 0 +v 30.1876 0.5 0 +v 31.9409 1.75038 0 +v 40.5455 7.88763 0 +v 39.4269 7.80996 0 +v 39.0159 7.31413 0 +v 40.2377 6.5302 0 +v 39.5954 6.87319 0 +v 44.6972 3.28028 0 +v 44.6644 5.00177 0 +v 44.7847 4.143 0 +v 44.0887 3.80968 0 +v 45.3254 3.65234 0 +v 45.0314 0.858789 0 +v 46.2219 2.56363 0 +v 47.3751 0.5 0 +v 43.927 1.97804 0 +v 46.2915 3.29013 0 +v 44.4957 2.52057 0 +v 43.7587 2.99669 0 +v 45.4038 2.8035 0 +v 44.2827 1.28147 0 +v 42.6876 0.5 0 +v 43.4689 0.924046 0 +v 47.6181 2.79646 0 +v 47.0206 3.22028 0 +v 47.7352 3.59465 0 +v 48.8949 3.01671 0 +v 48.478 4.23455 0 +v 48.2204 3.11573 0 +v 48.4065 2.03677 0 +v 42.2232 2.6144 0 +v 45.8305 1.56886 0 +v 49.1246 3.77562 0 +v 42.9358 3.02709 0 +v 42.5676 3.68575 0 +v 42.9999 2.09484 0 +v 41.295 2.97947 0 +v 45.6726 2.20534 0 +v 45.0052 1.70201 0 +v 43.5134 2.43292 0 +v 42.0131 1.46005 0 +v 43.4057 1.57807 0 +v 41.9538 3.29205 0 +v 45.0611 2.30466 0 +v 42.3687 1.99163 0 +v 41.5042 2.14894 0 +v 40.9364 2.44752 0 +v 41.2096 1.39887 0 +v 40.7947 5.20026 0 +v 43.2256 4.56069 0 +v 33.8519 2.58841 0 +v 39.5917 1.35266 0 +v 33.3529 3.01905 0 +v 33.1845 2.31946 0 +v 36.3785 2.66123 0 +v 37.2189 0.5 0 +v 34.7498 4.78406 0 +v 34.415 3.11247 0 +v 35.3506 2.68605 0 +v 40.7194 1.83107 0 +v 39.0125 1.69546 0 +v 40.3439 0.900154 0 +v 36.544 1.88777 0 +v 36.9953 1.24926 0 +v 34.0472 4.5534 0 +v 33.5067 4.93351 0 +v 34.6263 4.16729 0 +v 38.7814 0.5 0 +v 37.2259 4.31934 0 +v 36.0613 4.94321 0 +v 36.2966 3.98347 0 +v 36.7404 4.81194 0 +v 36.5435 5.61528 0 +v 36.5218 6.34423 0 +v 35.4409 5.89723 0 +v 34.8618 6.50781 0 +v 35.9372 5.54122 0 +v 35.5093 4.29919 0 +v 36.5218 3.33377 0 +v 35.7347 3.42476 0 +v 35.8759 6.37584 0 +v 49.1958 27.8899 0 +v 50.9481 28.7527 0 +v 49.4052 29.3294 0 +v 42.0432 32.3894 0 +v 43.5024 32.4226 0 +v 43.1959 32.9765 0 +v 45.7793 40.556 0 +v 45.9637 39.4861 0 +v 49.8471 34.8728 0 +v 49.3864 35.2563 0 +v 49.7654 33.4843 0 +v 50.6845 34.4607 0 +v 49.5604 34.193 0 +v 49.0151 33.6513 0 +v 49.1029 32.9124 0 +v 48.5604 32.5382 0 +v 51.3407 33.8331 0 +v 50.5517 33.665 0 +v 50.4457 32.3246 0 +v 50.2879 33.0115 0 +v 49.7454 32.5253 0 +v 49.8249 31.6404 0 +v 51.6503 32.6297 0 +v 51.0437 33.0864 0 +v 50.0112 31.0132 0 +v 50.5943 31.5661 0 +v 51.9866 31.2396 0 +v 51.1514 32.069 0 +v 51.2446 31.2075 0 +v 51.8565 31.9438 0 +v 51.6665 29.9112 0 +v 53.8187 31.9423 0 +v 51.6418 30.6199 0 +v 52.8381 32.6128 0 +v 52.9279 30.31 0 +v 52.328 30.6439 0 +v 53.0787 31.2869 0 +v 51.7317 33.2922 0 +v 54.3565 30.5896 0 +v 53.125 31.9801 0 +v 52.4983 31.6983 0 +v 53.8435 31.1688 0 +v 53.6382 30.4702 0 +v 54.9024 31.5899 0 +v 53.7148 28.4767 0 +v 54.1698 29.4924 0 +v 43.0103 42.5843 0 +v 51.4566 37.8488 0 +v 44.4567 43.217 0 +v 52.5113 34.8848 0 +v 51.9639 35.2364 0 +v 52.1311 34.3605 0 +v 53.2206 34.7506 0 +v 53.5415 33.5901 0 +v 55.0772 36.4725 0 +v 28.57 38.4142 0 +v 27.9746 40.0896 0 +v 27.7299 40.7428 0 +v 28.4617 40.6445 0 +v 27.4808 39.6627 0 +v 29.3693 40.2602 0 +v 34.2593 32.594 0 +v 33.5407 32.6777 0 +v 33.2469 32.0623 0 +v 33.9032 31.131 0 +v 34.5468 35.6631 0 +v 34.9405 34.3123 0 +v 36.0968 34.1887 0 +v 35.5744 34.7719 0 +v 37.0384 35.5578 0 +v 36.4016 34.9874 0 +v 35.4935 34.0149 0 +v 37.2211 34.2171 0 +v 35.9717 36.108 0 +v 35.5708 35.5001 0 +v 36.6532 34.4339 0 +v 37.0656 33.4505 0 +v 36.4801 33.6869 0 +v 36.4002 35.6296 0 +v 36.8098 36.3983 0 +v 37.9057 36.2449 0 +v 36.3616 37.022 0 +v 37.3249 36.087 0 +v 35.3176 36.909 0 +v 35.3862 36.2974 0 +v 35.8692 36.6918 0 +v 35.1608 8.85367 0 +v 34.5212 8.77096 0 +v 34.2935 7.85396 0 +v 35.0379 7.40547 0 +v 50.8171 16.4033 0 +v 50.2843 16.1682 0 +v 50.8538 15.7697 0 +v 51.848 16.9241 0 +v 51.2081 16.9101 0 +v 52.1289 20.0841 0 +v 49.4123 21.8783 0 +v 47.4501 19.3005 0 +v 47.5904 20.3353 0 +v 47.1309 20.9694 0 +v 46.507 20.6807 0 +v 53.8544 15.322 0 +v 52.0634 15.4178 0 +v 34.7652 2.64121 0 +v 31.8004 6.39408 0 +v 27.8439 1.31834 0 +v 28.1619 2.1351 0 +v 28.7757 1.4258 0 +v 29.8732 1.63207 0 +v 29.4064 0.848109 0 +v 30.2142 2.19666 0 +v 26.0593 1.72707 0 +v 29.6565 3.21214 0 +v 45.4391 4.38055 0 +v 47.2927 1.6698 0 +v 49.9146 1.89684 0 +v 46.5938 1.02152 0 +v 47.1943 1.07507 0 +v 48.1563 0.5 0 +v 46.5513 1.76822 0 +v 47.0074 2.36249 0 +v 48.9376 0.5 0 +v 48.547 1.22516 0 +v 49.3998 1.21679 0 +v 47.9527 1.54027 0 +v 49.7188 0.5 0 +v 50.158 1.17774 0 +v 35.6517 1.84494 0 +v 35.6484 1.17245 0 +v 34.8862 5.47053 0 +v 35.3873 5.01417 0 +v 50.2748 29.1157 0 +v 50.3353 28.422 0 +v 50.8375 27.8009 0 +v 50.9465 29.5557 0 +v 50.4624 25.6605 0 +v 51.0545 30.2437 0 +v 50.97 26.6746 0 +v 50.4451 27.1838 0 +v 49.4246 26.8363 0 +v 44.7725 39.8316 0 +v 44.1716 39.2205 0 +v 44.6241 38.759 0 +v 46.3054 38.9551 0 +v 46.7562 39.7962 0 +v 49.0954 41.9369 0 +v 46.1898 40.0759 0 +v 46.7905 40.5788 0 +v 57.2188 29.5379 0 +v 53.1724 29.3294 0 +v 43.0209 41.184 0 +v 51.363 38.4642 0 +v 50.7791 37.9647 0 +v 51.9927 37.3159 0 +v 52.0787 38.1566 0 +v 53.0332 38.8146 0 +v 49.3793 40.5239 0 +v 51.1035 40.172 0 +v 53.6603 32.7628 0 +v 55.4806 33.4463 0 +v 54.4952 33.3049 0 +v 55.1072 32.5443 0 +v 54.3563 32.4716 0 +v 54.8602 34.2651 0 +v 57.0109 31.6366 0 +v 54.1763 33.9755 0 +v 54.9436 33.6839 0 +v 56.2933 32.5817 0 +v 55.6918 32.8306 0 +v 55.7207 31.9135 0 +v 55.833 30.433 0 +v 56.3957 31.9145 0 +v 56.0592 31.1947 0 +v 55.3443 30.9926 0 +v 56.8815 30.536 0 +v 54.0375 36.2023 0 +v 28.489 41.3592 0 +v 33.2536 30.8906 0 +v 33.7429 30.4247 0 +v 34.8574 31.0926 0 +v 35.5296 30.9119 0 +v 34.4026 31.6653 0 +v 38.4032 34.4136 0 +v 38.4883 33.7158 0 +v 39.1299 34.1482 0 +v 37.9039 35.3563 0 +v 37.3454 34.9168 0 +v 38.4335 35.0332 0 +v 38.9144 36.6212 0 +v 51.5629 16.2077 0 +v 51.7222 18.0491 0 +v 51.0446 18.068 0 +v 51.1334 20.1576 0 +v 50.5526 20.2005 0 +v 51.5696 19.2873 0 +v 51.7636 21.9156 0 +v 50.9065 19.4994 0 +v 51.4475 18.6438 0 +v 52.5128 18.775 0 +v 51.2047 21.124 0 +v 52.2456 19.4075 0 +v 54.083 19.8109 0 +v 53.0998 19.9032 0 +v 51.6668 20.6041 0 +v 52.8349 21.1769 0 +v 52.3303 20.7285 0 +v 50.5839 22.1555 0 +v 53.5085 18.9737 0 +v 53.6692 20.686 0 +v 50.5416 21.4275 0 +v 49.8262 21.2751 0 +v 51.121 21.7762 0 +v 53.5628 19.5522 0 +v 53.0293 20.553 0 +v 56.2335 21.3634 0 +v 54.4418 22.9536 0 +v 55.0142 20.7867 0 +v 53.8216 21.8995 0 +v 54.361 20.4778 0 +v 54.3738 21.2958 0 +v 55.287 21.7872 0 +v 53.4839 21.3256 0 +v 48.465 20.3647 0 +v 48.9324 19.9114 0 +v 46.8579 19.9096 0 +v 53.0379 15.3657 0 +v 53.4004 14.4896 0 +v 52.8057 14.4061 0 +v 53.8831 13.3611 0 +v 53.4055 13.8243 0 +v 54.6413 14.3528 0 +v 54.049 14.6759 0 +v 27.2263 1.12583 0 +v 27.8439 0.5 0 +v 27.3634 1.7877 0 +v 30.9689 0.5 0 +v 30.5455 1.53832 0 +v 31.3476 1.20857 0 +v 53.0431 11.4568 0 +v 56.7501 0.5 0 +v 53.3295 8.57108 0 +v 48.6562 26.6119 0 +v 50.1363 26.4185 0 +v 49.3124 25.83 0 +v 45.4522 39.9488 0 +v 55.7141 28.1908 0 +v 53.7249 29.0819 0 +v 53.6045 29.8185 0 +v 52.4375 29.6669 0 +v 51.8086 29.021 0 +v 51.5497 28.3374 0 +v 52.6542 28.066 0 +v 43.0265 40.4338 0 +v 54.1898 37.7611 0 +v 48.6025 39.8969 0 +v 48.1293 39.515 0 +v 49.246 39.1892 0 +v 52.8425 41.4476 0 +v 50.0653 39.0836 0 +v 50.773 39.4479 0 +v 49.7429 39.8136 0 +v 51.55 39.5308 0 +v 50.4075 40.0521 0 +v 57.1386 43.5945 0 +v 49.0714 41.1971 0 +v 52.1606 40.4321 0 +v 48.0676 40.3789 0 +v 47.4622 40.6904 0 +v 48.7206 40.5452 0 +v 53.4275 42.0738 0 +v 50.7117 43.5723 0 +v 52.8924 45.3455 0 +v 47.574 42.0647 0 +v 50.6338 40.8185 0 +v 52.6844 40.8171 0 +v 46.0681 41.68 0 +v 45.7702 42.3068 0 +v 56.2578 48.1296 0 +v 52.2012 43.0616 0 +v 56.9149 35.1775 0 +v 54.8453 35.3809 0 +v 55.031 29.9103 0 +v 54.9624 30.5166 0 +v 54.4511 30.009 0 +v 54.9899 28.8986 0 +v 56.4221 29.8247 0 +v 56.5092 28.8166 0 +v 59.3273 30.8065 0 +v 56.6731 31.1184 0 +v 53.4472 36.0489 0 +v 53.9897 35.464 0 +v 37.8644 34.0013 0 +v 38.1121 37.2316 0 +v 38.5227 36.1309 0 +v 39.1972 36.0398 0 +v 40.2742 37.8735 0 +v 52.8572 17.6065 0 +v 52.9309 19.2743 0 +v 56.0512 17.8447 0 +v 52.9553 25.0468 0 +v 55.5788 21.1702 0 +v 56.2533 19.5697 0 +v 56.1426 20.4654 0 +v 55.3762 19.916 0 +v 58.6109 20.3157 0 +v 55.5411 20.4952 0 +v 55.4388 18.7907 0 +v 57.4011 20.7916 0 +v 55.6666 19.3678 0 +v 56.7115 20.8614 0 +v 56.9767 20.0402 0 +v 57.426 18.558 0 +v 57.8131 20.0634 0 +v 57.414 19.3636 0 +v 56.742 18.9507 0 +v 58.6964 18.9798 0 +v 56.7519 18.1758 0 +v 58.3887 19.6308 0 +v 57.9947 18.9693 0 +v 58.3621 17.8626 0 +v 57.2189 16.2807 0 +v 56.7934 17.1809 0 +v 55.3117 16.2708 0 +v 57.7656 17.0897 0 +v 57.4199 17.7832 0 +v 55.9166 16.9473 0 +v 59.6715 15.2125 0 +v 54.634 17.5985 0 +v 56.2666 16.0256 0 +v 59.1772 16.6168 0 +v 55.1493 17.0247 0 +v 55.3433 17.7173 0 +v 54.0267 16.5347 0 +v 54.6958 16.5326 0 +v 54.6819 15.6446 0 +v 53.2691 16.1728 0 +v 53.3522 16.9727 0 +v 54.011 17.2489 0 +v 52.6018 16.8968 0 +v 53.9118 18.1556 0 +v 56.635 16.5554 0 +v 57.4299 13.5878 0 +v 58.5535 17.0983 0 +v 58.2621 16.0759 0 +v 59.5588 17.7561 0 +v 58.942 17.6017 0 +v 59.0854 18.3382 0 +v 60.8901 19.3226 0 +v 59.7854 19.2012 0 +v 59.1896 19.7494 0 +v 60.4256 21.5915 0 +v 59.6367 20.7852 0 +v 54.1037 15.9052 0 +v 54.6954 18.4248 0 +v 54.7397 19.2727 0 +v 53.1678 18.2973 0 +v 53.5036 17.6521 0 +v 57.0745 14.9146 0 +v 57.7993 16.4777 0 +v 54.184 18.8766 0 +v 56.8841 15.6254 0 +v 57.6998 15.463 0 +v 58.0273 14.4588 0 +v 56.7177 23.7134 0 +v 52.5948 11.9843 0 +v 52.4034 11.2771 0 +v 52.9146 10.7925 0 +v 53.844 10.9788 0 +v 55.9079 11.9109 0 +v 54.9741 11.2277 0 +v 54.4639 10.8544 0 +v 53.6251 0.5 0 +v 53.8397 9.41301 0 +v 53.8413 10.0079 0 +v 52.9985 9.43925 0 +v 52.3329 8.95573 0 +v 55.8527 7.61778 0 +v 55.2931 9.01656 0 +v 54.6349 9.46601 0 +v 54.3979 8.41222 0 +v 55.6127 10.1912 0 +v 54.9978 9.99857 0 +v 53.9089 8.79554 0 +v 48.7003 24.1758 0 +v 53.0394 28.646 0 +v 52.4751 29.0012 0 +v 52.1647 28.457 0 +v 53.4014 38.0571 0 +v 53.2926 37.2328 0 +v 52.6387 37.0505 0 +v 54.3971 36.954 0 +v 53.7689 36.7927 0 +v 52.4783 39.5594 0 +v 53.7502 39.9278 0 +v 52.9644 40.2305 0 +v 53.1833 39.5055 0 +v 54.1443 38.8865 0 +v 53.6035 38.6236 0 +v 50.953 44.1847 0 +v 51.7982 44.3813 0 +v 55.9631 42.1534 0 +v 52.954 42.741 0 +v 47.0636 41.6269 0 +v 51.5904 41.3887 0 +v 44.0633 44.109 0 +v 47.592 42.737 0 +v 45.4479 41.3686 0 +v 36.5876 43.2944 0 +v 44.1907 41.8503 0 +v 44.925 40.6815 0 +v 43.9421 40.8158 0 +v 57.9352 46.6055 0 +v 44.9023 41.8261 0 +v 49.9062 41.0985 0 +v 44.4992 41.229 0 +v 43.6542 41.4321 0 +v 43.5441 42.1266 0 +v 43.761 42.9196 0 +v 52.5308 44.8454 0 +v 45.7113 43.0036 0 +v 42.8448 43.9627 0 +v 43.1412 43.2992 0 +v 51.2915 40.8025 0 +v 41.9227 43.1529 0 +v 53.5168 43.6494 0 +v 50.4981 41.6059 0 +v 54.5743 45.307 0 +v 55.9946 34.4802 0 +v 58.4131 33.4464 0 +v 54.6467 35.9935 0 +v 54.5635 34.8191 0 +v 55.9237 35.7223 0 +v 54.6405 27.8167 0 +v 55.6964 29.3766 0 +v 55.8891 28.7864 0 +v 58.0731 30.9539 0 +v 37.6136 36.821 0 +v 37.5792 39.3822 0 +v 39.7849 37.0404 0 +v 40.4769 36.5979 0 +v 41.1909 37.0846 0 +v 39.0509 38.0317 0 +v 41.5882 37.8934 0 +v 40.5465 37.2629 0 +v 39.1172 37.3134 0 +v 39.6329 37.7232 0 +v 40.9199 38.6309 0 +v 39.7903 38.94 0 +v 40.9299 37.9684 0 +v 41.2966 39.8054 0 +v 40.2825 38.5203 0 +v 41.3672 39.1351 0 +v 52.3983 18.1063 0 +v 51.7783 25.6359 0 +v 56.1278 18.5655 0 +v 59.0523 15.7837 0 +v 58.8167 14.907 0 +v 58.371 15.4115 0 +v 59.4775 12.8237 0 +v 59.6177 14.0146 0 +v 59.3997 14.6246 0 +v 58.7721 14.0563 0 +v 58.1259 13.7508 0 +v 58.1052 12.2718 0 +v 58.7654 13.2343 0 +v 57.9314 13.0139 0 +v 59.3592 13.4413 0 +v 60.3944 13.3195 0 +v 58.813 12.4941 0 +v 56.8556 12.5798 0 +v 59.0577 10.4764 0 +v 57.5043 12.5224 0 +v 57.067 11.2745 0 +v 59.6826 11.5758 0 +v 59.3886 12.1683 0 +v 58.6848 11.45 0 +v 60.3991 12.3005 0 +v 60.437 18.3587 0 +v 60.2519 20.044 0 +v 60.3163 19.4579 0 +v 61.6827 20.6669 0 +v 60.4191 20.8088 0 +v 60.9996 20.2811 0 +v 61.1022 21.1945 0 +v 62.8138 22.4945 0 +v 61.4339 22.5346 0 +v 61.0695 21.9137 0 +v 62.1009 21.7258 0 +v 60.204 22.839 0 +v 60.4996 22.2481 0 +v 59.3548 22.0447 0 +v 59.6458 20.1669 0 +v 57.3558 14.279 0 +v 55.9915 14.0552 0 +v 56.6446 14.3443 0 +v 56.1098 15.1072 0 +v 55.6627 15.6561 0 +v 55.2902 14.8962 0 +v 55.3167 14.2054 0 +v 55.4035 13.0043 0 +v 56.2155 22.592 0 +v 57.7974 26.3618 0 +v 54.1753 12.1648 0 +v 53.7055 11.6567 0 +v 50.9715 1.85384 0 +v 53.5158 6.15211 0 +v 55.2113 8.17254 0 +v 54.4502 7.08963 0 +v 54.6477 7.75976 0 +v 53.6887 7.67818 0 +v 52.5531 7.7401 0 +v 52.2946 8.32102 0 +v 51.7907 7.48644 0 +v 52.3121 6.3782 0 +v 52.3515 7.07351 0 +v 53.6987 6.90422 0 +v 53.0547 7.22454 0 +v 53.1354 7.9743 0 +v 55.8287 11.0393 0 +v 56.5929 10.3931 0 +v 56.3965 11.4271 0 +v 48.7585 25.0946 0 +v 47.5303 24.9232 0 +v 47.5392 25.6607 0 +v 46.589 25.458 0 +v 49.8812 24.5622 0 +v 48.1918 24.6693 0 +v 48.0672 25.2978 0 +v 47.6252 24.1817 0 +v 47.7342 23.2554 0 +v 48.3329 22.3277 0 +v 45.8495 25.4586 0 +v 46.7604 24.6639 0 +v 49.4665 25.1377 0 +v 48.1605 23.7752 0 +v 49.0456 23.1466 0 +v 47.8149 22.6505 0 +v 56.5246 38.4191 0 +v 53.8558 44.3487 0 +v 51.1906 42.5415 0 +v 54.5484 44.5483 0 +v 53.5343 41.3877 0 +v 49.7053 44.3226 0 +v 37.3425 43.1061 0 +v 37.1319 38.8073 0 +v 38.6248 45.9918 0 +v 37.8161 42.4888 0 +v 36.8946 41.633 0 +v 52.1742 43.7747 0 +v 46.5996 42.285 0 +v 50.8513 44.8349 0 +v 51.8101 42.5797 0 +v 38.3402 42.8573 0 +v 39.6547 42.8393 0 +v 35.3752 39.7955 0 +v 40.767 43.1531 0 +v 39.8153 43.8088 0 +v 54.0299 44.9666 0 +v 59.4011 42.4716 0 +v 36.3435 39.8311 0 +v 58.9802 43.2085 0 +v 37.384 40.202 0 +v 37.2346 44.2811 0 +v 36.1681 41.5124 0 +v 61.5287 38.9984 0 +v 36.7833 42.4715 0 +v 37.534 41.8686 0 +v 36.37 44.1746 0 +v 46.2747 41.0174 0 +v 44.165 40.1614 0 +v 54.2053 43.7183 0 +v 52.8384 43.5137 0 +v 47.553 41.2821 0 +v 55.4808 34.0909 0 +v 56.4958 33.5863 0 +v 55.3408 34.8295 0 +v 57.4692 32.7296 0 +v 56.2364 35.1171 0 +v 55.2877 35.8574 0 +v 55.0843 28.2707 0 +v 53.5653 27.2878 0 +v 57.3753 31.0359 0 +v 57.654 30.241 0 +v 59.0406 28.8966 0 +v 58.6151 30.1557 0 +v 58.6895 30.7893 0 +v 58.9715 32.1615 0 +v 58.5576 31.5315 0 +v 57.7921 31.6996 0 +v 59.6041 29.7885 0 +v 59.204 30.2263 0 +v 37.5945 38.2446 0 +v 38.6716 39.0956 0 +v 40.5247 39.4053 0 +v 39.833 41.6848 0 +v 39.4316 40.3183 0 +v 39.8318 39.6866 0 +v 40.4989 40.5519 0 +v 39.109 39.6713 0 +v 38.1501 40.5534 0 +v 38.3421 39.7999 0 +v 38.7677 40.3096 0 +v 39.0885 41.1613 0 +v 40.7149 39.9832 0 +v 38.0505 43.4288 0 +v 38.7799 42.3914 0 +v 39.1706 41.8357 0 +v 51.1262 25.9623 0 +v 52.0082 26.6487 0 +v 60.8063 14.5613 0 +v 57.8626 11.4854 0 +v 57.3316 11.8824 0 +v 56.7107 11.9698 0 +v 59.2354 11.1027 0 +v 60.4245 10.4269 0 +v 60.0782 12.8085 0 +v 59.7588 18.5074 0 +v 60.962 16.6526 0 +v 62.1211 22.4219 0 +v 62.272 24.3242 0 +v 61.9277 23.3944 0 +v 62.9719 23.5364 0 +v 60.6541 24.3947 0 +v 60.9864 23.3633 0 +v 62.4119 23.7437 0 +v 61.4517 24.0993 0 +v 60.8546 22.757 0 +v 60.2064 23.6812 0 +v 61.5122 25.4872 0 +v 58.9447 24.9701 0 +v 59.0108 23.2635 0 +v 61.2588 24.803 0 +v 60.3215 25.5391 0 +v 59.7303 24.4771 0 +v 59.6822 23.2616 0 +v 60.233 24.8928 0 +v 58.9562 24.116 0 +v 59.5395 23.876 0 +v 57.7269 24.5265 0 +v 58.112 23.634 0 +v 58.4132 24.5358 0 +v 58.1093 25.4501 0 +v 57.4259 23.8673 0 +v 57.2906 22.7837 0 +v 58.2458 22.6829 0 +v 57.8075 23.1062 0 +v 57.6703 21.8056 0 +v 56.9556 21.5725 0 +v 56.446 21.9809 0 +v 58.9256 22.5815 0 +v 58.5271 21.8229 0 +v 57.7322 22.3924 0 +v 59.1035 21.3272 0 +v 59.7562 21.5013 0 +v 64.5282 20.1897 0 +v 56.5759 13.4067 0 +v 55.9214 13.4045 0 +v 56.9255 27.4696 0 +v 55.051 12.1023 0 +v 52.0626 0.5 0 +v 51.1477 2.983 0 +v 52.9678 6.55182 0 +v 56.2916 9.37575 0 +v 56.0559 8.50082 0 +v 58.333 7.51186 0 +v 57.4499 8.59451 0 +v 56.7368 8.78659 0 +v 56.8489 7.78299 0 +v 57.3522 9.65144 0 +v 57.6857 10.5466 0 +v 57.1093 10.6835 0 +v 58.335 9.79497 0 +v 58.3702 10.4816 0 +v 57.9242 9.17133 0 +v 58.2954 8.38268 0 +v 59.6915 9.08023 0 +v 59.1356 9.6698 0 +v 58.9094 8.89967 0 +v 59.904 9.8374 0 +v 59.5727 7.81062 0 +v 61.453 8.99432 0 +v 59.4216 8.46512 0 +v 60.4841 8.36571 0 +v 60.7749 9.593 0 +v 58.8781 7.97164 0 +v 60.8006 8.9388 0 +v 62.4227 10.7761 0 +v 61.4635 10.373 0 +v 61.4583 9.68365 0 +v 62.9626 9.32747 0 +v 62.1697 9.33353 0 +v 62.5529 7.59716 0 +v 62.5713 10.0065 0 +v 62.5599 8.50917 0 +v 64.5962 10.7211 0 +v 63.5054 10.586 0 +v 61.7031 8.05968 0 +v 64.5501 8.03793 0 +v 61.9517 8.62699 0 +v 60.9116 5.59359 0 +v 63.6089 8.50115 0 +v 61.5418 6.7514 0 +v 63.0809 8.04916 0 +v 63.805 6.6689 0 +v 63.2851 7.27622 0 +v 62.5438 6.58075 0 +v 64.0629 7.41584 0 +v 65.9823 6.41429 0 +v 65.1155 7.0932 0 +v 64.4677 6.8581 0 +v 64.646 4.97829 0 +v 64.3824 5.90165 0 +v 61.8805 7.37372 0 +v 63.2429 5.64499 0 +v 65.3371 5.67492 0 +v 65.0181 6.35152 0 +v 63.9256 5.27191 0 +v 62.5792 3.61938 0 +v 63.8203 3.98296 0 +v 64.0762 4.61084 0 +v 63.0717 4.65418 0 +v 65.8093 5.06132 0 +v 63.7548 6.03022 0 +v 66.9757 4.91837 0 +v 66.7049 6.02302 0 +v 67.5198 5.91712 0 +v 66.0121 4.31414 0 +v 65.9063 5.82944 0 +v 48.6973 21.6819 0 +v 48.8645 20.9733 0 +v 49.0176 22.4513 0 +v 49.8878 22.7645 0 +v 49.9662 22.1518 0 +v 51.2932 23.6686 0 +v 49.7877 23.663 0 +v 50.7207 23.0142 0 +v 49.3585 24.1621 0 +v 50.5391 24.0394 0 +v 51.3332 24.7022 0 +v 51.0273 25.299 0 +v 50.5689 24.7522 0 +v 51.6098 22.8139 0 +v 50.0917 25.1566 0 +v 52.7977 22.555 0 +v 53.0174 21.8714 0 +v 52.3825 21.667 0 +v 52.1514 22.4443 0 +v 52.4019 23.5933 0 +v 51.8306 23.3817 0 +v 55.6058 40.0348 0 +v 55.2787 38.3687 0 +v 55.0243 37.5452 0 +v 55.929 37.7168 0 +v 55.5896 37.0354 0 +v 57.0834 36.7164 0 +v 56.3775 37.0681 0 +v 56.0088 36.443 0 +v 57.1184 37.6709 0 +v 59.6722 37.0994 0 +v 58.8369 39.6446 0 +v 58.3422 37.1481 0 +v 57.7944 38.8173 0 +v 57.6298 37.1743 0 +v 58.0155 37.9654 0 +v 57.2361 38.3741 0 +v 59.0357 37.8993 0 +v 56.7501 50.5 0 +v 59.3607 39.2631 0 +v 55.2902 45.0545 0 +v 35.8447 43.4614 0 +v 35.3457 42.8831 0 +v 39.056 42.9303 0 +v 39.0175 44.7898 0 +v 35.3085 44.0021 0 +v 44.9606 42.6527 0 +v 51.8742 45.0717 0 +v 61.5899 42.2281 0 +v 53.388 44.9777 0 +v 45.1755 43.453 0 +v 52.2575 42.1496 0 +v 49.8067 41.8136 0 +v 52.2118 41.5167 0 +v 55.1542 43.8854 0 +v 55.4469 42.7452 0 +v 53.866 40.7777 0 +v 54.9429 41.3716 0 +v 52.7801 45.9524 0 +v 49.6474 43.0077 0 +v 54.2843 42.0624 0 +v 54.6633 40.2363 0 +v 48.0601 41.6001 0 +v 53.1445 44.2325 0 +v 54.3795 39.5707 0 +v 54.8877 39.0135 0 +v 55.0442 39.6666 0 +v 55.2538 40.693 0 +v 56.55 40.9631 0 +v 55.9416 40.6376 0 +v 56.7996 39.7649 0 +v 55.942 41.3684 0 +v 56.921 39.0391 0 +v 56.0011 39.1905 0 +v 54.5145 40.875 0 +v 53.7632 42.8621 0 +v 56.8955 42.5395 0 +v 56.6473 41.7678 0 +v 58.1942 41.1725 0 +v 57.5833 41.8925 0 +v 52.5451 44.2459 0 +v 56.1774 39.7877 0 +v 55.8951 38.5552 0 +v 57.3691 41.0915 0 +v 57.0513 40.4424 0 +v 57.7717 39.7894 0 +v 57.8413 40.5242 0 +v 58.6905 40.4821 0 +v 59.8283 43.1783 0 +v 58.1327 43.1655 0 +v 55.0814 43.259 0 +v 51.5025 45.6585 0 +v 38.9527 43.527 0 +v 37.0834 43.6747 0 +v 38.4839 41.0663 0 +v 56.4583 40.3233 0 +v 58.2496 39.3142 0 +v 58.5683 38.5655 0 +v 58.3413 39.9896 0 +v 59.6236 41.6765 0 +v 57.6275 42.6285 0 +v 58.6215 42.1995 0 +v 50.5001 50.5 0 +v 54.6078 42.8428 0 +v 55.2385 42.0424 0 +v 58.9826 41.2156 0 +v 60.0916 40.3491 0 +v 59.6637 40.9444 0 +v 60.8964 41.379 0 +v 60.2165 41.3418 0 +v 60.5017 42.3613 0 +v 58.1809 41.7804 0 +v 58.6427 44.095 0 +v 53.8717 45.5946 0 +v 59.3676 40.169 0 +v 60.0579 38.9394 0 +v 59.8814 39.6489 0 +v 59.3476 38.6151 0 +v 61.2628 39.6158 0 +v 60.0681 37.9768 0 +v 60.5766 39.8218 0 +v 61.1584 40.5138 0 +v 46.4077 43.067 0 +v 51.4343 43.7359 0 +v 37.4764 41.0397 0 +v 60.5467 44.9574 0 +v 36.7625 38.0116 0 +v 60.5691 40.7932 0 +v 59.5718 37.6727 0 +v 62.2339 36.4715 0 +v 61.1141 38.4692 0 +v 64.8148 41.1894 0 +v 61.0113 37.0232 0 +v 60.4784 38.4625 0 +v 62.1526 41.2871 0 +v 60.3564 37.3187 0 +v 60.9471 37.7544 0 +v 62.2925 37.817 0 +v 61.6109 37.9763 0 +v 62.1997 38.958 0 +v 61.5068 41.0916 0 +v 62.2147 40.1815 0 +v 61.6123 40.1115 0 +v 56.8154 34.3529 0 +v 57.4173 33.652 0 +v 57.8459 33.2135 0 +v 58.246 32.5134 0 +v 56.8386 32.9945 0 +v 53.9604 27.842 0 +v 58.9607 29.571 0 +v 58.0917 29.4518 0 +v 37.603 37.6102 0 +v 38.2974 37.965 0 +v 38.1581 38.6383 0 +v 36.4035 38.7975 0 +v 39.1838 38.6786 0 +v 41.7141 41.0509 0 +v 42.295 40.5822 0 +v 41.6516 40.3791 0 +v 39.8557 40.936 0 +v 38.1512 41.5799 0 +v 51.4975 27 0 +v 52.6785 25.9641 0 +v 52.3835 25.3747 0 +v 52.2519 24.4825 0 +v 54.1804 25.9169 0 +v 52.8535 26.8058 0 +v 51.6918 24.1707 0 +v 53.4215 25.6879 0 +v 54.1413 24.6744 0 +v 53.5969 26.4786 0 +v 53.9519 25.3022 0 +v 54.9797 25.2699 0 +v 54.5096 26.8428 0 +v 52.9274 27.4633 0 +v 55.0218 26.1392 0 +v 55.4533 27.2117 0 +v 56.459 25.6341 0 +v 54.8792 27.2889 0 +v 55.6651 25.6725 0 +v 55.8783 24.5247 0 +v 56.1038 26.517 0 +v 55.5639 25.06 0 +v 54.9894 24.3626 0 +v 57.2531 25.2636 0 +v 55.4749 26.5799 0 +v 56.9416 26.3411 0 +v 56.2032 27.2619 0 +v 54.3073 23.8168 0 +v 55.6092 23.482 0 +v 56.5826 24.8627 0 +v 57.3808 25.8843 0 +v 57.356 26.9114 0 +v 58.6634 27.5093 0 +v 57.7899 27.6912 0 +v 53.3119 24.069 0 +v 55.5028 24.0655 0 +v 54.9119 23.4689 0 +v 55.2736 22.6669 0 +v 59.0827 26.2923 0 +v 58.1076 27.0282 0 +v 58.4475 26.4646 0 +v 58.3789 28.3315 0 +v 57.177 28.2852 0 +v 52.8519 24.4552 0 +v 58.7828 25.6553 0 +v 59.5428 25.4731 0 +v 58.43 28.9416 0 +v 56.457 28.0607 0 +v 57.5964 28.8983 0 +v 60.3307 14.0299 0 +v 60.1265 14.6911 0 +v 60.6544 15.611 0 +v 59.8949 16.0832 0 +v 60.507 16.2207 0 +v 60.145 17.0576 0 +v 60.9079 17.5698 0 +v 60.2278 17.7224 0 +v 59.5262 17.1335 0 +v 63.4057 17.2569 0 +v 62.1278 17.1815 0 +v 61.4432 17.1411 0 +v 60.6189 11.3665 0 +v 60.0444 10.9955 0 +v 60.965 10.805 0 +v 61.711 11.6521 0 +v 61.047 11.9601 0 +v 62.0653 13.2854 0 +v 61.7049 12.5085 0 +v 63.1456 12.0905 0 +v 61.2278 13.2019 0 +v 61.0275 13.8848 0 +v 60.9724 12.605 0 +v 62.1472 14.6253 0 +v 61.4856 14.409 0 +v 61.9979 13.962 0 +v 61.5473 15.3401 0 +v 63.8397 13.8038 0 +v 62.9374 14.099 0 +v 62.5139 12.6052 0 +v 62.4318 11.8596 0 +v 63.3614 13.0003 0 +v 60.9943 15.1243 0 +v 62.912 15.8763 0 +v 61.2596 15.9985 0 +v 62.0881 15.9685 0 +v 62.4316 15.3107 0 +v 62.5713 16.5598 0 +v 61.6931 16.5149 0 +v 63.3775 14.9941 0 +v 64.6369 12.2172 0 +v 63.2727 13.5973 0 +v 62.7232 13.2313 0 +v 62.7866 14.7289 0 +v 63.5242 14.3662 0 +v 65.1424 15.0754 0 +v 64.2675 14.871 0 +v 64.2491 13.016 0 +v 64.4024 16.2683 0 +v 63.8753 12.341 0 +v 63.7748 11.4457 0 +v 66.1169 13.4292 0 +v 65.0075 13.9104 0 +v 63.7418 15.7503 0 +v 63.668 16.5246 0 +v 64.5709 15.5468 0 +v 65.5546 16.1571 0 +v 63.055 11.1991 0 +v 64.0207 10.8966 0 +v 64.81 14.5236 0 +v 64.4454 13.6183 0 +v 65.1958 12.9821 0 +v 66.5192 11.4284 0 +v 65.5003 13.5271 0 +v 65.9628 14.4495 0 +v 65.6722 12.0473 0 +v 65.1975 12.3942 0 +v 62.5029 23.0746 0 +v 64.7442 25.8156 0 +v 61.4171 28.0189 0 +v 56.6878 23.0536 0 +v 63.4571 21.183 0 +v 56.0919 12.6561 0 +v 51.7072 1.33012 0 +v 51.2813 0.5 0 +v 52.8438 1.32567 0 +v 52.2767 1.62687 0 +v 53.0551 2.40805 0 +v 50.3574 2.63719 0 +v 49.638 2.87285 0 +v 51.3543 2.37243 0 +v 50.8668 3.73534 0 +v 52.4656 3.9037 0 +v 51.6879 3.61332 0 +v 51.8696 2.91097 0 +v 51.7322 4.68125 0 +v 51.3498 4.16223 0 +v 56.1702 9.96502 0 +v 55.6666 9.54578 0 +v 56.7958 5.01668 0 +v 57.6254 7.83618 0 +v 57.3344 6.39002 0 +v 57.2821 7.1529 0 +v 56.3463 6.70557 0 +v 64.6253 9.3786 0 +v 60.5398 7.24854 0 +v 61.1869 7.56024 0 +v 61.8967 5.80788 0 +v 63.1462 3.98416 0 +v 69.2501 0.5 0 +v 67.2606 7.11054 0 +v 63.4812 2.84048 0 +v 68.7866 6.92033 0 +v 54.5804 38.3405 0 +v 56.7099 35.9786 0 +v 59.011 37.2264 0 +v 58.8875 35.3858 0 +v 58.7784 36.3176 0 +v 57.8837 36.3163 0 +v 57.4161 35.7326 0 +v 57.9585 34.7391 0 +v 58.1643 35.6123 0 +v 57.3319 34.7089 0 +v 59.8687 35.9729 0 +v 60.3999 36.5417 0 +v 61.2669 35.1994 0 +v 61.2247 36.1233 0 +v 59.246 35.9 0 +v 60.5929 35.6316 0 +v 60.0306 34.0127 0 +v 60.5062 34.7546 0 +v 61.9378 35.693 0 +v 62.9319 33.6388 0 +v 63.9204 35.3847 0 +v 62.2442 34.5736 0 +v 62.9618 35.7492 0 +v 61.8759 35.0744 0 +v 61.5951 36.6864 0 +v 62.1069 37.1511 0 +v 63.549 37.0689 0 +v 62.8391 37.3059 0 +v 63.6563 38.572 0 +v 63.0426 38.0714 0 +v 63.7679 37.8086 0 +v 62.9427 38.8204 0 +v 65.6513 36.8489 0 +v 62.6866 42.8227 0 +v 62.6961 39.5638 0 +v 64.6205 37.154 0 +v 63.5355 39.3743 0 +v 63.0122 40.3065 0 +v 64.2012 39.8751 0 +v 64.2042 41.3231 0 +v 62.5335 40.754 0 +v 65.0166 38.7993 0 +v 64.2273 38.2656 0 +v 62.8104 29.7556 0 +v 64.097 39.0486 0 +v 59.1578 44.4704 0 +v 59.597 34.8141 0 +v 60.0077 35.3291 0 +v 61.329 34.2204 0 +v 61.5268 37.364 0 +v 58.7887 34.5371 0 +v 62.0513 33.7113 0 +v 58.2461 34.1139 0 +v 60.8863 32.8253 0 +v 57.6534 34.203 0 +v 61.3285 33.4528 0 +v 60.7245 33.837 0 +v 62.0982 32.4407 0 +v 61.8736 33.0686 0 +v 36.6568 40.8179 0 +v 36.0966 42.7429 0 +v 36.9032 39.4467 0 +v 40.1371 43.2574 0 +v 39.2278 44.146 0 +v 38.3737 44.2232 0 +v 36.7864 40.2336 0 +v 35.8474 40.1381 0 +v 34.7649 39.6692 0 +v 35.8787 39.2855 0 +v 35.2122 39.131 0 +v 38.1192 45.1615 0 +v 37.7912 43.9972 0 +v 38.7274 45.3602 0 +v 40.3776 45.9523 0 +v 39.4975 45.8094 0 +v 36.8355 46.5123 0 +v 39.5528 48.25 0 +v 37.6598 46.0103 0 +v 39.2982 47.0348 0 +v 36.7673 45.4726 0 +v 39.1622 46.3838 0 +v 37.9358 47.3913 0 +v 38.4611 46.7805 0 +v 37.7595 46.7085 0 +v 37.0731 45.9747 0 +v 36.568 44.8238 0 +v 37.4504 45.3483 0 +v 52.2447 27.3077 0 +v 53.4946 24.6896 0 +v 53.1442 23.2817 0 +v 53.5694 22.633 0 +v 53.8396 23.3018 0 +v 59.7018 10.4495 0 +v 61.7743 10.9764 0 +v 64.5279 11.4716 0 +v 65.3955 11.1722 0 +v 65.4913 10.0689 0 +v 65.9142 11.4895 0 +v 66.1349 10.6505 0 +v 65.1922 10.5987 0 +v 67.3237 8.688 0 +v 66.5404 9.55484 0 +v 66.1186 10.0216 0 +v 67.4158 10.5016 0 +v 66.8019 10.8049 0 +v 67.5333 11.5124 0 +v 65.1531 18.0218 0 +v 66.0113 15.3637 0 +v 68.4496 14.7759 0 +v 67.1759 14.8435 0 +v 66.4936 14.8797 0 +v 66.7906 14.0284 0 +v 67.2689 16.6156 0 +v 66.8807 15.7479 0 +v 67.2763 12.8042 0 +v 67.7731 14.0625 0 +v 67.8528 15.5648 0 +v 66.3838 16.4909 0 +v 66.8104 13.3278 0 +v 66.3487 12.5921 0 +v 67.8074 14.7075 0 +v 70.0332 12.5968 0 +v 70.2763 16.7781 0 +v 67.4354 16.0205 0 +v 68.5982 16.6666 0 +v 66.6296 17.9486 0 +v 65.6365 17.1503 0 +v 65.8081 12.8931 0 +v 66.278 11.9874 0 +v 69.0392 13.5394 0 +v 68.846 15.696 0 +v 66.7379 17.1808 0 +v 67.8917 17.7329 0 +v 67.2265 17.6412 0 +v 67.4142 18.7387 0 +v 64.6773 17.1881 0 +v 64.0332 17.0686 0 +v 64.19 18.0188 0 +v 65.8851 17.858 0 +v 66.0913 19.2677 0 +v 66.1805 18.5347 0 +v 66.7414 18.9749 0 +v 67.7141 20.6691 0 +v 66.8338 20.0482 0 +v 68.5067 14.0444 0 +v 68.1188 13.1988 0 +v 65.0145 16.5863 0 +v 64.6683 19.0561 0 +v 65.4313 18.8155 0 +v 65.3008 19.7136 0 +v 68.0338 12.2834 0 +v 64.6703 18.4262 0 +v 66.0251 20.0741 0 +v 66.4752 21.491 0 +v 66.4505 20.7189 0 +v 67.0977 21.0847 0 +v 65.3 21.1422 0 +v 68.5253 22.5374 0 +v 65.3971 20.4279 0 +v 65.9455 21.1215 0 +v 65.6539 22.1041 0 +v 67.3951 22.2202 0 +v 69.2698 10.933 0 +v 68.4767 11.4479 0 +v 67.9687 10.9495 0 +v 68.6022 9.60216 0 +v 68.1197 10.1979 0 +v 67.4434 9.59806 0 +v 68.8611 10.3052 0 +v 70.7568 9.51815 0 +v 69.882 10.0876 0 +v 69.3392 11.9082 0 +v 68.0247 9.05873 0 +v 68.1835 7.91037 0 +v 69.2141 12.7284 0 +v 68.7263 12.2344 0 +v 63.6465 24.8405 0 +v 60.3223 28.7107 0 +v 62.8834 21.7151 0 +v 62.5972 20.8311 0 +v 62.0724 21.125 0 +v 62.3926 19.3425 0 +v 61.7064 19.8272 0 +v 62.4121 20.0982 0 +v 63.4897 19.6923 0 +v 63.2621 20.433 0 +v 63.8769 20.2166 0 +v 50.8911 1.12307 0 +v 52.8438 0.5 0 +v 54.0216 1.65761 0 +v 52.6553 3.11449 0 +v 54.7583 3.83813 0 +v 53.774 3.28115 0 +v 53.1473 3.6502 0 +v 53.23 4.91611 0 +v 52.9993 4.29554 0 +v 53.9392 4.2992 0 +v 52.474 4.84406 0 +v 52.7785 5.6518 0 +v 54.1639 3.7403 0 +v 55.1511 5.49405 0 +v 51.8703 5.58162 0 +v 54.7168 4.72252 0 +v 51.5726 6.26753 0 +v 51.225 5.21983 0 +v 55.8324 4.33167 0 +v 54.2099 5.51589 0 +v 55.3886 4.85237 0 +v 56.0314 5.45505 0 +v 54.6977 6.24661 0 +v 54.0899 6.41082 0 +v 53.5503 5.49309 0 +v 56.1909 4.84749 0 +v 56.7285 4.09141 0 +v 56.7521 5.82609 0 +v 55.6244 6.22247 0 +v 55.896 2.77768 0 +v 58.9817 4.3925 0 +v 55.673 6.93085 0 +v 56.107 3.56461 0 +v 55.4446 3.76017 0 +v 57.2607 2.83351 0 +v 56.7981 3.37931 0 +v 57.9028 3.84673 0 +v 55.0347 6.80339 0 +v 57.4274 4.50562 0 +v 58.2135 4.57179 0 +v 57.6792 5.46254 0 +v 58.8488 5.55853 0 +v 58.7072 4.95181 0 +v 59.6281 5.05675 0 +v 58.2085 6.18711 0 +v 59.8751 0.5 0 +v 59.8462 6.25153 0 +v 59.938 4.10845 0 +v 59.0212 6.37463 0 +v 59.5363 7.0007 0 +v 58.4884 6.82902 0 +v 57.836 6.80761 0 +v 59.4905 5.69915 0 +v 60.1912 5.51328 0 +v 60.6459 4.7061 0 +v 60.1663 2.8294 0 +v 60.586 4.05902 0 +v 61.5818 3.83553 0 +v 58.3049 2.88186 0 +v 59.1622 3.65389 0 +v 58.5549 3.89684 0 +v 59.8163 3.42682 0 +v 59.2307 2.6825 0 +v 58.8456 3.14343 0 +v 64.1269 10.0394 0 +v 59.8668 1.68393 0 +v 58.6194 2.09306 0 +v 59.7667 2.322 0 +v 58.3126 0.5 0 +v 56.4121 7.33083 0 +v 63.4291 9.87257 0 +v 64.8086 10.0352 0 +v 64.3033 8.72422 0 +v 63.904 9.32717 0 +v 60.2088 7.79201 0 +v 60.7571 6.42811 0 +v 61.9946 6.38322 0 +v 62.5134 5.26086 0 +v 62.6331 5.9184 0 +v 61.614 4.86792 0 +v 61.2006 4.36411 0 +v 64.9437 3.89122 0 +v 65.3108 4.52486 0 +v 67.0543 5.52315 0 +v 67.177 6.46752 0 +v 68.0074 6.60277 0 +v 66.4004 5.37684 0 +v 68.9434 5.42089 0 +v 68.201 7.24236 0 +v 68.6472 6.14782 0 +v 68.1852 5.53568 0 +v 70.0461 6.29416 0 +v 68.3099 3.7978 0 +v 69.3254 6.42425 0 +v 68.4436 4.68082 0 +v 69.9096 7.59939 0 +v 69.4467 7.0967 0 +v 69.0735 7.90474 0 +v 68.8526 8.75753 0 +v 67.7311 4.93192 0 +v 70.3336 3.94308 0 +v 68.2941 8.51082 0 +v 69.4169 9.38419 0 +v 69.4718 4.52516 0 +v 69.7728 8.52203 0 +v 70.0873 9.44632 0 +v 68.8909 4.16148 0 +v 69.4064 2.69212 0 +v 68.9829 3.36865 0 +v 63.8027 3.36662 0 +v 69.7708 3.39111 0 +v 68.4831 2.585 0 +v 70.8126 0.5 0 +v 70.6386 2.49408 0 +v 71.0539 8.24053 0 +v 66.6415 3.13625 0 +v 64.2936 2.99345 0 +v 70.3598 8.13761 0 +v 70.6145 8.81171 0 +v 68.2485 3.17026 0 +v 67.3595 4.02074 0 +v 65.868 2.52934 0 +v 64.8907 2.42185 0 +v 67.928 4.30723 0 +v 66.7089 4.27345 0 +v 67.4585 2.51393 0 +v 65.1053 3.14975 0 +v 65.6432 3.68501 0 +v 66.1251 0.5 0 +v 69.0635 1.61494 0 +v 66.0019 3.15508 0 +v 65.3438 0.5 0 +v 66.6613 2.31469 0 +v 66.1074 1.84108 0 +v 63.2641 34.6035 0 +v 67.6876 0.5 0 +v 67.2946 1.47529 0 +v 68.992 2.23084 0 +v 65.4229 2.07968 0 +v 63.0048 36.5205 0 +v 63.8284 36.2475 0 +v 64.9437 35.9301 0 +v 64.1094 36.8013 0 +v 64.322 35.8638 0 +v 64.6192 40.5957 0 +v 59.3438 45.0801 0 +v 65.6131 39.0893 0 +v 67.7406 36.3221 0 +v 62.8836 45.8629 0 +v 65.2341 42.7232 0 +v 63.5667 40.0048 0 +v 64.8066 40.0055 0 +v 62.3215 31.8604 0 +v 67.5138 41.7533 0 +v 61.2443 28.9577 0 +v 65.0326 37.9251 0 +v 63.2068 43.2048 0 +v 66.287 37.835 0 +v 60.7362 27.6521 0 +v 60.1941 28.0503 0 +v 46.2265 45.2577 0 +v 62.243 45.2924 0 +v 59.7219 28.4626 0 +v 45.9106 46.9612 0 +v 44.4967 45.0929 0 +v 53.5506 49.4341 0 +v 63.5852 28.9033 0 +v 62.2685 30.0658 0 +v 56.776 49.0838 0 +v 54.9388 47.9788 0 +v 44.2238 46.83 0 +v 62.9105 31.6611 0 +v 46.1791 46.2522 0 +v 42.8146 46.7525 0 +v 54.8993 46.5123 0 +v 54.2501 50.5 0 +v 44.7581 46.3679 0 +v 54.1335 49.1189 0 +v 58.1109 48.8584 0 +v 57.0079 49.7964 0 +v 57.6635 49.4333 0 +v 51.7501 50.5 0 +v 56.0293 48.6874 0 +v 59.2026 33.7846 0 +v 59.0828 32.9736 0 +v 59.9469 32.4415 0 +v 61.2144 30.773 0 +v 57.867 43.916 0 +v 55.5001 50.5 0 +v 56.9672 44.9686 0 +v 57.2591 44.3073 0 +v 58.045 45.0493 0 +v 56.1806 44.2263 0 +v 55.8905 43.4477 0 +v 56.4977 43.6648 0 +v 48.3742 42.3942 0 +v 49.0382 42.6441 0 +v 48.8194 43.7029 0 +v 48.2469 43.1676 0 +v 47.2339 44.8248 0 +v 47.3785 43.775 0 +v 44.3006 42.5155 0 +v 54.1784 41.4259 0 +v 50.4313 42.8154 0 +v 49.9229 42.4368 0 +v 50.6458 42.2207 0 +v 58.1861 45.8518 0 +v 56.8287 47.5966 0 +v 57.3083 46.9801 0 +v 49.3251 46.7109 0 +v 48.0132 43.7581 0 +v 61.0091 41.9947 0 +v 63.6748 41.9719 0 +v 70.5001 50.5 0 +v 62.7736 44.5009 0 +v 63.7898 40.5954 0 +v 61.4218 45.0444 0 +v 80.5001 50.5 0 +v 64.1122 44.7239 0 +v 40.3898 42.3618 0 +v 40.7758 41.4768 0 +v 41.3447 42.3922 0 +v 41.0725 40.8841 0 +v 41.3448 42.9921 0 +v 41.3451 44.11 0 +v 42.1938 42.3469 0 +v 41.7378 41.7789 0 +v 42.3392 41.3949 0 +v 42.8637 41.883 0 +v 34.7865 44.982 0 +v 34.4641 43.9905 0 +v 35.7629 46.0606 0 +v 65.965 8.24316 0 +v 65.1945 8.69207 0 +v 65.7671 9.28001 0 +v 65.2134 9.52911 0 +v 68.2912 16.0713 0 +v 69.8866 14.7023 0 +v 69.154 14.4629 0 +v 69.3309 15.1621 0 +v 70.251 15.7084 0 +v 69.4606 16.3699 0 +v 69.9044 19.3046 0 +v 67.7569 19.674 0 +v 67.4156 20.1578 0 +v 67.1413 19.4811 0 +v 68.711 18.7939 0 +v 68.9571 20.2241 0 +v 68.0511 19.0357 0 +v 68.1774 18.3591 0 +v 68.6128 19.5471 0 +v 68.9154 17.644 0 +v 69.2244 19.2439 0 +v 69.6485 18.3322 0 +v 68.2449 20.1935 0 +v 69.1992 17.0117 0 +v 64.3029 22.8015 0 +v 63.6555 22.1768 0 +v 63.523 22.9618 0 +v 64.1153 23.8663 0 +v 64.597 21.849 0 +v 65.1848 21.7307 0 +v 65.0002 22.4952 0 +v 66.3805 24.0605 0 +v 65.8356 23.1497 0 +v 63.9808 21.5951 0 +v 64.2307 20.8831 0 +v 64.7066 21.2551 0 +v 64.8604 20.6817 0 +v 68.186 21.5745 0 +v 68.5713 20.8992 0 +v 70.5828 21.6008 0 +v 69.6421 21.0633 0 +v 66.5091 22.3932 0 +v 67.1423 23.2806 0 +v 67.0275 22.6929 0 +v 71.2699 11.2631 0 +v 70.3155 11.6183 0 +v 69.9066 12.0304 0 +v 69.7169 11.3913 0 +v 63.0585 24.3181 0 +v 59.7229 29.0894 0 +v 63.0729 18.3841 0 +v 64.1857 19.5719 0 +v 63.7113 18.9012 0 +v 63.0598 19.1452 0 +v 53.3489 1.78889 0 +v 53.8745 2.46584 0 +v 54.9437 2.24287 0 +v 55.0174 3.05984 0 +v 54.3545 2.9389 0 +v 55.2203 7.43499 0 +v 57.7659 3.22344 0 +v 61.733 2.124 0 +v 60.9287 3.25563 0 +v 60.9114 2.39166 0 +v 61.7503 2.98798 0 +v 62.5838 2.53915 0 +v 61.4376 0.5 0 +v 62.9013 3.08062 0 +v 62.3157 2.00924 0 +v 63.2633 2.00241 0 +v 64.0857 2.17856 0 +v 64.5626 0.5 0 +v 63.3189 1.21841 0 +v 63.7813 0.5 0 +v 64.7102 1.56548 0 +v 65.7344 1.16552 0 +v 63.9967 1.46331 0 +v 59.0938 0.5 0 +v 59.7079 1.09083 0 +v 60.6563 0.5 0 +v 59.1979 1.75068 0 +v 58.3016 1.3282 0 +v 57.7018 2.02596 0 +v 57.5313 0.903801 0 +v 61.8657 1.26099 0 +v 62.2188 0.5 0 +v 56.6131 1.95562 0 +v 58.9367 1.14275 0 +v 62.5892 1.13429 0 +v 57.1411 2.24396 0 +v 56.8602 1.24461 0 +v 55.9688 0.995981 0 +v 55.1876 0.5 0 +v 55.1729 1.38644 0 +v 55.8543 1.76899 0 +v 54.6398 1.70266 0 +v 62.2117 4.33259 0 +v 67.3884 7.89542 0 +v 66.7183 8.23966 0 +v 66.6936 8.90594 0 +v 66.1158 8.80925 0 +v 70.5281 5.15998 0 +v 67.4955 3.27302 0 +v 72.2059 2.48453 0 +v 68.4688 0.942359 0 +v 68.215 1.76595 0 +v 67.8463 1.13078 0 +v 67.6504 1.95138 0 +v 66.9063 0.5 0 +v 66.5157 1.17579 0 +v 62.7645 34.236 0 +v 65.6968 33.2262 0 +v 63.3126 35.229 0 +v 65.0184 36.6044 0 +v 61.0953 44.27 0 +v 59.3711 27.9431 0 +v 60.0032 27.4053 0 +v 60.6949 26.563 0 +v 65.2312 37.3233 0 +v 46.0116 47.7125 0 +v 60.8973 28.4085 0 +v 62.722 43.6309 0 +v 65.3423 39.6947 0 +v 46.971 44.2538 0 +v 45.4642 46.3483 0 +v 62.4128 42.0573 0 +v 61.8906 43.7832 0 +v 63.0602 42.2573 0 +v 61.7917 31.5351 0 +v 61.455 32.1537 0 +v 62.4091 28.6868 0 +v 59.9692 45.2535 0 +v 48.6438 44.351 0 +v 43.4856 45.9915 0 +v 41.8378 46.4435 0 +v 45.5001 50.5 0 +v 45.0212 45.6892 0 +v 58.0001 50.5 0 +v 56.0956 47.3274 0 +v 58.048 47.506 0 +v 54.8148 47.2484 0 +v 54.3111 49.7994 0 +v 54.4571 46.0229 0 +v 62.9822 41.4772 0 +v 65.932 35.9009 0 +v 60.2529 43.9665 0 +v 62.084 43.1334 0 +v 58.6876 45.3499 0 +v 54.8751 50.2195 0 +v 55.3575 49.7331 0 +v 56.9025 48.2479 0 +v 55.4942 48.965 0 +v 65.399 34.6001 0 +v 67.3222 35.2822 0 +v 51.5662 47.4715 0 +v 53.6251 50.0926 0 +v 65.4212 35.3506 0 +v 64.6623 34.9975 0 +v 66.3584 34.9473 0 +v 64.4212 33.6689 0 +v 64.7583 34.2939 0 +v 64.0329 34.5533 0 +v 65.141 33.684 0 +v 68.5043 37.1425 0 +v 66.7334 35.8303 0 +v 66.2714 39.0082 0 +v 50.9331 47.7045 0 +v 57.594 48.0603 0 +v 53.3284 48.2322 0 +v 63.6722 33.8675 0 +v 63.7006 32.4631 0 +v 63.8879 33.1694 0 +v 64.8128 32.5462 0 +v 65.3577 41.4992 0 +v 64.6753 39.3613 0 +v 63.235 40.8979 0 +v 53.8794 48.4801 0 +v 54.5909 48.5875 0 +v 52.3905 48.8816 0 +v 52.3751 50.2319 0 +v 53.0001 50.5 0 +v 51.8386 46.8543 0 +v 50.2795 49.6606 0 +v 51.1251 49.8561 0 +v 51.1967 48.3087 0 +v 53.2856 48.8266 0 +v 48.0001 50.5 0 +v 52.3033 47.4281 0 +v 52.0016 49.6636 0 +v 56.1251 49.8719 0 +v 57.4064 48.7517 0 +v 53.7447 47.8059 0 +v 54.8368 49.2441 0 +v 42.7705 46.0196 0 +v 49.2501 50.5 0 +v 45.7073 45.7065 0 +v 53.089 46.9694 0 +v 51.3835 48.9408 0 +v 61.7677 28.5687 0 +v 52.874 49.6235 0 +v 55.6227 47.8405 0 +v 57.3751 50.5 0 +v 45.0231 47.463 0 +v 55.4937 46.7728 0 +v 59.4372 43.8975 0 +v 62.1345 30.6757 0 +v 59.7952 44.5207 0 +v 61.6748 29.8727 0 +v 52.7849 47.9878 0 +v 60.1782 33.2171 0 +v 59.6558 31.6169 0 +v 60.2727 30.8951 0 +v 59.8422 30.3999 0 +v 60.6746 29.7236 0 +v 60.8648 31.7695 0 +v 60.6849 30.3818 0 +v 60.7888 31.1833 0 +v 60.2373 31.8753 0 +v 57.4724 45.4586 0 +v 55.1988 45.9365 0 +v 56.8038 45.6426 0 +v 58.66 46.5147 0 +v 56.4346 46.5825 0 +v 56.0105 44.9362 0 +v 60.3117 45.8048 0 +v 55.5422 44.4327 0 +v 56.2342 42.8178 0 +v 49.5 43.6729 0 +v 48.5597 45.0172 0 +v 46.3483 44.168 0 +v 45.8333 43.6933 0 +v 45.1858 44.9123 0 +v 45.2821 44.1819 0 +v 44.6533 44.4706 0 +v 44.199 45.9361 0 +v 43.8551 45.1107 0 +v 47.075 43.1716 0 +v 54.2872 46.7282 0 +v 59.0466 47.4379 0 +v 57.3201 46.2118 0 +v 50.2968 45.9426 0 +v 60.9758 43.4381 0 +v 61.4425 42.9142 0 +v 42.0817 43.9017 0 +v 42.3442 45.4219 0 +v 41.9135 44.7135 0 +v 42.6915 44.7256 0 +v 41.3256 45.5561 0 +v 43.4018 44.4715 0 +v 43.1221 45.3751 0 +v 43.4847 43.8379 0 +v 40.5892 43.9136 0 +v 40.7557 44.8253 0 +v 39.8884 44.718 0 +v 41.3518 44.948 0 +v 40.7204 45.4404 0 +v 40.0188 45.3804 0 +v 35.3188 44.6365 0 +v 33.9524 44.7243 0 +v 33.0755 45.0691 0 +v 32.1049 45.027 0 +v 31.9602 45.667 0 +v 31.3712 44.8265 0 +v 35.3746 45.4309 0 +v 34.6989 46.2821 0 +v 36.118 45.5152 0 +v 65.3004 7.84539 0 +v 66.0604 7.32955 0 +v 66.5625 6.82573 0 +v 69.6082 15.7432 0 +v 68.3682 17.2814 0 +v 69.0292 18.2573 0 +v 71.7827 18.2904 0 +v 69.8731 17.5191 0 +v 70.9426 17.6208 0 +v 70.3584 18.0907 0 +v 64.7077 24.7513 0 +v 64.9579 23.4658 0 +v 65.6109 23.9025 0 +v 64.9813 24.1374 0 +v 68.0174 22.1751 0 +v 67.8524 22.9437 0 +v 69.2833 24.5532 0 +v 68.0273 24.229 0 +v 67.7355 23.6141 0 +v 68.7328 23.5176 0 +v 67.1933 24.248 0 +v 67.6617 26.4851 0 +v 66.4604 25.569 0 +v 67.6351 25.3231 0 +v 66.6371 24.8033 0 +v 67.6209 24.7006 0 +v 65.6669 24.9826 0 +v 65.6273 25.8663 0 +v 65.0898 25.271 0 +v 66.4433 26.8372 0 +v 66.2159 26.1999 0 +v 66.9801 26.1332 0 +v 65.1118 27.128 0 +v 65.6043 26.593 0 +v 67.5299 21.5782 0 +v 69.849 20.1952 0 +v 69.3903 19.8157 0 +v 71.4093 19.8453 0 +v 70.4219 20.7904 0 +v 70.6286 20.0181 0 +v 71.5558 20.9866 0 +v 70.9511 21.1066 0 +v 71.1359 20.4598 0 +v 69.6149 22.2028 0 +v 66.4717 23.3876 0 +v 72.779 14.2237 0 +v 70.752 10.4675 0 +v 72.339 10.0008 0 +v 70.6628 11.0919 0 +v 71.6154 10.4718 0 +v 70.0406 10.77 0 +v 71.5859 9.63509 0 +v 71.353 8.92518 0 +v 73.0478 7.7772 0 +v 72.0939 8.19391 0 +v 72.3191 9.08343 0 +v 72.7635 11.4442 0 +v 72.7914 8.49054 0 +v 74.8413 8.82452 0 +v 73.472 9.51731 0 +v 73.8473 8.4673 0 +v 72.9657 9.11397 0 +v 72.0438 11.13 0 +v 72.6647 10.6891 0 +v 71.8791 12.4884 0 +v 73.0458 10.0876 0 +v 71.758 11.7845 0 +v 74.7953 10.9508 0 +v 70.9698 12.2824 0 +v 73.7158 10.9357 0 +v 70.8912 11.7055 0 +v 71.1051 13.7954 0 +v 70.7125 13.068 0 +v 71.4699 13.1287 0 +v 70.1804 13.8249 0 +v 72.4408 13.2981 0 +v 69.7152 13.2608 0 +v 69.5439 13.9456 0 +v 71.9434 14.0045 0 +v 72.8503 12.4144 0 +v 71.9454 15.699 0 +v 72.3802 11.9675 0 +v 73.5967 11.8586 0 +v 71.2866 14.8525 0 +v 72.1678 14.8515 0 +v 74.2481 11.4735 0 +v 75.9298 12.6862 0 +v 74.5823 12.7825 0 +v 75.2015 11.9238 0 +v 74.2242 12.1768 0 +v 73.6465 12.927 0 +v 70.6207 14.4602 0 +v 70.6621 15.1513 0 +v 71.0993 15.9041 0 +v 73.6639 15.6969 0 +v 73.1792 13.5529 0 +v 74.2729 13.8821 0 +v 71.772 16.831 0 +v 70.5761 16.2359 0 +v 72.8044 15.4714 0 +v 74.1772 13.2619 0 +v 71.6261 16.2294 0 +v 73.4308 14.8346 0 +v 72.953 16.656 0 +v 74.5665 14.9902 0 +v 72.5138 16.1094 0 +v 73.9657 15.1526 0 +v 63.5355 17.908 0 +v 61.9408 18.3012 0 +v 61.6645 19.0397 0 +v 61.0812 18.6443 0 +v 61.3426 18.0509 0 +v 62.74 17.6731 0 +v 55.5453 2.28697 0 +v 69.7347 5.28394 0 +v 70.1477 4.59678 0 +v 72.3958 4.23758 0 +v 71.0713 2.97353 0 +v 72.3751 0.5 0 +v 73.1938 3.43374 0 +v 70.0555 2.79818 0 +v 47.9736 44.3918 0 +v 46.8537 46.5077 0 +v 66.1434 34.0422 0 +v 68.1183 32.4311 0 +v 66.9813 33.0534 0 +v 66.3723 33.3867 0 +v 61.9021 44.5052 0 +v 53.2004 47.5573 0 +v 51.8207 48.0962 0 +v 50.5618 48.8399 0 +v 48.6041 48.6255 0 +v 49.8751 50.2156 0 +v 49.1637 49.4812 0 +v 49.8071 49.0392 0 +v 50.8332 45.5185 0 +v 60.4675 43.0192 0 +v 34.5409 45.6184 0 +v 35.6004 47.9456 0 +v 66.7199 7.54566 0 +v 64.2195 25.3008 0 +v 63.1561 26.9092 0 +v 63.844 26.2082 0 +v 64.5418 26.58 0 +v 64.0636 27.6478 0 +v 63.9045 26.9355 0 +v 64.4944 27.1997 0 +v 64.9031 28.0238 0 +v 62.7008 25.7744 0 +v 62.6705 24.9948 0 +v 62.161 25.405 0 +v 64.219 28.4259 0 +v 65.6444 30.0675 0 +v 64.5742 29.5571 0 +v 64.1958 29.0546 0 +v 63.7101 29.8141 0 +v 65.9554 27.7968 0 +v 63.1772 26.2419 0 +v 63.4008 25.5375 0 +v 64.5368 31.0127 0 +v 63.2013 30.6904 0 +v 65.3756 27.6616 0 +v 65.8939 27.1616 0 +v 64.3186 30.2788 0 +v 64.9704 30.1036 0 +v 63.8794 30.8088 0 +v 63.9769 31.6562 0 +v 64.7523 31.7655 0 +v 65.5853 31.1198 0 +v 64.2787 32.2103 0 +v 64.1508 24.4833 0 +v 68.7056 24.1961 0 +v 68.5397 25.1104 0 +v 70.4126 26.835 0 +v 68.2458 25.8904 0 +v 69.5199 25.9251 0 +v 68.8512 27.0693 0 +v 68.8888 25.6874 0 +v 68.9876 26.3815 0 +v 69.6849 26.6561 0 +v 68.3385 26.6102 0 +v 67.7773 27.7529 0 +v 69.7707 27.8768 0 +v 69.9241 27.2527 0 +v 70.8177 27.8032 0 +v 74.557 20.0212 0 +v 68.9133 21.8594 0 +v 69.9362 21.6404 0 +v 71.1679 23.6205 0 +v 69.2327 22.8997 0 +v 70.2878 23.0251 0 +v 71.509 6.77078 0 +v 70.829 7.36553 0 +v 71.6027 7.56403 0 +v 72.4144 7.06606 0 +v 70.24 6.9742 0 +v 70.806 6.44516 0 +v 70.533 5.83157 0 +v 71.805 5.48645 0 +v 71.2312 5.88842 0 +v 72.4384 7.68235 0 +v 74.6468 5.71538 0 +v 72.18 6.24913 0 +v 73.656 6.59789 0 +v 73.0879 5.32918 0 +v 73.1252 7.07064 0 +v 72.9404 6.32879 0 +v 73.9908 7.50812 0 +v 72.4738 5.63112 0 +v 72.2725 4.94344 0 +v 71.3211 4.41353 0 +v 74.6718 6.74094 0 +v 74.5471 8.08162 0 +v 76.6955 7.66067 0 +v 75.6604 8.07052 0 +v 74.1255 6.94187 0 +v 74.156 9.16971 0 +v 74.9487 9.8905 0 +v 75.2471 12.6093 0 +v 75.4607 13.782 0 +v 71.0217 16.8734 0 +v 71.6768 17.5615 0 +v 72.786 17.7726 0 +v 73.6002 14.1358 0 +v 62.4817 18.6852 0 +v 71.7171 2.97986 0 +v 70.3325 34.675 0 +v 66.6787 40.5312 0 +v 65.5416 40.5953 0 +v 66.0786 40.0041 0 +v 66.1454 41.1889 0 +v 63.0001 50.5 0 +v 66.6952 36.8738 0 +v 66.1821 36.4905 0 +v 67.6929 38.4404 0 +v 66.0391 43.1756 0 +v 64.6705 41.9917 0 +v 64.3162 42.6222 0 +v 59.8625 26.5846 0 +v 59.3058 27.1025 0 +v 60.9335 25.896 0 +v 61.8693 26.6069 0 +v 61.4002 27.2351 0 +v 62.3491 27.4546 0 +v 62.5007 26.8092 0 +v 63.1772 27.8101 0 +v 63.6068 28.2725 0 +v 62.5791 28.061 0 +v 62.8993 32.4624 0 +v 62.9416 29.0966 0 +v 45.846 44.6635 0 +v 43.5241 46.7018 0 +v 46.3926 48.4149 0 +v 43.232 47.6027 0 +v 44.1462 47.7723 0 +v 43.0001 50.5 0 +v 45.076 49.0107 0 +v 43.7651 47.2778 0 +v 42.0457 47.6575 0 +v 44.806 48.2452 0 +v 45.5938 48.3976 0 +v 43.7249 49.0569 0 +v 47.0748 48.8309 0 +v 47.1001 47.5766 0 +v 46.7501 50.5 0 +v 44.1377 48.4809 0 +v 46.9905 48.2018 0 +v 47.8959 48.0382 0 +v 46.4886 49.0248 0 +v 45.7387 49.0452 0 +v 45.3707 49.7318 0 +v 43.37 48.3666 0 +v 44.2501 50.5 0 +v 42.4067 49.2984 0 +v 42.6606 48.1003 0 +v 44.502 49.666 0 +v 43.0293 48.9782 0 +v 43.2949 49.7445 0 +v 43.6251 50.5 0 +v 43.9127 49.9244 0 +v 42.627 47.3722 0 +v 47.8508 48.8132 0 +v 47.0335 49.689 0 +v 48.0802 46.8036 0 +v 48.8394 47.621 0 +v 44.8751 50.2337 0 +v 44.4433 49.0355 0 +v 48.3151 49.5249 0 +v 46.1251 49.9997 0 +v 47.7434 47.3844 0 +v 48.7664 50.028 0 +v 47.654 49.4488 0 +v 47.3751 50.2633 0 +v 41.0761 46.2916 0 +v 41.2988 47.1606 0 +v 40.9337 48.5194 0 +v 41.3448 47.9014 0 +v 41.8053 48.6534 0 +v 40.3762 47.7029 0 +v 40.3841 46.8276 0 +v 41.1251 50.1789 0 +v 42.4268 48.6767 0 +v 40.2415 48.3934 0 +v 42.6994 49.9474 0 +v 38.0002 50.5 0 +v 40.5104 49.374 0 +v 42.0724 49.8959 0 +v 39.7038 47.5841 0 +v 41.7501 50.5 0 +v 41.4715 49.5676 0 +v 41.8796 45.8279 0 +v 46.9939 45.655 0 +v 47.8209 45.4443 0 +v 48.6316 45.994 0 +v 47.9519 46.1237 0 +v 49.4479 45.4429 0 +v 50.1581 45.1585 0 +v 48.6931 46.6284 0 +v 47.3451 46.1506 0 +v 49.6322 46.1007 0 +v 49.2106 44.7987 0 +v 55.9945 45.7527 0 +v 58.5229 47.1147 0 +v 59.6868 46.6273 0 +v 59.4628 45.8653 0 +v 58.8565 45.9367 0 +v 58.5941 48.1583 0 +v 60.2922 48.7227 0 +v 59.2213 49.108 0 +v 59.5122 48.2327 0 +v 58.7164 48.7595 0 +v 59.9131 47.4641 0 +v 53.4954 46.2906 0 +v 53.7448 47.1306 0 +v 52.4929 46.595 0 +v 51.9492 46.178 0 +v 52.239 45.6027 0 +v 35.3991 46.9787 0 +v 35.2785 46.3998 0 +v 36.1123 46.7302 0 +v 36.7959 47.6901 0 +v 34.5703 47.6557 0 +v 37.1907 47.1139 0 +v 34.7056 46.9756 0 +v 35.1607 47.5327 0 +v 61.8919 24.8313 0 +v 65.5171 28.9574 0 +v 64.8547 28.7243 0 +v 62.6627 31.058 0 +v 63.442 31.2915 0 +v 65.0963 30.7216 0 +v 67.4113 30.6946 0 +v 65.8103 32.1641 0 +v 66.3647 32.6498 0 +v 66.7813 31.6151 0 +v 66.8634 27.6546 0 +v 67.148 26.9917 0 +v 67.1627 29.1701 0 +v 67.2492 28.3657 0 +v 68.4966 28.9066 0 +v 66.3895 28.6801 0 +v 67.7886 28.8305 0 +v 68.037 29.851 0 +v 66.3712 29.5641 0 +v 65.8233 28.41 0 +v 67.0663 29.9683 0 +v 66.4514 30.7056 0 +v 65.7817 29.4894 0 +v 66.9353 31.0446 0 +v 67.6734 31.5499 0 +v 66.2077 31.3086 0 +v 65.8727 30.6082 0 +v 69.6784 31.0906 0 +v 67.3024 32.2901 0 +v 68.7327 31.568 0 +v 68.1982 31.8378 0 +v 68.2141 30.9164 0 +v 72.9668 20.2254 0 +v 75.8099 17.5081 0 +v 69.0632 21.265 0 +v 71.7421 22.3596 0 +v 73.2234 26.2278 0 +v 70.3426 22.2938 0 +v 71.0506 22.151 0 +v 71.5687 21.684 0 +v 72.644 21.3153 0 +v 71.2086 22.8778 0 +v 70.2194 24.0744 0 +v 69.5301 23.6516 0 +v 71.2227 5.10348 0 +v 71.0722 3.66443 0 +v 74.2245 6.23875 0 +v 73.591 5.86543 0 +v 76.1421 6.19203 0 +v 75.0976 7.45669 0 +v 75.5052 6.7297 0 +v 75.3948 5.95281 0 +v 76.2654 6.98413 0 +v 75.6604 3.81928 0 +v 78.7575 7.91584 0 +v 76.0669 7.58525 0 +v 75.3296 4.86139 0 +v 88 0.5 0 +v 74.2641 10.3327 0 +v 73.6346 10.3111 0 +v 75.9872 9.24742 0 +v 74.9069 14.3071 0 +v 76.5983 15.5365 0 +v 75.6283 15.0929 0 +v 72.4224 17.1474 0 +v 69.948 1.88086 0 +v 72.2315 1.78911 0 +v 71.7916 3.91744 0 +v 69.1894 35.7391 0 +v 64.0126 43.3886 0 +v 66.1647 37.2158 0 +v 67.0955 36.366 0 +v 67.5634 37.2526 0 +v 68.1037 37.7947 0 +v 70.0609 38.5475 0 +v 68.8661 38.7333 0 +v 68.3283 38.3911 0 +v 68.0844 39.3681 0 +v 66.9224 37.5375 0 +v 66.8643 38.4294 0 +v 67.1522 39.3174 0 +v 66.7403 39.856 0 +v 67.6547 40.2798 0 +v 67.5991 39.6965 0 +v 63.5185 44.0484 0 +v 63.6281 42.6594 0 +v 63.232 33.0418 0 +v 63.0274 28.4853 0 +v 46.5746 47.1348 0 +v 49.8889 47.5964 0 +v 50.0228 48.3277 0 +v 49.3189 48.5027 0 +v 41.0625 49.1154 0 +v 59.1422 46.8553 0 +v 59.2501 50.5 0 +v 59.8201 49.0914 0 +v 65.5001 50.5 0 +v 59.8751 49.9794 0 +v 59.2003 49.8047 0 +v 58.6251 50.1954 0 +v 58.3739 49.5246 0 +v 66.0815 42.1817 0 +v 61.5785 46.6833 0 +v 66.9138 41.2669 0 +v 67.6118 41.0192 0 +v 66.8099 42.0083 0 +v 69.6251 40.7651 0 +v 67.7322 43.4555 0 +v 68.7 41.5382 0 +v 67.4328 42.6288 0 +v 65.0926 43.9174 0 +v 60.745 49.5705 0 +v 65.4496 42.1267 0 +v 60.6277 46.8218 0 +v 61.6261 45.8518 0 +v 62.2509 46.3047 0 +v 60.9776 45.5863 0 +v 63.7572 47.7883 0 +v 62.5089 47.5493 0 +v 62.1816 46.9681 0 +v 63.1482 46.8065 0 +v 61.4331 47.7723 0 +v 68.2183 42.26 0 +v 66.8894 43.2932 0 +v 66.5819 42.6674 0 +v 65.4116 43.3497 0 +v 64.708 43.2207 0 +v 61.7501 50.5 0 +v 60.2267 46.3888 0 +v 61.0327 46.2692 0 +v 64.1646 46.0126 0 +v 63.1706 47.4724 0 +v 62.9619 48.5625 0 +v 61.2751 48.7426 0 +v 60.6776 47.596 0 +v 60.2034 48.063 0 +v 70.4038 43.1967 0 +v 66.2927 44.474 0 +v 61.1251 50.1677 0 +v 61.8675 49.5254 0 +v 63.4934 46.2009 0 +v 63.5604 45.3608 0 +v 64.0578 46.9227 0 +v 62.0891 48.3771 0 +v 69.398 42.5256 0 +v 66.3886 43.7813 0 +v 67.2132 44.2483 0 +v 65.7614 44.0475 0 +v 65.2716 45.202 0 +v 61.2979 49.3409 0 +v 62.3751 50.0809 0 +v 62.6542 49.3162 0 +v 64.2501 50.5 0 +v 63.4524 49.2025 0 +v 63.6887 48.5135 0 +v 64.4821 48.2226 0 +v 65.3234 48.3022 0 +v 63.133 49.8187 0 +v 63.8964 49.8235 0 +v 62.91 45.1659 0 +v 63.4098 44.7087 0 +v 68.8592 42.166 0 +v 69.5893 41.6553 0 +v 69.2304 45.0026 0 +v 65.4645 46.6265 0 +v 64.3466 49.0806 0 +v 72.0055 41.3066 0 +v 70.2972 42.2671 0 +v 68.3068 44.398 0 +v 64.9815 47.4296 0 +v 64.7114 46.5381 0 +v 64.8746 45.821 0 +v 64.3691 45.3589 0 +v 67.1658 46.0455 0 +v 71.6021 42.5885 0 +v 67.7956 44.0633 0 +v 64.339 47.5053 0 +v 66.944 45.1405 0 +v 70.89 42.6701 0 +v 71.1087 41.7109 0 +v 67.6842 44.8771 0 +v 66.1382 45.8177 0 +v 71.7468 41.9296 0 +v 73.4495 42.6489 0 +v 72.5314 42.4472 0 +v 70.3563 41.4833 0 +v 71.0796 40.4497 0 +v 70.8874 41.0851 0 +v 66.7082 45.678 0 +v 65.5068 45.9768 0 +v 66.2659 45.1516 0 +v 73.2358 41.4309 0 +v 72.4473 45.0212 0 +v 73.0924 42.0838 0 +v 72.2505 43.7264 0 +v 71.3044 43.5406 0 +v 72.145 43.0328 0 +v 72.9234 43.2693 0 +v 74.8578 44.3763 0 +v 73.104 44.259 0 +v 71.61 44.4861 0 +v 72.2631 44.3868 0 +v 70.8295 46.6301 0 +v 71.4589 45.6452 0 +v 71.8066 45.1011 0 +v 36.1192 47.4486 0 +v 34.7944 48.8343 0 +v 33.8954 47.9492 0 +v 34.11 48.6303 0 +v 65.4285 32.6604 0 +v 65.3769 31.7111 0 +v 69.3019 29.8826 0 +v 69.9911 32.8854 0 +v 72.115 20.3347 0 +v 72.3461 19.248 0 +v 72.5959 20.7083 0 +v 72.0028 19.7429 0 +v 74.2791 17.4251 0 +v 71.8744 26.7923 0 +v 73.8861 21.0905 0 +v 70.5608 23.5698 0 +v 70.1579 25.1087 0 +v 74.101 4.57907 0 +v 73.7709 5.19247 0 +v 76.2032 2.50996 0 +v 76.9706 7.01086 0 +v 75.311 9.31558 0 +v 76.4258 8.49178 0 +v 77.6983 8.44527 0 +v 77.0536 8.23612 0 +v 77.6164 7.59931 0 +v 77.0956 9.38577 0 +v 77.342 6.41087 0 +v 76.5708 9.08108 0 +v 79.9362 7.8018 0 +v 77.6067 15.0958 0 +v 76.2882 3.92477 0 +v 76.8165 5.8936 0 +v 77.0377 5.16806 0 +v 78.1261 7.97693 0 +v 76.1059 10.5992 0 +v 75.7003 9.96249 0 +v 76.4933 9.90483 0 +v 75.4034 10.5992 0 +v 75.7547 11.3304 0 +v 78.1702 11.2955 0 +v 76.9646 11.4617 0 +v 77.4718 10.4313 0 +v 76.3828 11.1822 0 +v 76.3514 11.993 0 +v 76.7901 10.5256 0 +v 77.7967 13.0417 0 +v 76.8777 12.7878 0 +v 77.5441 12.1656 0 +v 76.9857 14.1873 0 +v 76.3217 13.5023 0 +v 77.5893 11.5378 0 +v 77.1844 13.4681 0 +v 78.0811 14.1028 0 +v 75.6605 16.3049 0 +v 72.1717 3.4155 0 +v 68.577 36.3091 0 +v 68.147 35.5544 0 +v 68.2002 34.0075 0 +v 67.9475 34.7732 0 +v 67.1729 34.0931 0 +v 69.0032 34.6971 0 +v 66.6417 34.4019 0 +v 49.3572 47.3127 0 +v 50.1775 46.7904 0 +v 51.0068 46.8559 0 +v 51.046 46.1708 0 +v 50.4431 47.3402 0 +v 37.7354 48.9505 0 +v 39.883 49.9313 0 +v 68.7139 40.2219 0 +v 68.8165 43.4409 0 +v 66.4651 46.775 0 +v 65.9264 47.5626 0 +v 65.923 46.9823 0 +v 65.0512 48.9627 0 +v 67.2201 47.8693 0 +v 66.6322 47.4673 0 +v 67.4169 46.9508 0 +v 66.3766 48.5453 0 +v 68.5183 46.1579 0 +v 68.2091 47.6009 0 +v 65.9098 48.1647 0 +v 67.8213 46.3512 0 +v 67.7666 45.6129 0 +v 68.3418 46.8747 0 +v 69.5905 46.8021 0 +v 68.9549 46.6456 0 +v 69.4784 45.8888 0 +v 68.5214 45.3627 0 +v 70.3934 45.1549 0 +v 71.0947 44.9897 0 +v 70.5331 44.1765 0 +v 70.1481 46.2701 0 +v 70.7776 45.9033 0 +v 69.7794 45.3268 0 +v 69.8624 44.5591 0 +v 69.1336 44.1926 0 +v 69.6434 43.5348 0 +v 71.1328 44.1182 0 +v 73.8949 45.6044 0 +v 34.976 48.1891 0 +v 68.6588 30.2951 0 +v 69.2779 30.5527 0 +v 70.2434 30.2519 0 +v 68.8241 30.9631 0 +v 68.6767 29.5783 0 +v 69.562 32.0355 0 +v 71.175 31.7545 0 +v 69.0086 32.8482 0 +v 70.4112 32.1401 0 +v 68.7538 32.2333 0 +v 69.4655 33.7739 0 +v 68.2953 33.2122 0 +v 68.793 33.6751 0 +v 67.661 32.9453 0 +v 70.4742 31.3155 0 +v 71.4424 30.5486 0 +v 71.0945 31.104 0 +v 72.0503 31.316 0 +v 71.4275 33.204 0 +v 69.4877 33.1874 0 +v 73.8137 29.2949 0 +v 70.7577 32.8265 0 +v 71.4049 32.4612 0 +v 70.6628 33.7778 0 +v 73.3009 32.7752 0 +v 72.322 32.805 0 +v 72.7444 30.1418 0 +v 72.0166 34.7857 0 +v 70.0632 34.0665 0 +v 72.0702 32.0817 0 +v 73.1122 31.6715 0 +v 72.1716 30.5955 0 +v 72.8912 30.9155 0 +v 73.7768 30.3467 0 +v 71.1909 34.4817 0 +v 72.2318 33.805 0 +v 72.7963 32.2935 0 +v 71.0891 36.0317 0 +v 71.7579 34.215 0 +v 72.8286 33.3548 0 +v 74.6259 34.3373 0 +v 73.2576 34.544 0 +v 72.8591 34.0158 0 +v 73.7734 33.6425 0 +v 70.9111 35.2416 0 +v 71.6596 35.4881 0 +v 70.148 35.8286 0 +v 72.8269 35.6396 0 +v 69.5915 36.8175 0 +v 72.2701 35.3565 0 +v 72.1501 36.2818 0 +v 68.9835 36.7644 0 +v 71.2847 33.8102 0 +v 75.7622 31.9967 0 +v 69.726 35.1696 0 +v 69.6309 36.1887 0 +v 70.4618 36.6562 0 +v 74.2187 37.784 0 +v 74.6074 32.6258 0 +v 69.6247 34.5355 0 +v 70.1839 37.5855 0 +v 73.3238 36.8409 0 +v 73.9844 32.9652 0 +v 73.905 32.0778 0 +v 74.6694 33.4809 0 +v 69.3591 37.9689 0 +v 68.7507 37.7429 0 +v 71.5306 37.482 0 +v 72.8444 36.3358 0 +v 72.4406 37.199 0 +v 73.8483 31.2117 0 +v 74.816 31.6342 0 +v 75.553 32.9871 0 +v 70.8374 37.2747 0 +v 71.3759 36.7368 0 +v 70.9359 38.208 0 +v 73.2148 37.8405 0 +v 70.8708 39.3377 0 +v 72.1703 38.6126 0 +v 70.6459 38.758 0 +v 71.6314 38.1712 0 +v 72.2999 37.9047 0 +v 71.4811 38.9044 0 +v 72.3299 39.9497 0 +v 71.5806 39.6909 0 +v 72.1368 39.2947 0 +v 73.2705 39.0084 0 +v 71.5682 19.0612 0 +v 71.0278 18.4955 0 +v 70.8039 19.2504 0 +v 70.3236 18.7695 0 +v 72.5252 18.4981 0 +v 73.7489 18.5284 0 +v 73.142 18.3102 0 +v 73.5459 17.6561 0 +v 73.7061 16.8853 0 +v 73.4733 16.2986 0 +v 74.413 16.2652 0 +v 71.1517 27.0946 0 +v 69.4687 25.2276 0 +v 69.8841 24.5734 0 +v 71.0748 24.6442 0 +v 70.3995 25.955 0 +v 71.2162 26.234 0 +v 70.8638 25.3648 0 +v 72.1488 25.3499 0 +v 71.504 25.1611 0 +v 72.109 24.2221 0 +v 72.0958 23.2573 0 +v 71.9329 26.0561 0 +v 72.6133 25.8779 0 +v 73.3719 24.7422 0 +v 73.247 25.4799 0 +v 75.2968 25.4477 0 +v 74.2785 25.8867 0 +v 71.7514 23.7445 0 +v 72.8793 22.4301 0 +v 73.0516 23.7266 0 +v 72.2942 22.6606 0 +v 72.4544 23.7349 0 +v 74.6474 5.01588 0 +v 74.8497 4.13547 0 +v 73.8671 3.33081 0 +v 74.9013 3.07028 0 +v 74.2117 3.9123 0 +v 73.3091 4.10506 0 +v 72.9245 4.66759 0 +v 72.657 3.01438 0 +v 70.5105 3.29385 0 +v 77.0128 3.65488 0 +v 76.1189 4.5384 0 +v 76.3751 14.7422 0 +v 76.3046 5.36277 0 +v 78.9829 4.32221 0 +v 75.7631 14.4095 0 +v 76.8637 4.41368 0 +v 76.9664 15.0045 0 +v 79.112 1.70149 0 +v 75.9412 15.691 0 +v 71.4199 2.10748 0 +v 70.0313 0.5 0 +v 70.4219 1.21651 0 +v 69.6407 1.13843 0 +v 71.3041 1.23274 0 +v 70.7873 1.81171 0 +v 71.5938 0.5 0 +v 68.7326 35.283 0 +v 37.5204 48.1304 0 +v 38.5352 48.2144 0 +v 39.0007 47.6789 0 +v 38.4383 49.8796 0 +v 39.6343 49.1299 0 +v 38.679 49.1593 0 +v 39.0303 48.6224 0 +v 39.2502 50.5 0 +v 36.7502 50.5 0 +v 37.6889 49.7558 0 +v 37.3752 50.5 0 +v 36.5523 49.2862 0 +v 37.2021 49.3237 0 +v 36.7958 48.5067 0 +v 35.9845 48.6811 0 +v 36.2721 48.0889 0 +v 35.6483 49.5655 0 +v 36.2641 49.9562 0 +v 34.9265 49.5442 0 +v 35.417 48.9714 0 +v 33.6252 50.061 0 +v 33.7848 49.1346 0 +v 68.1687 39.965 0 +v 68.8249 39.4812 0 +v 69.5421 39.1456 0 +v 68.9376 40.8825 0 +v 68.2536 40.746 0 +v 68.268 42.9768 0 +v 66.01 46.3959 0 +v 71.5273 46.3824 0 +v 65.6284 49.3837 0 +v 68.0001 50.5 0 +v 69.358 47.9939 0 +v 73.2704 45.0663 0 +v 73.9686 44.5016 0 +v 72.7925 46.2524 0 +v 73.8624 43.5323 0 +v 72.8295 45.578 0 +v 72.1573 45.8793 0 +v 75.5001 50.5 0 +v 74.5052 45.0914 0 +v 74.7974 46.2012 0 +v 76.9497 47.5358 0 +v 75.6115 45.1925 0 +v 75.9138 46.8588 0 +v 73.3061 43.7108 0 +v 76.0357 41.9781 0 +v 74.3471 43.9697 0 +v 74.9731 42.7888 0 +v 75.0336 45.4119 0 +v 79.2932 48.3004 0 +v 74.2005 42.836 0 +v 74.0301 41.9193 0 +v 74.6201 43.3581 0 +v 75.7108 43.6403 0 +v 78.0001 50.5 0 +v 77.102 49.1501 0 +v 78.27 46.3821 0 +v 74.6372 48.9336 0 +v 78.0911 48.8438 0 +v 69.7378 47.4494 0 +v 74.5166 40.2378 0 +v 74.041 41.0113 0 +v 73.2219 40.4218 0 +v 75.1889 41.1841 0 +v 73.876 40.3768 0 +v 73.5025 39.7239 0 +v 72.8585 39.5373 0 +v 74.5047 39.0036 0 +v 73.8883 39.2034 0 +v 73.7919 38.4328 0 +v 74.6517 40.8538 0 +v 70.1795 29.03 0 +v 67.6506 33.6185 0 +v 73.3478 29.8051 0 +v 72.265 28.5737 0 +v 72.6737 29.3061 0 +v 71.7444 27.807 0 +v 71.861 29.7321 0 +v 73.0086 27.5088 0 +v 70.9911 29.8016 0 +v 72.4334 27.8993 0 +v 70.3796 29.6321 0 +v 71.3573 28.9068 0 +v 71.9478 29.1127 0 +v 71.2792 28.2612 0 +v 73.9246 34.3273 0 +v 74.2557 35.7195 0 +v 73.5867 36.1115 0 +v 73.8041 35.0914 0 +v 74.413 36.7549 0 +v 73.4143 35.5415 0 +v 75.1345 32.2189 0 +v 75.6643 29.8864 0 +v 80.5604 21.3051 0 +v 73.6928 37.3869 0 +v 70.228 40.034 0 +v 69.4493 39.9534 0 +v 70.3094 40.7153 0 +v 70.1902 39.3542 0 +v 72.8526 38.443 0 +v 73.2797 19.3409 0 +v 74.1274 19.2886 0 +v 75.5493 18.947 0 +v 73.7466 20.0042 0 +v 74.1415 20.5056 0 +v 75.6541 21.3828 0 +v 74.7868 21.1356 0 +v 73.4912 20.5891 0 +v 74.8902 19.3336 0 +v 74.744 18.3292 0 +v 75.8153 20.1557 0 +v 75.2052 19.9107 0 +v 74.7315 22.9751 0 +v 75.3736 20.7218 0 +v 74.2899 22.0412 0 +v 75.0471 21.8676 0 +v 76.3823 21.6658 0 +v 76.9861 25.8963 0 +v 78.3454 20.5213 0 +v 75.5234 22.9309 0 +v 75.8868 29.0895 0 +v 82.8126 43.0471 0 +v 75.1785 23.8672 0 +v 77.993 16.5116 0 +v 78.1344 10.2765 0 +v 76.4675 26.8537 0 +v 81.5874 21.4155 0 +v 75.8373 26.5013 0 +v 76.4157 20.5739 0 +v 78.1475 18.9843 0 +v 75.3944 24.6457 0 +v 74.3744 24.5094 0 +v 79.6634 20.7928 0 +v 82.0187 7.74456 0 +v 79.575 21.6151 0 +v 74.3899 23.7043 0 +v 73.7321 22.9516 0 +v 77.7854 20.7156 0 +v 78.3257 33.0554 0 +v 81.685 41.3171 0 +v 84.5612 44.2351 0 +v 73.5844 22.235 0 +v 74.2395 22.6364 0 +v 73.7193 23.6266 0 +v 73.0779 23.0634 0 +v 79.7225 39.6339 0 +v 79.0615 16.3054 0 +v 76.9227 21.1016 0 +v 80.4506 39.6524 0 +v 76.5598 41.5662 0 +v 77.8243 9.10523 0 +v 74.9967 26.67 0 +v 75.9655 41.0481 0 +v 77.7213 30.0312 0 +v 79.4582 19.2454 0 +v 76.5423 22.8628 0 +v 84.5546 40.4858 0 +v 82.0162 2.21505 0 +v 75.7887 22.1737 0 +v 78.5321 21.9839 0 +v 74.9464 28.5487 0 +v 76.7443 40.9256 0 +v 75.8902 25.113 0 +v 75.6134 28.3087 0 +v 75.6809 36.0325 0 +v 78.3102 19.9296 0 +v 100.5 25.5 0 +v 74.9852 27.6097 0 +v 81.1317 48.6762 0 +v 74.914 38.2643 0 +v 78.4036 40.383 0 +v 77.5818 21.4178 0 +v 75.2484 26.0838 0 +v 77.9776 5.59657 0 +v 78.9947 40.1628 0 +v 77.2978 43.0569 0 +v 78.7527 19.3668 0 +v 78.0969 41.9251 0 +v 79.7319 6.53609 0 +v 77.8368 15.9222 0 +v 79.181 40.8399 0 +v 71.4368 49.9008 0 +v 77.4364 39.5128 0 +v 66.7501 50.5 0 +v 81.6966 48.2528 0 +v 80.1015 39.0586 0 +v 80.5406 37.3085 0 +v 76.238 40.2431 0 +v 73.9724 28.0382 0 +v 73.1605 28.4391 0 +v 75.4183 27.1451 0 +v 75.4864 40.5972 0 +v 76.7632 39.5548 0 +v 81.9193 12.2751 0 +v 80.1591 14.4832 0 +v 81.558 47.592 0 +v 75.3782 39.9481 0 +v 77.6878 9.76311 0 +v 77.4218 41.539 0 +v 74.1852 27.13 0 +v 74.58 28.0633 0 +v 73.77 28.651 0 +v 73.2413 29.0546 0 +v 81.0347 39.2173 0 +v 75.1415 30.3961 0 +v 80.7752 19.0188 0 +v 76.5547 19.8555 0 +v 81.7514 1.64878 0 +v 77.5944 19.2911 0 +v 78.7886 10.4638 0 +v 85.0217 43.7483 0 +v 78.9426 39.1854 0 +v 76.6512 23.878 0 +v 76.175 28.5503 0 +v 76.9259 16.2974 0 +v 84.0728 42.9726 0 +v 76.9485 17.0582 0 +v 76.2956 16.6968 0 +v 73.6497 27.4835 0 +v 74.3751 26.5191 0 +v 81.1172 39.9376 0 +v 77.4463 40.8312 0 +v 78.944 17.9425 0 +v 80.7456 16.157 0 +v 81.6161 10.9042 0 +v 79.1656 9.66788 0 +v 81.2721 12.6427 0 +v 80.5357 12.7514 0 +v 80.7993 9.66337 0 +v 80.8088 14.8094 0 +v 82.0272 9.8714 0 +v 79.6195 13.6981 0 +v 74.0648 29.8302 0 +v 82.2804 47.9137 0 +v 78.3268 18.0574 0 +v 82.4985 15.7621 0 +v 79.9846 18.364 0 +v 76.733 38.7596 0 +v 75.3608 38.9816 0 +v 74.0143 47.5109 0 +v 80.2241 13.5905 0 +v 77.0159 40.1801 0 +v 77.7885 6.93368 0 +v 75.4064 31.5093 0 +v 78.38 15.6454 0 +v 77.8588 18.4477 0 +v 79.4968 9.15473 0 +v 83.6268 41.2327 0 +v 78.2328 39.5484 0 +v 82.1645 39.4527 0 +v 70.7724 49.7756 0 +v 81.6113 13.6283 0 +v 79.3762 15.2275 0 +v 78.5866 49.3109 0 +v 81.2736 10.335 0 +v 79.3318 17.4488 0 +v 76.7654 22.2238 0 +v 81.5248 9.10885 0 +v 83.1298 41.6328 0 +v 82.2393 42.4134 0 +v 74.7878 39.618 0 +v 78.9787 18.5694 0 +v 80.3899 10.3764 0 +v 80.0802 11.8878 0 +v 79.9384 16.6264 0 +v 83.3355 18.1935 0 +v 76.3294 38.14 0 +v 76.7843 42.1938 0 +v 83.5496 3.5927 0 +v 79.2391 20.083 0 +v 74.4463 30.7268 0 +v 82.3419 18.0047 0 +v 79.9275 15.0235 0 +v 81.284 7.4706 0 +v 82.4701 6.77293 0 +v 82.2263 9.19351 0 +v 76.106 39.4036 0 +v 79.9158 38.3953 0 +v 76.0998 25.8288 0 +v 83.0288 42.2629 0 +v 78.356 13.3824 0 +v 81.8633 14.6627 0 +v 82.1677 8.46256 0 +v 83.4617 43.3305 0 +v 78.4268 12.3856 0 +v 75.9133 24.0827 0 +v 80.9047 14.0888 0 +v 82.255 11.0859 0 +v 80.8079 16.9668 0 +v 82.8162 8.80482 0 +v 78.0811 11.8917 0 +v 76.5128 26.2591 0 +v 79.1016 12.4605 0 +v 79.2348 11.3992 0 +v 78.5614 17.1245 0 +v 78.5234 24.6043 0 +v 82.6914 17.0555 0 +v 80.1346 17.4059 0 +v 79.9825 9.52497 0 +v 79.3639 16.8376 0 +v 81.8374 15.547 0 +v 77.6388 5.09461 0 +v 79.4578 5.9684 0 +v 77.6081 26.8524 0 +v 78.943 21.4869 0 +v 81.3584 16.7294 0 +v 77.5808 28.9915 0 +v 81.1907 17.4281 0 +v 77.6112 23.2616 0 +v 81.5634 20.0877 0 +v 75.0344 15.6933 0 +v 74.3977 15.6252 0 +v 75.0165 16.9226 0 +v 75.6316 16.9193 0 +v 75.0815 17.6649 0 +v 75.5798 18.2094 0 +v 76.4302 18.614 0 +v 81.613 40.4666 0 +v 76.289 17.9663 0 +v 75.8312 19.5186 0 +v 79.1554 14.1002 0 +v 77.1714 20.5004 0 +v 82.4927 41.597 0 +v 70.4808 24.6089 0 +v 72.6225 24.7686 0 +v 75.675 5.38842 0 +v 78.3486 9.52536 0 +v 78.5158 8.71114 0 +v 79.4137 8.54965 0 +v 76.9706 19.1868 0 +v 80.6476 8.85527 0 +v 80.0894 8.46528 0 +v 81.75 0.5 0 +v 73.9375 0.5 0 +v 75.5541 1.82158 0 +v 77.9318 4.56461 0 +v 75.5426 2.76768 0 +v 73.2207 1.72593 0 +v 76.0827 3.22716 0 +v 74.9418 2.32536 0 +v 78.625 0.5 0 +v 77.7435 3.83583 0 +v 73.975 2.36909 0 +v 73.3258 2.71162 0 +v 77.7407 2.28137 0 +v 77.5482 3.05895 0 +v 76.8133 2.93724 0 +v 78.892 2.97912 0 +v 78.2367 3.29884 0 +v 78.8179 3.65875 0 +v 80.6877 3.54607 0 +v 79.7633 3.77593 0 +v 74.6218 1.31249 0 +v 74.3068 2.89322 0 +v 77.8438 0.5 0 +v 79.9781 2.66622 0 +v 80.745 5.7504 0 +v 72.8333 2.26567 0 +v 72.6897 1.1876 0 +v 71.993 1.09061 0 +v 73.1563 0.5 0 +v 73.5469 1.09413 0 +v 74.4394 1.9271 0 +v 78.2072 1.36881 0 +v 76.2813 0.5 0 +v 77.0625 0.5 0 +v 75.2364 1.09594 0 +v 74.7188 0.5 0 +v 80.1285 3.27099 0 +v 79.9714 4.90375 0 +v 79.6099 4.38735 0 +v 80.3711 4.24686 0 +v 82.1134 4.6119 0 +v 81.2826 4.23668 0 +v 84.875 0.5 0 +v 81.3818 5.12425 0 +v 80.6953 4.89424 0 +v 82.1013 3.53139 0 +v 83.1278 6.83869 0 +v 81.856 4.07445 0 +v 81.3945 3.53873 0 +v 81.0307 2.54339 0 +v 81.9268 6.3155 0 +v 81.4384 5.81868 0 +v 82.2686 5.49091 0 +v 80.9975 6.74066 0 +v 84.5589 4.63315 0 +v 82.7103 6.15711 0 +v 83.4585 5.18155 0 +v 82.9168 5.54073 0 +v 78.4584 6.77901 0 +v 77.5579 14.4627 0 +v 34.8752 50.2251 0 +v 64.8751 49.8626 0 +v 70.9005 48.1825 0 +v 77.1937 48.3271 0 +v 76.2907 48.1723 0 +v 74.457 46.9515 0 +v 76.8577 46.3756 0 +v 78.8847 45.5317 0 +v 78.7031 47.0059 0 +v 77.7604 45.8191 0 +v 77.5631 46.5467 0 +v 78.0299 47.1025 0 +v 70.1431 47.9752 0 +v 78.486 47.8866 0 +v 70.3776 48.6058 0 +v 78.8218 46.1336 0 +v 70.2 49.2548 0 +v 70.2399 46.9311 0 +v 75.456 48.5499 0 +v 77.6061 47.609 0 +v 75.635 44.4147 0 +v 77.2525 44.1822 0 +v 76.4153 44.1002 0 +v 76.6559 42.9622 0 +v 76.7634 44.8614 0 +v 77.6227 44.9646 0 +v 76.2334 45.1871 0 +v 76.8864 43.6054 0 +v 78.5038 42.663 0 +v 77.8493 43.3988 0 +v 77.1401 45.3535 0 +v 78.228 45.3054 0 +v 78.4074 44.2789 0 +v 77.5208 42.4476 0 +v 77.8163 44.3943 0 +v 78.6868 43.4847 0 +v 79.9953 44.3913 0 +v 79.2168 44.1174 0 +v 80.1055 42.8346 0 +v 79.3784 44.9015 0 +v 79.837 43.5978 0 +v 81.0612 46.3083 0 +v 79.3165 42.9859 0 +v 81.363 43.7058 0 +v 79.9853 45.8854 0 +v 79.4392 41.493 0 +v 80.5852 43.861 0 +v 79.5003 45.5054 0 +v 79.5856 42.2565 0 +v 80.841 43.1162 0 +v 81.2184 45.0078 0 +v 78.8712 41.9977 0 +v 80.884 41.6118 0 +v 80.6783 44.5579 0 +v 80.5067 45.3129 0 +v 77.7955 40.215 0 +v 77.3525 19.8754 0 +v 80.709 42.3596 0 +v 80.1451 41.7535 0 +v 81.0725 45.6499 0 +v 82.0185 46.8262 0 +v 82.3821 46.0016 0 +v 78.4988 41.0066 0 +v 81.6329 42.941 0 +v 81.4813 42.1459 0 +v 80.26 40.3553 0 +v 82.9742 43.8443 0 +v 67.5871 49.1915 0 +v 80.3971 41.0704 0 +v 82.1866 43.5664 0 +v 77.8273 27.9718 0 +v 77.4362 22.1342 0 +v 77.3828 18.0671 0 +v 82.2463 44.6523 0 +v 81.8583 44.1291 0 +v 73.0001 50.5 0 +v 83.892 4.27033 0 +v 90.5 50.5 0 +v 76.7501 50.5 0 +v 76.752 28.3483 0 +v 78.8384 20.8505 0 +v 80.2488 19.8997 0 +v 74.5338 49.7391 0 +v 75.0881 48.0788 0 +v 80.7778 47.4635 0 +v 81.1184 46.9347 0 +v 80.2421 46.7445 0 +v 81.0891 40.9377 0 +v 83.8913 44.2218 0 +v 84.5881 46.433 0 +v 84.6118 44.9033 0 +v 71.4877 47.3778 0 +v 79.2321 46.5784 0 +v 79.9897 47.4915 0 +v 80.4286 48.7406 0 +v 79.331 47.2672 0 +v 80.0143 48.1845 0 +v 70.6926 47.4142 0 +v 75.0916 43.7849 0 +v 75.8215 42.7991 0 +v 75.608 46.0537 0 +v 72.2206 46.9085 0 +v 76.2151 46.2837 0 +v 74.8751 50.5 0 +v 75.1805 46.8273 0 +v 74.0684 46.3228 0 +v 75.5122 47.6576 0 +v 73.3811 47.1821 0 +v 73.4411 46.0942 0 +v 71.2963 49.206 0 +v 76.6003 45.7417 0 +v 77.9017 48.2056 0 +v 78.6697 48.5225 0 +v 79.2501 50.5 0 +v 79.1882 48.9916 0 +v 79.8604 49.1233 0 +v 80.6042 49.6146 0 +v 76.1966 49.0758 0 +v 76.2518 47.4726 0 +v 74.4916 48.0412 0 +v 72.8416 46.8725 0 +v 72.684 47.772 0 +v 71.4839 47.9916 0 +v 79.3909 49.7388 0 +v 79.8751 50.222 0 +v 78.6251 49.9908 0 +v 77.8359 49.6604 0 +v 75.3181 49.5286 0 +v 81.6833 45.9896 0 +v 82.0437 45.3542 0 +v 85.5 50.5 0 +v 83.0857 47.1372 0 +v 81.7879 2.79698 0 +v 83.4671 45.3919 0 +v 82.7548 45.3945 0 +v 83.1082 44.6539 0 +v 76.5979 49.7395 0 +v 77.2365 50.0072 0 +v 76.1251 50.2296 0 +v 83.8284 46.3103 0 +v 83 50.5 0 +v 84.2537 45.669 0 +v 83.1133 46.026 0 +v 76.537 24.8991 0 +v 76.7077 29.7482 0 +v 83.9333 44.899 0 +v 75.9307 49.6384 0 +v 73.5591 48.0994 0 +v 74.2501 50.5 0 +v 72.6688 49.1457 0 +v 73.6251 49.8336 0 +v 82.6587 46.616 0 +v 72.9247 48.4616 0 +v 73.6327 48.965 0 +v 72.101 48.5433 0 +v 72.9228 49.8012 0 +v 71.7501 50.5 0 +v 72.0948 49.7451 0 +v 72.3751 50.5 0 +v 81.75 50.5 0 +v 74.1228 48.5595 0 +v 71.9199 49.1433 0 +v 81.125 50.1247 0 +v 81.7939 48.9209 0 +v 81.2943 49.431 0 +v 72.6646 40.9341 0 +v 75.2153 42.0045 0 +v 74.6023 42.2448 0 +v 70.3285 28.3281 0 +v 75.6222 30.9457 0 +v 74.6558 29.851 0 +v 75.0775 29.2615 0 +v 74.4386 29.0106 0 +v 77.1236 35.8133 0 +v 77.2696 15.6985 0 +v 74.1711 18.0522 0 +v 74.5934 25.2166 0 +v 73.8931 25.2099 0 +v 73.3289 21.5556 0 +v 73.7882 24.2599 0 +v 77.4716 38.7248 0 +v 80.7277 48.1361 0 +v 81.2965 8.25464 0 +v 75.9941 38.7322 0 +v 79.1708 13.2789 0 +v 76.8659 17.6917 0 +v 77.7469 17.3125 0 +v 79.5871 10.382 0 +v 80.8381 11.1051 0 +v 76.0658 23.3892 0 +v 78.3647 14.8481 0 +v 81.8641 7.03702 0 +v 80.2394 15.5218 0 +v 79.7761 12.8156 0 +v 81.1488 15.4519 0 +v 79.4701 11.9677 0 +v 78.7185 44.8622 0 +v 81.6792 11.5654 0 +v 80.9993 17.9961 0 +v 81.7412 17.1909 0 +v 76.2686 30.4409 0 +v 78.0061 6.27398 0 +v 76.3119 31.1625 0 +v 80.8817 20.1646 0 +v 78.7299 11.0659 0 +v 80.0029 5.65174 0 +v 78.5977 5.05206 0 +v 83.1388 4.3662 0 +v 80.3615 20.612 0 +v 77.0385 27.4892 0 +v 80.4045 17.939 0 +v 82.8355 1.4869 0 +v 76.1548 1.90536 0 +v 79.4063 0.5 0 +v 79.8819 1.95004 0 +v 82.7277 2.82995 0 +v 78.5304 2.27708 0 +v 76.5961 1.48925 0 +v 80.8043 1.29929 0 +v 79.3114 2.39361 0 +v 78.8107 1.12418 0 +v 79.0745 6.54929 0 +v 76.2053 27.678 0 +v 81.2937 20.7567 0 +v 77.0228 31.294 0 +v 79.3234 5.33748 0 +v 79.9829 11.0804 0 +v 80.1341 19.2334 0 +v 81.6817 16.2245 0 +v 78.828 5.93973 0 +v 79.6838 15.9637 0 +v 82.3463 16.4459 0 +v 79.7969 1.23244 0 +v 80.6682 7.87251 0 +v 80.1875 0.5 0 +v 82.6927 2.15129 0 +v 83.3125 0.5 0 +v 78.9883 15.6991 0 +v 84.488 3.96918 0 +v 85.5879 4.18743 0 +v 81.0298 11.9389 0 +v 82.826 3.54818 0 +v 83.4204 2.45398 0 +v 80.9339 13.3611 0 +v 82.5393 4.12666 0 +v 84.8071 3.3826 0 +v 84.8461 1.89976 0 +v 84.4844 1.29786 0 +v 86.4375 0.5 0 +v 85.6563 0.5 0 +v 84.1308 2.11282 0 +v 83.5134 1.73733 0 +v 80.33 7.1343 0 +v 85.4751 2.21186 0 +v 84.0938 0.5 0 +v 84.7957 2.60016 0 +v 80.4091 6.36338 0 +v 84.0944 2.94721 0 +v 83.7032 1.07156 0 +v 66.1251 50.0063 0 +v 66.3753 49.2972 0 +v 66.9531 48.9223 0 +v 67.8936 48.3944 0 +v 68.6356 48.2299 0 +v 69.2743 48.9613 0 +v 69.7392 48.5142 0 +v 69.2501 50.5 0 +v 68.4281 49.0574 0 +v 69.5384 49.735 0 +v 70.1488 49.9546 0 +v 68.7022 49.8567 0 +v 67.9897 49.7838 0 +v 67.3751 50.1509 0 +v 66.9818 49.5992 0 +v 82.7751 40.4418 0 +v 82.2712 40.9307 0 +v 81.882 37.9797 0 +v 82.4608 47.2949 0 +v 83.9523 48.8418 0 +v 74.9081 36.15 0 +v 75.0689 35.1966 0 +v 74.4509 34.9713 0 +v 75.9047 34.2219 0 +v 75.2887 34.5394 0 +v 76.9457 32.7639 0 +v 78.9905 14.7178 0 +v 77.5719 25.0328 0 +v 79.5834 23.2976 0 +v 84.2843 13.525 0 +v 82.9187 17.6781 0 +v 84.5154 16.813 0 +v 83.7974 17.3937 0 +v 83.5215 16.3183 0 +v 85.7209 19.0377 0 +v 83.9054 16.793 0 +v 84.6066 18.3943 0 +v 84.0096 18.0495 0 +v 84.6687 17.5974 0 +v 86.7053 16.7922 0 +v 85.539 18.0661 0 +v 85.2135 18.6299 0 +v 84.3686 20.2009 0 +v 84.5993 19.3123 0 +v 83.8385 18.8985 0 +v 87.0568 18.2848 0 +v 85.358 19.9835 0 +v 86.2607 18.4339 0 +v 86.2558 17.5515 0 +v 86.8776 19.5284 0 +v 85.4467 17.0382 0 +v 86.3828 19.0862 0 +v 86.1457 19.8493 0 +v 87.3761 21.6603 0 +v 86.929 20.6406 0 +v 87.0376 17.5016 0 +v 90.0672 7.08232 0 +v 87.794 16.7147 0 +v 88.203 17.8649 0 +v 87.5587 17.8807 0 +v 87.9042 18.8236 0 +v 85.4233 15.097 0 +v 85.1878 16.0706 0 +v 81.6663 18.6782 0 +v 81.6705 18.0069 0 +v 82.7138 19.169 0 +v 81.4197 19.3687 0 +v 82.1182 19.6029 0 +v 83.1227 20.356 0 +v 82.7361 19.8253 0 +v 83.5313 19.6522 0 +v 82.3162 18.6544 0 +v 83.2215 18.8068 0 +v 84.1228 19.6628 0 +v 76.9769 23.3296 0 +v 78.0603 22.6146 0 +v 78.9104 22.7587 0 +v 79.1771 22.1488 0 +v 80.1427 22.4535 0 +v 78.7228 23.6827 0 +v 78.2582 23.2313 0 +v 77.9664 24.0014 0 +v 77.3744 28.4019 0 +v 80.4169 29.1374 0 +v 77.3071 29.5578 0 +v 77.0678 30.4943 0 +v 79.2948 7.32042 0 +v 77.3889 1.2585 0 +v 77.1493 1.91285 0 +v 75.9582 1.14751 0 +v 80.9688 0.5 0 +v 81.4251 1.07477 0 +v 81.1268 1.88323 0 +v 82.7236 4.89594 0 +v 82.5313 0.5 0 +v 82.1407 1.07393 0 +v 86.2741 7.18206 0 +v 85.8177 3.18331 0 +v 85.5107 1.35011 0 +v 86.8091 1.83538 0 +v 86.0805 1.80527 0 +v 86.1574 1.12483 0 +v 86.4133 2.58281 0 +v 88.6247 3.2754 0 +v 87.1974 3.95606 0 +v 87.5833 2.72388 0 +v 86.6148 3.37824 0 +v 86.9728 2.86432 0 +v 86.4068 4.17052 0 +v 87.2505 5.7164 0 +v 86.0222 5.38363 0 +v 87.0135 4.84259 0 +v 86.0083 4.71171 0 +v 85.2624 5.06321 0 +v 85.1357 6.42465 0 +v 85.4143 5.76397 0 +v 86.1608 6.28107 0 +v 84.3656 5.71076 0 +v 88.4141 4.67075 0 +v 86.6762 5.40316 0 +v 85.7102 6.79533 0 +v 84.9504 8.50764 0 +v 84.88 7.45164 0 +v 87.0323 6.62911 0 +v 87.7572 5.1099 0 +v 87.7563 4.3976 0 +v 89.2687 6.66016 0 +v 87.9144 3.62288 0 +v 88.308 6.08484 0 +v 88.5264 3.97413 0 +v 90.6611 7.76293 0 +v 94.25 0.5 0 +v 88.4141 5.38178 0 +v 86.747 6.07845 0 +v 88.119 8.91553 0 +v 87.6427 6.29259 0 +v 88.2917 7.2018 0 +v 87.2773 7.7614 0 +v 86.904 7.24952 0 +v 82.187 40.1219 0 +v 83.6963 39.1901 0 +v 83.6681 40.3342 0 +v 83.1446 39.7489 0 +v 84.2198 39.7754 0 +v 85.5349 38.0726 0 +v 85.6617 39.5298 0 +v 84.7193 38.802 0 +v 84.975 39.8535 0 +v 85.8992 40.9238 0 +v 85.2879 40.5175 0 +v 84.8644 41.8174 0 +v 84.895 41.1084 0 +v 84.2871 41.4373 0 +v 84.1941 42.2069 0 +v 83.6247 42.5091 0 +v 81.7163 38.7751 0 +v 80.8879 38.2446 0 +v 80.6287 38.7811 0 +v 80.3392 37.9157 0 +v 78.9534 37.1189 0 +v 79.7276 37.3758 0 +v 79.9695 35.3518 0 +v 80.0552 36.3885 0 +v 81.2432 37.5804 0 +v 81.3339 36.302 0 +v 81.092 36.9272 0 +v 82.1313 36.9698 0 +v 82.8709 48.82 0 +v 75.3746 33.7054 0 +v 76.0048 35.1534 0 +v 77.1065 34.5639 0 +v 76.3823 35.7917 0 +v 76.7181 35.1623 0 +v 76.7188 36.974 0 +v 76.7376 36.3296 0 +v 77.7466 36.6815 0 +v 76.2065 32.6078 0 +v 76.542 31.9058 0 +v 76.4082 33.4808 0 +v 77.3595 33.6341 0 +v 76.5782 34.1379 0 +v 77.6217 32.976 0 +v 77.5384 32.058 0 +v 78.147 31.0913 0 +v 77.536 30.9218 0 +v 77.0133 25.2843 0 +v 77.1214 24.4475 0 +v 77.3463 23.8501 0 +v 78.5453 25.9236 0 +v 82.9583 13.848 0 +v 85.2114 19.3848 0 +v 85.3045 22.1008 0 +v 88.5708 17.0864 0 +v 92.9476 4.61817 0 +v 90.1634 4.99129 0 +v 100.5 13 0 +v 91.1884 6.70341 0 +v 88.9286 18.7795 0 +v 89.8799 11.2191 0 +v 87.9804 20.0347 0 +v 87.2321 18.9448 0 +v 87.4442 14.6814 0 +v 84.3198 15.9601 0 +v 84.8236 15.4673 0 +v 83.7253 14.8484 0 +v 83.6744 15.5905 0 +v 86.242 15.8102 0 +v 79.5451 22.6649 0 +v 80.18 21.8169 0 +v 81.0465 22.187 0 +v 83.1952 23.1181 0 +v 80.9758 23.6129 0 +v 82.2165 22.4319 0 +v 80.7619 22.8876 0 +v 81.5306 22.7917 0 +v 80.2872 23.4218 0 +v 80.1752 25.1615 0 +v 79.776 24.2623 0 +v 81.684 22.0586 0 +v 82.1903 23.8353 0 +v 82.1467 23.1325 0 +v 80.6362 24.4186 0 +v 79.3068 25.0089 0 +v 79.0987 24.2464 0 +v 81.4778 24.2989 0 +v 79.5786 26.0094 0 +v 78.6802 25.2615 0 +v 83.0829 25.9864 0 +v 82.437 24.9937 0 +v 82.0909 24.4619 0 +v 78.9852 29.331 0 +v 85.3771 3.6108 0 +v 87.9323 1.63829 0 +v 84.1493 6.71647 0 +v 83.561 6.09928 0 +v 84.109 5.10857 0 +v 85.6951 7.92762 0 +v 85.4809 7.35852 0 +v 86.4976 7.95323 0 +v 87.1112 8.7665 0 +v 85.9799 9.06145 0 +v 86.0807 8.43347 0 +v 83.7995 8.05405 0 +v 88.8217 7.76928 0 +v 88.0968 8.04773 0 +v 88.8657 11.0928 0 +v 89.5146 4.49073 0 +v 90.4685 18.6388 0 +v 89.616 5.60115 0 +v 88.9546 5.82295 0 +v 90.8054 5.14413 0 +v 89.7429 8.19124 0 +v 88.7912 8.53913 0 +v 88.6233 6.64804 0 +v 90.0469 2.99521 0 +v 89.7571 6.23392 0 +v 89.1497 3.9853 0 +v 91.3912 5.53745 0 +v 88.0508 9.88257 0 +v 91.1405 4.57559 0 +v 89.4089 7.36131 0 +v 89.9202 19.2702 0 +v 90.1893 4.2869 0 +v 92.0379 4.85527 0 +v 90.3442 17.279 0 +v 94.2765 2.56277 0 +v 91.9274 3.50834 0 +v 93.4073 4.11488 0 +v 91.3182 3.88289 0 +v 91.396 17.8685 0 +v 90.706 7.12432 0 +v 90.6199 3.72882 0 +v 87.6666 8.49289 0 +v 87.5382 9.36053 0 +v 86.4216 10.9696 0 +v 87.1329 10.2712 0 +v 90.5095 5.73404 0 +v 87.8738 11.3389 0 +v 87.9644 10.611 0 +v 86.1865 10.0188 0 +v 86.7564 9.47209 0 +v 87.1793 11.0299 0 +v 86.7654 12.8953 0 +v 86.7281 11.9084 0 +v 84.3369 10.9805 0 +v 84.9242 9.79023 0 +v 87.6705 12.3669 0 +v 85.3332 12.4553 0 +v 85.6026 9.64386 0 +v 85.1417 9.15311 0 +v 84.0379 9.13198 0 +v 85.4085 10.7156 0 +v 87.0768 12.3894 0 +v 86.1261 12.4253 0 +v 85.7726 13.576 0 +v 85.6979 11.5996 0 +v 85.7485 12.9389 0 +v 85.0375 13.2848 0 +v 85.0921 14.2203 0 +v 85.9824 10.5737 0 +v 84.8174 11.7299 0 +v 86.2784 11.5358 0 +v 84.9405 11.1222 0 +v 84.3902 12.5797 0 +v 83.4423 12.952 0 +v 85.4631 38.813 0 +v 87.4934 38.6363 0 +v 86.4946 38.9131 0 +v 78.9754 35.9559 0 +v 80.6588 35.8166 0 +v 80.6832 36.4469 0 +v 81.5664 33.7272 0 +v 81.7293 35.0398 0 +v 81.3226 35.6054 0 +v 80.7763 34.7837 0 +v 82.3526 35.9169 0 +v 79.5577 33.91 0 +v 81.386 34.416 0 +v 80.0148 34.5591 0 +v 78.9303 34.8372 0 +v 80.5509 33.6962 0 +v 78.0742 34.328 0 +v 78.0304 33.6582 0 +v 78.8132 33.668 0 +v 79.5878 32.5513 0 +v 79.3684 33.2261 0 +v 80.1061 33.0928 0 +v 81.3057 31.4258 0 +v 80.5512 32.148 0 +v 78.0429 35.3548 0 +v 77.3927 35.1749 0 +v 78.6876 34.271 0 +v 78.3431 34.8501 0 +v 83.9594 37.1315 0 +v 82.3019 48.5452 0 +v 83.1399 47.9992 0 +v 84.1727 47.5015 0 +v 83.4174 48.5446 0 +v 83.5551 47.5404 0 +v 84.25 50.5 0 +v 83.3353 49.6292 0 +v 82.4052 49.7042 0 +v 82.375 50.5 0 +v 83.625 50.2407 0 +v 84.2379 49.6463 0 +v 85.8514 48.6207 0 +v 84.875 50.0642 0 +v 85.0374 49.122 0 +v 88 50.5 0 +v 84.9774 48.1131 0 +v 85.3027 49.6528 0 +v 87.4716 48.9362 0 +v 86.75 50.5 0 +v 85.8585 49.2864 0 +v 86.629 48.9452 0 +v 87.0284 46.8946 0 +v 87.0584 49.6939 0 +v 87.0398 47.961 0 +v 87.9014 49.6622 0 +v 87.375 50.5 0 +v 86.3273 49.8763 0 +v 86.4456 48.2908 0 +v 89.6421 48.1414 0 +v 89.2682 48.6636 0 +v 88.6306 48.7403 0 +v 88.0888 49.061 0 +v 89.25 50.5 0 +v 89.74 49.0993 0 +v 89.5693 43.8709 0 +v 88.625 50.0017 0 +v 89.0441 49.3795 0 +v 95.5 50.5 0 +v 90.2218 48.5661 0 +v 77.4768 37.6853 0 +v 76.996 38.1471 0 +v 78.5845 32.0416 0 +v 77.7629 26.0714 0 +v 78.8682 27.1867 0 +v 82.2383 14.0234 0 +v 82.3866 13.0931 0 +v 82.7921 14.7779 0 +v 81.7664 13.0237 0 +v 82.8184 12.3039 0 +v 82.9466 13.263 0 +v 83.2909 14.3872 0 +v 82.3857 11.7648 0 +v 83.3062 11.2356 0 +v 83.9778 11.7394 0 +v 83.3364 11.8948 0 +v 85.0705 21.0356 0 +v 86.2676 21.5385 0 +v 89.6767 18.4702 0 +v 93.0571 2.81385 0 +v 90.0651 7.6836 0 +v 88.4014 18.4527 0 +v 87.2983 20.0662 0 +v 88.442 19.3977 0 +v 89.976 20.1045 0 +v 88.9713 20.2669 0 +v 87.7677 20.8808 0 +v 88.3744 20.5836 0 +v 89.5258 22.0331 0 +v 88.5204 21.6496 0 +v 87.9464 21.4587 0 +v 87.9551 22.3906 0 +v 88.7933 22.444 0 +v 90.2665 24.2118 0 +v 89.694 23.1912 0 +v 89.3873 22.6444 0 +v 88.2744 23.9859 0 +v 88.8303 23.3147 0 +v 89.3748 24.0411 0 +v 88.0178 23.2076 0 +v 86.0496 24.2879 0 +v 86.6377 22.9026 0 +v 87.374 22.8461 0 +v 87.0853 23.9101 0 +v 86.9581 22.2525 0 +v 87.6927 23.7462 0 +v 87.6304 24.7229 0 +v 86.7865 24.6997 0 +v 89.3608 26.5284 0 +v 85.3214 26.456 0 +v 89.5987 25.2861 0 +v 85.889 25.4403 0 +v 89.7261 24.6205 0 +v 88.6309 24.9472 0 +v 86.1936 24.8953 0 +v 87.1709 26.0796 0 +v 86.6544 25.5105 0 +v 87.3613 25.3879 0 +v 86.2688 26.3793 0 +v 88.2905 26.0158 0 +v 88.1916 24.5634 0 +v 85.7643 26.0371 0 +v 84.8739 25.5395 0 +v 87.527 28.6595 0 +v 87.1095 27.4026 0 +v 86.8859 26.7293 0 +v 87.8043 26.798 0 +v 85.8868 27.5501 0 +v 88.5974 26.7487 0 +v 89.5227 28.5222 0 +v 88.2658 27.8182 0 +v 85.8329 26.8848 0 +v 87.75 27.4371 0 +v 87.898 15.6501 0 +v 85.9997 16.5248 0 +v 85.6472 15.6664 0 +v 86.4128 14.7876 0 +v 85.769 14.4656 0 +v 81.3348 26.6112 0 +v 83.2237 24.2207 0 +v 78.2168 29.4349 0 +v 78.4922 28.5781 0 +v 78.7231 30.2859 0 +v 78.5498 27.8472 0 +v 78.1745 27.2594 0 +v 78.4581 26.6187 0 +v 79.1481 26.5526 0 +v 80.2311 26.9688 0 +v 79.6169 28.2991 0 +v 78.1409 30.4782 0 +v 79.8143 30.072 0 +v 79.1546 31.2033 0 +v 79.1205 28.7045 0 +v 79.6904 29.1555 0 +v 79.2155 29.9076 0 +v 78.6821 30.8653 0 +v 87.4302 2.07577 0 +v 87.246 1.02629 0 +v 84.5559 6.27781 0 +v 84.7308 6.86916 0 +v 84.4823 8.00851 0 +v 84.1 7.41811 0 +v 88.424 2.39529 0 +v 91.125 0.5 0 +v 90.4416 2.39825 0 +v 89.4325 2.62831 0 +v 89.0885 5.08952 0 +v 89.1195 17.8829 0 +v 89.0053 16.6402 0 +v 89.6838 17.6327 0 +v 92.3405 4.15245 0 +v 91.9311 10.7091 0 +v 94.2224 6.18963 0 +v 93.6349 5.88436 0 +v 95.642 7.31926 0 +v 91.1335 2.27843 0 +v 96.7683 10.5761 0 +v 92.3585 5.80685 0 +v 92.0376 2.56602 0 +v 91.4185 8.65854 0 +v 92.9913 5.93364 0 +v 96.9711 9.96129 0 +v 94.1538 10.1247 0 +v 93.3866 3.43354 0 +v 92.0313 7.65848 0 +v 93.832 4.96442 0 +v 97.375 0.5 0 +v 93.9116 6.77429 0 +v 93.0955 8.35861 0 +v 91.8878 9.63056 0 +v 94.4652 4.97537 0 +v 93.999 3.77648 0 +v 91.5788 1.73555 0 +v 92.6639 7.85583 0 +v 94.8274 6.88619 0 +v 92.602 7.19608 0 +v 93.2675 5.324 0 +v 88.9823 16.0178 0 +v 91.1512 2.98039 0 +v 89.4716 17.0531 0 +v 93.289 7.45591 0 +v 93.0003 6.57901 0 +v 92.6114 5.19188 0 +v 89.5997 3.55396 0 +v 91.0491 6.07857 0 +v 90.1953 17.9782 0 +v 92.6861 3.47635 0 +v 91.3293 7.48903 0 +v 93.6962 9.65443 0 +v 93.9705 8.07403 0 +v 93.0432 9.59006 0 +v 96.1658 4.70813 0 +v 84.0188 10.0835 0 +v 94.2989 7.40796 0 +v 87.376 11.7746 0 +v 92.2777 8.62406 0 +v 93.7895 9.00494 0 +v 92.8402 8.9646 0 +v 94.4747 8.78366 0 +v 91.9056 6.91996 0 +v 87.7503 13.543 0 +v 83.0418 9.80113 0 +v 84.6141 10.3773 0 +v 83.7193 10.6947 0 +v 83.6293 9.59973 0 +v 83.503 8.68498 0 +v 84.3078 14.3147 0 +v 84.7642 14.8021 0 +v 83.6047 13.6185 0 +v 86.6993 37.7112 0 +v 87.4105 40.2779 0 +v 79.6235 35.9023 0 +v 78.4848 36.5283 0 +v 77.9988 36.0414 0 +v 81.946 36.3811 0 +v 83.9904 34.0929 0 +v 81.66 32.5511 0 +v 80.9284 32.9522 0 +v 78.6686 35.408 0 +v 84.6002 37.8481 0 +v 83.9852 38.4093 0 +v 82.8824 38.4451 0 +v 82.3628 38.8345 0 +v 85.4271 36.4638 0 +v 85.2298 37.2851 0 +v 84.6545 36.7125 0 +v 83.6629 35.8536 0 +v 84.019 36.4443 0 +v 83.0756 36.7086 0 +v 84.7347 35.6103 0 +v 86.0922 37.0579 0 +v 83.1919 37.6006 0 +v 86.0573 37.6991 0 +v 87.3601 34.9691 0 +v 83.8246 37.7734 0 +v 82.553 37.8454 0 +v 82.7061 37.2104 0 +v 86.5323 35.8959 0 +v 86.0888 36.3923 0 +v 87.0654 36.7621 0 +v 81.7788 49.8561 0 +v 84.5824 48.6428 0 +v 85.0234 47.2173 0 +v 85.8918 46.2223 0 +v 85.1441 45.7345 0 +v 85.7717 47.7048 0 +v 85.278 46.563 0 +v 85.9051 46.9695 0 +v 86.4823 47.454 0 +v 85.8539 44.6939 0 +v 85.8571 45.4585 0 +v 87.8016 45.0681 0 +v 86.791 45.0723 0 +v 85.2774 45.0631 0 +v 87.9344 48.1481 0 +v 87.6195 47.4215 0 +v 88.1105 46.2758 0 +v 88.7851 47.348 0 +v 88.8725 48.0624 0 +v 87.6731 46.7664 0 +v 87.1755 45.9488 0 +v 88.2156 47.5948 0 +v 86.4756 45.8131 0 +v 87.2976 45.3727 0 +v 77.311 37.1026 0 +v 78.1909 37.339 0 +v 78.8385 38.1516 0 +v 78.0677 32.4496 0 +v 78.0561 31.709 0 +v 78.9004 32.6622 0 +v 83.0445 15.3891 0 +v 83.7669 12.3856 0 +v 84.9384 20.4342 0 +v 83.8856 21.8542 0 +v 86.8569 21.2801 0 +v 85.5879 21.4802 0 +v 85.9964 20.7091 0 +v 89.6111 21.0362 0 +v 86.0793 22.3219 0 +v 85.6449 23.2985 0 +v 86.3911 23.6154 0 +v 88.8085 24.3346 0 +v 88.0609 25.3541 0 +v 88.9342 25.6323 0 +v 84.1522 26.4593 0 +v 85.3114 24.7725 0 +v 84.2242 24.6606 0 +v 85.3344 24.003 0 +v 84.4221 23.1803 0 +v 85.014 23.4411 0 +v 84.4423 23.9364 0 +v 84.9737 22.7307 0 +v 83.7871 23.5755 0 +v 84.2943 22.4604 0 +v 83.8205 22.9158 0 +v 84.7431 24.9566 0 +v 85.5861 22.6874 0 +v 83.8357 24.1865 0 +v 84.8586 24.3681 0 +v 88.5395 28.8035 0 +v 87.2045 16.1198 0 +v 87.2103 15.3816 0 +v 86.616 15.3471 0 +v 81.3731 25.453 0 +v 80.8352 25.0565 0 +v 82.8371 23.679 0 +v 83.332 25.1178 0 +v 83.8346 25.732 0 +v 80.5437 26.0546 0 +v 80.0442 26.3943 0 +v 81.1555 26.0255 0 +v 82.0998 26.0567 0 +v 80.7308 26.6291 0 +v 81.0636 27.6563 0 +v 81.9984 25.4396 0 +v 82.5512 27.4845 0 +v 82.0882 26.8457 0 +v 82.8811 26.7582 0 +v 81.8038 27.539 0 +v 83.4925 26.5058 0 +v 83.9194 27.8584 0 +v 83.4476 27.2636 0 +v 82.3138 29.3824 0 +v 81.591 28.5901 0 +v 81.0511 30.2079 0 +v 80.2558 31.0841 0 +v 79.285 31.905 0 +v 89.3568 1.10941 0 +v 89.8537 1.51782 0 +v 89.3889 1.97664 0 +v 88.8914 1.55343 0 +v 92.7297 22.1592 0 +v 89.7578 9.70759 0 +v 89.1933 12.5978 0 +v 89.1983 19.533 0 +v 90.4394 6.4577 0 +v 88.3067 16.2274 0 +v 88.8549 14.6112 0 +v 95.0678 3.38222 0 +v 95.3853 5.7907 0 +v 90.5171 8.65273 0 +v 90.9625 9.47799 0 +v 89.816 8.94877 0 +v 90.3175 9.36891 0 +v 91.3197 10.1935 0 +v 90.9709 11.2273 0 +v 92.3618 6.4569 0 +v 92.4843 10.1467 0 +v 93.3375 11.5395 0 +v 92.7376 10.9493 0 +v 93.2969 10.361 0 +v 92.0386 12.2597 0 +v 93.9147 10.9296 0 +v 95.5505 10.9775 0 +v 94.739 10.7365 0 +v 94.6474 12.2012 0 +v 94.0912 11.6748 0 +v 93.4877 12.8695 0 +v 93.6111 12.182 0 +v 92.8336 12.3972 0 +v 92.1386 14.049 0 +v 92.5467 11.6891 0 +v 92.2953 13.1428 0 +v 100.5 6.75 0 +v 94.9581 11.4854 0 +v 96.3574 12.5181 0 +v 95.5389 12.1628 0 +v 93.0601 13.7418 0 +v 90.664 13.3274 0 +v 95.2805 10.4001 0 +v 96.2794 11.5774 0 +v 95.1765 14.1182 0 +v 92.9204 13.1323 0 +v 93.3927 16.2747 0 +v 91.443 12.9117 0 +v 95.673 11.5715 0 +v 95.0426 9.13684 0 +v 94.9219 4.49644 0 +v 94.1527 13.7364 0 +v 95.1326 13.0988 0 +v 92.9811 15.0404 0 +v 91.3801 13.7315 0 +v 91.0592 15.5628 0 +v 91.4272 14.6835 0 +v 90.5861 12.2435 0 +v 96.1665 10.3376 0 +v 97.2312 11.0287 0 +v 93.6051 13.4679 0 +v 95.745 12.8085 0 +v 96.6818 13.9934 0 +v 96.3498 13.2931 0 +v 97.5479 13.1539 0 +v 95.9184 13.9264 0 +v 96.9724 13.4267 0 +v 95.3071 15.5405 0 +v 96.5939 16.2 0 +v 95.7982 14.9927 0 +v 92.7593 14.3752 0 +v 93.6377 14.4519 0 +v 92.1873 14.9355 0 +v 92.4639 15.8987 0 +v 90.1593 16.195 0 +v 90.1407 14.6617 0 +v 90.6948 14.1092 0 +v 91.313 12.1948 0 +v 91.7407 11.5013 0 +v 90.866 12.7681 0 +v 96.7424 12.0126 0 +v 94.6263 15.7675 0 +v 95.8637 16.0395 0 +v 94.4527 14.4954 0 +v 95.091 14.8372 0 +v 93.9942 15.4277 0 +v 90.0082 16.7785 0 +v 90.7796 14.9291 0 +v 90.1954 15.4278 0 +v 89.6192 15.7851 0 +v 89.0809 15.2998 0 +v 88.3916 15.1446 0 +v 89.492 14.7835 0 +v 89.4496 13.676 0 +v 90.1252 13.7401 0 +v 89.9398 12.9401 0 +v 97.6622 14.1385 0 +v 98.2934 12.7023 0 +v 95.7007 16.7813 0 +v 94.2745 16.6656 0 +v 95.9238 17.5074 0 +v 95.1492 16.2591 0 +v 100.5 19.25 0 +v 97.677 12.5259 0 +v 94.9314 17.415 0 +v 98.7235 13.748 0 +v 97.0172 15.1118 0 +v 94.0087 16.0751 0 +v 93.1483 18.0162 0 +v 94.8712 16.8052 0 +v 95.1788 20.1344 0 +v 95.2358 8.19292 0 +v 97.1116 14.4739 0 +v 93.5188 17.1803 0 +v 95.3075 18.7518 0 +v 94.2108 17.3841 0 +v 94.5347 18.2479 0 +v 92.3384 17.1571 0 +v 95.3764 18.0111 0 +v 94.3596 19.3609 0 +v 93.8623 18.0074 0 +v 93.5163 18.9026 0 +v 92.9237 17.4166 0 +v 94.6969 18.8437 0 +v 93.1714 20.5426 0 +v 92.1886 18.9341 0 +v 93.5889 19.7742 0 +v 92.8463 18.6611 0 +v 92.8058 19.4924 0 +v 92.2207 18.0827 0 +v 91.5023 20.3133 0 +v 90.8184 19.6292 0 +v 92.0389 19.72 0 +v 92.586 20.1576 0 +v 92.3318 21.1818 0 +v 91.4637 19.2032 0 +v 91.6247 18.526 0 +v 94.3238 20.2193 0 +v 90.7101 20.4213 0 +v 94.9694 22.3747 0 +v 94.8562 21.2342 0 +v 94.7952 20.6191 0 +v 86.8436 13.9096 0 +v 87.4353 14.0687 0 +v 88.2083 14.1746 0 +v 88.6166 13.3967 0 +v 86.2209 14.0226 0 +v 87.1551 13.3754 0 +v 88.8862 13.9744 0 +v 88.0921 12.9291 0 +v 82.8639 10.5755 0 +v 86.8791 38.3602 0 +v 86.5534 39.8633 0 +v 85.9318 40.2119 0 +v 87.1532 39.3493 0 +v 90.1951 44.1196 0 +v 87.8006 39.2205 0 +v 89.072 42.1767 0 +v 86.688 40.6784 0 +v 88.1283 42.4245 0 +v 86.707 42.1298 0 +v 86.4821 41.4069 0 +v 87.5871 41.4596 0 +v 85.7774 42.0226 0 +v 87.2836 40.9009 0 +v 86.1128 43.1978 0 +v 85.1303 42.7676 0 +v 86.1886 42.5407 0 +v 85.4814 43.3028 0 +v 85.9107 43.9333 0 +v 87.1565 43.8802 0 +v 86.5251 43.7066 0 +v 87.067 42.9703 0 +v 84.668 43.2127 0 +v 87.4073 42.3272 0 +v 87.9306 43.3447 0 +v 88.6535 39.2464 0 +v 87.9592 44.2134 0 +v 91.9278 44.9671 0 +v 89.59 44.956 0 +v 88.5394 42.9942 0 +v 88.7196 43.8275 0 +v 88.6818 44.7885 0 +v 88.6651 38.3931 0 +v 88.9734 45.7539 0 +v 89.215 44.4436 0 +v 90.6794 44.6358 0 +v 91.9434 44.0497 0 +v 90.3979 43.345 0 +v 88.3924 45.4026 0 +v 88.1971 39.9674 0 +v 93.2653 44.7395 0 +v 87.8363 45.7052 0 +v 91.7406 43.1549 0 +v 89.6107 43.1987 0 +v 88.118 40.8093 0 +v 100.5 38 0 +v 89.8632 41.6058 0 +v 89.2045 41.5266 0 +v 91.7911 46.0593 0 +v 89.6092 39.84 0 +v 90.6917 41.8069 0 +v 91.0634 43.7903 0 +v 89.132 42.7981 0 +v 88.6544 40.435 0 +v 91.3839 44.499 0 +v 94.2525 43.0559 0 +v 93.0297 42.0385 0 +v 92.1028 39.9582 0 +v 93.3517 41.4346 0 +v 92.2892 42.7327 0 +v 91.7268 42.329 0 +v 90.9266 41.1689 0 +v 91.4997 41.5348 0 +v 93.2596 40.8376 0 +v 93.9699 42.152 0 +v 90.9924 42.7071 0 +v 92.5396 44.5187 0 +v 92.6487 43.531 0 +v 94.8224 46.8772 0 +v 93.6542 42.7468 0 +v 92.6617 40.7519 0 +v 95.0641 45.5238 0 +v 94.3812 38.5137 0 +v 90.9077 38.8083 0 +v 92.9607 39.9478 0 +v 93.6845 40.4082 0 +v 93.258 38.7386 0 +v 92.1238 41.1228 0 +v 92.5225 39.1867 0 +v 92.5118 38.3085 0 +v 81.2051 32.0759 0 +v 82.8795 33.2399 0 +v 82.9567 34.8275 0 +v 82.2616 34.2773 0 +v 82.2554 33.5708 0 +v 83.0238 34.0286 0 +v 83.0151 36.0378 0 +v 84.0354 35.012 0 +v 83.4393 35.2514 0 +v 83.555 34.5748 0 +v 85.6634 35.5645 0 +v 85.1439 34.4683 0 +v 86.3981 34.9429 0 +v 85.1762 35.1242 0 +v 84.4862 34.5293 0 +v 86.868 35.3627 0 +v 87.7435 35.9528 0 +v 86.9496 32.3647 0 +v 86.9131 33.705 0 +v 86.8936 34.423 0 +v 86.0092 34.0763 0 +v 85.7719 34.7034 0 +v 84.9907 32.9794 0 +v 84.7463 33.7569 0 +v 85.4687 33.5568 0 +v 85.966 32.6587 0 +v 86.2431 33.3597 0 +v 86.8358 33.0322 0 +v 88.6868 33.1604 0 +v 87.7494 33.2681 0 +v 87.7505 34.1634 0 +v 88.0964 32.1551 0 +v 88.1692 32.7884 0 +v 87.7832 37.5842 0 +v 79.4493 37.9543 0 +v 79.297 38.6276 0 +v 78.2775 38.7302 0 +v 78.0915 38.0435 0 +v 84.6455 21.6872 0 +v 84.1006 21.0198 0 +v 83.2357 21.2418 0 +v 83.7679 20.4576 0 +v 83.0373 22.1034 0 +v 82.3667 20.9025 0 +v 82.3514 21.6731 0 +v 83.5758 22.368 0 +v 82.7849 22.6623 0 +v 89.5184 20.4626 0 +v 89.1536 21.4991 0 +v 84.736 26.1743 0 +v 88.0803 28.4004 0 +v 88.8915 28.1751 0 +v 89.1902 27.37 0 +v 91.352 27.3702 0 +v 90.2711 27.1511 0 +v 89.6844 27.0321 0 +v 80.4751 28.2811 0 +v 80.0333 27.6844 0 +v 79.3505 27.6703 0 +v 81.081 28.2623 0 +v 84.7391 27.2759 0 +v 82.5431 28.4473 0 +v 83.1568 27.9788 0 +v 83.7553 29.2932 0 +v 83.2459 28.7317 0 +v 82.0084 28.1275 0 +v 80.4667 29.8311 0 +v 81.4521 29.4428 0 +v 81.0384 28.9378 0 +v 80.689 31.5367 0 +v 79.6616 30.7409 0 +v 80.9047 30.8741 0 +v 79.974 31.7353 0 +v 91.3076 22.9569 0 +v 89.4554 10.4927 0 +v 88.6922 10.328 0 +v 88.854 9.43978 0 +v 90.3975 10.4047 0 +v 89.2165 8.962 0 +v 90.9367 10.64 0 +v 90.4271 10.9952 0 +v 88.5053 11.9979 0 +v 88.5915 12.5934 0 +v 89.2942 11.7877 0 +v 89.9785 11.9067 0 +v 94.6493 3.89342 0 +v 94.4048 3.23067 0 +v 99.1304 9.57583 0 +v 95.7115 9.13505 0 +v 94.9697 7.55889 0 +v 94.4766 9.49305 0 +v 100.5 9.875 0 +v 95.4872 4.15252 0 +v 97.464 11.8063 0 +v 100.5 11.4375 0 +v 99.0075 4.25686 0 +v 96.31 9.59593 0 +v 95.6585 9.82293 0 +v 96.924 8.17945 0 +v 97.0332 9.06811 0 +v 94.8846 6.22553 0 +v 95.5976 6.54087 0 +v 96.6081 5.84969 0 +v 95.9868 6.02557 0 +v 96.5592 6.86244 0 +v 96.3031 3.84827 0 +v 98.1432 11.1793 0 +v 97.6477 9.55508 0 +v 96.0788 8.05364 0 +v 100.5 8.3125 0 +v 97.8165 10.3207 0 +v 98.8355 11.8799 0 +v 98.1415 11.9971 0 +v 96.2746 7.44011 0 +v 98.0639 13.5929 0 +v 97.4001 4.46424 0 +v 97.9522 8.50419 0 +v 99.3981 12.8406 0 +v 98.5325 8.80709 0 +v 96.738 4.35857 0 +v 96.9546 5.12867 0 +v 100.5 3.625 0 +v 97.6189 5.0925 0 +v 97.364 8.57644 0 +v 99.19 10.2894 0 +v 98.8799 12.499 0 +v 98.9531 11.0714 0 +v 98.5079 10.5096 0 +v 99.6482 11.5853 0 +v 98.425 9.45286 0 +v 100.5 10.6562 0 +v 98.7098 7.75998 0 +v 99.903 10.2656 0 +v 99.8839 10.9464 0 +v 100.197 12.2188 0 +v 94.2985 12.936 0 +v 94.7774 13.6247 0 +v 93.0888 15.6903 0 +v 91.8005 15.5679 0 +v 91.7674 16.4647 0 +v 91.6119 17.1746 0 +v 90.9308 16.6533 0 +v 90.75 16.0792 0 +v 89.5516 16.3845 0 +v 100.5 16.125 0 +v 96.3657 15.4826 0 +v 92.7361 16.5613 0 +v 93.1691 21.4106 0 +v 93.9153 20.9786 0 +v 93.8453 22.3108 0 +v 93.3192 22.0019 0 +v 94.2345 21.6633 0 +v 92.0935 20.579 0 +v 90.6638 21.6283 0 +v 91.1985 21.0444 0 +v 91.6329 21.979 0 +v 98.322 22.1963 0 +v 85.4737 41.4328 0 +v 87.2943 44.5745 0 +v 86.5102 44.4183 0 +v 90.7928 46.5229 0 +v 88.8652 46.5493 0 +v 88.3128 46.8972 0 +v 89.8255 46.2747 0 +v 89.6354 45.6283 0 +v 88.4315 41.6071 0 +v 90.3768 45.7614 0 +v 90.0925 47.2433 0 +v 90.5118 47.87 0 +v 89.4158 47.0079 0 +v 90.7016 49.484 0 +v 91.0786 45.2203 0 +v 90.2364 46.6826 0 +v 90.1951 45.1519 0 +v 89.1467 40.8656 0 +v 90.1537 42.4683 0 +v 91.6193 45.4831 0 +v 92.4371 41.6962 0 +v 91.6392 40.6845 0 +v 93.4822 43.4002 0 +v 92.9814 42.7212 0 +v 93.1547 44.0344 0 +v 100.5 44.25 0 +v 95.3736 43.7641 0 +v 90.5444 40.6067 0 +v 95.5933 40.1278 0 +v 94.5937 40.9893 0 +v 94.7214 41.6788 0 +v 94.053 43.6434 0 +v 94.0583 41.4507 0 +v 93.8269 39.3852 0 +v 93.5634 37.3465 0 +v 93.1979 39.365 0 +v 91.7715 38.7567 0 +v 91.3831 39.5102 0 +v 91.2351 37.035 0 +v 93.1901 37.9942 0 +v 92.3891 37.1549 0 +v 93.9069 37.9759 0 +v 95.4308 36.7358 0 +v 94.8707 37.604 0 +v 90.4836 39.6075 0 +v 91.7161 37.8296 0 +v 90.9896 40.0782 0 +v 90.1542 40.129 0 +v 90.7617 37.8645 0 +v 91.2544 38.2714 0 +v 89.8058 38.4956 0 +v 89.4644 36.5741 0 +v 90.4285 38.3993 0 +v 89.9063 39.1969 0 +v 89.2684 38.9304 0 +v 90.2875 37.0439 0 +v 90.0034 37.7554 0 +v 90.7448 35.2869 0 +v 90.7537 36.2273 0 +v 90.109 36.4007 0 +v 89.466 35.2953 0 +v 92.1084 35.7443 0 +v 88.4347 34.9924 0 +v 91.5442 36.3034 0 +v 91.4003 35.594 0 +v 92.2483 36.4497 0 +v 92.1592 33.7617 0 +v 93.6515 35.8047 0 +v 91.9498 34.7483 0 +v 92.8727 35.9592 0 +v 93.0593 34.8599 0 +v 93.3973 36.5636 0 +v 92.6309 35.3527 0 +v 94.4278 36.4867 0 +v 93.0081 37.0552 0 +v 87.9027 34.7346 0 +v 83.0628 31.4912 0 +v 82.3938 35.2275 0 +v 87.1284 36.1262 0 +v 87.2026 30.5065 0 +v 89.5993 30.6487 0 +v 87.2078 37.3622 0 +v 87.8913 36.7654 0 +v 88.6223 36.2127 0 +v 88.754 37.2958 0 +v 88.3152 35.6353 0 +v 89.2404 35.9344 0 +v 90.341 26.0721 0 +v 90.6153 28.2288 0 +v 89.8411 27.8062 0 +v 79.5776 27.052 0 +v 84.0947 27.1198 0 +v 85.0379 28.5643 0 +v 90.5458 23.3842 0 +v 90.2956 22.5126 0 +v 90.9768 22.2774 0 +v 96.3545 8.75041 0 +v 97.789 7.23082 0 +v 94.0861 1.53366 0 +v 99.5371 8.64266 0 +v 99.0796 8.99848 0 +v 98.5502 16.3347 0 +v 94.2351 25.3708 0 +v 90.0027 21.5717 0 +v 91.7348 21.3634 0 +v 92.2264 21.7944 0 +v 92.0823 22.6715 0 +v 93.1374 23.3395 0 +v 92.7268 22.8207 0 +v 92.1915 23.6662 0 +v 91.2719 24.0902 0 +v 96.3233 21.6645 0 +v 88.0169 38.2146 0 +v 88.9467 39.8405 0 +v 89.8722 40.8802 0 +v 92.7273 45.6218 0 +v 94.0398 44.9949 0 +v 93.906 46.4021 0 +v 94.1849 45.7186 0 +v 95.9382 46.9833 0 +v 93.4464 45.8159 0 +v 94.5611 46.2708 0 +v 94.4514 47.4235 0 +v 92.7951 46.7998 0 +v 96.2233 45.4623 0 +v 94.8499 39.4239 0 +v 96.9968 38.3607 0 +v 88.6803 34.0928 0 +v 88.2652 33.6237 0 +v 90.3209 33.638 0 +v 89.0847 34.6865 0 +v 89.5247 33.9522 0 +v 89.6156 33.0168 0 +v 90.2181 34.5434 0 +v 89.0269 32.2846 0 +v 91.2952 31.8211 0 +v 91.1379 34.1894 0 +v 90.1047 35.1821 0 +v 88.6965 31.2509 0 +v 90.5954 32.6155 0 +v 91.276 34.858 0 +v 91.7374 34.1877 0 +v 88.6135 31.8471 0 +v 90.2049 33.0588 0 +v 89.8603 32.2173 0 +v 89.3909 31.5986 0 +v 90.3874 31.3301 0 +v 91.1375 33.3091 0 +v 89.8164 31.1941 0 +v 91.3557 32.5799 0 +v 93.3695 32.0373 0 +v 92.3123 32.1217 0 +v 92.5492 34.36 0 +v 93.4248 33.363 0 +v 93.283 34.1214 0 +v 92.8171 33.6418 0 +v 92.3516 32.9525 0 +v 95.1733 32.6261 0 +v 94.2007 34.8025 0 +v 91.7776 33.2435 0 +v 92.8754 32.5114 0 +v 94.8403 36.9696 0 +v 82.1726 31.7714 0 +v 82.1301 30.6179 0 +v 82.8447 32.3523 0 +v 81.8965 31.204 0 +v 81.7205 30.0711 0 +v 84.0537 32.2004 0 +v 84.0811 33.1205 0 +v 83.5152 33.5311 0 +v 82.3137 32.8176 0 +v 83.4195 32.0397 0 +v 83.4399 32.7734 0 +v 87.8987 29.6768 0 +v 87.3799 31.477 0 +v 87.4898 32.0784 0 +v 85.9747 31.2323 0 +v 87.9535 30.8707 0 +v 87.7759 30.2807 0 +v 88.7483 30.164 0 +v 86.7224 31.0957 0 +v 86.4642 31.7968 0 +v 88.5672 29.4955 0 +v 89.6164 29.57 0 +v 88.9949 30.7204 0 +v 89.3454 30.1052 0 +v 89.4666 37.2867 0 +v 90.9349 26.6523 0 +v 91.5488 25.4298 0 +v 91.0472 25.9433 0 +v 90.669 25.0721 0 +v 92.0953 26.4654 0 +v 91.5499 26.7751 0 +v 90.8092 24.4822 0 +v 89.6863 25.9468 0 +v 90.744 27.5939 0 +v 84.6237 27.9815 0 +v 85.3117 27.9311 0 +v 86.2408 28.7088 0 +v 84.256 28.6814 0 +v 93.5587 2.16339 0 +v 92.6875 0.5 0 +v 93.1737 1.30521 0 +v 92.4506 1.79594 0 +v 92.932 2.19875 0 +v 93.4688 0.5 0 +v 92.2969 1.09821 0 +v 91.9063 0.5 0 +v 88.7813 0.5 0 +v 90.9056 1.63735 0 +v 91.5156 1.05764 0 +v 95.8125 0.5 0 +v 97.3696 6.39398 0 +v 97.1851 7.00997 0 +v 98.349 6.42667 0 +v 96.8868 7.55725 0 +v 97.8724 6.01628 0 +v 97.2679 5.72305 0 +v 98.2256 4.52908 0 +v 98.4715 7.109 0 +v 99.2786 6.61194 0 +v 100.5 5.1875 0 +v 98.9256 5.95803 0 +v 100.5 5.96875 0 +v 97.9675 2.52848 0 +v 98.8636 5.10249 0 +v 98.3063 3.50172 0 +v 99.9257 6.35938 0 +v 99.6992 4.80969 0 +v 99.8181 5.5837 0 +v 98.3758 5.5679 0 +v 99.7791 4.00067 0 +v 99.4214 14.4686 0 +v 100.5 4.40625 0 +v 100.5 2.0625 0 +v 99.0383 3.19489 0 +v 98.0487 7.84469 0 +v 98.9723 8.34298 0 +v 99.6922 7.66825 0 +v 99.925 8.20486 0 +v 99.1593 7.26777 0 +v 100.5 9.09375 0 +v 99.8679 9.48438 0 +v 97.5931 15.9623 0 +v 98.5958 15.0386 0 +v 94.3464 23.4136 0 +v 93.0733 24.6864 0 +v 91.5723 23.5324 0 +v 95.5027 21.7459 0 +v 95.6665 20.8747 0 +v 96.8119 19.5892 0 +v 96.068 20.0794 0 +v 95.5842 19.4749 0 +v 97.0211 20.7162 0 +v 96.6788 20.1968 0 +v 89.9892 49.8706 0 +v 89.3748 49.8979 0 +v 93 50.5 0 +v 93.8339 44.3171 0 +v 92.4408 46.2292 0 +v 93.5772 47.234 0 +v 93.6664 48.9338 0 +v 93.8533 48.0717 0 +v 95.168 48.6849 0 +v 92.3968 48.2073 0 +v 94.389 48.6391 0 +v 94.8143 48.0516 0 +v 94.3478 49.5717 0 +v 95.8084 45.0168 0 +v 94.25 50.5 0 +v 92.8725 47.5818 0 +v 93.1464 48.3698 0 +v 92.5928 49.4019 0 +v 95.9015 48.658 0 +v 93.0052 49.8735 0 +v 95.5669 49.5498 0 +v 98 50.5 0 +v 96.7959 48.3024 0 +v 93.625 49.9648 0 +v 94.875 50.0966 0 +v 94.9528 49.3085 0 +v 96.75 50.5 0 +v 95.1877 42.606 0 +v 96.125 50.0665 0 +v 96.5149 49.2827 0 +v 94.6666 44.2154 0 +v 95.6098 41.1577 0 +v 97.375 50.5 0 +v 95.333 44.48 0 +v 95.9621 47.8216 0 +v 97.0403 47.3714 0 +v 95.2478 47.3823 0 +v 97.3325 49.7806 0 +v 94.7319 43.5384 0 +v 96.4147 47.3892 0 +v 95.9308 45.9963 0 +v 95.2831 46.3191 0 +v 94.5456 42.4681 0 +v 97.3671 46.7616 0 +v 98.1546 48.1477 0 +v 97.267 48.9679 0 +v 100.5 47.375 0 +v 97.9032 45.2523 0 +v 96.7334 46.4838 0 +v 98.021 46.5355 0 +v 97.4854 48.3139 0 +v 98.6053 49.269 0 +v 96.8274 45.3868 0 +v 97.8893 49.3267 0 +v 97.938 47.354 0 +v 99.2214 47.0707 0 +v 98.533 47.0009 0 +v 100.5 45.8125 0 +v 91.7183 47.2089 0 +v 92.3459 47.2391 0 +v 94.3497 39.1057 0 +v 95.485 38.5211 0 +v 94.8014 40.2196 0 +v 90.6394 31.9489 0 +v 91.7626 29.8721 0 +v 93.646 35.1501 0 +v 95.199 35.5253 0 +v 87.9853 29.0686 0 +v 85.1896 31.9408 0 +v 85.8431 32.0128 0 +v 89.1514 29.0835 0 +v 90.2331 28.9867 0 +v 91.2364 29.0173 0 +v 90.6447 30.0395 0 +v 90.2257 29.5964 0 +v 89.2761 37.9923 0 +v 92.0749 24.6226 0 +v 91.4179 24.7696 0 +v 92.603 24.2017 0 +v 90.1919 25.4694 0 +v 86.9136 29.4602 0 +v 86.1728 30.2025 0 +v 89.5625 0.5 0 +v 95.25 2.41451 0 +v 94.682 1.95558 0 +v 96.2739 2.76605 0 +v 95.626 2.98627 0 +v 95.8517 2.32885 0 +v 95.7427 3.59153 0 +v 97.2443 3.32584 0 +v 99.3007 13.4727 0 +v 100.5 14.5625 0 +v 100.5 7.53125 0 +v 97.0113 15.7359 0 +v 97.5224 17.5602 0 +v 98.3471 14.3624 0 +v 97.8006 14.9473 0 +v 98.2557 15.6755 0 +v 94.3853 22.7307 0 +v 92.556 25.5604 0 +v 92.0897 25.2073 0 +v 98.6815 19.8252 0 +v 97.0737 21.4859 0 +v 97.3846 23.5765 0 +v 96.9364 22.5747 0 +v 95.9348 22.653 0 +v 96.3634 20.9632 0 +v 91.75 50.5 0 +v 99.1478 43.7391 0 +v 94.7324 44.91 0 +v 95.4456 41.8955 0 +v 97.0351 41.8621 0 +v 96.2553 42.5914 0 +v 96.2363 41.6843 0 +v 96.8682 40.7286 0 +v 96.735 41.3273 0 +v 100.5 42.6875 0 +v 99.6247 40.3438 0 +v 98.7994 41.3056 0 +v 98.5777 43.0013 0 +v 97.3478 42.8554 0 +v 97.4427 45.9386 0 +v 98.2767 45.865 0 +v 99.2421 44.8562 0 +v 98.6253 45.2323 0 +v 98.2274 43.9144 0 +v 99.449 45.8895 0 +v 98.2472 44.6274 0 +v 97.1595 44.3009 0 +v 91.4421 46.6143 0 +v 90.9625 47.2612 0 +v 94.9312 38.8063 0 +v 95.8435 37.6167 0 +v 95.3527 37.9454 0 +v 94.3279 32.1586 0 +v 96.225 38.2912 0 +v 96.5126 39.4171 0 +v 96.0217 38.9428 0 +v 96.5219 36.7618 0 +v 95.9699 37.0204 0 +v 94.1825 39.9561 0 +v 92.096 30.9826 0 +v 93.4242 28.3148 0 +v 95.0354 36.184 0 +v 94.4286 35.6836 0 +v 85.3785 32.5153 0 +v 84.6933 32.3841 0 +v 84.3253 30.7741 0 +v 83.9104 31.4341 0 +v 84.6488 31.4379 0 +v 85.2208 30.7484 0 +v 85.3676 31.3488 0 +v 84.7444 29.7626 0 +v 84.7216 29.1219 0 +v 85.616 29.4108 0 +v 85.806 30.6659 0 +v 84.7616 30.3623 0 +v 85.6213 28.7865 0 +v 86.2676 29.3617 0 +v 91.4563 28.2051 0 +v 92.474 27.654 0 +v 91.8577 27.731 0 +v 91.1586 29.6546 0 +v 90.2948 30.6407 0 +v 91.2038 30.7673 0 +v 91.7446 30.4828 0 +v 92.6713 30.2046 0 +v 91.5551 31.2677 0 +v 92.5713 29.0699 0 +v 92.1859 28.4157 0 +v 92.7924 28.2098 0 +v 93.0708 31.1018 0 +v 92.3551 29.6607 0 +v 92.8106 31.7003 0 +v 100.5 31.75 0 +v 95.9311 30.2415 0 +v 93.6806 30.2927 0 +v 93.7158 31.4113 0 +v 93.1515 30.5283 0 +v 86.8886 28.8057 0 +v 86.6701 28.0524 0 +v 86.7741 30.0618 0 +v 97.0258 1.971 0 +v 97.7042 3.84273 0 +v 96.6135 3.2984 0 +v 97.8232 3.12429 0 +v 100.015 13.8914 0 +v 100.5 15.3438 0 +v 99.94 14.7541 0 +v 97.252 16.7477 0 +v 97.9091 16.5662 0 +v 98.5712 17.396 0 +v 96.7284 17.3732 0 +v 96.8875 18.4767 0 +v 96.1382 18.8483 0 +v 96.4164 17.9814 0 +v 95.9049 18.2954 0 +v 92.0064 25.8504 0 +v 93.3957 25.4674 0 +v 93.9841 26.8853 0 +v 93.8928 26.0922 0 +v 95.324 26.3294 0 +v 93.0587 26.5899 0 +v 94.5745 26.4156 0 +v 95.0998 27.6818 0 +v 94.6559 27.1239 0 +v 94.2314 27.9172 0 +v 93.3043 27.4176 0 +v 92.5178 26.9854 0 +v 92.6239 26.1647 0 +v 94.9368 28.8 0 +v 94.1271 28.7238 0 +v 94.4858 29.2528 0 +v 93.4064 29.1539 0 +v 94.7757 28.2055 0 +v 100.5 22.375 0 +v 97.5715 20.9717 0 +v 97.7578 19.6192 0 +v 98.6783 21.2953 0 +v 97.4269 20.1929 0 +v 97.302 19.0637 0 +v 98.4286 18.6043 0 +v 97.7892 21.6806 0 +v 98.322 19.263 0 +v 99.4253 22.1116 0 +v 98.185 20.4551 0 +v 99.1125 19.0529 0 +v 99.5253 17.6096 0 +v 97.6278 22.3804 0 +v 98.6361 18.0162 0 +v 99.1938 16.8528 0 +v 99.4827 15.8353 0 +v 100.04 20.0312 0 +v 100.5 20.8125 0 +v 100.5 17.6875 0 +v 99.8842 15.3678 0 +v 99.9471 18.4688 0 +v 99.8057 19.1551 0 +v 99.2854 18.2605 0 +v 96.4086 22.2687 0 +v 96.495 23.3734 0 +v 96.5661 25.1115 0 +v 95.4251 23.6274 0 +v 94.9953 23.0745 0 +v 96.7667 24.2327 0 +v 95.9021 23.2564 0 +v 98.2829 25.0412 0 +v 95.8457 24.4847 0 +v 97.4149 24.843 0 +v 95.6581 25.4277 0 +v 94.7892 24.4712 0 +v 98.0195 24.1949 0 +v 95.3002 29.613 0 +v 94.9356 25.6728 0 +v 95.1238 25.0402 0 +v 95.3209 24.2104 0 +v 98.3481 23.2225 0 +v 96.4245 26.2244 0 +v 97.2192 25.7003 0 +v 100.5 23.1562 0 +v 95.8489 26.0111 0 +v 98.0735 25.8913 0 +v 98.7971 24.4171 0 +v 100.5 23.9375 0 +v 99.4743 25.2325 0 +v 99.0245 23.6499 0 +v 98.8011 25.6196 0 +v 99.3919 25.8681 0 +v 100.5 28.625 0 +v 99.8215 28.6032 0 +v 96.7229 28.4894 0 +v 94.8164 30.7297 0 +v 94.3503 33.1162 0 +v 98.7455 26.6094 0 +v 96.2224 29.3182 0 +v 94.6455 29.9925 0 +v 95.2778 30.2665 0 +v 95.1633 31.6462 0 +v 95.6326 30.9905 0 +v 97.7996 31.4202 0 +v 96.5211 32.1224 0 +v 96.756 31.0043 0 +v 95.9117 31.6861 0 +v 95.8584 32.4043 0 +v 96.9494 34.0485 0 +v 95.8624 33.5857 0 +v 93.7398 32.6859 0 +v 100.5 27.8438 0 +v 97.4662 27.1331 0 +v 95.8048 28.5005 0 +v 94.4556 31.4296 0 +v 94.1301 30.8189 0 +v 96.8868 30.0354 0 +v 95.0862 33.4159 0 +v 95.2636 34.4641 0 +v 94.4302 33.9731 0 +v 99.6468 26.7428 0 +v 97.144 26.4509 0 +v 98.0062 26.6278 0 +v 95.6438 29.0982 0 +v 96.4813 30.4739 0 +v 97.0273 29.2388 0 +v 98.1045 28.3647 0 +v 97.4327 28.6376 0 +v 98.2995 27.4824 0 +v 98.4586 29.9019 0 +v 97.2204 27.8802 0 +v 97.655 29.7602 0 +v 96.4729 27.2203 0 +v 98.1756 29.1577 0 +v 97.926 30.5729 0 +v 99.0634 28.6785 0 +v 93.8852 34.2687 0 +v 97.818 27.8387 0 +v 96.257 27.922 0 +v 95.9192 26.7481 0 +v 95.3215 27.0499 0 +v 100.5 30.1875 0 +v 97.3918 30.9263 0 +v 98.7407 28.0426 0 +v 98.6686 30.6155 0 +v 99.608 31.1446 0 +v 98.5518 31.3609 0 +v 98.9284 35.0657 0 +v 99.4874 29.9868 0 +v 98.2372 32.1701 0 +v 98.4641 36.7341 0 +v 97.3645 32.6744 0 +v 98.1677 34.0842 0 +v 100.5 36.4375 0 +v 97.5847 32.0483 0 +v 91.125 50.096 0 +v 91.6404 49.287 0 +v 91.1296 48.5359 0 +v 91.3832 47.8544 0 +v 92.0543 49.8611 0 +v 92.1754 48.857 0 +v 95.7285 43.1131 0 +v 96.3192 43.8574 0 +v 97.0198 43.5477 0 +v 96.4544 43.216 0 +v 97.7088 43.4503 0 +v 96.4587 44.6111 0 +v 96.1337 40.6342 0 +v 96.5752 40.1041 0 +v 97.5297 39.6708 0 +v 96.8648 42.4616 0 +v 100.5 45.0312 0 +v 99.8743 44.5597 0 +v 100.5 41.125 0 +v 98.8221 44.4052 0 +v 100.5 41.9062 0 +v 99.5393 42.8474 0 +v 98.9404 42.1864 0 +v 99.6816 41.5156 0 +v 100.136 43.4688 0 +v 98.0404 42.274 0 +v 99.8538 42.2075 0 +v 97.9691 42.8888 0 +v 97.4523 42.2767 0 +v 100.5 39.5625 0 +v 99.8987 40.9178 0 +v 100.5 40.3438 0 +v 100.029 46.5938 0 +v 98.8534 46.3317 0 +v 97.3182 44.9432 0 +v 95.5407 39.4388 0 +v 95.9941 36.0005 0 +v 96.0268 35.0431 0 +v 95.9815 34.3102 0 +v 97.4278 35.5701 0 +v 96.781 36.0186 0 +v 96.741 35.2702 0 +v 97.7934 36.7883 0 +v 97.377 34.7501 0 +v 97.162 36.5681 0 +v 97.1998 37.4755 0 +v 98.1103 35.1163 0 +v 96.5346 37.6709 0 +v 98.1224 39.5841 0 +v 98.58 36.0713 0 +v 98.4362 37.4064 0 +v 98.194 38.9895 0 +v 97.8694 38.095 0 +v 98.7712 38.2329 0 +v 97.3706 33.426 0 +v 96.6009 33.359 0 +v 96.0849 32.9943 0 +v 100.5 34.875 0 +v 97.4581 38.9364 0 +v 99.3106 39.2428 0 +v 99.5594 37.1164 0 +v 99.9673 39.1719 0 +v 100.5 38.7812 0 +v 99.6584 38.2855 0 +v 98.5512 40.0023 0 +v 98.8102 38.8611 0 +v 100.5 37.2188 0 +v 99.0909 37.6222 0 +v 99.9204 37.6745 0 +v 84.0031 30.048 0 +v 83.0715 29.9357 0 +v 82.9521 29.3038 0 +v 83.4511 30.7072 0 +v 82.4219 30.0299 0 +v 82.7772 30.8615 0 +v 89.952 30.139 0 +v 97.2739 2.62603 0 +v 98.9375 0.5 0 +v 97.9991 17.1735 0 +v 96.3622 16.8209 0 +v 93.9064 29.6359 0 +v 93.2149 29.8024 0 +v 97.6743 18.3436 0 +v 99.0769 22.8515 0 +v 99.5362 20.8542 0 +v 98.9032 20.5105 0 +v 99.3516 19.987 0 +v 98.853 21.8853 0 +v 100.048 21.533 0 +v 100.5 16.9062 0 +v 99.8411 17.0203 0 +v 99.2614 15.1197 0 +v 93.9291 24.5619 0 +v 93.4144 24.0277 0 +v 94.31 24.0503 0 +v 97.7282 23.0236 0 +v 99.6716 24.259 0 +v 99.8367 22.7573 0 +v 99.8316 23.5166 0 +v 100.5 24.7188 0 +v 99.9058 24.8132 0 +v 94.8396 34.9709 0 +v 100.5 27.0625 0 +v 99.9461 29.2705 0 +v 99.2615 29.3372 0 +v 100.5 30.9688 0 +v 99.9063 30.5284 0 +v 97.0222 31.6439 0 +v 99.8247 45.2769 0 +v 97.7874 41.1723 0 +v 99.7366 43.9497 0 +v 96.5831 34.6147 0 +v 96.7257 32.73 0 +v 100.5 33.3125 0 +v 98.8847 31.956 0 +v 98.2852 33.1301 0 +v 98.8064 32.6561 0 +v 100.5 32.5312 0 +v 99.3174 33.7415 0 +v 98.6676 33.6615 0 +v 98.9136 34.3421 0 +v 99.7532 34.4706 0 +v 99.5227 31.7966 0 +v 99.6891 32.9219 0 +v 100.015 33.8194 0 +v 99.3665 32.3947 0 +v 97.8836 36.0972 0 +v 99.1829 39.8745 0 +v 98.9517 40.6013 0 +v 98.2478 40.6385 0 +v 99.614 35.8664 0 +v 99.8492 35.185 0 +v 100.5 35.6562 0 +v 97.6623 1.96986 0 +v 97.2495 1.24715 0 +v 96.2855 1.34577 0 +v 96.5938 0.5 0 +v 96.3862 1.97746 0 +v 95.3546 1.31117 0 +v 95.8055 1.72121 0 +v 95.0313 0.5 0 +v 94.6665 1.11544 0 +v 98.8299 1.69473 0 +v 98.1563 1.01539 0 +v 98.7638 1.08657 0 +v 99.7188 1.0503 0 +v 98.2018 1.64396 0 +v 100.5 1.28125 0 +v 99.8829 16.3609 0 +v 98.2395 41.6484 0 +v 99.0371 35.6665 0 +v 99.8313 36.5021 0 +v 99.1292 36.5089 0 +v 99.6594 1.90367 0 +v 100.5 2.84375 0 +v 99.0874 2.42351 0 +v 99.7289 2.85165 0 +v 9.15912 32.493 0 +v 9.07694 31.5455 0 +v 9.7809 32.3202 0 +v 8.27121 31.192 0 +v 7.36615 31.7354 0 +v 7.4463 31.0193 0 +v 8.85655 30.3685 0 +v 8.84469 30.9799 0 +v 8.31504 29.6828 0 +v 7.59614 29.2016 0 +v 7.44513 29.8683 0 +v 8.82496 29.3123 0 +v 9.51284 30.199 0 +v 21.0805 36.981 0 +v 23.0025 32.1343 0 +v 23.9309 33.3537 0 +v 26.2525 28.4108 0 +v 11.2449 20.9784 0 +v 18.3596 19.7643 0 +v 0.967794 15.9688 0 +v 0.957274 16.9062 0 +v 1.13307 19.081 0 +v 1.03862 17.8438 0 +v 31.2212 27.4009 0 +v 0.500183 10.8125 0 +v 0.951028 11.2812 0 +v 34.7502 28.2829 0 +v 34.4685 27.6088 0 +v 35.1527 27.7188 0 +v 35.1501 28.7818 0 +v 22.8695 17.1614 0 +v 27.2573 20.6137 0 +v 26.5699 20.7627 0 +v 27.5603 20.0165 0 +v 40.3886 19.9368 0 +v 2.76499 27.8137 0 +v 1.24625 27.4828 0 +v 32.6411 44.1031 0 +v 32.2043 43.596 0 +v 33.2117 44.4272 0 +v 32.6053 44.6999 0 +v 18.0517 9.37216 0 +v 17.6971 9.95589 0 +v 17.3659 9.13257 0 +v 6.76581 7.38698 0 +v 18.879 7.99171 0 +v 19.1639 7.1427 0 +v 18.0046 8.40579 0 +v 17.7996 7.68251 0 +v 18.4224 7.26254 0 +v 19.8232 7.50311 0 +v 19.6858 8.32333 0 +v 18.968 9.00244 0 +v 18.659 9.55678 0 +v 18.3825 8.87168 0 +v 18.2916 10.0301 0 +v 9.18911 7.58338 0 +v 10.5443 4.10557 0 +v 10.4054 4.72345 0 +v 44.5254 18.6541 0 +v 44.521 18.0098 0 +v 44.0649 19.1327 0 +v 43.8756 18.3753 0 +v 45.306 19.3923 0 +v 45.8811 18.9359 0 +v 46.167 19.5403 0 +v 45.1514 20.2513 0 +v 44.478 20.4323 0 +v 44.6887 19.2632 0 +v 45.2197 18.7018 0 +v 45.1018 18.1222 0 +v 23.6207 1.46097 0 +v 23.3626 2.00856 0 +v 24.1248 1.09449 0 +v 45.8809 23.6894 0 +v 46.3853 24.1183 0 +v 45.538 24.233 0 +v 45.2457 23.4976 0 +v 26.8763 47.6753 0 +v 45.2912 9.45128 0 +v 45.0199 5.72007 0 +v 29.6649 34.3508 0 +v 30.7052 6.30945 0 +v 30.5095 6.89368 0 +v 30.011 6.17651 0 +v 30.8073 5.59482 0 +v 38.4678 1.1807 0 +v 52.9315 34.046 0 +v 52.8459 33.332 0 +v 54.5788 22.1635 0 +v 54.7195 13.5074 0 +v 54.4028 12.8542 0 +v 53.6509 12.6706 0 +v 58.2008 21.0488 0 +v 35.7149 38.3899 0 +v 67.0321 12.0841 0 +v 60.7908 1.44489 0 +v 60.4341 1.97137 0 +v 60.3275 1.02883 0 +v 61.2829 1.08793 0 +v 54.4063 0.870241 0 +v 33.9273 46.5578 0 +v 65.6917 38.3233 0 +v 68.6825 27.9896 0 +v 68.1208 28.2881 0 +v 68.3397 27.4512 0 +v 69.1928 27.6076 0 +v 69.2948 28.5911 0 +v 69.5263 29.2356 0 +v 64.3662 44.0336 0 +v 64.8384 44.6076 0 +v 39.1672 49.7228 0 +v 71.8452 40.551 0 +v 68.9231 47.3895 0 +v 72.6673 26.793 0 +v 72.2703 27.287 0 +v 73.3322 26.8911 0 +v 75.5417 37.2289 0 +v 75.0649 36.7834 0 +v 74.8967 37.5459 0 +v 82.908 7.90575 0 +v 82.541 7.39654 0 +v 83.4193 7.45492 0 +v 95.4711 5.02988 0 +v 99.25 50.5 0 +v 99.7192 47.8174 0 +v 100.096 26.1372 0 +v 99.9188 27.3154 0 +v 99.1222 27.3428 0 +v 99.4588 27.9803 0 +v 97.5403 40.4132 0 +v 1.44909 18.4347 0 +v 1.98477 27.7132 0 +v 2.47267 29.5228 0 +v 1.69075 28.3817 0 +v 2.49611 27.1918 0 +v 0.500183 27.6875 0 +v 3.1945 29.242 0 +v 3.53802 30.7547 0 +v 3.31388 30.0102 0 +v 2.73013 30.0481 0 +v 1.8253 29.878 0 +v 2.24778 28.8385 0 +v 1.45216 29.2408 0 +v 1.52264 30.5515 0 +v 0.500183 29.5625 0 +v 1.13352 28.6896 0 +v 1.03632 30.0312 0 +v 1.00599 28.069 0 +v 1.05258 26.9338 0 +v 4.02962 30.2302 0 +v 76.0391 36.6805 0 +v 76.2059 37.4507 0 +v 75.6016 37.9732 0 +v 98.625 50.043 0 +v 98.8321 48.5266 0 +v 98.8247 47.7446 0 +v 100.5 48.9375 0 +v 99.5618 49.1554 0 +v 99.2829 49.7992 0 +v 100.108 49.7741 0 +v 99.875 50.5 0 +v 100.5 48.1562 0 +v 99.8805 48.5146 0 +v 17.3175 19.9399 0 +v 17.2445 20.5481 0 +v 40.247 27.1464 0 +v 31.1252 50.2248 0 +v 32.3752 50.5 0 +v 30.9176 49.6581 0 +v 88.3674 1.09303 0 +v 90.3438 0.827062 0 +v 45.3581 45.9412 0 +v 18.4561 33.9377 0 +v 36.9667 14.63 0 +v 27.3255 24.8725 0 + + + + + + +f 888 97 607 +f 855 274 514 +f 78 267 28 +f 366 774 446 +f 890 758 159 +f 714 134 120 +f 998 983 988 +f 104 29 8379 +f 709 298 190 +f 741 911 733 +f 351 389 150 +f 113 106 112 +f 102 117 91 +f 397 30 173 +f 8377 29 8380 +f 291 155 680 +f 8409 8509 72 +f 262 148 468 +f 386 259 124 +f 9 34 33 +f 466 825 370 +f 82 718 479 +f 731 424 687 +f 697 359 623 +f 216 384 343 +f 36 43 8 +f 739 79 74 +f 42 55 120 +f 180 367 398 +f 539 13 538 +f 8380 8382 8385 +f 47 52 36 +f 11 209 285 +f 109 604 75 +f 31 290 289 +f 198 447 226 +f 724 442 164 +f 118 51 91 +f 34 334 37 +f 56 268 711 +f 39 48 717 +f 10 33 37 +f 282 31 713 +f 33 34 37 +f 34 9 52 +f 48 770 777 +f 359 294 275 +f 454 480 256 +f 712 40 887 +f 721 168 279 +f 901 855 873 +f 270 34 47 +f 448 715 450 +f 487 590 73 +f 208 84 209 +f 8 257 36 +f 88 254 42 +f 828 773 118 +f 89 275 712 +f 772 50 271 +f 359 275 207 +f 50 256 271 +f 158 330 613 +f 713 31 284 +f 52 9 43 +f 208 55 42 +f 110 58 483 +f 107 38 268 +f 117 118 91 +f 268 35 92 +f 278 35 82 +f 828 53 773 +f 40 78 115 +f 49 51 257 +f 118 111 828 +f 75 281 45 +f 117 102 278 +f 8525 6096 6754 +f 92 103 106 +f 47 36 70 +f 480 23 26 +f 273 711 268 +f 102 91 7 +f 612 88 739 +f 610 61 83 +f 34 52 47 +f 25 47 70 +f 79 64 74 +f 121 161 85 +f 83 769 66 +f 71 63 142 +f 63 140 888 +f 73 233 46 +f 236 434 623 +f 88 121 254 +f 2 62 59 +f 8547 332 77 +f 611 348 147 +f 340 27 259 +f 349 270 25 +f 607 360 296 +f 765 262 468 +f 607 81 280 +f 622 122 95 +f 232 141 498 +f 626 288 441 +f 267 78 45 +f 261 121 85 +f 717 803 348 +f 1402 379 65 +f 447 748 226 +f 8388 494 377 +f 79 739 719 +f 258 256 26 +f 123 125 483 +f 172 243 68 +f 158 613 166 +f 717 342 803 +f 109 260 604 +f 205 431 253 +f 346 379 617 +f 271 46 233 +f 369 66 482 +f 887 772 89 +f 268 92 273 +f 264 54 220 +f 482 66 41 +f 827 720 287 +f 79 851 64 +f 275 294 109 +f 278 82 479 +f 81 296 214 +f 782 104 3 +f 296 614 214 +f 250 237 616 +f 74 8387 161 +f 75 76 712 +f 8513 622 8524 +f 211 81 214 +f 274 97 263 +f 8547 610 332 +f 53 41 70 +f 454 115 331 +f 103 92 35 +f 285 84 284 +f 10 208 86 +f 769 25 70 +f 94 109 294 +f 58 38 123 +f 269 828 111 +f 449 64 614 +f 493 176 697 +f 66 369 83 +f 8377 8378 8379 +f 772 69 89 +f 107 268 56 +f 269 369 482 +f 111 718 269 +f 605 715 26 +f 105 106 103 +f 273 113 114 +f 45 266 267 +f 225 589 475 +f 87 355 72 +f 399 241 664 +f 515 796 427 +f 697 827 335 +f 134 714 349 +f 482 41 828 +f 98 455 31 +f 49 7 91 +f 113 266 114 +f 715 605 277 +f 109 94 260 +f 94 444 125 +f 334 55 37 +f 7 99 102 +f 102 99 105 +f 6 105 99 +f 84 143 284 +f 888 607 63 +f 65 22 340 +f 106 105 6 +f 102 105 103 +f 454 40 115 +f 98 31 282 +f 48 450 770 +f 82 35 38 +f 107 123 38 +f 106 6 112 +f 39 333 616 +f 83 61 716 +f 716 61 157 +f 346 131 22 +f 89 712 887 +f 6 108 112 +f 108 116 112 +f 108 5 116 +f 8376 113 116 +f 266 281 114 +f 342 48 777 +f 828 41 53 +f 769 41 66 +f 116 5 8376 +f 112 116 113 +f 604 260 107 +f 210 211 719 +f 277 770 450 +f 40 712 76 +f 67 228 341 +f 63 71 140 +f 891 27 158 +f 778 891 166 +f 205 443 421 +f 714 120 55 +f 57 742 54 +f 8511 122 622 +f 329 868 127 +f 60 77 280 +f 65 340 259 +f 8389 179 293 +f 232 358 151 +f 184 777 613 +f 412 219 766 +f 71 151 295 +f 54 877 220 +f 463 627 246 +f 219 146 127 +f 382 219 127 +f 464 338 847 +f 212 580 516 +f 329 230 868 +f 8409 8506 8509 +f 142 77 141 +f 182 274 263 +f 465 261 85 +f 67 133 228 +f 148 611 276 +f 163 62 2 +f 133 67 62 +f 74 161 612 +f 619 216 401 +f 362 343 395 +f 282 465 354 +f 227 152 493 +f 134 349 719 +f 323 823 768 +f 496 434 303 +f 155 291 384 +f 135 130 783 +f 230 394 387 +f 448 46 715 +f 395 618 229 +f 494 263 90 +f 125 260 94 +f 361 364 565 +f 355 87 386 +f 623 359 207 +f 151 847 295 +f 329 373 230 +f 677 193 890 +f 279 173 336 +f 613 330 184 +f 156 126 794 +f 135 783 337 +f 405 221 184 +f 168 444 279 +f 719 211 851 +f 767 27 891 +f 343 362 235 +f 203 167 789 +f 597 352 595 +f 362 875 235 +f 358 232 484 +f 135 337 766 +f 150 395 229 +f 8387 64 449 +f 813 599 800 +f 80 664 241 +f 336 534 423 +f 206 627 165 +f 463 621 383 +f 761 227 381 +f 145 798 690 +f 223 624 235 +f 374 241 436 +f 359 697 335 +f 232 71 141 +f 228 767 341 +f 793 632 671 +f 385 804 531 +f 798 145 164 +f 160 858 893 +f 494 182 263 +f 360 901 614 +f 338 217 377 +f 158 340 22 +f 65 379 346 +f 221 803 184 +f 549 893 647 +f 404 321 585 +f 363 375 144 +f 1074 650 816 +f 611 147 276 +f 739 88 134 +f 383 627 463 +f 3461 2925 3241 +f 237 448 450 +f 131 406 473 +f 64 851 214 +f 8392 248 844 +f 875 223 235 +f 1524 1525 1283 +f 426 485 869 +f 338 90 140 +f 241 374 877 +f 2755 2757 1816 +f 354 441 288 +f 200 589 521 +f 448 237 250 +f 30 175 534 +f 320 741 683 +f 467 243 172 +f 351 370 825 +f 469 240 363 +f 858 145 690 +f 125 399 483 +f 719 851 79 +f 93 456 455 +f 204 253 249 +f 167 576 601 +f 543 485 426 +f 672 298 180 +f 308 661 323 +f 497 345 526 +f 827 176 466 +f 354 465 304 +f 388 180 368 +f 752 509 321 +f 184 803 777 +f 399 168 721 +f 865 688 502 +f 526 574 840 +f 403 497 526 +f 398 597 368 +f 728 239 628 +f 692 728 628 +f 689 704 747 +f 217 566 377 +f 204 417 750 +f 916 600 752 +f 139 249 191 +f 314 411 732 +f 577 648 201 +f 388 368 595 +f 629 630 185 +f 600 916 570 +f 900 561 407 +f 566 313 762 +f 144 682 469 +f 502 850 693 +f 255 413 227 +f 406 131 617 +f 197 704 542 +f 202 490 689 +f 753 319 821 +f 675 318 491 +f 300 686 836 +f 310 447 631 +f 529 707 1178 +f 724 356 520 +f 740 507 491 +f 473 445 221 +f 372 206 165 +f 226 473 406 +f 704 420 542 +f 790 776 492 +f 147 431 276 +f 445 139 191 +f 8391 154 576 +f 1282 1518 188 +f 310 631 300 +f 687 424 283 +f 356 402 520 +f 617 198 406 +f 263 97 888 +f 254 143 42 +f 11 86 209 +f 37 208 10 +f 208 209 86 +f 521 633 832 +f 387 347 234 +f 157 81 211 +f 782 67 132 +f 118 479 111 +f 100 467 172 +f 4 8375 8374 +f 213 8376 8375 +f 851 211 214 +f 664 483 399 +f 401 343 624 +f 383 389 215 +f 142 141 71 +f 875 621 463 +f 637 308 137 +f 313 217 464 +f 469 363 144 +f 463 246 870 +f 294 359 335 +f 146 373 329 +f 441 354 304 +f 1069 513 1088 +f 682 381 227 +f 30 336 173 +f 390 224 736 +f 888 140 90 +f 496 413 434 +f 675 196 318 +f 223 875 870 +f 589 759 521 +f 8388 179 494 +f 376 247 426 +f 344 358 353 +f 943 945 930 +f 298 672 190 +f 590 487 243 +f 767 891 101 +f 810 449 815 +f 825 149 389 +f 868 230 387 +f 230 373 619 +f 236 772 233 +f 487 68 243 +f 71 295 140 +f 741 320 911 +f 525 725 242 +f 141 608 498 +f 250 73 46 +f 216 155 384 +f 222 725 224 +f 483 664 110 +f 382 130 135 +f 36 53 70 +f 436 241 721 +f 398 367 879 +f 695 763 462 +f 345 824 746 +f 420 806 644 +f 437 127 868 +f 374 378 877 +f 222 372 392 +f 761 381 462 +f 744 907 792 +f 175 291 784 +f 749 203 185 +f 709 411 367 +f 374 436 558 +f 223 870 518 +f 363 240 192 +f 222 178 242 +f 136 495 758 +f 663 567 407 +f 649 239 728 +f 524 470 568 +f 758 890 136 +f 310 139 748 +f 763 695 392 +f 198 226 406 +f 376 771 238 +f 855 514 873 +f 220 877 378 +f 1188 1091 181 +f 602 788 801 +f 304 415 441 +f 766 641 412 +f 313 678 762 +f 648 1110 833 +f 303 434 236 +f 55 334 714 +f 28 115 78 +f 607 296 81 +f 610 608 332 +f 348 153 147 +f 278 479 117 +f 75 604 281 +f 277 450 715 +f 271 256 258 +f 157 210 716 +f 1697 1525 1282 +f 344 766 337 +f 284 143 713 +f 172 262 100 +f 68 616 333 +f 185 428 629 +f 42 143 84 +f 782 3 59 +f 772 887 50 +f 104 782 132 +f 94 287 444 +f 110 664 80 +f 58 110 718 +f 282 261 465 +f 113 213 266 +f 267 266 213 +f 8375 267 213 +f 273 92 106 +f 237 48 39 +f 610 264 220 +f 208 42 84 +f 855 97 274 +f 771 376 760 +f 162 355 122 +f 35 268 38 +f 118 117 479 +f 281 266 45 +f 82 58 718 +f 331 480 454 +f 214 614 64 +f 212 161 119 +f 621 389 383 +f 22 330 158 +f 254 261 143 +f 773 53 257 +f 210 349 25 +f 148 276 468 +f 288 98 354 +f 333 148 68 +f 113 273 106 +f 872 710 459 +f 460 290 456 +f 623 255 697 +f 161 212 85 +f 711 114 281 +f 35 278 103 +f 261 713 143 +f 454 887 40 +f 865 703 670 +f 456 458 460 +f 11 285 452 +f 285 209 84 +f 284 289 452 +f 452 451 11 +f 284 31 289 +f 273 114 711 +f 397 827 466 +f 275 109 712 +f 471 884 775 +f 455 456 290 +f 281 604 711 +f 452 289 286 +f 539 872 459 +f 289 290 541 +f 349 714 270 +f 129 387 394 +f 661 347 138 +f 249 139 204 +f 362 150 621 +f 128 586 680 +f 97 360 607 +f 25 769 716 +f 458 283 457 +f 67 782 62 +f 157 211 210 +f 125 123 107 +f 515 471 509 +f 417 300 490 +f 752 321 917 +f 841 831 495 +f 305 872 424 +f 313 583 435 +f 253 153 249 +f 139 445 748 +f 660 586 641 +f 469 413 496 +f 631 1519 811 +f 578 305 418 +f 587 311 422 +f 303 590 496 +f 433 587 422 +f 293 701 679 +f 2061 812 867 +f 566 762 8388 +f 679 8389 293 +f 519 907 744 +f 753 328 1192 +f 418 723 655 +f 507 740 580 +f 180 298 367 +f 806 920 644 +f 93 455 414 +f 688 425 883 +f 1200 2702 524 +f 640 563 317 +f 564 656 764 +f 640 634 563 +f 510 476 488 +f 418 305 424 +f 709 533 499 +f 311 302 673 +f 764 583 130 +f 731 723 418 +f 283 872 539 +f 673 440 626 +f 731 418 424 +f 886 880 705 +f 792 907 787 +f 693 602 488 +f 549 647 839 +f 167 8391 576 +f 388 595 822 +f 883 501 850 +f 819 1065 530 +f 320 517 737 +f 544 326 737 +f 516 740 415 +f 567 779 407 +f 700 596 871 +f 917 404 874 +f 972 1142 970 +f 446 225 366 +f 884 471 427 +f 868 564 437 +f 751 1067 832 +f 568 470 430 +f 1102 1105 1106 +f 645 653 552 +f 572 818 579 +f 3462 3463 510 +f 1415 1184 1537 +f 783 130 464 +f 80 57 269 +f 782 59 62 +f 8375 8381 28 +f 49 91 51 +f 47 25 270 +f 303 233 73 +f 46 258 715 +f 83 716 769 +f 49 257 8 +f 89 69 207 +f 295 847 338 +f 142 63 280 +f 42 120 88 +f 124 767 228 +f 36 52 43 +f 135 766 219 +f 227 761 152 +f 444 720 173 +f 264 369 269 +f 338 464 217 +f 95 228 339 +f 348 803 191 +f 120 134 88 +f 27 340 158 +f 358 344 337 +f 350 386 124 +f 875 362 621 +f 107 260 125 +f 373 128 216 +f 373 146 128 +f 825 218 149 +f 255 493 697 +f 129 619 396 +f 329 127 146 +f 231 175 30 +f 825 389 351 +f 399 125 168 +f 742 241 877 +f 618 175 231 +f 158 166 891 +f 90 263 888 +f 611 148 333 +f 619 129 394 +f 129 347 387 +f 222 392 375 +f 761 462 149 +f 446 1090 633 +f 716 210 25 +f 73 250 487 +f 1341 1402 72 +f 141 77 332 +f 713 261 282 +f 344 353 641 +f 8409 355 162 +f 122 350 95 +f 348 611 717 +f 378 498 608 +f 8388 762 701 +f 401 265 396 +f 65 346 22 +f 57 54 264 +f 339 622 95 +f 378 374 292 +f 176 152 218 +f 194 1071 574 +f 763 165 215 +f 375 363 192 +f 279 336 423 +f 856 647 708 +f 234 564 387 +f 176 493 152 +f 544 915 326 +f 854 486 768 +f 397 370 30 +f 492 776 824 +f 791 180 388 +f 472 555 430 +f 389 621 150 +f 269 718 80 +f 769 70 41 +f 347 661 361 +f 321 509 585 +f 558 594 353 +f 486 854 244 +f 565 634 640 +f 175 618 291 +f 347 361 234 +f 344 641 766 +f 178 375 192 +f 499 533 735 +f 231 370 351 +f 720 397 173 +f 372 165 763 +f 375 392 695 +f 174 246 627 +f 14 44 710 +f 236 623 69 +f 526 345 248 +f 791 24 672 +f 399 721 241 +f 428 789 192 +f 574 1071 562 +f 781 913 1107 +f 405 184 330 +f 337 847 151 +f 836 490 300 +f 381 695 462 +f 632 518 870 +f 790 492 799 +f 484 292 358 +f 856 683 726 +f 222 375 178 +f 1402 65 87 +f 629 469 467 +f 229 618 231 +f 619 373 216 +f 379 170 1699 +f 238 247 376 +f 222 224 372 +f 1177 1067 751 +f 159 486 890 +f 194 574 248 +f 14 710 676 +f 212 119 809 +f 397 466 370 +f 126 409 854 +f 500 481 187 +f 367 411 879 +f 825 466 176 +f 138 129 156 +f 218 152 761 +f 624 371 849 +f 390 671 174 +f 783 464 847 +f 8539 554 899 +f 678 313 435 +f 682 413 469 +f 46 448 250 +f 381 144 695 +f 624 223 371 +f 812 723 433 +f 182 179 775 +f 343 384 395 +f 235 624 343 +f 779 788 900 +f 575 902 527 +f 831 533 495 +f 548 169 187 +f 145 625 164 +f 188 1518 447 +f 130 382 764 +f 240 428 192 +f 631 811 300 +f 749 765 356 +f 391 1142 972 +f 195 779 567 +f 416 678 592 +f 1517 1282 1524 +f 914 481 652 +f 243 496 590 +f 496 467 469 +f 860 299 676 +f 182 775 884 +f 252 799 244 +f 856 620 531 +f 633 1090 816 +f 856 708 620 +f 666 898 699 +f 353 292 558 +f 327 681 410 +f 775 8389 585 +f 501 196 602 +f 212 304 465 +f 495 159 758 +f 468 421 443 +f 1700 1698 1699 +f 762 678 416 +f 730 432 315 +f 666 197 681 +f 167 760 789 +f 413 682 227 +f 253 431 153 +f 535 441 415 +f 747 197 666 +f 678 435 432 +f 302 96 93 +f 704 197 747 +f 784 534 175 +f 292 484 378 +f 414 288 440 +f 299 814 15 +f 645 422 703 +f 844 248 345 +f 810 189 598 +f 437 564 764 +f 96 302 643 +f 164 442 798 +f 666 826 489 +f 693 488 476 +f 185 203 428 +f 748 445 473 +f 191 249 348 +f 674 781 410 +f 188 447 198 +f 642 546 653 +f 645 808 422 +f 674 410 542 +f 812 808 867 +f 750 253 204 +f 634 565 637 +f 1001 1003 981 +f 1088 1081 1082 +f 1035 1721 1031 +f 318 535 415 +f 565 638 234 +f 432 592 678 +f 836 686 420 +f 597 595 368 +f 721 423 436 +f 147 153 431 +f 438 202 699 +f 202 438 750 +f 410 197 542 +f 660 680 586 +f 748 473 226 +f 789 760 186 +f 244 729 252 +f 469 629 240 +f 914 652 181 +f 1079 1081 513 +f 310 748 447 +f 1073 1336 1178 +f 1269 841 665 +f 764 656 583 +f 160 145 858 +f 590 303 73 +f 692 796 515 +f 574 861 840 +f 61 8547 60 +f 81 157 60 +f 60 157 61 +f 767 124 27 +f 284 452 285 +f 453 451 452 +f 453 452 286 +f 460 453 286 +f 12 451 453 +f 271 258 46 +f 719 739 134 +f 288 414 98 +f 31 455 290 +f 440 673 93 +f 537 453 460 +f 44 13 459 +f 537 536 12 +f 80 742 57 +f 458 457 460 +f 335 827 287 +f 809 580 212 +f 538 536 537 +f 286 541 460 +f 222 242 725 +f 463 870 875 +f 200 575 885 +f 656 317 654 +f 337 151 358 +f 231 351 229 +f 265 156 396 +f 343 401 216 +f 404 585 8389 +f 48 237 450 +f 564 868 387 +f 8406 169 1573 +f 2929 2924 3238 +f 185 765 749 +f 68 487 616 +f 225 696 366 +f 22 405 330 +f 863 757 520 +f 686 811 1520 +f 675 561 900 +f 667 658 830 +f 8549 633 759 +f 746 554 8539 +f 472 430 470 +f 704 689 836 +f 1519 722 1520 +f 317 638 640 +f 322 505 563 +f 675 491 561 +f 883 502 688 +f 506 734 903 +f 657 726 903 +f 567 635 195 +f 935 1139 938 +f 833 738 551 +f 251 838 551 +f 480 331 8385 +f 26 256 480 +f 785 605 23 +f 26 23 605 +f 629 467 100 +f 34 270 334 +f 341 767 101 +f 254 121 261 +f 785 23 8383 +f 605 778 277 +f 498 484 232 +f 230 619 394 +f 348 249 153 +f 220 378 608 +f 468 276 421 +f 417 490 202 +f 467 496 243 +f 203 749 167 +f 800 882 489 +f 385 531 620 +f 68 262 172 +f 518 252 371 +f 601 941 760 +f 202 689 699 +f 428 203 789 +f 397 720 827 +f 877 54 742 +f 372 763 392 +f 492 824 497 +f 237 39 616 +f 768 486 24 +f 227 493 255 +f 502 693 400 +f 793 776 632 +f 801 788 662 +f 1179 499 735 +f 136 861 841 +f 8391 167 749 +f 124 259 27 +f 71 232 151 +f 794 323 138 +f 318 501 316 +f 432 730 307 +f 779 900 407 +f 593 685 733 +f 880 1137 705 +f 597 398 835 +f 189 796 692 +f 873 514 796 +f 1105 652 512 +f 318 740 491 +f 24 791 768 +f 862 910 582 +f 518 790 252 +f 592 307 862 +f 703 653 645 +f 649 472 691 +f 183 1091 1188 +f 429 838 544 +f 572 702 915 +f 812 668 655 +f 929 927 928 +f 1074 1075 912 +f 794 823 323 +f 755 702 817 +f 840 136 193 +f 971 8538 970 +f 670 311 688 +f 884 514 274 +f 1107 429 517 +f 824 894 746 +f 835 596 475 +f 652 500 532 +f 635 472 470 +f 786 461 933 +f 916 752 917 +f 653 703 865 +f 543 426 247 +f 311 670 422 +f 848 653 546 +f 509 555 477 +f 628 478 692 +f 205 253 750 +f 544 251 915 +f 756 639 685 +f 1879 923 1297 +f 643 723 731 +f 737 429 544 +f 525 426 869 +f 196 788 602 +f 327 620 826 +f 481 700 187 +f 511 578 560 +f 520 757 522 +f 792 787 657 +f 871 411 314 +f 408 686 1520 +f 251 544 838 +f 687 643 731 +f 485 543 899 +f 1517 1196 722 +f 918 651 734 +f 1121 1205 921 +f 826 813 800 +f 201 644 920 +f 651 324 734 +f 733 506 741 +f 322 905 312 +f 375 695 144 +f 630 765 185 +f 45 76 75 +f 287 94 335 +f 643 587 723 +f 539 459 13 +f 453 537 12 +f 537 457 538 +f 457 537 460 +f 539 538 457 +f 13 536 538 +f 687 458 96 +f 283 539 457 +f 93 96 456 +f 459 710 44 +f 289 541 286 +f 290 460 541 +f 641 594 660 +f 477 649 728 +f 486 159 24 +f 843 885 853 +f 1108 577 319 +f 705 1136 508 +f 1992 1893 1377 +f 160 893 549 +f 1106 1190 545 +f 1199 1192 1193 +f 593 733 911 +f 1135 694 177 +f 779 662 788 +f 906 839 787 +f 199 648 551 +f 725 736 224 +f 509 477 515 +f 839 726 787 +f 171 491 507 +f 435 654 315 +f 244 799 677 +f 708 893 858 +f 1344 1261 1346 +f 1262 1348 1350 +f 505 730 588 +f 551 838 199 +f 741 506 903 +f 561 171 663 +f 1328 987 994 +f 776 793 824 +f 752 430 555 +f 1065 579 738 +f 684 325 571 +f 302 587 643 +f 904 324 908 +f 317 563 588 +f 1068 859 8390 +f 679 582 474 +f 807 929 928 +f 1200 524 568 +f 808 812 433 +f 898 757 863 +f 850 602 693 +f 48 342 717 +f 509 752 555 +f 474 404 679 +f 307 508 862 +f 564 234 638 +f 797 615 676 +f 313 130 583 +f 8390 636 312 +f 439 316 883 +f 1205 1124 1293 +f 663 239 691 +f 8406 187 169 +f 569 160 549 +f 1579 314 732 +f 411 871 879 +f 681 327 826 +f 768 606 323 +f 633 650 698 +f 560 578 418 +f 523 669 881 +f 862 508 306 +f 884 274 182 +f 1566 1565 1580 +f 569 829 807 +f 915 702 326 +f 724 522 442 +f 1453 1446 1448 +f 206 390 174 +f 1077 1078 393 +f 1071 194 1072 +f 839 856 726 +f 1103 512 532 +f 848 658 245 +f 752 600 430 +f 1138 880 1208 +f 856 531 683 +f 548 187 700 +f 797 676 710 +f 1177 743 1067 +f 414 440 93 +f 364 637 565 +f 701 416 582 +f 1881 1879 1297 +f 308 637 364 +f 283 424 872 +f 582 416 592 +f 729 849 252 +f 654 435 656 +f 311 673 425 +f 559 505 312 +f 701 293 8388 +f 846 857 895 +f 869 725 525 +f 420 704 836 +f 233 303 236 +f 842 1377 15 +f 311 587 302 +f 723 812 655 +f 526 248 574 +f 1395 1612 1414 +f 910 727 874 +f 673 302 93 +f 730 559 924 +f 894 554 746 +f 435 315 432 +f 1179 735 1180 +f 625 160 807 +f 916 177 694 +f 918 685 639 +f 756 685 593 +f 914 696 481 +f 429 1107 913 +f 1123 1117 892 +f 400 642 502 +f 568 600 570 +f 145 160 625 +f 366 696 914 +f 195 3242 779 +f 196 501 318 +f 1118 653 848 +f 471 775 585 +f 8383 341 603 +f 56 604 107 +f 860 676 615 +f 520 522 724 +f 161 8387 119 +f 691 567 663 +f 228 133 339 +f 742 80 241 +f 879 835 398 +f 264 610 369 +f 1004 1001 1000 +f 449 614 901 +f 142 280 77 +f 360 614 296 +f 257 53 36 +f 350 122 355 +f 612 161 121 +f 62 163 133 +f 697 176 827 +f 473 221 405 +f 603 341 101 +f 30 534 336 +f 256 50 454 +f 65 259 386 +f 620 327 385 +f 604 56 711 +f 1018 1017 1022 +f 174 627 206 +f 65 386 87 +f 383 165 627 +f 81 60 280 +f 215 149 462 +f 269 482 828 +f 778 770 277 +f 372 224 206 +f 890 193 136 +f 777 803 342 +f 1702 1701 1759 +f 269 57 264 +f 141 332 608 +f 618 395 384 +f 265 866 156 +f 138 347 129 +f 462 763 215 +f 918 734 506 +f 889 968 8392 +f 216 128 155 +f 165 383 215 +f 521 832 575 +f 578 511 1880 +f 305 578 1880 +f 177 727 1135 +f 863 520 443 +f 724 8391 356 +f 402 468 443 +f 98 414 455 +f 300 417 310 +f 630 100 262 +f 192 789 186 +f 305 615 797 +f 2061 923 668 +f 196 675 900 +f 721 279 423 +f 171 628 239 +f 517 429 737 +f 312 636 559 +f 843 137 595 +f 322 563 634 +f 412 586 146 +f 969 889 971 +f 830 400 476 +f 503 569 906 +f 423 534 784 +f 546 830 658 +f 458 687 283 +f 852 637 137 +f 908 657 904 +f 547 918 1016 +f 648 199 201 +f 701 762 416 +f 276 431 421 +f 821 806 309 +f 381 682 144 +f 623 434 255 +f 905 864 527 +f 638 317 656 +f 579 551 738 +f 737 911 320 +f 839 906 549 +f 308 606 822 +f 429 913 838 +f 826 666 681 +f 871 314 548 +f 593 326 756 +f 301 8395 1115 +f 820 876 1196 +f 911 737 593 +f 546 658 848 +f 582 679 701 +f 592 432 307 +f 499 707 732 +f 655 668 560 +f 423 594 558 +f 560 418 655 +f 138 323 661 +f 507 478 171 +f 297 869 485 +f 602 801 488 +f 430 600 568 +f 322 312 505 +f 730 505 559 +f 635 470 524 +f 872 797 710 +f 410 681 197 +f 915 251 818 +f 874 177 917 +f 557 903 726 +f 252 849 371 +f 702 572 881 +f 304 516 415 +f 810 815 189 +f 688 311 425 +f 219 412 146 +f 661 308 364 +f 708 858 599 +f 756 755 639 +f 500 187 8406 +f 740 516 580 +f 3465 662 3232 +f 694 1526 916 +f 530 581 553 +f 882 798 522 +f 935 934 939 +f 633 698 832 +f 1066 8393 1347 +f 380 589 200 +f 564 638 656 +f 454 50 887 +f 315 317 588 +f 299 14 676 +f 586 128 146 +f 412 641 586 +f 1270 562 795 +f 784 680 660 +f 588 730 315 +f 217 313 566 +f 913 674 199 +f 587 433 723 +f 840 403 526 +f 691 635 567 +f 626 440 288 +f 923 1879 1880 +f 686 300 811 +f 1133 922 1258 +f 3240 635 524 +f 598 189 478 +f 535 439 626 +f 319 577 821 +f 565 640 638 +f 683 557 726 +f 358 292 353 +f 577 1110 648 +f 843 852 137 +f 813 620 708 +f 419 438 699 +f 635 691 472 +f 708 647 893 +f 382 437 764 +f 594 423 660 +f 508 924 609 +f 128 680 155 +f 750 438 205 +f 139 417 204 +f 367 298 709 +f 1202 1116 1200 +f 625 786 164 +f 652 532 512 +f 419 863 205 +f 370 231 30 +f 629 100 630 +f 1162 1220 1271 +f 262 765 630 +f 597 835 380 +f 720 444 287 +f 756 326 755 +f 727 910 306 +f 69 623 207 +f 656 435 583 +f 626 441 535 +f 809 119 810 +f 518 632 790 +f 736 297 390 +f 353 594 641 +f 8396 8505 1112 +f 356 765 402 +f 650 393 513 +f 856 839 647 +f 850 502 883 +f 1191 8395 1109 +f 1168 1169 1019 +f 686 408 309 +f 674 201 199 +f 612 739 74 +f 8383 603 785 +f 369 610 83 +f 589 225 759 +f 409 729 244 +f 1021 547 1016 +f 700 696 596 +f 376 426 525 +f 569 503 829 +f 648 833 551 +f 580 809 598 +f 484 498 378 +f 712 109 75 +f 96 458 456 +f 94 294 335 +f 207 275 89 +f 76 45 78 +f 257 51 773 +f 58 82 38 +f 271 233 772 +f 28 8386 115 +f 282 354 98 +f 334 270 714 +f 258 26 715 +f 280 63 607 +f 717 611 39 +f 718 111 479 +f 772 236 69 +f 95 124 228 +f 40 76 78 +f 85 212 465 +f 338 377 90 +f 279 444 173 +f 2060 867 857 +f 794 126 854 +f 821 309 408 +f 729 866 849 +f 609 924 636 +f 674 542 644 +f 617 1698 198 +f 609 636 859 +f 535 318 316 +f 939 238 935 +f 801 510 488 +f 1119 848 245 +f 535 316 439 +f 2925 3242 3239 +f 688 865 670 +f 807 160 569 +f 499 732 709 +f 840 193 403 +f 190 159 495 +f 186 376 242 +f 760 167 601 +f 1024 1028 1020 +f 1107 804 385 +f 883 316 501 +f 914 181 774 +f 297 554 894 +f 511 560 668 +f 476 667 830 +f 826 620 813 +f 870 246 632 +f 846 552 897 +f 366 914 774 +f 907 519 503 +f 918 639 1016 +f 552 653 897 +f 139 310 417 +f 8383 23 8382 +f 694 1135 1302 +f 832 902 575 +f 439 425 626 +f 338 140 295 +f 97 855 360 +f 221 191 803 +f 1034 1041 1043 +f 872 305 797 +f 556 512 1103 +f 624 265 401 +f 299 860 814 +f 1135 1136 925 +f 436 423 558 +f 337 783 847 +f 205 421 431 +f 309 420 686 +f 420 644 542 +f 205 438 419 +f 417 202 750 +f 663 171 239 +f 753 820 328 +f 473 405 131 +f 555 649 477 +f 1180 1219 1337 +f 1066 1345 571 +f 193 677 799 +f 189 692 478 +f 671 894 793 +f 650 513 1069 +f 551 579 818 +f 741 903 557 +f 1269 831 841 +f 1114 802 8393 +f 798 882 690 +f 521 759 633 +f 671 632 246 +f 850 501 602 +f 547 651 918 +f 696 225 475 +f 554 485 899 +f 1170 1025 1017 +f 864 853 527 +f 374 558 292 +f 504 576 154 +f 221 445 191 +f 355 386 350 +f 428 240 629 +f 709 732 411 +f 626 425 673 +f 434 413 255 +f 489 898 666 +f 690 800 599 +f 68 148 262 +f 193 799 492 +f 687 96 643 +f 163 339 133 +f 178 186 242 +f 565 234 361 +f 593 737 326 +f 1703 8509 1175 +f 548 700 871 +f 917 321 404 +f 478 507 598 +f 529 732 707 +f 318 415 740 +f 229 351 150 +f 522 798 442 +f 327 410 385 +f 439 883 425 +f 770 166 777 +f 423 784 660 +f 505 588 563 +f 861 136 840 +f 794 854 823 +f 208 37 55 +f 219 382 135 +f 903 734 904 +f 862 306 910 +f 22 131 405 +f 778 785 603 +f 920 577 201 +f 317 315 654 +f 361 661 364 +f 110 80 718 +f 297 736 869 +f 349 210 719 +f 474 874 404 +f 339 163 8524 +f 8513 8514 8511 +f 345 497 824 +f 377 494 90 +f 882 800 690 +f 1125 1121 921 +f 804 517 320 +f 820 753 821 +f 129 396 156 +f 807 461 625 +f 765 468 402 +f 136 841 495 +f 879 596 835 +f 846 897 1117 +f 906 787 907 +f 873 815 901 +f 444 168 125 +f 171 478 628 +f 881 669 702 +f 699 689 747 +f 692 515 477 +f 474 910 874 +f 799 252 790 +f 519 1152 927 +f 547 1035 1032 +f 1757 1005 550 +f 291 618 384 +f 589 380 835 +f 832 698 1069 +f 2974 2976 2783 +f 131 346 617 +f 768 791 606 +f 580 598 507 +f 1130 1291 1124 +f 1120 1293 1286 +f 1105 512 556 +f 515 427 471 +f 672 24 159 +f 176 218 825 +f 684 1602 881 +f 309 806 420 +f 813 708 599 +f 179 182 494 +f 858 690 599 +f 842 15 814 +f 882 757 898 +f 674 644 201 +f 808 645 895 +f 882 898 489 +f 671 246 174 +f 409 126 866 +f 702 755 326 +f 307 924 508 +f 898 863 419 +f 834 1131 1879 +f 804 320 683 +f 820 821 408 +f 759 225 446 +f 166 770 778 +f 362 395 150 +f 561 663 407 +f 1526 1284 570 +f 527 902 1067 +f 1894 16 1129 +f 867 895 857 +f 657 903 904 +f 786 625 461 +f 760 376 186 +f 492 403 193 +f 616 487 250 +f 738 833 1110 +f 613 777 166 +f 747 666 699 +f 475 589 835 +f 8505 1109 8395 +f 521 575 200 +f 1097 1100 1099 +f 931 933 807 +f 821 577 920 +f 527 853 885 +f 818 251 551 +f 1255 8398 1247 +f 306 1136 727 +f 931 938 504 +f 634 864 322 +f 603 891 778 +f 313 464 130 +f 684 579 325 +f 8384 132 8383 +f 504 601 576 +f 784 291 680 +f 408 876 820 +f 736 725 869 +f 443 520 402 +f 124 95 350 +f 159 190 672 +f 352 885 843 +f 830 546 400 +f 1065 738 581 +f 403 492 497 +f 1117 1118 892 +f 1259 1206 1258 +f 853 852 843 +f 486 677 890 +f 724 786 154 +f 186 178 192 +f 555 472 649 +f 842 1131 834 +f 398 368 180 +f 572 915 818 +f 642 865 502 +f 118 773 51 +f 854 768 823 +f 1140 238 939 +f 308 822 137 +f 634 637 852 +f 849 866 265 +f 642 653 865 +f 776 790 632 +f 885 352 200 +f 324 904 734 +f 514 884 427 +f 743 8390 905 +f 2060 1991 1990 +f 2068 1991 2066 +f 846 2065 857 +f 518 371 223 +f 437 382 127 +f 677 486 244 +f 196 900 788 +f 585 509 471 +f 609 705 508 +f 390 206 224 +f 634 852 864 +f 527 885 575 +f 189 815 873 +f 757 882 522 +f 1104 1190 1103 +f 352 843 595 +f 746 844 345 +f 609 886 705 +f 733 685 918 +f 727 177 874 +f 923 2062 1297 +f 852 853 864 +f 554 297 485 +f 743 905 527 +f 552 846 895 +f 895 867 808 +f 495 533 190 +f 1077 393 1074 +f 2222 2221 1392 +f 693 476 400 +f 220 608 610 +f 1129 15 1377 +f 491 171 561 +f 308 323 606 +f 598 809 810 +f 592 862 582 +f 149 218 761 +f 805 2065 846 +f 781 674 913 +f 891 603 101 +f 119 8387 810 +f 190 533 709 +f 552 895 645 +f 511 668 923 +f 422 808 433 +f 831 735 533 +f 401 396 619 +f 409 244 854 +f 699 898 419 +f 650 633 816 +f 297 671 390 +f 595 137 822 +f 481 696 700 +f 154 786 504 +f 1114 8394 1111 +f 278 102 103 +f 665 861 562 +f 156 866 126 +f 380 352 597 +f 546 642 400 +f 817 702 669 +f 968 194 8392 +f 873 796 189 +f 822 606 388 +f 689 490 836 +f 391 543 247 +f 596 696 475 +f 894 824 793 +f 1090 774 878 +f 670 703 422 +f 906 907 503 +f 804 683 531 +f 612 121 88 +f 553 581 1108 +f 239 649 691 +f 826 800 489 +f 959 963 969 +f 819 8394 8393 +f 427 796 514 +f 624 849 265 +f 671 297 894 +f 1057 657 908 +f 569 549 906 +f 503 519 829 +f 667 1292 658 +f 215 389 149 +f 611 333 39 +f 791 672 180 +f 579 684 572 +f 605 785 778 +f 1047 1046 1002 +f 834 1885 1889 +f 525 242 376 +f 138 156 794 +f 341 132 67 +f 855 901 360 +f 922 1392 550 +f 205 863 443 +f 606 791 388 +f 380 200 352 +f 879 871 596 +f 1579 732 529 +f 574 562 861 +f 815 449 901 +f 385 410 781 +f 8390 312 905 +f 58 123 483 +f 481 500 652 +f 164 786 724 +f 557 683 741 +f 866 729 409 +f 548 314 1579 +f 806 821 920 +f 477 728 692 +f 886 609 859 +f 1057 792 657 +f 1043 324 706 +f 651 706 324 +f 787 726 657 +f 892 1118 1119 +f 910 474 582 +f 584 1208 886 +f 669 523 817 +f 878 1091 1092 +f 1097 912 1096 +f 774 181 1091 +f 1193 328 1198 +f 212 516 304 +f 665 841 861 +f 1065 581 530 +f 1030 1234 1025 +f 916 917 177 +f 859 584 886 +f 322 864 905 +f 1074 393 650 +f 933 931 504 +f 506 733 918 +f 1445 1102 545 +f 1121 1123 892 +f 838 913 199 +f 860 842 814 +f 1375 1763 1167 +f 881 572 684 +f 730 924 307 +f 1028 1721 1020 +f 636 924 559 +f 1084 1087 584 +f 1084 1080 1182 +f 1721 1035 1021 +f 958 959 961 +f 927 909 928 +f 829 519 927 +f 928 909 936 +f 807 928 931 +f 807 829 929 +f 927 929 829 +f 945 949 944 +f 1143 1141 940 +f 928 936 937 +f 771 935 238 +f 949 932 947 +f 942 934 937 +f 786 933 504 +f 807 933 461 +f 931 928 937 +f 946 939 934 +f 771 941 935 +f 935 941 1139 +f 947 936 909 +f 936 932 937 +f 942 937 932 +f 938 937 934 +f 937 938 931 +f 935 938 934 +f 930 1146 942 +f 1140 247 238 +f 950 957 1144 +f 247 1140 391 +f 760 941 771 +f 1139 941 601 +f 932 943 942 +f 1146 946 942 +f 947 932 936 +f 930 942 943 +f 955 954 948 +f 945 951 930 +f 932 945 943 +f 951 952 950 +f 946 940 1140 +f 934 942 946 +f 1006 1150 1152 +f 1001 981 999 +f 992 966 944 +f 963 959 958 +f 932 949 945 +f 1148 949 947 +f 945 952 951 +f 948 957 955 +f 952 945 944 +f 1143 951 950 +f 965 954 966 +f 950 952 954 +f 1308 1544 1307 +f 984 958 961 +f 952 944 966 +f 965 960 964 +f 956 957 959 +f 950 954 955 +f 956 969 971 +f 955 957 950 +f 959 957 961 +f 957 956 1144 +f 964 962 948 +f 998 988 997 +f 961 957 948 +f 1013 958 1008 +f 960 973 977 +f 985 984 982 +f 948 954 964 +f 962 961 948 +f 960 982 962 +f 982 984 962 +f 659 968 963 +f 968 969 963 +f 965 964 954 +f 960 962 964 +f 954 952 966 +f 965 953 973 +f 999 1153 1001 +f 953 965 966 +f 973 960 965 +f 1163 795 1072 +f 194 968 659 +f 969 968 889 +f 746 8539 844 +f 969 956 959 +f 543 972 899 +f 1141 1142 1140 +f 889 8392 8538 +f 971 970 1145 +f 391 972 543 +f 8538 972 970 +f 973 953 1222 +f 977 973 978 +f 976 973 1222 +f 1222 1157 1775 +f 1312 1313 1545 +f 977 975 980 +f 1160 996 1773 +f 978 976 1254 +f 978 973 976 +f 1212 980 1147 +f 1772 1775 1374 +f 975 977 978 +f 982 979 985 +f 980 982 977 +f 1147 980 975 +f 980 979 982 +f 1033 1165 1603 +f 993 966 992 +f 982 960 977 +f 986 985 979 +f 983 986 988 +f 963 1013 659 +f 962 984 961 +f 1008 983 998 +f 979 1212 986 +f 984 985 983 +f 994 1154 990 +f 983 985 986 +f 987 997 994 +f 1330 1553 1557 +f 1154 986 967 +f 994 997 988 +f 944 949 1148 +f 996 993 989 +f 1147 1308 1212 +f 1472 1499 1501 +f 1217 995 1216 +f 659 1013 1012 +f 1148 992 944 +f 993 992 989 +f 996 989 999 +f 966 993 953 +f 1154 994 988 +f 1328 994 990 +f 995 997 1216 +f 958 984 1008 +f 1353 999 981 +f 1160 953 993 +f 1216 997 987 +f 998 997 995 +f 1011 995 991 +f 1008 984 983 +f 992 1148 989 +f 1039 1753 1041 +f 1000 1148 1149 +f 1174 1004 1006 +f 1153 999 989 +f 1004 1003 1001 +f 1150 1004 1000 +f 908 1043 1051 +f 1158 1014 1029 +f 2020 1226 1405 +f 1150 1000 1149 +f 1002 1003 1004 +f 1914 1753 1318 +f 1603 1327 1338 +f 519 744 1161 +f 1055 1037 1046 +f 1599 1401 1050 +f 1324 1745 1316 +f 998 1011 1008 +f 1012 1013 1011 +f 1026 8416 8429 +f 1754 1253 1248 +f 2004 2005 1033 +f 1755 1369 1267 +f 995 1011 998 +f 991 1227 1011 +f 1012 1011 1227 +f 1071 1072 795 +f 958 1013 963 +f 1013 1008 1011 +f 1317 1042 1387 +f 981 1003 1042 +f 1048 1909 1026 +f 1755 1726 1060 +f 1019 1018 639 +f 1016 639 1018 +f 1171 1249 1231 +f 1035 547 1021 +f 1019 639 755 +f 1022 1021 1018 +f 755 817 1019 +f 1019 817 1168 +f 1024 1025 1023 +f 1022 1024 1020 +f 1018 1021 1016 +f 1342 1132 1005 +f 1025 1024 1022 +f 1020 1021 1022 +f 8427 8426 1014 +f 1007 1779 1399 +f 1025 1022 1017 +f 1028 1024 1023 +f 1171 1231 1170 +f 1233 1234 1030 +f 1244 1248 1173 +f 1326 1224 1159 +f 1249 1239 1027 +f 1173 1233 1236 +f 1253 1327 1023 +f 1005 1243 1342 +f 1922 1355 1923 +f 1034 706 1032 +f 1169 1168 1170 +f 1231 1233 1030 +f 2016 1039 1038 +f 651 1032 706 +f 547 1032 651 +f 1031 1721 2016 +f 1896 1045 1005 +f 1753 1036 1041 +f 1038 1032 1031 +f 1754 1776 1338 +f 1721 1021 1020 +f 1032 1035 1031 +f 1366 1896 1757 +f 2020 2018 2019 +f 1757 550 1535 +f 1043 706 1034 +f 1032 1038 1034 +f 2016 1721 974 +f 1721 1028 974 +f 1749 1166 1158 +f 1618 1846 1841 +f 1964 1732 1264 +f 1009 1042 1317 +f 1041 1037 1043 +f 1326 1054 1049 +f 2008 1764 1225 +f 1055 1051 1043 +f 324 1043 908 +f 1753 1039 1318 +f 1060 1726 1784 +f 1913 1914 1777 +f 1046 1047 1055 +f 1254 1260 1313 +f 1002 1174 1047 +f 1056 1006 1161 +f 1057 744 792 +f 1775 976 1222 +f 1554 1778 1552 +f 1260 1749 1545 +f 1267 1340 1044 +f 1514 1452 1230 +f 1770 1317 1375 +f 1055 1043 1037 +f 1056 1051 1047 +f 1253 1023 1234 +f 1914 1771 1753 +f 8425 1058 1746 +f 1810 1398 1410 +f 1319 1228 1164 +f 1228 1319 1321 +f 1041 1036 1037 +f 1047 1051 1055 +f 1006 1056 1047 +f 1057 1056 744 +f 908 1051 1057 +f 1057 1051 1056 +f 1167 1390 1388 +f 1401 2018 1755 +f 1817 1813 1815 +f 72 1402 87 +f 1733 1354 1226 +f 1413 1611 1357 +f 1369 1060 1747 +f 1435 8402 1061 +f 1417 1600 1275 +f 1052 1064 1267 +f 1452 1639 1805 +f 1443 1404 1444 +f 1788 1780 1785 +f 1044 1176 1052 +f 530 8396 8394 +f 325 579 1065 +f 1111 8396 1112 +f 819 8393 1066 +f 527 1067 743 +f 832 1067 902 +f 1068 1088 1082 +f 859 1068 1086 +f 832 1069 751 +f 650 1069 698 +f 1083 1272 1181 +f 1202 2928 1116 +f 1072 194 659 +f 562 1071 795 +f 659 1012 1072 +f 1163 1072 1012 +f 1178 707 1179 +f 1569 1570 1565 +f 1075 1074 816 +f 1077 912 1076 +f 1090 1075 816 +f 1075 878 1092 +f 1094 1096 912 +f 393 1079 513 +f 912 1077 1074 +f 1078 1077 1076 +f 1089 1078 1076 +f 1084 1086 1082 +f 393 1078 1079 +f 1081 1079 1273 +f 1181 1078 1089 +f 1084 1182 1087 +f 1273 1079 1078 +f 1082 1081 1080 +f 1084 1082 1080 +f 1177 1088 1068 +f 1092 1094 912 +f 1097 1099 1076 +f 1274 1070 1183 +f 1086 1084 584 +f 1183 1185 1085 +f 1302 925 1303 +f 859 1086 584 +f 1082 1086 1068 +f 1138 925 1137 +f 1299 1208 1087 +f 1069 1088 751 +f 1081 1088 513 +f 1099 1089 1076 +f 1181 1089 1083 +f 774 1090 446 +f 1075 1090 878 +f 1092 1091 183 +f 774 1091 878 +f 1279 1093 1280 +f 1075 1092 912 +f 1095 1277 1101 +f 1098 1100 1101 +f 1280 1092 183 +f 1093 1278 1096 +f 1279 183 1188 +f 8397 1186 1272 +f 1093 1096 1094 +f 1097 1096 1095 +f 1097 1095 1100 +f 912 1097 1076 +f 1277 1278 1187 +f 1415 1275 1798 +f 8397 1099 1098 +f 1089 1099 1083 +f 1101 1100 1095 +f 1099 1100 1098 +f 1418 1010 1424 +f 3245 1542 1543 +f 1105 181 652 +f 1445 1279 1102 +f 8405 1103 532 +f 1104 1103 21 +f 1335 1332 1334 +f 21 1560 1104 +f 1106 1105 556 +f 1188 1105 1102 +f 1190 1106 556 +f 1102 1106 545 +f 804 1107 517 +f 781 1107 385 +f 1108 319 1109 +f 1108 581 738 +f 319 1113 1109 +f 1115 8395 1191 +f 577 1108 1110 +f 738 1110 1108 +f 1111 8394 8396 +f 553 1108 1109 +f 1347 8393 802 +f 819 1066 325 +f 753 1113 319 +f 745 1194 1199 +f 325 1066 571 +f 1109 1113 1191 +f 1284 568 570 +f 1194 301 1115 +f 919 2703 2924 +f 846 1117 805 +f 1118 1117 897 +f 653 1118 897 +f 1119 1118 848 +f 1130 1119 245 +f 1121 1119 1205 +f 1286 3236 1289 +f 1122 1125 1128 +f 1125 1123 1121 +f 892 1119 1121 +f 1294 1296 1295 +f 2070 1128 1529 +f 2066 1123 1122 +f 1117 1123 805 +f 1292 1203 1291 +f 1293 1204 1205 +f 1128 1295 1127 +f 1122 1123 1125 +f 1289 1120 1286 +f 2434 2332 528 +f 860 615 1131 +f 2624 2335 2433 +f 1295 1125 921 +f 1128 1127 1529 +f 1534 1207 2623 +f 1377 1893 1129 +f 1291 1130 245 +f 1205 1130 1124 +f 1883 1885 1881 +f 1610 1046 1762 +f 1764 1386 1771 +f 2216 2224 2215 +f 1895 1893 1992 +f 1259 1132 1342 +f 2068 1878 2071 +f 1884 1892 1886 +f 1136 1135 727 +f 1302 1135 925 +f 1136 306 508 +f 1137 1136 705 +f 1138 1137 880 +f 925 1136 1137 +f 1209 1299 1300 +f 1299 1209 1138 +f 601 504 1139 +f 938 1139 504 +f 946 1140 939 +f 1140 940 1141 +f 1143 940 1146 +f 970 1141 1145 +f 1140 1142 391 +f 970 1142 1141 +f 1143 930 951 +f 1143 1144 1145 +f 1145 1144 956 +f 950 1144 1143 +f 1145 956 971 +f 1143 1145 1141 +f 946 1146 940 +f 930 1143 1146 +f 1309 1320 1544 +f 1329 1311 1310 +f 1149 1148 947 +f 1153 1000 1001 +f 909 1151 947 +f 1150 1006 1004 +f 1149 1151 1150 +f 909 1152 1151 +f 947 1151 1149 +f 909 927 1152 +f 1152 519 1161 +f 1150 1151 1152 +f 989 1148 1153 +f 1000 1153 1148 +f 986 1154 988 +f 1307 1154 967 +f 1154 1307 990 +f 3031 2889 3032 +f 1328 1330 987 +f 1218 1217 1156 +f 1606 1374 1009 +f 1321 1316 1228 +f 1026 1909 8416 +f 1353 1042 1009 +f 2325 1864 2393 +f 2015 2016 1915 +f 996 1160 993 +f 1222 1160 1157 +f 1056 1161 744 +f 1152 1161 1006 +f 991 995 1217 +f 1073 1179 1337 +f 1227 1163 1012 +f 795 1163 1162 +f 1779 1007 1747 +f 1224 1360 1159 +f 1165 1028 1023 +f 1002 1046 1387 +f 1226 1224 1326 +f 1749 1026 1166 +f 1029 1014 1360 +f 1763 1390 1167 +f 1250 1172 523 +f 1025 1170 1030 +f 1017 1018 1169 +f 1019 1169 1018 +f 1169 1170 1017 +f 1170 1168 1171 +f 817 1172 1168 +f 1171 1250 1249 +f 523 1172 817 +f 1171 1168 1172 +f 1237 1235 1236 +f 1173 1236 1241 +f 1004 1174 1002 +f 1006 1047 1174 +f 1370 1394 1701 +f 1623 1750 1622 +f 1354 1228 1315 +f 1595 1604 1339 +f 1088 1177 751 +f 8390 1177 1068 +f 707 499 1179 +f 1336 1073 1335 +f 735 1269 1180 +f 1073 1178 1179 +f 1180 1269 1270 +f 1220 1221 1271 +f 1182 1080 1274 +f 1273 1080 1081 +f 1274 1080 1181 +f 1300 1182 1085 +f 1275 1415 1416 +f 1085 1182 1183 +f 1186 1417 1272 +f 1600 1420 1422 +f 1416 1183 1070 +f 1537 1301 1536 +f 1101 1419 1098 +f 1419 1420 1098 +f 1093 1279 1512 +f 1187 1278 1516 +f 1105 1188 181 +f 1279 1188 1102 +f 1468 1331 1467 +f 1616 1440 1442 +f 1103 1190 556 +f 1454 1190 1104 +f 1192 1191 1113 +f 1191 1199 1115 +f 753 1192 1113 +f 1192 328 1193 +f 1196 328 820 +f 272 745 1197 +f 745 1199 1193 +f 1199 1191 1192 +f 1518 1282 1517 +f 1283 1522 1523 +f 722 1196 876 +f 1196 1195 1198 +f 745 1193 1197 +f 1193 1198 1523 +f 1196 1198 328 +f 1198 1195 1523 +f 1115 1199 1194 +f 568 1284 1202 +f 3238 1116 2929 +f 1138 1538 1303 +f 1538 1539 1210 +f 568 1202 1200 +f 1201 8455 2928 +f 662 3465 801 +f 3235 3233 1287 +f 1714 1716 1718 +f 921 1204 1528 +f 1205 1119 1130 +f 921 1205 1204 +f 1206 1256 2232 +f 1535 550 1392 +f 1532 1531 1534 +f 1535 1760 1757 +f 886 1208 880 +f 1087 1208 584 +f 1185 1537 1536 +f 1538 1209 1540 +f 1536 1209 1300 +f 1284 1285 1201 +f 1147 975 1312 +f 1211 1320 1322 +f 986 1212 967 +f 980 1212 979 +f 1375 1387 1763 +f 1320 1309 1316 +f 990 1307 1311 +f 1156 1216 1330 +f 1477 1463 1471 +f 1189 1445 1447 +f 1330 1216 987 +f 1216 1156 1217 +f 1156 8404 1218 +f 991 1217 1220 +f 1221 780 1219 +f 1220 1162 1227 +f 1332 1219 780 +f 1271 1221 1219 +f 1217 1218 1220 +f 1221 1220 1218 +f 780 1221 1218 +f 1219 1180 1271 +f 1160 1222 953 +f 1749 1158 1213 +f 1753 1246 1036 +f 1225 1764 1913 +f 1776 1244 1243 +f 1327 1754 1338 +f 1003 1002 1387 +f 1058 1229 1054 +f 8417 8416 1908 +f 1755 1060 1369 +f 1220 1227 991 +f 1163 1227 1162 +f 2055 1713 2053 +f 1224 1029 1360 +f 1326 1405 1226 +f 2435 2341 2113 +f 1612 2549 1758 +f 1610 1246 1386 +f 1233 1231 1027 +f 1170 1231 1030 +f 1346 1261 1348 +f 754 8399 1349 +f 1237 1236 1233 +f 1025 1234 1023 +f 1233 1173 1234 +f 1173 1248 1253 +f 2365 2366 2367 +f 1241 1236 1245 +f 1237 1233 1027 +f 1236 1235 1245 +f 1027 1239 1237 +f 754 1349 1252 +f 1258 1132 1259 +f 1173 1241 1244 +f 1027 1231 1249 +f 1261 1350 1348 +f 1237 1251 1235 +f 1239 1251 1237 +f 1242 1247 8398 +f 1238 1342 1244 +f 1238 1244 1241 +f 1245 1238 1241 +f 1257 1259 1238 +f 1054 1229 2024 +f 1235 1247 1245 +f 978 1254 1313 +f 1242 1265 845 +f 1504 1363 1379 +f 1327 1165 1023 +f 1255 1247 1235 +f 573 1256 1265 +f 1213 1545 1749 +f 1005 1045 1243 +f 1171 1172 1250 +f 1239 1249 1262 +f 1345 1232 1602 +f 1250 1266 1262 +f 1348 1262 1232 +f 1235 1251 1240 +f 2374 2015 1915 +f 1351 1251 1239 +f 1253 1234 1173 +f 1258 1206 1133 +f 1924 1921 1922 +f 2019 1164 1733 +f 1235 1240 1255 +f 1240 1349 8399 +f 1206 845 1256 +f 1245 1257 1238 +f 1247 1257 1245 +f 1206 1259 1257 +f 1736 1368 1404 +f 1790 1748 1399 +f 845 1265 1256 +f 1048 1749 1260 +f 1058 1054 1326 +f 1599 1164 2019 +f 571 1345 1602 +f 1344 1346 1347 +f 1249 1250 1262 +f 1250 523 1266 +f 1760 1385 1366 +f 1405 1355 2020 +f 2024 1229 1015 +f 1257 1247 845 +f 845 1206 1257 +f 523 881 1602 +f 1262 1266 1232 +f 1243 1244 1342 +f 1732 1357 1264 +f 1495 1766 1488 +f 1005 1132 550 +f 831 1269 735 +f 1270 1269 665 +f 562 1270 665 +f 1162 1270 795 +f 1180 1270 1271 +f 1162 1271 1270 +f 1272 1083 8397 +f 1070 1181 1272 +f 1078 1181 1273 +f 1080 1273 1181 +f 1070 1274 1181 +f 1182 1274 1183 +f 1417 1275 1416 +f 1421 1010 1600 +f 1433 1442 1434 +f 1531 1532 1533 +f 1278 1277 1095 +f 1437 1277 1187 +f 1096 1278 1095 +f 1278 1093 1516 +f 1512 1279 1189 +f 1280 1093 1094 +f 1092 1280 1094 +f 183 1279 1280 +f 1281 1455 1458 +f 8401 1061 8402 +f 1698 1697 188 +f 1704 1705 272 +f 1524 1283 1523 +f 188 1697 1282 +f 1284 1526 1285 +f 1202 1284 1201 +f 1304 694 1302 +f 1285 1304 1306 +f 1291 1286 1124 +f 3464 3582 3463 +f 1427 1418 1424 +f 1127 1295 1296 +f 1707 1290 1288 +f 1290 1718 1289 +f 3236 1286 1203 +f 1290 1289 1288 +f 2049 1707 1708 +f 1710 1290 1707 +f 1292 1291 245 +f 1286 1291 1203 +f 658 1292 245 +f 1292 667 3582 +f 1286 1293 1124 +f 1716 1293 1120 +f 1120 1718 1716 +f 1710 1714 1290 +f 1125 1295 1128 +f 1528 1295 921 +f 1719 1296 1294 +f 1296 1126 1530 +f 1131 842 860 +f 1879 1131 615 +f 1530 1534 2623 +f 2207 2199 2206 +f 1208 1299 1138 +f 1300 1299 1087 +f 1182 1300 1087 +f 1536 1300 1085 +f 1797 1802 1798 +f 1285 1306 1201 +f 1303 925 1138 +f 1304 1302 1210 +f 1538 1138 1209 +f 1210 1302 1303 +f 1542 1306 1210 +f 1304 1285 1526 +f 1799 1797 1798 +f 8455 3243 3244 +f 1210 1306 1304 +f 1306 1305 8455 +f 1308 1307 967 +f 1211 1310 1311 +f 1212 1308 967 +f 1147 1309 1544 +f 1312 1309 1147 +f 1309 1314 1316 +f 1320 1211 1544 +f 1310 1548 1547 +f 1211 1311 1307 +f 1310 1547 1329 +f 1313 1312 975 +f 1314 1312 1213 +f 978 1313 975 +f 1263 1048 1260 +f 1213 1158 1324 +f 1309 1312 1314 +f 1045 1900 1338 +f 1323 1548 1546 +f 1324 1314 1213 +f 1322 1321 1319 +f 1356 1007 1399 +f 1246 1610 1762 +f 1316 1745 1315 +f 1369 1007 1729 +f 1029 1745 1158 +f 1597 1604 1595 +f 1321 1320 1316 +f 1320 1321 1322 +f 1315 1228 1316 +f 1228 1354 1164 +f 1323 1322 1319 +f 1211 1322 1546 +f 1224 1354 1315 +f 1547 1214 1329 +f 1314 1324 1316 +f 1353 996 999 +f 1545 1313 1260 +f 1810 1364 1398 +f 1317 1770 1009 +f 1058 1326 1159 +f 1327 1603 1165 +f 1157 1773 1374 +f 1311 1328 990 +f 1328 1214 1330 +f 1214 1328 1329 +f 1311 1329 1328 +f 1553 1549 1551 +f 1549 1553 1214 +f 1333 1567 1561 +f 1458 1462 1456 +f 1332 780 1334 +f 1337 1332 1073 +f 1334 780 1722 +f 1586 1587 1588 +f 1557 1156 1330 +f 1332 1335 1073 +f 1561 1335 1562 +f 1178 1336 529 +f 1335 1561 1336 +f 1561 1566 1336 +f 1180 1337 1179 +f 1332 1337 1219 +f 1319 1599 1050 +f 1037 1036 1762 +f 1821 1691 1818 +f 1360 1746 1159 +f 1779 1782 1062 +f 1325 1435 1061 +f 1720 2608 2335 +f 1397 1410 1398 +f 1374 1775 1157 +f 1259 1342 1238 +f 1387 1375 1317 +f 1758 1358 1414 +f 1347 1346 1345 +f 1345 1346 1232 +f 1232 1266 1602 +f 1065 819 325 +f 1351 1240 1251 +f 1066 1347 1345 +f 1344 1347 802 +f 1261 1252 1350 +f 1232 1346 1348 +f 1262 1350 1351 +f 1252 1349 1350 +f 1351 1350 1349 +f 1351 1349 1240 +f 1262 1351 1239 +f 1748 1356 1399 +f 1378 1947 1695 +f 1038 1039 1034 +f 1369 1340 1267 +f 1042 1353 981 +f 1790 1399 1062 +f 2231 1605 1769 +f 170 379 1402 +f 1400 1444 1442 +f 1059 1400 1617 +f 3252 1614 2291 +f 1607 1390 1386 +f 1367 1412 1811 +f 1486 1766 1495 +f 1049 1405 1326 +f 1969 1966 1970 +f 1729 1356 1339 +f 1007 1356 1729 +f 1742 1363 1765 +f 1827 1361 1838 +f 1960 1964 1965 +f 1358 1373 1379 +f 1676 1379 1674 +f 2454 3303 3024 +f 1949 1367 1738 +f 1425 2043 1958 +f 2333 2332 2434 +f 8515 8514 1 +f 1750 1739 1622 +f 2215 1385 1760 +f 1444 1404 1368 +f 1739 1750 1508 +f 1666 1646 1744 +f 1961 1960 1393 +f 2232 2231 922 +f 1731 1729 1339 +f 1358 1758 1373 +f 2610 2512 2611 +f 8548 1409 1393 +f 1864 2388 2382 +f 2211 2210 2202 +f 1703 1341 8509 +f 1396 1493 1488 +f 2181 2162 2176 +f 2077 2082 2073 +f 1772 1774 1775 +f 8425 8424 1229 +f 1258 922 550 +f 1167 1388 1902 +f 1387 1046 1610 +f 1912 2007 1906 +f 3253 3252 2288 +f 1380 1860 1863 +f 1810 1811 1809 +f 1381 1742 1696 +f 2672 2565 2564 +f 1984 1391 5127 +f 1822 1824 1825 +f 1391 1719 5127 +f 1175 1768 1703 +f 1353 1773 996 +f 1029 1224 1315 +f 1610 1386 1763 +f 1410 1397 1367 +f 2006 1905 1907 +f 1764 926 1913 +f 1967 2326 2380 +f 1902 1770 1167 +f 1753 1771 1246 +f 1383 2006 1907 +f 1772 1374 1383 +f 1901 2009 2011 +f 1374 1606 1383 +f 1899 1900 1898 +f 2100 2104 2096 +f 2221 2223 2224 +f 1905 2006 1904 +f 1764 1771 926 +f 1858 2396 1343 +f 1617 1734 1059 +f 1910 1909 1907 +f 1768 357 1406 +f 1768 1370 1703 +f 1660 1868 1393 +f 1697 1759 1525 +f 1390 1763 1386 +f 8509 1341 72 +f 1438 1515 1230 +f 1268 1496 1857 +f 1742 1765 1696 +f 1799 1010 1418 +f 1732 1398 1357 +f 1393 1960 1660 +f 1608 1053 1438 +f 1176 1044 1155 +f 1948 1949 1807 +f 1549 1176 1155 +f 2687 3253 2288 +f 1052 1267 1044 +f 1387 1042 1003 +f 1757 1760 1366 +f 1867 1961 1963 +f 1246 1762 1036 +f 1768 1406 1394 +f 1864 2382 2384 +f 8548 1373 1758 +f 1064 1401 1755 +f 8426 1360 1014 +f 1242 845 1247 +f 2935 2939 2930 +f 1160 1773 1157 +f 1372 1988 2609 +f 1264 1735 1965 +f 1696 1859 1858 +f 1858 1381 1696 +f 1358 1363 1742 +f 1947 1944 1806 +f 1737 1682 1677 +f 8459 3296 8456 +f 1812 1808 1809 +f 1653 1737 1677 +f 1782 1783 1781 +f 1665 1660 1735 +f 1397 1362 1367 +f 1812 1948 1040 +f 1661 1744 1611 +f 1416 1415 1185 +f 1798 1275 1613 +f 1183 1416 1185 +f 1417 1416 1070 +f 1272 1417 1070 +f 1600 1417 1186 +f 1423 1424 1421 +f 3243 3245 2936 +f 1432 1430 1431 +f 1420 1419 1276 +f 1422 1420 1276 +f 1420 1186 8397 +f 1421 1422 1423 +f 1424 1010 1421 +f 1423 1422 1276 +f 1422 1421 1600 +f 1432 1433 1430 +f 1979 1872 1711 +f 8400 1426 1427 +f 1424 8400 1427 +f 1276 1431 1423 +f 1063 1325 1429 +f 1428 1426 1804 +f 1427 1428 1418 +f 8400 1424 1423 +f 1428 1427 1426 +f 1958 2043 1957 +f 2939 2937 2949 +f 1440 1400 1442 +f 1425 8403 8400 +f 1276 1419 1432 +f 1061 1430 1434 +f 1432 1431 1276 +f 8401 1431 1430 +f 1101 1615 1419 +f 1441 1433 1432 +f 1441 1615 1436 +f 1440 1616 1439 +f 1325 1061 1429 +f 1430 1433 1434 +f 1444 1429 1442 +f 1368 1826 1618 +f 1437 1101 1277 +f 1437 1439 1436 +f 1514 1515 1187 +f 1437 1436 1615 +f 1451 1189 1447 +f 1434 1442 1429 +f 1187 1439 1437 +f 1439 1438 1440 +f 1449 1642 1639 +f 1053 1400 1440 +f 1615 1441 1432 +f 1616 1441 1436 +f 1616 1442 1433 +f 1438 1053 1440 +f 1443 1444 1400 +f 1650 1663 1629 +f 1361 1855 1854 +f 1429 1444 1063 +f 1448 1447 1445 +f 1189 1279 1445 +f 1446 1447 1448 +f 1446 1455 1457 +f 1448 1445 545 +f 1446 1460 1451 +f 1454 545 1190 +f 1454 1450 1453 +f 1642 1460 1461 +f 1451 1452 1513 +f 1470 1462 1469 +f 1453 1455 1446 +f 1446 1451 1447 +f 1452 1451 1449 +f 1642 1634 1639 +f 1187 1516 1514 +f 1454 1453 1448 +f 1455 1453 1450 +f 545 1454 1448 +f 1454 1104 1468 +f 1450 1462 1458 +f 1455 1281 1457 +f 1479 1482 1502 +f 1465 1464 1281 +f 1457 1464 1461 +f 1460 1457 1461 +f 1450 1458 1455 +f 1471 1458 1456 +f 1473 1465 1474 +f 1491 1465 1620 +f 1451 1460 1449 +f 1446 1457 1460 +f 1464 1457 1281 +f 1459 1632 1634 +f 1450 1467 1462 +f 1467 1469 1462 +f 1479 1456 1470 +f 1487 1491 1620 +f 1458 1474 1281 +f 1461 1464 1466 +f 1463 1483 1487 +f 1466 1459 1634 +f 1464 1465 1466 +f 1621 1466 1465 +f 1450 1454 1468 +f 1469 1467 1331 +f 1468 1104 1560 +f 1450 1468 1467 +f 1215 1586 1585 +f 1469 1215 1470 +f 1470 1215 1478 +f 1462 1470 1456 +f 1479 1470 1478 +f 1473 1471 1463 +f 1593 1500 1727 +f 1492 1480 1484 +f 1620 1473 1463 +f 1474 1465 1281 +f 1458 1471 1474 +f 1473 1474 1471 +f 1489 1495 1492 +f 1463 1477 1483 +f 1587 1564 1572 +f 1481 1475 1482 +f 1502 1471 1456 +f 1484 1483 1477 +f 1727 1478 1215 +f 1478 1476 1479 +f 1481 1479 1476 +f 1477 1482 1475 +f 1480 1483 1484 +f 1485 1498 1510 +f 1476 1499 1481 +f 2889 1494 1472 +f 1477 1471 1502 +f 1481 1482 1479 +f 1484 1477 1475 +f 1490 1487 1483 +f 1472 1494 1481 +f 1484 1475 1489 +f 1485 1487 1490 +f 1485 1490 1498 +f 1511 1472 1501 +f 1488 1766 1268 +f 1490 1483 1480 +f 1487 1485 1491 +f 2888 1486 2889 +f 1507 1503 1504 +f 1494 1475 1481 +f 1495 1489 1486 +f 1493 1480 1492 +f 1480 1493 1503 +f 1510 1750 1485 +f 1466 1621 1459 +f 1489 1492 1484 +f 1493 1492 1488 +f 1488 1268 1396 +f 1765 1493 1396 +f 1486 1489 1494 +f 1494 1489 1475 +f 1486 2888 1766 +f 1492 1495 1488 +f 1365 1975 1612 +f 1498 1507 1497 +f 1627 1628 1624 +f 1621 1623 1624 +f 1503 1498 1490 +f 1652 1505 1659 +f 1727 1501 1476 +f 1472 1481 1499 +f 1550 1554 1558 +f 1594 1598 1583 +f 1476 1501 1499 +f 1941 1940 1942 +f 1479 1502 1456 +f 1477 1502 1482 +f 1480 1503 1490 +f 1503 1493 1504 +f 1358 1379 1363 +f 1744 1661 1666 +f 1643 1645 1647 +f 1655 1663 1852 +f 1319 1164 1599 +f 2495 1062 1782 +f 1503 1507 1498 +f 1504 1497 1507 +f 1498 1664 1510 +f 1623 1621 1491 +f 1501 1940 1511 +f 2478 2488 2890 +f 1664 1498 1497 +f 1750 1510 1508 +f 1940 1501 1500 +f 2889 1511 1509 +f 1189 1513 1512 +f 1513 1514 1512 +f 1451 1513 1189 +f 1513 1452 1514 +f 1805 1608 1230 +f 1439 1515 1438 +f 1187 1515 1439 +f 1230 1515 1514 +f 1093 1512 1516 +f 1514 1516 1512 +f 1196 1517 1195 +f 1518 1517 722 +f 722 1519 1518 +f 1518 1519 447 +f 722 876 1520 +f 447 1519 631 +f 1520 876 408 +f 811 1519 1520 +f 1394 1370 1768 +f 1697 1702 1759 +f 272 1197 1522 +f 1523 1522 1197 +f 1523 1197 1193 +f 1524 1523 1195 +f 1517 1524 1195 +f 1705 1706 1521 +f 1701 1702 1700 +f 1525 1524 1282 +f 916 1526 570 +f 1304 1526 694 +f 2050 2427 1403 +f 1715 1976 1713 +f 1717 1204 1716 +f 1295 1528 1294 +f 2221 2224 2216 +f 1530 1529 1127 +f 1296 1530 1127 +f 1530 1126 1532 +f 1296 1719 1391 +f 1983 1376 1987 +f 1532 1126 1391 +f 1531 1720 1534 +f 1294 1528 1717 +f 8412 1712 1714 +f 867 2060 2061 +f 1530 1532 1534 +f 834 1889 842 +f 2216 1535 1392 +f 1185 1536 1085 +f 1301 1539 1540 +f 1415 1537 1185 +f 1802 1184 1798 +f 1209 1536 1540 +f 1210 1303 1538 +f 1301 1803 1543 +f 1306 1542 1305 +f 1301 1540 1536 +f 1538 1540 1539 +f 1359 1802 1797 +f 1537 1801 1301 +f 1210 1539 1542 +f 1543 1542 1539 +f 1301 1543 1539 +f 1543 1541 3245 +f 1307 1544 1211 +f 1147 1544 1308 +f 1312 1545 1213 +f 1774 1260 1254 +f 1211 1546 1310 +f 1322 1323 1546 +f 1323 1319 1050 +f 1549 1547 1176 +f 1546 1548 1310 +f 1323 1547 1548 +f 1549 1155 1551 +f 1214 1547 1549 +f 1550 1551 1554 +f 1555 1724 1559 +f 1778 1554 1551 +f 1553 1551 1550 +f 1506 1939 1792 +f 1723 1562 1334 +f 1724 1557 1550 +f 1214 1553 1330 +f 1778 1551 1155 +f 1558 1554 1589 +f 1724 1558 1559 +f 8404 1555 1722 +f 1592 1728 1585 +f 1584 1571 1577 +f 1550 1557 1553 +f 1557 1555 8404 +f 1589 1554 1552 +f 1558 1556 1559 +f 1556 1574 1575 +f 1575 1723 1559 +f 8407 8405 1570 +f 1468 1560 1331 +f 1562 1335 1334 +f 1565 1566 1567 +f 1723 1575 1562 +f 1333 1561 1562 +f 1567 1333 1571 +f 1560 1564 1331 +f 21 1564 1560 +f 1584 1577 1563 +f 1563 1572 1570 +f 529 1580 1578 +f 1567 1566 1561 +f 1580 1565 1573 +f 1581 1571 1574 +f 1569 1567 1584 +f 1581 1576 1591 +f 1592 1583 1593 +f 1570 1569 1563 +f 1565 1567 1569 +f 8405 21 1103 +f 1570 8405 8406 +f 1574 1571 1333 +f 1571 1568 1577 +f 1587 1572 1563 +f 8407 1564 21 +f 1578 1573 169 +f 1565 1570 1573 +f 1575 1574 1333 +f 1574 1556 1576 +f 1562 1575 1333 +f 1556 1575 1559 +f 1556 1558 1589 +f 1576 1556 1582 +f 1588 1568 1585 +f 1563 1577 1587 +f 169 548 1579 +f 1580 529 1336 +f 529 1578 1579 +f 1579 1578 169 +f 1566 1580 1336 +f 1573 1578 1580 +f 1571 1581 1568 +f 1574 1576 1581 +f 1589 1597 1582 +f 1591 1594 1583 +f 1581 1591 1568 +f 1594 1576 1582 +f 1569 1584 1563 +f 1571 1584 1567 +f 1568 1591 1592 +f 1215 1469 1586 +f 1469 1331 1586 +f 1725 1586 1331 +f 1588 1587 1577 +f 1725 1587 1586 +f 1568 1588 1577 +f 1586 1588 1585 +f 1597 1589 1552 +f 1556 1589 1582 +f 1552 1731 1604 +f 1064 1050 1401 +f 1594 1591 1576 +f 1592 1591 1583 +f 1583 1942 1593 +f 1568 1592 1585 +f 1501 1727 1500 +f 1592 1593 1728 +f 1594 1582 1597 +f 1598 1594 1730 +f 1044 1731 1778 +f 1748 1730 1595 +f 1941 1590 1796 +f 1598 1942 1583 +f 1604 1731 1339 +f 1594 1597 1595 +f 1730 1594 1595 +f 1598 1596 1942 +f 1919 2018 2020 +f 1369 1747 1007 +f 1362 1968 1367 +f 1243 1045 1776 +f 2207 2206 2202 +f 1339 1356 1748 +f 523 1602 1266 +f 571 1602 684 +f 1338 1994 1603 +f 1049 2021 1405 +f 1058 1159 1746 +f 1264 1611 1744 +f 573 2232 1256 +f 1382 1606 1770 +f 1902 1382 1770 +f 1607 1386 1764 +f 1742 1395 1414 +f 1260 1774 1263 +f 1400 1053 1617 +f 1694 1695 1947 +f 2118 1904 1903 +f 2376 2048 2558 +f 2187 1897 1898 +f 1609 2195 2193 +f 1398 1653 1357 +f 1827 1823 1836 +f 1656 1854 1641 +f 1496 1268 1766 +f 1613 1275 1600 +f 3583 1797 1799 +f 1325 1618 1841 +f 2268 2293 2039 +f 1419 1615 1432 +f 1437 1615 1101 +f 1441 1616 1433 +f 1439 1616 1436 +f 1805 1230 1452 +f 1632 1635 1619 +f 1638 1644 1633 +f 1853 1852 1692 +f 1630 1624 1628 +f 1636 1943 1635 +f 1473 1620 1465 +f 1487 1620 1463 +f 1465 1491 1621 +f 1491 1750 1623 +f 1508 1505 1739 +f 1621 1624 1459 +f 1750 1491 1485 +f 1624 1623 1622 +f 1627 1739 1625 +f 1622 1627 1624 +f 1631 1637 1629 +f 1459 1630 1632 +f 1626 1628 1631 +f 1734 1636 1633 +f 1627 1622 1739 +f 1628 1627 1625 +f 1625 1637 1631 +f 1628 1626 1630 +f 1640 1647 1645 +f 1637 1645 1629 +f 1632 1630 1626 +f 1624 1630 1459 +f 1625 1631 1628 +f 1626 1638 1633 +f 1635 1626 1633 +f 1632 1619 1634 +f 1626 1631 1638 +f 1636 1734 1617 +f 1634 1619 1639 +f 1634 1461 1466 +f 1626 1635 1632 +f 1636 1635 1633 +f 1608 1617 1053 +f 1230 1608 1438 +f 1505 1640 1625 +f 1637 1625 1640 +f 1629 1657 1631 +f 1400 1059 1443 +f 1619 1635 1943 +f 1452 1449 1639 +f 1652 1646 1651 +f 1651 1646 1649 +f 1656 1657 1655 +f 1645 1650 1629 +f 1460 1642 1449 +f 1634 1642 1461 +f 1654 1648 1650 +f 1693 1680 1668 +f 1656 1644 1638 +f 1734 1644 1641 +f 1640 1645 1637 +f 1643 1654 1650 +f 1497 1379 1676 +f 1643 1647 1649 +f 1505 1652 1658 +f 1647 1651 1649 +f 1666 1667 1649 +f 1670 1654 1669 +f 1671 1646 1652 +f 1646 1666 1649 +f 1643 1650 1645 +f 1663 1650 1648 +f 1658 1647 1640 +f 1651 1658 1652 +f 1659 1505 1508 +f 1671 1672 1665 +f 2038 1694 2254 +f 1685 1687 1668 +f 1649 1667 1678 +f 1669 1654 1643 +f 1690 1680 1693 +f 1644 1656 1641 +f 1657 1656 1638 +f 1656 1655 1854 +f 1631 1657 1638 +f 1657 1629 1663 +f 1647 1658 1651 +f 1505 1658 1640 +f 1508 1664 1659 +f 1675 1665 1672 +f 1675 1672 1673 +f 1661 1611 1413 +f 1735 1744 1665 +f 1667 1661 1677 +f 1668 1670 1683 +f 1680 1654 1670 +f 1852 1648 1690 +f 1663 1655 1657 +f 1510 1664 1508 +f 1664 1497 1673 +f 1672 1652 1659 +f 1735 1264 1744 +f 1357 1611 1264 +f 1667 1666 1661 +f 1677 1661 1413 +f 1669 1678 1662 +f 1681 1662 1667 +f 1683 1685 1668 +f 1643 1649 1678 +f 1670 1669 1662 +f 1681 8408 1662 +f 1670 1668 1680 +f 1672 1671 1652 +f 1744 1671 1665 +f 1673 1659 1664 +f 1659 1673 1672 +f 1676 1673 1497 +f 1676 1675 1673 +f 1765 1504 1493 +f 1765 1363 1504 +f 1868 1675 1674 +f 1665 1675 1660 +f 1379 1497 1504 +f 1675 1676 1674 +f 1683 8408 1679 +f 8408 1681 1682 +f 1662 1678 1667 +f 1643 1678 1669 +f 1732 1397 1398 +f 1736 1404 1361 +f 1688 1693 1687 +f 1654 1680 1648 +f 1667 1677 1681 +f 1681 1677 1682 +f 1378 1737 1653 +f 1364 1741 1944 +f 8408 1670 1662 +f 1679 2256 1685 +f 1682 1695 1679 +f 1849 1435 1841 +f 1679 1685 1683 +f 1954 1687 1685 +f 1825 1828 1822 +f 1818 1691 1853 +f 1954 1685 1684 +f 1687 1686 1688 +f 1691 1827 1838 +f 1648 1680 1690 +f 1689 1806 1817 +f 1819 1822 1828 +f 1690 1688 1692 +f 1692 1852 1690 +f 1692 1688 1851 +f 1851 1818 1692 +f 1851 1686 1411 +f 1818 1853 1692 +f 1687 1693 1668 +f 1690 1693 1688 +f 1653 1364 1378 +f 1946 2254 1945 +f 1695 1682 1737 +f 2038 1695 1694 +f 2046 2487 3035 +f 1365 1612 1395 +f 188 198 1698 +f 1522 1283 1704 +f 1699 1698 617 +f 1698 1700 1702 +f 379 1699 617 +f 1699 170 1700 +f 1700 1341 1703 +f 1702 1697 1698 +f 1521 1706 1701 +f 1406 1521 1394 +f 170 1341 1700 +f 1706 1704 1525 +f 8409 162 8516 +f 1703 1370 1700 +f 1283 1525 1704 +f 1704 272 1522 +f 1704 1706 1705 +f 1759 1706 1525 +f 1708 1707 1288 +f 1711 1710 1707 +f 3235 1708 1288 +f 2429 1708 1287 +f 1711 1709 1710 +f 1872 1709 1711 +f 1711 1707 1527 +f 8412 1714 1710 +f 1976 1977 1869 +f 1989 1756 1871 +f 1989 8411 1709 +f 1391 1533 1532 +f 2272 2044 1957 +f 1983 1984 1982 +f 8412 1710 1709 +f 1714 1712 1716 +f 1981 1869 1977 +f 1371 1872 1873 +f 5126 5128 1712 +f 1293 1716 1204 +f 1204 1717 1528 +f 5128 1716 1712 +f 1289 1718 1120 +f 1714 1718 1290 +f 5128 1294 1717 +f 1709 1371 1989 +f 2330 1372 1533 +f 1896 1005 1757 +f 2624 2629 2623 +f 1777 2015 2374 +f 8404 1722 780 +f 1559 1722 1555 +f 1334 1722 1723 +f 1559 1723 1722 +f 1557 1724 1555 +f 1558 1724 1550 +f 1331 1564 1725 +f 1587 1725 1564 +f 1315 1745 1029 +f 1590 1748 1790 +f 1478 1727 1476 +f 1728 1215 1585 +f 1593 1727 1728 +f 1215 1728 1727 +f 1050 1052 1323 +f 1340 1369 1729 +f 1941 1730 1590 +f 1598 1730 1596 +f 1748 1590 1730 +f 1597 1552 1604 +f 1601 2459 2385 +f 1641 1059 1734 +f 1267 1064 1755 +f 1041 1034 1039 +f 1644 1734 1633 +f 1695 1737 1378 +f 1739 1505 1625 +f 2459 2327 1860 +f 1404 1443 1361 +f 1855 1361 1443 +f 1744 1646 1671 +f 1264 1965 1964 +f 1653 1677 1413 +f 1653 1398 1364 +f 1063 1368 1618 +f 1226 1354 1224 +f 170 1402 1341 +f 1674 1373 8548 +f 1653 1413 1357 +f 1381 1395 1742 +f 1396 1268 1859 +f 1358 1742 1414 +f 1521 1701 1394 +f 1872 1371 1709 +f 1748 1595 1339 +f 1397 1732 1362 +f 1050 1064 1052 +f 2128 2117 2133 +f 1776 1754 1248 +f 1340 1731 1044 +f 1773 1353 1009 +f 1547 1052 1176 +f 1444 1368 1063 +f 1600 1186 1420 +f 1327 1253 1754 +f 1028 1165 2005 +f 1731 1340 1729 +f 1617 1608 1636 +f 1612 1758 1414 +f 1741 1809 1813 +f 1388 1390 1607 +f 1009 1374 1773 +f 1014 1158 1166 +f 1749 1048 1026 +f 1164 1354 1733 +f 1158 1745 1324 +f 1325 1063 1618 +f 1323 1052 1547 +f 1037 1762 1046 +f 1641 1855 1059 +f 1706 1759 1701 +f 2330 1533 1984 +f 1379 1373 1674 +f 1863 2327 2326 +f 8520 8522 8508 +f 1873 1715 1713 +f 2073 2075 2077 +f 1876 1756 1875 +f 1387 1610 1763 +f 1606 1382 1383 +f 1246 1771 1386 +f 1696 1765 1396 +f 1774 1772 1263 +f 1375 1167 1770 +f 1752 1902 1903 +f 1254 976 1775 +f 1296 1391 1126 +f 1600 1010 1613 +f 1701 1700 1370 +f 1736 1827 1836 +f 1395 1381 1343 +f 2491 2388 2471 +f 8506 1175 8509 +f 1429 1061 1434 +f 573 1605 2232 +f 1132 1258 550 +f 1009 1770 1606 +f 1382 1752 2006 +f 1776 1248 1244 +f 1775 1774 1254 +f 1045 1338 1776 +f 2016 1318 1039 +f 1996 1999 2000 +f 1044 1778 1155 +f 1552 1778 1731 +f 1785 1781 1783 +f 1062 1399 1779 +f 1918 1787 1788 +f 1860 1380 2047 +f 1779 1783 1782 +f 1792 1795 1506 +f 1783 1779 1747 +f 1781 2494 2495 +f 1784 1747 1060 +f 1747 1784 1783 +f 1789 1921 1920 +f 1785 1780 2496 +f 1783 1784 1785 +f 1726 1789 1784 +f 1924 1927 1786 +f 1924 1786 1921 +f 1784 1918 1785 +f 1932 1786 1927 +f 1918 1784 1789 +f 2033 1787 1934 +f 2017 1789 1726 +f 1934 1920 1786 +f 1793 1790 1062 +f 1793 1795 1790 +f 2573 2494 2496 +f 2324 1793 1794 +f 1506 1509 1939 +f 1590 1790 1796 +f 1794 1793 1062 +f 1795 1793 1791 +f 2552 2957 2720 +f 2381 2377 2037 +f 1795 1791 3034 +f 1795 1792 1796 +f 1795 1796 1790 +f 1941 1796 1792 +f 1613 1010 1799 +f 1359 1800 1802 +f 1415 1798 1184 +f 1799 1798 1613 +f 1428 3584 1418 +f 3470 3583 3584 +f 3249 1359 3469 +f 1801 1803 1301 +f 1184 1801 1537 +f 1803 1801 1800 +f 1800 1801 1802 +f 1184 1802 1801 +f 3246 1803 1800 +f 1803 1541 1543 +f 1958 1804 1426 +f 1804 1352 3586 +f 1943 1639 1619 +f 1608 1805 1636 +f 1741 1364 1810 +f 1945 1806 1689 +f 1969 1973 1738 +f 1861 2558 1974 +f 2048 2644 2558 +f 2743 1812 1040 +f 1809 1811 1812 +f 1813 1809 1808 +f 1811 1810 1410 +f 1741 1810 1809 +f 1367 1811 1410 +f 1812 1811 1412 +f 1948 1812 1412 +f 2743 1040 2742 +f 1813 1808 1815 +f 1806 1741 1813 +f 1815 1816 1814 +f 1850 2269 1833 +f 1815 1808 2752 +f 1817 1815 1814 +f 2401 2400 1955 +f 2406 2408 2305 +f 1817 1814 8436 +f 1813 1817 1806 +f 1820 1821 1822 +f 1822 1819 1950 +f 1695 2038 1679 +f 1819 1828 1842 +f 2043 1849 1848 +f 1823 1827 1821 +f 1824 1818 1411 +f 1821 1820 1823 +f 1824 1821 1818 +f 1825 1411 1829 +f 1823 1820 2266 +f 1368 1736 1836 +f 1825 1824 1411 +f 1821 1824 1822 +f 1831 1829 1832 +f 1829 1686 1832 +f 1952 1950 1819 +f 1618 1826 1846 +f 1361 1827 1736 +f 1821 1827 1691 +f 1825 1829 1831 +f 1834 1845 1835 +f 1411 1686 1829 +f 1831 1832 1830 +f 2398 2497 2259 +f 1843 1839 1842 +f 1835 1831 1830 +f 1825 1831 1845 +f 1954 1686 1687 +f 1832 1954 2260 +f 2257 1684 2256 +f 3846 3854 3849 +f 1830 2260 2263 +f 1839 1843 1850 +f 2262 1830 2261 +f 1845 1834 1843 +f 2266 1836 1823 +f 1368 1836 1826 +f 2265 2039 2264 +f 1842 1844 1953 +f 1361 1751 1838 +f 1838 1751 1853 +f 2274 2275 2279 +f 2267 1950 1952 +f 2268 2265 2266 +f 1325 1841 1435 +f 1847 1840 2264 +f 1841 1840 1847 +f 1843 1842 1828 +f 1842 1839 2405 +f 1828 1825 1845 +f 1843 1834 1850 +f 2298 2282 2294 +f 1987 1376 5684 +f 1835 1845 1831 +f 1828 1845 1843 +f 2265 1846 1826 +f 1841 1846 1840 +f 1847 1837 2270 +f 1849 1425 8402 +f 1848 1847 2270 +f 1804 1958 1352 +f 1841 1847 1849 +f 1848 1849 1847 +f 2269 1850 1834 +f 1850 1833 2318 +f 1686 1851 1688 +f 1818 1851 1411 +f 1655 1852 1751 +f 1648 1852 1663 +f 1838 1853 1691 +f 1852 1853 1751 +f 1655 1751 1854 +f 1361 1854 1751 +f 1059 1855 1443 +f 1854 1855 1641 +f 2475 1959 2387 +f 1793 2324 1791 +f 1858 1857 1856 +f 1859 1857 1858 +f 2326 2327 2380 +f 1858 1343 1381 +f 1396 1859 1696 +f 1268 1857 1859 +f 2384 2253 2252 +f 1861 2380 1601 +f 1975 1365 1408 +f 1856 2472 2396 +f 1788 1787 2033 +f 2493 2487 2046 +f 2476 2488 2486 +f 2566 2676 3036 +f 3011 2885 3017 +f 1863 2326 1962 +f 1864 2384 2252 +f 2477 2489 2480 +f 2327 1601 2380 +f 2477 2482 2464 +f 1409 1963 1961 +f 1964 1966 1362 +f 1675 1868 1660 +f 8548 1868 1674 +f 1979 1976 1715 +f 1403 2598 2425 +f 4507 1874 3971 +f 1531 1372 2609 +f 1756 4179 4864 +f 1870 5125 5124 +f 1979 1711 1527 +f 1873 1872 1715 +f 2055 2056 1713 +f 1756 1371 1875 +f 2052 1869 2050 +f 2954 3258 2051 +f 1371 1873 1875 +f 1876 1875 1873 +f 1713 1876 1873 +f 1874 4507 4176 +f 4533 3968 4517 +f 1985 1983 1982 +f 1122 2070 2069 +f 2333 2331 2337 +f 1880 1879 615 +f 1297 2064 1881 +f 1880 615 305 +f 923 1880 511 +f 1883 1881 528 +f 834 1879 1881 +f 1882 1883 1886 +f 1890 837 1895 +f 2332 1886 1883 +f 1885 1883 1882 +f 2333 2434 2331 +f 1887 1891 1892 +f 1885 1882 1888 +f 1881 1885 834 +f 2332 1883 528 +f 2710 1884 2709 +f 1882 1892 1890 +f 837 1890 1891 +f 1888 1882 1890 +f 837 1134 1895 +f 1885 1888 1889 +f 1992 1889 1888 +f 1895 1888 1890 +f 1892 1882 1886 +f 1892 1884 2710 +f 1887 837 1891 +f 1890 1892 1891 +f 1894 1129 1893 +f 1992 1377 842 +f 1893 1134 1894 +f 1134 1893 1895 +f 1366 1898 1896 +f 1045 1896 1900 +f 2193 1385 1609 +f 8418 1995 1897 +f 1385 2193 1366 +f 1899 1898 1897 +f 8418 1993 1995 +f 1338 1899 1994 +f 1898 1900 1896 +f 1338 1900 1899 +f 2374 2003 2250 +f 2110 2112 2100 +f 1902 1388 1903 +f 1382 1902 1752 +f 1388 1607 2007 +f 1912 1903 1388 +f 1761 2013 1904 +f 1752 1903 1904 +f 1905 2013 1910 +f 1772 1907 1263 +f 2088 2089 2092 +f 2112 2119 1906 +f 1383 1907 1772 +f 1907 1905 1910 +f 1908 1910 1911 +f 8427 1014 8429 +f 1048 1263 1909 +f 1907 1909 1263 +f 1905 1904 2013 +f 1909 1910 1908 +f 2112 1901 2100 +f 1908 1911 2375 +f 2007 1912 1388 +f 1906 2119 2118 +f 1914 1913 926 +f 2086 1913 1777 +f 1914 926 1771 +f 2015 1914 1318 +f 2004 974 2005 +f 2004 1915 974 +f 2072 2074 1998 +f 2010 1901 2011 +f 2253 2379 2252 +f 1937 2378 2033 +f 1918 1789 1920 +f 1788 1785 1918 +f 2017 2018 1919 +f 1920 1921 1786 +f 1918 1920 1787 +f 1789 2017 1921 +f 1922 1919 2020 +f 1922 1921 1919 +f 1923 1355 2021 +f 1922 1923 1924 +f 2022 2023 2024 +f 1927 1930 1926 +f 2026 2028 2032 +f 1927 1938 1930 +f 2144 2029 2139 +f 2460 2465 2467 +f 1931 1935 1926 +f 1927 2466 1932 +f 1938 1924 1923 +f 2466 2467 2465 +f 2022 1923 2023 +f 1930 1928 1931 +f 1929 2034 1937 +f 1932 1934 1786 +f 1938 1927 1924 +f 1928 2028 1931 +f 1935 1931 1925 +f 1926 1930 1931 +f 2466 1927 1926 +f 1934 1932 1929 +f 2458 1935 1936 +f 1936 2177 2452 +f 1934 1929 1937 +f 1934 1787 1920 +f 1936 1935 1925 +f 1935 1933 2467 +f 1925 1931 2028 +f 2157 2177 1936 +f 2492 1794 2494 +f 1860 2327 1863 +f 2032 1923 2022 +f 1930 1938 1928 +f 1940 1939 1509 +f 1941 1939 1940 +f 1511 1940 1509 +f 1942 1940 1500 +f 1941 1596 1730 +f 1792 1939 1941 +f 1500 1593 1942 +f 1941 1942 1596 +f 1636 1805 1943 +f 1639 1943 1805 +f 1364 1944 1378 +f 1741 1806 1944 +f 1946 1945 1689 +f 1947 1945 1694 +f 1816 2757 1814 +f 2260 1684 2257 +f 1944 1947 1378 +f 1945 1947 1806 +f 1949 1948 1412 +f 2649 1948 1807 +f 1367 1949 1412 +f 1949 1738 1973 +f 1953 1951 1952 +f 1820 1822 1950 +f 2281 2285 2279 +f 1837 1847 2264 +f 1953 1952 1819 +f 2268 2267 1951 +f 1842 1953 1819 +f 1953 1844 8540 +f 2260 1954 1684 +f 1686 1954 1832 +f 2739 2740 2648 +f 2276 2285 2287 +f 2294 2282 2295 +f 1876 1713 2056 +f 2042 2272 2270 +f 3586 2044 1614 +f 1958 1426 8403 +f 1352 1958 1957 +f 2378 1780 2033 +f 1937 2034 2037 +f 1961 1393 1409 +f 1960 1867 1964 +f 1963 1409 2363 +f 1867 1960 1961 +f 1975 2363 2549 +f 1969 1738 1966 +f 2363 1409 2549 +f 1963 1962 1971 +f 1966 1964 1867 +f 1964 1362 1732 +f 1735 1660 1965 +f 1960 1965 1660 +f 2326 1970 1971 +f 1738 1367 1968 +f 2472 1856 2671 +f 1973 1807 1949 +f 1362 1966 1968 +f 1738 1968 1966 +f 1970 1966 1867 +f 1969 1967 1974 +f 1971 1970 1867 +f 1967 1969 1970 +f 1963 1971 1867 +f 1971 1962 2326 +f 1408 1365 2455 +f 1972 2558 2644 +f 1974 1973 1969 +f 2650 1973 1972 +f 1380 1863 2363 +f 1973 1974 1972 +f 2047 1380 1975 +f 2390 2376 1601 +f 1976 1979 1977 +f 2053 1869 2052 +f 1978 1527 2049 +f 1527 1978 1977 +f 2511 2599 2602 +f 1980 2427 2050 +f 1872 1979 1715 +f 1527 1977 1979 +f 1978 1980 1981 +f 2429 2432 2428 +f 1978 1981 1977 +f 2050 1981 1980 +f 1982 5126 5125 +f 1870 5130 8475 +f 5125 1985 1982 +f 5123 5129 4863 +f 1984 1533 1391 +f 8475 1983 1985 +f 1870 5269 5130 +f 1533 1372 1531 +f 1983 2330 1984 +f 2331 2434 2063 +f 4864 1871 1756 +f 1986 2512 5951 +f 2629 2621 2622 +f 1372 2330 1988 +f 1756 1989 1371 +f 8411 1989 1871 +f 1990 2063 2062 +f 923 2061 2062 +f 1991 2065 2066 +f 1991 2068 2071 +f 1889 1992 842 +f 1895 1992 1888 +f 1407 2075 2072 +f 1997 1603 1994 +f 1899 1995 1994 +f 1996 1997 1995 +f 1897 1995 1899 +f 1995 1993 1999 +f 1996 1995 1999 +f 1033 1603 1997 +f 1995 1997 1994 +f 1033 1997 1996 +f 1998 1999 2072 +f 1996 2000 1033 +f 2072 1999 1993 +f 2000 1999 1998 +f 1998 2001 2000 +f 2250 2001 2002 +f 1998 1916 2001 +f 1916 2088 2001 +f 2087 2010 1225 +f 1913 2086 1225 +f 1033 2000 2003 +f 2000 2001 2250 +f 1033 2003 2004 +f 1915 2004 2003 +f 1028 2005 974 +f 1033 2005 1165 +f 1382 2006 1383 +f 1904 2006 1752 +f 2008 2007 1607 +f 2009 2007 2011 +f 1764 2008 1607 +f 2008 1225 2010 +f 2112 2009 1901 +f 1906 2007 2009 +f 1225 2086 2087 +f 8430 2088 1916 +f 2007 2008 2011 +f 2010 2011 2008 +f 2026 2144 2028 +f 2435 2113 2135 +f 1761 1911 2013 +f 1910 2013 1911 +f 2128 2121 2107 +f 2438 1229 2346 +f 1914 2015 1777 +f 2016 2015 1318 +f 1031 2016 1038 +f 974 1915 2016 +f 2018 2017 1726 +f 1921 2017 1919 +f 1755 2018 1726 +f 2019 2018 1401 +f 1599 2019 1401 +f 2020 2019 1733 +f 2020 1733 1226 +f 1922 2020 1355 +f 1405 2021 1355 +f 2023 2021 1049 +f 2022 1015 2026 +f 2032 1938 1923 +f 2021 2023 1923 +f 2024 2023 1049 +f 1054 2024 1049 +f 1015 2022 2024 +f 2438 2439 2029 +f 2029 1015 2438 +f 2437 2014 2514 +f 2516 2712 2515 +f 2515 2135 2136 +f 2028 2144 2145 +f 2029 2026 1015 +f 2032 2028 1928 +f 2140 2121 2030 +f 2133 2027 2030 +f 1223 2158 2126 +f 1936 2147 2157 +f 2347 2029 2025 +f 1936 1925 2147 +f 1938 2032 1928 +f 2026 2032 2022 +f 1788 2033 1780 +f 1934 1937 2033 +f 2465 2034 1929 +f 2390 1601 2385 +f 2458 2457 1933 +f 2392 2381 1917 +f 2381 2034 1917 +f 2037 2377 2379 +f 2468 2463 2461 +f 3290 2485 3293 +f 2038 2258 2257 +f 1685 2256 1684 +f 1840 1846 2265 +f 2042 2270 2403 +f 1834 1835 2262 +f 2307 2314 2322 +f 4135 3616 3502 +f 2697 2410 2692 +f 2403 2039 2271 +f 2278 2275 2277 +f 1849 2043 1425 +f 2272 2043 1848 +f 1352 1957 2044 +f 2043 2272 1957 +f 2273 2045 2042 +f 1614 2044 2045 +f 2573 2253 2384 +f 2475 2487 1959 +f 2376 2464 2048 +f 2559 2381 1743 +f 2645 2644 2048 +f 1861 1974 1967 +f 1707 2049 1527 +f 1708 1978 2049 +f 2425 2328 2424 +f 1981 2050 1869 +f 2328 2954 2424 +f 2045 2273 2278 +f 1713 1976 2053 +f 2053 1976 1869 +f 4516 4514 2052 +f 4515 3965 4513 +f 2277 2291 1614 +f 2288 2688 2687 +f 2055 2053 3960 +f 2056 2055 2054 +f 2054 4506 3969 +f 1876 2056 1874 +f 2428 2329 2427 +f 2329 2428 2431 +f 3148 3154 3124 +f 1878 8452 2628 +f 8543 2334 2608 +f 1720 1207 1534 +f 2060 857 2065 +f 2061 2060 1990 +f 2061 1990 2062 +f 2061 668 812 +f 1990 2071 2063 +f 1881 2064 528 +f 2063 1878 2331 +f 2063 2434 2064 +f 1297 2062 2064 +f 2063 2064 2062 +f 2066 2065 805 +f 2060 2065 1991 +f 1123 2066 805 +f 2066 1122 2069 +f 2616 2334 591 +f 2335 2334 2433 +f 2069 2068 2066 +f 8452 2068 2067 +f 1122 1128 2070 +f 2068 2069 2067 +f 2622 2070 1529 +f 2067 2069 2070 +f 2063 2071 1878 +f 1990 1991 2071 +f 8418 2072 1993 +f 2075 2074 2072 +f 2077 2080 2076 +f 2092 2089 2093 +f 8430 2074 2073 +f 1916 1998 2074 +f 2078 2080 1407 +f 2073 2074 2075 +f 2129 2130 2123 +f 2338 2085 8432 +f 1407 2077 2075 +f 2082 2083 2081 +f 2194 1897 2187 +f 2188 2186 2195 +f 2520 2157 2146 +f 2102 2095 2106 +f 1407 2080 2077 +f 2080 2078 2162 +f 2077 2083 2082 +f 2090 2094 2089 +f 2083 2077 2076 +f 2090 2089 8430 +f 2198 2191 2154 +f 2081 2083 2085 +f 2138 2126 2143 +f 2099 2105 2098 +f 2168 2167 2175 +f 2131 2152 2154 +f 2374 2086 1777 +f 2086 2002 2087 +f 2002 2088 2087 +f 2090 2073 2082 +f 2001 2088 2002 +f 2088 8430 2089 +f 2339 2094 2338 +f 2087 2092 2010 +f 2082 2081 2090 +f 2094 2090 2081 +f 2099 2102 2106 +f 2104 2092 2093 +f 2088 2092 2087 +f 2093 2089 2091 +f 2096 2093 2091 +f 2100 1901 2104 +f 2094 2081 2338 +f 2089 2094 2091 +f 2096 2091 2097 +f 2095 2108 2110 +f 2091 2339 2097 +f 2100 2096 2095 +f 2097 2079 2099 +f 2096 2097 2106 +f 2105 2099 2115 +f 2108 2107 2012 +f 2085 2167 8431 +f 2099 2098 2102 +f 2102 2108 2095 +f 1901 2010 2104 +f 2125 2129 2143 +f 2122 2123 2120 +f 2107 2102 2098 +f 2102 2107 2108 +f 2109 2103 2110 +f 2118 1761 1904 +f 2092 2104 2010 +f 2096 2104 2093 +f 2115 2099 2079 +f 2174 2117 2116 +f 2096 2106 2095 +f 2099 2106 2097 +f 2105 2122 2098 +f 2135 2134 2124 +f 2109 2108 2012 +f 2108 2109 2110 +f 2012 2113 2109 +f 2343 2114 2342 +f 2110 2103 2112 +f 2100 2095 2110 +f 2134 2121 2124 +f 2436 2437 2514 +f 2119 2103 2114 +f 2009 2112 1906 +f 2121 2012 2107 +f 2342 2103 2341 +f 1912 1906 2118 +f 2103 2109 2341 +f 2079 2338 8432 +f 2105 2115 8431 +f 2172 2361 2165 +f 2128 2098 2122 +f 2136 2447 2446 +f 2117 2027 2133 +f 1912 2118 1903 +f 2343 2118 2114 +f 2103 2119 2112 +f 2118 2119 2114 +f 2123 2105 2101 +f 2355 2159 2030 +f 2107 2098 2128 +f 2133 2121 2128 +f 2123 2122 2105 +f 2128 2122 2120 +f 2101 2129 2123 +f 2125 2130 2129 +f 2128 2120 2117 +f 2435 2135 2111 +f 2445 2446 2151 +f 2129 2101 2137 +f 2120 2130 2117 +f 2101 2141 2152 +f 2155 2163 2137 +f 2084 2156 2351 +f 2448 2354 2160 +f 2166 2126 2158 +f 2125 2126 2173 +f 2116 2130 2125 +f 2117 2130 2116 +f 2123 2130 2120 +f 2131 2137 2152 +f 2121 2133 2030 +f 2138 1223 2126 +f 2121 2134 2012 +f 2113 2012 2134 +f 2134 2135 2113 +f 2135 2124 2150 +f 2140 2124 2121 +f 2160 2354 2159 +f 2101 8431 2141 +f 2155 2137 2131 +f 2143 2126 2125 +f 2084 1223 2138 +f 2146 2352 2349 +f 2028 2145 1925 +f 2168 2175 2076 +f 2135 2150 2136 +f 2154 2161 2153 +f 2155 2182 2142 +f 2138 2143 2156 +f 2163 2143 2129 +f 2143 2163 2156 +f 2029 2144 2026 +f 2144 2139 2145 +f 2145 2352 2147 +f 1925 2145 2147 +f 2347 2139 2029 +f 2171 2348 2164 +f 2352 2145 2139 +f 2157 2147 2146 +f 2713 2714 2637 +f 1223 2148 2158 +f 2349 2519 2146 +f 2124 2140 2150 +f 2140 2159 2447 +f 2030 2159 2140 +f 2354 2445 2151 +f 2101 2152 2137 +f 2141 2161 2154 +f 2168 2076 2181 +f 2453 2452 2177 +f 2141 2154 2152 +f 2198 2364 2191 +f 2131 2154 2191 +f 2156 2163 2142 +f 2351 2156 2142 +f 2138 2156 2084 +f 2449 2362 2520 +f 2530 2179 2531 +f 2172 2158 2148 +f 2166 2174 2173 +f 2355 2030 2027 +f 2159 2151 2447 +f 2166 2165 2356 +f 2356 2358 2160 +f 2167 2161 2141 +f 2168 2161 2167 +f 2183 2181 2176 +f 2182 2185 2127 +f 2137 2163 2129 +f 2142 2163 2155 +f 2450 2526 2362 +f 2521 3026 3030 +f 2360 2718 2357 +f 2027 2356 2355 +f 2166 2158 2172 +f 2027 2174 2166 +f 8431 2167 2141 +f 2175 2085 2083 +f 2076 2162 2181 +f 2168 2183 2190 +f 2185 2191 2364 +f 2164 2533 2171 +f 2551 2556 1866 +f 2458 2452 2457 +f 2535 2532 2171 +f 2520 2362 2526 +f 2357 2358 2360 +f 2166 2172 2165 +f 2125 2173 2116 +f 2126 2166 2173 +f 2117 2174 2027 +f 2173 2174 2116 +f 2085 2175 2167 +f 2076 2175 2083 +f 2183 2176 2189 +f 2181 2183 2168 +f 2178 2197 2189 +f 2192 2162 2078 +f 2189 2176 2196 +f 2212 2207 2210 +f 2527 2529 2537 +f 2076 2080 2162 +f 2153 2183 2197 +f 2206 2199 2178 +f 2188 1384 2196 +f 2351 2182 2127 +f 2131 2182 2155 +f 2185 2169 2127 +f 2183 2153 2190 +f 2201 1389 2169 +f 2180 2178 2184 +f 2191 2182 2131 +f 2182 2191 2185 +f 8418 2194 1407 +f 2188 2195 1384 +f 1366 2187 1898 +f 2186 2192 2194 +f 2176 2162 2188 +f 2188 2162 2192 +f 2176 2188 2196 +f 2197 2178 2180 +f 2153 2161 2190 +f 2168 2190 2161 +f 2153 2198 2154 +f 2198 2153 2180 +f 2192 2078 2194 +f 2188 2192 2186 +f 2186 2187 2193 +f 2193 2187 1366 +f 2194 2187 2186 +f 2078 1407 2194 +f 2193 2195 2186 +f 2214 2195 1609 +f 2202 2196 1384 +f 2189 2196 2206 +f 2153 2197 2180 +f 2183 2189 2197 +f 2180 2200 2198 +f 2201 2364 2200 +f 2214 2217 2211 +f 2199 2208 2213 +f 2180 2184 2200 +f 2201 2200 2184 +f 1389 2201 2184 +f 2169 2185 2364 +f 2237 2239 2245 +f 2184 2229 1389 +f 1609 2218 2214 +f 2249 2212 2233 +f 2229 2228 1389 +f 2212 2227 2207 +f 2210 2211 2209 +f 2208 2199 2227 +f 2189 2206 2178 +f 2202 2206 2196 +f 2195 2214 1384 +f 2207 2202 2210 +f 2213 2229 2184 +f 2209 2233 2212 +f 2244 2227 2240 +f 2211 2202 1384 +f 2212 2210 2209 +f 2214 2211 1384 +f 2211 2217 2220 +f 2233 2234 2238 +f 2227 2199 2207 +f 2184 2178 2213 +f 2199 2213 2178 +f 2215 2218 1385 +f 1760 1535 2216 +f 2217 2203 2220 +f 2216 1392 2221 +f 1760 2216 2215 +f 2218 2217 2214 +f 2225 2215 2224 +f 1385 2218 1609 +f 2217 2218 2215 +f 2232 922 1133 +f 2219 2366 2236 +f 2234 2220 2203 +f 2211 2220 2209 +f 2222 1392 922 +f 2221 2219 2223 +f 2225 2223 2203 +f 2219 2221 2222 +f 2366 2230 2236 +f 2203 2217 2225 +f 2215 2225 2217 +f 2365 2367 1769 +f 2223 2225 2224 +f 2236 2235 2203 +f 2238 2239 2233 +f 2240 2227 2212 +f 2204 2208 2227 +f 2213 2208 2229 +f 2208 2204 2228 +f 2228 2229 2208 +f 2241 2242 2368 +f 2230 2242 2235 +f 2366 646 2369 +f 2231 2222 922 +f 2232 1133 1206 +f 1605 2231 2232 +f 2209 2220 2234 +f 2372 2247 2373 +f 2234 2203 2235 +f 2209 2234 2233 +f 2236 2203 2223 +f 2239 2249 2233 +f 2219 2236 2223 +f 2230 2235 2236 +f 2239 2238 2246 +f 2247 2372 19 +f 2243 2237 2247 +f 2234 2235 2238 +f 2249 2239 2237 +f 2237 2245 2247 +f 2227 2244 2204 +f 2242 2238 2235 +f 2368 2230 2369 +f 2368 2242 2230 +f 2242 2241 2246 +f 2248 2237 2243 +f 2249 2237 2248 +f 2246 2245 2239 +f 2240 2205 2244 +f 2373 2370 2226 +f 2242 2246 2238 +f 2245 2246 2241 +f 19 2371 2247 +f 2243 2205 2248 +f 2249 2205 2240 +f 2205 2249 2248 +f 2212 2249 2240 +f 2002 2086 2374 +f 2000 2250 2003 +f 2343 2345 1911 +f 8421 8415 8417 +f 2383 1865 2385 +f 2669 2563 2673 +f 2721 2455 2472 +f 2384 2382 2386 +f 1945 2254 1694 +f 2258 2254 1946 +f 2257 2398 2255 +f 2421 1955 8451 +f 1679 2038 2256 +f 2257 2256 2038 +f 2038 2254 2258 +f 2257 2255 2260 +f 1946 2497 2398 +f 2257 2258 2398 +f 8435 2497 1946 +f 2259 2574 2400 +f 2263 2260 2255 +f 2260 1830 1832 +f 2402 2400 2401 +f 2269 2262 2040 +f 1830 2262 1835 +f 2040 2262 2261 +f 2402 2263 2255 +f 1830 2263 2261 +f 2265 2264 1840 +f 2403 2264 2039 +f 1826 1836 2266 +f 2268 2266 2267 +f 2266 1820 2267 +f 1826 2266 2265 +f 1950 2267 1820 +f 1951 2267 1952 +f 2293 2268 1951 +f 2268 2039 2265 +f 2262 2269 1834 +f 2421 2040 2401 +f 2403 2270 1837 +f 2272 2042 2045 +f 1953 8540 1951 +f 2271 2284 2289 +f 2270 2272 1848 +f 2044 2272 2045 +f 2289 2273 2042 +f 2273 1956 2275 +f 2284 2283 1956 +f 2688 2686 2687 +f 2285 2281 2283 +f 2277 2275 2274 +f 2592 2301 2302 +f 2404 2684 2685 +f 2686 2274 2583 +f 2278 1614 2045 +f 2275 2278 2273 +f 1614 2278 2277 +f 1956 2281 2275 +f 2584 2499 2583 +f 2274 2279 2583 +f 3257 2950 2953 +f 2281 1956 2283 +f 2279 2275 2281 +f 2284 2271 2292 +f 2306 2296 2304 +f 1956 2289 2284 +f 2285 2283 2282 +f 2290 2292 2293 +f 2283 2284 2295 +f 2300 2282 2298 +f 2279 2285 2276 +f 2311 2309 2591 +f 2311 2591 2302 +f 2300 2285 2282 +f 2287 2286 2690 +f 2277 2688 2291 +f 3251 2280 2945 +f 2273 2289 1956 +f 2289 2042 2403 +f 2299 2303 2306 +f 2294 2295 2292 +f 2688 2277 2274 +f 3252 2291 2288 +f 2293 2292 2271 +f 2292 2290 2294 +f 2039 2293 2271 +f 2293 1951 8540 +f 2298 2299 2297 +f 2294 2299 2298 +f 2283 2295 2282 +f 2292 2295 2284 +f 2308 2310 2313 +f 2421 2320 2040 +f 2297 2302 2301 +f 2301 2287 2300 +f 2299 2294 2290 +f 2300 2298 2297 +f 2303 2299 2290 +f 2304 2299 2306 +f 2301 2300 2297 +f 2300 2287 2285 +f 2297 2304 2302 +f 2287 2301 2286 +f 2296 2306 2308 +f 2302 2296 2311 +f 8540 2303 2290 +f 2308 2306 2310 +f 2302 2304 2296 +f 2297 2299 2304 +f 2411 2407 2409 +f 2305 2408 2416 +f 2310 2303 1844 +f 2317 2314 2313 +f 2323 2321 2322 +f 2308 2313 2316 +f 2303 2310 2306 +f 2309 2311 2315 +f 2315 2311 2296 +f 2305 2418 2589 +f 1844 2405 2310 +f 2313 2307 2316 +f 2315 2296 2308 +f 2591 2309 2590 +f 2409 2413 2411 +f 2590 2406 2305 +f 2317 2310 2405 +f 2318 2314 2317 +f 1833 2269 2320 +f 2307 2313 2314 +f 2316 2315 2308 +f 2315 2312 2309 +f 2316 2307 2413 +f 2315 2316 2312 +f 2310 2317 2313 +f 1839 1850 2318 +f 2314 2318 1833 +f 1839 2318 2317 +f 3930 2415 3937 +f 2912 3111 2914 +f 2040 2320 2269 +f 2509 2422 2320 +f 2314 1833 2323 +f 2406 2409 2408 +f 2323 2322 2314 +f 2413 2321 2411 +f 1833 2320 2323 +f 2422 2323 2320 +f 2324 1794 2492 +f 2324 2046 3035 +f 1970 2326 1967 +f 2363 1863 1962 +f 1963 2363 1962 +f 1864 2252 2393 +f 2470 2388 1864 +f 2383 2385 2459 +f 2511 2598 2599 +f 2425 2598 2328 +f 2428 1980 1978 +f 2511 2602 2426 +f 1983 1987 2330 +f 1988 2330 1987 +f 1988 1987 2059 +f 2332 1884 1886 +f 1376 8475 5475 +f 8541 8543 2607 +f 2064 2434 528 +f 2707 2706 2630 +f 1207 1720 2335 +f 2609 1988 2610 +f 2513 2619 2617 +f 2618 2433 2617 +f 2618 2336 2630 +f 2628 8452 2627 +f 2337 2632 2709 +f 2097 2339 2079 +f 2081 2085 2338 +f 2094 2339 2091 +f 2079 2339 2338 +f 2344 2436 2514 +f 1761 2118 2343 +f 2113 2341 2109 +f 2342 2341 2340 +f 2342 2340 2343 +f 2103 2342 2114 +f 2344 2343 2340 +f 1911 1761 2343 +f 2340 2435 2436 +f 2375 2345 2344 +f 2343 2344 2345 +f 2375 2344 2251 +f 8424 8419 8420 +f 2029 2439 2025 +f 2535 2444 2532 +f 2139 2347 2350 +f 2443 2638 2525 +f 2357 2714 2448 +f 2525 2524 2025 +f 2449 2520 2146 +f 2524 2350 2347 +f 2352 2350 2349 +f 2352 2139 2350 +f 2182 2351 2142 +f 2146 2147 2352 +f 2171 2532 2348 +f 2442 2443 2441 +f 2445 2354 2149 +f 2159 2354 2151 +f 2027 2166 2356 +f 2159 2355 2160 +f 2358 2357 2448 +f 2160 2355 2356 +f 2536 2713 2719 +f 2354 2448 2149 +f 2356 2165 2358 +f 2361 2172 2148 +f 2148 2359 2361 +f 2132 2360 2359 +f 2361 2358 2165 +f 2359 2360 2361 +f 2361 2360 2358 +f 2177 2526 2451 +f 2526 2450 2451 +f 2457 2423 2461 +f 2461 2463 2460 +f 2200 2364 2198 +f 2169 2364 2201 +f 2367 2231 1769 +f 646 2366 2365 +f 2367 2366 2219 +f 2219 2222 2367 +f 2231 2367 2222 +f 646 2226 2368 +f 2373 2247 2245 +f 2366 2369 2230 +f 646 2368 2369 +f 2241 2368 2370 +f 2368 2226 2370 +f 2241 2370 2373 +f 2243 2247 2371 +f 2373 2245 2241 +f 2372 2373 2226 +f 2003 2374 1915 +f 2002 2374 2250 +f 2345 2375 1911 +f 8417 8415 8416 +f 2551 1860 2047 +f 2663 2667 2561 +f 2392 1917 2463 +f 2485 2456 3510 +f 2379 1937 2037 +f 2378 2253 2573 +f 2253 2378 2379 +f 2379 2378 1937 +f 1860 2383 2459 +f 2396 2455 1343 +f 2471 2387 1959 +f 1865 2035 1862 +f 1861 1967 2380 +f 2493 2490 2491 +f 2480 2474 2477 +f 2723 2721 2641 +f 2455 1395 1343 +f 2382 2490 2386 +f 2734 2035 2730 +f 2252 2379 2377 +f 2386 2492 2494 +f 2384 2386 2573 +f 3084 3087 3086 +f 2048 2464 2482 +f 3013 2456 2656 +f 2389 2388 2470 +f 2377 2559 2469 +f 2661 2394 2387 +f 1865 2390 2385 +f 2471 2388 2389 +f 2476 2486 2564 +f 1743 2392 2468 +f 1975 1380 2363 +f 2493 2491 1959 +f 2392 1743 2381 +f 2463 2468 2392 +f 2455 2396 2472 +f 2397 2486 2562 +f 3033 3034 2478 +f 2390 1865 1862 +f 2389 2470 2662 +f 2671 1856 2672 +f 2252 2469 2393 +f 2730 2035 2965 +f 1946 2398 2258 +f 2400 2398 2259 +f 8435 8436 8433 +f 8437 2041 8440 +f 2398 2400 2255 +f 8441 2259 2497 +f 2040 2261 2401 +f 2401 2261 2402 +f 2263 2402 2261 +f 2255 2400 2402 +f 2403 1837 2264 +f 2289 2403 2271 +f 2682 2585 2276 +f 2590 2305 2589 +f 1842 2405 1844 +f 2317 2405 1839 +f 2309 2312 2406 +f 2409 2407 2408 +f 2417 2407 2501 +f 2417 2416 2408 +f 2409 2406 2312 +f 2417 2412 2416 +f 2413 2312 2316 +f 2321 2413 2322 +f 2411 2419 2407 +f 2410 2506 2503 +f 2321 2414 2411 +f 2414 2415 2419 +f 2418 2698 2593 +f 2416 2418 2305 +f 2413 2409 2312 +f 2322 2413 2307 +f 2422 2414 2321 +f 2414 2319 2415 +f 2319 2509 2510 +f 1955 2575 2582 +f 2417 2408 2407 +f 2416 2412 2698 +f 2407 2419 2501 +f 2594 2506 2410 +f 2593 2594 2596 +f 2684 2404 2499 +f 2414 2419 2411 +f 2501 2419 2415 +f 2582 2578 2580 +f 2422 2509 2319 +f 1955 2421 2401 +f 2320 2421 2420 +f 2414 2422 2319 +f 2323 2422 2321 +f 2464 2390 1862 +f 2327 2459 1601 +f 2424 2051 4516 +f 2425 2424 2052 +f 2052 2050 2425 +f 1403 2425 2050 +f 2605 2426 2602 +f 2051 2424 2954 +f 2428 2427 1980 +f 2599 2427 2329 +f 1978 2429 2428 +f 2431 2428 2432 +f 1708 2429 1978 +f 3233 2432 1287 +f 3233 3235 3237 +f 3232 2925 3461 +f 2430 2057 2431 +f 2057 2329 2431 +f 1287 2432 2429 +f 2430 2431 2432 +f 2332 2333 2711 +f 2711 2337 2709 +f 2341 2435 2340 +f 2436 2435 2111 +f 2436 2111 2437 +f 2340 2436 2344 +f 2111 2515 2437 +f 2517 2515 2136 +f 1229 2438 1015 +f 2439 2438 2346 +f 2441 8420 2440 +f 2439 2346 2441 +f 2634 2516 2633 +f 2439 2443 2025 +f 2346 8424 8420 +f 2442 2441 2440 +f 2633 2442 2440 +f 2523 2518 2171 +f 2441 2443 2439 +f 2443 2442 2638 +f 2548 2542 2546 +f 2522 2527 2519 +f 2541 2445 2149 +f 2446 2445 2353 +f 2353 2635 2517 +f 2136 2150 2447 +f 2447 2150 2140 +f 2151 2446 2447 +f 2358 2448 2160 +f 2718 2637 2357 +f 2450 2362 8446 +f 2522 2533 2527 +f 2545 2518 2638 +f 2657 2470 2325 +f 2453 2451 2170 +f 2526 2157 2520 +f 2177 2451 2453 +f 2452 2453 2423 +f 2377 2381 2559 +f 2453 2170 2660 +f 3030 2451 2450 +f 1975 1408 2047 +f 2470 1864 2325 +f 2662 2470 2391 +f 2659 2469 1767 +f 2555 2556 2553 +f 2452 2423 2457 +f 2457 2461 2460 +f 1935 2458 1933 +f 1936 2452 2458 +f 2376 2390 2464 +f 2455 1365 1395 +f 2460 1917 2465 +f 1933 2457 2460 +f 1860 2551 2383 +f 2037 2034 2381 +f 2661 2387 2471 +f 2656 2456 2663 +f 2646 2650 2644 +f 1917 2460 2463 +f 2965 2383 1866 +f 2464 1862 2477 +f 2034 2465 1917 +f 2466 2465 1929 +f 1932 2466 1929 +f 2466 1926 2467 +f 1935 2467 1926 +f 1933 2460 2467 +f 3309 3512 3027 +f 2564 2886 2476 +f 2562 2387 2394 +f 2489 1862 2035 +f 2469 2252 2377 +f 2484 2568 2474 +f 1856 2396 1858 +f 2661 2471 2389 +f 2560 2656 2657 +f 2659 1767 2658 +f 2728 2555 2729 +f 1601 2376 1861 +f 2571 2675 2483 +f 2658 1767 2884 +f 2486 2488 2475 +f 2474 2479 2482 +f 3517 3026 3028 +f 2476 2886 2890 +f 2480 2473 2481 +f 2394 2669 2397 +f 2454 2882 2883 +f 2481 2484 2474 +f 2489 2477 1862 +f 2646 2648 2649 +f 2473 2966 2481 +f 2566 2675 2676 +f 2474 2480 2481 +f 2474 2482 2477 +f 2048 2482 2479 +f 2557 2739 2648 +f 2649 1040 1948 +f 2676 2481 2462 +f 2570 2679 2567 +f 2879 3017 3023 +f 2883 3020 3021 +f 2562 2486 2475 +f 2564 2486 2397 +f 2488 2487 2475 +f 2487 2478 3035 +f 2890 2488 2476 +f 2487 2488 2478 +f 2035 2734 2732 +f 2480 2489 2473 +f 2490 2382 2491 +f 2046 2324 2492 +f 2388 2491 2382 +f 1959 2491 2471 +f 2386 2490 2492 +f 2492 2490 2046 +f 2487 2493 1959 +f 2490 2493 2046 +f 2495 2494 1794 +f 2496 2494 1781 +f 1062 2495 1794 +f 1781 2495 1782 +f 1785 2496 1781 +f 1780 2378 2573 +f 8435 1946 1689 +f 8441 2399 8440 +f 1955 2400 2575 +f 2574 2575 2400 +f 2584 2279 2276 +f 2499 2404 2689 +f 2589 2418 2907 +f 3258 3487 4260 +f 2505 2501 2415 +f 2417 2501 2503 +f 2897 2577 2581 +f 2694 2588 3406 +f 2501 2505 2695 +f 2693 2692 2503 +f 3937 2510 3930 +f 2693 2696 3647 +f 3930 2505 2415 +f 2504 2693 2695 +f 2412 2417 2506 +f 2503 2506 2417 +f 2418 2593 2901 +f 2902 2910 2913 +f 2410 2503 2692 +f 3119 3126 3128 +f 2320 2420 2509 +f 2509 2420 8450 +f 2582 8448 8451 +f 3938 3928 3930 +f 1403 2427 2599 +f 2950 2948 2953 +f 2611 2607 2608 +f 2610 2611 2609 +f 8422 2514 2014 +f 2617 2334 2616 +f 2344 2514 2251 +f 2135 2515 2111 +f 2136 2446 2517 +f 2633 2516 2635 +f 2712 2437 2515 +f 2353 2517 2446 +f 2515 2517 2516 +f 2535 2518 2545 +f 2541 2444 2535 +f 2534 8446 2362 +f 2519 2527 2449 +f 2349 2522 2519 +f 2522 2523 2533 +f 2177 2157 2526 +f 2530 2534 2537 +f 2350 2524 2349 +f 2521 3028 3026 +f 2524 2523 2522 +f 2525 2523 2524 +f 2349 2524 2522 +f 2025 2524 2347 +f 2525 2025 2443 +f 2518 2523 2525 +f 2450 2521 3030 +f 2146 2519 2449 +f 2529 2527 2164 +f 2640 2164 2348 +f 2521 8447 2539 +f 2534 2362 2449 +f 2542 2548 2348 +f 2449 2537 2534 +f 2529 2544 2547 +f 2521 896 3028 +f 8447 2450 8445 +f 2535 2171 2518 +f 2536 2716 2713 +f 2171 2533 2523 +f 2527 2533 2164 +f 2348 2532 2542 +f 2529 2547 2537 +f 2444 2541 2714 +f 2637 2714 2357 +f 2444 2713 2716 +f 2527 2537 2449 +f 2547 2544 2538 +f 2548 2546 2543 +f 2539 8445 2531 +f 2531 8445 2530 +f 2537 2547 2530 +f 2633 2635 2636 +f 2540 2635 2639 +f 2535 2545 2639 +f 2445 2541 2353 +f 2716 2532 2444 +f 2715 2031 2536 +f 2548 2528 2544 +f 2164 2640 2529 +f 2528 2538 2544 +f 2638 2518 2525 +f 2545 2540 2639 +f 2179 2547 2538 +f 2546 2031 2543 +f 2530 2547 2179 +f 2528 2548 2543 +f 2640 2548 2544 +f 1758 2549 1409 +f 1975 2549 1612 +f 2485 2666 2670 +f 2730 2965 2728 +f 2553 2551 2047 +f 2383 2551 1866 +f 2553 2047 2554 +f 2725 2726 2642 +f 2554 2047 1408 +f 2553 2552 2555 +f 1408 2455 2723 +f 2553 2554 2957 +f 2555 2552 2725 +f 2556 2728 1866 +f 2553 2556 2551 +f 2728 2556 2555 +f 2479 2474 2568 +f 2568 2572 2479 +f 1974 2558 1972 +f 2376 2558 1861 +f 2879 1743 2468 +f 2559 1767 2469 +f 2659 2325 2393 +f 2325 2659 2560 +f 2663 2391 2656 +f 2662 2663 2561 +f 2387 2562 2475 +f 2394 2397 2562 +f 2561 2667 2668 +f 2727 2726 2552 +f 2565 1856 1857 +f 2886 2564 2887 +f 1857 1496 2565 +f 2887 2565 1496 +f 2966 2732 2733 +f 3288 2483 3287 +f 2811 2894 2812 +f 2738 2740 2744 +f 2571 2568 2484 +f 2679 2570 2572 +f 2483 2569 2571 +f 8453 2826 2825 +f 2557 2645 2647 +f 2557 2644 2645 +f 2571 2484 2675 +f 2679 2571 2569 +f 2679 2572 2568 +f 2645 2572 2570 +f 2494 2573 2386 +f 2573 2496 1780 +f 2574 2259 8441 +f 2575 2574 2498 +f 2578 2579 2576 +f 2578 2575 2498 +f 2749 2755 1816 +f 3938 8449 2680 +f 2580 2581 2577 +f 8448 8449 8450 +f 2579 2578 2498 +f 2580 2578 2576 +f 8440 2579 2498 +f 2579 2041 3506 +f 2581 2580 2576 +f 2580 2577 2582 +f 8437 8438 8439 +f 3097 2581 2576 +f 2582 2575 2578 +f 8448 2582 2577 +f 2584 2583 2279 +f 2686 2583 2499 +f 2585 2584 2276 +f 2584 2585 2684 +f 2682 2276 2287 +f 2500 2683 2685 +f 3480 3476 3484 +f 2683 3174 2404 +f 2507 2902 2913 +f 2585 2691 2500 +f 3935 2581 3942 +f 2508 2903 2596 +f 2907 2418 2901 +f 2590 2589 2507 +f 2590 2507 2591 +f 2590 2309 2406 +f 2507 2913 3111 +f 2286 2301 2592 +f 2302 2591 2592 +f 2286 2592 2591 +f 2412 2506 2594 +f 2901 2903 2699 +f 2594 2410 2597 +f 2594 2593 2698 +f 2597 2694 2595 +f 2508 3101 2906 +f 2597 2596 2594 +f 3101 2596 2595 +f 2597 2410 2697 +f 2596 2597 2595 +f 2599 2598 1403 +f 2955 2598 2511 +f 2057 2600 2329 +f 2599 2329 2600 +f 2603 2057 2601 +f 2599 2600 2602 +f 3226 2924 2601 +f 2603 2601 2703 +f 2600 2603 2602 +f 2603 2604 2605 +f 2057 2603 2600 +f 2703 2604 2603 +f 2931 3244 2926 +f 2703 2926 2604 +f 2603 2605 2602 +f 2605 2604 2932 +f 2605 2932 2952 +f 3487 3491 3485 +f 2334 2335 2608 +f 5951 2512 2615 +f 1531 2609 1720 +f 2607 2512 8542 +f 1988 2059 2610 +f 1720 2609 2608 +f 5683 2613 5685 +f 8541 2607 2612 +f 2609 2611 2608 +f 2610 2615 2512 +f 2615 2610 2059 +f 2612 591 8541 +f 5130 5470 5475 +f 6324 5947 1877 +f 2615 2059 5952 +f 2613 2614 5951 +f 8542 2612 2607 +f 2059 5685 5952 +f 591 2513 2616 +f 2617 2616 2513 +f 2618 2619 2336 +f 2334 2617 2433 +f 2706 2618 2630 +f 2067 2070 2622 +f 2708 2709 2632 +f 2617 2619 2618 +f 2626 2627 8452 +f 2433 2618 2620 +f 2630 2631 2625 +f 1530 2623 1529 +f 2626 2622 2621 +f 2624 2623 1207 +f 1529 2623 2622 +f 2335 2624 1207 +f 2433 2620 2629 +f 2627 2626 2621 +f 2620 2621 2629 +f 2067 2622 2626 +f 2706 2620 2618 +f 2337 2331 2628 +f 1878 2628 2331 +f 2707 2628 2627 +f 2623 2629 2622 +f 2629 2624 2433 +f 2632 2630 2625 +f 2621 2706 2627 +f 2708 2632 2625 +f 2630 2336 2631 +f 2337 2628 2707 +f 2634 2633 2440 +f 2517 2635 2516 +f 8423 2634 2440 +f 2014 2437 2712 +f 2639 2635 2353 +f 2636 2635 2540 +f 2638 2636 2540 +f 2633 2636 2442 +f 2716 2546 2542 +f 2536 2031 2546 +f 2636 2638 2442 +f 2545 2638 2540 +f 2353 2541 2639 +f 2639 2541 2535 +f 2548 2640 2348 +f 2529 2640 2544 +f 2722 2721 2472 +f 2665 2959 2668 +f 2550 2727 2964 +f 3041 3039 3040 +f 2728 2729 3262 +f 2732 2473 2489 +f 2048 2479 2645 +f 2646 2644 2557 +f 2572 2645 2479 +f 2645 2570 2647 +f 2646 2557 2648 +f 1807 1973 2650 +f 2567 2651 2570 +f 2647 2570 2651 +f 2647 2655 2557 +f 2740 2742 2648 +f 2646 2649 1807 +f 1040 2649 2648 +f 2644 2650 1972 +f 1807 2650 2646 +f 2651 2567 2654 +f 2647 2651 2655 +f 2892 2894 2895 +f 8435 8433 8442 +f 2653 2655 2654 +f 2752 1816 1815 +f 2567 2569 2892 +f 2654 2652 2751 +f 2654 2655 2651 +f 2655 2653 2739 +f 2657 2656 2391 +f 3013 2656 2560 +f 2470 2657 2391 +f 2325 2560 2657 +f 1743 3019 2559 +f 3292 3390 3294 +f 2659 2393 2469 +f 2659 2658 8457 +f 3025 3517 3310 +f 2642 2737 2729 +f 2662 2661 2389 +f 2394 2661 2561 +f 2663 2662 2391 +f 2661 2662 2561 +f 2670 2663 2456 +f 2721 2958 2641 +f 3388 3387 3009 +f 3398 3072 3074 +f 2961 2670 2962 +f 2724 2722 2563 +f 3510 2456 3013 +f 2724 2959 3259 +f 2961 2667 2663 +f 2668 2667 2665 +f 2959 2669 2668 +f 2561 2668 2394 +f 2671 2672 2673 +f 2394 2668 2669 +f 2485 2670 2456 +f 2670 2666 2962 +f 2565 2672 1856 +f 2722 2671 2563 +f 2564 2397 2672 +f 2673 2397 2669 +f 2671 2673 2563 +f 2397 2673 2672 +f 2888 2674 2887 +f 2889 3031 2888 +f 2676 2675 2484 +f 3287 2675 2566 +f 2481 2676 2484 +f 3036 2676 2462 +f 2846 3352 2864 +f 2815 2794 2813 +f 2990 2826 2989 +f 2782 2777 2780 +f 2571 2679 2568 +f 2567 2679 2569 +f 3935 3941 3940 +f 3928 3934 3932 +f 2768 2801 2803 +f 3797 3796 3659 +f 2690 2682 2287 +f 2691 2682 2587 +f 3155 3170 2500 +f 3171 3132 3161 +f 2584 2684 2499 +f 2685 2684 2585 +f 2500 2685 2585 +f 2404 2685 2683 +f 2689 2686 2499 +f 2686 2586 2687 +f 2586 3697 3482 +f 3253 2687 2280 +f 2291 2688 2288 +f 2274 2686 2688 +f 3593 3590 3160 +f 2686 2689 2586 +f 3112 2286 3110 +f 2682 2690 2587 +f 2682 2691 2585 +f 3409 2691 2587 +f 2503 2695 2693 +f 2588 2694 2697 +f 2696 2693 2504 +f 2588 2692 2693 +f 4295 3544 3543 +f 2694 3107 3106 +f 2501 2695 2503 +f 2504 2695 2505 +f 3929 2696 2504 +f 2696 2502 3647 +f 2588 2697 2692 +f 2597 2697 2694 +f 2416 2698 2418 +f 2594 2698 2412 +f 2903 2905 2699 +f 3127 3126 3118 +f 2057 3227 3226 +f 2702 3239 3240 +f 2701 2702 1116 +f 3241 2925 3239 +f 1116 2702 1200 +f 2702 2701 3239 +f 2924 2703 2601 +f 2926 2703 919 +f 3246 3249 3247 +f 2926 2932 2604 +f 2955 2328 2598 +f 3471 3480 2606 +f 2620 2706 2621 +f 2707 2630 2632 +f 2337 2707 2632 +f 2627 2706 2707 +f 2625 1298 2708 +f 2708 1298 2709 +f 2710 2709 1298 +f 2711 1884 2332 +f 1298 1887 2710 +f 2710 1887 1892 +f 2337 2711 2333 +f 2709 1884 2711 +f 2516 2634 2712 +f 2014 2712 2634 +f 2713 2444 2714 +f 2716 2542 2532 +f 2541 2149 2714 +f 2714 2149 2448 +f 2132 2717 2718 +f 2546 2716 2536 +f 2718 2360 2132 +f 2536 2719 2715 +f 2719 2717 2715 +f 2718 2717 2719 +f 2713 2637 2719 +f 2719 2637 2718 +f 2554 1408 2723 +f 2726 2727 2550 +f 2472 2671 2722 +f 2723 2641 2720 +f 2724 2563 2959 +f 2721 2722 2958 +f 2723 2720 2554 +f 2455 2721 2723 +f 2665 2667 2961 +f 2963 2964 2958 +f 2726 2725 2552 +f 2729 2725 2642 +f 2727 2552 2720 +f 2726 2550 3078 +f 2641 2964 2720 +f 2727 2720 2964 +f 2555 2725 2729 +f 2730 2728 2643 +f 3261 3075 3078 +f 3262 2737 2968 +f 2734 2643 2731 +f 2035 1865 2965 +f 3262 2643 2728 +f 2733 3037 2966 +f 2035 2732 2489 +f 2731 3327 2732 +f 3328 3041 3327 +f 3040 3037 2733 +f 2643 2734 2730 +f 2732 2734 2731 +f 2666 2485 3290 +f 2851 2999 3016 +f 3075 3073 3074 +f 3058 3061 3064 +f 2737 2642 3075 +f 2968 2737 2736 +f 2740 2653 2750 +f 2750 2744 2740 +f 2655 2739 2557 +f 2740 2739 2653 +f 2751 2741 2750 +f 2740 2738 2742 +f 2774 2773 2770 +f 2738 2744 2747 +f 1812 2743 1808 +f 2648 2742 1040 +f 2738 2969 2742 +f 2742 2969 2743 +f 2748 2746 2747 +f 2744 2748 2747 +f 2773 2772 2770 +f 2753 2764 3271 +f 2754 2756 2759 +f 2747 2749 2738 +f 2748 2744 2741 +f 2749 2747 2746 +f 2809 2787 2806 +f 2748 2776 2778 +f 2754 2755 2756 +f 2752 2969 1816 +f 2751 2750 2653 +f 2744 2750 2741 +f 2654 2751 2653 +f 2751 2652 2806 +f 1808 2743 2752 +f 2752 2743 2969 +f 2753 2759 2764 +f 2970 3267 3503 +f 2749 2756 2755 +f 2757 2754 2762 +f 2756 2749 2746 +f 2755 2754 2757 +f 2758 2746 2778 +f 2756 2746 2758 +f 2762 2753 2760 +f 2760 8443 8444 +f 2764 2765 2763 +f 2754 2759 2753 +f 2756 2758 2759 +f 2766 2763 2765 +f 3263 2760 2753 +f 8440 8442 8437 +f 2741 2806 2807 +f 2766 2769 2983 +f 2753 2762 2754 +f 8433 8444 8443 +f 2759 2765 2764 +f 3271 3265 3264 +f 2765 2759 2758 +f 2764 2763 3271 +f 2745 2767 2758 +f 2766 2761 3265 +f 2765 2767 2766 +f 2770 2767 2745 +f 2758 2767 2765 +f 2770 2769 2767 +f 2782 2780 2768 +f 2796 2820 2793 +f 2767 2769 2766 +f 2768 2780 2801 +f 2773 2774 2771 +f 2804 2768 2803 +f 2777 2781 2775 +f 2779 2781 2784 +f 2769 2770 2772 +f 2745 2774 2770 +f 2777 2773 2771 +f 2772 2773 2782 +f 2745 2776 2774 +f 2748 2741 2807 +f 2793 2775 2789 +f 2798 2831 2836 +f 2745 2758 2778 +f 2807 2776 2748 +f 2784 2781 2777 +f 2777 2775 2780 +f 2748 2778 2746 +f 2745 2778 2776 +f 2808 2779 2784 +f 2795 2813 2797 +f 2781 2789 2775 +f 2804 2772 2768 +f 2784 2777 2771 +f 2790 2789 2781 +f 2772 2782 2768 +f 2777 2782 2773 +f 3437 3447 3449 +f 2820 2780 2775 +f 2787 2784 2771 +f 2808 2784 2809 +f 2785 2789 2790 +f 2978 2796 2972 +f 2978 2783 2979 +f 2805 2983 2804 +f 2771 2774 2807 +f 2751 2806 2741 +f 2654 2895 2896 +f 2810 2792 2795 +f 2790 2781 2779 +f 2793 2789 2982 +f 2795 2779 2810 +f 2779 2795 2790 +f 2785 2797 2799 +f 2800 3283 2982 +f 2891 3049 2998 +f 2785 2790 2797 +f 2982 2789 2785 +f 2793 2791 2796 +f 2821 2792 2812 +f 2800 2785 2799 +f 2779 2808 2810 +f 2813 2795 2792 +f 2972 2796 2791 +f 2796 2786 2801 +f 2795 2797 2790 +f 2823 2799 2797 +f 2794 2815 2817 +f 2840 2834 2831 +f 2823 2797 2794 +f 2799 2798 2800 +f 2798 2819 2831 +f 2833 3004 3005 +f 2801 2780 2820 +f 2786 2802 2803 +f 2783 2976 2977 +f 2983 2805 2761 +f 2786 2803 2801 +f 2804 2803 2802 +f 2802 3497 2804 +f 2772 2804 2769 +f 3286 2979 2981 +f 2971 3272 3268 +f 2809 2806 2652 +f 2806 2787 2807 +f 2771 2807 2787 +f 2776 2807 2774 +f 2809 2784 2787 +f 2808 2788 2810 +f 2896 2809 2652 +f 2808 2809 2788 +f 2811 2810 2788 +f 2812 2810 2811 +f 2788 2809 2896 +f 2567 2892 2895 +f 2814 2815 2984 +f 2792 2810 2812 +f 2984 2815 2813 +f 2797 2813 2794 +f 2818 2814 2829 +f 2823 2817 2819 +f 2984 2813 2792 +f 2814 2818 2817 +f 2818 2816 2817 +f 2823 2819 2798 +f 2814 2817 2815 +f 2817 2816 2819 +f 2829 2986 2827 +f 2844 2841 2839 +f 2839 2816 2818 +f 2834 2828 2831 +f 2793 2820 2775 +f 2801 2820 2796 +f 2678 2825 2812 +f 2821 2812 2825 +f 3000 2863 2851 +f 2832 2840 2843 +f 2799 2823 2798 +f 2817 2823 2794 +f 3010 3311 3289 +f 2974 2783 2972 +f 2892 2893 8453 +f 2678 8453 2825 +f 2483 2675 3287 +f 2827 2986 2988 +f 2829 2987 2986 +f 2841 2830 2839 +f 2835 3781 2828 +f 2836 2800 2798 +f 2829 2814 2987 +f 2827 2841 2844 +f 2841 2847 2830 +f 2850 2858 2857 +f 2840 2819 2816 +f 2828 2833 2836 +f 2848 2843 2839 +f 2834 2832 2835 +f 3709 3708 3711 +f 2791 2982 3283 +f 2840 2831 2819 +f 2832 2874 2835 +f 3012 2871 2866 +f 2828 2834 2835 +f 2828 2836 2831 +f 2800 2836 2833 +f 2861 2842 2859 +f 3508 3631 2980 +f 3521 4422 4423 +f 3521 3532 3910 +f 2818 2829 2844 +f 2839 2830 2848 +f 2843 2840 2816 +f 2834 2840 2832 +f 2827 2845 2841 +f 2841 2845 2847 +f 2830 2850 2857 +f 2843 2874 2832 +f 2839 2843 2816 +f 2843 2842 2874 +f 2818 2844 2839 +f 2827 2844 2829 +f 2988 2845 2827 +f 2991 2994 3016 +f 2999 2847 2822 +f 2830 2847 2850 +f 2822 2847 2845 +f 2847 2846 2850 +f 2859 2830 2857 +f 2843 2848 2842 +f 2822 2988 2991 +f 2876 3352 2846 +f 2677 2876 2851 +f 2846 2864 2850 +f 2660 2170 3025 +f 8458 8459 8456 +f 4425 4430 3006 +f 2859 2848 2830 +f 3007 2853 2858 +f 4430 4425 4427 +f 2988 2822 2845 +f 3341 3336 3344 +f 3519 3000 2849 +f 3332 3342 3344 +f 2999 2851 2876 +f 3007 2858 2856 +f 2850 2864 2858 +f 2859 2857 2853 +f 3007 2852 3006 +f 2853 2857 2858 +f 2859 2853 4650 +f 2848 2859 2842 +f 3339 3003 3523 +f 2867 2866 2871 +f 3780 3778 3779 +f 2874 2861 3918 +f 2996 2994 2991 +f 3042 3047 3043 +f 3052 2875 3049 +f 2846 2847 2999 +f 2878 2880 2863 +f 2858 2864 2856 +f 3641 3012 3643 +f 3781 3646 3780 +f 5025 5038 5028 +f 3387 2869 3379 +f 4419 4420 4065 +f 3009 3533 3534 +f 3533 3289 3534 +f 2869 3091 3090 +f 3080 3509 3383 +f 3010 3289 3317 +f 3311 3534 3289 +f 2873 2837 3378 +f 3375 3509 3382 +f 3317 3289 2870 +f 2872 3307 3010 +f 4634 4417 3910 +f 3009 3315 3388 +f 3326 2873 3316 +f 2842 2861 2874 +f 3784 3778 3788 +f 2854 2994 2996 +f 2677 2863 2880 +f 2863 3000 3519 +f 3000 2994 2849 +f 3375 2837 3317 +f 2860 3366 3360 +f 3016 3000 2851 +f 3015 2395 8458 +f 2878 3341 2880 +f 3341 3344 3338 +f 2454 2883 3021 +f 2879 2882 3019 +f 3015 8458 2884 +f 3017 2879 2468 +f 3011 2461 2423 +f 2879 3019 1743 +f 3023 3020 2883 +f 3017 2885 3023 +f 2882 2879 2883 +f 3019 1767 2559 +f 2560 2659 8457 +f 3019 2882 2884 +f 2887 2564 2565 +f 2890 2886 2674 +f 2888 2887 1496 +f 2886 2887 2674 +f 1766 2888 1496 +f 1494 2889 1486 +f 1511 2889 1472 +f 2890 3031 3032 +f 3031 2890 2674 +f 3033 2890 3032 +f 3036 2462 3037 +f 3352 2876 2677 +f 2893 2892 2569 +f 2894 2892 2678 +f 2569 2483 2893 +f 2483 3288 8453 +f 2812 2894 2678 +f 2894 2811 2895 +f 2896 2895 2811 +f 2567 2895 2654 +f 2788 2896 2811 +f 2654 2896 2652 +f 2897 2581 3935 +f 2897 2680 8449 +f 3630 3505 3506 +f 3280 3615 3616 +f 3409 3112 3113 +f 2911 2909 2910 +f 2978 3286 2786 +f 2906 2904 2905 +f 2903 2901 2593 +f 2589 2902 2507 +f 2901 2699 2908 +f 2910 2902 2908 +f 2905 2903 2508 +f 2596 2903 2593 +f 3101 2508 2596 +f 2911 2920 2909 +f 2906 2905 2508 +f 2699 2905 2904 +f 3103 3205 3105 +f 2919 3115 3117 +f 2908 2907 2901 +f 2589 2907 2902 +f 2911 2910 2915 +f 2907 2908 2902 +f 2918 2699 3202 +f 3157 2909 2920 +f 2915 2908 2699 +f 3172 3409 3113 +f 2915 2918 2911 +f 2921 2919 2920 +f 2690 2286 3112 +f 3110 2286 2591 +f 2914 2913 2910 +f 3111 2912 3110 +f 2910 2909 2914 +f 3410 2914 2909 +f 2908 2915 2910 +f 2918 2915 2699 +f 2904 3203 3197 +f 2917 3115 2923 +f 3197 3114 3196 +f 3140 3124 3123 +f 3202 2699 2904 +f 2921 2918 2916 +f 2911 2921 2920 +f 2917 3117 3115 +f 2911 2918 2921 +f 3117 3158 2919 +f 3420 3114 3421 +f 2919 2921 2923 +f 3108 3105 3104 +f 3144 3146 3148 +f 3201 3164 2916 +f 3138 3123 3135 +f 3226 2601 2057 +f 2924 2700 3238 +f 3230 3229 3227 +f 3242 2925 3232 +f 2931 2926 919 +f 2933 2932 2926 +f 2927 2929 2928 +f 1306 8455 1201 +f 1201 2928 1202 +f 2927 2931 2929 +f 2924 2929 919 +f 1116 2928 2929 +f 2930 2933 2935 +f 2949 2950 2939 +f 2929 2931 919 +f 2931 2927 3244 +f 2933 2926 2704 +f 2930 2952 2932 +f 2936 2938 2704 +f 2930 2932 2933 +f 2938 2934 2940 +f 2940 2942 2944 +f 2704 2935 2933 +f 2940 2939 2935 +f 3243 2936 2704 +f 1803 3246 3248 +f 3468 2942 2943 +f 3255 3480 3471 +f 2704 2938 2935 +f 3246 2938 2936 +f 2935 2938 2940 +f 3471 2949 3255 +f 2942 2940 2934 +f 2937 2939 2940 +f 3587 3470 3585 +f 2944 2941 2946 +f 2942 2934 3247 +f 2944 2942 2941 +f 3246 3247 2938 +f 3587 3467 3250 +f 2946 2947 2945 +f 2940 2944 2937 +f 3474 3472 3477 +f 2946 3472 2944 +f 2946 2941 3467 +f 2946 2945 3472 +f 3468 3250 3467 +f 1804 3586 3585 +f 2953 3256 2951 +f 2939 2950 2930 +f 3255 2949 2937 +f 2950 2949 2948 +f 3256 2953 2606 +f 2426 2952 2950 +f 2951 3256 2955 +f 2426 3257 2511 +f 2952 2426 2605 +f 2930 2950 2952 +f 2953 2948 3471 +f 2953 2951 3257 +f 2955 2954 2328 +f 3258 2954 2705 +f 2955 2511 3257 +f 2954 2955 2705 +f 3132 3159 3161 +f 3846 3845 3131 +f 2553 2957 2552 +f 2554 2720 2957 +f 2722 2724 2958 +f 2963 2958 2724 +f 2669 2959 2563 +f 3259 2959 2665 +f 3494 2962 2664 +f 3492 2550 2964 +f 2961 2663 2670 +f 2961 2960 3259 +f 2664 2962 2666 +f 2960 2961 2962 +f 3259 2963 2724 +f 3492 3493 3260 +f 2958 2964 2641 +f 2964 2963 3492 +f 2383 2965 1865 +f 2728 2965 1866 +f 2481 2966 2462 +f 2732 2966 2473 +f 3057 3060 3056 +f 2996 2997 2854 +f 3064 3069 3072 +f 3329 3331 3328 +f 2738 2749 2969 +f 2969 2749 1816 +f 3271 2763 3265 +f 3504 3630 3503 +f 2761 3266 3264 +f 3272 3281 3267 +f 2791 3283 2974 +f 2978 2972 2783 +f 2833 2828 3002 +f 2833 3002 3004 +f 2791 2974 2972 +f 2973 3770 2976 +f 2867 2873 2866 +f 3273 3276 3496 +f 2973 2976 2974 +f 2977 2976 2975 +f 3923 3915 3646 +f 2971 3268 3270 +f 2979 2783 2977 +f 2786 2796 2978 +f 2977 3633 2979 +f 2978 2979 3286 +f 3770 3644 2975 +f 3278 3277 3270 +f 3632 3507 3631 +f 3631 3508 2981 +f 2793 2982 2791 +f 2785 2800 2982 +f 2766 2983 2761 +f 2804 2983 2769 +f 2792 2821 2984 +f 2984 2821 2987 +f 3036 2891 3038 +f 2851 2863 2677 +f 2990 2821 2825 +f 2989 2988 2986 +f 2984 2987 2814 +f 2990 2987 2821 +f 2986 2987 2990 +f 2854 8454 2994 +f 2993 2995 2985 +f 2997 3055 2854 +f 2826 2990 2825 +f 2986 2990 2989 +f 2988 2992 2991 +f 2992 2989 2993 +f 2988 2989 2992 +f 2989 2995 2993 +f 3049 3055 2998 +f 2992 2993 2996 +f 8454 2875 3333 +f 2993 2997 2996 +f 2989 2826 2995 +f 2995 2826 3288 +f 2992 2996 2991 +f 2997 2993 2985 +f 2985 2998 2997 +f 3059 3056 3089 +f 2985 3287 3038 +f 2994 3000 3016 +f 3049 2891 3047 +f 3016 2822 2991 +f 3045 3374 3052 +f 2423 2660 3011 +f 3783 3784 3785 +f 3644 3770 3771 +f 3528 2877 3354 +f 3725 3751 3752 +f 3528 3003 3524 +f 3372 3008 3365 +f 3002 2838 3004 +f 3004 3771 3005 +f 3283 3005 2973 +f 2800 2833 3005 +f 4920 4421 4420 +f 2837 2872 3317 +f 2852 3007 2856 +f 2853 3007 3006 +f 3644 3772 3773 +f 3347 2860 3346 +f 3294 3381 3535 +f 3784 3779 3778 +f 2867 2837 2873 +f 3378 3316 2873 +f 3324 3314 3322 +f 2660 3025 3310 +f 3015 2884 2882 +f 2677 2880 3350 +f 3320 3027 3321 +f 3341 3349 2880 +f 2822 3016 2999 +f 2395 3015 2454 +f 3320 3023 2885 +f 3019 2884 1767 +f 3338 3526 3349 +f 2999 2876 2846 +f 3512 3513 3323 +f 3024 2881 8459 +f 3299 3300 3305 +f 3313 2660 3310 +f 3313 3027 3320 +f 2468 2461 3017 +f 3321 3518 3021 +f 2454 3015 2882 +f 2395 2454 3024 +f 2660 2423 2453 +f 3022 2454 3021 +f 2879 3023 2883 +f 3017 2461 3011 +f 3026 3025 2170 +f 3303 2454 3022 +f 3511 3639 3306 +f 3030 2170 2451 +f 2539 896 2521 +f 3023 3320 3020 +f 2867 2871 3307 +f 3638 3304 2855 +f 896 2855 3304 +f 3517 3304 3018 +f 3313 3309 3027 +f 8445 2534 2530 +f 2170 3030 3026 +f 2888 3031 2674 +f 3032 2889 1509 +f 1509 1506 3032 +f 3032 1506 3033 +f 3034 3033 1506 +f 2478 2890 3033 +f 1795 3034 1506 +f 2324 3035 1791 +f 2478 3034 3035 +f 3035 3034 1791 +f 2462 2966 3037 +f 3038 2891 2998 +f 2733 3327 3040 +f 3036 3037 3043 +f 2985 3038 2998 +f 2566 3036 3038 +f 3042 3050 3048 +f 3042 3043 3040 +f 2733 2732 3327 +f 3040 3039 3042 +f 2731 2643 3328 +f 3331 3041 3328 +f 3059 3373 3057 +f 3043 3047 2891 +f 3036 3043 2891 +f 3040 3043 3037 +f 3050 3373 3046 +f 3333 3054 3334 +f 3047 3048 3045 +f 3359 3374 3067 +f 3050 3039 3051 +f 3067 3068 3066 +f 3048 3047 3042 +f 3047 3045 3049 +f 3050 3042 3039 +f 3048 3046 3068 +f 3052 3049 3045 +f 3055 3049 2875 +f 3039 3330 3051 +f 3046 3048 3050 +f 3051 2967 3057 +f 3050 3051 3373 +f 3066 3044 3067 +f 3054 2875 3052 +f 3059 3089 3044 +f 3519 3333 3334 +f 3335 3334 3054 +f 8454 3333 2849 +f 3055 2875 8454 +f 2998 3055 2997 +f 3057 3061 3060 +f 3065 3077 3056 +f 3061 3058 3060 +f 3057 3056 3059 +f 3318 3291 3302 +f 3056 3060 3065 +f 3089 3056 3077 +f 3066 3059 3044 +f 3061 3057 2967 +f 3058 3070 3065 +f 2967 3063 3061 +f 3076 3079 2735 +f 3062 3065 3070 +f 3083 3088 3094 +f 2967 3330 3331 +f 3069 3064 3063 +f 3061 3063 3064 +f 3329 3069 3063 +f 3058 3065 3060 +f 3083 3086 3087 +f 3367 3358 3359 +f 3373 3066 3046 +f 3374 3053 3054 +f 3045 3048 3068 +f 3066 3068 3046 +f 3045 3068 3067 +f 2968 2736 3069 +f 3072 3069 2736 +f 3079 3058 3064 +f 3070 3058 3076 +f 3345 3347 2862 +f 3053 3358 3343 +f 3074 3072 2736 +f 3064 3072 2735 +f 3074 2736 3075 +f 3290 3295 2664 +f 2736 2737 3075 +f 3398 3397 2735 +f 2642 3078 3075 +f 3261 3078 2550 +f 3399 3536 3401 +f 2666 3290 2664 +f 3062 3081 3065 +f 3083 3087 3088 +f 2726 3078 2642 +f 2550 3492 3261 +f 2735 3079 3064 +f 3076 3058 3079 +f 3401 3394 3397 +f 3307 2872 2867 +f 3081 3062 3083 +f 3077 3065 3081 +f 3379 3403 3404 +f 3095 3084 3086 +f 3070 3093 3062 +f 3085 3080 3391 +f 3396 3393 3076 +f 3383 2870 3533 +f 3372 3384 3386 +f 3081 3083 3094 +f 3091 3083 3062 +f 3393 3090 3093 +f 3388 3315 3380 +f 3392 3376 8460 +f 3361 3355 3367 +f 3094 3092 3077 +f 3089 3077 3092 +f 3393 3070 3076 +f 3388 3095 3387 +f 3083 3091 3086 +f 3093 3091 3062 +f 3096 3092 3094 +f 3370 3372 3365 +f 3393 3093 3070 +f 3091 3093 3090 +f 3081 3094 3077 +f 3096 3094 3088 +f 3376 3071 3386 +f 3347 3366 2860 +f 3088 3385 3376 +f 3371 3092 3384 +f 3505 3097 2576 +f 3097 2898 3936 +f 3126 3127 3168 +f 3163 3160 3162 +f 3411 3155 3172 +f 3132 3129 3133 +f 4013 3648 3541 +f 3104 3101 2595 +f 3408 3104 3106 +f 3100 3539 3538 +f 3108 3102 3430 +f 3101 3105 2906 +f 3408 3537 3102 +f 3139 2922 3136 +f 3106 3104 2595 +f 3108 3104 3102 +f 3104 3105 3101 +f 3205 3103 3204 +f 2595 2694 3106 +f 3406 3107 2694 +f 3539 3407 3538 +f 3408 3107 3537 +f 3430 3102 3109 +f 3105 3108 3103 +f 3453 3558 3199 +f 3180 3198 3188 +f 3111 2591 2507 +f 3112 3110 2912 +f 3111 2913 2914 +f 2591 3111 3110 +f 3112 2912 3113 +f 2690 3112 2587 +f 2912 3410 3113 +f 3158 3117 3116 +f 3205 3421 3203 +f 3195 3193 3189 +f 3119 3116 3117 +f 2919 2923 3115 +f 3116 3119 3128 +f 3128 3130 3116 +f 3119 3117 3120 +f 3173 3158 3116 +f 3118 3119 3120 +f 3127 3125 3153 +f 3120 3117 2917 +f 3126 3119 3118 +f 3135 3123 2917 +f 3120 2917 3123 +f 3181 3178 2922 +f 3118 3120 3124 +f 3122 3140 3142 +f 4287 3843 3950 +f 3135 2917 2923 +f 3140 3123 3121 +f 3123 3124 3120 +f 3124 3122 3148 +f 3144 3122 3142 +f 3169 3134 3167 +f 3127 3118 3154 +f 3126 2899 3128 +f 3148 3146 3125 +f 3132 3099 3129 +f 2899 3129 3128 +f 3128 3129 3130 +f 3129 2899 3133 +f 3130 3129 3099 +f 3155 3130 3099 +f 3410 3157 3411 +f 3168 3127 3167 +f 3133 3134 3131 +f 3131 3159 3132 +f 3161 3159 3162 +f 3133 2899 3168 +f 3132 3133 3131 +f 3152 3125 3146 +f 3698 3486 3699 +f 2923 3136 3135 +f 3136 3138 3135 +f 2921 2916 3164 +f 3138 3136 2922 +f 3164 3139 3136 +f 3201 3202 3197 +f 3178 3175 3177 +f 3138 3121 3123 +f 3164 3136 2923 +f 3137 3196 3139 +f 3192 3142 3121 +f 3124 3140 3122 +f 3121 3138 3177 +f 3650 3413 3552 +f 3121 3142 3140 +f 3144 3142 3145 +f 3143 3144 3145 +f 4853 4000 4854 +f 3145 3142 3141 +f 3144 3143 3146 +f 3192 3175 3190 +f 3141 3150 3549 +f 3546 3975 3547 +f 3546 3547 3548 +f 3978 3678 3808 +f 3413 3650 3143 +f 3148 3125 3154 +f 3144 3148 3122 +f 3143 3145 3549 +f 3829 3452 3827 +f 3121 3177 3192 +f 3413 3549 3550 +f 3176 3166 3169 +f 3152 3153 3125 +f 3548 3146 3143 +f 3152 3151 3153 +f 3176 3169 3153 +f 3168 3167 3134 +f 3124 3154 3118 +f 3125 3127 3154 +f 3170 3155 3099 +f 3172 3155 2500 +f 3116 3130 3173 +f 3173 3155 3156 +f 2919 3157 2920 +f 3157 3156 3411 +f 3156 3157 3158 +f 2919 3158 3157 +f 3845 3159 3131 +f 3098 3162 3159 +f 3699 3594 3698 +f 3588 3589 3590 +f 3160 3174 3161 +f 2683 3170 3171 +f 3162 3098 3700 +f 3161 3162 3160 +f 3255 3472 3474 +f 3591 3163 3699 +f 3139 3164 3137 +f 2923 2921 3164 +f 3415 3180 3183 +f 3165 3198 3200 +f 3166 3176 3187 +f 2956 3842 4285 +f 3127 3153 3167 +f 3169 3167 3153 +f 3133 3168 3134 +f 3168 2899 3126 +f 3176 3153 3151 +f 3169 3166 3848 +f 3171 3170 3099 +f 2500 3170 2683 +f 3132 3171 3099 +f 3171 3161 3174 +f 3409 3172 2500 +f 3172 3113 3411 +f 3155 3173 3130 +f 3158 3173 3156 +f 3174 3160 3590 +f 3171 3174 2683 +f 3138 3178 3177 +f 3188 3190 3175 +f 3151 3186 3176 +f 3176 3186 3187 +f 3178 3138 2922 +f 3192 3190 3191 +f 3182 3179 3181 +f 3175 3178 3180 +f 3220 3224 3417 +f 3114 3420 3419 +f 3183 3178 3181 +f 3415 3179 3414 +f 3139 3182 2922 +f 3183 3181 3179 +f 3182 3181 2922 +f 3196 3182 3139 +f 3185 3415 3414 +f 3178 3183 3180 +f 3219 3208 3221 +f 3193 3195 3150 +f 3185 3206 3200 +f 3188 3198 3165 +f 3186 3151 3547 +f 3187 3186 3149 +f 3149 3658 3187 +f 4007 4004 4001 +f 3190 3188 3215 +f 3175 3180 3188 +f 3215 3209 3211 +f 3191 3193 3141 +f 3215 3188 3165 +f 3191 3190 3189 +f 3193 3191 3189 +f 3141 3142 3192 +f 3175 3192 3177 +f 3192 3191 3141 +f 3189 3194 3195 +f 3141 3193 3150 +f 3165 3200 3209 +f 3209 3207 3211 +f 3661 3195 3194 +f 3147 3150 3195 +f 3197 3196 3137 +f 3114 3182 3196 +f 3201 3197 3137 +f 2904 2906 3203 +f 3180 3185 3198 +f 3184 3206 3185 +f 3199 3206 3216 +f 3666 3662 3664 +f 3185 3200 3198 +f 3210 3209 3200 +f 3164 3201 3137 +f 3202 3201 2916 +f 2918 3202 2916 +f 2904 3197 3202 +f 3205 3203 2906 +f 3197 3203 3421 +f 3430 3431 3427 +f 3423 3429 3422 +f 3105 3205 2906 +f 3204 3420 3421 +f 3216 3217 3214 +f 3199 3200 3206 +f 3453 3557 3558 +f 3207 3210 3213 +f 3184 3224 3217 +f 3219 3225 3208 +f 3210 3200 3199 +f 3662 3211 3207 +f 3453 3216 3559 +f 3207 3209 3210 +f 3194 3189 3211 +f 3215 3211 3189 +f 3560 3557 3453 +f 3672 3661 3660 +f 3665 3213 3667 +f 3662 3207 3664 +f 3206 3217 3216 +f 3559 3221 3795 +f 3190 3215 3189 +f 3209 3215 3165 +f 3217 3206 3184 +f 3216 3214 3559 +f 3414 3179 3418 +f 3214 3217 3219 +f 3422 3443 3218 +f 3433 3435 3428 +f 3217 3224 3456 +f 3458 3225 3455 +f 3414 3184 3185 +f 3455 3225 3219 +f 3794 3795 3208 +f 3214 3219 3221 +f 3208 3225 3695 +f 3794 3793 3222 +f 3280 3599 3598 +f 3564 3566 3459 +f 3417 3224 3184 +f 3224 3220 3456 +f 3219 3456 3455 +f 3835 3696 3686 +f 3227 2057 2430 +f 2924 3226 3229 +f 3230 3227 3231 +f 2924 3229 2700 +f 2430 3233 3231 +f 3463 667 476 +f 3226 3227 3229 +f 2430 3231 3227 +f 3231 3234 3230 +f 3229 3230 3461 +f 2430 2432 3233 +f 3234 3231 3228 +f 3232 3234 3462 +f 3232 662 3242 +f 1708 3235 1287 +f 3231 3233 3466 +f 3462 3234 3228 +f 3461 3234 3232 +f 3236 1288 1289 +f 3235 3236 3237 +f 3236 1203 3237 +f 3236 3235 1288 +f 1203 1292 3582 +f 3237 3464 3466 +f 3241 3238 2700 +f 1116 3238 2701 +f 635 3240 195 +f 3241 3239 2701 +f 2702 3240 524 +f 195 3240 3239 +f 3238 3241 2701 +f 3461 3241 2700 +f 779 3242 662 +f 3239 3242 195 +f 3244 3243 2704 +f 3245 3243 1305 +f 3244 2704 2926 +f 2928 8455 2927 +f 3245 1305 1542 +f 3245 1541 3248 +f 3248 3246 2936 +f 1800 3249 3246 +f 2942 3247 2943 +f 2938 3247 2934 +f 3245 3248 2936 +f 1803 3248 1541 +f 1359 3249 1800 +f 3247 3249 2943 +f 3469 3250 3468 +f 3250 3469 3470 +f 2945 2947 3251 +f 3251 2947 3254 +f 3470 3587 3250 +f 3252 3586 1614 +f 2280 3251 3253 +f 3253 3251 3254 +f 3254 2947 3587 +f 3253 3254 3252 +f 2937 3472 3255 +f 2945 3477 3472 +f 3489 3256 2606 +f 2955 3256 2705 +f 3257 2426 2950 +f 2955 3257 2951 +f 3489 2705 3256 +f 4260 2956 4285 +f 2961 3259 2665 +f 3259 2960 3493 +f 3494 3260 3493 +f 3494 3495 3260 +f 3495 3261 3260 +f 3073 3075 3261 +f 2737 3262 2729 +f 3328 3262 2968 +f 3267 3263 2753 +f 8438 8437 8443 +f 3266 2761 2805 +f 3268 3272 3264 +f 2766 3265 2763 +f 2761 3264 3265 +f 3270 3275 3269 +f 3276 3266 2805 +f 3277 3282 2971 +f 3263 3267 2970 +f 3264 3266 3268 +f 3266 3276 3275 +f 3275 3597 3269 +f 3270 3277 2971 +f 3275 3268 3266 +f 3270 3269 3278 +f 3272 3271 3264 +f 3271 3267 2753 +f 3272 2971 3282 +f 3271 3272 3267 +f 3276 3497 3496 +f 3500 3273 3496 +f 3606 3501 3600 +f 2681 3279 3280 +f 3275 3270 3268 +f 3597 3273 3596 +f 3276 2805 3497 +f 3275 3276 3273 +f 3274 3279 3277 +f 3504 3628 2898 +f 3269 3600 3602 +f 3277 3278 3274 +f 3279 3274 3599 +f 3629 3279 2681 +f 3598 3602 3600 +f 3544 4295 3539 +f 3629 3282 3277 +f 3504 3503 3281 +f 3277 3279 3629 +f 3272 3282 3281 +f 3005 3283 2800 +f 2974 3283 2973 +f 3578 3575 3579 +f 8461 3459 3458 +f 3496 3498 3595 +f 3285 3498 2786 +f 3508 3286 2981 +f 3285 2786 3286 +f 3038 3287 2566 +f 3288 3287 2985 +f 2995 3288 2985 +f 3288 2826 8453 +f 3387 3533 3009 +f 3289 3533 2870 +f 3308 3297 3298 +f 3295 3293 3294 +f 3302 3308 3300 +f 3391 3389 3085 +f 3293 3297 3292 +f 3294 3400 3295 +f 2485 3510 3297 +f 3294 3293 3292 +f 3085 3389 3291 +f 3318 3085 3291 +f 3293 3295 3290 +f 3294 3535 3400 +f 3510 8456 3296 +f 3298 3297 3296 +f 2485 3297 3293 +f 3298 3296 2881 +f 3300 3298 2881 +f 3308 3292 3297 +f 3300 2881 3301 +f 2869 3403 3379 +f 3024 3303 2881 +f 3302 3300 3299 +f 3011 3313 2885 +f 3300 3301 3305 +f 3385 3088 3087 +f 3308 3302 3291 +f 3022 3301 3303 +f 2881 3303 3301 +f 3309 3640 3512 +f 3018 3304 3638 +f 3022 3518 3319 +f 3322 3301 3319 +f 2660 3313 3011 +f 3018 3640 3310 +f 3299 3314 3316 +f 2869 3086 3091 +f 3308 3291 3390 +f 3300 3308 3298 +f 3021 3020 3321 +f 3018 3310 3517 +f 3084 3095 3388 +f 3313 3310 3309 +f 3312 3302 3299 +f 3317 2872 3010 +f 3028 896 3304 +f 3316 3312 3299 +f 3027 3512 3323 +f 3515 3513 3306 +f 3324 3326 3314 +f 3314 3299 3305 +f 3095 3086 2869 +f 2837 2867 2872 +f 3301 3022 3319 +f 2869 3090 3403 +f 3642 3643 3324 +f 2873 3326 2866 +f 3318 3302 3312 +f 3318 3377 3085 +f 3305 3322 3314 +f 3313 3320 2885 +f 3321 3029 3518 +f 3320 3321 3020 +f 3301 3322 3305 +f 3029 3514 3516 +f 3029 3323 3514 +f 2866 3326 3643 +f 3516 3322 3319 +f 3513 3514 3323 +f 3318 3312 3377 +f 3322 3516 3324 +f 3314 3326 3316 +f 3085 3382 3080 +f 3328 3327 2731 +f 3040 3327 3041 +f 3262 3328 2643 +f 3329 3328 2968 +f 3069 3329 2968 +f 3329 3063 3331 +f 3051 3330 2967 +f 3039 3041 3330 +f 2967 3331 3063 +f 3041 3331 3330 +f 3337 3014 3356 +f 3332 3344 3336 +f 2875 3054 3333 +f 3053 3335 3054 +f 3332 3336 3334 +f 3334 3336 3519 +f 3343 3342 3332 +f 3332 3334 3335 +f 3357 3352 3353 +f 3519 3336 2878 +f 3523 3525 3522 +f 3357 2852 2856 +f 3336 3341 2878 +f 3345 2862 3337 +f 3340 3363 3342 +f 2862 3014 3337 +f 3335 3053 3343 +f 3361 3044 3089 +f 3337 3363 3345 +f 3354 3351 3353 +f 3343 3332 3335 +f 3340 3345 3363 +f 3358 3053 3359 +f 3342 3343 3364 +f 3530 3520 3003 +f 3350 2880 3349 +f 2862 3347 3346 +f 3363 3337 3356 +f 3340 3366 3345 +f 3364 3358 3360 +f 3364 3360 3366 +f 3338 3349 3341 +f 3349 3348 3350 +f 3350 3348 3353 +f 3350 3353 3352 +f 3339 3524 3003 +f 3351 3354 2877 +f 3352 2856 2864 +f 2677 3350 3352 +f 3354 3353 3348 +f 3353 3351 3357 +f 3003 3528 3530 +f 3529 3528 3527 +f 3365 3369 3370 +f 3008 2860 3365 +f 3522 3356 3014 +f 3344 3362 3338 +f 3357 3351 4423 +f 2856 3352 3357 +f 3053 3374 3359 +f 3358 3355 3360 +f 3067 3044 3359 +f 3044 3361 3367 +f 3360 3355 3369 +f 3345 3366 3347 +f 3089 3092 3361 +f 3088 3376 3096 +f 3368 3344 3342 +f 3525 3362 3356 +f 3356 3362 3363 +f 3362 3344 3368 +f 3342 3364 3340 +f 3358 3364 3343 +f 3355 3361 3370 +f 3346 2860 3008 +f 3364 3366 3340 +f 3360 3369 2860 +f 3358 3367 3355 +f 3044 3367 3359 +f 3342 3363 3368 +f 3362 3368 3363 +f 3370 3369 3355 +f 3369 3365 2860 +f 3371 3370 3361 +f 3371 3384 3370 +f 3361 3092 3371 +f 3384 3092 3096 +f 3096 3386 3384 +f 3008 3372 3082 +f 3057 3373 3051 +f 3066 3373 3059 +f 3052 3374 3054 +f 3045 3067 3374 +f 2837 3375 3378 +f 3377 3382 3085 +f 3095 2869 3387 +f 3312 3316 3378 +f 3377 3375 3382 +f 3375 3377 3378 +f 3312 3378 3377 +f 2036 3084 3380 +f 3393 3396 3395 +f 3402 3080 3404 +f 3375 3317 2870 +f 3382 3509 3080 +f 3509 3375 2870 +f 3509 2870 3383 +f 3386 3096 3376 +f 3370 3384 3372 +f 3392 8460 2036 +f 3385 8460 3376 +f 3071 3082 3386 +f 3386 3082 3372 +f 3383 3533 3379 +f 3311 2868 3534 +f 3084 3388 3380 +f 3294 3389 3381 +f 3308 3390 3292 +f 3291 3389 3390 +f 3294 3390 3389 +f 3402 3391 3080 +f 3389 3391 3381 +f 3376 3392 3071 +f 8460 3087 3084 +f 3395 3090 3393 +f 3396 3076 3397 +f 3394 3396 3397 +f 3402 3395 3394 +f 3404 3403 3395 +f 3397 3076 2735 +f 3395 3396 3394 +f 2735 3072 3398 +f 3400 3535 3399 +f 3074 3073 3398 +f 3405 3398 3073 +f 3401 3398 3405 +f 3295 3400 2664 +f 3405 3400 3399 +f 3495 3400 3073 +f 3398 3401 3397 +f 3399 3535 3536 +f 3536 3402 3394 +f 3391 3402 3381 +f 3090 3395 3403 +f 3402 3404 3395 +f 3080 3383 3404 +f 3379 3404 3383 +f 3400 3405 3073 +f 3401 3405 3399 +f 3406 2588 3545 +f 3107 3406 3100 +f 3428 3429 3433 +f 3407 3540 3537 +f 3104 3408 3102 +f 3106 3107 3408 +f 2691 3409 2500 +f 3112 3409 2587 +f 2914 3410 2912 +f 3410 2909 3157 +f 3411 3156 3155 +f 3113 3410 3411 +f 3147 3661 3672 +f 3452 3823 3827 +f 3549 3413 3143 +f 3550 3150 3147 +f 3182 3114 3419 +f 3184 3414 3417 +f 3180 3415 3185 +f 3179 3415 3183 +f 3416 3425 3423 +f 3422 3220 3417 +f 3418 3417 3414 +f 3422 3218 3457 +f 3419 3179 3182 +f 3418 3416 3423 +f 3416 3418 3419 +f 3419 3418 3179 +f 3103 3427 3204 +f 3416 3419 3420 +f 3421 3114 3197 +f 3204 3421 3205 +f 3417 3423 3422 +f 3429 3423 3425 +f 3418 3423 3417 +f 3420 3204 3426 +f 3426 3204 3427 +f 3431 3424 3427 +f 3426 3416 3420 +f 3433 3429 3424 +f 3424 3425 3426 +f 3426 3425 3416 +f 3430 3427 3103 +f 3424 3426 3427 +f 3434 3542 3438 +f 3434 3438 3432 +f 3424 3429 3425 +f 3429 3428 3443 +f 3108 3430 3103 +f 3431 3430 3109 +f 3434 3431 3109 +f 3424 3431 3433 +f 3441 3432 3438 +f 3428 3435 3439 +f 3434 3433 3431 +f 3433 3434 3435 +f 3540 3542 3102 +f 3434 3432 3435 +f 3432 3446 3435 +f 3446 3442 3445 +f 3655 3791 3654 +f 3446 3441 3442 +f 3653 3555 3652 +f 3442 3447 3437 +f 3542 3434 3109 +f 3436 3654 3441 +f 3458 3459 3223 +f 3439 8462 3443 +f 3791 3792 3790 +f 3440 3555 3653 +f 3436 3441 3438 +f 3442 3441 3440 +f 3442 3448 3447 +f 3442 3437 3445 +f 3429 3443 3422 +f 3439 3443 3428 +f 3985 3450 3838 +f 3675 3807 4185 +f 3564 3445 3437 +f 3446 3439 3435 +f 3446 3432 3441 +f 3439 3446 3445 +f 3448 3442 3440 +f 3449 3447 3444 +f 3790 3652 3555 +f 3444 3447 3448 +f 3448 3653 3689 +f 3567 3574 3565 +f 3615 3612 4138 +f 3576 3579 3688 +f 3611 4151 3609 +f 3554 3580 3691 +f 3974 3812 3412 +f 3974 3552 3553 +f 3453 3199 3216 +f 3560 3453 3559 +f 3212 3560 3561 +f 3971 3952 3949 +f 3457 3455 3456 +f 3225 3458 3223 +f 3456 3219 3217 +f 3457 3456 3220 +f 3422 3457 3220 +f 3457 3218 8461 +f 8461 3455 3457 +f 8462 3459 8461 +f 3445 3564 3439 +f 3564 3568 3566 +f 3572 3571 3566 +f 3571 3459 3566 +f 3229 3461 2700 +f 3461 3230 3234 +f 3466 3464 3228 +f 3465 510 801 +f 510 3463 476 +f 3464 3463 3462 +f 3228 3464 3462 +f 3237 1203 3582 +f 3232 3462 3465 +f 510 3465 3462 +f 3231 3466 3228 +f 3233 3237 3466 +f 2946 3467 2947 +f 3468 3467 2941 +f 2942 3468 2941 +f 3469 3468 2943 +f 3249 3469 2943 +f 3470 3469 1359 +f 3583 3470 1359 +f 3470 1428 3585 +f 2953 3471 2606 +f 2949 3471 2948 +f 3472 2937 2944 +f 2280 3483 3477 +f 3482 2280 2687 +f 3588 3593 3592 +f 3476 3474 3473 +f 3474 3480 3255 +f 3476 3473 3481 +f 3485 3475 3488 +f 3473 3483 3481 +f 3476 3475 3484 +f 2280 3477 2945 +f 3474 3477 3473 +f 3482 3697 3478 +f 3481 3592 3476 +f 3484 3485 3479 +f 3485 3491 3479 +f 3476 3480 3474 +f 3480 3479 3490 +f 3473 3477 3483 +f 3481 3478 3592 +f 2586 3482 2687 +f 3483 3478 3481 +f 2280 3482 3483 +f 3483 3482 3478 +f 3485 3484 3475 +f 3480 3484 3479 +f 3591 3486 3488 +f 3485 2956 3487 +f 3699 3700 3594 +f 3488 3842 3485 +f 4260 3487 2956 +f 3258 3489 3491 +f 3591 3488 3475 +f 3488 3486 3842 +f 3490 3489 2606 +f 3258 2705 3489 +f 3480 3490 2606 +f 3491 3490 3479 +f 3258 3491 3487 +f 3490 3491 3489 +f 3493 3492 2963 +f 3261 3492 3260 +f 3259 3493 2963 +f 3494 3493 2960 +f 2962 3494 2960 +f 3495 3494 2664 +f 3400 3495 2664 +f 3495 3073 3261 +f 3498 3496 3497 +f 3595 2980 3499 +f 2804 3497 2805 +f 3498 3497 2802 +f 2786 3498 2802 +f 3595 3498 3285 +f 3739 3728 3736 +f 3500 3596 3273 +f 3595 3500 3496 +f 3596 3500 3499 +f 3501 3606 3608 +f 4013 3543 3648 +f 3605 3280 3598 +f 3649 2502 3927 +f 3267 3281 3503 +f 3628 3504 3281 +f 2898 3097 3505 +f 3630 2970 3503 +f 2576 2579 3506 +f 2898 3505 3504 +f 8439 3630 2041 +f 2576 3506 3505 +f 3633 3631 2981 +f 3633 3635 3632 +f 3595 3508 2980 +f 3286 3508 3285 +f 2868 3315 3009 +f 3387 3379 3533 +f 8456 3510 3013 +f 3297 3510 3296 +f 3511 3513 3512 +f 3310 3640 3309 +f 3513 3511 3306 +f 3323 3321 3027 +f 3515 3514 3513 +f 3321 3323 3029 +f 3306 3325 3515 +f 3324 3643 3326 +f 3514 3515 3325 +f 3029 3516 3319 +f 3642 3516 3514 +f 3026 3517 3025 +f 3304 3517 3028 +f 3021 3518 3022 +f 3029 3319 3518 +f 2863 3519 2878 +f 3333 3519 2849 +f 3525 3520 3526 +f 3522 3525 3356 +f 3919 4648 4645 +f 4423 2877 3521 +f 3014 3339 3522 +f 3523 3522 3339 +f 3530 3528 3354 +f 3525 3523 3520 +f 3529 3531 3532 +f 3529 2877 3528 +f 3526 3520 3348 +f 3362 3525 3338 +f 3349 3526 3348 +f 3338 3525 3526 +f 3530 3348 3520 +f 3527 3528 3524 +f 3532 3531 32 +f 2877 3529 3521 +f 3348 3530 3354 +f 3003 3520 3523 +f 3534 2868 3009 +f 3529 3527 3531 +f 3521 3529 3532 +f 3402 3536 3381 +f 3535 3381 3536 +f 3401 3536 3394 +f 3538 3107 3100 +f 3407 3655 3540 +f 3407 3537 3538 +f 3107 3538 3537 +f 3100 3545 3544 +f 3539 2900 3656 +f 3542 3540 3436 +f 3102 3537 3540 +f 3939 4148 3649 +f 3605 3615 3280 +f 3438 3542 3436 +f 3102 3542 3109 +f 3544 3539 3100 +f 4153 4154 4152 +f 3100 3406 3545 +f 3543 3544 3648 +f 2588 3647 3545 +f 3545 3649 3648 +f 3815 3546 3650 +f 3186 3547 3149 +f 3151 3152 3547 +f 3152 3146 3548 +f 3546 3548 3143 +f 3152 3548 3547 +f 3141 3549 3145 +f 3550 3549 3150 +f 3672 3673 3147 +f 3650 3552 3412 +f 4238 3806 4189 +f 3678 3978 4196 +f 3413 3550 3552 +f 3553 3552 3550 +f 3147 3553 3550 +f 3670 3551 4196 +f 3889 3756 3887 +f 3980 4277 3833 +f 3440 3654 3555 +f 3655 3654 3436 +f 3815 3816 3975 +f 4855 4859 3829 +f 3557 3212 3667 +f 3558 3557 3213 +f 3213 3210 3558 +f 3199 3558 3210 +f 3221 3559 3214 +f 3560 3559 3222 +f 3561 3560 3222 +f 3557 3560 3212 +f 3561 3222 3793 +f 3671 3563 3667 +f 3660 3194 3662 +f 3674 3562 3670 +f 3563 3665 3667 +f 4832 4830 4831 +f 3449 3567 3568 +f 8462 3564 3459 +f 3573 3574 3575 +f 3575 3567 3449 +f 3564 3437 3568 +f 3566 3565 3572 +f 3578 3694 3577 +f 3565 3566 3567 +f 3449 3568 3437 +f 3566 3568 3567 +f 3569 3572 3979 +f 3835 3460 3796 +f 3694 3987 3570 +f 3837 3984 3981 +f 3836 3571 3569 +f 3223 3459 3571 +f 3979 3572 3565 +f 3571 3572 3569 +f 3982 4281 3577 +f 3979 3980 3833 +f 3575 3574 3567 +f 3980 3574 3573 +f 3579 3576 3578 +f 3982 3577 3570 +f 3688 3689 3687 +f 3580 3694 3576 +f 3573 3575 3577 +f 3578 3577 3575 +f 3579 3575 3449 +f 3691 3580 3576 +f 3444 3688 3449 +f 3579 3449 3688 +f 3988 3841 3987 +f 3577 3694 3570 +f 3223 3696 3225 +f 3835 3796 3581 +f 3463 3582 667 +f 3237 3582 3464 +f 1797 3583 1359 +f 3584 3583 1799 +f 1418 3584 1799 +f 3470 3584 1428 +f 3585 1428 1804 +f 3585 3252 3254 +f 3586 1352 2044 +f 3252 3585 3586 +f 3254 3587 3585 +f 3467 3587 2947 +f 3589 2586 2689 +f 3163 3593 3160 +f 2404 3589 2689 +f 3697 3589 3588 +f 3589 2404 3590 +f 3174 3590 2404 +f 3592 3591 3475 +f 3593 3591 3592 +f 3592 3475 3476 +f 3592 3478 3697 +f 3593 3588 3590 +f 3163 3591 3593 +f 3849 3844 3845 +f 3842 3698 4285 +f 3595 3285 3508 +f 3500 3595 3499 +f 3702 3762 3761 +f 3598 3600 3501 +f 3273 3597 3275 +f 3603 3597 3596 +f 3269 3602 3278 +f 3598 3609 3605 +f 3279 3599 3280 +f 3602 3599 3274 +f 3269 3603 3600 +f 3600 3603 3604 +f 3609 3501 3611 +f 4140 4141 4143 +f 3599 3602 3598 +f 3278 3602 3274 +f 3597 3603 3269 +f 3604 3603 3596 +f 3858 3499 3702 +f 8463 3625 3626 +f 3609 3598 3501 +f 3605 3601 3617 +f 3600 3604 3606 +f 3613 3618 3703 +f 3618 3607 3608 +f 3507 3632 3637 +f 3703 3606 3604 +f 3607 3614 3608 +f 3619 3611 3501 +f 3605 3609 4151 +f 3619 3614 3627 +f 3627 3610 3619 +f 3619 3501 3608 +f 3611 3610 4151 +f 4338 4153 4329 +f 3649 3927 3939 +f 3596 3858 3604 +f 3731 3736 3728 +f 3624 3614 3607 +f 4150 3610 3627 +f 3617 3615 3605 +f 4138 3616 3615 +f 4135 3502 4134 +f 2681 3280 3616 +f 3617 3601 4147 +f 3615 3617 3612 +f 3703 3618 3608 +f 3765 3618 3613 +f 3611 3619 3610 +f 3608 3614 3619 +f 3734 3766 3746 +f 3715 3620 3708 +f 3692 3554 3691 +f 3838 3450 4282 +f 3714 3707 3709 +f 3622 3626 3625 +f 3614 3624 3625 +f 4154 4139 4147 +f 3709 3624 3607 +f 3625 3624 3622 +f 3622 3706 3626 +f 3625 3623 3627 +f 3626 3620 4054 +f 8463 3621 4537 +f 3625 3627 3614 +f 3623 4537 4150 +f 3629 3281 3282 +f 3628 2681 4135 +f 2681 3628 3629 +f 3629 3628 3281 +f 3505 3630 3504 +f 2041 3630 3506 +f 3631 3633 3632 +f 3507 3758 3741 +f 3635 2975 8466 +f 3773 3909 3644 +f 2979 3633 2981 +f 3635 3633 2977 +f 3712 3704 3860 +f 3637 3635 3634 +f 2975 3635 2977 +f 3637 3634 3636 +f 3634 3635 8466 +f 3718 3723 3710 +f 3635 3637 3632 +f 3740 3637 3636 +f 3639 3638 2855 +f 3640 3638 3511 +f 3638 3640 3018 +f 3638 3639 3511 +f 3512 3640 3511 +f 3642 3325 3641 +f 3643 3012 2866 +f 3516 3642 3324 +f 3325 3642 3514 +f 3642 3641 3643 +f 3004 2838 3772 +f 2838 3779 3773 +f 4424 4422 3910 +f 3785 3914 3912 +f 3922 3920 4067 +f 3647 2588 2693 +f 3649 3647 2502 +f 3544 3545 3648 +f 3545 3647 3649 +f 3789 3927 3932 +f 3541 3648 3649 +f 3815 3650 3412 +f 3143 3650 3546 +f 3840 3985 3651 +f 4323 4332 3906 +f 3690 3652 3450 +f 3653 3652 3451 +f 3653 3451 3689 +f 3440 3653 3448 +f 3441 3654 3440 +f 3436 3540 3655 +f 3407 3656 3655 +f 3656 2900 3792 +f 3539 3656 3407 +f 3792 2900 3657 +f 4014 3543 4013 +f 3450 3652 3790 +f 3149 3975 3816 +f 3556 4861 4291 +f 4198 4200 4195 +f 3681 3812 3974 +f 3194 3211 3662 +f 3660 3562 3674 +f 3195 3661 3147 +f 3194 3660 3661 +f 3664 3207 3213 +f 3660 3662 3666 +f 4187 3671 3680 +f 5102 5095 4256 +f 3213 3665 3664 +f 3562 3660 3666 +f 3213 3557 3667 +f 3668 3666 3664 +f 3665 3668 3664 +f 3668 3665 3563 +f 3561 3798 3212 +f 3800 3671 3798 +f 4830 3551 4838 +f 3679 3668 3563 +f 4838 4186 4839 +f 3668 3562 3666 +f 3793 3803 3561 +f 3682 3681 3955 +f 3798 3671 3667 +f 3684 3807 3977 +f 3674 3672 3660 +f 4836 3675 3947 +f 3147 3673 3553 +f 3674 3670 4196 +f 4238 4194 4191 +f 3819 3668 3679 +f 4835 3822 3814 +f 3670 3819 4186 +f 3551 3670 4186 +f 3809 3957 3945 +f 3669 4223 4821 +f 4214 3977 4197 +f 4257 3684 3954 +f 3977 3830 4197 +f 3679 3563 3828 +f 3831 3828 3809 +f 3679 3831 3819 +f 3680 3663 4187 +f 3807 3684 4185 +f 4826 4828 4824 +f 3680 4190 3947 +f 4194 4238 4237 +f 5067 4814 5003 +f 4190 4208 4836 +f 3672 3978 3673 +f 3946 3963 3944 +f 3994 3570 3987 +f 4257 3957 3684 +f 3571 3836 3223 +f 3836 3981 3686 +f 3451 3690 3687 +f 3687 3690 3839 +f 3689 3688 3444 +f 3576 3688 3687 +f 3689 3444 3448 +f 3451 3687 3689 +f 3690 3451 3652 +f 3839 3692 3691 +f 3839 3576 3687 +f 3651 4342 3840 +f 3895 4059 3756 +f 4307 4309 4319 +f 4307 3838 4282 +f 4201 4205 4191 +f 3576 3694 3578 +f 3987 3694 3580 +f 3696 3695 3225 +f 3695 3581 3797 +f 3696 3223 3836 +f 3695 3696 3581 +f 3589 3697 2586 +f 3592 3697 3588 +f 3844 3594 3700 +f 3960 4515 4513 +f 3591 3699 3486 +f 3700 3699 3163 +f 3162 3700 3163 +f 3844 3700 3098 +f 3999 3852 3857 +f 3844 3850 3594 +f 3742 3744 3741 +f 2980 3631 3741 +f 3606 3703 3608 +f 3761 3703 3604 +f 3721 3724 3725 +f 3620 3706 3708 +f 4316 4317 4314 +f 4295 4014 4534 +f 3709 3707 3708 +f 3620 3626 3706 +f 8467 3718 3710 +f 3651 4321 4342 +f 3711 3706 3622 +f 3715 3716 3713 +f 3624 3709 3622 +f 3759 3765 3745 +f 3716 3720 3719 +f 3754 3721 3752 +f 3706 3711 3708 +f 3622 3709 3711 +f 3760 3709 3607 +f 3762 3745 3761 +f 3708 3716 3715 +f 3887 4059 3757 +f 3760 3714 3709 +f 3714 3712 3860 +f 3716 3708 3707 +f 4053 3713 4052 +f 3719 3720 3717 +f 3713 3716 3718 +f 3722 3717 3720 +f 3717 3722 3730 +f 3716 3719 3718 +f 3724 3723 3719 +f 3720 3716 3707 +f 3719 3717 3724 +f 3707 3714 3860 +f 3720 3860 3722 +f 3730 3727 3729 +f 3729 3748 3725 +f 3734 3746 3731 +f 3704 3727 3722 +f 3719 3723 3718 +f 3755 3721 3754 +f 3725 3724 3717 +f 3723 3724 3721 +f 3735 3748 3749 +f 3764 3748 3729 +f 3767 3749 3764 +f 3877 3869 3871 +f 3731 3727 3704 +f 3729 3727 3726 +f 3731 3737 3736 +f 3739 3740 3728 +f 3746 3766 3726 +f 3730 3725 3717 +f 3727 3730 3722 +f 3725 3730 3729 +f 3712 3759 3737 +f 3731 3728 3734 +f 3732 3862 3866 +f 4351 4022 3750 +f 3760 3607 3765 +f 3738 3758 3739 +f 3734 3902 3901 +f 3898 3763 3900 +f 3861 4347 3735 +f 3748 3751 3725 +f 3737 3731 3704 +f 3743 3739 3733 +f 3712 3737 3704 +f 3733 3736 3737 +f 3743 3762 3742 +f 3742 3702 3744 +f 3733 3739 3736 +f 3739 3758 3740 +f 3637 3740 3507 +f 3899 3901 3903 +f 3507 3741 3631 +f 3742 3741 3738 +f 3743 3742 3738 +f 3744 3702 3499 +f 3739 3743 3738 +f 3743 3733 3745 +f 3499 2980 3744 +f 3741 3744 2980 +f 3759 3745 3733 +f 3745 3613 3761 +f 3726 3727 3746 +f 3731 3746 3727 +f 4062 3904 3905 +f 3872 3870 3864 +f 3764 3729 3726 +f 4352 3751 3748 +f 3766 3767 3726 +f 4347 3732 4346 +f 3865 3873 4344 +f 3897 3710 3755 +f 4352 3748 3735 +f 3752 3751 3750 +f 3754 4022 3883 +f 3725 3752 3721 +f 3885 3883 3753 +f 4555 4872 4873 +f 3757 3884 3887 +f 3723 3755 3710 +f 3721 3755 3723 +f 3884 3754 3885 +f 3887 3756 4059 +f 4326 4328 4063 +f 3754 3884 3897 +f 4059 3895 3896 +f 3741 3758 3738 +f 3507 3740 3758 +f 3737 3759 3733 +f 3760 3759 3712 +f 3760 3712 3714 +f 3607 3618 3765 +f 3703 3761 3613 +f 3858 3761 3604 +f 3742 3762 3702 +f 3743 3745 3762 +f 3901 3899 3900 +f 3768 3767 3763 +f 3767 3764 3726 +f 3748 3764 3749 +f 3745 3765 3613 +f 3759 3760 3765 +f 3900 3763 3901 +f 3766 3763 3767 +f 3768 3763 3898 +f 3862 3863 3768 +f 3865 3866 3867 +f 3749 3863 3861 +f 4045 4051 4050 +f 3892 3756 3889 +f 2976 3770 2975 +f 3771 3770 2973 +f 3005 3771 2973 +f 3772 3771 3004 +f 3773 3772 2838 +f 3771 3772 3644 +f 3776 3773 3001 +f 2975 3644 3909 +f 3775 3776 3787 +f 4062 4416 4061 +f 3001 3779 3784 +f 4064 3908 3775 +f 3776 3001 3787 +f 3908 3776 3775 +f 3780 2838 3002 +f 4422 4066 2852 +f 3913 3914 3915 +f 3773 3779 3001 +f 3780 3779 2838 +f 3002 2828 3781 +f 3646 3778 3780 +f 3781 2835 3917 +f 3002 3781 3780 +f 4713 4711 4441 +f 3867 3866 3862 +f 3786 3924 3775 +f 3784 3787 3001 +f 3788 3778 3646 +f 4432 3787 3783 +f 3922 3916 3920 +f 4069 3912 3782 +f 3925 3786 4431 +f 3864 3870 3874 +f 3783 3787 3784 +f 3787 3786 3775 +f 3915 3788 3646 +f 3784 3788 3785 +f 2680 3935 3934 +f 4136 4137 3941 +f 3555 3654 3791 +f 3657 3450 3790 +f 3655 3656 3792 +f 3555 3791 3790 +f 3790 3792 3657 +f 3655 3792 3791 +f 3222 3795 3794 +f 4447 3803 3659 +f 3208 3695 3797 +f 3659 3793 3794 +f 3559 3795 3222 +f 3208 3795 3221 +f 4157 4156 4447 +f 3797 3659 3794 +f 3797 3794 3208 +f 3581 3796 3797 +f 3212 3798 3667 +f 3798 3561 3801 +f 3802 3799 3801 +f 4177 3958 4011 +f 3801 3800 3798 +f 4190 3800 3799 +f 3801 3561 3803 +f 3800 3801 3799 +f 4157 4158 4156 +f 3983 4448 3837 +f 3659 3803 3793 +f 3801 3803 3802 +f 3976 3946 3944 +f 3971 3949 3813 +f 4257 3676 3945 +f 5098 5099 4184 +f 3955 3811 5102 +f 3946 3976 4188 +f 4197 3944 4183 +f 3954 3977 4214 +f 4832 4844 3811 +f 4205 4238 4191 +f 3682 4180 3818 +f 3816 3556 3658 +f 4828 4210 3669 +f 3974 3412 3552 +f 3956 4181 4225 +f 3977 3954 3684 +f 3682 3812 3681 +f 3412 3812 3815 +f 4249 4173 4251 +f 3818 3812 3682 +f 4196 3978 3672 +f 3822 4862 3821 +f 3820 3812 3818 +f 3821 3816 3820 +f 3149 3816 3658 +f 3820 3816 3815 +f 5103 5464 5008 +f 5116 3454 3810 +f 3670 3562 3819 +f 3818 3814 3820 +f 3454 4180 4184 +f 3452 3822 3823 +f 3820 3815 3812 +f 3821 3820 3814 +f 3822 3821 3814 +f 3556 3816 3821 +f 4180 4835 3818 +f 3822 3452 4862 +f 3948 5093 3676 +f 3819 3831 4186 +f 4842 3817 5005 +f 4226 4511 4010 +f 4237 4189 4224 +f 3831 3809 4839 +f 5114 3826 5116 +f 4228 4294 4258 +f 3682 3955 4256 +f 3829 3827 3826 +f 4835 3823 3822 +f 5116 3823 3454 +f 4010 3958 4226 +f 4004 4006 3998 +f 4826 5091 4827 +f 4247 3963 3832 +f 3802 4199 4198 +f 4447 3802 3803 +f 4227 3968 3973 +f 3805 4214 3824 +f 3565 3574 3980 +f 4277 3983 3833 +f 3834 4279 4280 +f 4169 4171 4231 +f 3696 3835 3581 +f 3984 3835 3686 +f 3981 3836 3569 +f 3696 3836 3686 +f 4159 4161 4158 +f 3835 3984 3460 +f 4308 4282 3450 +f 4304 4307 3986 +f 3985 3840 3690 +f 3576 3839 3691 +f 3692 3839 3840 +f 3690 3840 3839 +f 3988 3580 3554 +f 3991 3993 3841 +f 3842 2956 3485 +f 3486 3698 3842 +f 3698 3594 3850 +f 3701 3854 3856 +f 3845 3844 3098 +f 3851 3701 3856 +f 3159 3845 3098 +f 3131 3134 3846 +f 3134 3169 3848 +f 3846 3848 3854 +f 3854 3852 3856 +f 4287 4286 3847 +f 3848 3166 3852 +f 3134 3848 3846 +f 3844 3849 3701 +f 3845 3846 3849 +f 3851 3844 3701 +f 3850 3847 4286 +f 3847 3850 3851 +f 3844 3851 3850 +f 3857 3187 3855 +f 4289 3851 3853 +f 3852 3166 3857 +f 4003 4001 4002 +f 3849 3854 3701 +f 3848 3852 3854 +f 3187 3658 4291 +f 3853 3999 4002 +f 3999 3856 3852 +f 3851 3856 3853 +f 3187 3857 3166 +f 3999 3857 3855 +f 3499 3858 3596 +f 3761 3858 3702 +f 4145 4146 4144 +f 4014 3859 4296 +f 3722 3860 3704 +f 3860 3720 3707 +f 3735 3749 3861 +f 3749 3767 3863 +f 3768 3868 3867 +f 3732 3861 3862 +f 3768 3863 3767 +f 3861 3863 3862 +f 3880 3874 3881 +f 4021 3882 4366 +f 3873 3865 3872 +f 4346 3732 4345 +f 3867 3862 3768 +f 3865 4344 4345 +f 3768 3898 3868 +f 3867 3870 3872 +f 3871 3868 3747 +f 3867 3868 3870 +f 3924 3774 3775 +f 4068 4072 4074 +f 3871 3870 3868 +f 3870 3871 3874 +f 3877 3747 3875 +f 3871 3869 3874 +f 3872 3864 4021 +f 3867 3872 3865 +f 3874 3880 3864 +f 4381 5244 4354 +f 4016 3869 4017 +f 3881 3879 3880 +f 3875 3747 4061 +f 3875 4018 4017 +f 4077 4082 3876 +f 4021 3880 3882 +f 3747 3877 3871 +f 3774 3926 4018 +f 3926 3925 4076 +f 4078 4016 4075 +f 4357 4356 3879 +f 3882 4360 4366 +f 3881 3874 3869 +f 3880 3879 3882 +f 4016 3881 3869 +f 3876 4019 3881 +f 4358 4357 4020 +f 4093 4020 4089 +f 4347 4349 4352 +f 3866 3865 4345 +f 3886 3889 3888 +f 3897 3884 3757 +f 3883 3885 3754 +f 3753 3884 3885 +f 4022 4351 3883 +f 4328 4337 4063 +f 3888 3887 3884 +f 3887 3888 3889 +f 3884 3753 3888 +f 5356 5241 5240 +f 3893 3891 3892 +f 4625 4024 3893 +f 3883 4351 4350 +f 5281 4025 4914 +f 3996 3991 3990 +f 3756 3892 3895 +f 3889 3886 4627 +f 4032 3895 3892 +f 3889 3893 3892 +f 4625 4626 4415 +f 4024 4026 3891 +f 4045 4050 4036 +f 4032 3892 3891 +f 3896 3895 3894 +f 3894 4033 4040 +f 4055 4056 3896 +f 3710 3897 3757 +f 3754 3897 3755 +f 3766 3734 3901 +f 3868 3898 3747 +f 4018 4416 3774 +f 3898 3900 3747 +f 3901 3763 3766 +f 3900 3899 4061 +f 3902 3734 3728 +f 3903 3636 3904 +f 3728 3740 3902 +f 3903 3740 3636 +f 3901 3902 3903 +f 3740 3903 3902 +f 8464 3636 3634 +f 3899 3903 3904 +f 8464 3904 3636 +f 3905 8465 4064 +f 3715 4053 3620 +f 4314 4330 3769 +f 4029 4033 3894 +f 3891 4026 4029 +f 3908 3909 3776 +f 3775 3774 4064 +f 3776 3909 3773 +f 3909 3908 8466 +f 4066 4427 4425 +f 4417 4424 3910 +f 2865 4417 4420 +f 3783 3785 3912 +f 3914 3785 3915 +f 4657 4653 4656 +f 3914 4925 3912 +f 3785 3788 3915 +f 4671 4925 3913 +f 3917 3646 3781 +f 4657 3921 3911 +f 3918 2835 2874 +f 3918 3920 3916 +f 3918 3917 2835 +f 3917 3916 3923 +f 4650 3920 2861 +f 3918 3916 3917 +f 4650 2853 4651 +f 4651 3006 4429 +f 2861 3920 3918 +f 4067 3921 3922 +f 3913 3915 3921 +f 3923 3922 3915 +f 4067 3920 3919 +f 3915 3922 3921 +f 3917 3923 3646 +f 3922 3923 3916 +f 3925 3924 3786 +f 3926 3924 3925 +f 4432 4068 4431 +f 3878 4076 4075 +f 3878 4017 4018 +f 3774 3924 3926 +f 3929 3933 2502 +f 3939 3927 4142 +f 3929 2502 2696 +f 3929 3930 3928 +f 3930 3929 2504 +f 3928 3932 3933 +f 3930 2504 2505 +f 3930 2510 3938 +f 3789 3940 3941 +f 3612 4147 4141 +f 3933 3927 2502 +f 3928 3938 3934 +f 3928 3933 3929 +f 3927 3933 3932 +f 2680 2897 3935 +f 3932 3934 3940 +f 3936 3942 3097 +f 3932 3940 3789 +f 2898 4134 3936 +f 3936 4136 3941 +f 2415 2319 3937 +f 2319 2510 3937 +f 2510 8450 8449 +f 3934 3938 2680 +f 4142 3927 3789 +f 3931 4146 4148 +f 3934 3935 3940 +f 3935 3942 3941 +f 4138 4136 3502 +f 3941 4140 4142 +f 3097 3942 2581 +f 3941 3942 3936 +f 4158 4161 4163 +f 4163 3943 4158 +f 3957 4185 3684 +f 3964 4222 3966 +f 3830 3807 4209 +f 3954 4214 3805 +f 5099 3454 4184 +f 3948 3804 3956 +f 5096 4256 5095 +f 4829 3678 4196 +f 4821 4824 3669 +f 3956 4225 5267 +f 5108 4244 4845 +f 4226 3962 4510 +f 4244 3964 4233 +f 2056 3969 1874 +f 4524 4533 4517 +f 5465 5006 5057 +f 4012 4228 4008 +f 4507 3813 4175 +f 4507 4175 4176 +f 3971 3969 3953 +f 3830 3977 3807 +f 3947 4190 4836 +f 4190 3680 3800 +f 4837 3945 3676 +f 4174 3832 3946 +f 5467 4225 5468 +f 5069 5085 5453 +f 3830 3944 4197 +f 4260 4288 8468 +f 3961 4509 4853 +f 3972 3953 4258 +f 3951 4530 4524 +f 3813 3949 4227 +f 5101 3810 5099 +f 3962 3959 4509 +f 4178 4517 4511 +f 4254 4261 4240 +f 5119 5117 5118 +f 5084 5105 5086 +f 3971 3953 3972 +f 5453 4174 5089 +f 4258 3953 4506 +f 3967 3843 4006 +f 3967 4508 3843 +f 4183 3677 3824 +f 4260 3950 4288 +f 4012 3959 4011 +f 4176 4175 4179 +f 5070 3966 4222 +f 5117 3962 4509 +f 5448 3956 5267 +f 3949 3952 4010 +f 3805 3804 4257 +f 2054 3969 2056 +f 3817 5105 4840 +f 2055 3960 4513 +f 4252 4264 3970 +f 4506 3953 3969 +f 3959 3962 4226 +f 4258 4506 3967 +f 3673 3978 3553 +f 4196 3672 3674 +f 3547 3975 3149 +f 3815 3975 3546 +f 3682 4256 3825 +f 4257 3954 3805 +f 3946 3832 3963 +f 3825 4184 4180 +f 4238 4189 4237 +f 4187 3809 3671 +f 3980 3979 3565 +f 3981 3979 3833 +f 4281 3980 3573 +f 4277 3685 3983 +f 3979 3981 3569 +f 3981 3833 3983 +f 3841 3994 3987 +f 4278 4277 3980 +f 4448 3983 3685 +f 3981 3983 3837 +f 3981 3984 3686 +f 4162 3984 3837 +f 3450 3985 3690 +f 3985 3838 4312 +f 4300 4308 4534 +f 4300 4296 4304 +f 3988 3987 3580 +f 3994 3841 3993 +f 4284 4283 3990 +f 3841 3988 3990 +f 3894 3895 4032 +f 3991 3996 3693 +f 4284 3988 3554 +f 3996 4283 3995 +f 5076 3993 3693 +f 3841 3990 3991 +f 4505 4466 4498 +f 4266 4458 4460 +f 3693 3993 3991 +f 4280 3994 3993 +f 4280 3993 3992 +f 3982 3570 3994 +f 4039 4041 4340 +f 4334 4335 4327 +f 4283 3996 3990 +f 5078 3996 3995 +f 3997 4285 4286 +f 4287 3950 3997 +f 4289 3998 4287 +f 3853 3856 3999 +f 4856 4009 4292 +f 4009 4002 3999 +f 3971 1874 3969 +f 3967 4005 4258 +f 4012 4294 4228 +f 4002 4004 3853 +f 4009 3999 3855 +f 4004 4002 4001 +f 4291 4292 3187 +f 4293 4003 4854 +f 4007 4006 4004 +f 4004 3998 4289 +f 4007 4001 4008 +f 3972 4258 4294 +f 3967 4006 4005 +f 3843 3998 4006 +f 4001 4293 4008 +f 4005 4006 4007 +f 4000 4012 4008 +f 4007 4008 4228 +f 4292 4009 3855 +f 4002 4009 4003 +f 4226 4177 3959 +f 4857 4858 3961 +f 5111 5109 5112 +f 3952 4294 4011 +f 3959 4012 4000 +f 4294 4012 4011 +f 4145 4013 3541 +f 4014 4013 3859 +f 4296 3859 4297 +f 4295 4534 2900 +f 4360 3882 4356 +f 4023 4348 4378 +f 4017 3869 3877 +f 4074 4075 4076 +f 3875 4017 3877 +f 3878 4016 4017 +f 4018 3875 4416 +f 3878 4018 3926 +f 4082 4539 3876 +f 3879 3881 4019 +f 4069 4072 4068 +f 4089 4020 4084 +f 3872 4021 3873 +f 3880 4021 3864 +f 3754 3752 4022 +f 3750 4022 3752 +f 3882 3879 4356 +f 5244 5240 4354 +f 4027 4030 4411 +f 3891 3893 4024 +f 4025 4031 4030 +f 4915 3995 4283 +f 4411 4024 3890 +f 4030 4031 4026 +f 3890 4024 4625 +f 4255 4261 4254 +f 4031 4037 4028 +f 4028 4039 4033 +f 4031 4029 4026 +f 4033 4029 4028 +f 4411 4030 4026 +f 4914 4030 4027 +f 5282 4034 5477 +f 4029 4031 4028 +f 3891 4029 4032 +f 3894 4032 4029 +f 4041 4037 4038 +f 4042 4036 4043 +f 4025 4030 4914 +f 4793 4792 4986 +f 4042 4045 4036 +f 3896 3894 4040 +f 4040 4043 4036 +f 4049 4051 4048 +f 5477 4031 4025 +f 4037 4034 5372 +f 4792 4413 4986 +f 4327 4336 4328 +f 4041 4039 4028 +f 4039 4035 4042 +f 4043 4033 4039 +f 4040 4036 4055 +f 4037 4041 4028 +f 4041 4038 4340 +f 4046 4042 4035 +f 4046 4045 4042 +f 4033 4043 4040 +f 4039 4042 4043 +f 4044 4046 4047 +f 4320 4063 4321 +f 4044 4048 4045 +f 4414 4048 3769 +f 4047 4046 4035 +f 4045 4046 4044 +f 4047 4035 4339 +f 4311 4325 4320 +f 4324 4048 4044 +f 4048 4414 4049 +f 3626 4054 3906 +f 4050 4056 4055 +f 4050 4051 4057 +f 4040 4055 3896 +f 4048 4051 4045 +f 4057 4051 4049 +f 3906 4054 4049 +f 3718 8467 3713 +f 3713 4053 3715 +f 4052 4057 4053 +f 3620 4053 4054 +f 4049 4054 4053 +f 4036 4050 4055 +f 4050 4057 4056 +f 8467 4052 3713 +f 4058 3710 3757 +f 4053 4057 4049 +f 4056 4057 4052 +f 3896 4056 4058 +f 4058 4056 8467 +f 3896 4058 4059 +f 3757 4059 4058 +f 4408 4389 4403 +f 4896 4894 4895 +f 3900 4061 3747 +f 4062 4061 3899 +f 3904 4062 3899 +f 4064 4416 3905 +f 4312 3838 4307 +f 4326 3907 4334 +f 4416 4064 3774 +f 8465 3905 8464 +f 4637 4428 2865 +f 4417 2865 4424 +f 3006 2852 4425 +f 4645 4067 3919 +f 3921 4067 3911 +f 4069 3783 3912 +f 4073 4072 4069 +f 4073 4071 4072 +f 4069 4068 4432 +f 4436 4434 4073 +f 4082 4084 4539 +f 4083 4082 4077 +f 3925 4431 4074 +f 4073 4069 3782 +f 4072 4071 4074 +f 4643 4653 4658 +f 4080 4434 4070 +f 3876 4078 4077 +f 3878 4075 4016 +f 4077 4075 4074 +f 4078 3881 4016 +f 3926 4076 3878 +f 4074 4076 3925 +f 4071 4079 4074 +f 4077 4074 4079 +f 3881 4078 3876 +f 4075 4077 4078 +f 4080 4071 4434 +f 4080 4079 4071 +f 4087 4083 4090 +f 4080 4083 4079 +f 4087 4081 4083 +f 4088 4081 4087 +f 4077 4079 4083 +f 4084 4082 4081 +f 4090 4080 4070 +f 4081 4082 4083 +f 4088 4091 4081 +f 4020 4357 4539 +f 4675 4678 4674 +f 4088 4102 4091 +f 4094 4098 4093 +f 4373 4361 4362 +f 4090 4083 4080 +f 4087 4085 4708 +f 4097 4102 4118 +f 4099 4095 4096 +f 4089 4084 4081 +f 4089 4094 4093 +f 4683 4090 4070 +f 4087 4090 4085 +f 4086 4089 4091 +f 4081 4091 4089 +f 4097 4099 4102 +f 4098 4101 4092 +f 4094 4089 4086 +f 4359 4356 4358 +f 4096 4094 4086 +f 4094 4096 4098 +f 4707 4106 4706 +f 4629 4630 3886 +f 4104 4102 4099 +f 4098 4096 4095 +f 4087 4708 4088 +f 4114 4103 4112 +f 4704 4707 4698 +f 4093 4098 4092 +f 4104 4096 4086 +f 4112 4108 4110 +f 4095 4099 4106 +f 4375 4391 4371 +f 4704 4098 4095 +f 4365 4344 3873 +f 4091 4102 4086 +f 4118 4440 4107 +f 4097 4111 4110 +f 4131 4718 4130 +f 4096 4104 4099 +f 4086 4102 4104 +f 4683 4070 4684 +f 4112 4106 4108 +f 4097 4108 4099 +f 4106 4103 4706 +f 4088 4708 4440 +f 4110 4111 4109 +f 4108 4097 4110 +f 4106 4099 4108 +f 4117 4128 4122 +f 4114 4121 4113 +f 4097 4118 4111 +f 4112 4110 4109 +f 4441 4107 4709 +f 4122 4116 4117 +f 4112 4115 4114 +f 4106 4112 4103 +f 4114 4115 4121 +f 4133 4130 4113 +f 4115 4112 4109 +f 5132 5133 4866 +f 4117 4115 4109 +f 4117 4120 4121 +f 4109 4128 4117 +f 4724 4721 4723 +f 4111 4712 4128 +f 4117 4116 4120 +f 4440 4118 4102 +f 4118 4107 4710 +f 4441 4712 4710 +f 4125 4116 4122 +f 4968 4759 4753 +f 4132 4127 4716 +f 4117 4121 4115 +f 4121 4120 4133 +f 4125 4126 4124 +f 4122 4126 4125 +f 4962 4711 4713 +f 4673 4676 4674 +f 4123 4933 4442 +f 4743 4750 4715 +f 4126 4122 4119 +f 4129 4717 4720 +f 4126 4119 4711 +f 4442 4126 4962 +f 4724 4728 4721 +f 4131 4130 4717 +f 4111 4128 4109 +f 4122 4128 4119 +f 4716 4120 4116 +f 4389 4390 4403 +f 4770 4769 4972 +f 4133 4113 4121 +f 4124 4715 4125 +f 4116 4125 4715 +f 4758 4720 4132 +f 4444 4718 4719 +f 4716 4715 4761 +f 4720 4133 4127 +f 2898 3628 4135 +f 4136 4134 3502 +f 3616 4135 2681 +f 2898 4135 4134 +f 4134 4136 3936 +f 4136 4138 4137 +f 4141 4137 3612 +f 4142 4140 3931 +f 3616 4138 3502 +f 3612 4137 4138 +f 4147 4139 4141 +f 4143 4146 3931 +f 3941 4137 4140 +f 4140 4137 4141 +f 3612 3617 4147 +f 4141 4139 4143 +f 3939 4142 3931 +f 3941 4142 3789 +f 4143 4139 4144 +f 3931 4140 4143 +f 4301 4154 4153 +f 3859 4013 4145 +f 3541 4148 4146 +f 3859 4145 4144 +f 4144 4146 4143 +f 3541 4146 4145 +f 4151 4150 4149 +f 4147 3601 4152 +f 3649 4148 3541 +f 3931 4148 3939 +f 4536 4149 4537 +f 4329 4153 4536 +f 3623 4150 3627 +f 4149 4152 4151 +f 3601 3605 4151 +f 3610 4150 4151 +f 4151 4152 3601 +f 4153 4152 4149 +f 4538 4329 4536 +f 3705 4297 4298 +f 4152 4154 4147 +f 4301 4153 4298 +f 4170 4206 3943 +f 3671 3828 3563 +f 3659 3796 4157 +f 4207 3943 4206 +f 3796 3460 4157 +f 4158 3943 4216 +f 3460 4159 4157 +f 4158 4157 4159 +f 4162 3460 3984 +f 4162 4160 4161 +f 4166 4451 4449 +f 4168 4163 4160 +f 4162 4161 4159 +f 4161 4160 4163 +f 3460 4162 4159 +f 4162 3837 4448 +f 4450 4455 4454 +f 3943 4163 4170 +f 4495 4502 4498 +f 4222 3964 4244 +f 4188 5091 3946 +f 3976 4224 4188 +f 4453 4452 4160 +f 4166 4171 4169 +f 4163 4168 4169 +f 4220 4218 4219 +f 4168 4160 4452 +f 4169 4168 4166 +f 4166 4449 4171 +f 4169 4167 4170 +f 4169 4170 4163 +f 4167 4219 4206 +f 4171 4262 4251 +f 4165 4230 4231 +f 5468 3677 4192 +f 3955 3678 3811 +f 4829 4832 3811 +f 4010 3952 3958 +f 3676 3804 3948 +f 3663 4185 4187 +f 1874 4176 1876 +f 4272 3970 4264 +f 4176 4179 1756 +f 3965 4515 4288 +f 4011 3959 4177 +f 3958 4177 4226 +f 3950 4508 4288 +f 4853 3959 4000 +f 3973 5123 4179 +f 3973 4175 3813 +f 3955 3808 3678 +f 3944 3830 3976 +f 4181 3956 3805 +f 4242 4261 4255 +f 4005 4228 4258 +f 4247 4183 3963 +f 3945 4839 3809 +f 4197 4183 3824 +f 3454 3823 4835 +f 3805 3824 4181 +f 4237 3976 4209 +f 3944 3963 4183 +f 3679 3828 3831 +f 4238 4205 3806 +f 3809 4187 4185 +f 4246 4223 3966 +f 3808 3974 3553 +f 3680 3947 3663 +f 3681 3808 3955 +f 3804 3676 4257 +f 3799 4195 4190 +f 4180 3682 3825 +f 4201 4208 4195 +f 4201 4203 4205 +f 5468 3824 3677 +f 3804 3805 3956 +f 4210 3806 4211 +f 3978 3808 3553 +f 3806 4210 5092 +f 4210 4211 4213 +f 4198 4195 3799 +f 4201 4195 4155 +f 4191 4194 4836 +f 3828 3671 3809 +f 4829 4196 3551 +f 3808 3681 3974 +f 3799 3802 4198 +f 4447 4199 3802 +f 4199 4156 4216 +f 4200 4199 4207 +f 4195 4200 4155 +f 4198 4199 4200 +f 4201 4155 4203 +f 4208 4201 4191 +f 4215 4229 4203 +f 3809 4185 3957 +f 4203 4155 4215 +f 4205 4203 4202 +f 4207 4206 4204 +f 4204 4219 4218 +f 4211 4205 4202 +f 3806 4205 4211 +f 4167 4206 4170 +f 4207 4204 4215 +f 4207 4155 4200 +f 4216 4207 4199 +f 3562 3668 3819 +f 4190 4195 4208 +f 3947 3675 3663 +f 4829 3811 3678 +f 4217 4213 4211 +f 4217 4211 4202 +f 4212 4217 4220 +f 4210 4234 3669 +f 4221 4212 4220 +f 4223 3669 4234 +f 4223 4234 4235 +f 4210 4213 4234 +f 3675 4194 4209 +f 3950 4260 3997 +f 4218 4229 4204 +f 4155 4207 4215 +f 4158 4216 4156 +f 3943 4207 4216 +f 4218 4217 4202 +f 4212 4213 4217 +f 4202 4203 4229 +f 4206 4219 4204 +f 4167 4230 4219 +f 4220 4219 4232 +f 4218 4220 4217 +f 4219 4230 4232 +f 3964 3966 4235 +f 4221 4239 4212 +f 4221 4165 4248 +f 4241 4243 4233 +f 4239 4235 4245 +f 4194 4237 4209 +f 3976 3830 4209 +f 4184 5096 5098 +f 4007 4228 4005 +f 4247 3832 5008 +f 4532 3968 4533 +f 3813 4227 3973 +f 4175 3973 4179 +f 3971 3972 3952 +f 4231 4173 4165 +f 4226 4510 4511 +f 4204 4229 4215 +f 4202 4229 4218 +f 4231 4230 4167 +f 4232 4230 4165 +f 4169 4231 4167 +f 4231 4171 4251 +f 4165 4221 4232 +f 4220 4232 4221 +f 4173 4231 4251 +f 4241 4233 4239 +f 4234 4213 4245 +f 4821 4223 4246 +f 4212 4245 4213 +f 3964 4235 4233 +f 3800 3680 3671 +f 3675 4185 3663 +f 4513 4512 4506 +f 4519 4521 3951 +f 5454 3817 5087 +f 4224 4189 4827 +f 4221 4248 4241 +f 4235 4239 4233 +f 4269 4458 4266 +f 4243 4244 4233 +f 4221 4241 4239 +f 4261 4243 4241 +f 4248 4250 4240 +f 4255 4274 4242 +f 4261 4241 4240 +f 4242 4845 4243 +f 4182 4845 4274 +f 4244 4243 4845 +f 4239 4245 4212 +f 4234 4245 4235 +f 3966 4223 4235 +f 5011 5107 4980 +f 4508 3950 3843 +f 4247 3677 4183 +f 4173 4250 4248 +f 4241 4248 4240 +f 4249 4251 4253 +f 4250 4254 4240 +f 4173 4248 4165 +f 4254 4249 4252 +f 4171 4449 4262 +f 4249 4250 4173 +f 4267 4252 4249 +f 4242 4243 4261 +f 4253 4262 4269 +f 4249 4253 4267 +f 4249 4254 4250 +f 4254 4252 4255 +f 4273 3970 4272 +f 5009 4268 4487 +f 3976 4237 4224 +f 3817 4840 5087 +f 3945 3957 4257 +f 4197 3824 4214 +f 3807 3675 4209 +f 2052 4514 2053 +f 5090 5456 4997 +f 4485 4778 4849 +f 4413 4792 5374 +f 4518 3949 4010 +f 4247 4192 3677 +f 3971 3813 4507 +f 4269 4262 4164 +f 4251 4262 4253 +f 4060 4596 4605 +f 4978 4468 4768 +f 4270 4267 4253 +f 4264 4270 4272 +f 4273 4252 3970 +f 5266 5567 5262 +f 4461 4164 4451 +f 4472 4496 4471 +f 4270 4253 4269 +f 4252 4267 4264 +f 4276 4255 4252 +f 4486 4846 5041 +f 4458 4164 4457 +f 4270 4269 4266 +f 4496 4472 4271 +f 4267 4270 4264 +f 4263 4465 4469 +f 4275 4487 4274 +f 4496 4270 4266 +f 4272 4271 4273 +f 4474 4271 4472 +f 4273 4275 4276 +f 4274 4255 4276 +f 4182 4274 4268 +f 4273 4271 4478 +f 4274 4487 4268 +f 4273 4276 4252 +f 4274 4276 4275 +f 3980 4281 4278 +f 4456 4277 4501 +f 3982 4279 4278 +f 4450 4497 4493 +f 4280 4279 3982 +f 4499 4279 3834 +f 3994 4280 3982 +f 4280 3992 4818 +f 3577 4281 3573 +f 4278 4281 3982 +f 4308 3450 3657 +f 4307 4282 3986 +f 3990 3988 4284 +f 4915 4283 3989 +f 3840 4342 3692 +f 4283 4284 4341 +f 4286 4285 3698 +f 4260 4285 3997 +f 3850 4286 3698 +f 3847 4289 4287 +f 3843 4287 3998 +f 3997 4286 4287 +f 4508 3967 4512 +f 2051 3258 8468 +f 3851 4289 3847 +f 4004 4289 3853 +f 4862 4859 4861 +f 3961 4853 4855 +f 3556 4291 3658 +f 4292 4291 4290 +f 4292 4290 4856 +f 3187 4292 3855 +f 4008 4293 4000 +f 4001 4003 4293 +f 3952 4011 3958 +f 4294 3952 3972 +f 3539 4295 2900 +f 3543 4014 4295 +f 4302 4296 3705 +f 4302 4304 4296 +f 4144 4297 3859 +f 3705 4296 4297 +f 4297 4144 4298 +f 4301 4298 4144 +f 4299 4302 4305 +f 4306 4299 4305 +f 4308 4300 3986 +f 4014 4296 4300 +f 4144 4139 4301 +f 4154 4301 4139 +f 4535 4305 4302 +f 4302 4299 4304 +f 3705 4298 4338 +f 3906 4414 4323 +f 4304 4299 4307 +f 4300 4304 3986 +f 4535 4302 3705 +f 4306 4305 4303 +f 4311 4324 4318 +f 4319 4315 4310 +f 4306 4309 4299 +f 4307 4299 4309 +f 4282 4308 3986 +f 4534 3657 2900 +f 4309 4306 4313 +f 3651 3985 4310 +f 4313 4315 4319 +f 3651 4310 4321 +f 4316 4311 4313 +f 4047 4318 4044 +f 4319 4312 4307 +f 3985 4312 4310 +f 4316 4313 4306 +f 4313 4311 4315 +f 4317 4316 4306 +f 4044 4318 4324 +f 4320 4315 4311 +f 4321 4315 4320 +f 4317 4306 4303 +f 4316 4314 4324 +f 4303 4322 4317 +f 4332 4331 3621 +f 4325 4047 3907 +f 4311 4316 4324 +f 4319 4310 4312 +f 4313 4319 4309 +f 4325 4311 4318 +f 4326 4320 3907 +f 4321 4063 4342 +f 4310 4315 4321 +f 4329 4322 4303 +f 4331 4322 3621 +f 4314 4317 4330 +f 4331 4330 4317 +f 4314 3769 4324 +f 4324 3769 4048 +f 4047 4325 4318 +f 3907 4320 4325 +f 4334 4328 4326 +f 4063 4320 4326 +f 4339 4335 4047 +f 4986 4624 4793 +f 4327 4981 4336 +f 4337 4343 3692 +f 4535 4329 4303 +f 4536 4153 4149 +f 4331 4317 4322 +f 3769 4330 4323 +f 3621 8463 4332 +f 4330 4331 4323 +f 3906 4332 3626 +f 4323 4331 4332 +f 4333 4339 4340 +f 4792 4982 4983 +f 4335 4334 3907 +f 4327 4328 4334 +f 4047 4335 3907 +f 4335 4333 5371 +f 3989 4341 4336 +f 4343 4284 3554 +f 4328 4336 4337 +f 4341 4343 4336 +f 4153 4338 4298 +f 4535 4338 4329 +f 4340 4339 4035 +f 4335 4339 4333 +f 4340 4035 4039 +f 4340 4038 5370 +f 4283 4341 3989 +f 4341 4284 4343 +f 4063 4337 4342 +f 3692 4342 4337 +f 3692 4343 3554 +f 4343 4337 4336 +f 4365 3873 4364 +f 4344 4015 4345 +f 4345 4015 4376 +f 3866 4345 3732 +f 4368 4015 4365 +f 4347 4348 4349 +f 3732 4347 3861 +f 4348 4347 4346 +f 4378 4348 4346 +f 4349 4348 4023 +f 4349 4023 4350 +f 4349 3750 4352 +f 4350 4023 4355 +f 5243 5242 3883 +f 3750 4349 4351 +f 4350 4351 4349 +f 3751 4352 3750 +f 4347 4352 3735 +f 4376 4368 4370 +f 4383 4397 4377 +f 4376 4370 4378 +f 4583 5239 4353 +f 4382 4023 4378 +f 5243 4354 5240 +f 4358 4356 4357 +f 4540 4358 4093 +f 3879 4019 4357 +f 4539 4019 3876 +f 4020 4093 4358 +f 4540 4093 4092 +f 4401 4101 4394 +f 4364 4366 4362 +f 4356 4359 4360 +f 4360 4359 4362 +f 4374 4373 4362 +f 4367 4369 4372 +f 4374 4363 4373 +f 4364 4362 4361 +f 4393 4363 4394 +f 4381 4354 4382 +f 4344 4365 4015 +f 3873 4021 4366 +f 4361 4369 4364 +f 4365 4369 4368 +f 4362 4366 4360 +f 3873 4366 4364 +f 4385 4386 4375 +f 4379 4378 4370 +f 4365 4364 4369 +f 4368 4367 4370 +f 4373 4386 4361 +f 4367 4368 4369 +f 4379 4370 4380 +f 4376 4378 4346 +f 4393 4391 4375 +f 4375 4363 4393 +f 4386 4369 4361 +f 4383 4377 4380 +f 4374 4362 4359 +f 4373 4363 4375 +f 4540 4374 4359 +f 4401 4092 4101 +f 4541 4393 4394 +f 4385 4375 4371 +f 4345 4376 4346 +f 4368 4376 4015 +f 4367 4387 4380 +f 4372 4385 4388 +f 4367 4380 4370 +f 4382 4355 4023 +f 4381 4379 4377 +f 4382 4354 4355 +f 4387 4367 4372 +f 4377 4379 4380 +f 4398 4381 4377 +f 5244 4381 4353 +f 4378 4379 4382 +f 4382 4379 4381 +f 4383 4388 4390 +f 4397 4390 4399 +f 4698 4100 4402 +f 4377 4397 4398 +f 4388 4385 4371 +f 4372 4369 4386 +f 4375 4386 4373 +f 4372 4386 4385 +f 4388 4387 4372 +f 4380 4387 4383 +f 4403 4371 4404 +f 4387 4388 4383 +f 4541 4542 4409 +f 4392 4593 4582 +f 4371 4390 4388 +f 4389 4399 4390 +f 4405 4396 4404 +f 4371 4391 4404 +f 4399 4400 4593 +f 4582 4593 4573 +f 4363 4374 4401 +f 4384 4391 4393 +f 4101 4402 4394 +f 4394 4402 4541 +f 4574 4410 4409 +f 4556 4557 4558 +f 4405 4391 4384 +f 4396 4407 4408 +f 4390 4397 4383 +f 4398 4397 4392 +f 4583 4392 4582 +f 4398 4353 4381 +f 4400 4399 4389 +f 4397 4399 4392 +f 4389 4408 4554 +f 4560 4564 4554 +f 4363 4401 4394 +f 4374 4092 4401 +f 4698 4402 4101 +f 4541 4402 4100 +f 4371 4403 4390 +f 4408 4403 4396 +f 4405 4404 4391 +f 4403 4404 4396 +f 4410 4405 4384 +f 4407 4405 4574 +f 4544 4542 4545 +f 4406 4545 4551 +f 4407 4395 4408 +f 4396 4405 4407 +f 4406 4551 4552 +f 4558 4395 4565 +f 4410 4541 4409 +f 4566 4575 8469 +f 4541 4410 4384 +f 4574 4409 4566 +f 4024 4411 4026 +f 4892 4411 3890 +f 4583 4584 5239 +f 4474 4476 4271 +f 5274 5272 4412 +f 4263 4471 4465 +f 4323 4414 3769 +f 3906 4049 4414 +f 4627 4625 3893 +f 4605 4599 4606 +f 4061 4416 3875 +f 3905 4416 4062 +f 3532 4634 3910 +f 4419 4635 3777 +f 4634 32 4418 +f 4065 4417 4418 +f 4420 4421 2865 +f 4065 4420 4417 +f 4420 4419 4920 +f 4920 3777 4636 +f 4959 4961 8474 +f 4423 4422 2852 +f 3910 4422 3521 +f 3357 4423 2852 +f 2877 4423 3351 +f 4428 4424 2865 +f 4422 4424 4066 +f 2852 4066 4425 +f 4428 4427 4066 +f 4640 4637 4639 +f 4429 4426 4644 +f 4066 4424 4428 +f 4427 4426 4429 +f 4637 2865 4421 +f 4427 4428 4637 +f 4642 4644 4426 +f 4644 4648 4429 +f 4427 4429 4430 +f 3006 4430 4429 +f 4432 4431 3786 +f 4074 4431 4068 +f 3787 4432 3786 +f 4069 4432 3783 +f 4660 4670 4672 +f 4437 4435 4436 +f 4071 4073 4434 +f 4073 4703 4436 +f 4672 4674 4433 +f 4436 4685 4434 +f 4703 4073 3782 +f 4678 4684 4685 +f 4671 4662 4665 +f 4662 4661 4437 +f 4103 4114 5132 +f 4546 4542 4100 +f 4678 4675 4682 +f 4441 4709 4105 +f 4088 4440 4102 +f 4107 4440 4439 +f 4688 4713 4105 +f 4441 4711 4712 +f 4442 4933 4743 +f 4124 4126 4442 +f 4133 4120 4127 +f 4120 4716 4127 +f 4719 4723 4446 +f 4718 5134 4130 +f 4974 4975 4762 +f 4755 4749 4764 +f 4444 4719 4722 +f 4591 4555 4567 +f 4157 4447 3659 +f 4199 4447 4156 +f 4455 4451 4452 +f 4162 4448 4160 +f 4452 4451 4166 +f 4262 4449 4164 +f 4462 4464 4459 +f 4449 4451 4164 +f 4166 4168 4452 +f 4451 4450 4461 +f 4448 4453 4160 +f 4453 4448 3685 +f 4453 3685 4456 +f 4451 4455 4450 +f 4277 4456 3685 +f 4278 4279 4499 +f 4452 4453 4455 +f 4454 4455 4453 +f 4501 4277 4278 +f 4453 4456 4454 +f 4494 4461 4450 +f 4458 4457 4462 +f 4164 4458 4269 +f 4462 4460 4458 +f 4497 4817 4493 +f 4505 4498 4502 +f 4465 4460 4459 +f 4471 4460 4465 +f 4494 4450 4493 +f 4164 4461 4457 +f 4464 4462 4494 +f 4459 4460 4462 +f 5075 4818 4819 +f 4466 4976 4498 +f 4494 4462 4457 +f 4468 4470 4495 +f 4463 4503 4464 +f 4459 4470 4465 +f 4896 4607 4898 +f 4263 4773 4474 +f 5019 4781 5548 +f 4273 4481 4275 +f 4495 4459 4464 +f 4768 4468 4976 +f 4469 4465 4470 +f 4773 4469 4774 +f 4495 4470 4459 +f 4469 4470 4468 +f 4472 4471 4263 +f 4266 4460 4471 +f 4773 4263 4469 +f 4496 4271 4272 +f 4776 4777 4979 +f 4271 4476 4478 +f 4263 4474 4472 +f 4476 4474 4477 +f 4475 4476 4477 +f 4484 4275 4481 +f 4477 4474 4473 +f 4476 4475 4478 +f 4477 4473 4776 +f 4488 4489 4789 +f 4478 4475 4483 +f 4273 4478 4481 +f 5028 5018 5026 +f 4489 4482 4789 +f 4475 4477 4489 +f 4475 4491 4483 +f 4483 4481 4478 +f 4483 4784 4481 +f 4774 4473 4773 +f 4979 4479 4984 +f 4780 4488 8476 +f 4485 4483 4491 +f 4487 5041 5009 +f 4486 5041 4849 +f 5592 5579 5591 +f 4246 3966 5070 +f 4795 5259 4848 +f 5547 5364 5555 +f 4275 4484 4487 +f 4785 5040 4988 +f 4489 4488 4491 +f 5072 5070 5011 +f 4482 4489 4477 +f 4790 5561 4987 +f 5360 4785 4988 +f 5283 5286 4800 +f 4489 4491 4475 +f 4991 5012 4182 +f 4480 4790 4987 +f 5292 4801 4490 +f 4450 4454 4497 +f 4463 4464 4493 +f 4461 4494 4457 +f 4464 4494 4493 +f 5075 4817 4818 +f 4468 4495 4498 +f 4270 4496 4272 +f 4471 4496 4266 +f 4454 4499 4497 +f 4497 4499 4817 +f 4500 4502 4503 +f 5080 4994 4995 +f 4454 4456 4501 +f 4817 4499 3834 +f 4500 5075 4819 +f 5078 5079 5081 +f 4278 4499 4501 +f 4454 4501 4499 +f 4503 4502 4495 +f 4500 4995 4505 +f 4464 4503 4495 +f 4503 4463 5075 +f 4819 5076 5083 +f 5165 4412 5159 +f 4500 4505 4502 +f 4505 4504 5380 +f 4518 4227 3949 +f 3967 4506 4512 +f 1756 1876 4176 +f 3973 2058 5123 +f 4853 4509 3959 +f 4288 4508 3965 +f 5117 4509 3961 +f 3962 5117 5119 +f 4510 4178 4511 +f 4517 4178 4519 +f 4518 4511 4517 +f 4513 4506 2054 +f 4508 4512 3965 +f 4512 4513 3965 +f 2055 4513 2054 +f 2052 2424 4516 +f 3960 2053 4514 +f 3960 4516 4515 +f 4515 4516 8468 +f 4514 4516 3960 +f 4516 2051 8468 +f 4517 3951 4524 +f 4518 4517 3968 +f 4227 4518 3968 +f 4010 4511 4518 +f 5122 4178 5119 +f 3951 4517 4519 +f 5100 4798 5002 +f 5425 4520 5121 +f 4178 4521 4519 +f 5110 5115 5059 +f 4527 3951 4521 +f 5473 5685 5684 +f 5437 5935 5434 +f 4529 4530 3951 +f 4527 4529 3951 +f 4530 4531 4524 +f 4521 5431 4527 +f 4525 5439 5933 +f 5131 4522 4865 +f 4532 2058 3973 +f 5431 4521 4520 +f 5933 4529 4525 +f 5427 5569 5437 +f 5946 5944 5945 +f 4525 4529 4527 +f 4529 4528 4530 +f 4528 5931 5474 +f 4531 4530 4522 +f 5131 4531 4522 +f 4533 4531 4526 +f 3968 4532 3973 +f 5131 4532 4526 +f 4531 4533 4524 +f 4533 4526 4532 +f 4300 4534 4014 +f 3657 4534 4308 +f 4305 4535 4303 +f 4338 4535 3705 +f 4149 4150 4537 +f 4322 4538 3621 +f 8463 4537 3623 +f 4538 4537 3621 +f 4329 4538 4322 +f 4537 4538 4536 +f 4020 4539 4084 +f 4019 4539 4357 +f 4374 4540 4092 +f 4358 4540 4359 +f 4541 4100 4542 +f 4393 4541 4384 +f 4705 4543 4546 +f 4575 4544 4406 +f 4548 4549 4868 +f 4406 4544 4545 +f 4409 4542 4544 +f 4542 4546 4545 +f 4543 4549 4545 +f 4549 4548 4551 +f 4100 4698 4705 +f 4545 4546 4543 +f 4706 4867 4438 +f 4615 4611 4613 +f 4867 4868 4869 +f 4613 4550 4614 +f 4543 4869 4868 +f 4551 4548 4550 +f 4617 4609 4615 +f 8469 4552 4597 +f 4549 4551 4545 +f 4552 4551 4550 +f 4618 4622 4610 +f 4554 4408 4557 +f 4400 4389 4554 +f 4564 4400 4554 +f 4552 4611 4610 +f 4560 4554 4557 +f 4572 4580 4581 +f 4580 4559 4579 +f 4408 4558 4557 +f 4563 4560 4556 +f 4558 4408 4395 +f 4563 4556 4567 +f 4565 4395 4566 +f 4556 4558 4562 +f 4870 4559 4570 +f 4578 4585 4573 +f 4556 4560 4557 +f 4560 4559 4564 +f 4597 4592 4561 +f 4562 4591 4567 +f 4565 4562 4558 +f 4592 4597 4622 +f 4870 4577 4571 +f 4559 4560 4570 +f 4578 4564 4559 +f 4573 4553 4582 +f 4395 4574 4566 +f 4562 4565 4561 +f 4575 4566 4409 +f 4561 4565 4566 +f 4563 4567 4555 +f 4556 4562 4567 +f 4871 5206 5223 +f 5887 5893 5695 +f 4874 5230 4875 +f 5035 5027 4768 +f 4560 4563 4570 +f 4570 4563 4870 +f 4577 4563 4555 +f 4572 4578 4580 +f 4886 4880 5137 +f 4587 4585 4572 +f 4400 4564 4573 +f 4573 4564 4578 +f 4407 4574 4395 +f 4410 4574 4405 +f 4544 4575 4409 +f 4406 4552 8469 +f 4591 4562 4592 +f 4873 4871 5135 +f 4555 4591 4872 +f 4889 4885 5136 +f 4559 4571 5136 +f 4578 4572 4585 +f 4901 4895 4894 +f 4587 4595 4585 +f 4559 4580 4578 +f 4581 4580 4579 +f 4883 4885 5137 +f 4879 4586 4588 +f 4582 4584 4583 +f 4398 4583 4353 +f 4392 4583 4398 +f 4584 4582 4553 +f 4553 4598 4584 +f 4632 4633 4415 +f 4572 4588 4587 +f 4553 4573 4585 +f 4581 4877 4879 +f 4594 4595 4596 +f 4588 4572 4581 +f 4587 4586 4595 +f 4879 4877 4878 +f 4586 4587 4588 +f 4884 4886 5168 +f 4589 4878 4888 +f 4599 4590 4601 +f 4586 4599 4596 +f 4592 4562 4561 +f 4576 5209 4872 +f 4561 8469 4597 +f 4576 4591 4592 +f 4399 4593 4392 +f 4573 4593 4400 +f 4585 4595 4553 +f 4415 4626 4632 +f 4596 4595 4586 +f 4595 4594 4598 +f 4599 4586 4590 +f 4596 4060 4917 +f 4610 4597 4552 +f 4621 4592 4622 +f 4595 4598 4553 +f 4918 4598 4594 +f 4602 4601 4590 +f 4596 4599 4605 +f 4602 4600 4601 +f 4892 3890 4891 +f 4590 4878 4602 +f 4601 4600 4606 +f 5146 5166 4903 +f 5166 4589 4903 +f 4895 4606 4607 +f 4899 4900 4901 +f 4877 4888 4878 +f 5021 5046 5065 +f 4606 4599 4601 +f 4603 4901 4902 +f 4607 4606 4600 +f 4605 4606 4603 +f 4600 4602 5166 +f 4893 5302 4914 +f 5272 5142 5160 +f 4600 4608 4907 +f 4619 4613 4614 +f 4727 4446 4723 +f 4611 4552 4550 +f 4618 4610 4609 +f 4613 4611 4550 +f 4610 4611 4615 +f 4612 4613 4619 +f 4620 4722 4731 +f 4550 4548 4614 +f 4615 4613 4612 +f 4965 4614 4548 +f 4614 4547 4619 +f 4732 4612 4619 +f 4615 4609 4610 +f 5194 4910 5181 +f 4911 5182 5180 +f 4736 4615 4612 +f 4617 4616 5178 +f 5182 5178 5180 +f 4912 4621 4618 +f 4735 4547 4963 +f 4731 4732 4735 +f 4964 5271 4963 +f 4731 4446 4730 +f 5208 5206 5209 +f 4621 4576 4592 +f 4610 4622 4597 +f 4618 4621 4622 +f 4892 4893 4027 +f 5290 5272 5274 +f 4981 4982 4793 +f 5686 5028 5038 +f 4625 4627 4626 +f 4891 4890 4892 +f 4629 3886 3888 +f 4630 4631 4632 +f 3889 4627 3893 +f 3886 4626 4627 +f 5241 3753 5242 +f 4631 4918 4917 +f 3753 4629 3888 +f 4630 4629 4628 +f 4628 4919 4630 +f 3886 4630 4626 +f 4916 4918 4919 +f 4596 4917 4594 +f 4630 4632 4626 +f 4633 4632 4631 +f 4917 4633 4631 +f 4633 4060 4900 +f 32 4634 3532 +f 4417 4634 4418 +f 3645 4956 4957 +f 4419 4065 4635 +f 4659 4654 4652 +f 4639 4637 4421 +f 4427 4637 4426 +f 4639 4924 4646 +f 4647 4654 4655 +f 4921 4639 4421 +f 4637 4640 4426 +f 4640 4646 4643 +f 4643 4649 4653 +f 4426 4640 4642 +f 4640 4643 4642 +f 4639 4646 4640 +f 4642 4641 4644 +f 4638 4649 4643 +f 4641 4642 4643 +f 4645 4644 4641 +f 4644 4645 4648 +f 4658 4645 4641 +f 4067 4645 3911 +f 4639 4921 4924 +f 4638 4643 4646 +f 4649 4654 4647 +f 4662 4437 4665 +f 4650 4648 3919 +f 4651 4648 4650 +f 4667 4654 4638 +f 4649 4647 4653 +f 3920 4650 3919 +f 4650 2861 2859 +f 3006 4651 2853 +f 4429 4648 4651 +f 4660 4652 4666 +f 4433 4659 4660 +f 4656 4653 4647 +f 4658 4653 3911 +f 4638 4654 4649 +f 4654 4659 4655 +f 4661 4655 4433 +f 4655 4661 4662 +f 4662 4647 4655 +f 3913 3921 4657 +f 4653 4657 3911 +f 3913 4657 4656 +f 4645 4658 3911 +f 4643 4658 4641 +f 4660 4659 4652 +f 4433 4655 4659 +f 4667 4663 4666 +f 4697 4694 4692 +f 4674 4661 4433 +f 4437 4661 4435 +f 4437 4703 4665 +f 4656 4647 4662 +f 4922 4923 4924 +f 4665 4703 3782 +f 4660 4666 4669 +f 4677 4688 4687 +f 4665 4925 4671 +f 4656 4671 3913 +f 4667 4666 4652 +f 4669 4663 4668 +f 4654 4667 4652 +f 4667 4638 4923 +f 4695 4696 4689 +f 4660 4669 4670 +f 4663 4669 4666 +f 4669 4668 4926 +f 4693 4696 4695 +f 4660 4672 4433 +f 4662 4671 4656 +f 4665 3782 4925 +f 4673 4670 4694 +f 4672 4670 4673 +f 4675 4676 4677 +f 4674 4435 4661 +f 4672 4673 4674 +f 4673 4664 4676 +f 4680 4686 4687 +f 4674 4678 4435 +f 4677 4676 4664 +f 4674 4676 4675 +f 4677 4664 4681 +f 4709 4680 4687 +f 4686 4682 4675 +f 4685 4436 4435 +f 4704 4698 4101 +f 4928 4691 4690 +f 4439 4708 4683 +f 4675 4677 4686 +f 4670 4926 4694 +f 4687 4688 4105 +f 4683 4682 4680 +f 4684 4682 4683 +f 4439 4683 4680 +f 4683 4085 4090 +f 4070 4434 4685 +f 4678 4682 4684 +f 4678 4685 4435 +f 4070 4685 4684 +f 4687 4686 4677 +f 4682 4686 4680 +f 4688 4677 4681 +f 4687 4105 4709 +f 4681 4690 4688 +f 4691 4714 4690 +f 4696 4693 4697 +f 4691 4928 4930 +f 4695 4681 4693 +f 4690 4681 4695 +f 4695 4928 4690 +f 4714 4962 4713 +f 4693 4681 4664 +f 8470 4929 8471 +f 4694 4693 4664 +f 4943 4953 4702 +f 4673 4694 4664 +f 4926 4692 4694 +f 4700 4696 4692 +f 4695 4689 4928 +f 4700 4946 4696 +f 4694 4697 4693 +f 4692 4696 4697 +f 4948 4692 4668 +f 4944 4946 4953 +f 8472 4944 4679 +f 4689 4696 4701 +f 4947 4700 4948 +f 4436 4703 4437 +f 4961 4959 4922 +f 4701 4699 8471 +f 4668 4955 4948 +f 4098 4704 4101 +f 4705 4698 4438 +f 4701 4696 4946 +f 4705 4438 4869 +f 4707 4095 4106 +f 4100 4705 4546 +f 4103 5132 4867 +f 4707 4706 4438 +f 4698 4707 4438 +f 4707 4704 4095 +f 4683 4708 4085 +f 4440 4708 4439 +f 4107 4439 4709 +f 4680 4709 4439 +f 4118 4710 4111 +f 4107 4441 4710 +f 4712 4711 4119 +f 4105 4713 4441 +f 4128 4712 4119 +f 4712 4111 4710 +f 4688 4714 4713 +f 4691 4123 4962 +f 4690 4714 4688 +f 4962 4714 4691 +f 4930 4931 4933 +f 4963 4620 4735 +f 4720 4130 4133 +f 4116 4715 4716 +f 4717 4129 4733 +f 4719 4718 4131 +f 5271 5134 4444 +f 4724 4723 4719 +f 4719 4446 4722 +f 4720 4127 4132 +f 4130 4720 4717 +f 5246 4721 4737 +f 4727 4730 4446 +f 4731 4722 4446 +f 4722 4620 4963 +f 4724 4719 4131 +f 4721 5246 4727 +f 4733 4131 4717 +f 4757 4733 4754 +f 4728 4737 4721 +f 4738 4752 4739 +f 4753 4759 4745 +f 4744 4737 4740 +f 4721 4727 4723 +f 4725 5327 4730 +f 4733 4728 4724 +f 4728 4740 4737 +f 5324 5327 5328 +f 4617 4615 4736 +f 4725 4730 4727 +f 4730 4729 4731 +f 4732 4738 4736 +f 4732 4619 4735 +f 4729 4738 4731 +f 4612 4732 4736 +f 4733 4724 4131 +f 4733 4129 4754 +f 4744 4741 5252 +f 5326 5337 5332 +f 4547 4735 4619 +f 4731 4735 4620 +f 4732 4731 4738 +f 4617 4736 4739 +f 4740 4728 4726 +f 4737 4734 5247 +f 4751 4738 4729 +f 4617 4739 4616 +f 4736 4738 4739 +f 4752 4738 4751 +f 4742 4740 4726 +f 4740 4742 4744 +f 4741 4742 4745 +f 5544 5357 5737 +f 4759 4968 4749 +f 4744 4742 4741 +f 4761 4715 4760 +f 4772 4755 4756 +f 5923 5249 4747 +f 4737 4744 4734 +f 4753 4742 4726 +f 4971 4970 4763 +f 5357 5249 5923 +f 5342 5248 5341 +f 5252 5542 4747 +f 5249 5522 5912 +f 4725 4727 5246 +f 5210 5207 5177 +f 4749 4754 4758 +f 4445 4931 4935 +f 4766 4759 4749 +f 4771 4741 4745 +f 5324 5323 5325 +f 4752 4751 4748 +f 4752 4748 5184 +f 4739 4752 4616 +f 4742 4753 4745 +f 4968 4726 4754 +f 4757 4726 4728 +f 4758 4754 4129 +f 4756 4760 4750 +f 4442 4743 4124 +f 4750 4760 4715 +f 4760 4756 4755 +f 4733 4757 4728 +f 4754 4726 4757 +f 4720 4758 4129 +f 4761 4764 4132 +f 4760 4755 4764 +f 4975 4766 4767 +f 4766 4749 4755 +f 4445 4750 4743 +f 4716 4761 4132 +f 4936 4445 4935 +f 4132 4764 4758 +f 4124 4743 4715 +f 4764 4749 4758 +f 5737 5911 5251 +f 4760 4764 4761 +f 4936 4756 4750 +f 4940 4941 4772 +f 4767 4755 4772 +f 4766 4755 4767 +f 4765 4941 4940 +f 4774 4469 4467 +f 4443 4763 4970 +f 4770 4973 4766 +f 4770 4974 4769 +f 5026 5018 5023 +f 4768 5027 4978 +f 4771 4745 4971 +f 4759 4766 4973 +f 5357 5544 5522 +f 4756 4936 4940 +f 4940 4937 4765 +f 4774 4467 4777 +f 4474 4773 4473 +f 4477 4776 4482 +f 5025 5035 5037 +f 5150 4908 5147 +f 4473 4774 4776 +f 4776 4774 4777 +f 4777 4467 5023 +f 4777 4775 4979 +f 5741 5739 5019 +f 4486 4265 5368 +f 4485 4784 4483 +f 4786 4504 4995 +f 5079 4788 5073 +f 4182 4268 4991 +f 8476 5031 4780 +f 4480 4993 5562 +f 5084 4825 4840 +f 4791 8476 4984 +f 5259 4992 4848 +f 4492 4779 5013 +f 4485 4785 4778 +f 4988 5040 4488 +f 5361 4780 5031 +f 4484 4849 5041 +f 5480 4994 5071 +f 4778 4265 4486 +f 5594 5608 5619 +f 5064 4986 4413 +f 4222 5011 5070 +f 4982 4792 4793 +f 5458 5462 4812 +f 4980 4259 5011 +f 5259 4850 4980 +f 5591 4795 5592 +f 5072 4997 4779 +f 4259 5072 5011 +f 5000 5442 5059 +f 4500 5080 4995 +f 4844 5253 4834 +f 4480 4991 4993 +f 5068 4810 4990 +f 4996 5381 4490 +f 5549 5364 5548 +f 4624 4915 4796 +f 5277 5274 5275 +f 5097 4798 5099 +f 4038 4983 5370 +f 5042 5051 5034 +f 5373 4034 5282 +f 5002 4810 5100 +f 5015 5017 5055 +f 5448 5106 5447 +f 5073 5064 4996 +f 4336 4981 3989 +f 4327 5371 4981 +f 4490 5381 5287 +f 5074 5051 5044 +f 5057 5006 4803 +f 5059 4807 5000 +f 5056 4814 4802 +f 5002 5097 5061 +f 4786 4994 5480 +f 4831 4844 4832 +f 3989 4796 4915 +f 5443 4833 5444 +f 5006 5103 4808 +f 8546 5002 5061 +f 5446 5445 5449 +f 5458 5005 5454 +f 5033 5056 5016 +f 5055 4172 4822 +f 4811 5051 5042 +f 5565 4806 5254 +f 4808 5008 5085 +f 5002 4798 5097 +f 5420 5402 5401 +f 5006 5066 4803 +f 5016 4816 3683 +f 5012 4991 4480 +f 5046 5045 5065 +f 5055 4822 5015 +f 5007 4809 5021 +f 5426 5430 5431 +f 5044 5261 5074 +f 5058 5014 5007 +f 4172 4813 5067 +f 4818 4817 3834 +f 4493 4817 4463 +f 4280 4818 3834 +f 4818 3992 4819 +f 5076 3992 3993 +f 3992 5076 4819 +f 5079 5078 3995 +f 5079 4624 4788 +f 4823 4824 4825 +f 5457 4840 5013 +f 5070 5072 4492 +f 5455 5570 5456 +f 5084 5086 4823 +f 4174 3946 5091 +f 4825 4821 4246 +f 4826 4824 4823 +f 4821 4825 4824 +f 4222 5268 5011 +f 5086 5089 4823 +f 4224 4827 4188 +f 4189 3806 5092 +f 4824 4828 3669 +f 4826 4827 4828 +f 4828 4827 5092 +f 3551 4830 4829 +f 4831 4830 4193 +f 4838 3551 4186 +f 4831 4193 5093 +f 3948 5452 4998 +f 4998 4844 4831 +f 4830 4832 4829 +f 5253 5094 5444 +f 5261 5050 5020 +f 4794 5443 4806 +f 4834 5253 4989 +f 4834 4989 5102 +f 3818 4835 3814 +f 3454 4835 4180 +f 4191 4836 4208 +f 3675 4836 4194 +f 3676 4193 4837 +f 4838 4837 4193 +f 4830 4838 4193 +f 4839 4186 3831 +f 3945 4837 4839 +f 4838 4839 4837 +f 3832 4174 5085 +f 4779 4997 5456 +f 5017 4803 5066 +f 5103 5006 5465 +f 4813 5055 4802 +f 5253 4833 4989 +f 5748 5467 5047 +f 5386 4804 5068 +f 5058 5017 5015 +f 5017 5058 5043 +f 4274 4845 4242 +f 5108 4845 4182 +f 4987 4992 5012 +f 5094 5253 4998 +f 4784 4485 4849 +f 4980 5107 4992 +f 5555 4791 5547 +f 5602 4783 5367 +f 4244 5268 4222 +f 4484 4784 4849 +f 5561 5546 8483 +f 8476 4488 4789 +f 5012 4480 4987 +f 4846 4993 5009 +f 4246 5070 4492 +f 4987 4848 4992 +f 4000 4293 4854 +f 4855 3829 4857 +f 4003 4856 4854 +f 3452 3829 4859 +f 4853 4854 4855 +f 4860 4854 4290 +f 4856 4003 4009 +f 4290 4854 4856 +f 4858 4857 3829 +f 3961 4855 4857 +f 5109 4858 3829 +f 5119 4178 4510 +f 4855 4860 4859 +f 4860 4861 4859 +f 4854 4860 4855 +f 4861 4860 4290 +f 4291 4861 4290 +f 4861 3556 4862 +f 4862 3556 3821 +f 4859 4862 3452 +f 4532 5131 2058 +f 4863 5269 5124 +f 5123 4864 4179 +f 5124 4864 4863 +f 5469 5475 5470 +f 5130 5269 5129 +f 5133 5132 4114 +f 4966 4965 4548 +f 4103 4867 4706 +f 4966 4964 4965 +f 4543 4868 4549 +f 4966 4867 4866 +f 4705 4869 4543 +f 4867 4869 4438 +f 4870 4571 4559 +f 4563 4577 4870 +f 5208 5204 5206 +f 5194 5198 4910 +f 4576 4872 4591 +f 4873 4872 4871 +f 4871 4874 5135 +f 4555 4873 4577 +f 4912 4568 4621 +f 5200 5204 4568 +f 4571 4577 4875 +f 4577 4873 5135 +f 5173 5174 5172 +f 5175 5321 5318 +f 4882 4877 4581 +f 4884 4877 4882 +f 4602 4878 4589 +f 4879 4878 4590 +f 4586 4879 4590 +f 4581 4879 4588 +f 4883 4882 4581 +f 4579 4885 4883 +f 4881 5167 4906 +f 4903 5318 5146 +f 4883 4581 4579 +f 4884 4882 4880 +f 4885 4579 5136 +f 4880 4882 4883 +f 4886 4884 4880 +f 4884 4881 4888 +f 4889 4571 4875 +f 4886 4887 4876 +f 4886 5137 4887 +f 4876 5167 5168 +f 5139 4885 4889 +f 5140 5141 5139 +f 4884 4888 4877 +f 4904 4888 4881 +f 4875 4569 4889 +f 5139 4889 4569 +f 3890 4625 4891 +f 5143 4893 4890 +f 4625 4415 4891 +f 4603 4895 4901 +f 4892 4890 4893 +f 4892 4027 4411 +f 4896 4890 4894 +f 5302 5142 5272 +f 4890 4891 4894 +f 4899 4894 4891 +f 4606 4895 4603 +f 4896 4895 4607 +f 4909 5176 4907 +f 4896 4898 5143 +f 5144 5176 4897 +f 5257 5505 5797 +f 4907 4607 4600 +f 5144 5143 4898 +f 4891 4415 4899 +f 4415 4633 4900 +f 4060 4605 4902 +f 4415 4900 4899 +f 4899 4901 4894 +f 4902 4900 4060 +f 4603 4902 4605 +f 4900 4902 4901 +f 4904 4589 4888 +f 5511 5318 4903 +f 4881 4906 5511 +f 4589 4904 4903 +f 5141 4887 5139 +f 5565 4797 4806 +f 4881 5168 5167 +f 5170 5319 4906 +f 4907 4608 4909 +f 4898 4607 4907 +f 5147 4608 5146 +f 4909 5147 4908 +f 5147 4909 4608 +f 4909 4908 5176 +f 5181 5183 5179 +f 5352 5140 4569 +f 4609 4913 4618 +f 5198 5200 5202 +f 4913 4912 4618 +f 5200 4912 4911 +f 5182 4609 4617 +f 4912 4913 4911 +f 4893 4914 4027 +f 4623 5290 5281 +f 3989 4981 4796 +f 5079 4915 4624 +f 4594 4917 4918 +f 5356 5240 5244 +f 4633 4917 4060 +f 4631 4919 4918 +f 5239 4918 4916 +f 4918 4584 4598 +f 4630 4919 4631 +f 4919 4628 5356 +f 3777 4920 4419 +f 4921 4920 4636 +f 4920 4921 4421 +f 4921 4636 4961 +f 4957 4958 3645 +f 4663 4667 4923 +f 4924 4638 4646 +f 4923 4922 5245 +f 4922 4924 4921 +f 4924 4923 4638 +f 3912 4925 3782 +f 3913 4925 3914 +f 4669 4926 4670 +f 4668 4692 4926 +f 4930 4929 4927 +f 4931 4934 4935 +f 4929 4928 4689 +f 4928 4929 4930 +f 8471 4689 4701 +f 4932 4950 8473 +f 4931 4930 4927 +f 4123 4691 4930 +f 4934 4931 4927 +f 4933 4931 4445 +f 4679 4945 8472 +f 4762 4941 4765 +f 4933 4445 4743 +f 4930 4933 4123 +f 4699 4944 8472 +f 4934 4927 4950 +f 4772 4756 4940 +f 4936 4750 4445 +f 4950 4932 4951 +f 4942 4935 4938 +f 4940 4942 4937 +f 4934 4950 4954 +f 4942 4939 4937 +f 4942 4940 4936 +f 4938 2824 4939 +f 4975 4941 4762 +f 4772 4941 4767 +f 4935 4942 4936 +f 4939 4942 4938 +f 4946 4947 4953 +f 4943 4679 4944 +f 4935 4934 4954 +f 4946 4944 4699 +f 2824 4954 4951 +f 4927 4929 8470 +f 4701 4946 4699 +f 4947 4946 4700 +f 4700 4692 4948 +f 3645 4702 4949 +f 4955 4663 4952 +f 4956 4948 4955 +f 4702 4947 4949 +f 4948 4949 4947 +f 4954 4938 4935 +f 4950 4951 4954 +f 2824 4938 4954 +f 3777 4958 8474 +f 4949 4956 3645 +f 4702 4953 4947 +f 4944 4953 4943 +f 4663 4955 4668 +f 4956 4955 4952 +f 4948 4956 4949 +f 4960 5245 4959 +f 4952 4960 4956 +f 4958 4957 4959 +f 4957 4956 4960 +f 4960 4959 4957 +f 4952 4663 4960 +f 5245 4960 4663 +f 4921 4961 4922 +f 4636 3777 8474 +f 4442 4962 4123 +f 4711 4962 4126 +f 4964 4963 4547 +f 4722 4963 4444 +f 4965 4964 4547 +f 4866 5133 5271 +f 4614 4965 4547 +f 4966 4548 4868 +f 4867 4966 4868 +f 4964 4966 4866 +f 5342 4734 5522 +f 5324 5325 4748 +f 4726 4968 4753 +f 4749 4968 4754 +f 5701 6268 6266 +f 4969 5923 5543 +f 4771 4971 4763 +f 4769 4443 4970 +f 4973 4745 4759 +f 4971 4973 4972 +f 4769 4970 4972 +f 4971 4972 4970 +f 4972 4973 4770 +f 4745 4973 4971 +f 4974 4770 4975 +f 4975 4767 4941 +f 4766 4975 4770 +f 4498 4976 4468 +f 5035 4976 4466 +f 5152 4897 5176 +f 4038 5372 4983 +f 4467 4469 4978 +f 4468 4978 4469 +f 4776 4979 4482 +f 5010 4979 4775 +f 5600 5601 5586 +f 4787 5580 5581 +f 4479 5010 5365 +f 5293 5164 5294 +f 5102 4989 5095 +f 5416 5745 5568 +f 4983 5373 5374 +f 4996 4801 5073 +f 4485 5040 4785 +f 4850 4259 4980 +f 4982 5370 4983 +f 5069 5006 4808 +f 4796 4981 4793 +f 5090 5605 5456 +f 4979 5010 4479 +f 5040 4485 4491 +f 5283 5279 5479 +f 4482 4984 4789 +f 4624 4796 4793 +f 4797 5068 4990 +f 4794 4806 5061 +f 5412 4807 5385 +f 4988 4488 4780 +f 5590 5463 5455 +f 5548 5365 5030 +f 5360 5362 5039 +f 4979 4984 4482 +f 5362 5582 5578 +f 5073 5071 4820 +f 4505 4995 4504 +f 3811 4844 4834 +f 5101 5099 4798 +f 5370 5371 4333 +f 5453 5089 5086 +f 4848 4987 5561 +f 4259 4850 5593 +f 4807 5059 4999 +f 4794 4989 4833 +f 5379 4413 5375 +f 5065 5054 5044 +f 3948 4998 4831 +f 5056 4812 4814 +f 5115 5101 4999 +f 4804 4810 5068 +f 5402 5407 5388 +f 4840 5105 5084 +f 5088 5105 4842 +f 5055 5017 4816 +f 5008 4808 5103 +f 4172 5055 4813 +f 5464 5062 5466 +f 5066 5004 3683 +f 5066 4816 5017 +f 5016 5056 4802 +f 5055 4816 4802 +f 5007 5021 4799 +f 4799 5065 5051 +f 5097 5382 5061 +f 4991 4268 5009 +f 4993 4991 5009 +f 4775 5022 5010 +f 4182 5012 5108 +f 5369 5562 4846 +f 4997 4259 5090 +f 4265 5360 5039 +f 5788 5494 5491 +f 5066 3683 4816 +f 5085 5069 4808 +f 4905 5170 5173 +f 5265 5264 5060 +f 5465 5260 5062 +f 5043 5058 4811 +f 5005 5033 4842 +f 5065 5044 5051 +f 4841 5016 3683 +f 5043 4811 5042 +f 4775 5023 5022 +f 5257 5797 6004 +f 5024 5010 5022 +f 5024 5018 5255 +f 5265 5422 5419 +f 5049 5262 5063 +f 5017 5043 4803 +f 5044 5063 5261 +f 4775 4777 5023 +f 5024 5022 5018 +f 4467 4978 5027 +f 5018 5022 5023 +f 5018 5028 5255 +f 5024 5019 5030 +f 5026 5027 5025 +f 4504 4786 5380 +f 5027 5026 5023 +f 5028 5026 5025 +f 4467 5027 5023 +f 4976 5035 4768 +f 5038 5025 5037 +f 5028 4977 5255 +f 5553 5366 5550 +f 4778 4785 5360 +f 5024 5030 5010 +f 5041 4487 4484 +f 5306 5310 5312 +f 4846 4486 5368 +f 5020 5747 5047 +f 5566 5567 5568 +f 5576 5003 5577 +f 5033 5005 5458 +f 5054 4815 5049 +f 5413 5399 5263 +f 5563 5037 5035 +f 5025 5027 5035 +f 4995 4994 4786 +f 5064 4788 4986 +f 5563 5035 4466 +f 5036 5301 5037 +f 5081 5073 4820 +f 5152 5156 4897 +f 4491 4488 5040 +f 4846 5562 4993 +f 5151 5321 5520 +f 4797 4985 5068 +f 5041 4846 5009 +f 4481 4784 4484 +f 5046 4815 5045 +f 5034 5260 5057 +f 5007 4811 5058 +f 5007 4799 4811 +f 4236 5049 4815 +f 4192 4247 5464 +f 5053 5260 5074 +f 5065 5045 5054 +f 5021 4809 5046 +f 5033 5458 4812 +f 5319 5170 4905 +f 4236 5060 5264 +f 5261 5063 5050 +f 5049 5048 5262 +f 4815 5054 5045 +f 5401 5384 5400 +f 5261 5053 5074 +f 5748 5267 4225 +f 5466 4192 5464 +f 5048 5049 4236 +f 5262 5050 5063 +f 5263 5568 5265 +f 5259 4980 4992 +f 5108 5012 4992 +f 5042 5034 5057 +f 5043 5042 5057 +f 4822 4809 5014 +f 4803 5043 5057 +f 4841 5033 5016 +f 5575 5576 5577 +f 5058 5015 5014 +f 5383 4999 5100 +f 5566 5745 5746 +f 5053 5020 5047 +f 5073 4788 5064 +f 5061 4806 4990 +f 5065 4799 5021 +f 5108 5268 4244 +f 8546 4810 5002 +f 5265 5266 5048 +f 5062 5260 5053 +f 4814 5067 4813 +f 5020 5050 5032 +f 5394 5384 5398 +f 5013 4840 4825 +f 4820 5071 4994 +f 5063 5054 5049 +f 5015 4822 5014 +f 4799 5051 4811 +f 4801 5292 5071 +f 5053 5261 5020 +f 4814 4813 4802 +f 4797 5565 4985 +f 4794 4833 5443 +f 4998 5253 4844 +f 4848 5561 5637 +f 4246 4492 4825 +f 4492 5072 4779 +f 5380 4786 4805 +f 5380 4805 5036 +f 5039 5362 5578 +f 5362 5580 5582 +f 4801 5071 5073 +f 4479 5547 4984 +f 5262 5567 5050 +f 5467 4192 5466 +f 4503 5075 4500 +f 5075 4463 4817 +f 3693 5077 5076 +f 5082 5083 5077 +f 5078 5077 3693 +f 5081 5082 5077 +f 3996 5078 3693 +f 4915 5079 3995 +f 4788 4624 4986 +f 5081 4820 5082 +f 5082 4994 5080 +f 5083 4500 4819 +f 5078 5081 5077 +f 5073 5081 5079 +f 4994 5082 4820 +f 5082 5080 5083 +f 5083 5076 5077 +f 4500 5083 5080 +f 4492 5013 4825 +f 4823 4825 5084 +f 5104 5458 5454 +f 4842 5105 3817 +f 5088 5086 5105 +f 4842 5033 4841 +f 4841 5004 5088 +f 5453 5088 5069 +f 4802 4816 5016 +f 3832 5085 5008 +f 5091 5089 4174 +f 4823 5089 4826 +f 4997 5072 4259 +f 5033 4812 5056 +f 4827 5091 4188 +f 5089 5091 4826 +f 4828 5092 4210 +f 4189 5092 4827 +f 3676 5093 4193 +f 3948 4831 5093 +f 5447 5106 5451 +f 5383 5100 4804 +f 4794 5095 4989 +f 3825 5096 4184 +f 4256 5096 3825 +f 5098 5096 5382 +f 5385 4807 5383 +f 4858 5109 5111 +f 5382 5096 5095 +f 5099 5098 5097 +f 4804 5100 4810 +f 5099 3810 3454 +f 4794 5061 5382 +f 5000 5425 5442 +f 5115 5110 5112 +f 5114 5112 3826 +f 3955 5102 4256 +f 3811 4834 5102 +f 5454 5570 5104 +f 4841 5088 4842 +f 5004 5066 5069 +f 5006 5069 5066 +f 3683 5004 4841 +f 5069 5088 5004 +f 5260 5034 5074 +f 5447 5451 5445 +f 5361 5359 5360 +f 5107 5108 4992 +f 5561 4790 5546 +f 5108 5107 5268 +f 3829 3826 5109 +f 5112 5110 5111 +f 4999 5059 5115 +f 5120 5111 5110 +f 5112 5109 3826 +f 5120 5110 5113 +f 3827 5116 3826 +f 5112 5114 5115 +f 5425 5113 5442 +f 5118 5117 4858 +f 3810 5101 5114 +f 5115 5114 5101 +f 5101 4798 5100 +f 5100 4999 5101 +f 3823 5116 3827 +f 3810 5114 5116 +f 3961 4858 5117 +f 5120 4858 5111 +f 5121 5118 5120 +f 4520 4521 5122 +f 3962 5119 4510 +f 5121 5122 5118 +f 5121 5120 5113 +f 4858 5120 5118 +f 5425 5121 5113 +f 5121 4520 5122 +f 4178 5122 4521 +f 5122 5119 5118 +f 5129 5123 2058 +f 4864 5123 4863 +f 1870 1985 5125 +f 4864 5124 1871 +f 1982 5127 5126 +f 5124 5125 8413 +f 5128 5126 1719 +f 8414 1712 8411 +f 1984 5127 1982 +f 1719 5126 5127 +f 1294 5128 1719 +f 1716 5128 1717 +f 5131 5129 2058 +f 4865 5470 5129 +f 5469 5471 5682 +f 8475 1376 1983 +f 5131 4526 4531 +f 5129 5131 4865 +f 5133 4114 4113 +f 4867 5132 4866 +f 5134 5133 4113 +f 5133 5134 5271 +f 4130 5134 4113 +f 4444 5134 4718 +f 4874 4875 5135 +f 4577 5135 4875 +f 4559 5136 4579 +f 4889 5136 4571 +f 4883 5137 4880 +f 4885 4887 5137 +f 5215 5203 5210 +f 5265 5048 5264 +f 5140 5139 4569 +f 4885 5139 4887 +f 5225 4874 5224 +f 5138 5875 5871 +f 5872 5140 5138 +f 4887 5141 5874 +f 4893 5143 5145 +f 5158 5144 4897 +f 4896 5143 4890 +f 5176 5144 4898 +f 4897 5156 5158 +f 5145 5144 5158 +f 5145 5142 5302 +f 5143 5144 5145 +f 5146 4604 5147 +f 5166 5146 4608 +f 5151 5149 5150 +f 5147 5151 5150 +f 4604 5321 5151 +f 5173 5172 5516 +f 5155 5157 5304 +f 5150 5152 4908 +f 5151 5147 4604 +f 5150 5149 5152 +f 5318 4604 5146 +f 5303 5151 5520 +f 5157 5152 5149 +f 5154 5156 5155 +f 4801 4996 4490 +f 5165 5159 5162 +f 5160 5159 4412 +f 4412 5272 5160 +f 5304 5157 5149 +f 5155 5153 5163 +f 5156 5152 5157 +f 5156 5154 5158 +f 5304 5149 5303 +f 5156 5157 5155 +f 5158 5154 5159 +f 5158 5142 5145 +f 5162 5163 5161 +f 5159 5154 5162 +f 5142 5158 5160 +f 5159 5160 5158 +f 5487 5288 5294 +f 5298 5481 5297 +f 5163 5162 5154 +f 5161 5294 5165 +f 5155 5163 5154 +f 5163 5153 5488 +f 5283 4800 5378 +f 5377 5375 5273 +f 5161 5165 5162 +f 5165 5164 5275 +f 4600 5166 4608 +f 4589 5166 4602 +f 5874 5872 5873 +f 4906 5167 5170 +f 4884 5168 4881 +f 4876 5168 4886 +f 5221 5214 5217 +f 4990 4806 4797 +f 5171 5170 5167 +f 5169 5174 5171 +f 5167 4876 5171 +f 5873 5872 5871 +f 6032 5509 5691 +f 5007 5014 4809 +f 5174 5170 5171 +f 5516 5515 4905 +f 5174 5169 5690 +f 5170 5174 5173 +f 5515 5518 5514 +f 5318 5321 4604 +f 5176 4898 4907 +f 5152 5176 4908 +f 5181 4910 5178 +f 5231 5212 5216 +f 5183 5181 5178 +f 5180 5178 4910 +f 5187 5183 5184 +f 5188 5195 5201 +f 5202 5180 4910 +f 5182 4911 4913 +f 5183 5178 4616 +f 5195 5194 5181 +f 4609 5182 4913 +f 5178 5182 4617 +f 5184 4616 4752 +f 5183 4616 5184 +f 5186 5184 4748 +f 5184 5186 5187 +f 5324 5328 5323 +f 5190 5344 5346 +f 5324 4748 4751 +f 5183 5187 5179 +f 5189 5186 5332 +f 5189 5187 5186 +f 5192 5191 5193 +f 5179 5187 5193 +f 5189 5185 5192 +f 5187 5189 5193 +f 5337 5185 5332 +f 5211 5188 5214 +f 5535 5349 5199 +f 5194 5195 5188 +f 5337 5339 5185 +f 5348 5192 5190 +f 5192 5193 5189 +f 5193 5191 5197 +f 5195 5181 5179 +f 5213 5198 5194 +f 5179 5197 5195 +f 5536 5191 5535 +f 5204 5203 5206 +f 5200 4911 5202 +f 5193 5197 5179 +f 5535 5348 5349 +f 5213 5194 5188 +f 5198 5196 5200 +f 5718 5537 5719 +f 5353 5354 5138 +f 5205 5204 5200 +f 4912 5200 4568 +f 5536 5195 5197 +f 5211 5214 5222 +f 5180 5202 4911 +f 5198 5202 4910 +f 5205 5207 5210 +f 5215 5210 5216 +f 5205 5200 5196 +f 5223 5203 5215 +f 5205 5196 5207 +f 5203 5204 5205 +f 5209 4871 4872 +f 4576 4621 5208 +f 5196 5198 5213 +f 5207 5196 5211 +f 4621 4568 5208 +f 5204 5208 4568 +f 5208 5209 4576 +f 4871 5209 5206 +f 5210 5177 5216 +f 5205 5210 5203 +f 5201 5214 5188 +f 5201 5199 5217 +f 5355 5227 5232 +f 5352 5230 5225 +f 5188 5211 5213 +f 5196 5213 5211 +f 5217 5214 5201 +f 5221 5222 5214 +f 5215 5225 5224 +f 5224 4871 5223 +f 5177 5234 5231 +f 5215 5216 5212 +f 5220 5217 5199 +f 5219 5221 5220 +f 5199 5201 5535 +f 6073 6068 6076 +f 5226 5231 5234 +f 5177 5207 5227 +f 5703 5718 5349 +f 5350 5220 5218 +f 5220 5221 5217 +f 5221 5219 5222 +f 5222 5232 5227 +f 5211 5222 5227 +f 5203 5223 5206 +f 5224 5223 5215 +f 5225 5215 5212 +f 4871 5224 4874 +f 5225 5212 5233 +f 4875 5230 4569 +f 5234 5238 5226 +f 5233 5237 5229 +f 5211 5227 5207 +f 5222 5219 5232 +f 5351 5219 5350 +f 5228 5232 5351 +f 5212 5231 5237 +f 5138 5140 5353 +f 4874 5225 5230 +f 5225 5233 5352 +f 5177 5231 5216 +f 5237 5231 5880 +f 5351 5232 5219 +f 5232 5228 5355 +f 5233 5212 5237 +f 5233 5229 5352 +f 5355 5177 5227 +f 5355 5236 5238 +f 5881 6243 6242 +f 5353 5229 5541 +f 5391 5392 5388 +f 5235 5879 5878 +f 5880 5231 5226 +f 5235 5541 5237 +f 5238 5234 5355 +f 5236 6242 6243 +f 4918 5239 4584 +f 5244 5239 4916 +f 4628 4629 5241 +f 5243 4355 4354 +f 4629 3753 5241 +f 5242 3753 3883 +f 5243 3883 4350 +f 5240 5241 5242 +f 4355 5243 4350 +f 5240 5242 5243 +f 5239 5244 4353 +f 5244 4916 5356 +f 4923 5245 4663 +f 4959 5245 4922 +f 5247 5246 4737 +f 5246 4967 5329 +f 5342 5247 4734 +f 5246 5247 4967 +f 4744 5912 4734 +f 5185 5339 5192 +f 5927 5925 4746 +f 5929 6291 5927 +f 4741 5542 5252 +f 5926 4443 5924 +f 5923 5928 5927 +f 5543 6269 6289 +f 5248 5251 5909 +f 4763 5542 4771 +f 5669 5676 5964 +f 5741 5743 5930 +f 5354 5877 5875 +f 5053 5047 5466 +f 5255 4977 5258 +f 5255 5744 5024 +f 5687 5686 5038 +f 5306 5153 5155 +f 5291 5687 5299 +f 4849 4778 4486 +f 4977 5686 5485 +f 5742 5258 5257 +f 5360 4265 4778 +f 4852 5618 5637 +f 5048 4236 5264 +f 5032 5749 5747 +f 5044 5054 5063 +f 4985 5384 5392 +f 5266 5262 5048 +f 5051 5074 5034 +f 5124 5269 1870 +f 5011 5268 5107 +f 5129 5269 4863 +f 5474 5471 4522 +f 6324 5949 5947 +f 4963 5271 4444 +f 4866 5271 4964 +f 5277 5275 5278 +f 5302 5272 4623 +f 5374 5375 4413 +f 5273 5289 5274 +f 5275 5274 4412 +f 5373 4983 5372 +f 5165 5275 4412 +f 5275 5164 5278 +f 5276 5278 5279 +f 5564 5377 5378 +f 5377 5277 5276 +f 5273 5274 5277 +f 5279 5278 5164 +f 5277 5278 5276 +f 5153 5312 8479 +f 5481 4805 5480 +f 5477 5281 5282 +f 5289 5290 5274 +f 4623 5281 4914 +f 5282 5281 5280 +f 5373 5282 5280 +f 4034 4037 5477 +f 5276 5279 5283 +f 5286 5479 5285 +f 5293 5279 5164 +f 5507 5505 5501 +f 5287 5285 5295 +f 5286 5287 4800 +f 5279 5496 5479 +f 5286 5285 5287 +f 5296 5482 5295 +f 5292 5481 5480 +f 5488 5313 5487 +f 5296 5285 5499 +f 5289 5273 5376 +f 5290 5289 5280 +f 5281 5290 5280 +f 5290 4623 5272 +f 5301 5299 5038 +f 5038 5037 5301 +f 4490 5287 5292 +f 5287 5295 5297 +f 5294 5164 5165 +f 5293 5288 5496 +f 5487 5294 5161 +f 5293 5294 5288 +f 5296 5295 5285 +f 5297 5295 5291 +f 5499 5285 5478 +f 5503 5482 5284 +f 5297 5291 5298 +f 5287 5297 5292 +f 5298 5291 5299 +f 4805 5298 5036 +f 5291 5295 5482 +f 5482 5687 5291 +f 5503 5495 5498 +f 5484 5485 5686 +f 5036 5298 5301 +f 5299 5301 5298 +f 4914 5302 4623 +f 5145 5302 4893 +f 5303 5148 5304 +f 5149 5151 5303 +f 5310 5307 5311 +f 5155 5304 5306 +f 5690 5172 5174 +f 5507 5256 5505 +f 5309 5306 5304 +f 5310 5306 5309 +f 5309 5304 5883 +f 5884 5698 5883 +f 5311 5315 8480 +f 5505 5485 5486 +f 5883 5304 5148 +f 5310 5309 5307 +f 5307 5886 5311 +f 5310 5308 5312 +f 5315 5311 5305 +f 5308 5310 5311 +f 5312 5308 8479 +f 5306 5312 5153 +f 5493 8478 5491 +f 5288 5487 5492 +f 5315 5316 5314 +f 5494 5483 5497 +f 5316 5315 5305 +f 5315 5314 8480 +f 5883 5698 5307 +f 5738 5029 4781 +f 5538 5236 5228 +f 5305 5882 5316 +f 5511 4903 4904 +f 5318 5511 5319 +f 5514 5319 4905 +f 5318 5319 5175 +f 5322 5514 5518 +f 5891 5889 5890 +f 5175 5322 5321 +f 5520 5322 5697 +f 5514 5322 5175 +f 5520 5697 5519 +f 5331 5323 5328 +f 5326 5332 5325 +f 4751 4729 5324 +f 5327 5324 4729 +f 5325 5323 5326 +f 4748 5325 5186 +f 5323 5331 5334 +f 5323 5334 5326 +f 4730 5327 4729 +f 5327 4725 5328 +f 4725 5329 5328 +f 5328 5329 5331 +f 5246 5329 4725 +f 5331 5329 5521 +f 5521 5341 5330 +f 5337 5338 5335 +f 5521 5329 4967 +f 5331 5330 5334 +f 5189 5332 5185 +f 5325 5332 5186 +f 5248 5544 5737 +f 6257 5914 5916 +f 5341 5336 5340 +f 5340 5334 5330 +f 5326 5338 5337 +f 5339 5337 5347 +f 5904 5533 5333 +f 5524 5333 5523 +f 5338 5326 5334 +f 5335 5347 5337 +f 5340 5338 5334 +f 5524 5338 5336 +f 5347 5523 5343 +f 5192 5339 5344 +f 5341 5340 5330 +f 5338 5340 5336 +f 5341 5521 5342 +f 5341 5248 5910 +f 5247 5342 4967 +f 5252 5912 4744 +f 5529 5532 5527 +f 5192 5344 5190 +f 5526 5339 5347 +f 5527 5532 5526 +f 5528 5527 5343 +f 5346 5704 5537 +f 5526 5346 5344 +f 5190 5703 5349 +f 5523 5347 5335 +f 5526 5347 5343 +f 5348 5190 5349 +f 5191 5192 5348 +f 5537 5703 5346 +f 5532 5704 5346 +f 5350 5218 5351 +f 5219 5220 5350 +f 5732 5218 5729 +f 5540 5236 5538 +f 5230 5352 4569 +f 5353 5352 5229 +f 5352 5353 5140 +f 5229 5237 5541 +f 5236 5540 6242 +f 5877 6032 5875 +f 5355 5228 5236 +f 5177 5355 5234 +f 4919 5356 4916 +f 5241 5356 4628 +f 5928 5542 5925 +f 5342 5544 5248 +f 5789 5792 5689 +f 540 5574 5588 +f 4791 5556 5031 +f 5359 5558 5559 +f 5361 5360 4988 +f 5362 5360 5359 +f 4780 5361 4988 +f 5558 5031 5557 +f 5581 5580 5359 +f 5953 5957 5559 +f 4783 5578 5367 +f 5642 6325 5635 +f 5548 5364 5365 +f 5549 4781 5029 +f 5030 5365 5010 +f 5547 5365 5364 +f 5366 5549 5550 +f 5557 5556 5366 +f 5369 4846 5368 +f 4790 5562 5546 +f 5039 5368 4265 +f 5578 4783 5589 +f 5546 5369 5603 +f 5368 4783 5369 +f 5371 5370 4982 +f 5370 4333 4340 +f 4981 5371 4982 +f 5371 4327 4335 +f 4037 5372 4038 +f 5373 5372 4034 +f 5376 5280 5289 +f 5375 5374 5373 +f 4983 5374 4792 +f 5375 5373 5376 +f 5273 5277 5377 +f 5379 5064 4413 +f 5376 5373 5280 +f 5273 5375 5376 +f 5378 5276 5283 +f 5379 5377 5564 +f 4800 5381 5564 +f 5276 5378 5377 +f 5064 5379 4996 +f 5375 5377 5379 +f 5563 5036 5037 +f 5380 5563 4505 +f 4996 5379 5564 +f 5287 5381 4800 +f 5098 5382 5097 +f 5095 4794 5382 +f 5068 5391 5386 +f 4807 4999 5383 +f 5403 5393 5408 +f 5425 5431 4520 +f 5389 4804 5386 +f 5403 5386 5397 +f 5391 5397 5386 +f 5386 5385 5389 +f 5384 5394 5400 +f 5428 5427 5430 +f 5068 5392 5391 +f 5397 5391 5418 +f 5385 5383 5389 +f 4804 5389 5383 +f 5386 5403 5385 +f 4807 5412 5000 +f 5392 5068 4985 +f 5417 5402 5001 +f 4985 5395 5398 +f 5392 5401 5388 +f 5449 5416 5415 +f 5412 5406 5390 +f 5394 5398 5413 +f 5423 5052 5424 +f 5413 5419 5423 +f 5399 5413 5398 +f 5401 5400 5420 +f 5418 5391 5388 +f 5397 5393 5403 +f 4985 5398 5384 +f 5398 5395 5399 +f 5421 5399 5395 +f 5399 5421 5416 +f 5423 5394 5413 +f 5414 5400 5394 +f 5401 5392 5384 +f 5400 5414 5420 +f 5387 5409 5410 +f 5388 5401 5402 +f 5409 5405 5408 +f 5385 5403 5406 +f 5432 5437 5441 +f 5001 5404 5417 +f 4523 5439 5434 +f 5408 5406 5403 +f 5406 5433 5429 +f 5404 5410 5411 +f 5418 5393 5397 +f 5409 5408 5393 +f 5408 5405 5433 +f 5393 5407 5411 +f 5409 5387 5435 +f 5393 5411 5409 +f 5411 5410 5409 +f 5404 5411 5407 +f 5406 5412 5385 +f 5000 5412 5390 +f 5419 5263 5265 +f 5424 5052 5396 +f 5420 5001 5402 +f 5001 5420 5396 +f 5254 5415 5421 +f 5446 5450 5444 +f 5449 5745 5416 +f 5263 5399 5416 +f 5404 5407 5417 +f 5402 5417 5407 +f 5388 5407 5418 +f 5393 5418 5407 +f 5263 5419 5413 +f 5265 5060 5422 +f 5414 5396 5420 +f 5254 5421 5395 +f 5416 5421 5415 +f 5060 5052 5422 +f 5052 5419 5422 +f 5052 5423 5419 +f 5394 5423 5414 +f 5396 5414 5424 +f 5423 5424 5414 +f 5390 5426 5000 +f 5000 5426 5425 +f 5428 5426 5390 +f 5426 5428 5430 +f 5433 5405 5429 +f 5438 5441 5405 +f 5390 5406 5429 +f 5427 5434 5430 +f 5427 5428 5429 +f 5429 5428 5390 +f 5439 5430 5434 +f 4525 4527 5431 +f 5426 5431 5425 +f 5431 5430 5439 +f 5441 5437 5569 +f 5441 5429 5405 +f 5408 5433 5406 +f 5440 5438 5435 +f 5440 365 5432 +f 5429 5441 5569 +f 5943 5750 5940 +f 365 5938 5751 +f 5437 5434 5427 +f 5440 5441 5438 +f 5432 5441 5440 +f 5940 5934 5436 +f 5405 5435 5438 +f 5472 5931 5944 +f 4523 5937 5933 +f 5431 5439 4525 +f 5405 5409 5435 +f 5437 5432 365 +f 5429 5569 5427 +f 5440 5435 5387 +f 5113 5110 5442 +f 5059 5442 5110 +f 5253 5444 4833 +f 4806 5443 5254 +f 5445 5444 5094 +f 5450 5254 5443 +f 5445 5094 5447 +f 4843 5449 5445 +f 5450 5415 5254 +f 5444 5445 5446 +f 5094 5452 5447 +f 5448 3948 3956 +f 5106 5448 5267 +f 5448 5447 5452 +f 5449 4843 5745 +f 5446 5449 5415 +f 5444 5450 5443 +f 5415 5450 5446 +f 5746 5451 5106 +f 5445 5451 4843 +f 4998 5452 5094 +f 5448 5452 3948 +f 5088 5453 5086 +f 4174 5453 5085 +f 3817 5454 5005 +f 5570 5454 5087 +f 5591 4850 4795 +f 5463 5461 5104 +f 5570 5457 5456 +f 5013 4779 5456 +f 4840 5457 5087 +f 5013 5456 5457 +f 5461 5458 5104 +f 5460 5462 5461 +f 4795 4848 5636 +f 5574 540 5571 +f 5579 5592 5596 +f 5575 5572 5574 +f 5104 5570 5463 +f 5461 5459 5572 +f 5461 5462 5458 +f 5577 5460 5575 +f 5090 5606 5605 +f 5461 5463 5612 +f 5008 5464 4247 +f 5465 5464 5103 +f 5260 5465 5057 +f 5464 5465 5062 +f 5053 5466 5062 +f 5467 5466 5047 +f 5748 5047 5747 +f 4225 4181 5468 +f 5468 4181 3824 +f 4192 5467 5468 +f 5469 5470 5471 +f 5682 5476 5469 +f 5129 5470 5130 +f 5471 5470 4865 +f 4865 4522 5471 +f 4530 5474 4522 +f 5937 5936 5932 +f 5474 5931 5472 +f 5476 5783 5473 +f 1987 5684 2059 +f 4528 5474 4530 +f 5474 5472 5682 +f 5476 5475 5469 +f 1376 5475 5473 +f 5783 5476 5270 +f 5475 5476 5473 +f 4031 5477 4037 +f 5281 5477 4025 +f 5496 5279 5293 +f 5490 5492 5487 +f 5285 5479 5478 +f 5286 5283 5479 +f 4786 5480 4805 +f 5071 5292 5480 +f 5297 5481 5292 +f 5298 4805 5481 +f 5284 5482 5296 +f 5482 5300 5687 +f 5492 5495 5499 +f 5490 5493 5489 +f 5498 5500 5502 +f 5258 5485 5257 +f 4977 5485 5258 +f 5486 5485 5484 +f 5484 5687 5502 +f 5486 5500 5501 +f 5488 5487 5161 +f 5487 5313 5490 +f 5163 5488 5161 +f 5313 5488 5153 +f 8477 8478 8479 +f 5495 5497 5498 +f 8478 5493 5490 +f 5490 5489 5492 +f 8482 5788 5491 +f 5493 5494 5489 +f 5495 5492 5489 +f 5496 5492 5478 +f 8478 5490 5313 +f 5493 5491 5494 +f 5506 5508 5787 +f 5785 5787 5784 +f 5497 5495 5489 +f 5499 5495 5284 +f 5478 5479 5496 +f 5288 5492 5496 +f 5494 5497 5489 +f 5497 5483 5498 +f 5500 5498 5483 +f 5498 5502 5503 +f 5296 5499 5284 +f 5492 5499 5478 +f 5501 5500 5483 +f 5502 5500 5486 +f 5508 5506 5507 +f 5256 5797 5505 +f 5484 5502 5486 +f 5503 5502 5300 +f 5482 5503 5300 +f 5495 5503 5284 +f 5785 5786 5504 +f 5793 5789 5791 +f 5485 5505 5257 +f 5486 5501 5505 +f 5501 5483 5508 +f 5789 5506 5504 +f 5508 5507 5501 +f 5793 5507 5506 +f 5483 5494 5508 +f 5508 5494 5784 +f 5169 5693 5690 +f 5512 5902 5892 +f 5540 5915 5922 +f 5539 5915 5920 +f 4881 5511 4904 +f 5319 5511 4906 +f 5516 5172 5517 +f 5512 5516 5517 +f 6132 6131 6099 +f 5809 5802 5806 +f 5319 5514 5175 +f 5515 5514 4905 +f 5516 4905 5173 +f 5515 5512 5518 +f 5690 5692 5172 +f 5512 5515 5516 +f 6039 6035 6036 +f 6039 5517 5692 +f 5518 5512 5892 +f 5518 5320 5697 +f 6255 5885 5888 +f 5303 5520 5148 +f 5322 5520 5321 +f 5520 5519 5884 +f 5331 5521 5330 +f 4967 5342 5521 +f 4741 4771 5542 +f 6269 6275 6289 +f 5524 5523 5335 +f 5333 5343 5523 +f 5338 5524 5335 +f 5524 5336 5700 +f 5528 5525 5527 +f 5525 5714 5702 +f 5339 5526 5344 +f 5527 5526 5343 +f 5528 5343 5333 +f 5529 5527 5525 +f 5909 5699 5910 +f 6257 5333 5533 +f 5914 5530 5713 +f 5532 5529 5345 +f 6613 6615 6197 +f 5916 5525 6257 +f 5715 5916 5919 +f 6233 6530 6105 +f 5704 5532 5345 +f 5526 5532 5346 +f 5524 5700 5333 +f 5533 5530 5914 +f 5525 5916 5714 +f 5707 5345 5702 +f 5536 5535 5201 +f 5348 5535 5191 +f 5195 5536 5201 +f 5191 5536 5197 +f 5705 5706 5707 +f 5718 5720 5349 +f 5228 5351 5538 +f 5732 5915 5918 +f 5704 5710 5537 +f 5837 6023 6175 +f 5918 5538 5351 +f 5920 6498 5539 +f 5235 5354 5541 +f 5353 5541 5354 +f 6275 5251 5911 +f 4763 5926 5542 +f 5905 5907 5530 +f 5530 5533 5905 +f 5522 5544 5342 +f 5522 4734 5912 +f 5738 4781 5739 +f 5818 5828 5358 +f 5562 4790 4480 +f 5609 5620 5595 +f 4984 5547 4791 +f 5365 5547 4479 +f 5019 5548 5030 +f 5549 5548 4781 +f 5550 5549 5029 +f 5366 5556 5555 +f 5844 5849 5832 +f 5850 5553 5550 +f 5545 5839 5835 +f 5660 5661 5670 +f 5619 5597 5617 +f 5366 5553 5554 +f 5850 5550 5029 +f 5554 5553 5552 +f 6030 6028 5955 +f 5556 5557 5031 +f 5364 5549 5555 +f 5366 5555 5549 +f 5555 5556 4791 +f 5557 5366 5554 +f 5560 5558 5557 +f 5361 5558 5359 +f 5031 5558 5361 +f 5560 5557 5554 +f 5752 5953 5954 +f 5603 4783 5602 +f 5953 5560 5554 +f 5558 5560 5559 +f 5562 5369 5546 +f 5362 5359 5580 +f 5652 5623 5584 +f 5589 5368 5039 +f 4505 5563 4466 +f 5036 5563 5380 +f 4800 5564 5378 +f 4996 5564 5381 +f 5254 5395 5565 +f 4985 5565 5395 +f 4843 5451 5746 +f 5050 5567 5032 +f 5568 5567 5266 +f 5567 5566 5749 +f 5265 5568 5266 +f 5416 5568 5263 +f 5463 5570 5455 +f 5457 5570 5087 +f 5579 5606 5591 +f 5572 5575 5460 +f 5461 5572 5460 +f 4850 5259 4795 +f 5588 5574 5572 +f 5574 5571 5575 +f 5598 5579 5596 +f 5571 5576 5575 +f 4814 4812 5577 +f 5571 5003 5576 +f 5577 5003 4814 +f 4812 5462 5577 +f 5577 5462 5460 +f 5590 5611 5463 +f 5572 5459 5588 +f 5580 4787 5582 +f 5581 5359 5559 +f 5559 5560 5953 +f 5957 5956 5585 +f 5586 5582 4787 +f 5578 5582 5601 +f 5613 5621 5644 +f 5958 5638 5621 +f 5585 4787 5581 +f 5654 5650 5665 +f 5585 5638 5599 +f 4787 5599 5586 +f 5599 4787 5585 +f 5600 5586 5584 +f 5367 5600 5622 +f 8483 5587 8484 +f 5615 540 5588 +f 5368 5589 4783 +f 5039 5578 5589 +f 5605 5590 5455 +f 5579 5598 5611 +f 5592 4795 4782 +f 5579 5590 5606 +f 5596 5597 5595 +f 5592 5597 5596 +f 4259 5593 5090 +f 4850 5591 5593 +f 4782 5617 5597 +f 5635 5629 5363 +f 5595 5608 5609 +f 5612 5610 5459 +f 5597 5592 4782 +f 5598 5596 5595 +f 5618 5607 5617 +f 5608 5597 5619 +f 5626 5615 5588 +f 5612 5611 5610 +f 5638 5639 5621 +f 5586 5599 5958 +f 5625 5649 8484 +f 5367 5578 5601 +f 5586 5601 5582 +f 5367 5601 5600 +f 5367 5622 5624 +f 5587 8483 5603 +f 4783 5603 5369 +f 5587 5603 5602 +f 5456 5605 5455 +f 5588 5459 5610 +f 5606 5090 5593 +f 5605 5606 5590 +f 5591 5606 5593 +f 8484 5624 5625 +f 5367 5624 5602 +f 5609 5608 5594 +f 5595 5597 5608 +f 5646 5653 5647 +f 5627 5363 5604 +f 5598 5620 5610 +f 5615 5616 5604 +f 5579 5611 5590 +f 5611 5598 5610 +f 5461 5612 5459 +f 5463 5611 5612 +f 5643 5656 5664 +f 5655 5651 5672 +f 5622 5600 5623 +f 5622 5623 5614 +f 5626 5588 5610 +f 5604 540 5615 +f 5620 5616 5610 +f 5628 5630 5634 +f 5618 5617 4782 +f 5617 5607 5619 +f 4782 4795 5636 +f 5618 4852 5649 +f 5666 5647 5648 +f 5653 5594 5619 +f 5595 5620 5598 +f 5620 5609 5628 +f 5585 5639 5638 +f 5645 5753 5779 +f 5623 5600 5584 +f 5622 5614 5624 +f 5778 5780 5774 +f 5761 5764 5759 +f 5624 5614 5625 +f 5602 5624 5587 +f 5654 5623 5657 +f 5625 5648 5649 +f 5610 5616 5626 +f 5615 5626 5616 +f 5604 5616 5627 +f 5628 5627 5616 +f 5620 5628 5616 +f 5628 5609 5630 +f 5630 5609 5631 +f 5635 5363 5634 +f 5631 5609 5594 +f 5573 6325 5961 +f 5632 5631 5594 +f 5642 5631 5632 +f 5634 5630 5635 +f 5627 5628 5634 +f 5647 5619 5607 +f 5646 5633 5632 +f 5627 5634 5363 +f 5642 5630 5631 +f 5630 5642 5635 +f 5637 5636 4848 +f 4782 5636 5618 +f 4852 5637 5561 +f 5636 5637 5618 +f 5585 5956 5639 +f 5958 5621 5753 +f 5643 5659 5656 +f 5621 5639 5644 +f 5651 5661 5673 +f 5633 5646 5755 +f 5667 5614 5654 +f 5654 5614 5623 +f 5633 5757 5632 +f 5632 5757 5642 +f 5807 5818 5358 +f 5613 5644 5655 +f 5644 5662 5656 +f 5656 5651 5655 +f 5645 5652 5753 +f 5640 5770 5771 +f 5632 5594 5653 +f 5641 5959 5756 +f 5648 5647 5607 +f 5646 5647 5641 +f 5649 5648 5607 +f 5625 5658 5666 +f 5618 5649 5607 +f 5649 4852 8484 +f 6591 6391 6586 +f 5959 5754 5756 +f 5651 5659 5661 +f 5774 5781 5773 +f 5753 5652 5584 +f 5657 5652 5645 +f 5647 5653 5619 +f 5632 5653 5646 +f 5623 5652 5657 +f 5665 5754 5959 +f 5655 5644 5656 +f 5651 5673 5672 +f 5662 5644 5639 +f 5656 5662 5664 +f 5645 5640 5771 +f 5654 5657 5766 +f 5666 5641 5647 +f 5667 5625 5614 +f 5668 5670 5643 +f 5651 5656 5659 +f 5868 5861 5866 +f 8486 5643 5664 +f 5643 5661 5659 +f 5673 5674 5671 +f 5639 5583 5662 +f 5663 6029 6027 +f 6028 5752 5954 +f 5829 5834 5821 +f 6029 5662 5583 +f 5664 5663 8486 +f 5754 5665 5650 +f 5667 5665 5658 +f 5625 5666 5648 +f 5959 5666 5658 +f 5665 5667 5654 +f 5625 5667 5658 +f 5805 5806 5802 +f 5833 5834 5829 +f 5676 5669 5678 +f 5776 5679 5775 +f 5643 5670 5661 +f 5983 5670 5668 +f 5661 5674 5673 +f 5655 5672 5613 +f 5678 5677 5671 +f 5672 5671 5677 +f 5674 5661 5660 +f 5672 5673 5671 +f 5676 5976 5965 +f 5674 5976 5671 +f 5983 6491 5982 +f 5988 6355 6339 +f 5674 5660 5967 +f 5965 5782 5964 +f 5677 5678 5681 +f 5677 5781 5672 +f 5676 5678 5671 +f 5681 5678 5669 +f 5669 5969 5681 +f 5635 6325 5629 +f 5669 5964 5968 +f 5960 5776 5680 +f 5969 5669 5968 +f 5680 5776 5773 +f 5682 5270 5476 +f 5474 5682 5471 +f 5946 5270 5682 +f 5949 5950 5947 +f 1376 5473 5684 +f 5473 5783 5685 +f 5949 2613 5683 +f 2059 5684 5685 +f 5028 5686 4977 +f 5687 5038 5299 +f 5502 5687 5300 +f 5686 5687 5484 +f 8481 5491 8477 +f 6013 5688 8482 +f 5798 5790 5792 +f 5838 5930 5743 +f 5871 5691 5693 +f 5692 5690 5509 +f 5691 5871 5875 +f 5690 5693 5509 +f 5692 5509 6039 +f 5172 5692 5517 +f 5871 5693 5169 +f 5509 5693 5691 +f 5694 5878 5879 +f 6033 6041 6040 +f 5305 5311 5886 +f 5798 5800 5790 +f 6067 6054 6063 +f 5889 6256 5896 +f 5518 5697 5322 +f 5885 5697 5320 +f 5697 5885 5519 +f 5307 5698 5886 +f 5251 5248 5737 +f 5904 5905 5533 +f 5700 5336 5910 +f 5700 5699 5904 +f 6270 5913 5713 +f 6268 5530 5907 +f 6315 6307 6316 +f 5715 6105 5714 +f 5346 5703 5190 +f 5719 5537 5710 +f 5345 5706 5704 +f 5708 5710 5706 +f 5345 5707 5706 +f 5705 5716 6259 +f 5529 5702 5345 +f 5708 5706 5705 +f 5708 6129 5724 +f 5702 5709 6174 +f 5713 5913 5919 +f 5220 5199 5721 +f 5715 5714 5916 +f 6271 6266 6268 +f 5706 5710 5704 +f 5719 5710 5708 +f 6271 6268 5907 +f 6270 5701 6278 +f 5716 5707 6174 +f 5713 5530 6270 +f 6270 5530 6268 +f 5919 5913 6273 +f 5702 5714 5709 +f 6285 6271 5907 +f 6323 5731 5734 +f 5717 5725 5721 +f 6260 6178 6259 +f 5731 6323 5920 +f 5723 5725 5727 +f 5720 5721 5199 +f 5537 5718 5703 +f 5720 5718 5717 +f 5724 5719 5708 +f 5717 5718 5719 +f 5720 5717 5721 +f 5349 5720 5199 +f 5724 5727 5719 +f 5220 5721 5726 +f 5351 5218 5732 +f 5726 5729 5218 +f 5726 5730 5729 +f 5725 5726 5721 +f 6259 6082 5705 +f 5724 5722 5733 +f 5727 5717 5719 +f 5726 5725 5723 +f 5729 5730 5728 +f 5726 5218 5220 +f 5723 5727 5724 +f 5725 5717 5727 +f 5705 5707 5716 +f 6211 6191 6254 +f 5730 5726 5723 +f 5729 5728 5734 +f 5723 5733 5730 +f 6508 6216 6224 +f 5734 5735 6323 +f 5539 5922 5915 +f 5734 5732 5729 +f 5915 5732 5731 +f 5724 5733 5723 +f 6222 5733 5722 +f 5735 5734 5728 +f 5732 5734 5731 +f 6599 6249 6722 +f 6363 6371 6331 +f 5694 5881 6244 +f 5879 5881 5694 +f 5737 4969 5911 +f 5909 5251 5906 +f 5739 4781 5019 +f 5839 5545 5830 +f 5019 5742 5741 +f 5738 5739 5930 +f 5791 5256 5793 +f 5843 5794 5812 +f 5024 5744 5019 +f 5741 5740 5743 +f 5744 5258 5742 +f 5740 5741 5742 +f 5794 5743 5796 +f 5830 5838 5358 +f 5258 5744 5255 +f 5019 5744 5742 +f 5746 5745 4843 +f 5568 5745 5566 +f 5748 5106 5267 +f 5567 5749 5032 +f 5032 5747 5020 +f 5748 5746 5106 +f 5467 5748 4225 +f 5748 5747 5746 +f 5566 5746 5749 +f 5747 5749 5746 +f 5931 4528 5932 +f 8485 5934 5936 +f 5936 5934 5940 +f 5437 365 5751 +f 5954 5554 5552 +f 5752 6028 5956 +f 5958 5753 5584 +f 5780 5621 5613 +f 5650 5765 5760 +f 5646 5641 5756 +f 5759 5755 5756 +f 5633 5755 5764 +f 5759 5756 5754 +f 5646 5756 5755 +f 5759 5760 5758 +f 6583 5573 5961 +f 5754 5760 5759 +f 6325 5757 5961 +f 5760 5754 5650 +f 6587 6586 5763 +f 5766 5765 5650 +f 5758 5760 5763 +f 5633 5961 5757 +f 5758 6586 6585 +f 5768 5769 5770 +f 5767 8487 5763 +f 5767 5760 5765 +f 5767 5762 5769 +f 5759 5764 5755 +f 5961 5764 5761 +f 5650 5654 5766 +f 5767 5765 5762 +f 5657 5645 5771 +f 5762 5765 5766 +f 5769 5762 5770 +f 5760 5767 5763 +f 5960 6415 5679 +f 5769 8487 5767 +f 5762 5771 5770 +f 5991 8487 5768 +f 5770 5640 5777 +f 6341 5775 5679 +f 5762 5766 5771 +f 5771 5766 5657 +f 5774 5772 5778 +f 5681 5773 5677 +f 5680 5773 5681 +f 5773 5772 5774 +f 5772 5777 5778 +f 5672 5774 5613 +f 5768 5770 5775 +f 5775 5770 5777 +f 5775 5772 5776 +f 5773 5776 5772 +f 5777 5640 5778 +f 5775 5777 5772 +f 5640 5779 5778 +f 5779 5780 5778 +f 5645 5779 5640 +f 5780 5779 5753 +f 5621 5780 5753 +f 5780 5613 5774 +f 5773 5781 5677 +f 5774 5672 5781 +f 5782 5965 5971 +f 5966 6425 5969 +f 5950 5270 5945 +f 5685 5783 5683 +f 5788 5784 5494 +f 5785 5784 5688 +f 5786 5785 5688 +f 5787 5504 5506 +f 8488 6010 8489 +f 5799 6011 6009 +f 5784 5787 5508 +f 5504 5787 5785 +f 8482 5491 8481 +f 5784 5788 5688 +f 5798 5792 5789 +f 5789 5689 5791 +f 5801 5790 5800 +f 5792 5805 5689 +f 5803 5791 5689 +f 5803 5796 5791 +f 5798 5789 5504 +f 5806 5805 5792 +f 5507 5793 5256 +f 5789 5793 5506 +f 5689 5807 5812 +f 5796 5743 5740 +f 5740 5742 6004 +f 5256 5791 5795 +f 5740 5795 5796 +f 5791 5796 5795 +f 5256 5795 5797 +f 5795 5740 6004 +f 5504 5786 5798 +f 5800 5786 5799 +f 6006 6008 6012 +f 5805 5807 5689 +f 5786 5800 5798 +f 5801 5800 5799 +f 6005 5810 6007 +f 5799 5815 5801 +f 5801 5815 5816 +f 5819 5802 5809 +f 5812 5803 5689 +f 5796 5803 5794 +f 5896 5895 6501 +f 6436 6337 5981 +f 5806 5792 5790 +f 5807 5805 5802 +f 5801 5813 5790 +f 5820 5813 5814 +f 5822 5836 5819 +f 5807 5358 5812 +f 5855 5842 5847 +f 5840 5857 5844 +f 5813 5809 5806 +f 5822 5811 5818 +f 6009 6011 6014 +f 5808 5809 5820 +f 5811 5819 5826 +f 5830 5358 5828 +f 5358 5838 5843 +f 5812 5794 5803 +f 5790 5813 5806 +f 5813 5801 5814 +f 5816 5810 5817 +f 5816 5817 5854 +f 5815 5799 6009 +f 5816 5815 5810 +f 5817 5810 6005 +f 5801 5816 5814 +f 5827 5846 5848 +f 5855 5854 6202 +f 5836 5807 5802 +f 5829 5828 5818 +f 5808 5823 5809 +f 5823 5819 5809 +f 5813 5820 5809 +f 5847 5820 5814 +f 5821 5828 5829 +f 5835 5029 5738 +f 5818 5807 5836 +f 5819 5811 5822 +f 5825 5826 5827 +f 5819 5823 5826 +f 5808 5846 5827 +f 6021 5841 6026 +f 5823 5827 5826 +f 6019 5845 5852 +f 5827 5823 5808 +f 5811 5826 5825 +f 5842 5846 5847 +f 5827 5848 6017 +f 5829 5818 5811 +f 5830 5828 5821 +f 5831 5833 5825 +f 5829 5811 5833 +f 5832 5839 5840 +f 5830 5545 5838 +f 5825 6017 6020 +f 5844 5859 5551 +f 5840 5830 5821 +f 5551 5849 5844 +f 5825 5833 5811 +f 5834 5833 5831 +f 5831 5852 5834 +f 5852 5853 5834 +f 5545 5835 5738 +f 5850 5832 5849 +f 5819 5836 5802 +f 5818 5836 5822 +f 5898 5513 5896 +f 6354 6349 6333 +f 5930 5838 5545 +f 5843 5838 5743 +f 5840 5839 5830 +f 5835 5839 5832 +f 5857 5858 5851 +f 5551 5955 5849 +f 5856 6751 5848 +f 5668 5993 5983 +f 5808 5847 5846 +f 5824 6017 5848 +f 5794 5843 5743 +f 5358 5843 5812 +f 5832 5840 5844 +f 5857 5840 5858 +f 6022 5825 6020 +f 5865 5864 5851 +f 5808 5820 5847 +f 5846 5842 5848 +f 5854 5814 5816 +f 5847 5814 5854 +f 5856 5842 6023 +f 5848 5842 5856 +f 5850 5552 5553 +f 5835 5832 5850 +f 5835 5850 5029 +f 5850 5849 5552 +f 5851 5858 5853 +f 5857 5859 5844 +f 5831 6022 6019 +f 5852 5845 5853 +f 6026 5860 5845 +f 5853 5845 5860 +f 6164 6494 6202 +f 5855 6175 6023 +f 5847 5854 5855 +f 6202 6494 6136 +f 6052 6468 6024 +f 6430 6329 6428 +f 5858 5840 5821 +f 5857 5851 5859 +f 5821 5834 5858 +f 5853 5858 5834 +f 5860 6031 5865 +f 5664 6029 5663 +f 5862 6031 5869 +f 5866 5863 5859 +f 5551 5859 5863 +f 5859 5851 5864 +f 5860 5841 6001 +f 5866 5862 5869 +f 5866 5859 5864 +f 5863 5861 6030 +f 5865 5851 5853 +f 5866 5864 5862 +f 5860 5865 5853 +f 5862 5864 5865 +f 5869 5868 5866 +f 5863 5866 5861 +f 5869 6031 5998 +f 5867 5994 6489 +f 8486 5868 5867 +f 5663 5861 5868 +f 5998 6031 5870 +f 5867 5868 5869 +f 5983 5993 6002 +f 5992 5993 5996 +f 5169 5171 5873 +f 5140 5872 5141 +f 5138 5871 5872 +f 5169 5873 5871 +f 5171 4876 5873 +f 5874 5873 4876 +f 4887 5874 4876 +f 5872 5874 5141 +f 5138 5354 5875 +f 5876 5877 5878 +f 6041 6246 6247 +f 6035 6032 6033 +f 5878 5877 5354 +f 5877 5876 6032 +f 5235 5878 5354 +f 5878 5694 6499 +f 5235 5880 5879 +f 5879 5880 5881 +f 5237 5880 5235 +f 5881 5880 5226 +f 5226 5238 6243 +f 6242 6244 5881 +f 5887 5305 5886 +f 6006 6014 6016 +f 5309 5883 5307 +f 5884 5883 5148 +f 5520 5884 5148 +f 6255 5884 5519 +f 5893 5894 8488 +f 5305 5887 5882 +f 5888 5698 6255 +f 5882 5887 5695 +f 5698 5888 5886 +f 5890 5887 5888 +f 5890 5888 5885 +f 5887 5886 5888 +f 5890 5885 5891 +f 5892 5899 5518 +f 5885 5320 5899 +f 5890 5889 5893 +f 5892 5903 5899 +f 5894 5896 5513 +f 5900 5902 5517 +f 6039 6502 5517 +f 5890 5893 5887 +f 5894 5893 5889 +f 6256 5889 5891 +f 5894 5513 8488 +f 5891 5899 5903 +f 6036 6038 5696 +f 5889 5896 5894 +f 6501 6063 6500 +f 6033 6040 5317 +f 6223 6235 6057 +f 6509 6248 6250 +f 5898 5897 6104 +f 5885 5899 5891 +f 5518 5899 5320 +f 6038 6046 5696 +f 5901 5895 6256 +f 6076 5892 5902 +f 6038 6037 6047 +f 5517 5902 5512 +f 5902 5900 6076 +f 6076 5903 5892 +f 6256 5903 5901 +f 5700 5904 5333 +f 5905 5904 5699 +f 5908 5905 5699 +f 5908 5907 5905 +f 5908 5909 5906 +f 5357 5923 4969 +f 6269 6274 6275 +f 5538 5918 5540 +f 5909 5908 5699 +f 5908 5906 6285 +f 5699 5700 5910 +f 4969 5737 5357 +f 5341 5910 5336 +f 5248 5909 5910 +f 4747 5249 5912 +f 6284 6265 6299 +f 4747 5912 5252 +f 5522 5249 5357 +f 6536 5701 6266 +f 5914 5713 5919 +f 5716 6174 6322 +f 6170 5999 6101 +f 5731 5920 5915 +f 5701 6270 6268 +f 5525 5702 5529 +f 5525 5528 6257 +f 5919 5916 5914 +f 5732 5918 5351 +f 7416 6412 6147 +f 5918 5915 5540 +f 6251 6261 6138 +f 6259 5716 5531 +f 6128 6170 6208 +f 6060 6138 6253 +f 6313 6089 6456 +f 6146 5922 5539 +f 6242 5922 5736 +f 4746 5925 5924 +f 5926 4763 4443 +f 4747 5928 5923 +f 5924 5925 5926 +f 5542 5926 5925 +f 6291 5929 5250 +f 5543 5923 5927 +f 5542 5928 4747 +f 5927 5928 5925 +f 5738 5930 5545 +f 5927 4746 5929 +f 5741 5930 5739 +f 5933 4528 4529 +f 5750 5943 5944 +f 5935 5936 5937 +f 5750 5931 5932 +f 4523 5933 5439 +f 5933 5932 4528 +f 5935 8485 5936 +f 8485 5938 5934 +f 8485 5935 5751 +f 5935 4523 5434 +f 5437 5751 5935 +f 5750 5932 5936 +f 5933 5937 5932 +f 5935 5937 4523 +f 5938 5436 5934 +f 5939 5943 5941 +f 5947 5945 5942 +f 5940 5750 5936 +f 5939 5948 5943 +f 1877 5947 5948 +f 5940 5436 5941 +f 5472 5946 5682 +f 5943 5940 5941 +f 5943 5942 5944 +f 5944 5931 5750 +f 5944 5942 5945 +f 5942 5948 5947 +f 5950 5783 5270 +f 5944 5946 5472 +f 5270 5946 5945 +f 2614 1986 5951 +f 5950 5949 5683 +f 5943 5948 5942 +f 1877 5948 5939 +f 2615 5952 5951 +f 6324 2613 5949 +f 5783 5950 5683 +f 5945 5947 5950 +f 2607 2611 2512 +f 5685 2613 5952 +f 5951 5952 2613 +f 5954 5953 5554 +f 5957 5953 5752 +f 5955 5552 5849 +f 5552 5955 5954 +f 6030 5551 5863 +f 6027 5861 5663 +f 5639 5956 5583 +f 5957 5585 5581 +f 5559 5957 5581 +f 5752 5956 5957 +f 5586 5958 5584 +f 5638 5958 5599 +f 5666 5959 5641 +f 5665 5959 5658 +f 6335 5988 6332 +f 6584 6597 6583 +f 5573 5629 6325 +f 5764 5961 5633 +f 5969 5960 5680 +f 6591 6587 6588 +f 6421 5679 6415 +f 5776 5960 5679 +f 5965 5964 5676 +f 6432 5968 5964 +f 5671 5976 5676 +f 5965 5675 5971 +f 5972 5971 5980 +f 6446 6421 6415 +f 5982 5660 5983 +f 5675 5965 5978 +f 6432 5964 5782 +f 5969 5968 5966 +f 5972 5782 5971 +f 5681 5969 5680 +f 6335 6334 5988 +f 5991 6341 6421 +f 5980 5675 5974 +f 6434 6330 6426 +f 5984 6422 5978 +f 6346 6348 6350 +f 5991 6421 6336 +f 5960 6425 6415 +f 6422 5675 5978 +f 6354 6333 6330 +f 6350 6348 6434 +f 6428 5972 6424 +f 5674 5967 5976 +f 5965 5976 5967 +f 6392 6376 6382 +f 6386 6369 6375 +f 5965 5967 5978 +f 5967 5982 5984 +f 5660 5982 5967 +f 6344 5974 5675 +f 5675 5980 5971 +f 6424 5980 5974 +f 5775 6341 5768 +f 6420 6418 6439 +f 5660 5670 5983 +f 5984 5982 5979 +f 5993 5668 5994 +f 5995 6490 6491 +f 5979 5985 6422 +f 5967 5984 5978 +f 5979 6423 5985 +f 6343 6327 5973 +f 6430 6428 5975 +f 6355 5988 6333 +f 6333 6334 6330 +f 6406 5989 6451 +f 5990 5987 6327 +f 6419 6337 6332 +f 6340 6338 6433 +f 5973 6327 6328 +f 6436 5981 6438 +f 6445 6425 6444 +f 6340 6588 6589 +f 6441 6327 5987 +f 6000 6001 5999 +f 6119 6084 6123 +f 5668 6489 5994 +f 6002 5993 5992 +f 5997 5994 5998 +f 5997 5992 5996 +f 5997 6000 5992 +f 5995 5977 6490 +f 5993 5994 5996 +f 5997 5996 5994 +f 5998 5994 5867 +f 5997 5870 6000 +f 5869 5998 5867 +f 5870 5997 5998 +f 6507 6170 8527 +f 6093 6084 6119 +f 6001 6000 5870 +f 6000 5999 6192 +f 6001 5870 6031 +f 6001 5841 6101 +f 6123 5992 6128 +f 5983 6002 5995 +f 5314 5316 6492 +f 6015 6014 6006 +f 5257 6004 5742 +f 5795 6004 5797 +f 5810 6009 6007 +f 6164 6005 5804 +f 5316 5882 6008 +f 6007 6134 6005 +f 5810 5815 6009 +f 6006 6012 6121 +f 5882 5695 6008 +f 8489 6010 6012 +f 5799 5786 6011 +f 6007 6009 6015 +f 5898 6104 6151 +f 6121 6012 6010 +f 5786 6013 6011 +f 6014 6492 6016 +f 8489 6008 5695 +f 6010 6150 6121 +f 5688 6013 5786 +f 6014 6013 6003 +f 6014 6011 6013 +f 6008 6016 5316 +f 6007 6015 6006 +f 6009 6014 6015 +f 6006 6016 6008 +f 6492 6014 6003 +f 6020 6017 6605 +f 5825 5827 6017 +f 5856 5837 6759 +f 6019 6021 5845 +f 5831 6019 5852 +f 6019 6018 6021 +f 6605 6017 5824 +f 6018 6019 6022 +f 6604 6605 6607 +f 6752 6604 6607 +f 5825 6022 5831 +f 6018 6022 6020 +f 5856 6023 5837 +f 5842 5855 6023 +f 6051 6044 6047 +f 6181 6152 6135 +f 6069 6404 6103 +f 6937 6939 6943 +f 6021 6026 5845 +f 5841 5860 6026 +f 5583 5956 6028 +f 6030 6027 6028 +f 5955 6028 5954 +f 5583 6028 6027 +f 5662 6029 5664 +f 5583 6027 6029 +f 6030 5955 5551 +f 5861 6027 6030 +f 5865 6031 5862 +f 6001 6031 5860 +f 6032 5691 5875 +f 6033 6032 5876 +f 6041 6034 6040 +f 6035 6033 5317 +f 6199 6107 6347 +f 6043 5317 6040 +f 6036 6035 5317 +f 6032 6035 5509 +f 6045 5317 6043 +f 6039 6036 5696 +f 6045 6037 6038 +f 6054 6044 6051 +f 5317 6038 6036 +f 6046 6038 6047 +f 5696 6502 6039 +f 5509 6035 6039 +f 6041 6033 5876 +f 6043 6040 6251 +f 5876 6499 6041 +f 5694 6244 6246 +f 6250 6247 5510 +f 6069 6097 6050 +f 6251 6040 6034 +f 6043 6042 6045 +f 6047 6037 6090 +f 6044 6054 6067 +f 6045 6038 5317 +f 6252 5735 6212 +f 6046 6047 6074 +f 6046 6074 6073 +f 6138 6060 6042 +f 6074 6047 6044 +f 6217 6094 6062 +f 6090 6048 6188 +f 6188 6079 6395 +f 6517 6195 6159 +f 6420 6505 6418 +f 6513 6054 6051 +f 6111 5712 6176 +f 6097 6069 6380 +f 6042 6251 6138 +f 6732 6734 6088 +f 6145 6052 6095 +f 6060 6079 6048 +f 6054 6513 6217 +f 6075 6503 5901 +f 6253 6138 6380 +f 6254 6191 6388 +f 6190 6254 6599 +f 5897 6094 6210 +f 7191 7512 6972 +f 6768 6610 6959 +f 6053 6191 6211 +f 6467 6094 6217 +f 6181 6738 7138 +f 6083 6059 6122 +f 6051 6090 6087 +f 6662 6663 6659 +f 6045 6042 6060 +f 6193 6166 6154 +f 6079 6253 6069 +f 5897 5898 6500 +f 6054 6062 6063 +f 6062 5897 6500 +f 6404 6069 6050 +f 6119 6123 6128 +f 6081 5977 6084 +f 6056 5722 5724 +f 6109 6386 6375 +f 6181 6135 6738 +f 6063 6501 6503 +f 6075 6076 6068 +f 6044 6067 6068 +f 6075 6068 6067 +f 6737 6053 6211 +f 6229 6534 6168 +f 6127 6505 6408 +f 8496 8494 8495 +f 6178 6260 6263 +f 6099 6122 6095 +f 6254 6388 6071 +f 5763 6586 5758 +f 6502 5900 5517 +f 6046 6073 6502 +f 6044 6068 6074 +f 6073 6074 6068 +f 6067 6063 6503 +f 6076 6075 5901 +f 5901 5903 6076 +f 6073 6076 5900 +f 6389 6077 6080 +f 6161 6126 6218 +f 6059 6223 6057 +f 6072 6412 7416 +f 6215 6053 6737 +f 6062 6054 6217 +f 6034 6247 6248 +f 6357 6130 6109 +f 6056 6141 6528 +f 6153 6379 6102 +f 6103 6404 6236 +f 6184 6561 6609 +f 6546 6145 6095 +f 6099 6131 6083 +f 6649 6527 6137 +f 6002 6123 5995 +f 6513 6657 6144 +f 5708 6082 6129 +f 6395 6079 6103 +f 6730 6732 6088 +f 6095 6052 6092 +f 6212 6216 6508 +f 6351 6107 6353 +f 6389 6411 6392 +f 6404 6064 6236 +f 6052 6024 6495 +f 6177 6140 6261 +f 6210 6223 6059 +f 6791 6661 6066 +f 6097 6140 6061 +f 6533 6546 6057 +f 8490 6131 6150 +f 6153 6102 6386 +f 6741 6743 6118 +f 6105 6530 6553 +f 6064 6066 6236 +f 6060 6048 6037 +f 6099 6095 6092 +f 6078 6231 6226 +f 6180 6102 6379 +f 6663 6240 6658 +f 6498 6111 6146 +f 6210 6467 6768 +f 6024 6494 6495 +f 6099 6092 6132 +f 6099 6083 6122 +f 6078 6226 6055 +f 6154 6166 6226 +f 6556 6544 6537 +f 8493 6021 8492 +f 6956 6957 6756 +f 6000 6192 5992 +f 6082 5708 5705 +f 6061 6177 6166 +f 5897 6210 6104 +f 6104 6083 6151 +f 6064 6025 6066 +f 6153 6130 6093 +f 6077 6106 6143 +f 7509 6117 6077 +f 6079 6069 6103 +f 6192 6128 5992 +f 6148 6149 6146 +f 6514 6323 5735 +f 4847 6113 6480 +f 6101 5999 6001 +f 6400 6320 6531 +f 6130 6081 6093 +f 6219 6521 6156 +f 6157 6141 6258 +f 6504 7510 6180 +f 6024 6493 6136 +f 6117 6740 6080 +f 6526 6175 6493 +f 6543 6279 6540 +f 6117 6080 6077 +f 6389 6080 6152 +f 6669 5711 5531 +f 6102 6106 6112 +f 6741 6740 6209 +f 6957 6504 6169 +f 6252 6609 5735 +f 6114 6169 6504 +f 6124 6114 6173 +f 5992 6123 6002 +f 6400 6562 6318 +f 6132 6496 6133 +f 6134 6121 6133 +f 6133 6121 6120 +f 6007 6006 6121 +f 6083 6104 6059 +f 6148 6146 6055 +f 6139 6674 6678 +f 6329 6443 6171 +f 6519 6224 6225 +f 7517 6650 6652 +f 6564 6521 6125 +f 6567 6172 6159 +f 6177 6261 6396 +f 5712 6498 5920 +f 6208 6169 6124 +f 6750 6917 6918 +f 6384 6127 6409 +f 6084 5995 6123 +f 6201 6405 6064 +f 6404 6201 6064 +f 6173 6093 6119 +f 6170 6128 6192 +f 6150 6131 6120 +f 6151 5513 5898 +f 6132 6092 6496 +f 6131 6132 6120 +f 6133 6120 6132 +f 6134 6133 5804 +f 6005 6134 5804 +f 6007 6121 6134 +f 6202 6175 5855 +f 6084 5977 5995 +f 6226 6166 6510 +f 6744 6892 7127 +f 6380 6069 6253 +f 6193 6061 6166 +f 6235 6223 6049 +f 6149 5736 5922 +f 6735 6088 6734 +f 6386 6109 6130 +f 7169 6142 7165 +f 6510 6148 6055 +f 6163 6517 6172 +f 5961 6584 6583 +f 6144 6217 6513 +f 6086 6108 6193 +f 6130 6357 6199 +f 6507 6169 6208 +f 6248 6396 6261 +f 6037 6048 6090 +f 6538 6542 6675 +f 6447 6185 6438 +f 6146 5539 6498 +f 6146 6149 5922 +f 6396 6509 6510 +f 6532 6025 6064 +f 6144 6770 6769 +f 6055 6176 6078 +f 6148 5510 6149 +f 6245 6149 5510 +f 6121 6150 6120 +f 6010 8488 8490 +f 6083 6131 6151 +f 6151 6131 8490 +f 8527 6170 6101 +f 6102 6112 6386 +f 6119 6124 6173 +f 6208 6170 6507 +f 6127 6116 6505 +f 6155 6196 6554 +f 6522 6646 6137 +f 6314 6319 6206 +f 6183 6961 6213 +f 6159 6195 6564 +f 6126 6204 6609 +f 6886 6612 6887 +f 6126 6163 6172 +f 6961 6772 6963 +f 6168 6137 6551 +f 6259 6178 6157 +f 6506 6189 6262 +f 6065 8494 6214 +f 6237 6239 6220 +f 6189 6162 6160 +f 6196 6229 6231 +f 6158 6567 6159 +f 6519 6517 6224 +f 7192 6635 6637 +f 6603 6018 6604 +f 6389 6112 6106 +f 6225 6528 6511 +f 6917 6116 6165 +f 6510 6055 6226 +f 6126 6252 6163 +f 6196 6220 6229 +f 6516 6518 6155 +f 6517 6163 6508 +f 6140 6177 6061 +f 6202 5817 6164 +f 6179 6598 6724 +f 6595 6596 6391 +f 6510 6509 6148 +f 6208 6119 6128 +f 6202 6136 6493 +f 6512 6195 6550 +f 6225 6195 6519 +f 6258 6129 6082 +f 6152 6249 6411 +f 6660 6790 6659 +f 6192 5999 6170 +f 6100 6116 6487 +f 6505 6100 6418 +f 6513 6087 6657 +f 6493 6175 6202 +f 6230 6157 6178 +f 6665 6533 6394 +f 6576 6205 6557 +f 6160 6186 6194 +f 5728 6216 6212 +f 6180 6143 6106 +f 6525 6174 5709 +f 5702 6174 5707 +f 6957 6169 6198 +f 7509 6077 6143 +f 6497 6754 6755 +f 6116 6127 6165 +f 6485 6113 6433 +f 6552 6167 6555 +f 5712 6111 6498 +f 6172 6567 6218 +f 6450 6185 6449 +f 6340 6433 6182 +f 6168 6154 6187 +f 6552 6232 6167 +f 6516 6184 6204 +f 6154 6168 6193 +f 6226 6231 6187 +f 6367 6373 6387 +f 6239 6237 6523 +f 7120 6221 7121 +f 6546 6122 6057 +f 6258 6056 6129 +f 6534 6137 6168 +f 6212 5735 5728 +f 6554 6184 6516 +f 6172 6517 6159 +f 6433 6113 6182 +f 6380 6140 6097 +f 6183 6218 6567 +f 6193 6108 6061 +f 6965 6971 7187 +f 6230 6160 6194 +f 6557 5711 6576 +f 6239 6534 6220 +f 8491 8492 8525 +f 6557 6506 6262 +f 6169 6114 6124 +f 6739 6738 6135 +f 6139 6535 6559 +f 7190 7192 6637 +f 6379 6173 6114 +f 6060 6253 6079 +f 6097 6061 6108 +f 6254 6071 6599 +f 6496 6164 5804 +f 6552 6523 6237 +f 6252 6508 6163 +f 6155 6552 6237 +f 6552 6155 6518 +f 6065 6205 6515 +f 6065 6506 6205 +f 6221 6207 6214 +f 6873 7108 7120 +f 6820 7055 6703 +f 6552 6555 6523 +f 6392 6411 6376 +f 6312 6456 6309 +f 6389 6392 6112 +f 6201 6050 6097 +f 6522 6647 6646 +f 6216 5728 5730 +f 6138 6261 6380 +f 6261 6251 6248 +f 6191 6393 6387 +f 6055 6111 6176 +f 6508 6252 6212 +f 6158 6964 6567 +f 7517 6547 6241 +f 6162 6219 6156 +f 6518 6213 6232 +f 6057 6122 6059 +f 6211 6254 6190 +f 5730 6222 6216 +f 6093 6081 6084 +f 6216 6225 6224 +f 6225 6550 6195 +f 6564 6125 6158 +f 6189 6506 6214 +f 6160 6262 6189 +f 6818 6696 6700 +f 6968 6521 6219 +f 6214 6207 6189 +f 6168 6187 6229 +f 6157 6258 6259 +f 5733 6222 5730 +f 5722 6528 6222 +f 6097 6108 6201 +f 6059 6104 6210 +f 6216 6222 6225 +f 6825 7056 6873 +f 6129 6056 5724 +f 6550 6511 6194 +f 6086 6193 6168 +f 6471 6171 6443 +f 6153 6173 6379 +f 6222 6528 6225 +f 6561 6554 6078 +f 6765 6764 6608 +f 6786 6644 7031 +f 6204 6184 6609 +f 6156 6512 6186 +f 6230 6178 6263 +f 6616 6555 6167 +f 6557 6205 6506 +f 6654 6646 6647 +f 6155 6237 6220 +f 6620 6619 6627 +f 6542 6674 6675 +f 5709 6105 6525 +f 6137 6527 6405 +f 6760 6526 6548 +f 6394 6533 6235 +f 7184 6548 6767 +f 6279 6280 6540 +f 6090 6188 6087 +f 6091 6658 6395 +f 6155 6554 6516 +f 6122 6546 6095 +f 6963 6232 6213 +f 6533 6057 6235 +f 6396 6166 6177 +f 6537 6558 6556 +f 6220 6534 6229 +f 6549 5917 6302 +f 5922 6242 5540 +f 6244 6242 5736 +f 5226 6243 5881 +f 5236 6243 5238 +f 5736 6245 6244 +f 6244 6245 6246 +f 6149 6245 5736 +f 6246 6245 5510 +f 6247 6246 5510 +f 6246 6041 6499 +f 6148 6509 5510 +f 6041 6247 6034 +f 6546 6403 6145 +f 6090 6051 6047 +f 6390 6215 6412 +f 6190 6598 6179 +f 6509 6396 6248 +f 6247 6250 6248 +f 6043 6251 6042 +f 6248 6251 6034 +f 6179 6736 6190 +f 6530 6267 5917 +f 6405 6086 6551 +f 6218 6213 6161 +f 6201 6404 6050 +f 6088 6726 6730 +f 5884 6255 5698 +f 5519 5885 6255 +f 6256 5891 5903 +f 5896 6256 5895 +f 5333 6257 5528 +f 5914 6257 5533 +f 5531 6260 6259 +f 6141 6511 6528 +f 6260 5531 5711 +f 6259 6258 6082 +f 6260 5711 6263 +f 6511 6230 6194 +f 6233 5919 6267 +f 6037 6045 6060 +f 6315 6288 6307 +f 6506 6065 6214 +f 6263 5711 6557 +f 6230 6263 6262 +f 6281 6273 6280 +f 6298 6299 3284 +f 6322 6525 6553 +f 6273 6281 6267 +f 5907 5908 6285 +f 6669 6322 6545 +f 5531 5716 6322 +f 5917 6281 6283 +f 6540 6276 6295 +f 6273 6277 6280 +f 6671 6536 6541 +f 6278 6276 6277 +f 6284 6294 6293 +f 6233 6105 5715 +f 6290 6269 5543 +f 6293 6294 6269 +f 6274 6294 6271 +f 5913 6277 6273 +f 5919 6273 6267 +f 6275 5906 5251 +f 6292 6293 6290 +f 6289 5911 4969 +f 5906 6275 6274 +f 6278 6277 5913 +f 6672 6536 6266 +f 6540 6280 6276 +f 6270 6278 5913 +f 6672 6296 6541 +f 6287 6538 6313 +f 6283 6300 6282 +f 6276 6280 6277 +f 6281 6280 6279 +f 6287 6300 6279 +f 6281 5917 6267 +f 6304 6305 6311 +f 6283 6302 5917 +f 6279 6283 6281 +f 6301 6302 6303 +f 5906 6274 6285 +f 6284 6266 6271 +f 6271 6285 6274 +f 6272 6295 6286 +f 5921 6540 6295 +f 6543 6287 6279 +f 6539 6456 6089 +f 6307 6308 6305 +f 6317 6314 6515 +f 5911 6289 6275 +f 5543 6289 4969 +f 6291 5543 5927 +f 6293 6292 6265 +f 5250 6290 6291 +f 5543 6291 6290 +f 6284 6293 6265 +f 6290 5250 6292 +f 6290 6293 6269 +f 6294 6274 6269 +f 6284 6271 6294 +f 6264 6677 6678 +f 6670 6286 6295 +f 6298 6266 6284 +f 5921 6295 6544 +f 6297 6541 6296 +f 5701 6536 6671 +f 6295 6272 6544 +f 6672 3284 6296 +f 6279 6300 6283 +f 6284 6299 6298 +f 6313 6300 6287 +f 6303 6283 6282 +f 6580 6288 6317 +f 6303 6302 6283 +f 6302 6301 6549 +f 6305 6303 6282 +f 6301 6303 6308 +f 6312 6282 6313 +f 6126 6172 6218 +f 6456 6312 6313 +f 6307 6305 6304 +f 6574 6581 6566 +f 6206 6319 6310 +f 6316 6314 6315 +f 6529 6308 6288 +f 6305 6308 6303 +f 6288 6308 6307 +f 6282 6312 6305 +f 6539 6309 6456 +f 6565 6200 6531 +f 6234 6529 6110 +f 6312 6311 6305 +f 6568 6309 6565 +f 6300 6313 6282 +f 6311 6312 6309 +f 5921 6544 6556 +f 6678 6535 6139 +f 6317 6515 6205 +f 6288 6315 6317 +f 6316 6307 6304 +f 6317 6315 6314 +f 6309 6568 6311 +f 6314 6316 6319 +f 6515 6206 8495 +f 6576 6110 6580 +f 6539 6200 6565 +f 6576 6669 6110 +f 6316 6321 6319 +f 6817 6319 6321 +f 6676 6531 6320 +f 6563 6696 6318 +f 6676 6316 6304 +f 6320 6700 6817 +f 5709 5714 6105 +f 6529 6549 6301 +f 6389 6106 6077 +f 5920 6323 5712 +f 1877 2614 6324 +f 2613 6324 2614 +f 5758 5761 5759 +f 5757 6325 5642 +f 6336 6326 6338 +f 6435 6327 6343 +f 6438 6185 6436 +f 6442 5975 6330 +f 6334 6335 6343 +f 6328 6327 6441 +f 6335 6332 6337 +f 6343 6335 6337 +f 6330 6334 5973 +f 6358 6355 6349 +f 6359 6361 6356 +f 6416 6339 6371 +f 6383 6452 6365 +f 6346 6350 6344 +f 6332 5988 6339 +f 6425 5960 5969 +f 6428 6424 5975 +f 5975 6424 6426 +f 6442 6330 5973 +f 6433 6326 6446 +f 6591 6588 6594 +f 5990 6185 6450 +f 5679 6421 6341 +f 5991 5963 8487 +f 6432 6431 6444 +f 6371 6339 6331 +f 6341 5991 5768 +f 6336 6421 6326 +f 4847 6593 6182 +f 6332 6339 6416 +f 5972 6329 6429 +f 6328 6342 6430 +f 6338 6589 6336 +f 6437 6447 6448 +f 6441 6342 6328 +f 6422 6344 5675 +f 6344 5985 6346 +f 5985 6347 6351 +f 6351 6345 6346 +f 5985 6423 6347 +f 6348 6346 6345 +f 6081 6130 6199 +f 6351 6353 6345 +f 6348 6345 6349 +f 6354 6434 6348 +f 6353 6356 6358 +f 6355 6331 6339 +f 6429 5782 5972 +f 6344 6350 5974 +f 5985 6351 6346 +f 6107 6357 6353 +f 6352 6353 6357 +f 6360 6361 6364 +f 6107 6351 6347 +f 6355 6358 6520 +f 6419 5981 6337 +f 6348 6349 6354 +f 6333 6349 6355 +f 6349 6345 6358 +f 6352 6359 6353 +f 6356 6353 6359 +f 6199 6347 6423 +f 6153 6386 6130 +f 6353 6358 6345 +f 6358 6356 6520 +f 6372 6362 6366 +f 6363 6520 6361 +f 6364 6366 6362 +f 6365 6410 6368 +f 6366 6364 6361 +f 6363 6361 6360 +f 6381 6388 6387 +f 6377 6360 6370 +f 6371 6363 6378 +f 6331 6355 6520 +f 6366 6361 6359 +f 6373 6370 6364 +f 6360 6364 6370 +f 6454 6922 6929 +f 6359 6352 6366 +f 6375 6372 6366 +f 6373 6367 6370 +f 6368 6378 6383 +f 6360 6377 6378 +f 6409 6410 6365 +f 6372 6375 6369 +f 6373 6362 6381 +f 6373 6364 6362 +f 6398 6377 6367 +f 6378 6363 6360 +f 6416 6371 6368 +f 6375 6366 6352 +f 6382 6372 6369 +f 6382 6381 6362 +f 6369 6386 6112 +f 6387 6393 6367 +f 6367 6393 6398 +f 6357 6109 6352 +f 6107 6199 6357 +f 6021 6603 8492 +f 6512 6521 6564 +f 6367 6377 6370 +f 6378 6377 6374 +f 6383 6378 6374 +f 6371 6378 6368 +f 6169 6507 6198 +f 6603 6021 6018 +f 6210 6094 6467 +f 6453 6374 6397 +f 6382 6362 6372 +f 6388 6381 6376 +f 6369 6112 6392 +f 6381 6382 6376 +f 6388 6376 6071 +f 6368 6383 6365 +f 6374 6377 6398 +f 6440 4851 6448 +f 6390 6459 6397 +f 6072 6469 6412 +f 6375 6352 6109 +f 6106 6102 6180 +f 6381 6387 6373 +f 6514 6176 5712 +f 6389 6152 6411 +f 6376 6411 6071 +f 6114 6180 6379 +f 6566 6539 6559 +f 6053 6393 6191 +f 6384 6601 6127 +f 6200 6539 6566 +f 6238 6403 6665 +f 6369 6392 6382 +f 6140 6380 6261 +f 6387 6388 6191 +f 6390 6397 6398 +f 6024 6524 6493 +f 6086 6405 6201 +f 6524 6024 6468 +f 6174 6525 6322 +f 6181 6722 6152 +f 6524 6526 6493 +f 6458 6397 6459 +f 6919 6463 6413 +f 6390 6398 6393 +f 6374 6398 6397 +f 6942 6941 6931 +f 6435 6343 6337 +f 6081 6199 5977 +f 6210 6049 6223 +f 6469 6459 6412 +f 6468 6145 6403 +f 6406 6472 6474 +f 6334 6343 5973 +f 6468 6052 6145 +f 6108 6086 6201 +f 6412 6215 6147 +f 6056 6258 6141 +f 6186 6512 6194 +f 6182 6113 4847 +f 6453 6383 6374 +f 6365 6384 6409 +f 6329 6407 6443 +f 6476 6477 6473 +f 5989 6407 6342 +f 5981 6419 6417 +f 6453 6452 6383 +f 6409 6408 6410 +f 6410 6408 6417 +f 6417 6419 6410 +f 6094 5897 6062 +f 6385 6452 6453 +f 6390 6053 6215 +f 6927 6923 6602 +f 6393 6053 6390 +f 6466 6455 6475 +f 6085 7045 6767 +f 6460 5987 6461 +f 6350 6424 5974 +f 6445 6476 6478 +f 6332 6416 6419 +f 6368 6410 6416 +f 6365 6452 6384 +f 6420 5981 6417 +f 6451 6427 6406 +f 6326 6433 6338 +f 6924 6925 7156 +f 6410 6419 6416 +f 6505 6417 6408 +f 6334 6333 5988 +f 6326 6421 6446 +f 5991 6336 5963 +f 5979 6422 5984 +f 6344 6422 5985 +f 6490 6423 5979 +f 6423 5977 6199 +f 6424 5972 5980 +f 6451 6441 6470 +f 6425 5966 6444 +f 6434 6424 6350 +f 6330 5975 6426 +f 6465 6413 6463 +f 6488 7156 6486 +f 6431 6429 6329 +f 6329 5972 6428 +f 6432 6429 6431 +f 6430 5975 6442 +f 6430 6342 6407 +f 6430 6407 6329 +f 6445 6471 6476 +f 5968 6432 5966 +f 5782 6429 6432 +f 6445 6415 6425 +f 6171 6431 6329 +f 6330 6434 6354 +f 6424 6434 6426 +f 6436 6435 6337 +f 6327 6435 5990 +f 5981 6439 6438 +f 6435 6436 5990 +f 6449 6437 5986 +f 6185 6447 6449 +f 5981 6420 6439 +f 6439 6447 6438 +f 6440 6448 6439 +f 6440 6439 6418 +f 6457 6463 6466 +f 6505 6420 6417 +f 6460 6441 5987 +f 6462 6470 6460 +f 5973 6328 6442 +f 6430 6442 6328 +f 6451 6342 6441 +f 6445 6431 6471 +f 6432 6444 5966 +f 6444 6431 6445 +f 5989 6443 6407 +f 6171 6471 6431 +f 6445 6446 6415 +f 6478 6433 6446 +f 6437 6449 6447 +f 6448 4851 6437 +f 6448 6447 6439 +f 6450 6449 5986 +f 6185 5990 6436 +f 6461 5986 6402 +f 5987 5990 6450 +f 6127 6408 6409 +f 6440 6486 4851 +f 6457 6465 6463 +f 6342 6451 5989 +f 6385 6384 6452 +f 6475 6601 6384 +f 6399 6479 6474 +f 6474 6479 6477 +f 6736 6179 6735 +f 6469 6072 6414 +f 6466 6475 6385 +f 6458 6385 6453 +f 6397 6458 6453 +f 6466 6458 6457 +f 6412 6459 6390 +f 6457 6458 6459 +f 6461 5987 6450 +f 6462 6460 6402 +f 5986 6461 6450 +f 6402 6460 6461 +f 6402 5970 6462 +f 6470 5970 6451 +f 6924 6923 6464 +f 6475 6384 6385 +f 6466 6463 6455 +f 6385 6458 6466 +f 6482 6479 6399 +f 6469 6465 6457 +f 6414 6465 6469 +f 6217 6144 6467 +f 6561 6514 6609 +f 6071 6411 6249 +f 6025 6532 6547 +f 7162 7160 7159 +f 6459 6469 6457 +f 6460 6470 6441 +f 5970 6470 6462 +f 5989 6484 6443 +f 6477 6406 6474 +f 6427 6451 5970 +f 6427 6472 6406 +f 6472 6399 6474 +f 6601 6475 6455 +f 6476 6471 6477 +f 6478 6476 6473 +f 6484 6471 6443 +f 6406 6477 5989 +f 6473 6481 6485 +f 6445 6478 6446 +f 6482 6480 6481 +f 6477 6479 6473 +f 6113 6481 6480 +f 6481 6473 6479 +f 6481 6113 6485 +f 5989 6477 6484 +f 6479 6482 6481 +f 6440 6488 6486 +f 6471 6484 6477 +f 6433 6478 6485 +f 6473 6485 6478 +f 6100 6488 6440 +f 6483 4851 6486 +f 6116 6100 6505 +f 6924 6917 6750 +f 6100 6440 6418 +f 6487 6924 7156 +f 5668 5643 6489 +f 6489 5643 8486 +f 6423 6490 5977 +f 6491 6490 5979 +f 5982 6491 5979 +f 5995 6491 5983 +f 6016 6492 5316 +f 8481 6492 6003 +f 5817 6202 5854 +f 6657 6188 6395 +f 6494 6496 6495 +f 6136 6494 6024 +f 6052 6495 6092 +f 6494 6164 6496 +f 6133 6496 5804 +f 6092 6495 6496 +f 6240 6657 6395 +f 6153 6093 6173 +f 6403 6238 6667 +f 6395 6103 6091 +f 5878 6499 5876 +f 6246 6499 5694 +f 5898 5896 6501 +f 6062 6500 6063 +f 6501 5895 6503 +f 5898 6501 6500 +f 6046 6502 5696 +f 5900 6502 6073 +f 5901 6503 5895 +f 6067 6503 6075 +f 6313 6675 6089 +f 6488 6100 6487 +f 6964 6125 6962 +f 6005 6164 5817 +f 6563 6695 6696 +f 6504 6180 6114 +f 6361 6520 6356 +f 7182 7510 7511 +f 5510 6509 6250 +f 6550 6225 6511 +f 5712 6323 6514 +f 6146 6111 6055 +f 6514 6561 6176 +f 6517 6508 6224 +f 6051 6087 6513 +f 6231 6229 6187 +f 6796 6798 6661 +f 6213 6218 6183 +f 6078 6176 6561 +f 6157 6230 6511 +f 6738 6739 6600 +f 6208 6124 6119 +f 6518 6232 6552 +f 8496 8495 6310 +f 6162 6186 6160 +f 6557 6262 6263 +f 6159 6564 6158 +f 6186 6162 6156 +f 6141 6157 6511 +f 6516 6204 6161 +f 6161 6213 6518 +f 6517 6519 6195 +f 6331 6520 6363 +f 6154 6226 6187 +f 6161 6204 6126 +f 6554 6561 6184 +f 6207 6162 6189 +f 6203 6228 6613 +f 6468 6667 6668 +f 6647 6239 6523 +f 6524 6668 6526 +f 6137 6405 6551 +f 6049 6959 6235 +f 6549 6553 6530 +f 6168 6551 6086 +f 6959 6610 6771 +f 6234 6549 6529 +f 6549 6530 5917 +f 6672 6266 6298 +f 6400 6531 6200 +f 6541 6670 6671 +f 6545 6234 6110 +f 6527 6532 6405 +f 6538 5921 6556 +f 6676 6320 6321 +f 6571 6570 6574 +f 6175 6526 5837 +f 6064 6405 6532 +f 6663 6664 6240 +f 6103 6236 6091 +f 6647 6523 6203 +f 6079 6188 6048 +f 5919 6233 5715 +f 6311 6568 6304 +f 6541 6297 6670 +f 6681 6571 6306 +f 6553 6525 6105 +f 6200 6581 6562 +f 6566 6559 6575 +f 6570 6579 6574 +f 6575 6571 6574 +f 6681 6306 6573 +f 6549 6234 6553 +f 6400 6318 6818 +f 6574 6566 6575 +f 6308 6529 6301 +f 6309 6539 6565 +f 6556 6558 6542 +f 6542 6538 6556 +f 6530 6233 6267 +f 5921 6543 6540 +f 6674 6673 6264 +f 6056 6528 5722 +f 6322 6553 6545 +f 6555 6228 6523 +f 6512 6156 6521 +f 6660 6236 6066 +f 6025 6547 6058 +f 6161 6518 6516 +f 6547 6527 6241 +f 6545 6553 6234 +f 6543 6538 6287 +f 6152 6080 6135 +f 8525 6754 6757 +f 6562 6581 6569 +f 5761 6585 6584 +f 6554 6231 6078 +f 6238 7036 6667 +f 6580 6529 6288 +f 6197 6627 6655 +f 6137 6534 6522 +f 6196 6231 6554 +f 6196 6155 6220 +f 6228 6203 6523 +f 6578 6306 6571 +f 5921 6538 6543 +f 6564 6195 6512 +f 6314 6206 6515 +f 6671 6670 6276 +f 6200 6562 6400 +f 6581 6579 6569 +f 6614 6615 6618 +f 6568 6531 6676 +f 6571 6575 6582 +f 6562 6563 6318 +f 6534 6239 6522 +f 6139 6559 6089 +f 6200 6566 6581 +f 6539 6089 6559 +f 6575 6559 6535 +f 6550 6194 6512 +f 6403 6546 6533 +f 6562 6569 6814 +f 6691 6680 6689 +f 5758 6585 5761 +f 8544 7053 5534 +f 6230 6262 6160 +f 6527 6547 6532 +f 6396 6510 6166 +f 6684 6682 6683 +f 6544 6272 6537 +f 6579 6680 6569 +f 6588 5963 6589 +f 6565 6531 6568 +f 6574 6579 6581 +f 6576 5711 6669 +f 6571 6582 6578 +f 6571 6681 6570 +f 6115 5573 6583 +f 7037 6813 7036 +f 6563 6814 6680 +f 6535 6582 6575 +f 6560 6578 6582 +f 6584 5961 5761 +f 6936 6943 6933 +f 6585 6597 6584 +f 6576 6317 6205 +f 5763 8487 6587 +f 6576 6580 6317 +f 6529 6580 6110 +f 6582 6535 6560 +f 6593 6590 6592 +f 5963 6588 6587 +f 6585 6586 6391 +f 6570 6681 6577 +f 6680 6579 6577 +f 6597 6391 6596 +f 6577 6579 6570 +f 6336 6589 5963 +f 6595 6591 6594 +f 6340 6589 6338 +f 6587 6591 6586 +f 6340 6592 6588 +f 6592 6594 6588 +f 6340 6182 6593 +f 6592 6590 6594 +f 6590 6593 4847 +f 6340 6593 6592 +f 6590 5962 6594 +f 6595 6594 5962 +f 6596 6595 5962 +f 6591 6595 6391 +f 5962 6115 6596 +f 6583 6597 6115 +f 6391 6597 6585 +f 6115 6597 6596 +f 6152 6722 6249 +f 6723 6726 6725 +f 6249 6599 6071 +f 6190 6599 6598 +f 6745 6118 6743 +f 6179 6724 6088 +f 6918 6601 6455 +f 6127 6601 6165 +f 6918 6455 6921 +f 6924 6464 6925 +f 6020 6605 6018 +f 6096 8525 8492 +f 5824 6751 6607 +f 6096 6603 6604 +f 6607 6605 5824 +f 6018 6605 6604 +f 6759 6761 5856 +f 6604 6752 6096 +f 6751 5824 5848 +f 6752 6607 6606 +f 6759 6760 6608 +f 6753 6763 6762 +f 5735 6609 6514 +f 6609 6252 6126 +f 6769 6467 6144 +f 6227 6809 6610 +f 6611 6790 6661 +f 6629 7188 6625 +f 6691 6695 6563 +f 6640 6638 6622 +f 6616 6618 6228 +f 6197 6203 6613 +f 6623 6617 6624 +f 6197 6615 6620 +f 6228 6615 6613 +f 6620 6621 6619 +f 6555 6616 6228 +f 6963 6213 6961 +f 6614 6645 6633 +f 6771 6808 7042 +f 6228 6618 6615 +f 6785 6618 6616 +f 6615 6621 6620 +f 6626 6619 6624 +f 6621 6615 6614 +f 6627 6619 6626 +f 6631 6623 6633 +f 6619 6621 6623 +f 6705 6704 7056 +f 6617 6623 6630 +f 6621 6614 6633 +f 6631 6628 6630 +f 6773 6629 6626 +f 6619 6623 6624 +f 6634 6617 6630 +f 6792 6796 6661 +f 6773 6624 6617 +f 6620 6627 6197 +f 6625 6656 6626 +f 6650 6648 6652 +f 6638 6628 6631 +f 6629 6625 6626 +f 6617 6634 6635 +f 6629 6773 6635 +f 6631 6630 6623 +f 6628 6783 6634 +f 6623 6621 6633 +f 6631 6622 6638 +f 6643 6628 6642 +f 6632 6637 6635 +f 6785 6645 6614 +f 6631 6633 7030 +f 6628 6634 6630 +f 6634 6632 6635 +f 6628 6638 6642 +f 6667 7036 6085 +f 6726 6088 6724 +f 6600 6739 6746 +f 6783 6643 6782 +f 6982 7190 6637 +f 7216 7029 6640 +f 6641 6642 6640 +f 6844 7250 6780 +f 7063 6977 6641 +f 6789 6622 7030 +f 6640 7029 7252 +f 6641 6640 6775 +f 6978 6783 6782 +f 6640 6642 6638 +f 6643 6642 6641 +f 6843 6976 6834 +f 6977 6979 6643 +f 6863 6858 6862 +f 7030 6645 7031 +f 6614 6618 6785 +f 6786 7031 6645 +f 6655 6654 6197 +f 6527 6649 6241 +f 6239 6647 6522 +f 6654 6647 6203 +f 6652 6653 6651 +f 6646 6650 6649 +f 6137 6646 6649 +f 6646 6654 6650 +f 6652 6648 6653 +f 6241 6649 6650 +f 7512 7513 6972 +f 6241 6650 7517 +f 6648 6655 6653 +f 6652 6651 7517 +f 6656 6627 6626 +f 6653 6656 7515 +f 6197 6654 6203 +f 6650 6654 6648 +f 6653 6655 6627 +f 6654 6655 6648 +f 7515 6656 6625 +f 6627 6656 6653 +f 6657 6087 6188 +f 6770 6240 6664 +f 6659 6658 6091 +f 6240 6395 6658 +f 6660 6659 6091 +f 6659 6611 6662 +f 6236 6660 6091 +f 6660 6066 6661 +f 6791 6025 6792 +f 6661 6791 6792 +f 6800 6611 6798 +f 6662 6227 6664 +f 6659 6663 6658 +f 6664 6663 6662 +f 6227 6610 6664 +f 6610 6768 6769 +f 6533 6665 6403 +f 7037 6665 6394 +f 6986 6987 6636 +f 7183 7184 6958 +f 6668 6667 6085 +f 6403 6667 6468 +f 6526 6668 6548 +f 6468 6668 6524 +f 6322 6669 5531 +f 6110 6669 6545 +f 6286 6670 6297 +f 6276 6670 6295 +f 6276 6278 6671 +f 5701 6671 6278 +f 6672 6541 6536 +f 3284 6672 6298 +f 6675 6674 6139 +f 6542 6558 6673 +f 6673 6674 6542 +f 6089 6675 6139 +f 6538 6675 6313 +f 6316 6676 6321 +f 6568 6676 6304 +f 6678 6674 6264 +f 6560 6535 6677 +f 6535 6678 6677 +f 6685 6680 6577 +f 6704 6819 6824 +f 6683 6577 6681 +f 6689 6680 6685 +f 6684 6573 6572 +f 6682 7052 6690 +f 6683 6685 6577 +f 6684 6683 6681 +f 6683 6682 6685 +f 6573 6684 6681 +f 6684 6572 7053 +f 7058 7052 6815 +f 6689 6690 6687 +f 7549 6861 6841 +f 6699 6706 6679 +f 6694 6708 6707 +f 6680 6691 6563 +f 7053 6815 7052 +f 6688 6686 6710 +f 6690 6689 6685 +f 6689 6687 6691 +f 6682 6690 6685 +f 6690 6688 6710 +f 6694 6691 6687 +f 6695 6694 6702 +f 6692 6694 6707 +f 6711 6692 6707 +f 6703 6699 6679 +f 6698 6696 6693 +f 6712 6708 6710 +f 6702 6694 6692 +f 6694 6695 6691 +f 6695 6693 6696 +f 6697 6698 6699 +f 6698 6700 6696 +f 6679 6819 6820 +f 6816 6310 6817 +f 6698 6693 6699 +f 6697 7054 6698 +f 6716 6693 6702 +f 6706 6699 6716 +f 7054 6816 6817 +f 6818 6700 6320 +f 7061 6686 7058 +f 6819 6704 6705 +f 6702 6692 6716 +f 6695 6702 6693 +f 6705 6820 6819 +f 6697 6699 6703 +f 6721 6719 6720 +f 6822 6863 6823 +f 6873 6704 6872 +f 6319 6817 6310 +f 6706 6716 6718 +f 6719 6706 6718 +f 6708 6694 6687 +f 6711 6707 6715 +f 6710 6708 6687 +f 6701 6707 6708 +f 6701 6708 6712 +f 7062 6829 6777 +f 6710 6687 6690 +f 6710 6686 6712 +f 6715 6707 6701 +f 6718 6711 6836 +f 6832 6836 6711 +f 6826 6827 6719 +f 6829 6845 6777 +f 6855 6827 6717 +f 6836 6709 6843 +f 6832 6711 6715 +f 6712 6839 6701 +f 7062 6701 6829 +f 6716 6699 6693 +f 6718 6716 6692 +f 6713 6976 6853 +f 7385 6784 7032 +f 6692 6711 6718 +f 6718 6836 6719 +f 6639 6709 6838 +f 6721 6679 6706 +f 6719 6827 6720 +f 6824 6822 6823 +f 6719 6721 6706 +f 6821 6721 6720 +f 6725 6722 6181 +f 6599 6722 6598 +f 6748 6749 6746 +f 7476 7477 7479 +f 6725 6724 6598 +f 6724 6725 6726 +f 6722 6725 6598 +f 6725 6181 7138 +f 7147 7150 7137 +f 6730 6729 6888 +f 6728 6888 6890 +f 6726 6723 6729 +f 7018 7007 7017 +f 6736 7409 7416 +f 7144 7152 6749 +f 6888 6729 6727 +f 6729 6730 6726 +f 7395 7396 6728 +f 6890 7395 6728 +f 6941 6952 6931 +f 7396 6730 6728 +f 7631 6734 6732 +f 6731 7401 7404 +f 6190 6736 6737 +f 7631 6732 6731 +f 6735 6734 6733 +f 6736 6735 6733 +f 6088 6735 6179 +f 7409 6736 6733 +f 6737 6736 6147 +f 6215 6737 6147 +f 6190 6737 6211 +f 6740 6135 6080 +f 6600 7151 7138 +f 6741 6739 6740 +f 6741 6746 6739 +f 6209 6740 6117 +f 6739 6135 6740 +f 7508 6743 6741 +f 6746 6741 6118 +f 7509 7182 7508 +f 6914 6905 6906 +f 7508 6741 6209 +f 6891 7127 6742 +f 6894 6900 6903 +f 6747 6892 6896 +f 6742 6745 6743 +f 6746 6118 6748 +f 6118 6893 6748 +f 7127 6892 6745 +f 6893 6747 6748 +f 6746 6749 6600 +f 6893 6118 6745 +f 6747 7130 6748 +f 6892 6897 6896 +f 6729 7136 7135 +f 6165 6601 6918 +f 6602 6923 6920 +f 6761 6751 5856 +f 6607 6751 6606 +f 6763 6755 6752 +f 6754 6752 6755 +f 6755 6763 6753 +f 6901 6902 6899 +f 6757 6754 6497 +f 6096 6752 6754 +f 6763 6752 6606 +f 6755 6753 6913 +f 6757 6758 7180 +f 8526 8491 8525 +f 6758 6757 6497 +f 6757 6756 8525 +f 6904 6915 6913 +f 6956 7181 7511 +f 5837 6526 6760 +f 6761 6759 6608 +f 6760 6548 6765 +f 5837 6760 6759 +f 6761 6608 6762 +f 6761 6606 6751 +f 6608 6764 6762 +f 6902 6915 6914 +f 6606 6761 6763 +f 6762 6763 6761 +f 6608 6760 6765 +f 6905 6764 6070 +f 6548 6668 6767 +f 6764 6765 7183 +f 7036 7038 7045 +f 6899 6909 6903 +f 6085 6767 6668 +f 6767 6766 7184 +f 6210 6768 6049 +f 6769 6768 6467 +f 6770 6144 6657 +f 6664 6610 6769 +f 6240 6770 6657 +f 6664 6769 6770 +f 6804 6798 6794 +f 7041 6771 7042 +f 6961 6183 6962 +f 6787 6967 7122 +f 6624 6773 6626 +f 6635 6773 6617 +f 7225 7224 7228 +f 6797 6796 6792 +f 6828 6781 7557 +f 7613 7615 7616 +f 6846 6851 7066 +f 8545 7244 7243 +f 6843 6639 6976 +f 6641 6977 6643 +f 7256 6713 7075 +f 6843 6834 6826 +f 6841 7550 7549 +f 7100 6859 6840 +f 6842 6833 6845 +f 6978 6637 6632 +f 7258 7552 6834 +f 6840 6833 6842 +f 6979 7250 6981 +f 6978 6982 6637 +f 6634 6783 6632 +f 6628 6643 6783 +f 6879 6880 6870 +f 7097 7096 7091 +f 6616 7186 6788 +f 6645 6785 6786 +f 6786 6785 6788 +f 7122 7123 6787 +f 6788 6785 6616 +f 7124 7122 6967 +f 7186 6616 6167 +f 6786 6788 6787 +f 7031 7032 7218 +f 7029 7216 7217 +f 6659 6790 6611 +f 6660 6661 6790 +f 6066 6025 6791 +f 6792 6025 6058 +f 7514 6651 7515 +f 6058 6801 6792 +f 6997 7212 7194 +f 6806 6805 6227 +f 6804 6799 6800 +f 6806 6227 6662 +f 7518 7514 7516 +f 6803 6797 6795 +f 6792 6801 6797 +f 6798 6796 6794 +f 6793 7221 6803 +f 6794 6796 6797 +f 6800 6798 6804 +f 6661 6798 6611 +f 6797 6803 6794 +f 6809 6808 6771 +f 6800 6799 6805 +f 6611 6800 6806 +f 6058 7517 7518 +f 6797 6801 6795 +f 6811 6812 7035 +f 7227 7230 6810 +f 6803 6795 7520 +f 6794 6803 6802 +f 6802 6807 6794 +f 6807 6804 6794 +f 6808 6805 6799 +f 6809 6805 6808 +f 6611 6806 6662 +f 6805 6806 6800 +f 6807 6802 6812 +f 6807 7219 7220 +f 7219 6807 6812 +f 7041 6235 6959 +f 6610 6809 6771 +f 6227 6805 6809 +f 6998 6987 6995 +f 6988 6991 6993 +f 6812 7221 7035 +f 7034 7226 7227 +f 6812 6802 7221 +f 6812 6811 7230 +f 6238 7037 7036 +f 7038 6813 7050 +f 6562 6814 6563 +f 6569 6680 6814 +f 6719 6836 6843 +f 6686 6688 7058 +f 7055 6816 7054 +f 6705 7056 7057 +f 6320 6817 6321 +f 7054 6817 6700 +f 6400 6818 6320 +f 6696 6818 6318 +f 6821 6679 6721 +f 6819 6679 6821 +f 6820 6705 7055 +f 6679 6820 6703 +f 6720 6827 6855 +f 6821 6720 6822 +f 6841 6856 6717 +f 6824 6819 6821 +f 6835 7550 6717 +f 6872 6823 6871 +f 6822 6824 6821 +f 6704 6824 6823 +f 6825 7121 8494 +f 8496 6816 7057 +f 7265 7266 7268 +f 6832 6838 6709 +f 6826 6719 6843 +f 6848 7560 7079 +f 7724 6989 6990 +f 6827 6835 6717 +f 7099 6839 6686 +f 7243 7246 8544 +f 7099 6829 6839 +f 6784 7387 7334 +f 6836 6832 6709 +f 6859 6833 6840 +f 7062 6832 6715 +f 6832 6831 6838 +f 6847 7065 7095 +f 6835 6827 6826 +f 6856 6822 6855 +f 7065 6847 7101 +f 6859 7100 7251 +f 6779 7251 7100 +f 6688 7052 7058 +f 7101 6830 6974 +f 6854 6845 7099 +f 6709 6639 6843 +f 6845 6833 6777 +f 6831 6777 6859 +f 7256 6976 6713 +f 6775 7095 7063 +f 6974 6844 6780 +f 6639 6838 7251 +f 6866 6884 6864 +f 7099 6845 6829 +f 7374 7373 7381 +f 6840 6842 6846 +f 7065 6974 7063 +f 6851 6849 7066 +f 7094 7071 7074 +f 6859 6838 6831 +f 7100 6840 7262 +f 7868 7867 7605 +f 6701 6839 6829 +f 6854 7099 6837 +f 7319 7299 7330 +f 7074 7102 6849 +f 7265 7321 7067 +f 7262 6840 7073 +f 7069 7081 7086 +f 7727 7570 7562 +f 7388 7392 7556 +f 6846 6842 6851 +f 6849 6851 7094 +f 7087 7086 7081 +f 6857 6858 6864 +f 6776 6846 7066 +f 6852 7101 6847 +f 7392 7390 6869 +f 7557 7555 6828 +f 6856 6855 6717 +f 6720 6855 6822 +f 6858 6856 6841 +f 6822 6856 6863 +f 6841 6861 6858 +f 6969 7119 6970 +f 6835 6826 6834 +f 6858 6857 6862 +f 7071 7094 7060 +f 7550 7548 7549 +f 7521 7250 6980 +f 7110 6869 6875 +f 6852 6830 7101 +f 6861 6860 6864 +f 6874 6868 6871 +f 6823 6862 6871 +f 6858 6863 6856 +f 6823 6863 6862 +f 6861 6864 6858 +f 6865 6876 6875 +f 7217 6784 7029 +f 6876 6866 6875 +f 7110 6864 6860 +f 6879 6870 6876 +f 6878 6884 6876 +f 6207 7117 6162 +f 6882 6862 6857 +f 6873 6868 7108 +f 6845 6854 6842 +f 7079 6850 7102 +f 6885 6883 6867 +f 6878 6883 6885 +f 6871 6862 6882 +f 6872 6871 6868 +f 6872 6868 6873 +f 6823 6872 6704 +f 7108 6868 7118 +f 8494 7121 6221 +f 6884 6878 6857 +f 6874 6885 7118 +f 7110 6875 6866 +f 7390 6875 6869 +f 6879 6865 6877 +f 6876 6870 6878 +f 7386 7385 7390 +f 6877 6881 6880 +f 6878 6870 6883 +f 6878 6874 6882 +f 6865 6879 6876 +f 6880 6879 6877 +f 7032 6644 7033 +f 6880 6612 6886 +f 6644 6786 7123 +f 6612 6880 6881 +f 6878 6882 6857 +f 6871 6882 6874 +f 6886 6870 6880 +f 6883 6870 6886 +f 6864 6884 6857 +f 6876 6884 6866 +f 7118 6885 6867 +f 6878 6885 6874 +f 6887 6612 7124 +f 6971 6965 6968 +f 6887 7124 6966 +f 6966 6965 6887 +f 7148 6890 6727 +f 6730 6888 6728 +f 7746 7890 7442 +f 6950 6955 7644 +f 6727 6890 6888 +f 7397 7395 6890 +f 6742 7128 6891 +f 7129 6497 6912 +f 6744 6901 6897 +f 6897 6895 6896 +f 6745 6892 6893 +f 6747 6893 6892 +f 6903 6909 7133 +f 6749 6748 7130 +f 7027 7021 7023 +f 6898 7130 6896 +f 6897 6892 6744 +f 6896 6895 6898 +f 6901 6744 6902 +f 6897 6901 6903 +f 7708 7477 7476 +f 6729 7135 6727 +f 6958 7185 7183 +f 6900 6897 6903 +f 6900 6894 7477 +f 6895 6897 6900 +f 6744 7127 6902 +f 6901 6899 6903 +f 6755 6913 6497 +f 6762 6904 6753 +f 6899 6906 6908 +f 6909 6899 6908 +f 6905 6904 6762 +f 6914 6915 6904 +f 6764 6905 6762 +f 6906 6905 6070 +f 7185 6908 6906 +f 6899 6902 6914 +f 7241 7543 7546 +f 6911 6909 6907 +f 7185 6906 6070 +f 6908 6907 6909 +f 7038 7051 7045 +f 7474 7133 6911 +f 7223 6810 7222 +f 7003 6996 6999 +f 7051 6958 6766 +f 7543 7474 6911 +f 7134 6912 6915 +f 6891 7128 7129 +f 6904 6913 6753 +f 6497 6913 6912 +f 6905 6914 6904 +f 6899 6914 6906 +f 7134 6915 6902 +f 6913 6915 6912 +f 7480 7144 6898 +f 7708 7482 7480 +f 6116 6917 6487 +f 6918 6917 6165 +f 6463 6919 6921 +f 6927 6922 6926 +f 6932 6919 7158 +f 6920 6919 6602 +f 6750 6918 6920 +f 6920 6918 6921 +f 6463 6921 6455 +f 6920 6921 6919 +f 6920 6923 6750 +f 6923 6924 6750 +f 6932 6930 7157 +f 6926 6922 6464 +f 7156 6925 6483 +f 6924 6487 6917 +f 6927 6926 6923 +f 6464 6923 6926 +f 6922 6927 6929 +f 6937 6944 6940 +f 7159 7160 7166 +f 6933 6454 6929 +f 6930 6929 6927 +f 6929 6930 6933 +f 6602 7157 6927 +f 7157 6919 6932 +f 6932 7158 7161 +f 6935 6939 6942 +f 7158 6919 6413 +f 6928 6930 6932 +f 6936 6930 6928 +f 6933 6943 6454 +f 7163 7161 7158 +f 6948 7170 6947 +f 6934 6937 6940 +f 6930 6936 6933 +f 6928 6937 6936 +f 6939 6937 6934 +f 7396 7401 6731 +f 6732 7396 6731 +f 6939 6934 6941 +f 6943 6939 6935 +f 6944 6937 6928 +f 7170 7177 7174 +f 6948 6941 6934 +f 6952 6949 6931 +f 6454 6943 6935 +f 6941 6942 6939 +f 6937 6943 6936 +f 7161 6928 6932 +f 6944 7161 7164 +f 7168 7179 7178 +f 7886 7644 6401 +f 6948 6947 6953 +f 7170 6948 6934 +f 7170 6934 6940 +f 7644 7886 6950 +f 6952 6953 7887 +f 6955 6946 6945 +f 6953 6946 6950 +f 7174 6946 6947 +f 6950 6946 6955 +f 7173 7635 7643 +f 7168 7165 7633 +f 6948 6952 6941 +f 6947 6946 6953 +f 6950 7886 7887 +f 6953 6952 6948 +f 7637 7646 7643 +f 8217 8218 8221 +f 7642 6945 7641 +f 6955 7642 8219 +f 6756 7180 6956 +f 6956 7180 7181 +f 6957 6198 8526 +f 6504 6957 6956 +f 7045 7051 6766 +f 7185 6958 7242 +f 6959 6049 6768 +f 6959 6771 7041 +f 7225 7042 6808 +f 7048 6813 7037 +f 6183 6964 6962 +f 6963 6772 6967 +f 6962 6125 6965 +f 6772 6961 6962 +f 7186 6787 6788 +f 6232 6963 6167 +f 6567 6964 6183 +f 6125 6964 6158 +f 6125 6968 6965 +f 6969 6971 6968 +f 6772 6962 6966 +f 6965 6966 6962 +f 6967 6772 7124 +f 6787 6963 6967 +f 6521 6968 6125 +f 6969 6968 6219 +f 7393 6162 7117 +f 6883 6970 6867 +f 6883 6886 6970 +f 6886 6887 7187 +f 6969 6970 6971 +f 6970 6886 7187 +f 6635 7192 6629 +f 6774 7207 7209 +f 6987 6998 7000 +f 7191 6774 7512 +f 7112 7084 7105 +f 6859 6777 6833 +f 6840 6846 7073 +f 6983 6985 6986 +f 7312 7308 7305 +f 6844 6974 6830 +f 6775 7063 6641 +f 6979 6977 6780 +f 6783 6978 6632 +f 6982 6978 6782 +f 6780 6977 7063 +f 6782 6643 6979 +f 6850 7066 7102 +f 6782 6979 6981 +f 7522 6983 6981 +f 6982 6636 7190 +f 6981 6983 6782 +f 6983 6982 6782 +f 7193 6981 7521 +f 7522 6981 7193 +f 6780 7063 6974 +f 6984 6991 6988 +f 7522 6988 6985 +f 6636 6982 6986 +f 6983 6986 6982 +f 6987 6986 6985 +f 6987 6985 6988 +f 6995 6987 6988 +f 7522 7734 6984 +f 6993 6995 6988 +f 7146 7155 7125 +f 7146 7148 7140 +f 7627 7734 7381 +f 6994 6993 6990 +f 7725 6991 6984 +f 6989 6994 6990 +f 7198 7015 7013 +f 7191 7194 6774 +f 6990 6993 6991 +f 6993 6992 6995 +f 7016 7002 7001 +f 6993 6994 7197 +f 6999 6997 6998 +f 6987 7000 6636 +f 7002 7003 6999 +f 7203 7195 6996 +f 6999 6996 7196 +f 7212 6997 7195 +f 7001 6995 6992 +f 6998 6997 7000 +f 7001 6998 6995 +f 6999 7001 7002 +f 7194 7000 6997 +f 7190 7000 6973 +f 7001 6992 7016 +f 6998 7001 6999 +f 7197 7008 7009 +f 7008 6994 6989 +f 7010 7012 7007 +f 6996 7003 7010 +f 7624 7247 7621 +f 7397 7394 6889 +f 7027 7005 7017 +f 6666 7044 7530 +f 7718 7818 7528 +f 7011 7013 7015 +f 7003 7013 7012 +f 7005 7523 7018 +f 7821 7008 6989 +f 7009 7008 7006 +f 7009 7016 7197 +f 7004 7024 7199 +f 7002 7013 7003 +f 7201 7010 7007 +f 7014 7027 7017 +f 7014 7017 7012 +f 7003 7012 7010 +f 7012 7011 7014 +f 7002 7016 7198 +f 7011 7012 7013 +f 7022 7020 7021 +f 7011 7021 7014 +f 7006 7199 7009 +f 7028 7020 7022 +f 7197 7016 6992 +f 7198 7016 7009 +f 7018 7017 7005 +f 7012 7017 7007 +f 6811 7035 7222 +f 7007 7018 7201 +f 7028 7019 7020 +f 6916 7143 7141 +f 7011 7022 7021 +f 8066 7019 8065 +f 7022 7011 7015 +f 7023 7021 7020 +f 7024 7015 7199 +f 7022 7015 7024 +f 7535 7538 8288 +f 7231 7535 7539 +f 7525 7026 7526 +f 7024 7026 7028 +f 7878 7724 7547 +f 7743 6889 7507 +f 7024 7004 7526 +f 7524 7525 7215 +f 7021 7027 7014 +f 7534 7027 7023 +f 7024 7028 7022 +f 7028 7026 7524 +f 6640 6622 7216 +f 7092 7076 7098 +f 6631 7030 6622 +f 6645 7030 6633 +f 7032 7031 6644 +f 7030 7031 6789 +f 7033 6644 6881 +f 7389 6865 7385 +f 6881 6877 7033 +f 7389 7033 6877 +f 7233 7231 7232 +f 7532 6960 7721 +f 7205 7203 7206 +f 7222 6810 6811 +f 6238 6665 7037 +f 7036 6813 7038 +f 6394 7039 7037 +f 7048 7039 7532 +f 7046 7050 7049 +f 7038 7050 7544 +f 7040 6394 6235 +f 7532 7721 7531 +f 6960 7039 7040 +f 6394 7040 7039 +f 6960 7040 7041 +f 7041 7040 6235 +f 6799 7224 6808 +f 6960 7041 7042 +f 7043 7228 7229 +f 7048 7044 7049 +f 7532 7039 6960 +f 7531 7229 7530 +f 6767 7045 6766 +f 7036 7045 6085 +f 7046 7049 7540 +f 7543 6910 7474 +f 7544 7241 7546 +f 7185 7242 6907 +f 7039 7048 7037 +f 7049 7044 6666 +f 7049 6666 7540 +f 6813 7048 7049 +f 7049 7050 6813 +f 7050 7046 7544 +f 7544 7051 7038 +f 6958 7051 7047 +f 6690 7052 6688 +f 7053 7052 6682 +f 6684 7053 6682 +f 6572 5534 7053 +f 6698 7054 6700 +f 7055 7054 6697 +f 7055 6697 6703 +f 7057 7055 6705 +f 6873 7056 6704 +f 7057 7056 6825 +f 6825 8494 8496 +f 7057 6816 7055 +f 8545 7243 7968 +f 7099 6686 7061 +f 7729 7831 7833 +f 7839 7243 8544 +f 7094 6837 7060 +f 7061 7245 7060 +f 6837 7099 7061 +f 6832 7062 6831 +f 6701 7062 6715 +f 7069 7076 7092 +f 6776 7081 7092 +f 7102 7066 6849 +f 7252 6775 6640 +f 7063 7095 7065 +f 6848 7079 6975 +f 7087 7081 6850 +f 7086 7087 7559 +f 6852 7372 7379 +f 7074 6849 7094 +f 7075 7080 7111 +f 7102 7074 6975 +f 6854 6837 7094 +f 7292 7571 7564 +f 7068 7574 7090 +f 7070 7563 7090 +f 7097 7069 7083 +f 7086 7068 7069 +f 7567 7586 7346 +f 7073 6846 7098 +f 6776 7098 6846 +f 7262 7076 7097 +f 7089 7111 7080 +f 6850 6776 7066 +f 7106 7113 7112 +f 7077 7581 7584 +f 7851 7871 7850 +f 7254 7559 7560 +f 6831 7062 6777 +f 7074 7088 7834 +f 6221 7117 6207 +f 7071 7088 7074 +f 6776 7092 7098 +f 6860 6861 6828 +f 7575 7070 7090 +f 6779 7103 6853 +f 7103 7075 6713 +f 7102 6975 7079 +f 7068 7083 7069 +f 7974 7254 7972 +f 7089 7096 7084 +f 7075 7103 7080 +f 7272 7264 7268 +f 7069 7092 7081 +f 7085 7106 7263 +f 7086 7255 7574 +f 7098 7076 7073 +f 7836 7729 7833 +f 7076 7069 7097 +f 6842 6854 6851 +f 7084 7096 7105 +f 7578 7070 7575 +f 7089 7084 7111 +f 7280 7272 7270 +f 7573 7077 7570 +f 6853 7103 6713 +f 7559 7293 7086 +f 7262 6779 7100 +f 7089 7091 7096 +f 7083 7096 7097 +f 7301 7571 7570 +f 7251 6779 6853 +f 7115 7091 7080 +f 7839 8544 5534 +f 6851 6854 7094 +f 6853 6976 6639 +f 7112 7113 7084 +f 7080 7091 7089 +f 7574 7575 7090 +f 7091 7115 7262 +f 7113 7111 7084 +f 6850 7079 7087 +f 7093 7332 7617 +f 7065 7101 6974 +f 7095 6775 7064 +f 6686 6839 6712 +f 7061 7060 6837 +f 7081 6776 6850 +f 7086 7293 8497 +f 7252 7064 6775 +f 7265 7067 7263 +f 7096 7083 7109 +f 7301 7570 7077 +f 7090 7083 7068 +f 7608 7591 7602 +f 7075 7111 7085 +f 7249 7558 7338 +f 7109 7105 7096 +f 7085 7113 7106 +f 7112 7114 7564 +f 7119 7108 7118 +f 7351 7364 7370 +f 7080 7103 7115 +f 6779 7115 7103 +f 6860 7555 6869 +f 7564 7104 7112 +f 7085 7111 7113 +f 7105 7114 7112 +f 6860 6869 7110 +f 7265 7263 7266 +f 7387 6784 7386 +f 7260 7257 7085 +f 7106 7112 7104 +f 7262 7073 7076 +f 7257 7551 7259 +f 7256 7075 7257 +f 6864 7110 6866 +f 6969 6219 7393 +f 6874 7118 6868 +f 7117 7108 7119 +f 7119 7118 6867 +f 6970 7119 6867 +f 7119 6969 7393 +f 7108 7117 7120 +f 6221 7120 7117 +f 6825 6873 7121 +f 7120 7121 6873 +f 6612 6881 7122 +f 7123 7122 6881 +f 6644 7123 6881 +f 6787 7123 6786 +f 7124 6612 7122 +f 6966 7124 6772 +f 6727 7135 7140 +f 7146 7125 7148 +f 7399 7126 7397 +f 7159 7166 7178 +f 6742 7127 6745 +f 7127 6891 7134 +f 7181 7128 6742 +f 7129 7128 6758 +f 6497 7129 6758 +f 7129 6912 7134 +f 6896 7130 6747 +f 7144 7130 6898 +f 6903 7133 6894 +f 7953 7524 7215 +f 8286 7537 8038 +f 7478 6894 7801 +f 6911 7133 6909 +f 6894 7133 7132 +f 7127 7134 6902 +f 7129 7134 6891 +f 7136 6729 6723 +f 7141 7140 7135 +f 7137 7136 6723 +f 7135 7136 7150 +f 7137 6723 6725 +f 7152 7151 6749 +f 6600 7138 6738 +f 6725 7138 7137 +f 7141 7139 7140 +f 7484 7145 7487 +f 7141 7135 6916 +f 7140 7139 7146 +f 7142 7143 7144 +f 7143 7145 7141 +f 7708 6898 6895 +f 7145 7139 7141 +f 7144 7143 6916 +f 7143 7142 7145 +f 7147 7144 6916 +f 6749 7130 7144 +f 7142 7481 7145 +f 7810 7808 7809 +f 7153 7154 7484 +f 7154 7146 7139 +f 7150 7147 6916 +f 7147 7137 7151 +f 7148 7125 7394 +f 7140 7148 6727 +f 7652 7451 7464 +f 7155 7146 7154 +f 7135 7150 6916 +f 7137 7150 7136 +f 7138 7151 7137 +f 6749 7151 6600 +f 7144 7147 7152 +f 7151 7152 7147 +f 7484 7139 7145 +f 7709 7489 7490 +f 7484 7154 7139 +f 7155 7154 7153 +f 7155 7153 7709 +f 7125 7155 7712 +f 6486 7156 6483 +f 6487 7156 6488 +f 6927 7157 6930 +f 6919 7157 6602 +f 7162 7158 6413 +f 7161 6944 6928 +f 7160 6413 6465 +f 6414 7169 7160 +f 6465 6414 7160 +f 6142 7169 6072 +f 7158 7162 7163 +f 7163 7164 7161 +f 7160 7162 6413 +f 7162 7159 7163 +f 7159 6938 7163 +f 7164 6940 6944 +f 7163 6938 7164 +f 6938 6940 7164 +f 7405 7402 7417 +f 7175 7171 6938 +f 7169 7166 7160 +f 7166 7165 7168 +f 7410 7411 7409 +f 7639 7438 7648 +f 6733 6734 7631 +f 7176 7179 7435 +f 6072 7169 6414 +f 7166 7169 7165 +f 6938 7171 6940 +f 7170 6940 7171 +f 7172 7175 7176 +f 7170 7171 7177 +f 7425 7167 7420 +f 6946 7174 6945 +f 7171 7636 7177 +f 7432 7167 7425 +f 7170 7174 6947 +f 6945 7174 7173 +f 7176 7175 6938 +f 7172 7635 7636 +f 7178 6938 7159 +f 7178 7179 7176 +f 7636 7171 7175 +f 7174 7177 7173 +f 7168 7178 7166 +f 6938 7178 7176 +f 7632 7179 7168 +f 7167 7432 7435 +f 6757 7180 6756 +f 7181 7180 6758 +f 7128 7181 6758 +f 7182 7181 6742 +f 6742 6743 7508 +f 7182 7509 7510 +f 6764 7183 6070 +f 7184 7183 6765 +f 7184 6765 6548 +f 6766 6958 7184 +f 6908 7185 6907 +f 7183 7185 6070 +f 6167 6963 7186 +f 6787 7186 6963 +f 6965 7187 6887 +f 6970 7187 6971 +f 7192 7188 6629 +f 7513 7188 6972 +f 7519 7520 7516 +f 6625 7188 7513 +f 7000 7190 6636 +f 7192 7190 6973 +f 7188 7192 6972 +f 7194 7191 6973 +f 6973 7191 7192 +f 7192 7191 6972 +f 6980 7374 7381 +f 7193 7734 7522 +f 7000 7194 6973 +f 6997 7196 7195 +f 7010 7201 6996 +f 7205 7195 7203 +f 7195 7196 6996 +f 6997 6999 7196 +f 6993 7197 6992 +f 7008 7197 6994 +f 7002 7198 7013 +f 7199 7198 7009 +f 7199 7006 7825 +f 7198 7199 7015 +f 7722 7236 7237 +f 7237 7231 7233 +f 7211 7201 7018 +f 6996 7201 7203 +f 7235 7223 7200 +f 7204 7206 7208 +f 7203 7214 7206 +f 7208 6793 7210 +f 7519 7209 7210 +f 7205 7207 7195 +f 7211 7214 7201 +f 7207 7205 7204 +f 7202 7222 7213 +f 7204 7205 7206 +f 7209 7207 7204 +f 6774 7194 7212 +f 7213 7206 7202 +f 7221 7208 7035 +f 7210 7209 7204 +f 7209 7189 7512 +f 7208 7210 7204 +f 7520 7519 6793 +f 7223 7211 7018 +f 7214 7202 7206 +f 7195 7207 7212 +f 6774 7212 7207 +f 7035 7208 7213 +f 7206 7213 7208 +f 7201 7214 7203 +f 7202 7214 7211 +f 7456 7455 7652 +f 7776 7775 7765 +f 6622 6789 7216 +f 7031 7218 6789 +f 7218 7216 6789 +f 7032 6784 7217 +f 7032 7217 7218 +f 7216 7218 7217 +f 7220 7226 7224 +f 6804 7220 6799 +f 6807 7220 6804 +f 7220 7219 7226 +f 6803 7221 6802 +f 7208 7221 6793 +f 7213 7222 7035 +f 7211 7223 7202 +f 7202 7223 7222 +f 7523 7223 7018 +f 7224 6799 7220 +f 7228 7224 7226 +f 7225 7043 7721 +f 6808 7224 7225 +f 7227 7226 7219 +f 7228 7226 7034 +f 7230 7227 7219 +f 7232 7227 7233 +f 7229 7228 7034 +f 7225 7228 7043 +f 7034 7227 7232 +f 7034 7232 7234 +f 6812 7230 7219 +f 6810 7230 6811 +f 7534 7200 7523 +f 7539 7533 7234 +f 7233 7227 6810 +f 7234 7232 7231 +f 6810 7235 7233 +f 7233 7235 7237 +f 7239 7539 7535 +f 7034 7234 7229 +f 7223 7235 6810 +f 7237 7235 7722 +f 7953 7019 7524 +f 7241 7540 7545 +f 7722 7235 7200 +f 7237 7236 7536 +f 7535 7238 7239 +f 7710 7805 7811 +f 7541 7239 7238 +f 7542 7530 7533 +f 7540 7542 7541 +f 6910 7796 7793 +f 6907 7242 7546 +f 7241 7046 7540 +f 6958 7047 7242 +f 7047 7544 7546 +f 7840 7244 8545 +f 7833 7837 7832 +f 6815 7053 8544 +f 7243 7839 7968 +f 7245 7243 7244 +f 7246 6815 8544 +f 7058 7245 7061 +f 7245 7246 7243 +f 7313 7314 7296 +f 7528 7529 7718 +f 6834 6976 7256 +f 6828 7548 6781 +f 7551 7553 7554 +f 7093 7334 7333 +f 6780 7250 6979 +f 6980 7250 6844 +f 6639 7251 6853 +f 6859 7251 6838 +f 7334 7252 7029 +f 7064 7252 7093 +f 7391 7388 7336 +f 7290 7322 7320 +f 7731 7561 7603 +f 7594 7107 7593 +f 7083 7090 7109 +f 7559 7566 7293 +f 7257 7075 7085 +f 7256 7257 7259 +f 7260 7085 7067 +f 7260 7551 7257 +f 7248 7550 7552 +f 6834 7256 7258 +f 7248 7258 7259 +f 7256 7259 7258 +f 7553 7067 7261 +f 7551 7548 7248 +f 7277 7321 7265 +f 7290 7320 7267 +f 7091 7262 7097 +f 7262 7115 6779 +f 7104 7266 7106 +f 7067 7085 7263 +f 7268 7264 7265 +f 7267 7275 7278 +f 7106 7266 7263 +f 7275 7277 7264 +f 7104 7078 7266 +f 7266 7078 7268 +f 7274 7264 7272 +f 7290 7267 7278 +f 7270 7285 7269 +f 7268 7078 7270 +f 7282 7286 7281 +f 7271 7280 7282 +f 7078 7564 7285 +f 7270 7269 7280 +f 7105 7109 7563 +f 7275 7264 7274 +f 7270 7272 7268 +f 7271 7609 7274 +f 7282 7295 7271 +f 7315 7296 7316 +f 7271 7274 7272 +f 7275 7274 7273 +f 7288 7283 7278 +f 7275 7267 7277 +f 7610 7609 7295 +f 7335 7331 7332 +f 7277 7267 7321 +f 7264 7277 7265 +f 7288 7275 7273 +f 7290 7278 7297 +f 7114 7292 7564 +f 7301 7077 7072 +f 7291 7286 7282 +f 7272 7280 7271 +f 7326 7328 7314 +f 7276 7278 7283 +f 7291 7280 7269 +f 7308 7304 7306 +f 7303 7283 7288 +f 7276 7283 7313 +f 7284 7290 7297 +f 7318 7335 7336 +f 7078 7285 7270 +f 8497 7293 7566 +f 7291 7269 7286 +f 7281 7286 7323 +f 7307 7309 7281 +f 7612 7613 7298 +f 7275 7288 7278 +f 7303 7288 7273 +f 7304 7308 7295 +f 7289 7342 7356 +f 7297 7278 7276 +f 7290 7284 7322 +f 7280 7291 7282 +f 7285 7301 7269 +f 7563 7109 7090 +f 7305 7306 7309 +f 7105 7563 7354 +f 7859 7862 7864 +f 7294 7303 7609 +f 7328 7296 7314 +f 7281 7304 7282 +f 7610 7295 7287 +f 7283 7314 7313 +f 7613 7612 7316 +f 7299 7297 7276 +f 7297 7319 7284 +f 7276 7315 7299 +f 6847 7095 7329 +f 7276 7313 7315 +f 7299 7298 7330 +f 7338 7284 7337 +f 7558 7554 7261 +f 7585 7586 7580 +f 7597 7573 7572 +f 7843 7578 7576 +f 7323 7286 7302 +f 7609 7303 7273 +f 7314 7303 7294 +f 7304 7281 7306 +f 7295 7282 7304 +f 7874 8075 7979 +f 7308 7312 7287 +f 7323 7346 7281 +f 7308 7306 7305 +f 7312 7325 7310 +f 7312 7619 7325 +f 7307 7339 7309 +f 7295 7308 7287 +f 7281 7309 7306 +f 7347 7352 7341 +f 7324 7344 7342 +f 7289 7350 7342 +f 7344 7310 7325 +f 7324 7342 7350 +f 7305 7309 7339 +f 7324 7327 7310 +f 7283 7303 7314 +f 7313 7296 7315 +f 7326 7294 7610 +f 7294 7326 7314 +f 7316 7296 7611 +f 7299 7315 7612 +f 7620 7356 7365 +f 7299 7612 7298 +f 7095 7617 7329 +f 7335 7332 7333 +f 7330 7298 7331 +f 7335 7253 7391 +f 7299 7319 7297 +f 7337 7318 7336 +f 7300 7261 7320 +f 7321 7261 7067 +f 7267 7320 7321 +f 7261 7321 7320 +f 7338 7322 7284 +f 7320 7322 7300 +f 7301 7286 7269 +f 7286 7301 7072 +f 7355 7312 7305 +f 7363 7359 7364 +f 7982 7874 7349 +f 7361 7347 7343 +f 7312 7327 7287 +f 7326 7287 7327 +f 7355 7305 7339 +f 7611 7328 7350 +f 7326 7327 7328 +f 7327 7312 7310 +f 7617 7095 7064 +f 7615 7329 7317 +f 7298 7616 7331 +f 7319 7330 7318 +f 7332 7331 7317 +f 7318 7330 7331 +f 7317 7329 7617 +f 7333 7332 7093 +f 7093 7252 7334 +f 7335 7333 7253 +f 6784 7334 7029 +f 7253 7333 7334 +f 7391 7387 7388 +f 7331 7335 7318 +f 7336 7338 7337 +f 7337 7284 7319 +f 7318 7337 7319 +f 7338 7336 7249 +f 7558 7249 7557 +f 7322 7338 7300 +f 7302 7584 7580 +f 7979 8075 7311 +f 7346 7340 7307 +f 7580 7567 7302 +f 7621 7247 7736 +f 7327 7324 7328 +f 7344 7325 7341 +f 8296 7325 7311 +f 7341 7343 7347 +f 7356 7342 7358 +f 8296 7341 7325 +f 7324 7310 7344 +f 7588 7340 7348 +f 7352 7342 7344 +f 7346 7307 7281 +f 7354 7070 7582 +f 7070 7354 7563 +f 7356 7351 7365 +f 7566 7107 8497 +f 7981 7339 7588 +f 7311 7325 7619 +f 7611 7350 7289 +f 7324 7350 7328 +f 7347 7359 7358 +f 7368 7372 7370 +f 7341 7352 7344 +f 7358 7352 7347 +f 7992 7742 7880 +f 7879 7382 7383 +f 7584 7072 7077 +f 7286 7072 7302 +f 7982 7355 7339 +f 7312 7355 7349 +f 7342 7352 7358 +f 7372 7351 7370 +f 8111 8102 8105 +f 7366 7359 7357 +f 7347 7361 7359 +f 7356 7358 7363 +f 7883 7362 7366 +f 7356 7363 7351 +f 7615 7614 6847 +f 7620 7316 7611 +f 8081 8080 8082 +f 7359 7361 7357 +f 7367 7622 7621 +f 7351 7363 7364 +f 7358 7359 7363 +f 7359 7366 7364 +f 7362 7369 7364 +f 7375 7373 7378 +f 7372 7365 7351 +f 7365 7360 7620 +f 7366 7357 7883 +f 7364 7366 7362 +f 7369 7362 7380 +f 7629 7627 7628 +f 7364 7371 7370 +f 7375 7368 7371 +f 7380 7362 7353 +f 7370 7371 7368 +f 7371 7364 7369 +f 7368 7379 7372 +f 7367 7376 7369 +f 6844 7374 6980 +f 7614 7372 6852 +f 7372 7360 7365 +f 7376 7375 7371 +f 7376 7367 7377 +f 6844 6830 7374 +f 7375 7378 7368 +f 7371 7369 7376 +f 7378 7373 7374 +f 7367 7621 7377 +f 7375 7376 7626 +f 7629 7736 7737 +f 7375 7626 7373 +f 7374 6830 7378 +f 7379 6830 6852 +f 7368 7378 7379 +f 6830 7379 7378 +f 7380 7353 7384 +f 7367 7369 7380 +f 7628 7627 7381 +f 7193 6980 7381 +f 7880 7353 7882 +f 7525 7720 7025 +f 7885 7992 7882 +f 7624 7621 7625 +f 7880 7384 7353 +f 7622 7384 7383 +f 7032 7033 7389 +f 6865 7390 7385 +f 7387 7386 7116 +f 6784 7385 7386 +f 7387 7116 7388 +f 7387 7253 7334 +f 7392 7388 7116 +f 7249 7336 7388 +f 6865 7389 6877 +f 7032 7389 7385 +f 7390 6865 6875 +f 7386 7390 7116 +f 7335 7391 7336 +f 7387 7391 7253 +f 7390 7392 7116 +f 6869 7555 7556 +f 6162 7393 6219 +f 7119 7393 7117 +f 7148 7394 6890 +f 7394 7125 7712 +f 6890 7394 7397 +f 7395 7126 7401 +f 7396 6732 6730 +f 7401 7396 7395 +f 7399 7397 6889 +f 7126 7395 7397 +f 7394 7507 6889 +f 7429 7647 7398 +f 7674 7466 7672 +f 7676 7473 7667 +f 7653 7654 7463 +f 7431 7649 7459 +f 7405 7403 7404 +f 7633 7412 7414 +f 7745 7443 7678 +f 7167 7632 7420 +f 7167 7179 7632 +f 7406 7631 7404 +f 7407 7401 7126 +f 7404 7403 7406 +f 7407 7404 7401 +f 7126 7399 7433 +f 7410 7406 7403 +f 7406 7410 7409 +f 6889 7743 7399 +f 7404 7407 7405 +f 7415 7413 7414 +f 7411 7412 6142 +f 7409 7411 7416 +f 6733 7406 7409 +f 7410 7403 7415 +f 7410 7408 7411 +f 7412 7411 7408 +f 7416 7411 6142 +f 7412 7408 7414 +f 6142 7412 7165 +f 7415 7414 7408 +f 7418 7413 7415 +f 7408 7410 7415 +f 7413 7632 7633 +f 7403 7417 7415 +f 7415 7417 7418 +f 6072 7416 6142 +f 6736 7416 6147 +f 7405 7417 7403 +f 7418 7417 7402 +f 7418 7402 7423 +f 7413 7418 7420 +f 7445 7436 7430 +f 7660 7663 7469 +f 7418 7423 7424 +f 7424 7420 7418 +f 7438 7405 7407 +f 7422 7425 7428 +f 7637 7638 7640 +f 7172 7435 7432 +f 7648 7441 7639 +f 7438 7433 7447 +f 7448 7445 7430 +f 7424 7423 7446 +f 7424 7425 7420 +f 7425 7422 7427 +f 7645 7421 7650 +f 7398 7428 6951 +f 7638 7422 7647 +f 7636 7635 7173 +f 7424 7428 7425 +f 7429 7645 7647 +f 7744 7648 7447 +f 7448 7430 7421 +f 7444 7649 7440 +f 7746 7460 7434 +f 7400 7649 7446 +f 7424 6951 7428 +f 7425 7427 7432 +f 7172 7432 7427 +f 7655 7460 7461 +f 7126 7433 7438 +f 7649 7400 7440 +f 7946 8017 7756 +f 7176 7435 7172 +f 7167 7435 7179 +f 7748 7753 7891 +f 7645 7429 7448 +f 7445 7431 7459 +f 7438 7639 7405 +f 7407 7126 7438 +f 7445 7398 7431 +f 7398 6951 7431 +f 7398 7647 7422 +f 7460 7421 7430 +f 7426 7419 7399 +f 7441 7745 7440 +f 7461 7460 7430 +f 7423 7400 7446 +f 7464 7452 7651 +f 7675 7443 7684 +f 7444 7456 7454 +f 7634 7650 7442 +f 7645 7650 7634 +f 7402 7405 7639 +f 7445 7429 7398 +f 7443 7648 7744 +f 7461 7436 7453 +f 7648 7438 7447 +f 7436 7445 7459 +f 7445 7448 7429 +f 7450 7458 7463 +f 7458 7928 7463 +f 7645 7448 7421 +f 7436 7454 7453 +f 7923 7915 7931 +f 7453 7654 7461 +f 7461 7653 7655 +f 7941 8499 8530 +f 8345 8240 8004 +f 7651 7450 7453 +f 7461 7654 7653 +f 7639 7441 7400 +f 7660 7917 7661 +f 7746 7442 7650 +f 7469 7664 8026 +f 7493 7492 7504 +f 7472 7468 7451 +f 7456 7652 7471 +f 7468 7457 7464 +f 7913 8223 7924 +f 7453 7450 7654 +f 7744 7433 7419 +f 7455 7456 7444 +f 7677 7658 7678 +f 7661 7663 7660 +f 7651 7454 7456 +f 7664 7666 7470 +f 7663 7458 7452 +f 7663 7452 7457 +f 7658 7652 7455 +f 7471 7464 7651 +f 7655 7653 7662 +f 7449 7913 7924 +f 7433 7744 7447 +f 8026 7946 7756 +f 7469 7468 7664 +f 7672 7470 7670 +f 7670 7470 7473 +f 7705 7670 7671 +f 7921 7925 7934 +f 7946 7470 7466 +f 7457 7468 7469 +f 7457 7452 7464 +f 7443 7685 7684 +f 7680 7679 7676 +f 7652 7464 7471 +f 7472 7668 7667 +f 7668 7467 7667 +f 7687 7686 7679 +f 7472 7473 7470 +f 7748 7752 7462 +f 7793 7474 6910 +f 7133 7474 7132 +f 7132 7474 7793 +f 7499 7501 7500 +f 6900 7477 6895 +f 7482 7483 7481 +f 6894 7478 7477 +f 7477 7478 7479 +f 7801 6894 7132 +f 7479 7478 7475 +f 7800 7479 7475 +f 7483 7479 7131 +f 7480 6898 7708 +f 7142 7144 7480 +f 7482 7481 7142 +f 7488 7481 7131 +f 7480 7482 7142 +f 7483 7482 7476 +f 7479 7483 7476 +f 7131 7481 7483 +f 7487 7145 7488 +f 7153 7484 7486 +f 7500 7492 7494 +f 7486 7493 7489 +f 7495 7484 7487 +f 7497 7498 7485 +f 7488 7145 7481 +f 7487 7485 7495 +f 8032 7799 7798 +f 7487 7488 7485 +f 7489 7149 7490 +f 7153 7486 7489 +f 7149 7504 7706 +f 7399 7419 7433 +f 7489 7493 7149 +f 7492 7493 7494 +f 7486 7494 7493 +f 7492 7501 7503 +f 7494 7486 7495 +f 7504 7492 7503 +f 7485 7488 7497 +f 7498 7499 7500 +f 7495 7486 7484 +f 7485 7494 7495 +f 7803 7475 7795 +f 7801 7793 7795 +f 7131 7497 7488 +f 7498 7497 7496 +f 7496 8031 7498 +f 7485 7498 7494 +f 7798 7803 7802 +f 7829 8043 7828 +f 7498 7500 7494 +f 7501 7499 7491 +f 7503 7806 7506 +f 7492 7500 7501 +f 7759 7506 7502 +f 7760 7778 7767 +f 7491 7503 7501 +f 7493 7504 7149 +f 7759 7503 7506 +f 8252 8017 7947 +f 7505 7806 7805 +f 7816 7813 7814 +f 7806 7503 7491 +f 7765 7506 7505 +f 7713 7155 7709 +f 7685 7426 7961 +f 7509 7508 6209 +f 6742 7508 7182 +f 6117 7509 6209 +f 7510 7509 6143 +f 6180 7510 6143 +f 7511 6504 6956 +f 7182 7511 7181 +f 6504 7511 7510 +f 7209 7512 6774 +f 7512 7189 7513 +f 7514 7513 7189 +f 7515 7513 7514 +f 7189 7516 7514 +f 7518 6795 6801 +f 6653 7515 6651 +f 6625 7513 7515 +f 7516 7189 7519 +f 6058 7518 6801 +f 7517 6058 6547 +f 6651 7514 7517 +f 7514 7518 7517 +f 7516 6795 7518 +f 7209 7519 7189 +f 6793 7519 7210 +f 6803 7520 6793 +f 6795 7516 7520 +f 7250 7521 6981 +f 6980 7193 7521 +f 6988 7522 6984 +f 6983 7522 6985 +f 7534 7523 7005 +f 7223 7523 7200 +f 7028 7524 7019 +f 7525 7524 7026 +f 7026 7024 7526 +f 7956 7525 7025 +f 7529 7526 7004 +f 7525 7526 7720 +f 7818 7527 7826 +f 7677 7451 7652 +f 7718 7004 7825 +f 7818 7826 7528 +f 7718 7529 7004 +f 7720 7529 7528 +f 7531 7530 7044 +f 7533 7530 7229 +f 7532 7531 7044 +f 7229 7531 7043 +f 7532 7044 7048 +f 6960 7042 7721 +f 7234 7533 7229 +f 7533 7239 7542 +f 7027 7534 7005 +f 7023 7829 7828 +f 7536 7231 7237 +f 7535 7536 7538 +f 7830 7538 7236 +f 7231 7536 7535 +f 7236 7534 7827 +f 7496 7497 7799 +f 7236 7538 7536 +f 7537 8287 8288 +f 7533 7539 7239 +f 7231 7539 7234 +f 7540 6666 7542 +f 7540 7240 7545 +f 7238 8290 7797 +f 7541 7240 7540 +f 7542 6666 7530 +f 7239 7541 7542 +f 7546 7543 6911 +f 7545 7543 7241 +f 7047 7051 7544 +f 7046 7241 7544 +f 7545 7240 7797 +f 7543 7545 6910 +f 6907 7546 6911 +f 7047 7546 7242 +f 6990 7725 7724 +f 7739 7737 7247 +f 6828 6861 7549 +f 7248 7259 7551 +f 6717 7550 6841 +f 6828 7549 7548 +f 7552 7550 6835 +f 7548 7550 7248 +f 7553 7551 7260 +f 6781 7548 7551 +f 6834 7552 6835 +f 7248 7552 7258 +f 7067 7553 7260 +f 7554 7553 7261 +f 7558 7261 7300 +f 6781 7551 7554 +f 6828 7555 6860 +f 7556 7555 7249 +f 7388 7556 7249 +f 6869 7556 7392 +f 7558 7557 6781 +f 7555 7557 7249 +f 7554 7558 6781 +f 7338 7558 7300 +f 7254 7566 7559 +f 7560 7559 7087 +f 7079 7560 7087 +f 7082 8351 8353 +f 7856 7849 7569 +f 7354 7292 7114 +f 7105 7354 7114 +f 7566 7579 7107 +f 7981 7588 7348 +f 7323 7302 7567 +f 7104 7564 7078 +f 7346 7323 7567 +f 7562 7292 7354 +f 7292 7562 7571 +f 7570 7727 7573 +f 7585 7580 7600 +f 7587 7582 7070 +f 7568 7602 7607 +f 7581 7590 7603 +f 7597 7572 7867 +f 7346 7586 7340 +f 7571 7301 7285 +f 7354 7582 7562 +f 7571 7285 7564 +f 7562 7570 7571 +f 7577 7578 7575 +f 7875 7981 7863 +f 7977 8074 8072 +f 7302 7072 7584 +f 7086 7574 7068 +f 7574 7255 7575 +f 7576 7577 7107 +f 7255 7577 7575 +f 7107 7579 7593 +f 7844 7843 7728 +f 7577 7255 8497 +f 7578 7577 7576 +f 7867 7868 7590 +f 7846 7582 7587 +f 7254 7560 7969 +f 7974 7579 7566 +f 8361 8362 8359 +f 7583 7872 7870 +f 8071 8293 7855 +f 7860 7854 7858 +f 7340 7599 7348 +f 7572 7573 7727 +f 7581 7077 7573 +f 7872 7873 7730 +f 7606 7561 7873 +f 7598 7607 7600 +f 7602 7591 7599 +f 7580 7586 7567 +f 7586 7585 7599 +f 7070 7578 7587 +f 7578 7844 7846 +f 8365 8121 7618 +f 7868 7731 7592 +f 8070 7593 7579 +f 7596 7594 7589 +f 7846 7572 7582 +f 7870 7868 7869 +f 7581 7573 7597 +f 7586 7599 7340 +f 7731 7603 7592 +f 7969 7972 7254 +f 7594 7593 7589 +f 7861 7845 7847 +f 7107 7594 7576 +f 7845 7851 7850 +f 7845 7728 7843 +f 8069 7593 7975 +f 7848 7596 7847 +f 7572 7846 7867 +f 7581 7597 7590 +f 7601 7600 7580 +f 7584 7603 7601 +f 7602 7599 7585 +f 7599 7591 7976 +f 7601 7580 7584 +f 7606 7604 7607 +f 7584 7581 7603 +f 7598 7600 7601 +f 7602 7568 7608 +f 7600 7602 7585 +f 7592 7603 7590 +f 7601 7603 7561 +f 7601 7561 7598 +f 7606 7598 7561 +f 7730 7731 7868 +f 7598 7606 7607 +f 7565 7604 7606 +f 7568 7607 7604 +f 7600 7607 7602 +f 7568 6778 7608 +f 8072 7863 7976 +f 7274 7609 7273 +f 7295 7609 7271 +f 7326 7610 7287 +f 7609 7610 7294 +f 7328 7611 7296 +f 7620 7611 7289 +f 7315 7316 7612 +f 7316 7620 7613 +f 7614 7613 7360 +f 7613 7614 7615 +f 7372 7614 7360 +f 6847 7614 6852 +f 7329 7615 6847 +f 7616 7615 7317 +f 7331 7616 7317 +f 7613 7616 7298 +f 7093 7617 7064 +f 7317 7617 7332 +f 7312 7349 7619 +f 7339 7307 7588 +f 7619 7349 7979 +f 7620 7289 7356 +f 7613 7620 7360 +f 7622 7367 7380 +f 7383 7625 7622 +f 7384 7622 7380 +f 7382 7984 7625 +f 7984 7738 7623 +f 7547 7629 7737 +f 7625 7621 7622 +f 7739 7623 7738 +f 7382 7625 7383 +f 7624 7625 7623 +f 7376 7377 7626 +f 7626 7377 7735 +f 7381 7373 7628 +f 7547 7724 7725 +f 7626 7628 7373 +f 7726 7725 7627 +f 7628 7735 7629 +f 7736 7377 7621 +f 8132 8137 8148 +f 8125 7988 7990 +f 7404 7631 6731 +f 6733 7631 7406 +f 7632 7168 7633 +f 7420 7632 7413 +f 7412 7633 7165 +f 7633 7414 7413 +f 7423 7402 7400 +f 7890 7944 8015 +f 7172 7427 7635 +f 7637 7635 7427 +f 7177 7636 7173 +f 7172 7636 7175 +f 7638 7637 7427 +f 7640 7646 7637 +f 7427 7422 7638 +f 7640 7638 7647 +f 7424 7446 7437 +f 7461 7430 7436 +f 7647 7645 7640 +f 7646 7640 7634 +f 7715 7743 7507 +f 7643 6945 7173 +f 6945 7642 6955 +f 7641 7646 8016 +f 7637 7643 7635 +f 6945 7643 7641 +f 7751 7754 7890 +f 7640 7645 7634 +f 6951 7424 7437 +f 7402 7639 7400 +f 8016 7646 7634 +f 7643 7646 7641 +f 7422 7428 7398 +f 7431 7437 7649 +f 7455 7440 7745 +f 7437 7446 7649 +f 7713 7507 7712 +f 7459 7444 7454 +f 7745 7441 7648 +f 7746 7650 7421 +f 7667 7473 7472 +f 7651 7453 7454 +f 7451 7468 7464 +f 7450 7452 7458 +f 7450 7651 7452 +f 7440 7455 7444 +f 7436 7459 7454 +f 7761 7691 7693 +f 7748 7462 7753 +f 7456 7471 7651 +f 8265 8281 8504 +f 7458 7663 7661 +f 7662 7653 7449 +f 7450 7463 7654 +f 7662 7889 7655 +f 7444 7459 7649 +f 7928 7661 7913 +f 7995 7749 7747 +f 7948 7917 7660 +f 7460 7655 7434 +f 7470 7666 7472 +f 7756 7948 8026 +f 7663 7457 7469 +f 7440 7400 7441 +f 7916 7662 7924 +f 8230 8231 8504 +f 7472 7666 7468 +f 7679 7669 7676 +f 7699 7692 7695 +f 7460 7746 7421 +f 7668 7472 7451 +f 7783 7697 7786 +f 7653 7463 7449 +f 7664 7468 7666 +f 7690 7691 7768 +f 7677 7678 7675 +f 7671 7670 7473 +f 7473 7676 7671 +f 7672 7670 7665 +f 7669 7686 7689 +f 7689 7694 7669 +f 7702 7704 7665 +f 7470 7672 7466 +f 7694 7696 7669 +f 7704 8030 8029 +f 7665 7674 7672 +f 8021 8019 8018 +f 7467 7668 7675 +f 7675 7668 7677 +f 7680 7667 7467 +f 7671 7676 7669 +f 7451 7677 7668 +f 7652 7658 7677 +f 7678 7658 7745 +f 7443 7675 7678 +f 7683 7679 7680 +f 7507 7713 7715 +f 7667 7680 7676 +f 7683 7680 7467 +f 7684 7683 7467 +f 7817 7961 7715 +f 7149 7706 7716 +f 7669 7679 7686 +f 7684 7467 7675 +f 7687 7683 7681 +f 7443 7744 7685 +f 7683 7684 7681 +f 7426 7685 7419 +f 7681 7684 7685 +f 7679 7683 7687 +f 7686 7690 7689 +f 7681 7685 7961 +f 7686 7687 7817 +f 7502 7765 7763 +f 7705 7700 7702 +f 7690 7686 7682 +f 7695 7694 7689 +f 7690 7682 7717 +f 7689 7690 7768 +f 7682 7715 7714 +f 7706 7758 7693 +f 7764 7691 7761 +f 7705 7696 7700 +f 7503 7759 7504 +f 7717 7716 7691 +f 7695 7689 7688 +f 7696 7694 7692 +f 7771 7764 7767 +f 7692 7694 7695 +f 7696 7692 7700 +f 7669 7696 7671 +f 8053 7777 8050 +f 7704 7792 7665 +f 7692 7703 7700 +f 7700 7703 7698 +f 7771 7695 7688 +f 7772 7783 7699 +f 7699 7783 7703 +f 7702 7700 7698 +f 7787 7780 7782 +f 7701 7783 7785 +f 7704 7702 7698 +f 7705 7702 7665 +f 7699 7703 7692 +f 7703 7701 7951 +f 8318 8030 7789 +f 7674 7792 7673 +f 7670 7705 7665 +f 7696 7705 7671 +f 7758 7706 7504 +f 7706 7693 7716 +f 8291 7793 7796 +f 8036 8042 8040 +f 7477 7708 6895 +f 7708 7476 7482 +f 7489 7709 7153 +f 7713 7709 7490 +f 7811 7805 7812 +f 7236 7827 7830 +f 7025 7720 7719 +f 7760 7763 7774 +f 7713 7712 7155 +f 7394 7712 7507 +f 7714 7713 7490 +f 7713 7714 7715 +f 7716 7714 7490 +f 7717 7714 7716 +f 7817 7715 7682 +f 7743 7715 7426 +f 7716 7490 7149 +f 7691 7716 7693 +f 7690 7717 7691 +f 7682 7714 7717 +f 7008 7821 7965 +f 7740 7878 7737 +f 8094 8088 8093 +f 7816 7711 7815 +f 7529 7720 7526 +f 7720 7528 7826 +f 7225 7721 7042 +f 7531 7721 7043 +f 7200 7534 7722 +f 7236 7722 7534 +f 7019 8066 7020 +f 8038 8039 8040 +f 6991 7725 6990 +f 7547 7737 7878 +f 7734 7725 6984 +f 7627 7629 7726 +f 7629 7547 7726 +f 7547 7725 7726 +f 7562 7582 7727 +f 7572 7727 7582 +f 7340 7588 7307 +f 7560 6848 7969 +f 6975 7831 6848 +f 7729 6848 7831 +f 7873 7731 7730 +f 7873 7872 7565 +f 7618 8121 8073 +f 8106 8299 8109 +f 7382 7879 7991 +f 8253 8257 8024 +f 7381 7734 7193 +f 7725 7734 7627 +f 7626 7735 7628 +f 7736 7735 7377 +f 7737 7736 7247 +f 7735 7736 7629 +f 7623 7739 7624 +f 7739 7740 7737 +f 7623 7625 7984 +f 7820 8083 7823 +f 7624 7739 7247 +f 7740 7739 7738 +f 8310 7876 8311 +f 6989 7724 7741 +f 7964 7738 8310 +f 7821 7824 7963 +f 7879 7383 7880 +f 8110 8301 8305 +f 7431 6951 7437 +f 7399 7743 7426 +f 7745 7648 7443 +f 7685 7744 7419 +f 7455 7745 7658 +f 7751 7434 7747 +f 7749 7751 7747 +f 7919 7465 7995 +f 7889 7434 7655 +f 7748 7749 7752 +f 7901 7754 7891 +f 7920 7904 7894 +f 7751 7749 7748 +f 7913 7661 7996 +f 7893 7896 7892 +f 7754 7751 7748 +f 7751 7746 7434 +f 7995 7465 7749 +f 7662 7916 7889 +f 7897 7753 7922 +f 7898 7892 7896 +f 7748 7891 7754 +f 8015 7634 7442 +f 7927 7750 7922 +f 7900 7898 7910 +f 8019 8017 7466 +f 7948 7756 7659 +f 7784 8172 8158 +f 7920 7750 7925 +f 7763 7762 7502 +f 7693 7758 7761 +f 7502 7758 7759 +f 7504 7759 7758 +f 7760 7762 7763 +f 7772 7771 7767 +f 7758 7762 7761 +f 7761 7762 7764 +f 7502 7762 7758 +f 7762 7760 7764 +f 7502 7506 7765 +f 7774 7775 7770 +f 7764 7760 7767 +f 7768 7764 7688 +f 7773 7765 7505 +f 7949 7775 7777 +f 7777 7779 8049 +f 8056 8054 8055 +f 7760 7774 7778 +f 7783 7772 7697 +f 7768 7688 7689 +f 7691 7764 7768 +f 7505 7808 7773 +f 8065 7966 8044 +f 7775 7763 7765 +f 7770 7780 7778 +f 7695 7771 7699 +f 7764 7771 7688 +f 7771 7772 7699 +f 7778 7772 7767 +f 7808 7505 7805 +f 7776 7773 7769 +f 7775 7774 7763 +f 7778 7774 7770 +f 7765 7773 7776 +f 7779 7775 7776 +f 7815 7776 7769 +f 7777 7766 7949 +f 7815 7779 7776 +f 7814 7957 7960 +f 7770 7949 7780 +f 7778 7790 7772 +f 8049 7779 7711 +f 7775 7779 7777 +f 7782 7780 7766 +f 7780 7787 7790 +f 8059 8063 7781 +f 7783 7786 7785 +f 7777 8049 8050 +f 7791 7787 7782 +f 7786 7787 7791 +f 7703 7783 7701 +f 8063 8020 7781 +f 7703 7951 7698 +f 8176 8020 8063 +f 7951 7701 8198 +f 7787 7786 7697 +f 7784 7785 7786 +f 7787 7697 7790 +f 8059 7791 7782 +f 8162 8161 8138 +f 8264 8024 8262 +f 8181 7784 8158 +f 7673 7792 8029 +f 7772 7790 7697 +f 7780 7790 7778 +f 8172 7791 7781 +f 7786 7791 7784 +f 7665 7792 7674 +f 8029 7792 7704 +f 7794 7796 7545 +f 7795 7793 7707 +f 7541 7797 7240 +f 7537 8286 8287 +f 7795 7707 7802 +f 7801 7795 7475 +f 7545 7796 6910 +f 7796 7794 8291 +f 7238 7797 7541 +f 7545 7797 7794 +f 8035 7798 8034 +f 7812 7955 7807 +f 7497 7131 7799 +f 7131 7479 7800 +f 7803 7800 7475 +f 7131 7800 7799 +f 7478 7801 7475 +f 7793 7801 7132 +f 8286 8289 8287 +f 7803 7798 7799 +f 7802 7803 7795 +f 7800 7803 7799 +f 7215 7956 7813 +f 7808 7769 7773 +f 7499 7955 7812 +f 7805 7710 7808 +f 7506 7806 7505 +f 7491 7805 7806 +f 7499 7498 8031 +f 8037 8035 8036 +f 7710 7809 7808 +f 7808 7810 7815 +f 7809 7710 8067 +f 7810 7809 7804 +f 7813 7810 7804 +f 7810 7816 7815 +f 7812 7805 7491 +f 7807 8041 7811 +f 7499 7812 7491 +f 7807 7811 7812 +f 7953 7813 7804 +f 7215 7525 7956 +f 7719 7957 7025 +f 7025 7957 7814 +f 7815 7711 7779 +f 7808 7815 7769 +f 7813 7816 7810 +f 7814 7960 8292 +f 7686 7817 7682 +f 7687 7681 7961 +f 6989 7824 7821 +f 7818 7718 7820 +f 7962 7741 7740 +f 7823 7527 7818 +f 7965 7821 7820 +f 7819 8083 7820 +f 7819 7820 7821 +f 7820 7718 7965 +f 8095 8083 7985 +f 8055 7958 8045 +f 7820 7823 7818 +f 7823 7822 8094 +f 6989 7741 7824 +f 7741 7962 7963 +f 7199 7825 7004 +f 7965 7825 7006 +f 8045 7826 7527 +f 7720 7826 7719 +f 7828 7534 7023 +f 7830 7827 7723 +f 7723 7827 7828 +f 7534 7828 7827 +f 7019 7953 7966 +f 7967 8044 8067 +f 8039 7830 7723 +f 7830 7537 7538 +f 7074 7834 7835 +f 7088 7841 7837 +f 6975 7835 7831 +f 7834 7837 7833 +f 7729 7836 6714 +f 7841 7838 7837 +f 7833 7831 7835 +f 7074 7835 6975 +f 7833 7835 7834 +f 7088 7837 7834 +f 7833 7832 7836 +f 7832 7837 7838 +f 7088 7071 7840 +f 7840 7841 7088 +f 7840 7060 7244 +f 7246 7058 6815 +f 7060 7840 7071 +f 7059 7841 7840 +f 7059 7838 7841 +f 7969 6848 7970 +f 8363 7855 8350 +f 7576 7594 7848 +f 7845 7843 7847 +f 7728 7867 7846 +f 7578 7843 7844 +f 7856 7861 7849 +f 7867 7850 7605 +f 7578 7846 7587 +f 7728 7846 7844 +f 7576 7848 7843 +f 7860 7853 7856 +f 7596 7848 7594 +f 7843 7848 7847 +f 7849 7857 7569 +f 7279 7858 7854 +f 7728 7845 7850 +f 7861 7596 7849 +f 7851 7845 7853 +f 7583 7870 7978 +f 7866 8372 8373 +f 7869 7858 7279 +f 7859 7860 7856 +f 7596 7589 7849 +f 7597 7867 7590 +f 7975 8071 8069 +f 7856 7569 7859 +f 7856 7853 7861 +f 8069 7849 7589 +f 7857 7855 7866 +f 7853 7858 7851 +f 7862 7859 7569 +f 7854 7860 7852 +f 7853 7860 7858 +f 7852 7860 7859 +f 7845 7861 7853 +f 7596 7861 7847 +f 7569 7857 7866 +f 7859 7864 7852 +f 8293 8350 7855 +f 8373 8370 7865 +f 7862 7569 7866 +f 7862 7595 7864 +f 8308 7875 7863 +f 8074 7977 8073 +f 8351 8360 8363 +f 7850 7867 7728 +f 7590 7868 7592 +f 7869 7868 7605 +f 7605 7871 7869 +f 7869 7851 7858 +f 7868 7870 7730 +f 7978 7870 7869 +f 7850 7871 7605 +f 7851 7869 7871 +f 7606 7873 7565 +f 7870 7872 7730 +f 7873 7561 7731 +f 7339 7981 7982 +f 8076 8075 7874 +f 7348 7976 7863 +f 7983 7732 8076 +f 7879 7742 8125 +f 8136 7733 8309 +f 7877 8084 7985 +f 7986 7963 7962 +f 7740 7741 7878 +f 7724 7878 7741 +f 7383 7384 7880 +f 7879 8125 7991 +f 7881 7882 7883 +f 7742 7879 7880 +f 8081 8082 7343 +f 8296 8075 8078 +f 7883 7882 7353 +f 7882 7881 7885 +f 7883 7353 7362 +f 7883 7357 8080 +f 8103 7987 8111 +f 7884 8102 7988 +f 7881 8103 8105 +f 7885 7884 7992 +f 6401 6949 7886 +f 7887 7886 6949 +f 6952 7887 6949 +f 6950 7887 6953 +f 7934 7925 7750 +f 7901 7893 7902 +f 7897 7922 7920 +f 7751 7890 7746 +f 7890 7754 7945 +f 7753 7893 7891 +f 7644 8219 8218 +f 7897 7896 7893 +f 7903 8222 7902 +f 7897 7894 7896 +f 7893 7892 7902 +f 7897 7920 7894 +f 7894 7911 7896 +f 7903 7902 7892 +f 8220 8016 7944 +f 7897 7893 7753 +f 7893 7901 7891 +f 8251 8007 7938 +f 7899 7926 7465 +f 7898 7900 7909 +f 7900 7888 7909 +f 7922 7462 7927 +f 7462 7922 7753 +f 7910 6954 7900 +f 7896 7911 7898 +f 7909 7905 7892 +f 7945 7895 7944 +f 7901 7902 7895 +f 7644 8217 6401 +f 7903 8221 8218 +f 7747 7434 7889 +f 7906 6954 7910 +f 7892 7905 7903 +f 6954 7906 7914 +f 7894 7904 7906 +f 7752 7927 7462 +f 7892 7898 7909 +f 7922 7750 7920 +f 7925 7908 7920 +f 7905 7909 7888 +f 7926 7899 7755 +f 8221 7888 7993 +f 7894 7906 7911 +f 7910 7898 7911 +f 7910 7911 7906 +f 7463 7928 7449 +f 7906 7915 7914 +f 7915 7908 7931 +f 7906 7904 7915 +f 7912 6954 7914 +f 7916 7657 7919 +f 7914 7915 7923 +f 7915 7904 7908 +f 7449 7924 7662 +f 7749 7465 7752 +f 7996 7999 7998 +f 7750 7926 7934 +f 7939 7923 7931 +f 7917 7996 7661 +f 8224 7919 7657 +f 7657 7916 7924 +f 7912 7914 7923 +f 8010 8012 8250 +f 7908 7925 7921 +f 7465 7926 7927 +f 7747 7889 7916 +f 7908 7904 7920 +f 7918 7912 7923 +f 7907 8528 8498 +f 7996 7998 7913 +f 7923 7907 7918 +f 7465 7919 7899 +f 7750 7927 7926 +f 7465 7927 7752 +f 7661 7928 7458 +f 7913 7449 7928 +f 7942 7940 7935 +f 7937 7930 8529 +f 8530 7940 7942 +f 7939 7936 7930 +f 7921 7940 7936 +f 7940 7921 7929 +f 7939 7931 7936 +f 7937 7939 7930 +f 8226 8225 8224 +f 7935 8250 7942 +f 7934 7926 7755 +f 7921 7936 7908 +f 8007 7934 7938 +f 7934 7755 7938 +f 8228 7755 7899 +f 7940 7929 7935 +f 7939 7937 8528 +f 7923 7939 7907 +f 8223 7998 8226 +f 7931 7908 7936 +f 8007 7935 7929 +f 7921 7934 7929 +f 7940 7930 7936 +f 8010 8009 8012 +f 8249 7932 8499 +f 7935 8008 8250 +f 7942 7941 8530 +f 8008 7933 8010 +f 8249 7941 8250 +f 7901 7945 7754 +f 8222 8220 7895 +f 7895 7945 7901 +f 7890 7945 7944 +f 7470 7946 7664 +f 8017 7946 7466 +f 8018 7674 7673 +f 8021 8023 7947 +f 7917 7948 7659 +f 8026 7660 7469 +f 7780 7949 7766 +f 7775 7949 7770 +f 8048 7958 7950 +f 7766 8053 7782 +f 8198 7701 7785 +f 8030 7951 7789 +f 8158 8172 8020 +f 8257 8261 8024 +f 7813 7953 7215 +f 7966 7953 7804 +f 8032 7954 8031 +f 7802 8034 7798 +f 8031 7955 7499 +f 7955 7954 8037 +f 7025 7814 7956 +f 7813 7956 7814 +f 7958 7957 7719 +f 7960 7957 8048 +f 8045 7719 7826 +f 7958 7719 8045 +f 8050 8048 8051 +f 7816 7814 8292 +f 8048 7957 7958 +f 8049 8292 7959 +f 7715 7961 7426 +f 7687 7961 7817 +f 7740 7964 7962 +f 7986 7877 7985 +f 7821 7963 7819 +f 7741 7963 7824 +f 7738 7964 7740 +f 7877 7962 7964 +f 7825 7965 7718 +f 7008 7965 7006 +f 8067 7804 7809 +f 7811 7967 8067 +f 8041 8037 8036 +f 7967 8040 8044 +f 7060 7245 7244 +f 7245 7058 7246 +f 7970 6848 7729 +f 8355 7969 7970 +f 6714 8357 8358 +f 7842 8355 8357 +f 7973 8354 7971 +f 8068 8293 7971 +f 7973 7972 7969 +f 7971 8070 7974 +f 8352 8356 8355 +f 7972 7973 7971 +f 7254 7974 7566 +f 7971 7974 7972 +f 7975 7593 8070 +f 7855 7857 8071 +f 7599 7976 7348 +f 7976 7591 6778 +f 6778 7591 7608 +f 7619 7979 7311 +f 7869 7279 7978 +f 7349 7874 7979 +f 8295 8077 8115 +f 8078 8081 7343 +f 7863 7981 7348 +f 7982 7981 7875 +f 7982 7875 7983 +f 7982 7349 7355 +f 7982 7983 7874 +f 7983 7875 8308 +f 8129 7984 7382 +f 7738 7984 7876 +f 7986 7819 7963 +f 7877 8309 8084 +f 7877 7986 7962 +f 8083 7986 7985 +f 7630 8104 8304 +f 8102 8104 8108 +f 8301 8302 8303 +f 7992 7988 7742 +f 8089 8085 8086 +f 7876 7984 8129 +f 7988 8102 8108 +f 8126 7991 7990 +f 8126 7990 7989 +f 8131 8129 7991 +f 7992 7880 7882 +f 7988 7992 7884 +f 8005 8238 7994 +f 8221 7905 7888 +f 8005 8242 8239 +f 7747 7916 7995 +f 7919 7995 7916 +f 7999 8001 7997 +f 7917 7999 7996 +f 8000 8326 8001 +f 8224 8228 7919 +f 8245 8232 7997 +f 7924 8223 7657 +f 7917 7659 8229 +f 7999 7997 8232 +f 7999 8229 8001 +f 8252 7659 7756 +f 8229 7999 7917 +f 8327 8236 7994 +f 8240 8239 8004 +f 8011 7994 8236 +f 8002 8243 8237 +f 8009 8327 8234 +f 8327 8009 8236 +f 8232 7998 7999 +f 8235 8237 8240 +f 8238 8005 8239 +f 8326 8366 8245 +f 8011 8013 8014 +f 8007 7933 8008 +f 7934 8007 7929 +f 8007 8008 7935 +f 8012 8009 8325 +f 7933 8251 8013 +f 7933 8013 8010 +f 8234 8233 8325 +f 8241 8238 8002 +f 8013 8236 8010 +f 8249 8012 7943 +f 7941 7942 8250 +f 7933 8007 8251 +f 8243 8239 8240 +f 7938 7755 8228 +f 8014 8225 8227 +f 7890 8015 7442 +f 8016 8015 7944 +f 7641 8016 7642 +f 8015 8016 7634 +f 8019 7466 7674 +f 8252 7947 8023 +f 8025 8018 7673 +f 8021 8018 8264 +f 8017 8019 7947 +f 7674 8018 8019 +f 8020 7788 8158 +f 8176 8163 8020 +f 7757 8022 8023 +f 8019 8021 7947 +f 8244 8006 8245 +f 7659 8230 8229 +f 7757 8023 8021 +f 8252 8022 7659 +f 7673 8029 8253 +f 8163 8168 8169 +f 8253 8025 7673 +f 8264 8025 8024 +f 8026 7664 7946 +f 7660 8026 7948 +f 7950 8058 8052 +f 8027 8057 8059 +f 8085 8089 8091 +f 8052 8027 8051 +f 8030 7704 7698 +f 8253 8029 7952 +f 8030 7698 7951 +f 7952 8029 8030 +f 8032 8031 7496 +f 7955 8031 7954 +f 7799 8032 7496 +f 8035 8032 7798 +f 8291 8290 8287 +f 8036 8033 8042 +f 7707 8034 7802 +f 8035 8034 8033 +f 8035 8033 8036 +f 8035 7954 8032 +f 8038 8042 8286 +f 7811 8041 7967 +f 7955 8037 7807 +f 8035 8037 7954 +f 8039 7537 7830 +f 8039 7723 8043 +f 8039 8043 8040 +f 7537 8039 8038 +f 8040 8043 8044 +f 8040 7967 8041 +f 8037 8041 7807 +f 8040 8041 8036 +f 8286 8042 8033 +f 8040 8042 8038 +f 7828 8043 7723 +f 8044 8043 7829 +f 8065 8044 7829 +f 8044 7966 8067 +f 8047 8045 7527 +f 8099 8054 8056 +f 8047 7823 8094 +f 8084 8088 8095 +f 7823 8047 7527 +f 8046 8056 8055 +f 8048 7950 8051 +f 7960 8048 7959 +f 7711 7816 8292 +f 8050 8049 7959 +f 8050 7959 8048 +f 8051 8053 8050 +f 8052 8051 7950 +f 8053 8051 8027 +f 8057 8063 8059 +f 8027 8052 8057 +f 7782 8053 8027 +f 7777 8053 7766 +f 8054 8058 7958 +f 8055 8045 8047 +f 8046 8055 8047 +f 7958 8055 8054 +f 8093 8056 8046 +f 8056 8028 8099 +f 8097 8099 8028 +f 8052 8064 8057 +f 7958 8058 7950 +f 8298 8054 8099 +f 7791 8059 7781 +f 8027 8059 7782 +f 8094 8093 8046 +f 8169 8273 7788 +f 8160 8175 8156 +f 8138 8061 8162 +f 8054 8298 8058 +f 8318 8181 8180 +f 8063 8057 8064 +f 8138 8161 8098 +f 8298 8064 8052 +f 8064 8062 8177 +f 8065 7829 8066 +f 7019 7966 8065 +f 7829 7023 8066 +f 7023 7020 8066 +f 8067 7966 7804 +f 7811 8067 7710 +f 8362 8370 8359 +f 8294 8360 7082 +f 7849 8069 7857 +f 7593 8069 7589 +f 7974 8070 7579 +f 8293 8070 7971 +f 8069 8071 7857 +f 8293 8071 7975 +f 7976 6778 8072 +f 6778 7977 8072 +f 8116 8117 8365 +f 8308 8074 8121 +f 8072 8074 7863 +f 7874 7983 8076 +f 8078 8075 7980 +f 8295 7732 8077 +f 8075 8076 8295 +f 8117 7732 7983 +f 8124 8113 8122 +f 8079 8078 7980 +f 7343 7341 8296 +f 8299 8106 8079 +f 7883 8080 7881 +f 8082 7357 7361 +f 7881 8080 8079 +f 8078 8079 8081 +f 8080 8081 8079 +f 7357 8082 8080 +f 7343 8082 7361 +f 8083 7822 7823 +f 7986 8083 7819 +f 7733 8086 8084 +f 8084 8086 8088 +f 8128 8133 8141 +f 8091 8092 8085 +f 7733 8139 8089 +f 8088 8086 8085 +f 7733 8140 8139 +f 8100 8097 8092 +f 8088 8085 8093 +f 8088 8094 8095 +f 7733 8089 8086 +f 8201 8202 8087 +f 8127 8134 8144 +f 8092 8097 8028 +f 8202 8089 8087 +f 8092 8091 8090 +f 8092 8090 8100 +f 8092 8028 8093 +f 8092 8093 8085 +f 8056 8093 8028 +f 8094 8046 8047 +f 8095 8094 7822 +f 8083 8095 7822 +f 8084 8095 7985 +f 8147 8159 8184 +f 8153 8150 8500 +f 8096 8098 8097 +f 8297 8099 8097 +f 8153 8152 8150 +f 8138 8098 8096 +f 8297 8097 8098 +f 8298 8062 8064 +f 8175 8100 8090 +f 8097 8100 8096 +f 7881 8105 7885 +f 8111 7987 8302 +f 8108 8104 7630 +f 8105 8102 7884 +f 7881 8106 8103 +f 8115 7980 8295 +f 8142 8151 8137 +f 7988 8108 8114 +f 8111 8105 8103 +f 7885 8105 7884 +f 7881 8079 8106 +f 8299 8079 7980 +f 8124 8107 8115 +f 7987 8103 8109 +f 8114 8108 7630 +f 7988 8114 7990 +f 8106 8109 8103 +f 8109 8107 8112 +f 8303 8112 8123 +f 7630 8142 8312 +f 7987 8109 8112 +f 8115 8107 8299 +f 8077 8113 8115 +f 8104 8102 8111 +f 8120 7345 8122 +f 8122 8123 8112 +f 7345 8118 8123 +f 8114 8312 7990 +f 8306 8307 8365 +f 8077 7732 8116 +f 8122 8113 8120 +f 8113 8116 8307 +f 8073 8121 8074 +f 7630 8300 8142 +f 8150 8148 8313 +f 8119 8118 7345 +f 8123 8118 8303 +f 8077 8116 8113 +f 8117 8116 7732 +f 8123 8122 7345 +f 7983 8308 8117 +f 8113 8124 8115 +f 8304 8301 8110 +f 8301 8118 8119 +f 8122 8112 8124 +f 8107 8124 8112 +f 7988 8125 7742 +f 7990 7991 8125 +f 7989 8130 8126 +f 7991 8126 8131 +f 8134 8127 8130 +f 8146 8087 8139 +f 8133 8126 8130 +f 8133 8128 8131 +f 7991 8129 7382 +f 7876 8129 8128 +f 8137 8134 8130 +f 8130 8127 8133 +f 8133 8131 8126 +f 8129 8131 8128 +f 8134 8137 8132 +f 8087 8146 8201 +f 8135 8133 8127 +f 8135 8140 8133 +f 8137 8130 7989 +f 8147 8144 8134 +f 8127 8144 8143 +f 8135 8146 8139 +f 7733 8084 8309 +f 8141 8311 8128 +f 8142 7989 8312 +f 8137 7989 8142 +f 8160 8185 8175 +f 8501 8182 8319 +f 8089 8139 8087 +f 8140 7733 8136 +f 8140 8136 8141 +f 8135 8139 8140 +f 8140 8141 8133 +f 8141 8136 8311 +f 8110 8314 8300 +f 8137 8151 8148 +f 8143 8146 8127 +f 8159 8152 8153 +f 8147 8134 8132 +f 8183 8147 8184 +f 8300 8314 8315 +f 8151 8300 8315 +f 8127 8146 8135 +f 8201 8146 8143 +f 8132 8148 8152 +f 8061 8186 8164 +f 8300 8151 8142 +f 8151 8313 8148 +f 8304 8300 7630 +f 8101 8314 8110 +f 8132 8152 8147 +f 8148 8150 8152 +f 8313 8317 8150 +f 8315 8149 8313 +f 8206 8208 8196 +f 6098 8319 8500 +f 8167 8186 8178 +f 8320 8155 8154 +f 8500 8150 6098 +f 8321 8155 8320 +f 8061 8138 8160 +f 8143 8183 8194 +f 8152 8159 8147 +f 8163 7788 8020 +f 8161 8177 8062 +f 7788 8273 8179 +f 8198 7784 8181 +f 8185 8096 8175 +f 8183 8143 8144 +f 8193 8178 8187 +f 8177 8161 8157 +f 8297 8161 8062 +f 8162 8061 8164 +f 8161 8162 8157 +f 8164 8157 8162 +f 8163 8157 8164 +f 8160 8156 8187 +f 8163 8164 8168 +f 8170 8271 8214 +f 8168 8167 8324 +f 8024 8025 8253 +f 8163 8169 7788 +f 8178 8061 8160 +f 8165 8216 8324 +f 8167 8168 8164 +f 8168 8166 8169 +f 8213 8329 8166 +f 8329 8273 8169 +f 8216 8165 8211 +f 8165 8208 8211 +f 8253 7952 8254 +f 7788 8179 8158 +f 7791 8172 7784 +f 8020 8172 7781 +f 8195 8189 8188 +f 8187 8156 8189 +f 8502 8190 8159 +f 8174 8192 8194 +f 8100 8175 8096 +f 8200 8090 8202 +f 8063 8064 8177 +f 8157 8163 8176 +f 8157 8176 8177 +f 8063 8177 8176 +f 8178 8160 8187 +f 8178 8196 8204 +f 8180 8179 8171 +f 8181 8179 8180 +f 8180 8255 8254 +f 8318 8180 7952 +f 8198 8181 7789 +f 8158 8179 8181 +f 8503 8197 8205 +f 8197 8188 8205 +f 8147 8183 8144 +f 8194 8183 8174 +f 8190 8188 8199 +f 8183 8184 8174 +f 8160 8138 8185 +f 8096 8185 8138 +f 8164 8186 8167 +f 8061 8178 8186 +f 8199 8189 8192 +f 8178 8193 8196 +f 8174 8184 8190 +f 8321 8195 8197 +f 8192 8189 8156 +f 8189 8195 8193 +f 8184 8159 8190 +f 8501 8502 8182 +f 8188 8197 8195 +f 8260 8170 8214 +f 8175 8200 8156 +f 8174 8190 8199 +f 8189 8193 8187 +f 8196 8193 8191 +f 8192 8156 8200 +f 8090 8091 8202 +f 8190 8205 8188 +f 8191 8193 8195 +f 8206 8196 8191 +f 8196 8165 8204 +f 8501 8319 8173 +f 8205 8502 8503 +f 7951 8198 7789 +f 7784 8198 7785 +f 8189 8199 8188 +f 8174 8199 8192 +f 8090 8200 8175 +f 8192 8200 8194 +f 8143 8194 8201 +f 8194 8200 8202 +f 8202 8091 8089 +f 8202 8201 8194 +f 8210 8203 8323 +f 8208 8165 8196 +f 8324 8204 8165 +f 8178 8204 8167 +f 8500 8182 8153 +f 8182 8159 8153 +f 8210 8320 8203 +f 8210 8206 8191 +f 8323 8206 8210 +f 8341 8274 8338 +f 8208 8206 8207 +f 8216 8166 8324 +f 8504 8281 8346 +f 8322 8060 8207 +f 8212 8284 8267 +f 8321 8197 8155 +f 8340 8342 8334 +f 8266 8212 8343 +f 8343 8212 8259 +f 8209 8367 8263 +f 8271 8170 8272 +f 8335 8333 8340 +f 8280 7439 8279 +f 8022 8275 8231 +f 8262 8024 8261 +f 8211 8213 8216 +f 8166 8216 8213 +f 8217 7644 8218 +f 7993 6401 8217 +f 7644 6955 8219 +f 7902 8222 7895 +f 7642 8016 8220 +f 8219 8220 8222 +f 7895 8220 7944 +f 7642 8220 8219 +f 7905 8221 7903 +f 8217 8221 7993 +f 7903 8218 8222 +f 8219 8222 8218 +f 7913 7998 8223 +f 8225 8226 8006 +f 8228 8224 8014 +f 7657 8223 8224 +f 8227 8225 8006 +f 8014 8224 8225 +f 8223 8226 8224 +f 8226 7998 8232 +f 8345 8247 8240 +f 8014 8227 8011 +f 8228 8014 8251 +f 7919 8228 7899 +f 8230 7659 8022 +f 8001 8229 8000 +f 8230 8022 8231 +f 8000 8229 8230 +f 7757 8275 8022 +f 8269 7757 8262 +f 8005 8011 8227 +f 8226 8232 8006 +f 8234 7656 8233 +f 8012 8325 7943 +f 8005 7994 8011 +f 8010 8236 8009 +f 8366 8239 8242 +f 8244 8242 8005 +f 8011 8236 8013 +f 8326 7997 8001 +f 8002 7656 8241 +f 8002 8238 8243 +f 7656 8234 8327 +f 8240 8237 8243 +f 8240 8247 8235 +f 8265 8231 8275 +f 8005 8227 8244 +f 8344 8281 8276 +f 8245 8242 8244 +f 8239 8243 8238 +f 7994 8238 8241 +f 8006 8244 8227 +f 8232 8245 8006 +f 8326 8245 7997 +f 8247 8248 8235 +f 8268 8265 8275 +f 8248 8003 8246 +f 7943 7932 8249 +f 8003 8248 8247 +f 8537 8531 8532 +f 8010 8250 8008 +f 8250 8012 8249 +f 8228 8251 7938 +f 8013 8251 8014 +f 8017 8252 7756 +f 8022 8252 8023 +f 8254 7952 8180 +f 8257 8253 8258 +f 8255 8180 8171 +f 8258 8256 8257 +f 8272 8255 8171 +f 8328 8255 8170 +f 8260 8256 8258 +f 8269 8270 8268 +f 8258 8253 8254 +f 8261 8257 8256 +f 8328 8254 8255 +f 8258 8328 8260 +f 8260 8214 8263 +f 8262 8267 8269 +f 8333 8335 8336 +f 8208 8331 8211 +f 8256 8260 8263 +f 8262 8261 8259 +f 8263 8266 8343 +f 8021 8264 7757 +f 8282 8268 8270 +f 8281 8265 8282 +f 8264 8018 8025 +f 7757 8264 8262 +f 8266 8369 8212 +f 8368 8283 8277 +f 8368 8369 8347 +f 8267 8262 8259 +f 8332 8271 8213 +f 8347 8369 8367 +f 8259 8212 8267 +f 8280 8284 8285 +f 8283 7439 8285 +f 8270 8269 8267 +f 8280 8279 8278 +f 8268 8275 8269 +f 8170 8255 8272 +f 8213 8211 8332 +f 8272 8171 8273 +f 8271 8272 8329 +f 8273 8171 8179 +f 8329 8169 8166 +f 8343 8261 8256 +f 8337 8263 8214 +f 8284 8270 8267 +f 8269 8275 7757 +f 8344 8278 8003 +f 8349 8347 8348 +f 8280 8278 8276 +f 8280 8270 8284 +f 8003 8278 8246 +f 8282 8265 8268 +f 8212 8369 8284 +f 8278 8279 8246 +f 8282 8280 8276 +f 8345 8281 8344 +f 8004 8346 8345 +f 8280 8282 8270 +f 8281 8282 8276 +f 8284 8277 8285 +f 8283 8285 8277 +f 7439 8280 8285 +f 8033 8034 8289 +f 8290 8288 8287 +f 8033 8289 8286 +f 8287 8289 8291 +f 7535 8288 7238 +f 7537 8288 7538 +f 8034 7707 8289 +f 8291 8289 7707 +f 7797 8290 7794 +f 8288 8290 7238 +f 8291 7707 7793 +f 8290 8291 7794 +f 7959 8292 7960 +f 7711 8292 8049 +f 8293 7975 8070 +f 8350 8293 8068 +f 8075 8295 7980 +f 8353 8351 8352 +f 8075 8296 7311 +f 7732 8295 8076 +f 7343 8296 8078 +f 8161 8297 8098 +f 8298 8297 8062 +f 8058 8298 8052 +f 8297 8298 8099 +f 8115 8299 7980 +f 8299 8107 8109 +f 8317 6098 8150 +f 8301 8119 8305 +f 8104 8111 8302 +f 8303 8302 7987 +f 8104 8302 8301 +f 8303 7987 8112 +f 8301 8303 8118 +f 8301 8304 8104 +f 8300 8304 8110 +f 8119 8101 8305 +f 8101 8110 8305 +f 8307 8120 8113 +f 8365 8117 8121 +f 8120 8307 8306 +f 8074 8308 7863 +f 8117 8308 8121 +f 8310 8309 7877 +f 8311 7876 8128 +f 7964 8310 7877 +f 7876 8310 7738 +f 8136 8309 8311 +f 8310 8311 8309 +f 7990 8312 7989 +f 7630 8312 8114 +f 8314 8145 8315 +f 8101 8145 8314 +f 8149 8315 8145 +f 8151 8315 8313 +f 8313 8316 8317 +f 8313 8149 8316 +f 6098 8317 8316 +f 8030 8318 7952 +f 8181 8318 7789 +f 8154 8155 8173 +f 8173 8155 8503 +f 8203 8320 8154 +f 8320 8210 8321 +f 8210 8191 8321 +f 8195 8321 8191 +f 8322 8323 8203 +f 8323 8322 8207 +f 8206 8323 8207 +f 8168 8324 8166 +f 8324 8167 8204 +f 8234 8325 8009 +f 7943 8325 8233 +f 8230 8504 8000 +f 8326 8346 8366 +f 7994 8241 8327 +f 7656 8327 8241 +f 8260 8328 8170 +f 8254 8328 8258 +f 8271 8329 8213 +f 8273 8329 8272 +f 8337 8338 8209 +f 8271 8332 8214 +f 8339 8208 8207 +f 8339 8060 8334 +f 8333 8211 8331 +f 8342 8331 8339 +f 8336 8337 8214 +f 8211 8333 8332 +f 8333 8336 8332 +f 8336 8214 8332 +f 8330 8341 8340 +f 8330 8340 8334 +f 8337 8336 8335 +f 8338 8337 8335 +f 8337 8209 8263 +f 8341 8338 8335 +f 8338 8274 8348 +f 8208 8339 8331 +f 8060 8339 8207 +f 8342 8340 8333 +f 8340 8341 8335 +f 8274 8341 8330 +f 8331 8342 8333 +f 8334 8342 8339 +f 8261 8343 8259 +f 8263 8343 8256 +f 8278 8344 8276 +f 8345 8344 8003 +f 8247 8345 8003 +f 8004 8366 8346 +f 8326 8000 8504 +f 8281 8345 8346 +f 8209 8338 8348 +f 8347 8349 8368 +f 8349 8215 8368 +f 8348 8347 8367 +f 8351 8350 8068 +f 8348 8274 8349 +f 8360 8351 7082 +f 8351 8068 8352 +f 8362 8361 8294 +f 8068 8354 8352 +f 7969 8355 8356 +f 7971 8354 8068 +f 8352 7842 8353 +f 8356 8354 7973 +f 7970 7729 8358 +f 7842 8352 8355 +f 8354 8356 8352 +f 7969 8356 7973 +f 7970 8358 8355 +f 8358 8357 8355 +f 6714 8358 7729 +f 7855 8359 8372 +f 8294 8361 8360 +f 8360 8361 8363 +f 8362 8294 18 +f 8363 8361 8359 +f 7865 8370 8364 +f 8364 8370 8362 +f 7855 8363 8359 +f 8351 8363 8350 +f 8306 8365 7618 +f 8362 18 8364 +f 8116 8365 8307 +f 8239 8366 8004 +f 8245 8366 8242 +f 8263 8367 8266 +f 8348 8367 8209 +f 8283 8368 8215 +f 8284 8369 8277 +f 8369 8266 8367 +f 8277 8369 8368 +f 8370 8373 8372 +f 8371 8373 7865 +f 8373 7595 7862 +f 7862 7866 8373 +f 7855 8372 7866 +f 8359 8370 8372 +f 8373 8371 7595 +f 8377 8375 4 +f 8376 8374 8375 +f 267 8375 28 +f 8376 213 113 +f 5 8374 8376 +f 8379 3 104 +f 29 8382 8380 +f 8377 8379 29 +f 8377 4 8378 +f 3 8379 8378 +f 8386 8380 331 +f 8375 8377 8381 +f 8377 8380 8381 +f 8381 8380 8386 +f 29 104 8384 +f 8385 8382 23 +f 8384 8382 29 +f 341 8383 132 +f 132 8384 104 +f 8382 8384 8383 +f 480 8385 23 +f 8380 8385 331 +f 115 8386 331 +f 8381 8386 28 +f 64 8387 74 +f 810 8387 449 +f 8388 293 179 +f 566 8388 377 +f 8389 775 179 +f 404 8389 679 +f 8390 743 1177 +f 636 8390 859 +f 356 8391 749 +f 154 8391 724 +f 248 8392 194 +f 8538 8392 844 +f 8393 8394 1114 +f 530 8394 819 +f 553 8505 530 +f 8395 301 1112 +f 8505 553 1109 +f 1099 8397 1083 +f 1420 8397 1098 +f 754 8398 8399 +f 8399 1255 1240 +f 1255 8399 8398 +f 1423 1431 8401 +f 1425 8400 8402 +f 8401 1430 1061 +f 1423 8401 8400 +f 8402 1435 1849 +f 8400 8401 8402 +f 1958 8403 1425 +f 1426 8400 8403 +f 1218 8404 780 +f 1557 8404 1156 +f 532 500 8406 +f 8407 1570 1572 +f 1570 8406 1573 +f 8406 8405 532 +f 1564 8407 1572 +f 21 8405 8407 +f 1679 8408 1682 +f 1670 8408 1683 +f 355 8409 72 +f 8508 8516 8517 +f 8508 8410 8506 +f 1740 8522 8520 +f 1871 8413 8411 +f 5126 8414 5125 +f 1709 8411 8412 +f 1712 8412 8411 +f 5124 8413 1871 +f 8414 8413 5125 +f 1712 8414 5126 +f 8413 8414 8411 +f 8417 1908 2375 +f 8419 8421 8422 +f 1908 8416 1909 +f 8415 8427 8429 +f 2375 2251 8417 +f 8419 8426 8428 +f 2194 8418 1897 +f 2072 8418 1407 +f 8425 8426 8419 +f 2440 8420 8423 +f 2346 8420 2441 +f 8419 8422 8423 +f 8417 2251 8421 +f 2251 2514 8422 +f 8422 2014 8423 +f 2251 8422 8421 +f 8423 2014 2634 +f 8419 8423 8420 +f 2346 1229 8424 +f 1058 8425 1229 +f 8426 8425 1746 +f 8419 8424 8425 +f 8426 1746 1360 +f 8428 8415 8421 +f 8429 1014 1166 +f 8428 8427 8415 +f 8419 8428 8421 +f 8427 8428 8426 +f 1026 8429 1166 +f 8415 8429 8416 +f 2074 8430 1916 +f 2090 8430 2073 +f 2105 8431 2101 +f 2115 2079 8432 +f 2085 8431 8432 +f 2115 8432 8431 +f 2757 8434 1814 +f 2579 8440 2041 +f 8444 2757 2762 +f 8436 8434 8433 +f 2497 8435 2399 +f 8436 8435 1689 +f 1817 8436 1689 +f 8434 8436 1814 +f 8443 8437 8442 +f 2760 3263 8438 +f 3263 2970 8438 +f 8439 8438 2970 +f 3630 8439 2970 +f 8437 8439 2041 +f 2498 2574 8441 +f 8442 8440 2399 +f 2399 8441 2497 +f 8441 8440 2498 +f 8435 8442 2399 +f 8443 8442 8433 +f 8444 8433 8434 +f 8438 8443 2760 +f 2757 8444 8434 +f 2760 8444 2762 +f 2534 8445 8446 +f 2450 8446 8445 +f 2450 8447 2521 +f 8445 2539 8447 +f 8448 8450 8451 +f 8448 2577 2897 +f 2510 8449 3938 +f 2897 8449 8448 +f 2509 8450 2510 +f 8451 8450 2420 +f 2421 8451 2420 +f 2582 8451 1955 +f 2068 8452 1878 +f 2626 8452 2067 +f 2892 8453 2678 +f 2483 8453 2893 +f 2994 8454 2849 +f 3055 8454 2854 +f 3243 8455 1305 +f 2927 8455 3244 +f 8457 3013 2560 +f 8456 8457 8458 +f 8458 8457 2658 +f 3013 8457 8456 +f 8458 2658 2884 +f 8459 8458 2395 +f 3024 8459 2395 +f 2881 3296 8459 +f 3087 8460 3385 +f 2036 8460 3084 +f 8461 3458 3455 +f 8462 8461 3218 +f 3443 8462 3218 +f 8462 3439 3564 +f 3625 8463 3623 +f 4332 8463 3626 +f 8465 8464 3634 +f 3904 8464 3905 +f 8466 8465 3634 +f 4064 8465 3908 +f 3909 8466 2975 +f 8465 8466 3908 +f 4058 8467 3710 +f 4052 8467 4056 +f 4260 8468 3258 +f 8468 4288 4515 +f 4566 8469 4561 +f 4406 8469 4575 +f 8473 4945 4932 +f 8470 8473 4927 +f 8471 4929 4689 +f 8472 8471 4699 +f 4945 8470 8472 +f 8472 8470 8471 +f 4927 8473 4950 +f 4945 8473 8470 +f 4959 8474 4958 +f 4636 8474 4961 +f 1870 8475 1985 +f 5475 8475 5130 +f 4984 8476 4789 +f 5031 8476 4791 +f 8480 8477 8479 +f 8477 8480 8481 +f 8479 8478 5313 +f 5491 8478 8477 +f 8479 5313 5153 +f 8480 8479 5308 +f 8480 5308 5311 +f 8481 8480 5314 +f 6492 8481 5314 +f 8482 8481 6003 +f 6013 8482 6003 +f 5788 8482 5688 +f 5561 8483 4852 +f 5603 8483 5546 +f 8483 8484 4852 +f 5624 8484 5587 +f 5938 8485 5751 +f 5868 8486 5663 +f 6489 8486 5867 +f 8487 5769 5768 +f 6587 8487 5963 +f 8488 5695 5893 +f 8490 8488 5513 +f 6008 8489 6012 +f 5695 8488 8489 +f 8490 5513 6151 +f 6010 8490 6150 +f 8527 8491 8526 +f 8493 6101 5841 +f 6096 8492 6603 +f 8492 8491 8493 +f 8493 5841 6021 +f 8527 8493 8491 +f 6214 8494 6221 +f 8494 6065 8495 +f 6515 8495 6065 +f 6310 8495 6206 +f 6816 8496 6310 +f 6825 8496 7057 +f 7577 8497 7107 +f 7086 8497 7255 +f 8533 8534 8535 +f 8529 8499 8537 +f 8532 7937 8529 +f 8319 8182 8500 +f 8501 8503 8502 +f 8501 8173 8503 +f 8190 8502 8205 +f 8159 8182 8502 +f 8197 8503 8155 +f 8265 8504 8231 +f 8326 8504 8346 +f 1112 8505 8395 +f 530 8505 8396 +f 8409 8516 8506 +f 1768 8523 357 +f 8507 8516 8511 +f 8519 8521 20 +f 1740 8510 8522 +f 8523 1175 8410 +f 8516 162 8511 +f 1175 8506 8410 +f 122 8511 162 +f 8523 8510 357 +f 8524 622 339 +f 8512 1 8513 +f 8514 8513 1 +f 622 8513 8511 +f 8524 2 8512 +f 8511 8514 8507 +f 8519 1740 8520 +f 8519 8517 8521 +f 8507 8517 8516 +f 8516 8508 8506 +f 8518 20 8521 +f 8520 8517 8519 +f 8515 1 8518 +f 8514 8515 8507 +f 8510 8410 8522 +f 8515 8521 8517 +f 8508 8517 8520 +f 8521 8515 8518 +f 8507 8515 8517 +f 8508 8522 8410 +f 1175 8523 1768 +f 8510 8523 8410 +f 2 8524 163 +f 8513 8524 8512 +f 8526 8525 6756 +f 6957 8526 6756 +f 8527 8526 6198 +f 6507 8527 6198 +f 8493 8527 6101 +f 7939 8528 7907 +f 8533 7937 8532 +f 8530 8529 7930 +f 8529 8537 8532 +f 8530 7930 7940 +f 8499 7941 8249 +f 8535 8498 8533 +f 8529 8530 8499 +f 8528 8533 8498 +f 7937 8533 8528 +f 8533 8532 8534 +f 8532 8531 8534 +f 8531 17 8534 +f 8499 8536 8537 +f 8534 17 8535 +f 8499 7932 8536 +f 8531 8537 8536 +f 8538 899 972 +f 889 8538 971 +f 899 8538 8539 +f 844 8539 8538 +f 2303 8540 1844 +f 2293 8540 2290 +f 8543 591 2334 +f 2607 8543 2608 +f 2512 1986 8542 +f 591 8543 8541 +f 7968 7059 8545 +f 7840 8545 7059 +f 5061 4990 8546 +f 4810 8546 4990 +f 60 8547 77 +f 610 8547 61 +f 1409 8548 1758 +f 8548 1393 1868 +f 759 446 8549 +f 446 633 8549 diff --git a/img/plate_hole_mesh.png b/img/plate_hole_mesh.png new file mode 100644 index 00000000..45547d52 Binary files /dev/null and b/img/plate_hole_mesh.png differ diff --git a/img/plate_hole_solution.png b/img/plate_hole_solution.png new file mode 100644 index 00000000..b6231f19 Binary files /dev/null and b/img/plate_hole_solution.png differ diff --git a/img/polyfem-wbg.png b/img/polyfem-wbg.png new file mode 100644 index 00000000..d55ed80c Binary files /dev/null and b/img/polyfem-wbg.png differ diff --git a/img/polyfem.png b/img/polyfem.png new file mode 100644 index 00000000..1dcf4514 Binary files /dev/null and b/img/polyfem.png differ diff --git a/img/sphere-mat-res.png b/img/sphere-mat-res.png new file mode 100644 index 00000000..b169b89b Binary files /dev/null and b/img/sphere-mat-res.png differ diff --git a/img/sphere-mat.json b/img/sphere-mat.json new file mode 100644 index 00000000..f5fbf235 --- /dev/null +++ b/img/sphere-mat.json @@ -0,0 +1,80 @@ +{ + "mesh": "/Users/teseo/data/collisions/polyfem/sphere-mat.msh", + "normalize_mesh": false, + "has_collision": true, + "dhat": 0.0002, + "tend": 1, + "time_steps": 20, + "problem": "GenericTensor", + "tensor_formulation": "NeoHookean", + "body_params": [ + { + "id": 1, + "E": 1e8, + "nu": 0.4, + "rho": 2000 + }, + { + "id": 2, + "E": 1e6, + "nu": 0.4, + "rho": 1000 + } + ], + "problem_params": { + "is_time_dependent": true, + "dirichlet_boundary": [ + { + "id": 2, + "value": [ + 0, + 0, + 0 + ] + } + ], + "rhs": [ + 0, + 9.81, + 0 + ] + }, + "boundary_sidesets": [ + { + "id": 2, + "axis": -1, + "position": -0.99 + }, + { + "id": 2, + "axis": 1, + "position": 0.99 + }, + { + "id": 2, + "axis": -3, + "position": -0.99 + }, + { + "id": 2, + "axis": 3, + "position": 0.99 + } + ], + "body_ids": [ + { + "id": 1, + "center": [ + 0.0, + 1, + 0 + ], + "radius": 0.6 + }, + { + "id": 2, + "axis": -2, + "position": 0.01 + } + ] +} \ No newline at end of file diff --git a/img/sphere-mat.png b/img/sphere-mat.png new file mode 100644 index 00000000..7df0780a Binary files /dev/null and b/img/sphere-mat.png differ diff --git a/img/t1.png b/img/t1.png new file mode 100644 index 00000000..8834416b Binary files /dev/null and b/img/t1.png differ diff --git a/img/t2.png b/img/t2.png new file mode 100644 index 00000000..2b07de32 Binary files /dev/null and b/img/t2.png differ diff --git a/img/t3.png b/img/t3.png new file mode 100644 index 00000000..26d727ea Binary files /dev/null and b/img/t3.png differ diff --git a/img/xxx.ico b/img/xxx.ico new file mode 100644 index 00000000..f022850d Binary files /dev/null and b/img/xxx.ico differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..78b8b5fe --- /dev/null +++ b/index.html @@ -0,0 +1,1353 @@ + + + + + + + + + + + + + + + + + + + + + + + + Home - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

PolyFEM

+

A polyvalent C++ and Python FEM library.

+

Logo

+

PolyFEM is a simple C++ and Python finite element library. We provide a wide set of common PDEs including:

+
    +
  • Laplace
  • +
  • Helmholtz
  • +
  • Linear Elasticity
  • +
  • St. Venant–Kirchhoff Elasticity
  • +
  • Neo-Hookean Elasticity
  • +
  • Stokes
  • +
  • Navier–Stokes
  • +
+

PolyFEM simplicity lies in the interface: just pick a problem, select some boundary condition, and solve. No need to construct complicated function spaces, or learn a new scripting language: everything is set-up trough a JSON interface or through the Setting class in python.

+

For instance, PolyFEM seamlessly integrates quad/hexes and tri/tets of order up to 4, and integrates state-of-the-art techniques such as the adaptive \(p\)-refinement presented in “Decoupling Simulation Accuracy from Mesh Quality” or the spline and polygonal bases in “Poly-Spline Finite-Element Method”.

+

The library is actively used in our research so expect frequent updates, fixes, and new features!

+

News

+
    +
  • New “selection” interface to set boundary conditions and body ids.
  • +
  • Added support for multi-material simulations.
  • +
  • PolyFEM supports time-dependent fluid simulations!
  • +
  • PolyFEM supports contacts using the IPC Toolkit.
  • +
  • We support FEBio (*.feb) files.
  • +
  • We finally extracted the solvers from PolyFEM. You can now use the wrappers independently, check the PolySolve repo.
  • +
  • PolyFEM meshplot, igl and wildmeshing are presented at a Eurographics course.
  • +
  • Bindings v0.5.2 with a new more pythonic interface, support for functions of the right-hand side and exact solution.
  • +
  • PolyFEM is being used in biology! Check the paper or the project page!
  • +
  • PolyFEM meshplot, igl and wildmeshing are presented at a SIGGRAPH course (07/30/2019).
  • +
  • PolyFEM is now triangle and tetgen free. Stay tuned for the release of v0.5 in python with a new interface to high-order meshes and meshplot for the fast 3D plots!
  • +
  • PolyFEM has been used in “A Large Scale Comparison of Tetrahedral and Hexahedral Elements for Finite Element Analysis”! Check the interactive plots!
  • +
  • PolyFEM now supports high-order geometric maps! Check the SIGGRAPH paper “TriWild: Robust Triangulation with Curve Constraints” for more details!
  • +
  • PolyFEM has a python interface!
  • +
  • PolyFEM can do adaptive a priori \(p\)-refinement! Check the SIGGRAPH paper “Decoupling Simulation Accuracy from Mesh Quality” for more details!
  • +
+

PolyFEM in C++

+

Build

+

For more details refer to the C++ section

+

Compilation

+

All the C++ dependencies required to build the code are included. It should work on Windows, macOS, and Linux, and it should build out-of-the-box with CMake:

+
mkdir build
+cd build
+cmake ..
+make -j4
+
+

Usage

+

The main executable, ./PolyFEM_bin, can be called as a command-line interface. Simply run:

+
./PolyFEM_bin --help
+
+

PolyFEM in Python

+

Last update +Downloads +Install +Binder

+

For more details refer to the Python section

+

Installation

+

We are making efforts to provide a simple python interface to Polyfem.

+

For doing so, we are maintaining a conda package that can be easily installed https://anaconda.org/conda-forge/polyfempy.

+
conda install -c conda-forge polyfempy
+
+

Usage

+

Simply import the package!

+
import polyfempy
+
+

PolySolve

+

PolyFEM heavily depends on external libraries for solving linear systems. If you need a linear system wrapper based on Eigen (but do not need the finite element setup) you use PolySolve.

+

Citation

+

If you use PolyFEM in your project, please consider citing our work:

+
@misc{polyfem,
+  author = {Teseo Schneider and Jérémie Dumas and Xifeng Gao and Denis Zorin and Daniele Panozzo},
+  title = {{PolyFEM}},
+  howpublished = "\url{https://polyfem.github.io/}",
+  year = {2019},
+}
+
+
@article{Schneider:2019:PFM,
+  author = {Schneider, Teseo and Dumas, J{\'e}r{\'e}mie and Gao, Xifeng and Botsch, Mario and Panozzo, Daniele and Zorin, Denis},
+  title = {Poly-Spline Finite-Element Method},
+  journal = {ACM Trans. Graph.},
+  volume = {38},
+  number = {3},
+  month = mar,
+  year = {2019},
+  url = {http://doi.acm.org/10.1145/3313797},
+  publisher = {ACM}
+}
+
+
@article{Schneider:2018:DSA,
+    author = {Teseo Schneider and Yixin Hu and Jérémie Dumas and Xifeng Gao and Daniele Panozzo and Denis Zorin},
+    journal = {ACM Transactions on Graphics},
+    link = {},
+    month = {10},
+    number = {6},
+    publisher = {Association for Computing Machinery (ACM)},
+    title = {Decoupling Simulation Accuracy from Mesh Quality},
+    volume = {37},
+    year = {2018}
+}
+
+

Acknowledgments & Funding

+

The software is being developed in the Geometric Computing Lab at NYU Courant Institute of Mathematical Sciences and the University of Victoria, Canada.

+

This work was partially supported by:

+
    +
  • the NSF CAREER award 1652515
  • +
  • the NSF grant IIS-1320635
  • +
  • the NSF grant DMS-1436591
  • +
  • the NSF grant 1835712
  • +
  • the SNSF grant P2TIP2_175859
  • +
  • the NSERC grant RGPIN-2021-03707
  • +
  • the NSERC grant DGECR-2021-00461
  • +
  • Adobe Research
  • +
  • nTopology
  • +
+

License

+

The code of PolyFEM itself is licensed under MIT License. However, please be mindful of third-party libraries which are used by PolyFEM and may be available under a different license.

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/index.md b/index.md new file mode 100644 index 00000000..551a7e82 --- /dev/null +++ b/index.md @@ -0,0 +1,167 @@ +PolyFEM +======= + +*A polyvalent C++ and Python FEM library.* + +![Logo](img/polyfem.png) + + +PolyFEM is a simple C++ and Python finite element library. We provide a wide set of common PDEs including: + + - Laplace + - Helmholtz + - Linear Elasticity + - St. Venant–Kirchhoff Elasticity + - Neo-Hookean Elasticity + - Stokes + - Navier–Stokes + +PolyFEM simplicity lies in the interface: just pick a problem, select some boundary condition, and solve. No need to construct complicated function spaces, or learn a new scripting language: everything is set-up trough a [JSON interface](json.md) or through the [Setting class](polyfempy_doc.md) in python. + + +For instance, PolyFEM seamlessly integrates quad/hexes and tri/tets of order up to 4, and integrates state-of-the-art techniques such as the adaptive $p$-refinement presented in "Decoupling Simulation Accuracy from Mesh Quality" or the spline and polygonal bases in "Poly-Spline Finite-Element Method". + +The library is actively used in our research so expect frequent updates, fixes, and new features! + +News +---- + +- New "selection" interface to set boundary conditions and body ids. +- Added support for multi-material simulations. +- PolyFEM supports time-dependent fluid simulations! +- PolyFEM supports contacts using the [IPC Toolkit](https://github.com/ipc-sim/ipc-toolkit). +- We support FEBio (*.feb) files. +- We finally extracted the solvers from PolyFEM. You can now use the wrappers independently, check the [PolySolve repo](https://github.com/polyfem/polysolve). +- PolyFEM [meshplot](https://skoch9.github.io/meshplot), [igl](https://libigl.github.io/) and [wildmeshing](https://wildmeshing.github.io/) are presented at a [Eurographics course](https://geometryprocessing.github.io/blackbox-computing-python/). +- Bindings v0.5.2 with a new more pythonic interface, support for functions of the right-hand side and exact solution. +- PolyFEM is being used in biology! Check the [paper](https://pubs.acs.org/doi/10.1021/acs.nanolett.9b01505) or the [project page](https://cellogram.github.io)! +- PolyFEM [meshplot](https://skoch9.github.io/meshplot), [igl](https://libigl.github.io/) and [wildmeshing](https://wildmeshing.github.io/) are presented at a [SIGGRAPH course](https://geometryprocessing.github.io/geometric-computing-python/) (07/30/2019). +- PolyFEM is now triangle and tetgen free. Stay tuned for the release of v0.5 in python with a new interface to high-order meshes and [meshplot](https://skoch9.github.io/meshplot) for the fast 3D plots! +- PolyFEM has been used in "A Large Scale Comparison of Tetrahedral and Hexahedral Elements for Finite Element Analysis"! Check the [interactive plots](https://polyfem.github.io/tet-vs-hex/plot.html)! +- PolyFEM now supports high-order geometric maps! Check the SIGGRAPH paper "TriWild: Robust Triangulation with Curve Constraints" for more details! +- PolyFEM has a [python interface](python.md)! +- PolyFEM can do adaptive *a priori* $p$-refinement! Check the SIGGRAPH paper "Decoupling Simulation Accuracy from Mesh Quality" for more details! + +PolyFEM in C++ +---- + +![Build](https://github.com/polyfem/polyfem/workflows/Build/badge.svg) + +For more details refer to the [C++ section](cxx_index.md) + + +### Compilation + +All the C++ dependencies required to build the code are included. It should work on Windows, macOS, and Linux, and it should build out-of-the-box with CMake: + +```sh +mkdir build +cd build +cmake .. +make -j4 +``` + +### Usage + +The main executable, `./PolyFEM_bin`, can be called as a command-line interface. Simply run: + +```sh +./PolyFEM_bin --help +``` + +PolyFEM in Python +------ + +[![Last update](https://anaconda.org/conda-forge/polyfempy/badges/latest_release_date.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Downloads](https://anaconda.org/conda-forge/polyfempy/badges/downloads.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Install](https://anaconda.org/conda-forge/polyfempy/badges/installer/conda.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/polyfem/polyfem.github.io.git/docs?filepath=docs%2Fpython_examples.ipynb) + +For more details refer to the [Python section](python.md) + +### Installation + +We are making efforts to provide a simple python interface to Polyfem. + +For doing so, we are maintaining a *conda* package that can be easily installed [https://anaconda.org/conda-forge/polyfempy](https://anaconda.org/conda-forge/polyfempy). + +```sh +conda install -c conda-forge polyfempy +``` + +### Usage +Simply import the package! + +```python +import polyfempy +``` + +PolySolve +--------- + +PolyFEM heavily depends on external libraries for solving linear systems. If you need a linear system wrapper based on Eigen (but do not need the finite element setup) you use [PolySolve](polysolve.md). + +Citation +-------- + +If you use PolyFEM in your project, please consider citing our work: + +```bibtex +@misc{polyfem, + author = {Teseo Schneider and Jérémie Dumas and Xifeng Gao and Denis Zorin and Daniele Panozzo}, + title = {{PolyFEM}}, + howpublished = "\url{https://polyfem.github.io/}", + year = {2019}, +} +``` + +```bibtex +@article{Schneider:2019:PFM, + author = {Schneider, Teseo and Dumas, J{\'e}r{\'e}mie and Gao, Xifeng and Botsch, Mario and Panozzo, Daniele and Zorin, Denis}, + title = {Poly-Spline Finite-Element Method}, + journal = {ACM Trans. Graph.}, + volume = {38}, + number = {3}, + month = mar, + year = {2019}, + url = {http://doi.acm.org/10.1145/3313797}, + publisher = {ACM} +} +``` + +```bibtex +@article{Schneider:2018:DSA, + author = {Teseo Schneider and Yixin Hu and Jérémie Dumas and Xifeng Gao and Daniele Panozzo and Denis Zorin}, + journal = {ACM Transactions on Graphics}, + link = {}, + month = {10}, + number = {6}, + publisher = {Association for Computing Machinery (ACM)}, + title = {Decoupling Simulation Accuracy from Mesh Quality}, + volume = {37}, + year = {2018} +} +``` + +Acknowledgments & Funding +-------- +The software is being developed in the [Geometric Computing Lab](https://cims.nyu.edu/gcl/index.html) at NYU Courant Institute of Mathematical Sciences and the University of Victoria, Canada. + + +This work was partially supported by: + +* the NSF CAREER award 1652515 +* the NSF grant IIS-1320635 +* the NSF grant DMS-1436591 +* the NSF grant 1835712 +* the SNSF grant P2TIP2_175859 +* the NSERC grant RGPIN-2021-03707 +* the NSERC grant DGECR-2021-00461 +* Adobe Research +* nTopology + + +License +------- + +The code of PolyFEM itself is licensed under [MIT License](https://github.com/polyfem/polyfem/blob/main/LICENSE). However, please be mindful of third-party libraries which are used by PolyFEM and may be available under a different license. diff --git a/js/mathjax.js b/js/mathjax.js new file mode 100644 index 00000000..67bba73e --- /dev/null +++ b/js/mathjax.js @@ -0,0 +1,22 @@ +window.MathJax = { + loader: {load: ['[tex]/physics']}, + tex: { + inlineMath: [ + ["\\(", "\\)"] + ], + displayMath: [ + ["\\[", "\\]"] + ], + processEscapes: true, + processEnvironments: true, + packages: {'[+]': ['physics']} + }, + options: { + ignoreHtmlClass: ".*|", + processHtmlClass: "arithmatex" + } +}; + +document$.subscribe(() => { + MathJax.typesetPromise() +}) \ No newline at end of file diff --git a/json/index.html b/json/index.html new file mode 100644 index 00000000..03cebd64 --- /dev/null +++ b/json/index.html @@ -0,0 +1,1743 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + JSON Input - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

JSON Input

+ +

JSON Files Structure

+

PolyFEM_bin expects as input a JSON file containing the setup and parameters of the problem you wish to solve. A basic example of such a file is as follows:

+
{
+    "common": "", // path to another JSON file containing default arguments on which to patch these arguments
+
+    "geometry": [{
+        "mesh": "" // mesh path (absolute or relative to JSON file)
+    }],
+
+    "time": {                         // time-dependent problem
+        "tend": 1,                    // end time
+        "dt": 0.1,                    // time step size
+        "time_steps": 10,             // (alternativly) number of time steps
+        "integrator": "ImplicitEuler" // time integration method
+    },
+
+    "contact": {
+        "enabled": true // enable contact handling
+    },
+
+    "solver": {
+        "linear": {
+            "solver": "Eigen::PardisoLDLT"
+        },
+        "nonlinear": {
+            "line_search": {
+                "method": "backtracking"
+            },
+            "solver": "newton"
+        }
+    },
+
+    // Material parameter
+    "materials": {
+        "type": "NeoHookean", // material model
+        "E": 1.5, // Young's modulus
+        "nu": 0.3, // Poisson ratio
+        "rho": 1 // density
+    },
+
+    "output": {
+        "json": "sim.json",           // output statistics
+        "paraview": {                 // output geometry as paraview VTU files
+            "file_name": "sim.pvd",
+            "options": {
+                "material": true,     // save material properties
+                "body_ids": true      // save body ids
+            },
+            "vismesh_rel_area": 1e-05 // relative area for upsampling the solution
+        }
+    }
+}
+
+

Materials

+

Options:

+
    +
  • scalar_formulation: Helmholtz, Laplacian, Bilaplacian (mixed)
  • +
  • tensor_formulation: HookeLinearElasticity, LinearElasticity, NeoHookean, SaintVenant, IncompressibleLinearElasticity (mixed), Stokes (mixed), NavierStokes (mixed)
  • +
+

Each formulation has a set of material parameters that can be set alongside it in materials.

+

See formulations for more details.

+ + +

Time Integrators

+

Options: ImplicitEuler, ImplicitNewmark, BDF

+

The parameters for the time integration are stored inside the "time_integrator_params" field.

+

See time integrators for more details.

+

Solvers

+

Linear Solver

+

PolyFEM offers several linear solver options based on compilation options. For more information, see PolySolve a stand-alone linear solver wrapper library used by PolyFEM.

+

Options: AMGCL, Eigen::BiCGSTAB, Eigen::CholmodSupernodalLLT, Eigen::ConjugateGradient, Eigen::DGMRES, Eigen::GMRES, Eigen::LeastSquaresConjugateGradient, Eigen::MINRES, Eigen::PardisoLDLT, Eigen::PardisoLU, Eigen::SimplicialLDLT, Eigen::SparseLU, Eigen::UmfPackLU, Hypre, Pardiso

+

Nonlinear Solver

+

Options: newton, lbfgs

+

See solvers for more details.

+ +

Options: backtracking, armijo, armijo_alt, more_thuente

+

See solvers for more details.

+

Contact

+
"contact": {
+    "has_collision": false,           // Enable collision detection
+    "dhat": 0.03,                     // Barrier activation distance, check IPC paper
+    "mu": 0.0,                        // Coefficient of friction (0 disables friction)
+    "epsv": 1e-3,                     // Smoothing parameter for the transition between static and dynamic friction
+    "friction_iterations": 1,         // Friction lagging iterations (0 disables friction and < 0 indicates unlimited iterations)
+    "friction_convergence_tol": 1e-2, // Friction lagging convergence tolerance
+    "barrier_stiffness": "adaptive",
+}
+
+"solver": {
+    "contact": {
+        "broad_phase_method": "hash_grid",
+        "ccd_tolerance": 1e-6,
+        "ccd_max_iterations": 1e6
+    }
+},
+
+

See contact for more details.

+

Geometry

+
"geometry": [{
+    "mesh": " ", // Mesh path (absolute or relative to JSON file)
+    "enabled": true,
+
+    "transformation": {
+        "scale": [1, 1, 1],
+        "rotation": [0, 0, 0],
+        "rotation_mode": "xyz",
+        "translation": [0, 0, 0]
+    },
+
+    "surface_selection": [],
+    "volume_selection": [],
+
+    "is_obstacle": false
+}],
+
+

Mesh

+

The path to the mesh file (absolute or relative to JSON file).

+

Enable

+

A boolean for enabling the body. By default, bodies are enabled.

+

Transformation

+

A pre-transform is applied to the geometry at load. The order of the transformation is scale, rotate, then translate.

+

Scale

+

The "scale" field encodes a scaling of the mesh. This can either be a single number for uniform scaling or an array of \(d\) numbers for scaling in each axis.

+
Dimensions
+

Alternatively, the "dimensions" field encodes the absolute size of the mesh’s axis-aligned bounding box. This should be an array of \(d\) numbers for the dimensions of each axis. This is equivalent to using a scale of dimensions / initial_dimensions where nonfinite values are replaced by 1. If the "dimensions" field is present, the "scale" field is ignored.

+

Rotation

+

The "rotation" field encodes a rotation around the mesh’s origin. The rotation can either be a single number or an array of numbers depending on the "rotation_mode".

+

The "rotation_mode" field indicates how the "rotation" is represented. The options are:

+
    +
  • "axis_angle": The "rotation" must be an array of four numbers where the first number is the angle of rotation in degrees and the last three are the axis of rotation. The axis will be normalized.
  • +
  • "quaternion": The "rotation" must be an array of four numbers which represent a quaternion \(w + xi + yj + zk\). The order of "rotation" is [x, y, z, w]. The quaternion will be normalized.
  • +
  • "rotation_vector": The "rotation" must be an array of three numbers whose magnitude is the angle of rotation in degrees and the normalized version is the axis of rotation.
  • +
  • r"[xyz]+": Indicates the "rotation" is a series of Euler angle rotations in degrees. The "rotation" can be either a number or variable-length array as long as the length matches the rotation mode string’s length. The Euler rotations will be applied in the order of the string (from left to right).
  • +
+

The default "rotation_mode" is "xyz" which indicates an Euler angle rotation in the order x, y, and then z.

+

Translation

+

The "translation" field encodes a translation of the mesh. This must be an array of length \(d\), the dimension of the scene.

+

Surface Selection

+

Either +* a single number for a selection ID to apply to all surfaces in the mesh, +* a file path containing one ID per surface element, or +* a single or list of selection objects used to assign a given "id" (see selections).

+

Volume Selection

+

Same as surface selection, but for assigning IDs to the volume elements of the mesh.

+

Obstacles

+

Obstacles serve as a way of specifying non-simulated collision objects.

+

Mesh

+

The path to the mesh file (absolute or relative to JSON file). In addition to the standard volumetric meshes supported by simulated meshes, this can be a codimensional/surface mesh (i.e., points, edges, or triangles). Currently, codimensional points and edges are only supported using the OBJ file format. Codimensional points are specified as vertices that are not indexed by any elements. Codimensional edges are specified as OBJ line elements.

+ + +

Surface Selection

+

Must be a single number.

+

Selections

+

Box

+

An axis-aligned box selection.

+

Parameters:

+
    +
  • box: a \(2 \times n\) array where the first row is the minimum corner and the second row is the maximum corner
  • +
  • relative (default: false): if the coordinates of box are relative to the mesh’s rest bounding box
  • +
+
+

Example

+

{"box": [[0, 0, 0], [1, 0.1, 1]], "relative": true} will select all points in the bottom 10% of the mesh (assuming the vertical direction if in the y-axis).

+
+

Sphere

+

A sphere (or circle in 2D) selection.

+

Parameters:

+
    +
  • center: center of the sphere (\(n\)-length array)
  • +
  • radius: radius of the sphere (float value)
  • +
  • relative (default: false): if the center is relative to the mesh’s rest bounding box and the radius is relative to the mesh’s bounding box diagonal
  • +
+
+

Example

+

{"center": [0, 0, 0], "radius": 1} will select points that are less than 1 unit from the origin.

+
+

Axis-Plane

+

An axis-aligned plane selection. Everything on one side of the plane is selected.

+

Parameters:

+
    +
  • axis: axis aligned with the plane
      +
    • Input can either be a string of format r"[+-]?[xyzXYZ]" or int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and coordinate is the axis to align the plane with
    • +
    +
  • +
  • position: position of the plane along the axis (float value)
  • +
  • relative (default: false): if the position is relative to the mesh’s rest bounding box
  • +
+
+

Example

+

{"axis": "-X", "position": 1} will select points with a x-coordinate less than 1.

+
+

Plane

+

A plane selection. Everything on one side of the plane is selected.

+

Parameters:

+
    +
  • normal: normal of the plane (\(n\)-length array)
  • +
  • point: point on the plane (has priority over offset) (\(n\)-length array)
      +
    • (alternatively) offset: offset along the normal from the origin defining the point (float value)
    • +
    +
  • +
  • relative (default: false): if the point is relative to the mesh’s rest bounding box (does not apply to the offset)
  • +
+
+

Example

+

{"normal": [1, 1, 0], "point": [0, 1, 0]} will select points \(x\) where \((x-p) \cdot n \ge 0\).

+
+

Restart

+

For time-dependent simulation, the state variables (\(u\), \(v = \dot{u}\), and \(a = \ddot{u}\)) are exported using the following parameters:

+
"output": {
+    "data": {
+        "state": "<path/to/state.hdf5>"
+    }
+}
+
+

The path can be either absolute or relative to the output directory. The state will be saved in HDF5 format containing the keys u, v, and a for the solution, velocity, and acceleration, respectively.

+

This file can then be used to initialize (or restart) the simulation from the saved state by specifying:

+
"input": {
+    "data": {
+        "state": "<path/to/state.hdf5>"
+    }
+}
+
+
+

Note

+

When restarting the simulation it is necessary to also specify the "time": {"t0": <start_time>} parameter for the starting time. Otherwise, it will assume a starting time of 0.

+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/json/json.md b/json/json.md new file mode 100644 index 00000000..c5cc6415 --- /dev/null +++ b/json/json.md @@ -0,0 +1,296 @@ +JSON Files Structure +-------------------- + +`PolyFEM_bin` expects as input a JSON file containing the setup and parameters of the problem you wish to solve. A basic example of such a file is as follows: + +```js +{ + "common": "", // path to another JSON file containing default arguments on which to patch these arguments + + "geometry": [{ + "mesh": "" // mesh path (absolute or relative to JSON file) + }], + + "time": { // time-dependent problem + "tend": 1, // end time + "dt": 0.1, // time step size + "time_steps": 10, // (alternativly) number of time steps + "integrator": "ImplicitEuler" // time integration method + }, + + "contact": { + "enabled": true // enable contact handling + }, + + "solver": { + "linear": { + "solver": "Eigen::PardisoLDLT" + }, + "nonlinear": { + "line_search": { + "method": "backtracking" + }, + "solver": "newton" + } + }, + + // Material parameter + "materials": { + "type": "NeoHookean", // material model + "E": 1.5, // Young's modulus + "nu": 0.3, // Poisson ratio + "rho": 1 // density + }, + + "output": { + "json": "sim.json", // output statistics + "paraview": { // output geometry as paraview VTU files + "file_name": "sim.pvd", + "options": { + "material": true, // save material properties + "body_ids": true // save body ids + }, + "vismesh_rel_area": 1e-05 // relative area for upsampling the solution + } + } +} +``` + +Materials +--------- + +Options:
+ +* **scalar_formulation**: `Helmholtz`, `Laplacian`, `Bilaplacian` (mixed) +* **tensor_formulation**: `HookeLinearElasticity`, `LinearElasticity`, `NeoHookean`, `SaintVenant`, `IncompressibleLinearElasticity` (mixed), `Stokes` (mixed), `NavierStokes` (mixed) + +Each formulation has a set of material parameters that can be set alongside it in `materials`. + +See [formulations](details/formulations.md) for more details. + + + +Time Integrators +---------------- + +**Options**: `ImplicitEuler`, `ImplicitNewmark`, `BDF` + +The parameters for the time integration are stored inside the `"time_integrator_params"` field. + +See [time integrators](details/time_integrators.md) for more details. + +Solvers +------- + +### Linear Solver + +PolyFEM offers several linear solver options based on compilation options. For more information, see [PolySolve](polysolve.md) a stand-alone linear solver wrapper library used by PolyFEM. + +**Options:** `AMGCL`, `Eigen::BiCGSTAB`, `Eigen::CholmodSupernodalLLT`, `Eigen::ConjugateGradient`, `Eigen::DGMRES`, `Eigen::GMRES`, `Eigen::LeastSquaresConjugateGradient`, `Eigen::MINRES`, `Eigen::PardisoLDLT`, `Eigen::PardisoLU`, `Eigen::SimplicialLDLT`, `Eigen::SparseLU`, `Eigen::UmfPackLU`, `Hypre`, `Pardiso` + +### Nonlinear Solver + +**Options:** `newton`, `lbfgs` + +See [solvers](details/solvers.md) for more details. + +### Line Search + +**Options**: `backtracking`, `armijo`, `armijo_alt`, `more_thuente` + +See [solvers](details/solvers.md) for more details. + +Contact +------- + +```js +"contact": { + "has_collision": false, // Enable collision detection + "dhat": 0.03, // Barrier activation distance, check IPC paper + "mu": 0.0, // Coefficient of friction (0 disables friction) + "epsv": 1e-3, // Smoothing parameter for the transition between static and dynamic friction + "friction_iterations": 1, // Friction lagging iterations (0 disables friction and < 0 indicates unlimited iterations) + "friction_convergence_tol": 1e-2, // Friction lagging convergence tolerance + "barrier_stiffness": "adaptive", +} + +"solver": { + "contact": { + "broad_phase_method": "hash_grid", + "ccd_tolerance": 1e-6, + "ccd_max_iterations": 1e6 + } +}, +``` + +See [contact](details/contact.md) for more details. + +Geometry +-------- + +```js +"geometry": [{ + "mesh": " ", // Mesh path (absolute or relative to JSON file) + "enabled": true, + + "transformation": { + "scale": [1, 1, 1], + "rotation": [0, 0, 0], + "rotation_mode": "xyz", + "translation": [0, 0, 0] + }, + + "surface_selection": [], + "volume_selection": [], + + "is_obstacle": false +}], +``` + +### Mesh +The path to the mesh file (absolute or relative to JSON file). + +### Enable +A boolean for enabling the body. By default, bodies are enabled. + +### Transformation + +A pre-transform is applied to the geometry at load. The order of the transformation is scale, rotate, then translate. + +#### Scale +The `"scale"` field encodes a scaling of the mesh. This can either be a single number for uniform scaling or an array of $d$ numbers for scaling in each axis. + +##### Dimensions +Alternatively, the `"dimensions"` field encodes the absolute size of the mesh's axis-aligned bounding box. This should be an array of $d$ numbers for the dimensions of each axis. This is equivalent to using a scale of `dimensions / initial_dimensions` where nonfinite values are replaced by `1`. If the `"dimensions"` field is present, the `"scale"` field is ignored. + +#### Rotation +The `"rotation"` field encodes a rotation around the mesh's origin. The rotation can either be a single number or an array of numbers depending on the `"rotation_mode"`. + +The `"rotation_mode"` field indicates how the `"rotation"` is represented. The options are: + +* `"axis_angle"`: The `"rotation"` must be an array of four numbers where the first number is the angle of rotation in degrees and the last three are the axis of rotation. The axis will be normalized. +* `"quaternion"`: The `"rotation"` must be an array of four numbers which represent a quaternion $w + xi + yj + zk$. The order of `"rotation"` is `[x, y, z, w]`. The quaternion will be normalized. +* `"rotation_vector"`: The `"rotation"` must be an array of three numbers whose magnitude is the angle of rotation in degrees and the normalized version is the axis of rotation. +* `r"[xyz]+"`: Indicates the `"rotation"` is a series of Euler angle rotations in degrees. The `"rotation"` can be either a number or variable-length array as long as the length matches the rotation mode string's length. The Euler rotations will be applied in the order of the string (from left to right). + +The default `"rotation_mode"` is `"xyz"` which indicates an Euler angle rotation in the order `x`, `y`, and then `z`. + +#### Translation +The `"translation"` field encodes a translation of the mesh. This must be an array of length $d$, the dimension of the scene. + +### Surface Selection + +Either +* a single number for a selection ID to apply to all surfaces in the mesh, +* a file path containing one ID per surface element, or +* a single or list of selection objects used to assign a given `"id"` (see [selections](#selections)). + +### Volume Selection + +Same as surface selection, but for assigning IDs to the volume elements of the mesh. + +### Obstacles + +Obstacles serve as a way of specifying non-simulated collision objects. + +#### Mesh + +The path to the mesh file (absolute or relative to JSON file). In addition to the standard volumetric meshes supported by simulated meshes, this can be a codimensional/surface mesh (i.e., points, edges, or triangles). Currently, codimensional points and edges are only supported using the OBJ file format. Codimensional points are specified as vertices that are not indexed by any elements. Codimensional edges are specified as OBJ [line elements](https://en.wikipedia.org/wiki/Wavefront_.obj_file#Line_elements). + + + +#### Surface Selection + +Must be a single number. + +Selections +---------- + +### Box + +An axis-aligned box selection. + +**Parameters:** + +* `box`: a $2 \times n$ array where the first row is the minimum corner and the second row is the maximum corner +* `relative` (default: `false`): if the coordinates of `box` are relative to the mesh's rest bounding box + +!!! example + `{"box": [[0, 0, 0], [1, 0.1, 1]], "relative": true}` will select all points in the bottom 10% of the mesh (assuming the vertical direction if in the y-axis). + +### Sphere + +A sphere (or circle in 2D) selection. + +**Parameters:** + +* `center`: center of the sphere ($n$-length array) +* `radius`: radius of the sphere (float value) +* `relative` (default: `false`): if the `center` is relative to the mesh's rest bounding box and the radius is relative to the mesh's bounding box diagonal + +!!! example + `{"center": [0, 0, 0], "radius": 1}` will select points that are less than 1 unit from the origin. + +### Axis-Plane + +An axis-aligned plane selection. Everything on one side of the plane is selected. + +**Parameters:** + +* `axis`: axis aligned with the plane + * Input can either be a string of format `r"[+-]?[xyzXYZ]"` or int matching the regular expression `[+-]?[123]` where the sign is the side of the plane to select and coordinate is the axis to align the plane with +* `position`: position of the plane along the axis (float value) +* `relative` (default: `false`): if the `position` is relative to the mesh's rest bounding box + +!!! example + `{"axis": "-X", "position": 1}` will select points with a x-coordinate less than 1. + +### Plane + +A plane selection. Everything on one side of the plane is selected. + +**Parameters:** + +* `normal`: normal of the plane ($n$-length array) +* `point`: point on the plane (has priority over `offset`) ($n$-length array) + * (alternatively) `offset`: offset along the normal from the origin defining the point (float value) +* `relative` (default: `false`): if the `point` is relative to the mesh's rest bounding box (does not apply to the offset) + +!!! example + `{"normal": [1, 1, 0], "point": [0, 1, 0]}` will select points $x$ where $(x-p) \cdot n \ge 0$. + +Restart +------- + +For time-dependent simulation, the state variables ($u$, $v = \dot{u}$, and $a = \ddot{u}$) are exported using the following parameters: + +```js +"output": { + "data": { + "state": "" + } +} +``` + +The path can be either absolute or relative to the output directory. The state will be saved in [HDF5](https://en.wikipedia.org/wiki/Hierarchical_Data_Format) format containing the keys `u`, `v`, and `a` for the solution, velocity, and acceleration, respectively. + +This file can then be used to initialize (or restart) the simulation from the saved state by specifying: + +```js +"input": { + "data": { + "state": "" + } +} +``` + +!!! note + When restarting the simulation it is necessary to also specify the `"time": {"t0": }` parameter for the starting time. Otherwise, it will assume a starting time of `0`. \ No newline at end of file diff --git a/json_defaults_and_spec/index.html b/json_defaults_and_spec/index.html new file mode 100644 index 00000000..c042650a --- /dev/null +++ b/json_defaults_and_spec/index.html @@ -0,0 +1,16906 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + JSON Specification - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

JSON Specification

+ +

Defaults

+

The following json contains the default values by PolyFEM.

+

Values of "REQUIRED!" indicate the field has no default and must be specified by the user.

+
{
+    "boundary_conditions": {
+        "dirichlet_boundary": [],
+        "neumann_boundary": [],
+        "normal_aligned_neumann_boundary": [],
+        "obstacle_displacements": [],
+        "periodic_boundary": {
+            "correspondence": [],
+            "enabled": false,
+            "fixed_macro_strain": [],
+            "force_zero_mean": false,
+            "linear_displacement_offset": [],
+            "tolerance": 1e-05
+        },
+        "pressure_boundary": [],
+        "pressure_cavity": [],
+        "rhs": {
+            "unit": "REQUIRED!",
+            "value": "REQUIRED!"
+        }
+    },
+    "common": "",
+    "contact": {
+        "collision_mesh": {
+            "enabled": true,
+            "linear_map": "REQUIRED!",
+            "max_edge_length": "REQUIRED!",
+            "mesh": "REQUIRED!",
+            "tessellation_type": "regular"
+        },
+        "dhat": 0.001,
+        "dhat_percentage": 0.8,
+        "enabled": false,
+        "epsv": 0.001,
+        "friction_coefficient": 0,
+        "periodic": false,
+        "use_convergent_formulation": false
+    },
+    "geometry": "REQUIRED!",
+    "initial_conditions": {
+        "acceleration": [],
+        "solution": [],
+        "velocity": []
+    },
+    "input": {
+        "data": {
+            "reorder": false,
+            "state": ""
+        }
+    },
+    "materials": "REQUIRED!",
+    "output": {
+        "advanced": {
+            "compute_error": true,
+            "curved_mesh_size": false,
+            "save_ccd_debug_meshes": false,
+            "save_nl_solve_sequence": false,
+            "save_solve_sequence_debug": false,
+            "save_time_sequence": true,
+            "sol_at_node": -1,
+            "sol_on_grid": -1,
+            "spectrum": false,
+            "timestep_prefix": "step_",
+            "vis_boundary_only": false
+        },
+        "data": {
+            "advanced": {
+                "reorder_nodes": false
+            },
+            "full_mat": "",
+            "mises": "",
+            "nodes": "",
+            "rest_mesh": "",
+            "solution": "",
+            "state": "",
+            "stiffness_mat": "",
+            "stress_mat": ""
+        },
+        "directory": "",
+        "json": "",
+        "log": {
+            "file_level": "trace",
+            "level": "debug",
+            "path": "",
+            "quiet": false
+        },
+        "paraview": {
+            "file_name": "",
+            "high_order_mesh": true,
+            "options": {
+                "acceleration": false,
+                "body_ids": false,
+                "contact_forces": false,
+                "discretization_order": true,
+                "forces": false,
+                "friction_forces": false,
+                "material": false,
+                "nodes": true,
+                "scalar_values": true,
+                "tensor_values": true,
+                "use_hdf5": false,
+                "velocity": false
+            },
+            "points": false,
+            "skip_frame": 1,
+            "surface": false,
+            "vismesh_rel_area": 1e-05,
+            "volume": true,
+            "wireframe": false
+        },
+        "reference": {
+            "gradient": [],
+            "solution": []
+        },
+        "restart_json": ""
+    },
+    "preset_problem": {
+        "U": {},
+        "angular_v0": 0.5,
+        "angular_v1": -0.5,
+        "axis_coordiante": 2,
+        "axis_coordiante0": 2,
+        "axis_coordiante1": 2,
+        "bbox_center": [],
+        "fixed_boundary": 5,
+        "force": {},
+        "formulation": "",
+        "func": 0,
+        "kernel_distance": 0,
+        "kernel_weights": "",
+        "n_kernels": 0,
+        "n_turns": 0.5,
+        "time_dependent": {},
+        "turning_boundary": 6,
+        "turning_boundary0": 5,
+        "turning_boundary1": 6,
+        "type": "REQUIRED!",
+        "viscosity": 1
+    },
+    "root_path": "",
+    "solver": {
+        "adjoint_linear": {
+            "AMGCL": {
+                "precond": {
+                    "class": "amg",
+                    "coarsening": {
+                        "aggr": {
+                            "eps_strong": 0
+                        },
+                        "estimate_spectral_radius": true,
+                        "relax": 1,
+                        "type": "smoothed_aggregation"
+                    },
+                    "direct_coarse": false,
+                    "max_levels": 6,
+                    "ncycle": 2,
+                    "relax": {
+                        "degree": 16,
+                        "higher": 2,
+                        "lower": 0.008333333333,
+                        "power_iters": 100,
+                        "scale": true,
+                        "type": "chebyshev"
+                    }
+                },
+                "solver": {
+                    "maxiter": 1000,
+                    "tol": 1e-10,
+                    "type": "cg"
+                }
+            },
+            "Eigen::BiCGSTAB": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::ConjugateGradient": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::DGMRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::GMRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::LeastSquaresConjugateGradient": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::MINRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Hypre": {
+                "max_iter": 1000,
+                "pre_max_iter": 1,
+                "tolerance": 1e-10
+            },
+            "Pardiso": {
+                "mtype": 11
+            },
+            "enable_overwrite_solver": false,
+            "precond": "",
+            "solver": ""
+        },
+        "advanced": {
+            "cache_size": 900000,
+            "lagged_regularization_iterations": 1,
+            "lagged_regularization_weight": 0,
+            "lump_mass_matrix": false
+        },
+        "augmented_lagrangian": {
+            "eta": 0.99,
+            "initial_weight": 1000000.0,
+            "max_weight": 100000000.0,
+            "nonlinear": {
+                "ADAM": {
+                    "alpha": 0.001,
+                    "beta_1": 0.9,
+                    "beta_2": 0.999,
+                    "epsilon": 1e-08
+                },
+                "L-BFGS": {
+                    "history_size": 6
+                },
+                "L-BFGS-B": {
+                    "history_size": 6
+                },
+                "Newton": {
+                    "force_psd_projection": false,
+                    "reg_weight_inc": 10,
+                    "reg_weight_max": 100000000.0,
+                    "reg_weight_min": 1e-08,
+                    "residual_tolerance": 1e-05,
+                    "use_psd_projection": true,
+                    "use_psd_projection_in_regularized": true
+                },
+                "StochasticADAM": {
+                    "alpha": 0.001,
+                    "beta_1": 0.9,
+                    "beta_2": 0.999,
+                    "epsilon": 1e-08,
+                    "erase_component_probability": 0.3
+                },
+                "StochasticGradientDescent": {
+                    "erase_component_probability": 0.3
+                },
+                "advanced": {
+                    "apply_gradient_fd": "None",
+                    "derivative_along_delta_x_tol": 0,
+                    "f_delta": 0,
+                    "f_delta_step_tol": 100,
+                    "gradient_fd_eps": 1e-07
+                },
+                "allow_out_of_iterations": false,
+                "box_constraints": {
+                    "bounds": [],
+                    "max_change": -1
+                },
+                "first_grad_norm_tol": 1e-10,
+                "grad_norm": 1e-08,
+                "iterations_per_strategy": 5,
+                "line_search": {
+                    "Armijo": {
+                        "c": 0.0001
+                    },
+                    "RobustArmijo": {
+                        "delta_relative_tolerance": 0.1
+                    },
+                    "default_init_step_size": 1,
+                    "max_step_size_iter": 30,
+                    "max_step_size_iter_final": 100,
+                    "method": "RobustArmijo",
+                    "min_step_size": 1e-10,
+                    "min_step_size_final": 1e-20,
+                    "step_ratio": 0.5,
+                    "use_grad_norm_tol": 1e-06
+                },
+                "max_iterations": 500,
+                "solver": "Newton",
+                "x_delta": 0
+            },
+            "scaling": 2.0
+        },
+        "contact": {
+            "CCD": {
+                "broad_phase": "hash_grid",
+                "max_iterations": 1000000,
+                "tolerance": 1e-06
+            },
+            "barrier_stiffness": "adaptive",
+            "friction_convergence_tol": 0.01,
+            "friction_iterations": 1
+        },
+        "linear": {
+            "AMGCL": {
+                "precond": {
+                    "class": "amg",
+                    "coarsening": {
+                        "aggr": {
+                            "eps_strong": 0
+                        },
+                        "estimate_spectral_radius": true,
+                        "relax": 1,
+                        "type": "smoothed_aggregation"
+                    },
+                    "direct_coarse": false,
+                    "max_levels": 6,
+                    "ncycle": 2,
+                    "relax": {
+                        "degree": 16,
+                        "higher": 2,
+                        "lower": 0.008333333333,
+                        "power_iters": 100,
+                        "scale": true,
+                        "type": "chebyshev"
+                    }
+                },
+                "solver": {
+                    "maxiter": 1000,
+                    "tol": 1e-10,
+                    "type": "cg"
+                }
+            },
+            "Eigen::BiCGSTAB": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::ConjugateGradient": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::DGMRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::GMRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::LeastSquaresConjugateGradient": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Eigen::MINRES": {
+                "max_iter": 1000,
+                "tolerance": 1e-12
+            },
+            "Hypre": {
+                "max_iter": 1000,
+                "pre_max_iter": 1,
+                "tolerance": 1e-10
+            },
+            "Pardiso": {
+                "mtype": 11
+            },
+            "enable_overwrite_solver": false,
+            "precond": "",
+            "solver": ""
+        },
+        "max_threads": 0,
+        "nonlinear": {
+            "ADAM": {
+                "alpha": 0.001,
+                "beta_1": 0.9,
+                "beta_2": 0.999,
+                "epsilon": 1e-08
+            },
+            "L-BFGS": {
+                "history_size": 6
+            },
+            "L-BFGS-B": {
+                "history_size": 6
+            },
+            "Newton": {
+                "force_psd_projection": false,
+                "reg_weight_inc": 10,
+                "reg_weight_max": 100000000.0,
+                "reg_weight_min": 1e-08,
+                "residual_tolerance": 1e-05,
+                "use_psd_projection": true,
+                "use_psd_projection_in_regularized": true
+            },
+            "StochasticADAM": {
+                "alpha": 0.001,
+                "beta_1": 0.9,
+                "beta_2": 0.999,
+                "epsilon": 1e-08,
+                "erase_component_probability": 0.3
+            },
+            "StochasticGradientDescent": {
+                "erase_component_probability": 0.3
+            },
+            "advanced": {
+                "apply_gradient_fd": "None",
+                "derivative_along_delta_x_tol": 0,
+                "f_delta": 0,
+                "f_delta_step_tol": 100,
+                "gradient_fd_eps": 1e-07
+            },
+            "allow_out_of_iterations": false,
+            "box_constraints": {
+                "bounds": [],
+                "max_change": -1
+            },
+            "first_grad_norm_tol": 1e-10,
+            "grad_norm": 1e-08,
+            "iterations_per_strategy": 5,
+            "line_search": {
+                "Armijo": {
+                    "c": 0.0001
+                },
+                "RobustArmijo": {
+                    "delta_relative_tolerance": 0.1
+                },
+                "default_init_step_size": 1,
+                "max_step_size_iter": 30,
+                "max_step_size_iter_final": 100,
+                "method": "RobustArmijo",
+                "min_step_size": 1e-10,
+                "min_step_size_final": 1e-20,
+                "step_ratio": 0.5,
+                "use_grad_norm_tol": 1e-06
+            },
+            "max_iterations": 500,
+            "solver": "Newton",
+            "x_delta": 0
+        },
+        "rayleigh_damping": []
+    },
+    "space": {
+        "advanced": {
+            "B": 3,
+            "bc_method": "sample",
+            "count_flipped_els": true,
+            "discr_order_max": 4,
+            "force_no_ref_for_harmonic": false,
+            "h1_formula": false,
+            "integral_constraints": 2,
+            "isoparametric": false,
+            "mass_quadrature_order": -1,
+            "n_boundary_samples": -1,
+            "n_harmonic_samples": 10,
+            "quadrature_order": -1,
+            "use_particle_advection": false
+        },
+        "basis_type": "Lagrange",
+        "discr_order": 1,
+        "poly_basis_type": "MFSHarmonic",
+        "pressure_discr_order": 1,
+        "remesh": {
+            "collapse": {
+                "abs_max_edge_length": 1e+100,
+                "acceptance_tolerance": -1e-08,
+                "culling_threshold": 0.01,
+                "enabled": true,
+                "max_depth": 3,
+                "rel_max_edge_length": 1
+            },
+            "enabled": false,
+            "local_relaxation": {
+                "local_mesh_n_ring": 2,
+                "local_mesh_rel_area": 0.01,
+                "max_nl_iterations": 1
+            },
+            "smooth": {
+                "acceptance_tolerance": -1e-08,
+                "enabled": false,
+                "max_iters": 1
+            },
+            "split": {
+                "acceptance_tolerance": 0.001,
+                "culling_threshold": 0.95,
+                "enabled": true,
+                "max_depth": 3,
+                "min_edge_length": 1e-06
+            },
+            "swap": {
+                "acceptance_tolerance": -1e-08,
+                "enabled": false,
+                "max_depth": 3
+            },
+            "type": "physics"
+        },
+        "use_p_ref": false
+    },
+    "tests": {
+        "err_h1": 0,
+        "err_h1_semi": 0,
+        "err_l2": 0,
+        "err_linf": 0,
+        "err_linf_grad": 0,
+        "err_lp": 0,
+        "margin": 1e-05,
+        "time_steps": 1
+    },
+    "time": {
+        "dt": "REQUIRED!",
+        "integrator": {
+            "beta": 0.25,
+            "gamma": 0.5,
+            "steps": 1,
+            "type": "REQUIRED!"
+        },
+        "quasistatic": false,
+        "t0": 0,
+        "tend": "REQUIRED!",
+        "time_steps": "REQUIRED!"
+    },
+    "units": {
+        "characteristic_length": 1,
+        "length": "m",
+        "mass": "kg",
+        "time": "s"
+    }
+}
+
+

Full Specification

+

The following json contains the full specification of the PolyFEM JSON API.

+ + + +
+

/ (object)

+

/
+
+

Description

+Root of the configuration file. +

Required

+
+/geometry (list) +

/geometry
+
+

Description

+List of geometry objects.

+
+/geometry/* +
/geometry/*
+
+
+
+
+

Description

+Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+
+/geometry/*/mesh (file) +

/geometry/*/mesh
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/volume_selection +
/geometry/*/volume_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: None +

Optional

+
+/geometry/*/volume_selection/id_offset (int) +

/geometry/*/volume_selection/id_offset
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: 0

+
+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/volume_selection/* +
/geometry/*/volume_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/box (list) +

/geometry/*/volume_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/* (list) +

/geometry/*/volume_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/*/* (float) +

/geometry/*/volume_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/center (list) +

/geometry/*/volume_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/center/* (float) +

/geometry/*/volume_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/p1 (list) +

/geometry/*/volume_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p1/* (float) +

/geometry/*/volume_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/p2 (list) +

/geometry/*/volume_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p2/* (float) +

/geometry/*/volume_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/point (list) +

/geometry/*/volume_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/point/* (float) +

/geometry/*/volume_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/normal (list) +

/geometry/*/volume_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/normal/* (float) +

/geometry/*/volume_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/axis +
/geometry/*/volume_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/volume_selection/*/position (float) +

/geometry/*/volume_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+
+
+
+
+
+
+
+/geometry/*/surface_selection +
/geometry/*/surface_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/surface_selection/* +
/geometry/*/surface_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/box (list) +

/geometry/*/surface_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/* (list) +

/geometry/*/surface_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/*/* (float) +

/geometry/*/surface_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/center (list) +

/geometry/*/surface_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/center/* (float) +

/geometry/*/surface_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/p1 (list) +

/geometry/*/surface_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p1/* (float) +

/geometry/*/surface_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/p2 (list) +

/geometry/*/surface_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p2/* (float) +

/geometry/*/surface_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/point (list) +

/geometry/*/surface_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/point/* (float) +

/geometry/*/surface_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/normal (list) +

/geometry/*/surface_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/normal/* (float) +

/geometry/*/surface_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/axis +
/geometry/*/surface_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/surface_selection/*/position (float) +

/geometry/*/surface_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/threshold (float) +

/geometry/*/surface_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/surface_selection/*/id_offset (int) +

/geometry/*/surface_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/curve_selection (object) +

/geometry/*/curve_selection
+
+

Description

+Selection of curves

+

Default: None

+
+
+/geometry/*/point_selection +
/geometry/*/point_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/point_selection/* +
/geometry/*/point_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/box (list) +

/geometry/*/point_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/* (list) +

/geometry/*/point_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/*/* (float) +

/geometry/*/point_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/center (list) +

/geometry/*/point_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/center/* (float) +

/geometry/*/point_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/p1 (list) +

/geometry/*/point_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p1/* (float) +

/geometry/*/point_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/p2 (list) +

/geometry/*/point_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p2/* (float) +

/geometry/*/point_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/point (list) +

/geometry/*/point_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/point/* (float) +

/geometry/*/point_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/normal (list) +

/geometry/*/point_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/normal/* (float) +

/geometry/*/point_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/axis +
/geometry/*/point_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/point_selection/*/position (float) +

/geometry/*/point_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/threshold (float) +

/geometry/*/point_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/point_selection/*/id_offset (int) +

/geometry/*/point_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: mesh_array +

Description

+Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. +

Required

+
+/geometry/*/mesh (file) +

/geometry/*/mesh
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+
+/geometry/*/array (object) +

/geometry/*/array
+
+

Description

+Array of meshes +

Required

+
+/geometry/*/array/offset (float) +

/geometry/*/array/offset
+
+

Description

+Offset of the mesh in the array.

+
+
+/geometry/*/array/size (list) +

/geometry/*/array/size
+
+

Description

+Size of the array (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/array/size/* (int) +

/geometry/*/array/size/*
+
+

Description

+Size of the array (two entries for 2D problems or three entries for 3D problems).

+

Range: [1, inf]

+
+
+

Optional

+
+/geometry/*/array/relative (bool) +

/geometry/*/array/relative
+
+

Description

+Is the offset value relative to the mesh’s dimensions.

+

Default: False

+
+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/volume_selection +
/geometry/*/volume_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: None +

Optional

+
+/geometry/*/volume_selection/id_offset (int) +

/geometry/*/volume_selection/id_offset
+
+

Description

+Offsets the volume IDs loaded from the mesh.

+

Default: 0

+
+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/volume_selection/* +
/geometry/*/volume_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/box (list) +

/geometry/*/volume_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/* (list) +

/geometry/*/volume_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/box/*/* (float) +

/geometry/*/volume_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/center (list) +

/geometry/*/volume_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/center/* (float) +

/geometry/*/volume_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/radius (float) +

/geometry/*/volume_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/p1 (list) +

/geometry/*/volume_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p1/* (float) +

/geometry/*/volume_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/p2 (list) +

/geometry/*/volume_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/p2/* (float) +

/geometry/*/volume_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/point (list) +

/geometry/*/volume_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/point/* (float) +

/geometry/*/volume_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/volume_selection/*/normal (list) +

/geometry/*/volume_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/volume_selection/*/normal/* (float) +

/geometry/*/volume_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/volume_selection/*/id (int) +

/geometry/*/volume_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/volume_selection/*/axis +
/geometry/*/volume_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/volume_selection/*/position (float) +

/geometry/*/volume_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/volume_selection/*/relative (bool) +

/geometry/*/volume_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+
+
+
+
+
+
+
+/geometry/*/surface_selection +
/geometry/*/surface_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/surface_selection/* +
/geometry/*/surface_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/box (list) +

/geometry/*/surface_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/* (list) +

/geometry/*/surface_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/box/*/* (float) +

/geometry/*/surface_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/center (list) +

/geometry/*/surface_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/center/* (float) +

/geometry/*/surface_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/radius (float) +

/geometry/*/surface_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/p1 (list) +

/geometry/*/surface_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p1/* (float) +

/geometry/*/surface_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/p2 (list) +

/geometry/*/surface_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/p2/* (float) +

/geometry/*/surface_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/point (list) +

/geometry/*/surface_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/point/* (float) +

/geometry/*/surface_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/surface_selection/*/normal (list) +

/geometry/*/surface_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/surface_selection/*/normal/* (float) +

/geometry/*/surface_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/id (int) +

/geometry/*/surface_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/surface_selection/*/axis +
/geometry/*/surface_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/surface_selection/*/position (float) +

/geometry/*/surface_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/surface_selection/*/relative (bool) +

/geometry/*/surface_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/surface_selection/*/threshold (float) +

/geometry/*/surface_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/surface_selection/*/id_offset (int) +

/geometry/*/surface_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/curve_selection (object) +

/geometry/*/curve_selection
+
+

Description

+Selection of curves

+

Default: None

+
+
+/geometry/*/point_selection +
/geometry/*/point_selection
+
+
+
+
+

Description

+Assign specified ID to all elements of the geometry.

+
+
+

Description

+Load ids from a file; the file is required to have one ID per element of the geometry

+

Extensions: ['.txt']

+
+
+

Description

+List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

+
+/geometry/*/point_selection/* +
/geometry/*/point_selection/*
+
+
+
+
+

Description

+Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/box (list) +

/geometry/*/point_selection/*/box
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/* (list) +

/geometry/*/point_selection/*/box/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/box/*/* (float) +

/geometry/*/point_selection/*/box/*/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/center (list) +

/geometry/*/point_selection/*/center
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/center/* (float) +

/geometry/*/point_selection/*/center/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/radius (float) +

/geometry/*/point_selection/*/radius
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/p1 (list) +

/geometry/*/point_selection/*/p1
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p1/* (float) +

/geometry/*/point_selection/*/p1/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/p2 (list) +

/geometry/*/point_selection/*/p2
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/p2/* (float) +

/geometry/*/point_selection/*/p2/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/point (list) +

/geometry/*/point_selection/*/point
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/point/* (float) +

/geometry/*/point_selection/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/point_selection/*/normal (list) +

/geometry/*/point_selection/*/normal
+
+

Description

+FIXME: Missing documentation in the specification.

+
+/geometry/*/point_selection/*/normal/* (float) +

/geometry/*/point_selection/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r”[+-][xyzXYZ]” or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/id (int) +

/geometry/*/point_selection/*/id
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+/geometry/*/point_selection/*/axis +
/geometry/*/point_selection/*/axis
+
+
+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+
+
+/geometry/*/point_selection/*/position (float) +

/geometry/*/point_selection/*/position
+
+

Description

+FIXME: Missing documentation in the specification.

+
+

Optional

+
+/geometry/*/point_selection/*/relative (bool) +

/geometry/*/point_selection/*/relative
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: False

+
+
+
+

Description

+Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

+

Default: None +

Required

+
+/geometry/*/point_selection/*/threshold (float) +

/geometry/*/point_selection/*/threshold
+
+

Description

+Threshold for box side selection.

+
+

Optional

+
+/geometry/*/point_selection/*/id_offset (int) +

/geometry/*/point_selection/*/id_offset
+
+

Description

+ID offset of box side selection.

+

Default: 0

+
+
+
+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: plane +

Description

+Plane geometry object defined by its origin and normal. +

Required

+
+/geometry/*/point (list) +

/geometry/*/point
+
+

Description

+Point on plane (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/point/* (float) +

/geometry/*/point/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+
+/geometry/*/normal (list) +

/geometry/*/normal
+
+

Description

+Normal of plane (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/normal/* (float) +

/geometry/*/normal/*
+
+

Description

+FIXME: Missing documentation in the specification.

+
+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: ground +

Description

+Plane orthogonal to gravity defined by its height. +

Required

+
+/geometry/*/height (float) +

/geometry/*/height
+
+

Description

+Height of ground plane.

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+

Type: mesh_sequence +

Description

+Mesh sequence. +

Required

+
+/geometry/*/mesh_sequence +
/geometry/*/mesh_sequence
+
+
+
+
+

Description

+Directory (or GLOB) of meshes for the mesh sequence.

+
+
+

Description

+List of mesh files for the mesh sequence.

+
+/geometry/*/mesh_sequence/* (file) +

/geometry/*/mesh_sequence/*
+
+

Description

+Path of the mesh file to load.

+

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

+
+
+
+
+
+
+/geometry/*/fps (int) +

/geometry/*/fps
+
+

Description

+Frames of the mesh sequence per second.

+
+

Optional

+
+/geometry/*/type (string) +

/geometry/*/type
+
+

Description

+Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

+

Default: 'mesh'

+

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

+
+
+/geometry/*/extract (string) +

/geometry/*/extract
+
+

Description

+Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

+

Default: 'volume'

+

Options: ['volume', 'edges', 'points', 'surface']

+
+
+/geometry/*/unit (string) +

/geometry/*/unit
+
+

Description

+Units of the geometric model.

+

Default: ''

+
+
+/geometry/*/transformation (object) +

/geometry/*/transformation
+
+

Description

+Geometric transformations applied to the geometry after loading it.

+

Default: None +

Optional

+
+/geometry/*/transformation/translation (list) +

/geometry/*/transformation/translation
+
+

Description

+Translate (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/translation/* (float) +

/geometry/*/transformation/translation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation (list) +

/geometry/*/transformation/rotation
+
+

Description

+Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

+
+/geometry/*/transformation/rotation/* (float) +

/geometry/*/transformation/rotation/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/rotation_mode (string) +

/geometry/*/transformation/rotation_mode
+
+

Description

+Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

+

Default: 'xyz'

+
+
+/geometry/*/transformation/scale (list) +

/geometry/*/transformation/scale
+
+

Description

+Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

+
+/geometry/*/transformation/scale/* (float) +

/geometry/*/transformation/scale/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+/geometry/*/transformation/dimensions +
/geometry/*/transformation/dimensions
+
+
+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+

Default: 1

+
+
+

Description

+Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

+
+/geometry/*/transformation/dimensions/* (float) +

/geometry/*/transformation/dimensions/*
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: 0

+
+
+
+
+
+
+
+/geometry/*/n_refs (int) +

/geometry/*/n_refs
+
+

Description

+number of uniform refinements

+

Default: 0

+
+
+/geometry/*/advanced (object) +

/geometry/*/advanced
+
+

Description

+Advanced options for geometry

+

Default: None +

Optional

+
+/geometry/*/advanced/normalize_mesh (bool) +

/geometry/*/advanced/normalize_mesh
+
+

Description

+Rescale the mesh to it fits in the biunit cube

+

Default: False

+
+
+/geometry/*/advanced/force_linear_geometry (bool) +

/geometry/*/advanced/force_linear_geometry
+
+

Description

+Discard high-order nodes for curved geometries

+

Default: False

+
+
+/geometry/*/advanced/refinement_location (float) +

/geometry/*/advanced/refinement_location
+
+

Description

+parametric location of the refinement

+

Default: 0.5

+
+
+/geometry/*/advanced/min_component (int) +

/geometry/*/advanced/min_component
+
+

Description

+Size of the minumum component for collision

+

Default: -1

+
+
+
+/geometry/*/enabled (bool) +

/geometry/*/enabled
+
+

Description

+Skips the geometry if false

+

Default: True

+
+
+/geometry/*/is_obstacle (bool) +

/geometry/*/is_obstacle
+
+

Description

+The geometry elements are not included in deforming geometry, only in collision computations

+

Default: False

+
+
+
+
+
+
+
+/materials (list) +

/materials
+
+

Description

+Material Parameters lists including ID pointing to volume selection, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), Density (\(\rho\)), or Lamé constants (\(\lambda\) and \(\mu\)).

+
+/materials/* +
/materials/*
+
+
+
+
+

Type: NeoHookean +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: NeoHookean +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin3Param +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c3 +
/materials/*/c3
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c3/value +
/materials/*/c3/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c3/unit (string) +

/materials/*/c3/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/d1 +
/materials/*/d1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/d1/value +
/materials/*/d1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/d1/unit (string) +

/materials/*/d1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: MooneyRivlin3ParamSymbolic +

Description

+Material Parameters including ID, for Mooney-Rivlin +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c1 +
/materials/*/c1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c1/value +
/materials/*/c1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c1/unit (string) +

/materials/*/c1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c2 +
/materials/*/c2
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c2/value +
/materials/*/c2/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c2/unit (string) +

/materials/*/c2/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/c3 +
/materials/*/c3
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c3/value +
/materials/*/c3/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c3/unit (string) +

/materials/*/c3/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/d1 +
/materials/*/d1
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/d1/value +
/materials/*/d1/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/d1/unit (string) +

/materials/*/d1/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: UnconstrainedOgden +

Description

+Material Parameters including ID, for Ogden. +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/alphas +
/materials/*/alphas
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/alphas/value +
/materials/*/alphas/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/alphas/unit (string) +

/materials/*/alphas/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mus (list) +

/materials/*/mus
+
+

Description

+Ogden mu

+
+/materials/*/mus/* +
/materials/*/mus/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mus/*/value +
/materials/*/mus/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mus/*/unit (string) +

/materials/*/mus/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+/materials/*/Ds (list) +

/materials/*/Ds
+
+

Description

+Ogden D

+
+/materials/*/Ds/* +
/materials/*/Ds/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/Ds/*/value +
/materials/*/Ds/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/Ds/*/unit (string) +

/materials/*/Ds/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleOgden +

Description

+Material Parameters including ID, for Ogden. +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/c +
/materials/*/c
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c/value +
/materials/*/c/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c/unit (string) +

/materials/*/c/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Coefficient(s) of Incompressible Ogden

+
+/materials/*/c/* +
/materials/*/c/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/c/*/value +
/materials/*/c/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/c/*/unit (string) +

/materials/*/c/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/materials/*/m +
/materials/*/m
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/m/value +
/materials/*/m/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/m/unit (string) +

/materials/*/m/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Exponent(s) of Incompressible Ogden

+
+/materials/*/m/* +
/materials/*/m/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/m/*/value +
/materials/*/m/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/m/*/unit (string) +

/materials/*/m/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: LinearElasticity +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: LinearElasticity +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: HookeLinearElasticity +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: HookeLinearElasticity +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/elasticity_tensor (list) +

/materials/*/elasticity_tensor
+
+

Description

+Symmetric elasticity tensor

+
+/materials/*/elasticity_tensor/* +
/materials/*/elasticity_tensor/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/elasticity_tensor/*/value +
/materials/*/elasticity_tensor/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/elasticity_tensor/*/unit (string) +

/materials/*/elasticity_tensor/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: SaintVenant +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: SaintVenant +

Description

+Material Parameters including ID, E, nu, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/elasticity_tensor (list) +

/materials/*/elasticity_tensor
+
+

Description

+Symmetric elasticity tensor

+
+/materials/*/elasticity_tensor/* +
/materials/*/elasticity_tensor/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/elasticity_tensor/*/value +
/materials/*/elasticity_tensor/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/elasticity_tensor/*/unit (string) +

/materials/*/elasticity_tensor/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Stokes +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: NavierStokes +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: OperatorSplitting +

Description

+Material Parameters including ID, viscosity, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/viscosity +
/materials/*/viscosity
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/viscosity/value +
/materials/*/viscosity/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/viscosity/unit (string) +

/materials/*/viscosity/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleLinearElasticity +

Description

+Material Parameters including ID, Young’s modulus (\(E\)), Poisson’s ratio (\(\nu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: IncompressibleLinearElasticity +

Description

+Material Parameters including ID, Lamé first (\(\lambda\)), Lamé second (\(\mu\)), density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Laplacian +

Description

+Material Parameters including ID, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Helmholtz +

Description

+Material Parameters including ID, k, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/k +
/materials/*/k
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/k/value +
/materials/*/k/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/k/unit (string) +

/materials/*/k/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: Bilaplacian +

Description

+Material Parameters including ID, density (\(\rho\)) +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: AMIPS +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+
+

Type: FixedCorotational +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/E +
/materials/*/E
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/E/value +
/materials/*/E/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/E/unit (string) +

/materials/*/E/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/nu +
/materials/*/nu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/nu/value +
/materials/*/nu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/nu/unit (string) +

/materials/*/nu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+

Type: FixedCorotational +

Description

+Material Parameters including ID +

Required

+
+/materials/*/type (string) +

/materials/*/type
+
+

Description

+Type of material

+

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

+
+
+/materials/*/lambda +
/materials/*/lambda
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/lambda/value +
/materials/*/lambda/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/lambda/unit (string) +

/materials/*/lambda/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/mu +
/materials/*/mu
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/mu/value +
/materials/*/mu/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/mu/unit (string) +

/materials/*/mu/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/materials/*/id +
/materials/*/id
+
+
+
+
+

Description

+Volume selection ID

+

Default: 0

+
+
+

Description

+Volume selection IDs

+
+/materials/*/id/* (int) +

/materials/*/id/*
+
+

Description

+Volume selection ID

+
+
+
+
+
+
+/materials/*/rho +
/materials/*/rho
+
+
+
+
+

Description

+Value as a constant float

+

Default: 1

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/rho/value +
/materials/*/rho/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/rho/unit (string) +

/materials/*/rho/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/phi +
/materials/*/phi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/phi/value +
/materials/*/phi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/phi/unit (string) +

/materials/*/phi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+/materials/*/psi +
/materials/*/psi
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/materials/*/psi/value +
/materials/*/psi/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/materials/*/psi/unit (string) +

/materials/*/psi/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+

Optional

+
+/units (object) +

/units
+
+

Description

+Basic units used in the code.

+

Default: None +

Optional

+
+/units/length (string) +

/units/length
+
+

Description

+Length unit.

+

Default: 'm'

+
+
+/units/mass (string) +

/units/mass
+
+

Description

+Mass unit.

+

Default: 'kg'

+
+
+/units/time (string) +

/units/time
+
+

Description

+Time unit.

+

Default: 's'

+
+
+/units/characteristic_length (float) +

/units/characteristic_length
+
+

Description

+Characteristic length, used for tolerances.

+

Default: 1

+
+
+
+/preset_problem +
/preset_problem
+
+
+
+
+

Type: Linear +

Description

+TODO

+

Default: 'skip' +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Quadratic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Cubic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Sine +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Franke +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: FrankeOld +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: GenericScalarExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+
+

Type: Zero_BC +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Elastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Walk +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TorsionElastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/axis_coordiante (int) +

/preset_problem/axis_coordiante
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/n_turns (float) +

/preset_problem/n_turns
+
+

Description

+TODO

+

Default: 0.5

+
+
+/preset_problem/fixed_boundary (int) +

/preset_problem/fixed_boundary
+
+

Description

+TODO

+

Default: 5

+
+
+/preset_problem/turning_boundary (int) +

/preset_problem/turning_boundary
+
+

Description

+TODO

+

Default: 6

+
+
+/preset_problem/bbox_center (list) +

/preset_problem/bbox_center
+
+

Description

+TODO

+
+/preset_problem/bbox_center/* (float) +

/preset_problem/bbox_center/*
+
+

Description

+TODO

+

Default: 0

+
+
+
+
+

Type: DoubleTorsionElastic +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/axis_coordiante0 (int) +

/preset_problem/axis_coordiante0
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/axis_coordiante1 (int) +

/preset_problem/axis_coordiante1
+
+

Description

+TODO

+

Default: 2

+
+
+/preset_problem/angular_v0 (float) +

/preset_problem/angular_v0
+
+

Description

+TODO

+

Default: 0.5

+
+
+/preset_problem/angular_v1 (float) +

/preset_problem/angular_v1
+
+

Description

+TODO

+

Default: -0.5

+
+
+/preset_problem/turning_boundary0 (int) +

/preset_problem/turning_boundary0
+
+

Description

+TODO

+

Default: 5

+
+
+/preset_problem/turning_boundary1 (int) +

/preset_problem/turning_boundary1
+
+

Description

+TODO

+

Default: 6

+
+
+/preset_problem/bbox_center (list) +

/preset_problem/bbox_center
+
+

Description

+TODO

+
+/preset_problem/bbox_center/* (float) +

/preset_problem/bbox_center/*
+
+

Description

+TODO

+

Default: 0

+
+
+
+
+

Type: ElasticZeroBC +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: ElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: ElasticCantileverExact +

Description

+TODO, add displacement, E, nu, formulation, mesh_size +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: CompressionElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: QuadraticElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: LinearElasticExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: PointBasedTensor +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Kernel +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/formulation (string) +

/preset_problem/formulation
+
+

Description

+TODO

+

Default: ''

+
+
+/preset_problem/n_kernels (int) +

/preset_problem/n_kernels
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/kernel_distance (float) +

/preset_problem/kernel_distance
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/kernel_weights (string) +

/preset_problem/kernel_weights
+
+

Description

+TODO

+

Default: ''

+
+
+
+

Type: Node +

Description

+TODO, add optionals +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TimeDependentScalar +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: MinSurf +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Gravity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: ConstantVelocity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TwoSpheres +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavity +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavityC0 +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: DrivenCavitySmooth +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: Flow +

Description

+TODO, add inflow, outflow, inflow_amout, outflow_amout, direction, obstacle +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: FlowWithObstacle +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: CornerFlow +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: UnitFlowWithObstacle +

Description

+TODO, add inflow_id, direction, no_slip +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: StokesLaw +

Description

+TODO, add radius +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: TaylorGreenVortex +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: SimpleStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+
+

Type: SineStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: TransientStokeProblemExact +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/func (int) +

/preset_problem/func
+
+

Description

+TODO

+

Default: 0

+
+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: Kovnaszy +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+/preset_problem/viscosity (float) +

/preset_problem/viscosity
+
+

Description

+TODO

+

Default: 1

+
+
+
+

Type: Airfoil +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: Lshape +

Description

+TODO +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+

Optional

+
+
+

Type: TestProblem +

Description

+TODO, type, omega, is_scalar +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+

Type: BilaplacianProblemWithSolution +

Description

+TODO, type, omega, is_scalar +

Required

+
+/preset_problem/type (string) +

/preset_problem/type
+
+

Description

+Type of preset problem to use.

+

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

+
+
+
+
+
+
+/common (file) +

/common
+
+

Description

+Path to common settings will patch the current file.

+

Default: ''

+

Extensions: ['.json']

+
+
+/root_path (string) +

/root_path
+
+

Description

+Path for all relative paths, set automatically to the folder containing this JSON.

+

Default: ''

+
+
+/space (object) +

/space
+
+

Description

+Options related to the FE space.

+

Default: None +

Optional

+
+/space/discr_order +
/space/discr_order
+
+
+
+
+

Description

+Lagrange element order for the space for the main unknown, for all elements.

+

Default: 1

+
+
+

Description

+Path to file containing Lagrange element order for the space for the main unknown per element.

+

Extensions: ['.txt', '.bin']

+
+
+

Description

+List of Lagrange element order for the space for the main unknown with volume IDs.

+
+/space/discr_order/* (object) +

/space/discr_order/*
+
+

Description

+Lagrange element order for the a space tagged with volume ID for the main unknown. +

Required

+
+/space/discr_order/*/id +
/space/discr_order/*/id
+
+
+
+
+

Description

+Volume selection ID to apply the discr_order to.

+
+
+

Description

+List of volume selection IDs to apply the discr_order to.

+
+/space/discr_order/*/id/* (int) +

/space/discr_order/*/id/*
+
+

Description

+Volume selection ID to apply the discr_order to.

+
+
+
+
+
+
+/space/discr_order/*/order (int) +

/space/discr_order/*/order
+
+

Description

+Lagrange element order for the space for the main unknown, for all elements.

+
+
+
+
+
+
+
+/space/pressure_discr_order (int) +

/space/pressure_discr_order
+
+

Description

+ Lagrange element order for the space for the pressure unknown, for all elements.

+

Default: 1

+
+
+/space/basis_type (string) +

/space/basis_type
+
+

Description

+Type of basis to use for non polygonal element, one of Lagrange, Spline, or Serendipity. Spline or Serendipity work only for quad/hex meshes

+

Default: 'Lagrange'

+

Options: ['Lagrange', 'Spline', 'Serendipity']

+
+
+/space/poly_basis_type (string) +

/space/poly_basis_type
+
+

Description

+Type of basis to use for a polygonal element, one of MFSHarmonic, MeanValue, or Wachspress see ‘PolySpline..’ paper for details.

+

Default: 'MFSHarmonic'

+

Options: ['MFSHarmonic', 'MeanValue', 'Wachspress']

+
+
+/space/use_p_ref (bool) +

/space/use_p_ref
+
+

Description

+Perform a priori p-refinement based on element shape, as described in ‘Decoupling..’ paper.

+

Default: False

+
+
+/space/remesh (object) +

/space/remesh
+
+

Description

+Settings for adaptive remeshing

+

Default: None +

Optional

+
+/space/remesh/enabled (bool) +

/space/remesh/enabled
+
+

Description

+Whether to do adaptive remeshing

+

Default: False

+
+
+/space/remesh/split (object) +

/space/remesh/split
+
+

Description

+Settings for adaptive remeshing edge splitting operations

+

Default: None +

Optional

+
+/space/remesh/split/enabled (bool) +

/space/remesh/split/enabled
+
+

Description

+Whether to do edge splitting in adaptive remeshing

+

Default: True

+
+
+/space/remesh/split/acceptance_tolerance (float) +

/space/remesh/split/acceptance_tolerance
+
+

Description

+Accept split operation if energy decreased by at least x

+

Default: 0.001

+

Range: [0, inf]

+
+
+/space/remesh/split/culling_threshold (float) +

/space/remesh/split/culling_threshold
+
+

Description

+Split operation culling threshold on energy

+

Default: 0.95

+

Range: [0, 1]

+
+
+/space/remesh/split/max_depth (int) +

/space/remesh/split/max_depth
+
+

Description

+Maximum depth split per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+/space/remesh/split/min_edge_length (float) +

/space/remesh/split/min_edge_length
+
+

Description

+Minimum edge length to split

+

Default: 1e-06

+

Range: [0, inf]

+
+
+
+/space/remesh/collapse (object) +

/space/remesh/collapse
+
+

Description

+Settings for adaptive remeshing edge collapse operations

+

Default: None +

Optional

+
+/space/remesh/collapse/enabled (bool) +

/space/remesh/collapse/enabled
+
+

Description

+Whether to do edge collapse in adaptive remeshing

+

Default: True

+
+
+/space/remesh/collapse/acceptance_tolerance (float) +

/space/remesh/collapse/acceptance_tolerance
+
+

Description

+Accept collapse operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/collapse/culling_threshold (float) +

/space/remesh/collapse/culling_threshold
+
+

Description

+Collapse operation culling threshold on energy

+

Default: 0.01

+

Range: [0, 1]

+
+
+/space/remesh/collapse/max_depth (int) +

/space/remesh/collapse/max_depth
+
+

Description

+Maximum depth collapse per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+/space/remesh/collapse/rel_max_edge_length (float) +

/space/remesh/collapse/rel_max_edge_length
+
+

Description

+Length of maximum edge length to collapse relative to initial minimum edge length

+

Default: 1

+

Range: [0, inf]

+
+
+/space/remesh/collapse/abs_max_edge_length (float) +

/space/remesh/collapse/abs_max_edge_length
+
+

Description

+Length of maximum edge length to collapse in absolute units of distance

+

Default: 1e+100

+

Range: [0, inf]

+
+
+
+/space/remesh/swap (object) +

/space/remesh/swap
+
+

Description

+Settings for adaptive remeshing edge/face swap operations

+

Default: None +

Optional

+
+/space/remesh/swap/enabled (bool) +

/space/remesh/swap/enabled
+
+

Description

+Whether to do edge/face swap in adaptive remeshing

+

Default: False

+
+
+/space/remesh/swap/acceptance_tolerance (float) +

/space/remesh/swap/acceptance_tolerance
+
+

Description

+Accept swap operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/swap/max_depth (int) +

/space/remesh/swap/max_depth
+
+

Description

+Maximum depth swap per time-step

+

Default: 3

+

Range: [1, inf]

+
+
+
+/space/remesh/smooth (object) +

/space/remesh/smooth
+
+

Description

+Settings for adaptive remeshing vertex smoothing operations

+

Default: None +

Optional

+
+/space/remesh/smooth/enabled (bool) +

/space/remesh/smooth/enabled
+
+

Description

+Whether to do vertex smoothing in adaptive remeshing

+

Default: False

+
+
+/space/remesh/smooth/acceptance_tolerance (float) +

/space/remesh/smooth/acceptance_tolerance
+
+

Description

+Accept smooth operation if energy decreased by at least x

+

Default: -1e-08

+

Range: [-inf, 0]

+
+
+/space/remesh/smooth/max_iters (int) +

/space/remesh/smooth/max_iters
+
+

Description

+Maximum number of smoothing iterations per time-step

+

Default: 1

+

Range: [1, inf]

+
+
+
+/space/remesh/local_relaxation (object) +

/space/remesh/local_relaxation
+
+

Description

+Settings for adaptive remeshing local relaxation

+

Default: None +

Optional

+
+/space/remesh/local_relaxation/local_mesh_n_ring (int) +

/space/remesh/local_relaxation/local_mesh_n_ring
+
+

Description

+Size of n-ring for local relaxation

+

Default: 2

+
+
+/space/remesh/local_relaxation/local_mesh_rel_area (float) +

/space/remesh/local_relaxation/local_mesh_rel_area
+
+

Description

+Minimum area for local relaxation

+

Default: 0.01

+
+
+/space/remesh/local_relaxation/max_nl_iterations (int) +

/space/remesh/local_relaxation/max_nl_iterations
+
+

Description

+Maximum number of nonlinear solver iterations before acceptance check

+

Default: 1

+
+
+
+/space/remesh/type (string) +

/space/remesh/type
+
+

Description

+Type of adaptive remeshing to use.

+

Default: 'physics'

+

Options: ['physics', 'sizing_field']

+
+
+
+/space/advanced (object) +

/space/advanced
+
+

Description

+Advanced settings for the FE space.

+

Default: None +

Optional

+
+/space/advanced/discr_order_max (int) +

/space/advanced/discr_order_max
+
+

Description

+Maximal discretization order in adaptive p-refinement and hp-refinement

+

Default: 4

+
+
+/space/advanced/isoparametric (bool) +

/space/advanced/isoparametric
+
+

Description

+Forces geometric map basis to be the same degree as the main variable basis, irrespective of the degree associated with the geom. map degrees associated with the elements of the geometry.

+

Default: False

+
+
+/space/advanced/bc_method (string) +

/space/advanced/bc_method
+
+

Description

+Method for imposing analytic Dirichet boundary conditions. If ‘lsq’ (least-squares fit), then the bc function is sampled at quadrature points, and the FEspace nodal values on the boundary are determined by minimizing L2 norm of the difference. If ‘sample’, then the analytic bc function is sampled at the boundary nodes.

+

Default: 'sample'

+

Options: ['lsq', 'sample']

+
+
+/space/advanced/n_boundary_samples (int) +

/space/advanced/n_boundary_samples
+
+

Description

+Per-element number of boundary samples for analytic Dirichlet and Neumann boundary conditions.

+

Default: -1

+
+
+/space/advanced/quadrature_order (int) +

/space/advanced/quadrature_order
+
+

Description

+Minimal quadrature order to use in matrix and rhs assembly; the actual order is determined as min(2*(p-1)+1,quadrature_order).

+

Default: -1

+
+
+/space/advanced/mass_quadrature_order (int) +

/space/advanced/mass_quadrature_order
+
+

Description

+Minimal quadrature order to use in mass matrix assembler; the actual order is determined as min(2*p+1,quadrature_order)

+

Default: -1

+
+
+/space/advanced/integral_constraints (int) +

/space/advanced/integral_constraints
+
+

Description

+Number of constraints for non-conforming polygonal basis; 0, 1, or 2; see ‘PolySpline..’ paper for details.

+

Default: 2

+
+
+/space/advanced/n_harmonic_samples (int) +

/space/advanced/n_harmonic_samples
+
+

Description

+If MFSHarmonics is used for a polygonal element, number of collocation samples used in the basis construction;see ‘PolySpline..’ paper for details.

+

Default: 10

+
+
+/space/advanced/force_no_ref_for_harmonic (bool) +

/space/advanced/force_no_ref_for_harmonic
+
+

Description

+If true, do not do uniform global refinement if the mesh contains polygonal elements.

+

Default: False

+
+
+/space/advanced/B (int) +

/space/advanced/B
+
+

Description

+The target deviation of the error on elements from perfect element error, for a priori geometry-dependent p-refinement, see ‘Decoupling .. ‘ paper.

+

Default: 3

+
+
+/space/advanced/h1_formula (bool) +

/space/advanced/h1_formula
+
+

Description

+

Default: False

+
+
+/space/advanced/count_flipped_els (bool) +

/space/advanced/count_flipped_els
+
+

Description

+Count the number of elements with Jacobian of the geometric map not positive at quadrature points.

+

Default: True

+
+
+/space/advanced/use_particle_advection (bool) +

/space/advanced/use_particle_advection
+
+

Description

+Use particle advection in splitting method for solving NS equation.

+

Default: False

+
+
+
+
+/time +
/time
+
+
+
+
+

Description

+The time parameters: start time t0, end time tend, time step dt.

+

Default: 'skip' +

Required

+
+/time/tend (float) +

/time/tend
+
+

Description

+Ending time

+

Range: [0, inf]

+
+
+/time/dt (float) +

/time/dt
+
+

Description

+Time step size \(\Delta t\)

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+

Description

+The time parameters: start time t0, time step dt, number of time steps. +

Required

+
+/time/time_steps (int) +

/time/time_steps
+
+

Description

+Number of time steps

+

Range: [0, inf]

+
+
+/time/dt (float) +

/time/dt
+
+

Description

+Time step size \(\Delta t\)

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+

Description

+The time parameters: start time t0, end time tend, number of time steps. +

Required

+
+/time/time_steps (int) +

/time/time_steps
+
+

Description

+Number of time steps

+

Range: [0, inf]

+
+
+/time/tend (float) +

/time/tend
+
+

Description

+Ending time

+

Range: [0, inf]

+
+

Optional

+
+/time/t0 (float) +

/time/t0
+
+

Description

+Startning time

+

Default: 0

+

Range: [0, inf]

+
+
+/time/integrator +
/time/integrator
+
+
+
+
+

Description

+Time integrator

+

Default: 'ImplicitEuler'

+

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

+
+
+

Type: ImplicitEuler +

Description

+Implicit Euler time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+
+
+

Type: BDF +

Description

+Backwards differentiation formula time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/steps (int) +

/time/integrator/steps
+
+

Description

+BDF order

+

Default: 1

+

Range: [1, 6]

+
+
+
+

Type: ImplicitNewmark +

Description

+Implicit Newmark time integration +

Required

+
+/time/integrator/type (string) +

/time/integrator/type
+
+

Description

+Type of time integrator to use

+

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

+
+

Optional

+
+/time/integrator/gamma (float) +

/time/integrator/gamma
+
+

Description

+Newmark gamma

+

Default: 0.5

+

Range: [0, 1]

+
+
+/time/integrator/beta (float) +

/time/integrator/beta
+
+

Description

+Newmark beta

+

Default: 0.25

+

Range: [0, 0.5]

+
+
+
+
+
+
+/time/quasistatic (bool) +

/time/quasistatic
+
+

Description

+Ignore inertia in time dependent. Used for doing incremental load.

+

Default: False

+
+
+
+
+
+
+/contact (object) +

/contact
+
+

Description

+Contact handling parameters.

+

Default: None +

Optional

+
+/contact/enabled (bool) +

/contact/enabled
+
+

Description

+True if contact handling is enabled.

+

Default: False

+
+
+/contact/dhat (float) +

/contact/dhat
+
+

Description

+Contact barrier activation distance.

+

Default: 0.001

+

Range: [0, inf]

+
+
+/contact/dhat_percentage (float) +

/contact/dhat_percentage
+
+

Description

+\(\hat{d}\) as percentage of the diagonal of the bounding box

+

Default: 0.8

+
+
+/contact/epsv (float) +

/contact/epsv
+
+

Description

+Friction smoothing parameter.

+

Default: 0.001

+

Range: [0, inf]

+
+
+/contact/friction_coefficient (float) +

/contact/friction_coefficient
+
+

Description

+Coefficient of friction (global)

+

Default: 0

+
+
+/contact/use_convergent_formulation (bool) +

/contact/use_convergent_formulation
+
+

Description

+Whether to use the convergent (area weighted) formulation of IPC.

+

Default: False

+
+
+/contact/collision_mesh +
/contact/collision_mesh
+
+
+
+
+

Description

+Load a preconstructed collision mesh.

+

Default: 'skip' +

Required

+
+/contact/collision_mesh/mesh (string) +

/contact/collision_mesh/mesh
+
+

Description

+Path to preconstructed collision mesh.

+
+
+/contact/collision_mesh/linear_map (string) +

/contact/collision_mesh/linear_map
+
+

Description

+HDF file storing the linear mapping of displacements.

+
+

Optional

+
+/contact/collision_mesh/enabled (bool) +

/contact/collision_mesh/enabled
+
+

Description

+

Default: True

+
+
+
+

Description

+Construct a collision mesh with a maximum edge length. +

Required

+
+/contact/collision_mesh/max_edge_length (float) +

/contact/collision_mesh/max_edge_length
+
+

Description

+Maximum edge length to use for building the collision mesh.

+
+

Optional

+
+/contact/collision_mesh/tessellation_type (string) +

/contact/collision_mesh/tessellation_type
+
+

Description

+Type of tessellation to use for building the collision mesh.

+

Default: 'regular'

+

Options: ['regular', 'irregular']

+
+
+/contact/collision_mesh/enabled (bool) +

/contact/collision_mesh/enabled
+
+

Description

+

Default: True

+
+
+
+
+
+
+/contact/periodic (bool) +

/contact/periodic
+
+

Description

+Set to true to check collision between adjacent periodic cells.

+

Default: False

+
+
+
+/solver (object) +

/solver
+
+

Description

+The settings for the solver including linear solver, nonlinear solver, and some advanced options.

+

Default: None +

Optional

+
+/solver/max_threads (int) +

/solver/max_threads
+
+

Description

+Maximum number of threads used; 0 is unlimited.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/linear (object) +

/solver/linear
+
+

Description

+Settings for the linear solver.

+

Default: None +

Optional

+
+/solver/linear/enable_overwrite_solver (bool) +

/solver/linear/enable_overwrite_solver
+
+

Description

+If solver name is not present, falls back to default

+

Default: False

+
+
+/solver/linear/solver (string) +

/solver/linear/solver
+
+

Description

+Linear solver type.

+

Default: ''

+

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

+
+
+/solver/linear/precond (string) +

/solver/linear/precond
+
+

Description

+Preconditioner used if using an iterative linear solver.

+

Default: ''

+

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

+
+
+/solver/linear/Eigen::LeastSquaresConjugateGradient (object) +

/solver/linear/Eigen::LeastSquaresConjugateGradient
+
+

Description

+Settings for the Eigen’s Least Squares Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter (int) +

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance (float) +

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::DGMRES (object) +

/solver/linear/Eigen::DGMRES
+
+

Description

+Settings for the Eigen’s DGMRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::DGMRES/max_iter (int) +

/solver/linear/Eigen::DGMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::DGMRES/tolerance (float) +

/solver/linear/Eigen::DGMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::ConjugateGradient (object) +

/solver/linear/Eigen::ConjugateGradient
+
+

Description

+Settings for the Eigen’s Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::ConjugateGradient/max_iter (int) +

/solver/linear/Eigen::ConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::ConjugateGradient/tolerance (float) +

/solver/linear/Eigen::ConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::BiCGSTAB (object) +

/solver/linear/Eigen::BiCGSTAB
+
+

Description

+Settings for the Eigen’s BiCGSTAB solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::BiCGSTAB/max_iter (int) +

/solver/linear/Eigen::BiCGSTAB/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::BiCGSTAB/tolerance (float) +

/solver/linear/Eigen::BiCGSTAB/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::GMRES (object) +

/solver/linear/Eigen::GMRES
+
+

Description

+Settings for the Eigen’s GMRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::GMRES/max_iter (int) +

/solver/linear/Eigen::GMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::GMRES/tolerance (float) +

/solver/linear/Eigen::GMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Eigen::MINRES (object) +

/solver/linear/Eigen::MINRES
+
+

Description

+Settings for the Eigen’s MINRES solver.

+

Default: None +

Optional

+
+/solver/linear/Eigen::MINRES/max_iter (int) +

/solver/linear/Eigen::MINRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Eigen::MINRES/tolerance (float) +

/solver/linear/Eigen::MINRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/linear/Pardiso (object) +

/solver/linear/Pardiso
+
+

Description

+Settings for the Pardiso solver.

+

Default: None +

Optional

+
+/solver/linear/Pardiso/mtype (int) +

/solver/linear/Pardiso/mtype
+
+

Description

+Matrix type.

+

Default: 11

+

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

+
+
+
+/solver/linear/Hypre (object) +

/solver/linear/Hypre
+
+

Description

+Settings for the Hypre solver.

+

Default: None +

Optional

+
+/solver/linear/Hypre/max_iter (int) +

/solver/linear/Hypre/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/Hypre/pre_max_iter (int) +

/solver/linear/Hypre/pre_max_iter
+
+

Description

+Maximum number of pre iterations.

+

Default: 1

+
+
+/solver/linear/Hypre/tolerance (float) +

/solver/linear/Hypre/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+
+/solver/linear/AMGCL (object) +

/solver/linear/AMGCL
+
+

Description

+Settings for the AMGCL solver.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/solver (object) +

/solver/linear/AMGCL/solver
+
+

Description

+Solver settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/solver/tol (float) +

/solver/linear/AMGCL/solver/tol
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+/solver/linear/AMGCL/solver/maxiter (int) +

/solver/linear/AMGCL/solver/maxiter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/linear/AMGCL/solver/type (string) +

/solver/linear/AMGCL/solver/type
+
+

Description

+Type of solver to use.

+

Default: 'cg'

+
+
+
+/solver/linear/AMGCL/precond (object) +

/solver/linear/AMGCL/precond
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/relax (object) +

/solver/linear/AMGCL/precond/relax
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/relax/degree (int) +

/solver/linear/AMGCL/precond/relax/degree
+
+

Description

+Degree of the polynomial.

+

Default: 16

+
+
+/solver/linear/AMGCL/precond/relax/type (string) +

/solver/linear/AMGCL/precond/relax/type
+
+

Description

+Type of relaxation to use.

+

Default: 'chebyshev'

+
+
+/solver/linear/AMGCL/precond/relax/power_iters (int) +

/solver/linear/AMGCL/precond/relax/power_iters
+
+

Description

+Number of power iterations.

+

Default: 100

+
+
+/solver/linear/AMGCL/precond/relax/higher (float) +

/solver/linear/AMGCL/precond/relax/higher
+
+

Description

+Higher level relaxation.

+

Default: 2

+
+
+/solver/linear/AMGCL/precond/relax/lower (float) +

/solver/linear/AMGCL/precond/relax/lower
+
+

Description

+Lower level relaxation.

+

Default: 0.008333333333

+
+
+/solver/linear/AMGCL/precond/relax/scale (bool) +

/solver/linear/AMGCL/precond/relax/scale
+
+

Description

+Scale.

+

Default: True

+
+
+
+/solver/linear/AMGCL/precond/class (string) +

/solver/linear/AMGCL/precond/class
+
+

Description

+Type of preconditioner to use.

+

Default: 'amg'

+
+
+/solver/linear/AMGCL/precond/max_levels (int) +

/solver/linear/AMGCL/precond/max_levels
+
+

Description

+Maximum number of levels.

+

Default: 6

+
+
+/solver/linear/AMGCL/precond/direct_coarse (bool) +

/solver/linear/AMGCL/precond/direct_coarse
+
+

Description

+Use direct solver for the coarsest level.

+

Default: False

+
+
+/solver/linear/AMGCL/precond/ncycle (int) +

/solver/linear/AMGCL/precond/ncycle
+
+

Description

+Number of cycles.

+

Default: 2

+
+
+/solver/linear/AMGCL/precond/coarsening (object) +

/solver/linear/AMGCL/precond/coarsening
+
+

Description

+Coarsening parameters.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/coarsening/type (string) +

/solver/linear/AMGCL/precond/coarsening/type
+
+

Description

+Coarsening type.

+

Default: 'smoothed_aggregation'

+
+
+/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool) +

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius
+
+

Description

+Should the spectral radius be estimated.

+

Default: True

+
+
+/solver/linear/AMGCL/precond/coarsening/relax (float) +

/solver/linear/AMGCL/precond/coarsening/relax
+
+

Description

+Coarsening relaxation.

+

Default: 1

+
+
+/solver/linear/AMGCL/precond/coarsening/aggr (object) +

/solver/linear/AMGCL/precond/coarsening/aggr
+
+

Description

+Aggregation settings.

+

Default: None +

Optional

+
+/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong (float) +

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong
+
+

Description

+Aggregation epsilon strong.

+

Default: 0

+
+
+
+
+
+
+
+/solver/adjoint_linear (object) +

/solver/adjoint_linear
+
+

Description

+Settings for the linear solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/enable_overwrite_solver (bool) +

/solver/adjoint_linear/enable_overwrite_solver
+
+

Description

+If solver name is not present, falls back to default

+

Default: False

+
+
+/solver/adjoint_linear/solver (string) +

/solver/adjoint_linear/solver
+
+

Description

+Linear solver type.

+

Default: ''

+

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

+
+
+/solver/adjoint_linear/precond (string) +

/solver/adjoint_linear/precond
+
+

Description

+Preconditioner used if using an iterative linear solver.

+

Default: ''

+

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

+
+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient (object) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient
+
+

Description

+Settings for the Eigen’s Least Squares Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter (int) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance (float) +

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::DGMRES (object) +

/solver/adjoint_linear/Eigen::DGMRES
+
+

Description

+Settings for the Eigen’s DGMRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::DGMRES/max_iter (int) +

/solver/adjoint_linear/Eigen::DGMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::DGMRES/tolerance (float) +

/solver/adjoint_linear/Eigen::DGMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::ConjugateGradient (object) +

/solver/adjoint_linear/Eigen::ConjugateGradient
+
+

Description

+Settings for the Eigen’s Conjugate Gradient solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter (int) +

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance (float) +

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::BiCGSTAB (object) +

/solver/adjoint_linear/Eigen::BiCGSTAB
+
+

Description

+Settings for the Eigen’s BiCGSTAB solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter (int) +

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance (float) +

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::GMRES (object) +

/solver/adjoint_linear/Eigen::GMRES
+
+

Description

+Settings for the Eigen’s GMRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::GMRES/max_iter (int) +

/solver/adjoint_linear/Eigen::GMRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::GMRES/tolerance (float) +

/solver/adjoint_linear/Eigen::GMRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Eigen::MINRES (object) +

/solver/adjoint_linear/Eigen::MINRES
+
+

Description

+Settings for the Eigen’s MINRES solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Eigen::MINRES/max_iter (int) +

/solver/adjoint_linear/Eigen::MINRES/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Eigen::MINRES/tolerance (float) +

/solver/adjoint_linear/Eigen::MINRES/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-12

+
+
+
+/solver/adjoint_linear/Pardiso (object) +

/solver/adjoint_linear/Pardiso
+
+

Description

+Settings for the Pardiso solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Pardiso/mtype (int) +

/solver/adjoint_linear/Pardiso/mtype
+
+

Description

+Matrix type.

+

Default: 11

+

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

+
+
+
+/solver/adjoint_linear/Hypre (object) +

/solver/adjoint_linear/Hypre
+
+

Description

+Settings for the Hypre solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/Hypre/max_iter (int) +

/solver/adjoint_linear/Hypre/max_iter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/Hypre/pre_max_iter (int) +

/solver/adjoint_linear/Hypre/pre_max_iter
+
+

Description

+Maximum number of pre iterations.

+

Default: 1

+
+
+/solver/adjoint_linear/Hypre/tolerance (float) +

/solver/adjoint_linear/Hypre/tolerance
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+
+/solver/adjoint_linear/AMGCL (object) +

/solver/adjoint_linear/AMGCL
+
+

Description

+Settings for the AMGCL solver.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/solver (object) +

/solver/adjoint_linear/AMGCL/solver
+
+

Description

+Solver settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/solver/tol (float) +

/solver/adjoint_linear/AMGCL/solver/tol
+
+

Description

+Convergence tolerance.

+

Default: 1e-10

+
+
+/solver/adjoint_linear/AMGCL/solver/maxiter (int) +

/solver/adjoint_linear/AMGCL/solver/maxiter
+
+

Description

+Maximum number of iterations.

+

Default: 1000

+
+
+/solver/adjoint_linear/AMGCL/solver/type (string) +

/solver/adjoint_linear/AMGCL/solver/type
+
+

Description

+Type of solver to use.

+

Default: 'cg'

+
+
+
+/solver/adjoint_linear/AMGCL/precond (object) +

/solver/adjoint_linear/AMGCL/precond
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/relax (object) +

/solver/adjoint_linear/AMGCL/precond/relax
+
+

Description

+Preconditioner settings for the AMGCL.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/relax/degree (int) +

/solver/adjoint_linear/AMGCL/precond/relax/degree
+
+

Description

+Degree of the polynomial.

+

Default: 16

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/type (string) +

/solver/adjoint_linear/AMGCL/precond/relax/type
+
+

Description

+Type of relaxation to use.

+

Default: 'chebyshev'

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/power_iters (int) +

/solver/adjoint_linear/AMGCL/precond/relax/power_iters
+
+

Description

+Number of power iterations.

+

Default: 100

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/higher (float) +

/solver/adjoint_linear/AMGCL/precond/relax/higher
+
+

Description

+Higher level relaxation.

+

Default: 2

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/lower (float) +

/solver/adjoint_linear/AMGCL/precond/relax/lower
+
+

Description

+Lower level relaxation.

+

Default: 0.008333333333

+
+
+/solver/adjoint_linear/AMGCL/precond/relax/scale (bool) +

/solver/adjoint_linear/AMGCL/precond/relax/scale
+
+

Description

+Scale.

+

Default: True

+
+
+
+/solver/adjoint_linear/AMGCL/precond/class (string) +

/solver/adjoint_linear/AMGCL/precond/class
+
+

Description

+Type of preconditioner to use.

+

Default: 'amg'

+
+
+/solver/adjoint_linear/AMGCL/precond/max_levels (int) +

/solver/adjoint_linear/AMGCL/precond/max_levels
+
+

Description

+Maximum number of levels.

+

Default: 6

+
+
+/solver/adjoint_linear/AMGCL/precond/direct_coarse (bool) +

/solver/adjoint_linear/AMGCL/precond/direct_coarse
+
+

Description

+Use direct solver for the coarsest level.

+

Default: False

+
+
+/solver/adjoint_linear/AMGCL/precond/ncycle (int) +

/solver/adjoint_linear/AMGCL/precond/ncycle
+
+

Description

+Number of cycles.

+

Default: 2

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening (object) +

/solver/adjoint_linear/AMGCL/precond/coarsening
+
+

Description

+Coarsening parameters.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/coarsening/type (string) +

/solver/adjoint_linear/AMGCL/precond/coarsening/type
+
+

Description

+Coarsening type.

+

Default: 'smoothed_aggregation'

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool) +

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius
+
+

Description

+Should the spectral radius be estimated.

+

Default: True

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/relax (float) +

/solver/adjoint_linear/AMGCL/precond/coarsening/relax
+
+

Description

+Coarsening relaxation.

+

Default: 1

+
+
+/solver/adjoint_linear/AMGCL/precond/coarsening/aggr (object) +

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr
+
+

Description

+Aggregation settings.

+

Default: None +

Optional

+
+/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong (float) +

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong
+
+

Description

+Aggregation epsilon strong.

+

Default: 0

+
+
+
+
+
+
+
+/solver/nonlinear (object) +

/solver/nonlinear
+
+

Description

+Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

+

Default: None +

Optional

+
+/solver/nonlinear/solver +
/solver/nonlinear/solver
+
+
+
+
+

Description

+Nonlinear solver type

+

Default: 'Newton'

+

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

+
+
+

Description

+List of solvers for ballback. Eg, [{‘type’:’Newton’}, {‘type’:’L-BFGS’}, {‘type’:’GradientDescent’}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

+
+/solver/nonlinear/solver/* +
/solver/nonlinear/solver/*
+
+
+
+
+

Type: Newton +

Description

+Options for Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: ProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: RegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: RegularizedProjectedNewton +

Description

+Options for regularized projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseNewton +

Description

+Options for Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseRegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseRegularizedProjectedNewton +

Description

+Options for projected regularized Newton. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/residual_tolerance (float) +

/solver/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/solver/*/reg_weight_min (float) +

/solver/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/reg_weight_max (float) +

/solver/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/solver/*/reg_weight_inc (float) +

/solver/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: GradientDescent +

Description

+Options for Gradient Descent. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: StochasticGradientDescent +

Description

+Options for Stochastic Gradient Descent. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/erase_component_probability (float) +

/solver/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+

Type: L-BFGS +

Description

+Options for L-BFGS. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/history_size (int) +

/solver/nonlinear/solver/*/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+

Type: BFGS +

Description

+Options for BFGS. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: ADAM +

Description

+Options for ADAM. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/alpha (float) +

/solver/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/solver/*/beta_1 (float) +

/solver/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/solver/*/beta_2 (float) +

/solver/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/solver/*/epsilon (float) +

/solver/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+

Type: StochasticADAM +

Description

+Options for ADAM. +

Required

+
+/solver/nonlinear/solver/*/type (string) +

/solver/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/nonlinear/solver/*/alpha (float) +

/solver/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/solver/*/beta_1 (float) +

/solver/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/solver/*/beta_2 (float) +

/solver/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/solver/*/epsilon (float) +

/solver/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/nonlinear/solver/*/erase_component_probability (float) +

/solver/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+
+
+
+
+
+
+
+/solver/nonlinear/x_delta (float) +

/solver/nonlinear/x_delta
+
+

Description

+Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/grad_norm (float) +

/solver/nonlinear/grad_norm
+
+

Description

+Stopping criterion: Minimal gradient norm for the iterations to continue.

+

Default: 1e-08

+

Range: [0, inf]

+
+
+/solver/nonlinear/first_grad_norm_tol (float) +

/solver/nonlinear/first_grad_norm_tol
+
+

Description

+Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

+

Default: 1e-10

+
+
+/solver/nonlinear/max_iterations (int) +

/solver/nonlinear/max_iterations
+
+

Description

+Maximum number of iterations for a nonlinear solve.

+

Default: 500

+
+
+/solver/nonlinear/iterations_per_strategy +
/solver/nonlinear/iterations_per_strategy
+
+
+
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+

Description

+Number of iterations for every substrategy before reset.

+
+/solver/nonlinear/iterations_per_strategy/* (int) +

/solver/nonlinear/iterations_per_strategy/*
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+
+
+
+
+/solver/nonlinear/line_search (object) +

/solver/nonlinear/line_search
+
+

Description

+Settings for line-search in the nonlinear solver

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/method (string) +

/solver/nonlinear/line_search/method
+
+

Description

+Line-search type

+

Default: 'RobustArmijo'

+

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

+
+
+/solver/nonlinear/line_search/use_grad_norm_tol (float) +

/solver/nonlinear/line_search/use_grad_norm_tol
+
+

Description

+When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

+

Default: 1e-06

+
+
+/solver/nonlinear/line_search/min_step_size (float) +

/solver/nonlinear/line_search/min_step_size
+
+

Description

+Mimimum step size

+

Default: 1e-10

+
+
+/solver/nonlinear/line_search/max_step_size_iter (int) +

/solver/nonlinear/line_search/max_step_size_iter
+
+

Description

+Number of iterations

+

Default: 30

+
+
+/solver/nonlinear/line_search/min_step_size_final (float) +

/solver/nonlinear/line_search/min_step_size_final
+
+

Description

+Mimimum step size for last descent strategy

+

Default: 1e-20

+
+
+/solver/nonlinear/line_search/max_step_size_iter_final (int) +

/solver/nonlinear/line_search/max_step_size_iter_final
+
+

Description

+Number of iterations for last descent strategy

+

Default: 100

+
+
+/solver/nonlinear/line_search/default_init_step_size (float) +

/solver/nonlinear/line_search/default_init_step_size
+
+

Description

+Initial step size

+

Default: 1

+
+
+/solver/nonlinear/line_search/step_ratio (float) +

/solver/nonlinear/line_search/step_ratio
+
+

Description

+Ratio used to decrease the step

+

Default: 0.5

+
+
+/solver/nonlinear/line_search/Armijo (object) +

/solver/nonlinear/line_search/Armijo
+
+

Description

+Options for Armijo.

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/Armijo/c (float) +

/solver/nonlinear/line_search/Armijo/c
+
+

Description

+Armijo c parameter.

+

Default: 0.0001

+
+
+
+/solver/nonlinear/line_search/RobustArmijo (object) +

/solver/nonlinear/line_search/RobustArmijo
+
+

Description

+Options for RobustArmijo.

+

Default: None +

Optional

+
+/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float) +

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance
+
+

Description

+Relative tolerance on E to switch to approximate.

+

Default: 0.1

+
+
+
+
+/solver/nonlinear/allow_out_of_iterations (bool) +

/solver/nonlinear/allow_out_of_iterations
+
+

Description

+If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

+

Default: False

+
+
+/solver/nonlinear/L-BFGS (object) +

/solver/nonlinear/L-BFGS
+
+

Description

+Options for LBFGS.

+

Default: None +

Optional

+
+/solver/nonlinear/L-BFGS/history_size (int) +

/solver/nonlinear/L-BFGS/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/nonlinear/L-BFGS-B (object) +

/solver/nonlinear/L-BFGS-B
+
+

Description

+Options for the boxed L-BFGS.

+

Default: None +

Optional

+
+/solver/nonlinear/L-BFGS-B/history_size (int) +

/solver/nonlinear/L-BFGS-B/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/nonlinear/Newton (object) +

/solver/nonlinear/Newton
+
+

Description

+Options for Newton.

+

Default: None +

Optional

+
+/solver/nonlinear/Newton/residual_tolerance (float) +

/solver/nonlinear/Newton/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/nonlinear/Newton/reg_weight_min (float) +

/solver/nonlinear/Newton/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/nonlinear/Newton/reg_weight_max (float) +

/solver/nonlinear/Newton/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/nonlinear/Newton/reg_weight_inc (float) +

/solver/nonlinear/Newton/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+/solver/nonlinear/Newton/force_psd_projection (bool) +

/solver/nonlinear/Newton/force_psd_projection
+
+

Description

+Force the Hessian to be PSD when using second order solvers (i.e., Newton’s method).

+

Default: False

+
+
+/solver/nonlinear/Newton/use_psd_projection (bool) +

/solver/nonlinear/Newton/use_psd_projection
+
+

Description

+Use PSD as fallback using second order solvers (i.e., Newton’s method).

+

Default: True

+
+
+/solver/nonlinear/Newton/use_psd_projection_in_regularized (bool) +

/solver/nonlinear/Newton/use_psd_projection_in_regularized
+
+

Description

+Use PSD in regularized Newton.

+

Default: True

+
+
+
+/solver/nonlinear/ADAM (object) +

/solver/nonlinear/ADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/nonlinear/ADAM/alpha (float) +

/solver/nonlinear/ADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/ADAM/beta_1 (float) +

/solver/nonlinear/ADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/ADAM/beta_2 (float) +

/solver/nonlinear/ADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/ADAM/epsilon (float) +

/solver/nonlinear/ADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+/solver/nonlinear/StochasticADAM (object) +

/solver/nonlinear/StochasticADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/nonlinear/StochasticADAM/alpha (float) +

/solver/nonlinear/StochasticADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/nonlinear/StochasticADAM/beta_1 (float) +

/solver/nonlinear/StochasticADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/nonlinear/StochasticADAM/beta_2 (float) +

/solver/nonlinear/StochasticADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/nonlinear/StochasticADAM/epsilon (float) +

/solver/nonlinear/StochasticADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/nonlinear/StochasticADAM/erase_component_probability (float) +

/solver/nonlinear/StochasticADAM/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for ADAM.

+

Default: 0.3

+
+
+
+/solver/nonlinear/StochasticGradientDescent (object) +

/solver/nonlinear/StochasticGradientDescent
+
+

Description

+Options for Stochastic Gradient Descent.

+

Default: None +

Optional

+
+/solver/nonlinear/StochasticGradientDescent/erase_component_probability (float) +

/solver/nonlinear/StochasticGradientDescent/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for StochasticGradientDescent.

+

Default: 0.3

+
+
+
+/solver/nonlinear/box_constraints (object) +

/solver/nonlinear/box_constraints
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: None +

Optional

+
+/solver/nonlinear/box_constraints/bounds (list) +

/solver/nonlinear/box_constraints/bounds
+
+

Description

+Box constraints on optimization variables.

+
+/solver/nonlinear/box_constraints/bounds/* +
/solver/nonlinear/box_constraints/bounds/*
+
+
+
+
+

Description

+Box constraint values on optimization variables.

+
+/solver/nonlinear/box_constraints/bounds/*/* (float) +

/solver/nonlinear/box_constraints/bounds/*/*
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+
+
+
+/solver/nonlinear/box_constraints/max_change +
/solver/nonlinear/box_constraints/max_change
+
+
+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

+

Default: -1

+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints.

+
+/solver/nonlinear/box_constraints/max_change/* (float) +

/solver/nonlinear/box_constraints/max_change/*
+
+

Description

+Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

+
+
+
+
+
+
+
+/solver/nonlinear/advanced (object) +

/solver/nonlinear/advanced
+
+

Description

+Nonlinear solver advanced options

+

Default: None +

Optional

+
+/solver/nonlinear/advanced/f_delta (float) +

/solver/nonlinear/advanced/f_delta
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/advanced/f_delta_step_tol (int) +

/solver/nonlinear/advanced/f_delta_step_tol
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 100

+
+
+/solver/nonlinear/advanced/derivative_along_delta_x_tol (float) +

/solver/nonlinear/advanced/derivative_along_delta_x_tol
+
+

Description

+Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/nonlinear/advanced/apply_gradient_fd (string) +

/solver/nonlinear/advanced/apply_gradient_fd
+
+

Description

+Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

+

Default: 'None'

+

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

+
+
+/solver/nonlinear/advanced/gradient_fd_eps (float) +

/solver/nonlinear/advanced/gradient_fd_eps
+
+

Description

+Expensive Option: Eps for finite difference to verify gradient of energy.

+

Default: 1e-07

+
+
+
+
+/solver/augmented_lagrangian (object) +

/solver/augmented_lagrangian
+
+

Description

+Parameters for the AL for imposing Dirichlet BCs. If the bc are not imposable, we add \(w\|u - bc\|^2\) to the energy (\(u\) is the solution at the Dirichlet nodes and \(bc\) are the Dirichlet values). After convergence, we try to impose bc again. The algorithm computes E + a/2*AL^2 - lambda AL, where E is the current energy (elastic, inertia, contact, etc.) and AL is the augmented Lagrangian energy. a starts at initial_weight and, in case DBC cannot be imposed, we update a as a *= scaling until max_weight. See IPC additional material

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/initial_weight (float) +

/solver/augmented_lagrangian/initial_weight
+
+

Description

+Initial weight for AL

+

Default: 1000000.0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/scaling (float) +

/solver/augmented_lagrangian/scaling
+
+

Description

+Multiplication factor

+

Default: 2.0

+
+
+/solver/augmented_lagrangian/max_weight (float) +

/solver/augmented_lagrangian/max_weight
+
+

Description

+Maximum weight

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/eta (float) +

/solver/augmented_lagrangian/eta
+
+

Description

+Tolerance for increasing the weight or updating the lagrangian

+

Default: 0.99

+

Range: [0, 1]

+
+
+/solver/augmented_lagrangian/nonlinear (object) +

/solver/augmented_lagrangian/nonlinear
+
+

Description

+Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver +
/solver/augmented_lagrangian/nonlinear/solver
+
+
+
+
+

Description

+Nonlinear solver type

+

Default: 'Newton'

+

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

+
+
+

Description

+List of solvers for ballback. Eg, [{‘type’:’Newton’}, {‘type’:’L-BFGS’}, {‘type’:’GradientDescent’}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

+
+/solver/augmented_lagrangian/nonlinear/solver/* +
/solver/augmented_lagrangian/nonlinear/solver/*
+
+
+
+
+

Type: Newton +

Description

+Options for Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: ProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: RegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: RegularizedProjectedNewton +

Description

+Options for regularized projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseNewton +

Description

+Options for Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseProjectedNewton +

Description

+Options for projected Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+
+

Type: DenseRegularizedNewton +

Description

+Options for regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: DenseRegularizedProjectedNewton +

Description

+Options for projected regularized Newton. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+
+

Type: GradientDescent +

Description

+Options for Gradient Descent. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: StochasticGradientDescent +

Description

+Options for Stochastic Gradient Descent. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+

Type: L-BFGS +

Description

+Options for L-BFGS. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/history_size (int) +

/solver/augmented_lagrangian/nonlinear/solver/*/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+

Type: BFGS +

Description

+Options for BFGS. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+
+
+

Type: ADAM +

Description

+Options for ADAM. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+

Type: StochasticADAM +

Description

+Options for ADAM. +

Required

+
+/solver/augmented_lagrangian/nonlinear/solver/*/type (string) +

/solver/augmented_lagrangian/nonlinear/solver/*/type
+
+

Description

+Nonlinear solver type

+

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

+
+

Optional

+
+/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for stochastic solvers.

+

Default: 0.3

+
+
+
+
+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/x_delta (float) +

/solver/augmented_lagrangian/nonlinear/x_delta
+
+

Description

+Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/grad_norm (float) +

/solver/augmented_lagrangian/nonlinear/grad_norm
+
+

Description

+Stopping criterion: Minimal gradient norm for the iterations to continue.

+

Default: 1e-08

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol (float) +

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol
+
+

Description

+Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

+

Default: 1e-10

+
+
+/solver/augmented_lagrangian/nonlinear/max_iterations (int) +

/solver/augmented_lagrangian/nonlinear/max_iterations
+
+

Description

+Maximum number of iterations for a nonlinear solve.

+

Default: 500

+
+
+/solver/augmented_lagrangian/nonlinear/iterations_per_strategy +
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy
+
+
+
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+

Description

+Number of iterations for every substrategy before reset.

+
+/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/* (int) +

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/*
+
+

Description

+Number of iterations for every substrategy before reset.

+

Default: 5

+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/line_search (object) +

/solver/augmented_lagrangian/nonlinear/line_search
+
+

Description

+Settings for line-search in the nonlinear solver

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/method (string) +

/solver/augmented_lagrangian/nonlinear/line_search/method
+
+

Description

+Line-search type

+

Default: 'RobustArmijo'

+

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol (float) +

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol
+
+

Description

+When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

+

Default: 1e-06

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/min_step_size (float) +

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size
+
+

Description

+Mimimum step size

+

Default: 1e-10

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter (int) +

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter
+
+

Description

+Number of iterations

+

Default: 30

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final (float) +

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final
+
+

Description

+Mimimum step size for last descent strategy

+

Default: 1e-20

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final (int) +

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final
+
+

Description

+Number of iterations for last descent strategy

+

Default: 100

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size (float) +

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size
+
+

Description

+Initial step size

+

Default: 1

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/step_ratio (float) +

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio
+
+

Description

+Ratio used to decrease the step

+

Default: 0.5

+
+
+/solver/augmented_lagrangian/nonlinear/line_search/Armijo (object) +

/solver/augmented_lagrangian/nonlinear/line_search/Armijo
+
+

Description

+Options for Armijo.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c (float) +

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c
+
+

Description

+Armijo c parameter.

+

Default: 0.0001

+
+
+
+/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo (object) +

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo
+
+

Description

+Options for RobustArmijo.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance
+
+

Description

+Relative tolerance on E to switch to approximate.

+

Default: 0.1

+
+
+
+
+/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations (bool) +

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations
+
+

Description

+If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

+

Default: False

+
+
+/solver/augmented_lagrangian/nonlinear/L-BFGS (object) +

/solver/augmented_lagrangian/nonlinear/L-BFGS
+
+

Description

+Options for LBFGS.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size (int) +

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/augmented_lagrangian/nonlinear/L-BFGS-B (object) +

/solver/augmented_lagrangian/nonlinear/L-BFGS-B
+
+

Description

+Options for the boxed L-BFGS.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size (int) +

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size
+
+

Description

+The number of corrections to approximate the inverse Hessian matrix.

+

Default: 6

+
+
+
+/solver/augmented_lagrangian/nonlinear/Newton (object) +

/solver/augmented_lagrangian/nonlinear/Newton
+
+

Description

+Options for Newton.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance (float) +

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance
+
+

Description

+Tolerance of the linear system residual. If residual is above, the direction is rejected.

+

Default: 1e-05

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min
+
+

Description

+Minimum regulariztion weight.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max
+
+

Description

+Maximum regulariztion weight.

+

Default: 100000000.0

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc (float) +

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc
+
+

Description

+Regulariztion weight increment.

+

Default: 10

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection
+
+

Description

+Force the Hessian to be PSD when using second order solvers (i.e., Newton’s method).

+

Default: False

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection
+
+

Description

+Use PSD as fallback using second order solvers (i.e., Newton’s method).

+

Default: True

+
+
+/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized (bool) +

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized
+
+

Description

+Use PSD in regularized Newton.

+

Default: True

+
+
+
+/solver/augmented_lagrangian/nonlinear/ADAM (object) +

/solver/augmented_lagrangian/nonlinear/ADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/ADAM/alpha (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/ADAM/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM (object) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM
+
+

Description

+Options for ADAM.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha
+
+

Description

+Parameter alpha for ADAM.

+

Default: 0.001

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1 (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1
+
+

Description

+Parameter beta_1 for ADAM.

+

Default: 0.9

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2 (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2
+
+

Description

+Parameter beta_2 for ADAM.

+

Default: 0.999

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon
+
+

Description

+Parameter epsilon for ADAM.

+

Default: 1e-08

+
+
+/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for ADAM.

+

Default: 0.3

+
+
+
+/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent (object) +

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent
+
+

Description

+Options for Stochastic Gradient Descent.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability (float) +

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability
+
+

Description

+Probability of erasing a component on the gradient for StochasticGradientDescent.

+

Default: 0.3

+
+
+
+/solver/augmented_lagrangian/nonlinear/box_constraints (object) +

/solver/augmented_lagrangian/nonlinear/box_constraints
+
+

Description

+FIXME: Missing documentation in the specification.

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds (list) +

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds
+
+

Description

+Box constraints on optimization variables.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* +
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*
+
+
+
+
+

Description

+Box constraint values on optimization variables.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/* (float) +

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/*
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+

Description

+Box constraint values on optimization variables.

+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/box_constraints/max_change +
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change
+
+
+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

+

Default: -1

+
+
+

Description

+Maximum change of optimization variables in one iteration, only for solvers with box constraints.

+
+/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/* (float) +

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/*
+
+

Description

+Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

+
+
+
+
+
+
+
+/solver/augmented_lagrangian/nonlinear/advanced (object) +

/solver/augmented_lagrangian/nonlinear/advanced
+
+

Description

+Nonlinear solver advanced options

+

Default: None +

Optional

+
+/solver/augmented_lagrangian/nonlinear/advanced/f_delta (float) +

/solver/augmented_lagrangian/nonlinear/advanced/f_delta
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol (int) +

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol
+
+

Description

+Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

+

Default: 100

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol (float) +

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol
+
+

Description

+Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

+

Default: 0

+

Range: [0, inf]

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd (string) +

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd
+
+

Description

+Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

+

Default: 'None'

+

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

+
+
+/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps (float) +

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps
+
+

Description

+Expensive Option: Eps for finite difference to verify gradient of energy.

+

Default: 1e-07

+
+
+
+
+
+/solver/contact (object) +

/solver/contact
+
+

Description

+Settings for contact handling in the solver.

+

Default: None +

Optional

+
+/solver/contact/CCD (object) +

/solver/contact/CCD
+
+

Description

+CCD options

+

Default: None +

Optional

+
+/solver/contact/CCD/broad_phase (string) +

/solver/contact/CCD/broad_phase
+
+

Description

+Broad phase collision-detection algorithm to use

+

Default: 'hash_grid'

+

Options: ['hash_grid', 'HG', 'brute_force', 'BF', 'spatial_hash', 'SH', 'bvh', 'BVH', 'sweep_and_prune', 'SAP', 'sweep_and_tiniest_queue', 'STQ']

+
+
+/solver/contact/CCD/tolerance (float) +

/solver/contact/CCD/tolerance
+
+

Description

+CCD tolerance

+

Default: 1e-06

+
+
+/solver/contact/CCD/max_iterations (int) +

/solver/contact/CCD/max_iterations
+
+

Description

+Maximum number of iterations for continuous collision detection

+

Default: 1000000

+
+
+
+/solver/contact/friction_iterations (int) +

/solver/contact/friction_iterations
+
+

Description

+Maximum number of update iterations for lagged friction formulation (see IPC paper).

+

Default: 1

+
+
+/solver/contact/friction_convergence_tol (float) +

/solver/contact/friction_convergence_tol
+
+

Description

+Tolerence for friction convergence

+

Default: 0.01

+
+
+/solver/contact/barrier_stiffness +
/solver/contact/barrier_stiffness
+
+
+
+
+

Description

+How coefficient of clamped log-barrier function for contact is updated

+

Default: 'adaptive'

+

Options: ['adaptive']

+
+
+

Description

+The coefficient of clamped log-barrier function value when not adaptive

+
+
+
+
+
+
+/solver/rayleigh_damping (list) +

/solver/rayleigh_damping
+
+

Description

+Apply Rayleigh damping.

+
+/solver/rayleigh_damping/* +
/solver/rayleigh_damping/*
+
+
+
+
+

Description

+Apply Rayleigh damping to the given Form with a stiffness ratio. +

Required

+
+/solver/rayleigh_damping/*/form (string) +

/solver/rayleigh_damping/*/form
+
+

Description

+Form to damp.

+

Options: ['elasticity', 'contact', 'friction']

+
+
+/solver/rayleigh_damping/*/stiffness_ratio (float) +

/solver/rayleigh_damping/*/stiffness_ratio
+
+

Description

+Ratio of to damp (stiffness = 0.75 * stiffness_ratio * Δt³).

+

Range: [0, inf]

+
+

Optional

+
+/solver/rayleigh_damping/*/lagging_iterations (int) +

/solver/rayleigh_damping/*/lagging_iterations
+
+

Description

+Maximum number of update iterations for lagging.

+

Default: 1

+
+
+
+

Description

+Apply Rayleigh damping to the given Form with a stiffness. +

Required

+
+/solver/rayleigh_damping/*/form (string) +

/solver/rayleigh_damping/*/form
+
+

Description

+Form to damp.

+

Options: ['elasticity', 'contact', 'friction']

+
+
+/solver/rayleigh_damping/*/stiffness (float) +

/solver/rayleigh_damping/*/stiffness
+
+

Description

+Ratio of to damp.

+

Range: [0, inf]

+
+

Optional

+
+/solver/rayleigh_damping/*/lagging_iterations (int) +

/solver/rayleigh_damping/*/lagging_iterations
+
+

Description

+Maximum number of update iterations for lagging.

+

Default: 1

+
+
+
+
+
+
+
+/solver/advanced (object) +

/solver/advanced
+
+

Description

+Advanced settings for the solver

+

Default: None +

Optional

+
+/solver/advanced/cache_size (int) +

/solver/advanced/cache_size
+
+

Description

+Maximum number of elements when the assembly values are cached.

+

Default: 900000

+
+
+/solver/advanced/lump_mass_matrix (bool) +

/solver/advanced/lump_mass_matrix
+
+

Description

+If true, use diagonal mass matrix with entries on the diagonal equal to the sum of entries in each row of the full mass matrix.}

+

Default: False

+
+
+/solver/advanced/lagged_regularization_weight (float) +

/solver/advanced/lagged_regularization_weight
+
+

Description

+Weight used to regularize singular static problems.

+

Default: 0

+
+
+/solver/advanced/lagged_regularization_iterations (int) +

/solver/advanced/lagged_regularization_iterations
+
+

Description

+Number of regularize singular static problems.

+

Default: 1

+
+
+
+
+/boundary_conditions (object) +

/boundary_conditions
+
+

Description

+The settings for boundary conditions.

+

Default: None +

Optional

+
+/boundary_conditions/rhs +
/boundary_conditions/rhs
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/rhs/value +
/boundary_conditions/rhs/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/rhs/unit (string) +

/boundary_conditions/rhs/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Right-hand side of the system being solved for vector-valued PDEs.

+
+/boundary_conditions/rhs/* +
/boundary_conditions/rhs/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/rhs/*/value +
/boundary_conditions/rhs/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/rhs/*/unit (string) +

/boundary_conditions/rhs/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/boundary_conditions/dirichlet_boundary (list) +

/boundary_conditions/dirichlet_boundary
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/dirichlet_boundary/* +
/boundary_conditions/dirichlet_boundary/*
+
+
+
+
+

Description

+Dirichlet boundary condition.

+

Default: None +

Required

+
+/boundary_conditions/dirichlet_boundary/*/id +
/boundary_conditions/dirichlet_boundary/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value (list) +

/boundary_conditions/dirichlet_boundary/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/dirichlet_boundary/*/value/* +
/boundary_conditions/dirichlet_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/dirichlet_boundary/*/value/*/value +
/boundary_conditions/dirichlet_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value/*/unit (string) +

/boundary_conditions/dirichlet_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Dirichlet boundary condition specified per timestep.

+
+/boundary_conditions/dirichlet_boundary/*/value/*/* +
/boundary_conditions/dirichlet_boundary/*/value/*/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/dirichlet_boundary/*/value/*/*/value +
/boundary_conditions/dirichlet_boundary/*/value/*/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/value/*/*/unit (string) +

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/time_reference (list) +

/boundary_conditions/dirichlet_boundary/*/time_reference
+
+

Description

+List of times when the Dirichlet boundary condition is specified

+
+/boundary_conditions/dirichlet_boundary/*/time_reference/* (float) +

/boundary_conditions/dirichlet_boundary/*/time_reference/*
+
+

Description

+Values of Dirichlet boundary condition for timestep

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/* +
/boundary_conditions/dirichlet_boundary/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/to (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/from (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+/boundary_conditions/dirichlet_boundary/*/dimension (list) +

/boundary_conditions/dirichlet_boundary/*/dimension
+
+

Description

+List of 2 (2D) or 3 (3D) boolean values indicating if the Dirichlet boundary condition is applied for a particular dimension.

+
+/boundary_conditions/dirichlet_boundary/*/dimension/* (bool) +

/boundary_conditions/dirichlet_boundary/*/dimension/*
+
+

Description

+value

+

Default: True

+
+
+
+
+

Description

+Dirichlet boundary condition loaded from a file, , 1 for scalar, ⅔ for tensor depending on dimension.

+
+
+
+
+
+
+/boundary_conditions/neumann_boundary (list) +

/boundary_conditions/neumann_boundary
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/neumann_boundary/* (object) +

/boundary_conditions/neumann_boundary/*
+
+

Description

+Neumann boundary condition

+

Default: None +

Required

+
+/boundary_conditions/neumann_boundary/*/id +
/boundary_conditions/neumann_boundary/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/neumann_boundary/*/value (list) +

/boundary_conditions/neumann_boundary/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/neumann_boundary/*/value/* +
/boundary_conditions/neumann_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/neumann_boundary/*/value/*/value +
/boundary_conditions/neumann_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/neumann_boundary/*/value/*/unit (string) +

/boundary_conditions/neumann_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation (list) +

/boundary_conditions/neumann_boundary/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/neumann_boundary/*/interpolation/* +
/boundary_conditions/neumann_boundary/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/to (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/from (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/type (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values (list) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float) +

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string) +

/boundary_conditions/neumann_boundary/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary (list) +

/boundary_conditions/normal_aligned_neumann_boundary
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/normal_aligned_neumann_boundary/* (object) +

/boundary_conditions/normal_aligned_neumann_boundary/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/id (int) +

/boundary_conditions/normal_aligned_neumann_boundary/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value +
/boundary_conditions/normal_aligned_neumann_boundary/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value/value +
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation +
/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values
+
+

Description

+interpolation values

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string) +

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+/boundary_conditions/pressure_boundary (list) +

/boundary_conditions/pressure_boundary
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/pressure_boundary/* (object) +

/boundary_conditions/pressure_boundary/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/pressure_boundary/*/id (int) +

/boundary_conditions/pressure_boundary/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/pressure_boundary/*/value +
/boundary_conditions/pressure_boundary/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_boundary/*/value/value +
/boundary_conditions/pressure_boundary/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_boundary/*/value/unit (string) +

/boundary_conditions/pressure_boundary/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+

Description

+Values of pressure boundary condition specified per timestep

+
+/boundary_conditions/pressure_boundary/*/value/* +
/boundary_conditions/pressure_boundary/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+

Default: 0

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_boundary/*/value/*/value +
/boundary_conditions/pressure_boundary/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_boundary/*/value/*/unit (string) +

/boundary_conditions/pressure_boundary/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/pressure_boundary/*/time_reference (list) +

/boundary_conditions/pressure_boundary/*/time_reference
+
+

Description

+List of times when the pressure boundary condition is specified

+
+/boundary_conditions/pressure_boundary/*/time_reference/* (float) +

/boundary_conditions/pressure_boundary/*/time_reference/*
+
+

Description

+Values of pressure boundary condition for timestep

+
+
+
+
+
+/boundary_conditions/pressure_cavity (list) +

/boundary_conditions/pressure_cavity
+
+

Description

+Neumann boundary condition for normal times value for vector-valued PDEs.

+
+/boundary_conditions/pressure_cavity/* (object) +

/boundary_conditions/pressure_cavity/*
+
+

Description

+pressure BC entry

+

Default: None +

Required

+
+/boundary_conditions/pressure_cavity/*/id (int) +

/boundary_conditions/pressure_cavity/*/id
+
+

Description

+ID for the pressure Neumann boundary condition

+

Range: [0, 2147483646]

+
+
+/boundary_conditions/pressure_cavity/*/value +
/boundary_conditions/pressure_cavity/*/value
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/pressure_cavity/*/value/value +
/boundary_conditions/pressure_cavity/*/value/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/pressure_cavity/*/value/unit (string) +

/boundary_conditions/pressure_cavity/*/value/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+/boundary_conditions/obstacle_displacements (list) +

/boundary_conditions/obstacle_displacements
+
+

Description

+The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

+
+/boundary_conditions/obstacle_displacements/* (object) +

/boundary_conditions/obstacle_displacements/*
+
+

Description

+Obstacle displacements

+

Default: None +

Required

+
+/boundary_conditions/obstacle_displacements/*/id +
/boundary_conditions/obstacle_displacements/*/id
+
+
+
+
+

Description

+ID of boundary condition from surface selection.

+

Range: [0, 2147483646]

+
+
+

Description

+select all ids.

+

Options: ['all']

+
+
+
+
+
+/boundary_conditions/obstacle_displacements/*/value (list) +

/boundary_conditions/obstacle_displacements/*/value
+
+

Description

+Values of boundary condition, length 1 for scalar-valued pde, ⅔ for vector-valued PDEs depending on the dimension.

+
+/boundary_conditions/obstacle_displacements/*/value/* +
/boundary_conditions/obstacle_displacements/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/boundary_conditions/obstacle_displacements/*/value/*/value +
/boundary_conditions/obstacle_displacements/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/boundary_conditions/obstacle_displacements/*/value/*/unit (string) +

/boundary_conditions/obstacle_displacements/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation (list) +

/boundary_conditions/obstacle_displacements/*/interpolation
+
+

Description

+interpolation of boundary condition

+
+/boundary_conditions/obstacle_displacements/*/interpolation/* +
/boundary_conditions/obstacle_displacements/*/interpolation/*
+
+
+
+
+

Type: none +

Description

+interpolation of boundary condition

+

Default: {'type': 'none'} +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+
+

Type: linear_ramp +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/to (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/to
+
+

Description

+interpolation ending time

+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/from (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/from
+
+

Description

+interpolation starting time

+

Default: 0

+
+
+
+

Type: piecewise_constant +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_linear +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+

Type: piecewise_cubic +

Description

+interpolation of boundary condition +

Required

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/type
+
+

Description

+type of interpolation of boundary condition

+

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points
+
+

Description

+interpolation time points

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*
+
+

Description

+interpolation time point

+
+
+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values
+
+

Description

+interpolation values

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*
+
+

Description

+interpolation value

+
+
+

Optional

+
+/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string) +

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend
+
+

Description

+how to extend the piecewise interpolation

+

Default: 'constant'

+

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

+
+
+
+
+
+
+
+
+
+/boundary_conditions/periodic_boundary (object) +

/boundary_conditions/periodic_boundary
+
+

Description

+Options for periodic boundary conditions.

+

Default: None +

Optional

+
+/boundary_conditions/periodic_boundary/enabled (bool) +

/boundary_conditions/periodic_boundary/enabled
+
+

Description

+

Default: False

+
+
+/boundary_conditions/periodic_boundary/tolerance (float) +

/boundary_conditions/periodic_boundary/tolerance
+
+

Description

+Relative tolerance of deciding periodic correspondence

+

Default: 1e-05

+
+
+/boundary_conditions/periodic_boundary/correspondence (list) +

/boundary_conditions/periodic_boundary/correspondence
+
+

Description

+Periodic directions for periodic boundary conditions. If not specified, default to axis-aligned directions.

+
+/boundary_conditions/periodic_boundary/correspondence/* (list) +

/boundary_conditions/periodic_boundary/correspondence/*
+
+

Description

+One periodic direction.

+
+/boundary_conditions/periodic_boundary/correspondence/*/* (float) +

/boundary_conditions/periodic_boundary/correspondence/*/*
+
+

Description

+One entry of a periodic direction.

+
+
+
+
+/boundary_conditions/periodic_boundary/linear_displacement_offset (list) +

/boundary_conditions/periodic_boundary/linear_displacement_offset
+
+

Description

+
+/boundary_conditions/periodic_boundary/linear_displacement_offset/* (list) +

/boundary_conditions/periodic_boundary/linear_displacement_offset/*
+
+

Description

+
+/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* +
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*
+
+
+
+
+

Description

+
+
+

Description

+
+
+
+
+
+
+
+/boundary_conditions/periodic_boundary/fixed_macro_strain (list) +

/boundary_conditions/periodic_boundary/fixed_macro_strain
+
+

Description

+
+/boundary_conditions/periodic_boundary/fixed_macro_strain/* (int) +

/boundary_conditions/periodic_boundary/fixed_macro_strain/*
+
+

Description

+
+
+
+/boundary_conditions/periodic_boundary/force_zero_mean (bool) +

/boundary_conditions/periodic_boundary/force_zero_mean
+
+

Description

+The periodic solution is not unique, set to true to find the solution with zero mean.

+

Default: False

+
+
+
+
+/initial_conditions (object) +

/initial_conditions
+
+

Description

+Initial conditions for the time-dependent problem, imposed on the main variable, its derivative or second derivative

+

Default: None +

Optional

+
+/initial_conditions/solution (list) +

/initial_conditions/solution
+
+

Description

+initial solution

+
+/initial_conditions/solution/* (object) +

/initial_conditions/solution/*
+
+

Description

+A list of (ID, value) pairs defining the initial conditions for the main variable values. Ids are set by selection, and values can be floats or formulas.

+

Default: None +

Required

+
+/initial_conditions/solution/*/id (int) +

/initial_conditions/solution/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/solution/*/value (list) +

/initial_conditions/solution/*/value
+
+

Description

+value of the solution

+
+/initial_conditions/solution/*/value/* +
/initial_conditions/solution/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/solution/*/value/*/value +
/initial_conditions/solution/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/solution/*/value/*/unit (string) +

/initial_conditions/solution/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+/initial_conditions/velocity (list) +

/initial_conditions/velocity
+
+

Description

+initial velocity

+
+/initial_conditions/velocity/* (object) +

/initial_conditions/velocity/*
+
+

Description

+A list of (ID, value) pairs defining the initial conditions for the first derivative of the main variable values. Ids are set by selection, and values can be floats or formulas.

+

Default: None +

Required

+
+/initial_conditions/velocity/*/id (int) +

/initial_conditions/velocity/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/velocity/*/value (list) +

/initial_conditions/velocity/*/value
+
+

Description

+value od the initial velocity

+
+/initial_conditions/velocity/*/value/* +
/initial_conditions/velocity/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/velocity/*/value/*/value +
/initial_conditions/velocity/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/velocity/*/value/*/unit (string) +

/initial_conditions/velocity/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+/initial_conditions/acceleration (list) +

/initial_conditions/acceleration
+
+

Description

+initial acceleration

+
+/initial_conditions/acceleration/* (object) +

/initial_conditions/acceleration/*
+
+

Description

+entries

+

Default: None +

Required

+
+/initial_conditions/acceleration/*/id (int) +

/initial_conditions/acceleration/*/id
+
+

Description

+ID from volume selections

+
+
+/initial_conditions/acceleration/*/value (list) +

/initial_conditions/acceleration/*/value
+
+

Description

+value

+
+/initial_conditions/acceleration/*/value/* +
/initial_conditions/acceleration/*/value/*
+
+
+
+
+

Description

+Value as a constant float

+
+
+

Description

+Value as an expression of \(x,y,z,t\) or a file

+
+
+

Description

+Value with unit +

Required

+
+/initial_conditions/acceleration/*/value/*/value +
/initial_conditions/acceleration/*/value/*/value
+
+
+
+
+

Description

+The value of the constant

+
+
+

Description

+The value as an expression

+
+
+

Description

+The value as a file

+
+
+
+
+
+/initial_conditions/acceleration/*/value/*/unit (string) +

/initial_conditions/acceleration/*/value/*/unit
+
+

Description

+The unit of the Value

+
+
+
+
+
+
+
+
+
+
+/output (object) +

/output
+
+

Description

+output settings

+

Default: None +

Optional

+
+/output/directory (string) +

/output/directory
+
+

Description

+Directory for output files.

+

Default: ''

+
+
+/output/log (object) +

/output/log
+
+

Description

+Setting for the output log.

+

Default: None +

Optional

+
+/output/log/level +
/output/log/level
+
+
+
+
+

Description

+Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

+

Range: [0, 6]

+
+
+

Description

+Level of logging.

+

Default: 'debug'

+

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

+
+
+
+
+
+/output/log/file_level +
/output/log/file_level
+
+
+
+
+

Description

+Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

+

Range: [0, 6]

+
+
+

Description

+Level of logging.

+

Default: 'trace'

+

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

+
+
+
+
+
+/output/log/path (string) +

/output/log/path
+
+

Description

+File where to save the log; empty string is output to terminal.

+

Default: ''

+
+
+/output/log/quiet (bool) +

/output/log/quiet
+
+

Description

+Disable cout for logging.

+

Default: False

+
+
+
+/output/json (string) +

/output/json
+
+

Description

+File name for JSON output statistics on time/error/etc.

+

Default: ''

+
+
+/output/restart_json (string) +

/output/restart_json
+
+

Description

+File name for JSON output to restart the simulation.

+

Default: ''

+
+
+/output/paraview (object) +

/output/paraview
+
+

Description

+Output in paraview format

+

Default: None +

Optional

+
+/output/paraview/file_name (string) +

/output/paraview/file_name
+
+

Description

+Paraview output file name

+

Default: ''

+
+
+/output/paraview/vismesh_rel_area (float) +

/output/paraview/vismesh_rel_area
+
+

Description

+relative area for the upsampled visualisation mesh

+

Default: 1e-05

+
+
+/output/paraview/skip_frame (int) +

/output/paraview/skip_frame
+
+

Description

+export every skip_frame-th frames for time dependent simulations

+

Default: 1

+
+
+/output/paraview/high_order_mesh (bool) +

/output/paraview/high_order_mesh
+
+

Description

+Enables/disables high-order output for paraview. Supported only for isoparametric or linear meshes with high-order solutions.

+

Default: True

+
+
+/output/paraview/volume (bool) +

/output/paraview/volume
+
+

Description

+Export volumetric mesh

+

Default: True

+
+
+/output/paraview/surface (bool) +

/output/paraview/surface
+
+

Description

+Export surface mesh (in 2d polygon)

+

Default: False

+
+
+/output/paraview/wireframe (bool) +

/output/paraview/wireframe
+
+

Description

+Export the wireframe of the mesh

+

Default: False

+
+
+/output/paraview/points (bool) +

/output/paraview/points
+
+

Description

+Export the Dirichlet points

+

Default: False

+
+
+/output/paraview/options (object) +

/output/paraview/options
+
+

Description

+Optional fields in the output

+

Default: None +

Optional

+
+/output/paraview/options/use_hdf5 (bool) +

/output/paraview/options/use_hdf5
+
+

Description

+If true, export the data as hdf5, compatible with paraview >5.11

+

Default: False

+
+
+/output/paraview/options/material (bool) +

/output/paraview/options/material
+
+

Description

+If true, write out material values sampled on the vertices of the mesh

+

Default: False

+
+
+/output/paraview/options/body_ids (bool) +

/output/paraview/options/body_ids
+
+

Description

+Export volumes ids

+

Default: False

+
+
+/output/paraview/options/contact_forces (bool) +

/output/paraview/options/contact_forces
+
+

Description

+If true, write out contact forces for surface

+

Default: False

+
+
+/output/paraview/options/friction_forces (bool) +

/output/paraview/options/friction_forces
+
+

Description

+If true, write out friction forces for surface

+

Default: False

+
+
+/output/paraview/options/velocity (bool) +

/output/paraview/options/velocity
+
+

Description

+If true, write out velocities

+

Default: False

+
+
+/output/paraview/options/acceleration (bool) +

/output/paraview/options/acceleration
+
+

Description

+If true, write out accelerations

+

Default: False

+
+
+/output/paraview/options/scalar_values (bool) +

/output/paraview/options/scalar_values
+
+

Description

+If true, write out scalar values

+

Default: True

+
+
+/output/paraview/options/tensor_values (bool) +

/output/paraview/options/tensor_values
+
+

Description

+If true, write out tensor values

+

Default: True

+
+
+/output/paraview/options/discretization_order (bool) +

/output/paraview/options/discretization_order
+
+

Description

+If true, write out discretization order

+

Default: True

+
+
+/output/paraview/options/nodes (bool) +

/output/paraview/options/nodes
+
+

Description

+If true, write out node order

+

Default: True

+
+
+/output/paraview/options/forces (bool) +

/output/paraview/options/forces
+
+

Description

+If true, write out all variational forces on the FE mesh

+

Default: False

+
+
+
+
+/output/data (object) +

/output/data
+
+

Description

+File names to write output data to.

+

Default: None +

Optional

+
+/output/data/solution (string) +

/output/data/solution
+
+

Description

+Main variable solution. Unrolled [xyz, xyz, …] using PolyFEM ordering. If reorder_nodes exports the solution with the same order the vertices of the input mesh as a #n x d file

+

Default: ''

+
+
+/output/data/full_mat (string) +

/output/data/full_mat
+
+

Description

+System matrix without boundary conditions. Doesn’t work for nonlinear problems

+

Default: ''

+
+
+/output/data/stiffness_mat (string) +

/output/data/stiffness_mat
+
+

Description

+System matrix with boundary conditions. Doesn’t work for nonlinear problems

+

Default: ''

+
+
+/output/data/stress_mat (string) +

/output/data/stress_mat
+
+

Description

+Exports stress

+

Default: ''

+
+
+/output/data/state (string) +

/output/data/state
+
+

Description

+Writes the complete state in PolyFEM hdf5 format, used to restart the sim

+

Default: ''

+
+
+/output/data/rest_mesh (string) +

/output/data/rest_mesh
+
+

Description

+Writes the rest mesh in MSH format, used to restart the sim

+

Default: ''

+
+
+/output/data/mises (string) +

/output/data/mises
+
+

Description

+File name to write per-node Von Mises stress values to.

+

Default: ''

+
+
+/output/data/nodes (string) +

/output/data/nodes
+
+

Description

+Writes the FEM nodes

+

Default: ''

+
+
+/output/data/advanced (object) +

/output/data/advanced
+
+

Description

+advanced options

+

Default: None +

Optional

+
+/output/data/advanced/reorder_nodes (bool) +

/output/data/advanced/reorder_nodes
+
+

Description

+Reorder nodes accodring to input

+

Default: False

+
+
+
+
+/output/advanced (object) +

/output/advanced
+
+

Description

+Additional output options

+

Default: None +

Optional

+
+/output/advanced/timestep_prefix (string) +

/output/advanced/timestep_prefix
+
+

Description

+Prefix for output file names for each time step, the final file is step_i.[vtu|vtm] where i is the time index.

+

Default: 'step_'

+
+
+/output/advanced/sol_on_grid (float) +

/output/advanced/sol_on_grid
+
+

Description

+exports the solution sampled on a grid, specify the grid spacing

+

Default: -1

+
+
+/output/advanced/compute_error (bool) +

/output/advanced/compute_error
+
+

Description

+Enables the computation of the error. If no reference solution is provided, return the norms of the solution

+

Default: True

+
+
+/output/advanced/sol_at_node (int) +

/output/advanced/sol_at_node
+
+

Description

+Write out solution values at a specific node. the values will be written in the output JSON file

+

Default: -1

+
+
+/output/advanced/vis_boundary_only (bool) +

/output/advanced/vis_boundary_only
+
+

Description

+saves only elements touching the boundaries

+

Default: False

+
+
+/output/advanced/curved_mesh_size (bool) +

/output/advanced/curved_mesh_size
+
+

Description

+upsample curved edges to compute mesh size

+

Default: False

+
+
+/output/advanced/save_solve_sequence_debug (bool) +

/output/advanced/save_solve_sequence_debug
+
+

Description

+saves AL internal steps, for debugging

+

Default: False

+
+
+/output/advanced/save_ccd_debug_meshes (bool) +

/output/advanced/save_ccd_debug_meshes
+
+

Description

+saves AL internal steps, for debugging

+

Default: False

+
+
+/output/advanced/save_time_sequence (bool) +

/output/advanced/save_time_sequence
+
+

Description

+saves timesteps

+

Default: True

+
+
+/output/advanced/save_nl_solve_sequence (bool) +

/output/advanced/save_nl_solve_sequence
+
+

Description

+saves obj after every nonlinear iteration, for debugging

+

Default: False

+
+
+/output/advanced/spectrum (bool) +

/output/advanced/spectrum
+
+

Description

+exports the spectrum of the matrix in the output JSON. Works only if POLYSOLVE_WITH_SPECTRA is enabled

+

Default: False

+
+
+
+/output/reference (object) +

/output/reference
+
+

Description

+Write out the analytic/numerical ground-truth solution and or its gradient

+

Default: None +

Optional

+
+/output/reference/solution (list) +

/output/reference/solution
+
+

Description

+reference solution used to compute errors

+
+/output/reference/solution/* (string) +

/output/reference/solution/*
+
+

Description

+value as a function of \(x,y,z,t\)

+

Default: ''

+
+
+
+/output/reference/gradient (list) +

/output/reference/gradient
+
+

Description

+gradient of the reference solution to compute errors

+
+/output/reference/gradient/* (string) +

/output/reference/gradient/*
+
+

Description

+value as a function of \(x,y,z,t\)

+

Default: ''

+
+
+
+
+
+/input (object) +

/input
+
+

Description

+input data

+

Default: None +

Optional

+
+/input/data (object) +

/input/data
+
+

Description

+input to restart time dependent sim

+

Default: None +

Optional

+
+/input/data/state (file) +

/input/data/state
+
+

Description

+input state as hdf5

+

Default: ''

+
+
+/input/data/reorder (bool) +

/input/data/reorder
+
+

Description

+reorder input data

+

Default: False

+
+
+
+
+/tests (object) +

/tests
+
+

Description

+Used to test to compare different norms of solutions.

+

Default: None +

Optional

+
+/tests/err_h1 (float) +

/tests/err_h1
+
+

Description

+Reference h1 solution’s norm.

+

Default: 0

+
+
+/tests/err_h1_semi (float) +

/tests/err_h1_semi
+
+

Description

+Reference h1 seminorm solution’s norm.

+

Default: 0

+
+
+/tests/err_l2 (float) +

/tests/err_l2
+
+

Description

+Reference \(L^2\) solution’s norm.

+

Default: 0

+
+
+/tests/err_linf (float) +

/tests/err_linf
+
+

Description

+Reference \(L^\infty\) solution’s norm.

+

Default: 0

+
+
+/tests/err_linf_grad (float) +

/tests/err_linf_grad
+
+

Description

+Reference \(L^\infty\) solution’s gradient norm.

+

Default: 0

+
+
+/tests/err_lp (float) +

/tests/err_lp
+
+

Description

+Reference \(L^8\) solution’s gradient norm.

+

Default: 0

+
+
+/tests/margin (float) +

/tests/margin
+
+

Description

+Reference tolerance used in tests.

+

Default: 1e-05

+
+
+/tests/time_steps +
/tests/time_steps
+
+
+
+
+

Description

+Number of time steps to test.

+

Default: 1

+

Range: [1, inf]

+
+
+

Description

+Number of time steps to test.

+

Options: ['all', 'static']

+
+
+
+
+
+
+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/json_defaults_and_spec/json_defaults_and_spec.md b/json_defaults_and_spec/json_defaults_and_spec.md new file mode 100644 index 00000000..0ac7901b --- /dev/null +++ b/json_defaults_and_spec/json_defaults_and_spec.md @@ -0,0 +1,18 @@ +## Defaults + +The following json contains the default values by PolyFEM. + +Values of `"REQUIRED!"` indicate the field has no default and must be specified by the user. + +~~~js +{% include "_json_defaults.json" %} +~~~ + +## Full Specification + +The following json contains the full specification of the PolyFEM JSON API. + +{% + include-markdown "_json_spec.md" + heading-offset=10 +%} \ No newline at end of file diff --git a/library/index.html b/library/index.html new file mode 100644 index 00000000..87166b41 --- /dev/null +++ b/library/index.html @@ -0,0 +1,1157 @@ + + + + + + + + + + + + + + + + + + + + + + Library - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Polyfem as Libary

+

Polyfem uses modern cmake, so it it should be enough to add this line +

add_subdirectory(<path-to-polyfem> polyfem)
+
+in your cmake project, and then simply add +
target_link_library(<your_target> polyfem)
+
+in your cmake script. +Polyfem will download the dependencies that it needs with the version that it needs. +If you dont need the viewer for your own project you can add +
SET(POLYFEM_NO_UI ON)
+

+

Interface

+

The interface of polyfem is similar as Python. You should create a polyfem::State object and then call methods on it. +Most of the fields are public for convenience but we discourage use or access them.

+

This is the main interface of polyfem::State.

+

Initialization

+
void init(const json &args)
+void init(const std::string &json_path)
+
+

loads the settings from a json object or file

+

Logging

+

void set_log_level(int log_level)
+std::string get_log()
+
+Sets the log level (1-6) and gets the log at the end

+

Loading mesh

+

void load_mesh()
+void load_mesh(const std::string &path)
+void load_mesh(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F)
+
+Different ways of loading a mesh

+

Set boundary sides sets

+

void set_boundary_side_set(const std::function<int(const polyfem::RowVectorNd&)> &boundary_marker)
+void set_boundary_side_set(const std::function<int(const polyfem::RowVectorNd&, bool)> &boundary_marker)
+void set_boundary_side_set(const std::function<int(const std::vector<int>&, bool)> &boundary_marker)
+
+All boundary side sets are assigned with a lambda function, the first 2 takes the barycenter of the face/edge, the last one the primite id. The second argument is a boolean that specifies if the sideset is boundary.

+

Solving

+
void solve();
+
+

Note the solver internally calls +

void build_basis();
+void assemble_stiffness_mat();
+void assemble_rhs();
+void solve_problem();
+
+You can use these instead of solve.

+

If you problem has a solution you can use +

void compute_errors();
+
+to obtain the error.

+

Getters

+

const Eigen::MatrixXd &get_solution() const
+const Eigen::MatrixXd &get_pressure() const
+
+Gets the raw solution and pressure. The order of the coefficient is unrelated to the order of the vertices of the mesh.

+

void get_sampled_solution(Eigen::MatrixXd &points, Eigen::MatrixXi &tets, Eigen::MatrixXd &fun, bool boundary_only = false)
+void get_stresses(Eigen::MatrixXd &fun, bool boundary_only = false)
+void get_sampled_mises(Eigen::MatrixXd &fun, bool boundary_only = false)
+void get_sampled_mises_avg(Eigen::MatrixXd &fun, Eigen::MatrixXd &tfun, bool boundary_only = false)
+
+Gets the solution/stresses on the visualization mesh, use vismesh_rel_area to control density

+

Exporting

+

Exports the solution to VTU for visualization

+
void get_sidesets(Eigen::MatrixXd &pts, Eigen::MatrixXi &faces, Eigen::MatrixXd &sidesets);
+
+void export_data();
+
+void save_vtu(const std::string &name);
+void save_wire(const std::string &name, bool isolines = false);
+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/library.md b/library/library.md new file mode 100644 index 00000000..a4577fe9 --- /dev/null +++ b/library/library.md @@ -0,0 +1,117 @@ +Polyfem as Libary +================= + +**Polyfem** uses modern `cmake`, so it it should be enough to add this line +```cmake +add_subdirectory( polyfem) +``` +in your cmake project, and then simply add +```cmake +target_link_library( polyfem) +``` +in your cmake script. +Polyfem will download the dependencies that it needs with the version that it needs. +If you dont need the viewer for your own project you can add +```cmake +SET(POLYFEM_NO_UI ON) +``` + + +Interface +--------- + +The interface of polyfem is similar as [Python](polyfempy_doc.md). You should create a `polyfem::State` object and then call methods on it. +Most of the fields are public for convenience but we discourage use or access them. + + +This is the main interface of `polyfem::State`. + + +### Initialization + +```c++ +void init(const json &args) +void init(const std::string &json_path) +``` + +loads the settings from a json object or file + +### Logging + +```c++ +void set_log_level(int log_level) +std::string get_log() +``` +Sets the log level (1-6) and gets the log at the end + + +### Loading mesh + +```c++ +void load_mesh() +void load_mesh(const std::string &path) +void load_mesh(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F) +``` +Different ways of loading a mesh + +### Set boundary sides sets + +```c++ +void set_boundary_side_set(const std::function &boundary_marker) +void set_boundary_side_set(const std::function &boundary_marker) +void set_boundary_side_set(const std::function&, bool)> &boundary_marker) +``` +All boundary side sets are assigned with a lambda function, the first 2 takes the barycenter of the face/edge, the last one the primite id. The second argument is a boolean that specifies if the sideset is boundary. + + +### Solving +```c++ +void solve(); +``` + +Note the solver internally calls +```c++ +void build_basis(); +void assemble_stiffness_mat(); +void assemble_rhs(); +void solve_problem(); +``` +You can use these instead of solve. + +If you problem has a solution you can use +```c++ +void compute_errors(); +``` +to obtain the error. + + +### Getters + +```c++ +const Eigen::MatrixXd &get_solution() const +const Eigen::MatrixXd &get_pressure() const +``` +Gets the raw solution and pressure. The order of the coefficient is **unrelated** to the order of the vertices of the mesh. + +```c++ +void get_sampled_solution(Eigen::MatrixXd &points, Eigen::MatrixXi &tets, Eigen::MatrixXd &fun, bool boundary_only = false) +void get_stresses(Eigen::MatrixXd &fun, bool boundary_only = false) +void get_sampled_mises(Eigen::MatrixXd &fun, bool boundary_only = false) +void get_sampled_mises_avg(Eigen::MatrixXd &fun, Eigen::MatrixXd &tfun, bool boundary_only = false) +``` +Gets the solution/stresses on the visualization mesh, use `vismesh_rel_area` to control density + + +### Exporting + +Exports the solution to VTU for visualization + +```c++ +void get_sidesets(Eigen::MatrixXd &pts, Eigen::MatrixXi &faces, Eigen::MatrixXd &sidesets); + +void export_data(); + +void save_vtu(const std::string &name); +void save_wire(const std::string &name, bool isolines = false); +``` + diff --git a/license/index.html b/license/index.html new file mode 100644 index 00000000..c128a98b --- /dev/null +++ b/license/index.html @@ -0,0 +1,1054 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + License - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

License

+
MIT License
+
+Copyright (c) 2018 polyfem
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/license/license.md b/license/license.md new file mode 100644 index 00000000..f9598275 --- /dev/null +++ b/license/license.md @@ -0,0 +1,5 @@ +# License + +~~~ +{% include "_polyfem_license.txt" %} +~~~ \ No newline at end of file diff --git a/polyfempy_doc/index.html b/polyfempy_doc/index.html new file mode 100644 index 00000000..d508be9c --- /dev/null +++ b/polyfempy_doc/index.html @@ -0,0 +1,2473 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Docs - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Docs

+ +

class Problem

+

Generic problem problem, scalar or tensor depending on the pde. Warning, this problem needs to be used with the set_pde function in settings

+

init

+

__init__(rhs=None, exact=None)

+

Initialize . See help(type()) for accurate signature.

+

add_dirichlet_value

+

add_dirichlet_value(id, value, is_dirichlet_dim=None)

+

set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems.

+

add_neumann_value

+

add_neumann_value(id, value)

+

set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem

+

set_dirichlet_value

+

set_dirichlet_value(id, value, is_dirichlet_dim=None)

+

set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems.

+

set_displacement

+

set_displacement(id, value, is_dim_fixed=None)

+

set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_force

+

set_force(id, value)

+

set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_neumann_value

+

set_neumann_value(id, value)

+

set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem

+

set_velocity

+

set_velocity(id, value, is_dim_fixed=None)

+

set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_x_symmetric

+

set_x_symmetric(id)

+

x coorinate is fixed, y is allowed to move (Neumann)

+

set_xy_symmetric

+

set_xy_symmetric(id)

+

xy coorinates are fixed, z is allowed to move (Neumann)

+

set_xz_symmetric

+

set_xz_symmetric(id)

+

xz coorinates are fixed, y is allowed to move (Neumann)

+

set_y_symmetric

+

set_y_symmetric(id)

+

y coorinate is fixed, x is allowed to move (Neumann)

+

set_yz_symmetric

+

set_yz_symmetric(id)

+

yz coorinates are fixed, x is allowed to move (Neumann)

+

class Settings

+

Class that encodes the settings of the solver, it models the input json file

+

init

+

__init__(discr_order=1, pressure_discr_order=1, pde='Laplacian', nl_solver_rhs_steps=1, tend=1, time_steps=10)

+

Initialize . See help(type()) for accurate signature.

+

serialize

+

serialize()

+

stringyfied json description of this class, used to run the solver

+

set_advanced_option

+

set_advanced_option(key, value)

+

Used to set any advanced option not present in this class, for instance set_advanced_option(“use_spline”,True), see https://polyfem.github.io/documentation/ for full list

+

set_isolines_export_path

+

set_isolines_export_path(path)

+

Sets the path to export the isolines of the solution

+

set_material_params

+

set_material_params(name, value)

+

set the material parameters, for instance set_material_params(“E”, 200) sets the Young’s modulus E to 200. See https://polyfem.github.io/documentation/#formulations for full list

+

set_pde

+

set_pde(pde)

+

Sets the PDE to solve, use any of the polyfempy.PDEs

+

set_problem

+

set_problem(problem)

+

Sets the problem, use any of the problems in Problems or the Problem

+

set_solution_export_path

+

set_solution_export_path(path)

+

Sets the path to save the solution

+

set_vtu_export_path

+

set_vtu_export_path(path, bounda_only=False)

+

Sets the path to export a vtu file with the results, use bounda_only to export only one layer of the mesh in 3d

+

set_wireframe_export_path

+

set_wireframe_export_path(path)

+

Sets the path to export a wireframe of the mesh

+

pde

+

Get the PDE

+

problem

+

Get the problem

+

class DrivenCavity

+

Classical driven cavity problem in fluid simulation

+

class Flow

+

Inflow/outflow problem for fluids. You can specify the sideset for the moving fluxes, the axial direction of the flow, and the list of obstacle sidesets. https://polyfem.github.io/documentation/#flow

+

init

+

__init__(inflow=1, outflow=3, inflow_amout=0.25, outflow_amout=0.25, direction=0, obstacle=[7])

+

Initialize . See help(type()) for accurate signature.

+

class Franke

+

Franke problem with exact solution https://polyfem.github.io/documentation/#franke

+

class GenericScalar

+

Generic scalar problem https://polyfem.github.io/documentation/#genericscalar

+

add_dirichlet_value

+

add_dirichlet_value(id, value)

+

add the Dirichlet value value for the sideset id

+

add_neumann_value

+

add_neumann_value(id, value)

+

add the Neumann value value for the sideset id

+

class GenericTensor

+

Generic tensor problem https://polyfem.github.io/documentation/#generictensor

+

add_dirichlet_value

+

add_dirichlet_value(id, value, is_dirichlet_dim=None)

+

add the Dirichlet value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed.

+

add_neumann_value

+

add_neumann_value(id, value)

+

add the Neumann value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_displacement

+

set_displacement(id, value, is_dim_fixed=None)

+

set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_force

+

set_force(id, value)

+

set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

set_velocity

+

set_velocity(id, value, is_dim_fixed=None)

+

set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

+

class Gravity

+

time dependent gravity problem https://polyfem.github.io/documentation/#gravity

+

init

+

__init__(force=0.1)

+

Initialize . See help(type()) for accurate signature.

+

class Torsion

+

3D torsion problem, specify which sideset to fix (fixed_boundary) and which one turns turning_boundary https://polyfem.github.io/documentation/#torsionelastic

+

init

+

__init__(axis_coordiante=2, n_turns=0.5, fixed_boundary=5, turning_boundary=6)

+

Initialize . See help(type()) for accurate signature.

+

class PDEs

+

List of supported partial differential equations

+

Bilaplacian = ‘Bilaplacian’

+

Helmholtz = ‘Helmholtz’

+

HookeLinearElasticity = ‘HookeLinearElasticity’

+

IncompressibleLinearElasticity = ‘IncompressibleLinearElasticity’

+

Laplacian = ‘Laplacian’

+

LinearElasticity = ‘LinearElasticity’

+

NeoHookean = ‘NeoHookean’

+

NonLinearElasticity = ‘NonLinearElasticity’

+

SaintVenant = ‘SaintVenant’

+

Stokes = ‘Stokes’

+

class ScalarFormulations

+

Bilaplacian = ‘Bilaplacian’

+

Helmholtz = ‘Helmholtz’

+

Laplacian = ‘Laplacian’

+

class Solver

+

Polyfem solver

+

compute_errors

+

compute_errors()

+

compute the error

+

export_data

+

export_data()

+

exports all data specified in the settings

+

export_vtu

+

export_vtu(path: str)

+

exports the solution as vtu

+

export_wire

+

export_wire(path: str, isolines: bool = False)

+

exports wireframe of the mesh

+

get_boundary_sidesets

+

get_boundary_sidesets() -> tuple

+

exports get the boundary sideset, edges in 2d or trangles in 3d

+

get_log

+

get_log() -> str

+

gets the log as json

+

get_pressure

+

get_pressure() -> array

+

returns the pressure

+

get_sampled_connectivity_frames

+

get_sampled_connectivity_frames() -> List[array]

+

returns the connectivity frames for a time dependent problem on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_mises

+

get_sampled_mises(boundary_only: bool = False) -> array

+

returns the von mises stresses on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_mises_avg

+

get_sampled_mises_avg(boundary_only: bool = False) -> tuple

+

returns the von mises stresses and stress tensor averaged around a vertex on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_mises_avg_frames

+

get_sampled_mises_avg_frames() -> List[array]

+

returns the von mises stresses per frame averaged around a vertex on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_mises_frames

+

get_sampled_mises_frames() -> List[array]

+

returns the von mises stresses frames on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_points_frames

+

get_sampled_points_frames() -> List[array]

+

returns the points frames for a time dependent problem on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_solution

+

get_sampled_solution(boundary_only: bool = False) -> tuple

+

returns the solution on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_sampled_solution_frames

+

get_sampled_solution_frames() -> List[array]

+

returns the solution frames for a time dependent problem on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

get_solution

+

get_solution() -> array

+

returns the solution

+

get_stresses

+

get_stresses(boundary_only: bool = False) -> array

+

returns the stress tensor on a densly sampled mesh, use ‘vismesh_rel_area’ to control density

+

load_mesh_from_path

+

load_mesh_from_path(path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

+

Loads a mesh from the path and ‘bc_tag’ from the json if any bc tags

+

load_mesh_from_path_and_tags

+

load_mesh_from_path_and_tags(path: str, bc_tag_path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

+

Loads a mesh and bc_tags from path

+

load_mesh_from_settings

+

load_mesh_from_settings(normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

+

Loads a mesh from the ‘mesh’ field of the json and ‘bc_tag’ if any bc tags

+

set_boundary_side_set_from_bary

+

set_boundary_side_set_from_bary(boundary_marker: Callable[[array[float64[1, n]]], int])

+

Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face)

+

set_boundary_side_set_from_bary_and_boundary

+

set_boundary_side_set_from_bary_and_boundary(boundary_marker: Callable[[array[float64[1, n]], bool], int])

+

Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face) and a flag that says if the element is boundary

+

set_boundary_side_set_from_v_ids

+

set_boundary_side_set_from_v_ids(boundary_marker: Callable[[List[int], bool], int])

+

Sets the side set for the boundary conditions, the functions takes the sorted list of vertex id and a flag that says if the element is boundary

+

set_high_order_mesh

+

set_high_order_mesh(vertices: array, connectivity: array, nodes_pos: array, nodes_indices: List[List[int]], normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

+

Loads an high order mesh from vertices, connectivity, nodes, and node indices mapping element to nodes

+

set_log_level

+

set_log_level(log_level: int)

+

sets polyfem log level, valid value between 0 (all logs) and 6 (no logs)

+

set_mesh

+

set_mesh(vertices: array, connectivity: array, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

+

Loads a mesh from vertices and connectivity

+

set_rhs

+

set_rhs(matrix: array)

+

Sets the rhs

+

set_rhs_from_path

+

set_rhs_from_path(path: str)

+

Loads the rhs from a file

+

set_settings

+

set_settings(json: object)

+

load PDE and problem parameters from the settings

+

settings

+

settings(json: object)

+

load PDE and problem parameters from the settings

+

solve

+

solve()

+

solve the pde

+

class TensorFormulations

+

HookeLinearElasticity = ‘HookeLinearElasticity’

+

IncompressibleLinearElasticity = ‘IncompressibleLinearElasticity’

+

LinearElasticity = ‘LinearElasticity’

+

NeoHookean = ‘NeoHookean’

+

NonLinearElasticity = ‘NonLinearElasticity’

+

SaintVenant = ‘SaintVenant’

+

Stokes = ‘Stokes’

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/polyfempy_doc/polyfempy_doc.md b/polyfempy_doc/polyfempy_doc.md new file mode 100644 index 00000000..e3bba948 --- /dev/null +++ b/polyfempy_doc/polyfempy_doc.md @@ -0,0 +1,455 @@ +## class Problem + +Generic problem problem, scalar or tensor depending on the pde. Warning, this problem needs to be used with the `set_pde` function in settings + +### init +`__init__(rhs=None, exact=None)` + +Initialize . See help(type()) for accurate signature. + +### add_dirichlet_value +`add_dirichlet_value(id, value, is_dirichlet_dim=None)` + +set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems. + +### add_neumann_value +`add_neumann_value(id, value)` + +set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem + +### set_dirichlet_value +`set_dirichlet_value(id, value, is_dirichlet_dim=None)` + +set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems. + +### set_displacement +`set_displacement(id, value, is_dim_fixed=None)` + +set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_force +`set_force(id, value)` + +set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_neumann_value +`set_neumann_value(id, value)` + +set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem + +### set_velocity +`set_velocity(id, value, is_dim_fixed=None)` + +set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_x_symmetric +`set_x_symmetric(id)` + +x coorinate is fixed, y is allowed to move (Neumann) + +### set_xy_symmetric +`set_xy_symmetric(id)` + +xy coorinates are fixed, z is allowed to move (Neumann) + +### set_xz_symmetric +`set_xz_symmetric(id)` + +xz coorinates are fixed, y is allowed to move (Neumann) + +### set_y_symmetric +`set_y_symmetric(id)` + +y coorinate is fixed, x is allowed to move (Neumann) + +### set_yz_symmetric +`set_yz_symmetric(id)` + +yz coorinates are fixed, x is allowed to move (Neumann) + + + + +## class Settings + +Class that encodes the settings of the solver, it models the input json file + +### init +`__init__(discr_order=1, pressure_discr_order=1, pde='Laplacian', nl_solver_rhs_steps=1, tend=1, time_steps=10)` + +Initialize . See help(type()) for accurate signature. + +### serialize +`serialize()` + +stringyfied json description of this class, used to run the solver + +### set_advanced_option +`set_advanced_option(key, value)` + +Used to set any advanced option not present in this class, for instance set_advanced_option("use_spline",True), see https://polyfem.github.io/documentation/ for full list + +### set_isolines_export_path +`set_isolines_export_path(path)` + +Sets the path to export the isolines of the solution + +### set_material_params +`set_material_params(name, value)` + +set the material parameters, for instance set_material_params("E", 200) sets the Young's modulus E to 200. See https://polyfem.github.io/documentation/#formulations for full list + +### set_pde +`set_pde(pde)` + +Sets the PDE to solve, use any of the polyfempy.PDEs + +### set_problem +`set_problem(problem)` + +Sets the problem, use any of the problems in Problems or the Problem + +### set_solution_export_path +`set_solution_export_path(path)` + +Sets the path to save the solution + +### set_vtu_export_path +`set_vtu_export_path(path, bounda_only=False)` + +Sets the path to export a vtu file with the results, use bounda_only to export only one layer of the mesh in 3d + +### set_wireframe_export_path +`set_wireframe_export_path(path)` + +Sets the path to export a wireframe of the mesh + +pde + +Get the PDE + +problem + +Get the problem + + + + +## class DrivenCavity + +Classical driven cavity problem in fluid simulation + + + + +## class Flow + +Inflow/outflow problem for fluids. You can specify the sideset for the moving fluxes, the axial direction of the flow, and the list of obstacle sidesets. https://polyfem.github.io/documentation/#flow + +### init +`__init__(inflow=1, outflow=3, inflow_amout=0.25, outflow_amout=0.25, direction=0, obstacle=[7])` + +Initialize . See help(type()) for accurate signature. + + + + +## class Franke + +Franke problem with exact solution https://polyfem.github.io/documentation/#franke + + + + +## class GenericScalar + +Generic scalar problem https://polyfem.github.io/documentation/#genericscalar + +### add_dirichlet_value +`add_dirichlet_value(id, value)` + +add the Dirichlet value value for the sideset id + +### add_neumann_value +`add_neumann_value(id, value)` + +add the Neumann value value for the sideset id + + + + +## class GenericTensor + +Generic tensor problem https://polyfem.github.io/documentation/#generictensor + +### add_dirichlet_value +`add_dirichlet_value(id, value, is_dirichlet_dim=None)` + +add the Dirichlet value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed. + +### add_neumann_value +`add_neumann_value(id, value)` + +add the Neumann value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_displacement +`set_displacement(id, value, is_dim_fixed=None)` + +set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_force +`set_force(id, value)` + +set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + +### set_velocity +`set_velocity(id, value, is_dim_fixed=None)` + +set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem + + + + +## class Gravity + +time dependent gravity problem https://polyfem.github.io/documentation/#gravity + +### init +`__init__(force=0.1)` + +Initialize . See help(type()) for accurate signature. + + + + +## class Torsion + +3D torsion problem, specify which sideset to fix (fixed_boundary) and which one turns turning_boundary https://polyfem.github.io/documentation/#torsionelastic + +### init +`__init__(axis_coordiante=2, n_turns=0.5, fixed_boundary=5, turning_boundary=6)` + +Initialize . See help(type()) for accurate signature. + + + + +## class PDEs + +List of supported partial differential equations + +Bilaplacian = 'Bilaplacian' + +Helmholtz = 'Helmholtz' + +HookeLinearElasticity = 'HookeLinearElasticity' + +IncompressibleLinearElasticity = 'IncompressibleLinearElasticity' + +Laplacian = 'Laplacian' + +LinearElasticity = 'LinearElasticity' + +NeoHookean = 'NeoHookean' + +NonLinearElasticity = 'NonLinearElasticity' + +SaintVenant = 'SaintVenant' + +Stokes = 'Stokes' + + + + +## class ScalarFormulations + +Bilaplacian = 'Bilaplacian' + +Helmholtz = 'Helmholtz' + +Laplacian = 'Laplacian' + + + + +## class Solver + +Polyfem solver + +### compute_errors +`compute_errors()` + +compute the error + +### export_data +`export_data()` + +exports all data specified in the settings + +### export_vtu +`export_vtu(path: str)` + +exports the solution as vtu + +### export_wire +`export_wire(path: str, isolines: bool = False)` + +exports wireframe of the mesh + +### get_boundary_sidesets +`get_boundary_sidesets() -> tuple` + +exports get the boundary sideset, edges in 2d or trangles in 3d + +### get_log +`get_log() -> str` + +gets the log as json + +### get_pressure +`get_pressure() -> array` + +returns the pressure + +### get_sampled_connectivity_frames +`get_sampled_connectivity_frames() -> List[array]` + +returns the connectivity frames for a time dependent problem on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_mises +`get_sampled_mises(boundary_only: bool = False) -> array` + +returns the von mises stresses on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_mises_avg +`get_sampled_mises_avg(boundary_only: bool = False) -> tuple` + +returns the von mises stresses and stress tensor averaged around a vertex on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_mises_avg_frames +`get_sampled_mises_avg_frames() -> List[array]` + +returns the von mises stresses per frame averaged around a vertex on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_mises_frames +`get_sampled_mises_frames() -> List[array]` + +returns the von mises stresses frames on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_points_frames +`get_sampled_points_frames() -> List[array]` + +returns the points frames for a time dependent problem on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_solution +`get_sampled_solution(boundary_only: bool = False) -> tuple` + +returns the solution on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_sampled_solution_frames +`get_sampled_solution_frames() -> List[array]` + +returns the solution frames for a time dependent problem on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### get_solution +`get_solution() -> array` + +returns the solution + +### get_stresses +`get_stresses(boundary_only: bool = False) -> array` + +returns the stress tensor on a densly sampled mesh, use 'vismesh_rel_area' to control density + +### load_mesh_from_path +`load_mesh_from_path(path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)` + +Loads a mesh from the path and 'bc_tag' from the json if any bc tags + +### load_mesh_from_path_and_tags +`load_mesh_from_path_and_tags(path: str, bc_tag_path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)` + +Loads a mesh and bc_tags from path + +### load_mesh_from_settings +`load_mesh_from_settings(normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)` + +Loads a mesh from the 'mesh' field of the json and 'bc_tag' if any bc tags + +### set_boundary_side_set_from_bary +`set_boundary_side_set_from_bary(boundary_marker: Callable[[array[float64[1, n]]], int])` + +Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face) + +### set_boundary_side_set_from_bary_and_boundary +`set_boundary_side_set_from_bary_and_boundary(boundary_marker: Callable[[array[float64[1, n]], bool], int])` + +Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face) and a flag that says if the element is boundary + +### set_boundary_side_set_from_v_ids +`set_boundary_side_set_from_v_ids(boundary_marker: Callable[[List[int], bool], int])` + +Sets the side set for the boundary conditions, the functions takes the sorted list of vertex id and a flag that says if the element is boundary + +### set_high_order_mesh +`set_high_order_mesh(vertices: array, connectivity: array, nodes_pos: array, nodes_indices: List[List[int]], normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)` + +Loads an high order mesh from vertices, connectivity, nodes, and node indices mapping element to nodes + +### set_log_level +`set_log_level(log_level: int)` + +sets polyfem log level, valid value between 0 (all logs) and 6 (no logs) + +### set_mesh +`set_mesh(vertices: array, connectivity: array, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)` + +Loads a mesh from vertices and connectivity + +### set_rhs +`set_rhs(matrix: array)` + +Sets the rhs + +### set_rhs_from_path +`set_rhs_from_path(path: str)` + +Loads the rhs from a file + +### set_settings +`set_settings(json: object)` + +load PDE and problem parameters from the settings + +### settings +`settings(json: object)` + +load PDE and problem parameters from the settings + +### solve +`solve()` + +solve the pde + + + + +## class TensorFormulations + +HookeLinearElasticity = 'HookeLinearElasticity' + +IncompressibleLinearElasticity = 'IncompressibleLinearElasticity' + +LinearElasticity = 'LinearElasticity' + +NeoHookean = 'NeoHookean' + +NonLinearElasticity = 'NonLinearElasticity' + +SaintVenant = 'SaintVenant' + +Stokes = 'Stokes' + + + + diff --git a/polysolve/index.html b/polysolve/index.html new file mode 100644 index 00000000..c28fcefe --- /dev/null +++ b/polysolve/index.html @@ -0,0 +1,1355 @@ + + + + + + + + + + + + + + + + + + + + + + + + PolySolve - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

PolySolve

+

Build

+

This library contains a cross-platform Eigen wrapper for many different external linear solvers including (but not limited to):

+
    +
  • CHOLMOD
  • +
  • Hypre
  • +
  • AMGCL
  • +
  • Pardiso
  • +
+

Example Usage

+
const std::string solver_name = "Hypre"
+auto solver = LinearSolver::create(solver_name, "");
+
+// Configuration parameters like iteration or accuracy for iterative solvers
+// solver->setParameters(params);
+
+// System sparse matrix
+Eigen::SparseMatrix<double> A;
+
+// Right-hand side
+Eigen::VectorXd b;
+
+// Solution
+Eigen::VectorXd x(b.size());
+
+solver->analyzePattern(A, A.rows());
+solver->factorize(A);
+solver->solve(b, x);
+
+

You can use LinearSolver::availableSolvers() to obtain the list of available solvers.

+

Parameters

+

Polysolve uses a JSON file to provide parameters to the individual solvers. The following template can be used as a starting point, and a more detailed explanation of the parameters is below.

+
{
+    "Eigen::LeastSquaresConjugateGradient": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Eigen::DGMRES": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Eigen::ConjugateGradient": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Eigen::BiCGSTAB": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Eigen::GMRES": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Eigen::MINRES": {
+        "max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "Pardiso": {
+        "mtype": -1
+    },
+    "Hypre": {
+        "max_iter": 1000,
+        "pre_max_iter": 1000,
+        "tolerance": 1e-6
+    },
+    "AMGCL": {
+        "precond": {
+            "relax": {
+                "degree": 16,
+                "type": "chebyshev",
+                "power_iters": 100,
+                "higher": 2,
+                "lower": 0.008333333333,
+                "scale": true
+            },
+            "class": "amg",
+            "max_levels": 6,
+            "direct_coarse": false,
+            "ncycle": 2,
+            "coarsening": {
+                "type": "smoothed_aggregation",
+                "estimate_spectral_radius": true,
+                "relax": 1,
+                "aggr": {
+                    "eps_strong": 0
+                }
+            }
+        },
+        "solver": {
+            "tol": 1e-10,
+            "maxiter": 1000,
+            "type": "cg"
+        }
+    }
+}
+
+

Iterative solvers (AMGCL, Eigen Internal Solvers, HYPRE)

+
    +
  • max_iter controls the solver’s iterations, default 1000
  • +
  • conv_tol, tolerance controls the convergence tolerance, default 1e-10
  • +
+

Hypre Only

+
    +
  • pre_max_iter, number of pre iterations, default 1
  • +
+

AMGCL Only

+

The default parameters of the AMGCL solver are: +

{
+    "precond": {
+        "relax": {
+            "degree": 16,
+            "type": "chebyshev",
+            "power_iters": 100,
+            "higher": 2,
+            "lower": 0.008333333333,
+            "scale": true
+        },
+        "class": "amg",
+        "max_levels": 6,
+        "direct_coarse": false,
+        "ncycle": 2,
+        "coarsening": {
+            "type": "smoothed_aggregation",
+            "estimate_spectral_radius": true,
+            "relax": 1,
+            "aggr": {
+                "eps_strong": 0
+            }
+        }
+    },
+    "solver": {
+        "tol": 1e-10,
+        "maxiter": 1000,
+        "type": "cg"
+    }
+}
+

+

For a more details and options refer to the AMGCL documentation.

+

Pardiso

+

mtype, sets the matrix type, default 11

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
mtypeDescription
1real and structurally symmetric
2real and symmetric positive definite
-2real and symmetric indefinite
3complex and structurally symmetric
4complex and Hermitian positive definite
-4complex and Hermitian indefinite
6complex and symmetric
11real and nonsymmetric
13complex and nonsymmetric
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/polysolve/polysolve.md b/polysolve/polysolve.md new file mode 100644 index 00000000..09d28eb3 --- /dev/null +++ b/polysolve/polysolve.md @@ -0,0 +1,168 @@ +# PolySolve + +![Build](https://github.com/polyfem/polysolve/workflows/Build/badge.svg) + +This library contains a cross-platform Eigen wrapper for many different external linear solvers including (but not limited to): + + - CHOLMOD + - Hypre + - AMGCL + - Pardiso + + +## Example Usage + +```c++ +const std::string solver_name = "Hypre" +auto solver = LinearSolver::create(solver_name, ""); + +// Configuration parameters like iteration or accuracy for iterative solvers +// solver->setParameters(params); + +// System sparse matrix +Eigen::SparseMatrix A; + +// Right-hand side +Eigen::VectorXd b; + +// Solution +Eigen::VectorXd x(b.size()); + +solver->analyzePattern(A, A.rows()); +solver->factorize(A); +solver->solve(b, x); +``` + +You can use `LinearSolver::availableSolvers()` to obtain the list of available solvers. + +## Parameters + +Polysolve uses a JSON file to provide parameters to the individual solvers. The following template can be used as a starting point, and a more detailed explanation of the parameters is below. + +```json +{ + "Eigen::LeastSquaresConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Eigen::DGMRES": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Eigen::ConjugateGradient": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Eigen::BiCGSTAB": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Eigen::GMRES": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Eigen::MINRES": { + "max_iter": 1000, + "tolerance": 1e-6 + }, + "Pardiso": { + "mtype": -1 + }, + "Hypre": { + "max_iter": 1000, + "pre_max_iter": 1000, + "tolerance": 1e-6 + }, + "AMGCL": { + "precond": { + "relax": { + "degree": 16, + "type": "chebyshev", + "power_iters": 100, + "higher": 2, + "lower": 0.008333333333, + "scale": true + }, + "class": "amg", + "max_levels": 6, + "direct_coarse": false, + "ncycle": 2, + "coarsening": { + "type": "smoothed_aggregation", + "estimate_spectral_radius": true, + "relax": 1, + "aggr": { + "eps_strong": 0 + } + } + }, + "solver": { + "tol": 1e-10, + "maxiter": 1000, + "type": "cg" + } + } +} +``` + +### Iterative solvers (AMGCL, Eigen Internal Solvers, HYPRE) + + - `max_iter` controls the solver's iterations, default `1000` + - `conv_tol`, `tolerance` controls the convergence tolerance, default `1e-10` + +#### Hypre Only + +- `pre_max_iter`, number of pre iterations, default `1` + +#### AMGCL Only + +The default parameters of the AMGCL solver are: +```json +{ + "precond": { + "relax": { + "degree": 16, + "type": "chebyshev", + "power_iters": 100, + "higher": 2, + "lower": 0.008333333333, + "scale": true + }, + "class": "amg", + "max_levels": 6, + "direct_coarse": false, + "ncycle": 2, + "coarsening": { + "type": "smoothed_aggregation", + "estimate_spectral_radius": true, + "relax": 1, + "aggr": { + "eps_strong": 0 + } + } + }, + "solver": { + "tol": 1e-10, + "maxiter": 1000, + "type": "cg" + } +} +``` + +For a more details and options refer to the [AMGCL documentation](https://amgcl.readthedocs.io/en/latest/components.html). + +### Pardiso + +`mtype`, sets the matrix type, default 11 + +| mtype | Description | +| ----- | --------------------------------------- | +| 1 | real and structurally symmetric | +| 2 | real and symmetric positive definite | +| -2 | real and symmetric indefinite | +| 3 | complex and structurally symmetric | +| 4 | complex and Hermitian positive definite | +| -4 | complex and Hermitian indefinite | +| 6 | complex and symmetric | +| 11 | real and nonsymmetric | +| 13 | complex and nonsymmetric | diff --git a/python/index.html b/python/index.html new file mode 100644 index 00000000..8d97bede --- /dev/null +++ b/python/index.html @@ -0,0 +1,1153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Home - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Python bindings

+
+

Warning

+

The python bindings are in beta. Expect API changes and possible bugs. Use at your own peril!

+
+

Last update +Downloads +Install +Binder

+

I am making efforts to provide a simple python interface to Polyfem.

+

For doing so I am maintaining a conda package which can be easily installed https://anaconda.org/conda-forge/polyfempy.

+

Note that the conda deployment is slow and this tutorial will follow the deployment version.

+

If you hare in a hurry for the juicy latest feature you can clone the repository Polyfem-python and use pip to install: +

python setup.py develop
+
+and +
python setup.py test
+
+for testing.

+

Note that the folders tests contain some tests which can be used as documentation.

+

The documentation can be found here.

+

Tutorial

+

Polyfem relies on 3 main objects:

+
    +
  1. Settings that contains the main settings such discretization order (e.g., \(P_1\) or \(P_2\)), material parameters, formulation, etc.
  2. +
  3. Problem that describe the problem you want to solve, that is the boundary conditions and right-hand side. There are some predefined problems, such as DrivenCavity, or generic problems, such as GenericTensor.
  4. +
  5. Solver that is the actual FEM solver.
  6. +
+

The usage of specific problems is indented for benchmarking, in general you want to use the GenericTensor for tensor-based PDEs (e.g., elasticity) or GenericScalar for scalar PDEs (e.g., Poisson).

+

A typical use of Polyfem is: +

settings = polyfempy.Settings()
+# set necessary settings
+# e.g. settings.discr_order = 2
+
+problem = polyfempy.GenericTensor() # or any other problem
+# set problem related data
+# e.g. problem.set_displacement(1, [0, 0], [True, False])
+
+settings.problem = problem
+
+#now we can create a solver and solve
+solver = polyfempy.Solver()
+
+solver.settings(settings)
+solver.load_mesh_from_path(mesh_path)
+
+solver.solve()
+

+

Note 1: for legacy reasons Polyfem always normalizes the mesh (i.e., rescale it to lay in the \([0,1]^d\) box, you can use normalize_mesh = False while loading to disable this feature.

+

Note 2: the solution \(u(x)\) of a FEM solver are the coefficients \(u_i\) you need to multiply the bases \(\varphi_i(x)\) with: +$$ +u(x)=\sum u_i \varphi_i(x). +$$ +The coefficients \(u_i\) are unrelated with the mesh vertices because of reordering of the nodes or high-order bases. For instance \(P_2\) bases have additional nodes on the edges which do not exist in the mesh.

+

For this reason Polyfem uses a visualization mesh where the solution is sampled at the vertices. +This mesh has two advantages: +1. it solves the problem of nodes reordering and additional nodes in the same way +2. it provides a “true” visualization for high order solution by densely sampling each element (a \(P_2\) solution is a piecewise quadratic function which is visualized in a picewise linear fashion, thus the need of a dense element sampling).

+

To control the resolution of the visualization mesh use vismesh_rel_area named-argument while loading.

+

Notebook

+

For more details and nice interactive example go to the notebook tutorial!

+

Or just play with the tutorial in Binder

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/python/python.md b/python/python.md new file mode 100644 index 00000000..0935f7bc --- /dev/null +++ b/python/python.md @@ -0,0 +1,87 @@ +Python bindings +=============== + +!!! warning + The python bindings are in beta. Expect API changes and possible bugs. Use at your own peril! + +[![Last update](https://anaconda.org/conda-forge/polyfempy/badges/latest_release_date.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Downloads](https://anaconda.org/conda-forge/polyfempy/badges/downloads.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Install](https://anaconda.org/conda-forge/polyfempy/badges/installer/conda.svg)](https://anaconda.org/conda-forge/polyfempy) +[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/polyfem/polyfem.github.io.git/docs?filepath=docs%2Fpython_examples.ipynb) + + +I am making efforts to provide a simple python interface to Polyfem. + +For doing so I am maintaining a *conda* package which can be easily installed [https://anaconda.org/conda-forge/polyfempy](https://anaconda.org/conda-forge/polyfempy). + +Note that the conda deployment is slow and this tutorial will follow the deployment version. + +If you hare in a hurry for the juicy latest feature you can clone the repository [Polyfem-python](https://github.com/polyfem/polyfem-python) and use `pip` to install: +``` +python setup.py develop +``` +and +``` +python setup.py test +``` +for testing. + +Note that the folders tests contain some tests which can be used as documentation. + +The documentation can be found [here](polyfempy_doc.md). + +Tutorial +-------- + +Polyfem relies on 3 main objects: + + 1. `Settings` that contains the main settings such discretization order (e.g., $P_1$ or $P_2$), material parameters, formulation, etc. + 2. `Problem` that describe the problem you want to solve, that is the boundary conditions and right-hand side. There are some predefined problems, such as `DrivenCavity`, or generic problems, such as `GenericTensor`. + 3. `Solver` that is the actual FEM solver. + +The usage of specific problems is indented for benchmarking, in general you want to use the `GenericTensor` for tensor-based PDEs (e.g., elasticity) or `GenericScalar` for scalar PDEs (e.g., Poisson). + +A typical use of Polyfem is: +```python +settings = polyfempy.Settings() +# set necessary settings +# e.g. settings.discr_order = 2 + +problem = polyfempy.GenericTensor() # or any other problem +# set problem related data +# e.g. problem.set_displacement(1, [0, 0], [True, False]) + +settings.problem = problem + +#now we can create a solver and solve +solver = polyfempy.Solver() + +solver.settings(settings) +solver.load_mesh_from_path(mesh_path) + +solver.solve() +``` + +**Note 1**: for legacy reasons Polyfem always normalizes the mesh (i.e., rescale it to lay in the $[0,1]^d$ box, you can use `normalize_mesh = False` while loading to disable this feature. + +**Note 2**: the solution $u(x)$ of a FEM solver are the coefficients $u_i$ you need to multiply the bases $\varphi_i(x)$ with: +$$ +u(x)=\sum u_i \varphi_i(x). +$$ +The coefficients $u_i$ are *unrelated* with the mesh vertices because of reordering of the nodes or high-order bases. For instance $P_2$ bases have additional nodes on the edges which do not exist in the mesh. + + +For this reason Polyfem uses a *visualization mesh* where the solution is sampled at the vertices. +This mesh has two advantages: +1. it solves the problem of nodes reordering and additional nodes in the same way +2. it provides a "true" visualization for high order solution by densely sampling each element (a $P_2$ solution is a piecewise quadratic function which is visualized in a picewise linear fashion, thus the need of a dense element sampling). + +To control the resolution of the visualization mesh use `vismesh_rel_area` named-argument while loading. + + +Notebook +-------- + +For more details and nice interactive example go to the [notebook tutorial](python_examples.ipynb)! + +Or just play with the tutorial in [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/polyfem/polyfem.github.io.git/docs?filepath=docs%2Fpython_examples.ipynb) diff --git a/python_examples/index.html b/python_examples/index.html new file mode 100644 index 00000000..7628fa0e --- /dev/null +++ b/python_examples/index.html @@ -0,0 +1,4728 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Jupyter Tutorial - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/python_examples/python_examples.ipynb b/python_examples/python_examples.ipynb new file mode 100644 index 00000000..30b2c608 --- /dev/null +++ b/python_examples/python_examples.ipynb @@ -0,0 +1,1237 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Polyfem Python Tutorial" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is a jupyter notebook. The \"real\" notebook can be found [here](https://github.com/polyfem/polyfem.github.io/blob/docs/docs/python_examples.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Polyfem relies on 3 main objects:\n", + "\n", + "1. `Settings` that contains the main settings such discretization order (e.g., $P_1$ or $P_2$), material parameters, formulation, etc.\n", + "2. `Problem` that describe the problem you want to solve, that is the boundary conditions and right-hand side. There are some predefined problems, such as `DrivenCavity`, or generic problems, such as `GenericTensor`.\n", + "3. `Solver` that is the actual FEM solver.\n", + "\n", + "The usage of specific problems is indented for benchmarking, in general you want to use the `GenericTensor` for tensor-based PDEs (e.g., elasticity) or `GenericScalar` for scalar PDEs (e.g., Poisson). \n", + "\n", + "A typical use of Polyfem is:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```python\n", + "settings = polyfempy.Settings(\n", + " pde=polyfempy.PDEs.LinearElasticity, # or any other PDE\n", + " discr_order=2\n", + ")\n", + "# set necessary settings\n", + "# e.g. settings.discr_order = 2\n", + "\n", + "problem = polyfempy.Problem() # or any other problem\n", + "# set problem related data\n", + "# e.g. problem.set_displacement(1, [0, 0], [True, False])\n", + "\n", + "settings.problem = problem\n", + "\n", + "#now we can create a solver and solve\n", + "solver = polyfempy.Solver()\n", + "\n", + "solver.settings(settings)\n", + "solver.load_mesh_from_path(mesh_path, normalize_mesh=False)\n", + "\n", + "solver.solve()\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note 1**: for legacy reasons Polyfem always normalizes the mesh (i.e., rescale it to lay in the $[0,1]^d$ box, you can use `normalize_mesh=False` when loading to disable this feature." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Note 2**: the solution $u(x)$ of a FEM solver are the coefficients $u_i$ you need to multiply the bases $\\varphi_i(x)$ with:\n", + "$$\n", + "u(x)=\\sum u_i \\varphi_i(x).\n", + "$$\n", + "The coefficients $u_i$ are **unrelated** with the mesh vertices because of reordering of the nodes or high-order bases. For instance $P_2$ bases have additional nodes on the edges which do not exist in the mesh.\n", + "\n", + "For this reason Polyfem uses a *visualization mesh* where the solution is sampled at the vertices.\n", + "This mesh has two advantages: \n", + "1. it solves the problem of nodes reordering and additional nodes in the same way\n", + "2. it provides a \"true\" visualization for high order solution by densely sampling each element (a $P_2$ solution is a piecewise quadratic function which is visualized in a picewise linear fashion, thus the need of a dense element sampling).\n", + "\n", + "To control the resolution of the visualization mesh use `vismesh_rel_area` while loading." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Examples" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Some imports for plotting" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import meshplot as mp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "algebra" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and finally `polyfempy`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import polyfempy as pf" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Utility" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Creates a quad mesh of `n_pts` x `n_pts` in the form of a regular grid" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def create_quad_mesh(n_pts):\n", + " extend = np.linspace(0,1,n_pts)\n", + " x, y = np.meshgrid(extend, extend, sparse=False, indexing='xy')\n", + " pts = np.column_stack((x.ravel(), y.ravel()))\n", + " \n", + " faces = np.ndarray([(n_pts-1)**2, 4],dtype=np.int32)\n", + "\n", + " index = 0\n", + " for i in range(n_pts-1):\n", + " for j in range(n_pts-1):\n", + " faces[index, :] = np.array([\n", + " j + i * n_pts,\n", + " j+1 + i * n_pts,\n", + " j+1 + (i+1) * n_pts,\n", + " j + (i+1) * n_pts\n", + " ])\n", + " index = index + 1\n", + " \n", + " return pts, faces" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plate hole" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the python version of the plate with hole example explained [here](https://polyfem.github.io/tutorial/#boundary-conditions)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set the mesh path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mesh_path = \"plane_hole.obj\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "create settings:\n", + "\n", + "- Pick linear $P_1$ elements (if the mesh would be a quad it would be $Q_1$)\n", + "- We are use a linear material model" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings = pf.Settings(\n", + " discr_order=1,\n", + " pde=pf.PDEs.LinearElasticity\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and choose Young's modulus and poisson ratio" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.set_material_params(\"E\", 210000)\n", + "settings.set_material_params(\"nu\", 0.3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we setup the problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem = pf.Problem()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sideset 1 has symetric boundary in $x$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem.set_x_symmetric(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sideset 4 has symmetric boundary in $y$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem.set_y_symmetric(4)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "sideset 3 has a force of [100, 0] applied" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem.set_force(3, [100, 0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "fianally set the problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.problem = problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Solve!\n", + "Note: we normalize the mesh to be in $[0,1]^2$" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver = pf.Solver()\n", + "\n", + "solver.settings(settings)\n", + "solver.load_mesh_from_path(mesh_path, normalize_mesh=True)\n", + "\n", + "solver.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get the solution" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, tets, disp = solver.get_sampled_solution()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "diplace the mesh" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vertices = pts + disp" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and get the stresses" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mises, _ = solver.get_sampled_mises_avg()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "finally plot with the above code" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mp.plot(vertices, tets, mises, return_plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we used `get_sampled_mises_avg` to get the Von Mises stresses because they depend on the Jacobian of the displacement which, becase we use $P_1$ elements, is piece-wise constant. To avoid that effect in `get_sampled_mises_avg` the mises are averaged per vertex weighted by the area of the triangles. If you want the \"real\" mises just call" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mises = solver.get_sampled_mises()\n", + "mp.plot(vertices, tets, mises, return_plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plate hole with High-Order Mesh" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is the same example as before, but we use `wildmeshing` to create a curved mesh." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import wildmeshing as wm\n", + "mesh_path = \"plane_hole.svg\"\n", + "\n", + "v, f, nodes, F_nodes = wm.triangulate_svg(mesh_path, cut_outside=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we proceed as before" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "#create settings\n", + "settings = pf.Settings(\n", + " discr_order=1, #pick linear P_1 elements, even if the geometry is P_3\n", + " pde=pf.PDEs.LinearElasticity #Linear elasticity\n", + ")\n", + "\n", + "#Material parameters\n", + "settings.set_material_params(\"E\", 210000)\n", + "settings.set_material_params(\"nu\", 0.3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we setup the problem as before" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem = pf.Problem()\n", + "\n", + "#sideset 1 is symmetric in x\n", + "problem.set_x_symmetric(1)\n", + "\n", + "#sideset 4 is symmetric in y\n", + "problem.set_y_symmetric(4)\n", + "\n", + "#sideset 3 has a force of [100, 0] applied\n", + "problem.set_force(3, [100, 0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "fianally set the problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.problem = problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create the solver and load the high-order mesh, the only difference with respect to before" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver = pf.Solver()\n", + "\n", + "solver.settings(settings)\n", + "solver.set_high_order_mesh(v, f, nodes, F_nodes, normalize_mesh=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And finally, solve!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get and plot the solution, same as before" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, tets, disp = solver.get_sampled_solution()\n", + "\n", + "#diplace the mesh\n", + "vertices = pts + disp\n", + "\n", + "#get the stresses\n", + "mises, _ = solver.get_sampled_mises_avg()\n", + "\n", + "#plot\n", + "mp.plot(vertices, tets, mises, return_plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Torsion" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Non-linear example. We want to torque a 3D bar around the $z$ direction.\n", + "\n", + "The example is really similar as the one just above." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sets the mesh, create a solver, and load the mesh." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this case the mesh has already the correct size. We also choose a coarse visualization mesh" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mesh_path = \"square_beam_h.HYBRID\"\n", + "solver = pf.Solver()\n", + "solver.load_mesh_from_path(mesh_path, normalize_mesh=False, vismesh_rel_area=0.001)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We want to use the default sideset marking, top of the mesh is 5 and bottom is 6.\n", + "\n", + "Let's verify. We first extract the sidesets: `p` are some point, `t` triangles, and `s` the sidesets from 1 to 6" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "p, t, s = solver.get_boundary_sidesets()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can plot it" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tmp = np.zeros_like(s)\n", + "tmp[s==5] = 1\n", + "tmp[s==6] = 1\n", + "\n", + "mp.plot(p, t, tmp, return_plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we create the settings, as before.\n", + "\n", + "Note: It is an hex-mesh so we are using $Q_1$.\n", + "\n", + "Differently from before we want a non-linear material model: NeoHookean.\n", + "\n", + "To avoid ambiguities in the rotation, we want to do 5 steps of incremental loading." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings = pf.Settings(\n", + " discr_order=1,\n", + " pde=pf.PDEs.NonLinearElasticity,\n", + " \n", + " nl_solver_rhs_steps=5\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Choose Young's modulus and Poisson's ratio, as before" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.set_material_params(\"E\", 200)\n", + "settings.set_material_params(\"nu\", 0.35)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we setup problem with fixed sideset (5), rotating sideset (6), ahlf a tour along the $z$-axis." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem = pf.Torsion(\n", + " fixed_boundary=5, #sideset 5 is fixed\n", + " turning_boundary=6, #sideset 6 rotates\n", + " \n", + " n_turns = 0.5, #by half a tour\n", + " \n", + " axis_coordiante=2, #around the z-axis, 2\n", + " \n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and set the problem and solve" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.problem = problem\n", + "\n", + "#solving!\n", + "solver.settings(settings)\n", + "\n", + "solver.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "takes approx 1 min because it is a complicated non-linear problem!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get solution and stesses as before\n", + "\n", + "Since we want to show only the surface there is no need of getting the whole volume, so we set `boundary_only` to `True`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, tets, disp = solver.get_sampled_solution(boundary_only=True)\n", + "vertices = pts + disp\n", + "mises, _ = solver.get_sampled_mises_avg(boundary_only=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and plot the 3d result!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mp.plot(vertices, tets, mises, shading={\"flat\":True}, return_plot=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Fluid simulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create the mesh using the utility function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, faces = create_quad_mesh(50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "create settings, pick linear $Q_2$ elements for velocity and $Q_1$ for pressure and select stokes as material model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings = pf.Settings(\n", + " discr_order=2,\n", + " pressure_discr_order=1,\n", + " \n", + " pde=pf.PDEs.Stokes\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Set the viscosity of the fluid" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.set_material_params(\"viscosity\", 1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The default solver do not support mixed formulation, we need to choose `UmfPackLU`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.set_advanced_option(\"solver_type\", \"Eigen::UmfPackLU\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use the standard [Driven Cavity](https://www.cfd-online.com/Wiki/Lid-driven_cavity_problem) problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem = pf.DrivenCavity()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we set the problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.problem = problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We create the solver and set the settings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver = pf.Solver()\n", + "solver.settings(settings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This time we are using pts and faces instead of loading from the disk" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver.set_mesh(pts, faces, vismesh_rel_area=0.001)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Solve!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now get the solution and the pressure" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, tris, velocity = solver.get_sampled_solution()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "and plot it!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "each = 10\n", + "p = mp.plot(pts, tris, np.linalg.norm(velocity, axis=1), return_plot=True)\n", + "p.add_lines(pts[0:pts.shape[0]:each,:], pts[0:pts.shape[0]:each,:]+velocity[0:pts.shape[0]:each,:]/6)\n", + "p" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Time dependent simulation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Create the mesh using the utility function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts, faces = create_quad_mesh(50)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "create settings, pick linear $Q_1$ elements, and a linear material model.\n", + "\n", + "In this case we want to run a simulation with $t\\in[0, 10]$ and have 50 time steps." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings = pf.Settings(\n", + " discr_order=1,\n", + " pde=pf.PDEs.LinearElasticity,\n", + " \n", + " tend=10,\n", + " time_steps=50\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Choose Young's modulus and poisson ratio" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.set_material_params(\"E\", 1)\n", + "settings.set_material_params(\"nu\", 0.3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next we setup the problem, this doesnt have any parameters. It will..." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "problem = pf.Gravity()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "we set the problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "settings.problem = problem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We create the solver and set the settings" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver = pf.Solver()\n", + "solver.settings(settings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This time we are using `pts` and `faces` instead of loading from the disk (For efficienty in the browser we select a coarse vis mesh)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver.set_mesh(pts, faces, vismesh_rel_area=0.001)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Solve!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "solver.solve()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get the solution and the mises" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pts = solver.get_sampled_points_frames()\n", + "tris = solver.get_sampled_connectivity_frames()\n", + "disp = solver.get_sampled_solution_frames()\n", + "mises = solver.get_sampled_mises_avg_frames()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def plot(frame, p=None):\n", + " return mp.plot(pts[frame]+disp[frame], tris[frame], mises[frame], return_plot=True, plot=p)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before the animation, let's plot the solution some frames" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot(0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot(5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "plot(11)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to do the animation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "p = plot(0)\n", + "\n", + "@mp.interact(frame=(0, len(mises)))\n", + "def step(frame=0):\n", + " plot(frame, p)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 00000000..46705dec --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"PolyFEM","text":"

A polyvalent C++ and Python FEM library.

PolyFEM is a simple C++ and Python finite element library. We provide a wide set of common PDEs including:

  • Laplace
  • Helmholtz
  • Linear Elasticity
  • St. Venant\u2013Kirchhoff Elasticity
  • Neo-Hookean Elasticity
  • Stokes
  • Navier\u2013Stokes

PolyFEM simplicity lies in the interface: just pick a problem, select some boundary condition, and solve. No need to construct complicated function spaces, or learn a new scripting language: everything is set-up trough a JSON interface or through the Setting class in python.

For instance, PolyFEM seamlessly integrates quad/hexes and tri/tets of order up to 4, and integrates state-of-the-art techniques such as the adaptive \\(p\\)-refinement presented in \u201cDecoupling Simulation Accuracy from Mesh Quality\u201d or the spline and polygonal bases in \u201cPoly-Spline Finite-Element Method\u201d.

The library is actively used in our research so expect frequent updates, fixes, and new features!

"},{"location":"#news","title":"News","text":"
  • New \u201cselection\u201d interface to set boundary conditions and body ids.
  • Added support for multi-material simulations.
  • PolyFEM supports time-dependent fluid simulations!
  • PolyFEM supports contacts using the IPC Toolkit.
  • We support FEBio (*.feb) files.
  • We finally extracted the solvers from PolyFEM. You can now use the wrappers independently, check the PolySolve repo.
  • PolyFEM meshplot, igl and wildmeshing are presented at a Eurographics course.
  • Bindings v0.5.2 with a new more pythonic interface, support for functions of the right-hand side and exact solution.
  • PolyFEM is being used in biology! Check the paper or the project page!
  • PolyFEM meshplot, igl and wildmeshing are presented at a SIGGRAPH course (07/30/2019).
  • PolyFEM is now triangle and tetgen free. Stay tuned for the release of v0.5 in python with a new interface to high-order meshes and meshplot for the fast 3D plots!
  • PolyFEM has been used in \u201cA Large Scale Comparison of Tetrahedral and Hexahedral Elements for Finite Element Analysis\u201d! Check the interactive plots!
  • PolyFEM now supports high-order geometric maps! Check the SIGGRAPH paper \u201cTriWild: Robust Triangulation with Curve Constraints\u201d for more details!
  • PolyFEM has a python interface!
  • PolyFEM can do adaptive a priori \\(p\\)-refinement! Check the SIGGRAPH paper \u201cDecoupling Simulation Accuracy from Mesh Quality\u201d for more details!
"},{"location":"#polyfem-in-c","title":"PolyFEM in C++","text":"

For more details refer to the C++ section

"},{"location":"#compilation","title":"Compilation","text":"

All the C++ dependencies required to build the code are included. It should work on Windows, macOS, and Linux, and it should build out-of-the-box with CMake:

mkdir build\ncd build\ncmake ..\nmake -j4\n
"},{"location":"#usage","title":"Usage","text":"

The main executable, ./PolyFEM_bin, can be called as a command-line interface. Simply run:

./PolyFEM_bin --help\n
"},{"location":"#polyfem-in-python","title":"PolyFEM in Python","text":"

For more details refer to the Python section

"},{"location":"#installation","title":"Installation","text":"

We are making efforts to provide a simple python interface to Polyfem.

For doing so, we are maintaining a conda package that can be easily installed https://anaconda.org/conda-forge/polyfempy.

conda install -c conda-forge polyfempy\n
"},{"location":"#usage_1","title":"Usage","text":"

Simply import the package!

import polyfempy\n
"},{"location":"#polysolve","title":"PolySolve","text":"

PolyFEM heavily depends on external libraries for solving linear systems. If you need a linear system wrapper based on Eigen (but do not need the finite element setup) you use PolySolve.

"},{"location":"#citation","title":"Citation","text":"

If you use PolyFEM in your project, please consider citing our work:

@misc{polyfem,\nauthor = {Teseo Schneider and J\u00e9r\u00e9mie Dumas and Xifeng Gao and Denis Zorin and Daniele Panozzo},\ntitle = {{PolyFEM}},\nhowpublished = \"\\url{https://polyfem.github.io/}\",\nyear = {2019},\n}\n
@article{Schneider:2019:PFM,\nauthor = {Schneider, Teseo and Dumas, J{\\'e}r{\\'e}mie and Gao, Xifeng and Botsch, Mario and Panozzo, Daniele and Zorin, Denis},\ntitle = {Poly-Spline Finite-Element Method},\njournal = {ACM Trans. Graph.},\nvolume = {38},\nnumber = {3},\nmonth = mar,\nyear = {2019},\nurl = {http://doi.acm.org/10.1145/3313797},\npublisher = {ACM}\n}\n
@article{Schneider:2018:DSA,\nauthor = {Teseo Schneider and Yixin Hu and J\u00e9r\u00e9mie Dumas and Xifeng Gao and Daniele Panozzo and Denis Zorin},\njournal = {ACM Transactions on Graphics},\nlink = {},\nmonth = {10},\nnumber = {6},\npublisher = {Association for Computing Machinery (ACM)},\ntitle = {Decoupling Simulation Accuracy from Mesh Quality},\nvolume = {37},\nyear = {2018}\n}\n
"},{"location":"#acknowledgments-funding","title":"Acknowledgments & Funding","text":"

The software is being developed in the Geometric Computing Lab at NYU Courant Institute of Mathematical Sciences and the University of Victoria, Canada.

This work was partially supported by:

  • the NSF CAREER award 1652515
  • the NSF grant IIS-1320635
  • the NSF grant DMS-1436591
  • the NSF grant 1835712
  • the SNSF grant P2TIP2_175859
  • the NSERC grant RGPIN-2021-03707
  • the NSERC grant DGECR-2021-00461
  • Adobe Research
  • nTopology
"},{"location":"#license","title":"License","text":"

The code of PolyFEM itself is licensed under MIT License. However, please be mindful of third-party libraries which are used by PolyFEM and may be available under a different license.

"},{"location":"_json_spec/","title":"json spec","text":"

/ (object)

/\n
Description Root of the configuration file. Required

/geometry (list)

/geometry\n
Description List of geometry objects.

/geometry/*
/geometry/*\n
/geometry/* (object)mesh_arrayplanegroundmesh_sequence

Description Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. Required

/geometry/*/mesh (file)

/geometry/*/mesh\n
Description Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

Optional

/geometry/*/type (string)

/geometry/*/type\n
Description Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Description Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Description Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Description Geometric transformations applied to the geometry after loading it.

Default: None Optional

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Description Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Description Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Description Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Description Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection
/geometry/*/volume_selection\n
/geometry/*/volume_selection (int)/geometry/*/volume_selection (file)/geometry/*/volume_selection (object)/geometry/*/volume_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description Offsets the volume IDs loaded from the mesh.

Default: None Optional

/geometry/*/volume_selection/id_offset (int)

/geometry/*/volume_selection/id_offset\n
Description Offsets the volume IDs loaded from the mesh.

Default: 0

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/volume_selection/*
/geometry/*/volume_selection/*\n
/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box (list)

/geometry/*/volume_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/* (list)

/geometry/*/volume_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/*/* (float)

/geometry/*/volume_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center (list)

/geometry/*/volume_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center/* (float)

/geometry/*/volume_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1 (list)

/geometry/*/volume_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1/* (float)

/geometry/*/volume_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2 (list)

/geometry/*/volume_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2/* (float)

/geometry/*/volume_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point (list)

/geometry/*/volume_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point/* (float)

/geometry/*/volume_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal (list)

/geometry/*/volume_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal/* (float)

/geometry/*/volume_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/axis
/geometry/*/volume_selection/*/axis\n
/geometry/*/volume_selection/*/axis (int)/geometry/*/volume_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/position (float)

/geometry/*/volume_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

/geometry/*/surface_selection
/geometry/*/surface_selection\n
/geometry/*/surface_selection (int)/geometry/*/surface_selection (file)/geometry/*/surface_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/surface_selection/*
/geometry/*/surface_selection/*\n
/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box (list)

/geometry/*/surface_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/* (list)

/geometry/*/surface_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/*/* (float)

/geometry/*/surface_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center (list)

/geometry/*/surface_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center/* (float)

/geometry/*/surface_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1 (list)

/geometry/*/surface_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1/* (float)

/geometry/*/surface_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2 (list)

/geometry/*/surface_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2/* (float)

/geometry/*/surface_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point (list)

/geometry/*/surface_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point/* (float)

/geometry/*/surface_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal (list)

/geometry/*/surface_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal/* (float)

/geometry/*/surface_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/axis
/geometry/*/surface_selection/*/axis\n
/geometry/*/surface_selection/*/axis (int)/geometry/*/surface_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/position (float)

/geometry/*/surface_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None Required

/geometry/*/surface_selection/*/threshold (float)

/geometry/*/surface_selection/*/threshold\n
Description Threshold for box side selection.

Optional

/geometry/*/surface_selection/*/id_offset (int)

/geometry/*/surface_selection/*/id_offset\n
Description ID offset of box side selection.

Default: 0

/geometry/*/curve_selection (object)

/geometry/*/curve_selection\n
Description Selection of curves

Default: None

/geometry/*/point_selection
/geometry/*/point_selection\n
/geometry/*/point_selection (int)/geometry/*/point_selection (file)/geometry/*/point_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/point_selection/*
/geometry/*/point_selection/*\n
/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box (list)

/geometry/*/point_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/* (list)

/geometry/*/point_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/*/* (float)

/geometry/*/point_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center (list)

/geometry/*/point_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center/* (float)

/geometry/*/point_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1 (list)

/geometry/*/point_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1/* (float)

/geometry/*/point_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2 (list)

/geometry/*/point_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2/* (float)

/geometry/*/point_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point (list)

/geometry/*/point_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point/* (float)

/geometry/*/point_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal (list)

/geometry/*/point_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal/* (float)

/geometry/*/point_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/axis
/geometry/*/point_selection/*/axis\n
/geometry/*/point_selection/*/axis (int)/geometry/*/point_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/position (float)

/geometry/*/point_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None Required

/geometry/*/point_selection/*/threshold (float)

/geometry/*/point_selection/*/threshold\n
Description Threshold for box side selection.

Optional

/geometry/*/point_selection/*/id_offset (int)

/geometry/*/point_selection/*/id_offset\n
Description ID offset of box side selection.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
Description number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Description Advanced options for geometry

Default: None Optional

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Description Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Description Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
Description parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Description Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Description Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
Description The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: mesh_array Description Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object. Required

/geometry/*/mesh (file)

/geometry/*/mesh\n
Description Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

/geometry/*/array (object)

/geometry/*/array\n
Description Array of meshes Required

/geometry/*/array/offset (float)

/geometry/*/array/offset\n
Description Offset of the mesh in the array.

/geometry/*/array/size (list)

/geometry/*/array/size\n
Description Size of the array (two entries for 2D problems or three entries for 3D problems).

/geometry/*/array/size/* (int)

/geometry/*/array/size/*\n
Description Size of the array (two entries for 2D problems or three entries for 3D problems).

Range: [1, inf]

Optional

/geometry/*/array/relative (bool)

/geometry/*/array/relative\n
Description Is the offset value relative to the mesh\u2019s dimensions.

Default: False

Optional

/geometry/*/type (string)

/geometry/*/type\n
Description Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Description Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Description Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Description Geometric transformations applied to the geometry after loading it.

Default: None Optional

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Description Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Description Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Description Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Description Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection
/geometry/*/volume_selection\n
/geometry/*/volume_selection (int)/geometry/*/volume_selection (file)/geometry/*/volume_selection (object)/geometry/*/volume_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description Offsets the volume IDs loaded from the mesh.

Default: None Optional

/geometry/*/volume_selection/id_offset (int)

/geometry/*/volume_selection/id_offset\n
Description Offsets the volume IDs loaded from the mesh.

Default: 0

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/volume_selection/*
/geometry/*/volume_selection/*\n
/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box (list)

/geometry/*/volume_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/* (list)

/geometry/*/volume_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/*/* (float)

/geometry/*/volume_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center (list)

/geometry/*/volume_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center/* (float)

/geometry/*/volume_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1 (list)

/geometry/*/volume_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1/* (float)

/geometry/*/volume_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2 (list)

/geometry/*/volume_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2/* (float)

/geometry/*/volume_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point (list)

/geometry/*/volume_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point/* (float)

/geometry/*/volume_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal (list)

/geometry/*/volume_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal/* (float)

/geometry/*/volume_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/axis
/geometry/*/volume_selection/*/axis\n
/geometry/*/volume_selection/*/axis (int)/geometry/*/volume_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/position (float)

/geometry/*/volume_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

/geometry/*/surface_selection
/geometry/*/surface_selection\n
/geometry/*/surface_selection (int)/geometry/*/surface_selection (file)/geometry/*/surface_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/surface_selection/*
/geometry/*/surface_selection/*\n
/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box (list)

/geometry/*/surface_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/* (list)

/geometry/*/surface_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/*/* (float)

/geometry/*/surface_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center (list)

/geometry/*/surface_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center/* (float)

/geometry/*/surface_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1 (list)

/geometry/*/surface_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1/* (float)

/geometry/*/surface_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2 (list)

/geometry/*/surface_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2/* (float)

/geometry/*/surface_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point (list)

/geometry/*/surface_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point/* (float)

/geometry/*/surface_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal (list)

/geometry/*/surface_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal/* (float)

/geometry/*/surface_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/axis
/geometry/*/surface_selection/*/axis\n
/geometry/*/surface_selection/*/axis (int)/geometry/*/surface_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/position (float)

/geometry/*/surface_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None Required

/geometry/*/surface_selection/*/threshold (float)

/geometry/*/surface_selection/*/threshold\n
Description Threshold for box side selection.

Optional

/geometry/*/surface_selection/*/id_offset (int)

/geometry/*/surface_selection/*/id_offset\n
Description ID offset of box side selection.

Default: 0

/geometry/*/curve_selection (object)

/geometry/*/curve_selection\n
Description Selection of curves

Default: None

/geometry/*/point_selection
/geometry/*/point_selection\n
/geometry/*/point_selection (int)/geometry/*/point_selection (file)/geometry/*/point_selection (list)

Description Assign specified ID to all elements of the geometry.

Description Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Description List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/point_selection/*
/geometry/*/point_selection/*\n
/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)

Description Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box (list)

/geometry/*/point_selection/*/box\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/* (list)

/geometry/*/point_selection/*/box/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/*/* (float)

/geometry/*/point_selection/*/box/*/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center (list)

/geometry/*/point_selection/*/center\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center/* (float)

/geometry/*/point_selection/*/center/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1 (list)

/geometry/*/point_selection/*/p1\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1/* (float)

/geometry/*/point_selection/*/p1/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2 (list)

/geometry/*/point_selection/*/p2\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2/* (float)

/geometry/*/point_selection/*/p2/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point (list)

/geometry/*/point_selection/*/point\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point/* (float)

/geometry/*/point_selection/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal (list)

/geometry/*/point_selection/*/normal\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal/* (float)

/geometry/*/point_selection/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None Required

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/axis
/geometry/*/point_selection/*/axis\n
/geometry/*/point_selection/*/axis (int)/geometry/*/point_selection/*/axis (string)

Description FIXME: Missing documentation in the specification.

Description FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/position (float)

/geometry/*/point_selection/*/position\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
Description FIXME: Missing documentation in the specification.

Default: False

Description Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None Required

/geometry/*/point_selection/*/threshold (float)

/geometry/*/point_selection/*/threshold\n
Description Threshold for box side selection.

Optional

/geometry/*/point_selection/*/id_offset (int)

/geometry/*/point_selection/*/id_offset\n
Description ID offset of box side selection.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
Description number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Description Advanced options for geometry

Default: None Optional

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Description Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Description Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
Description parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Description Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Description Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
Description The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: plane Description Plane geometry object defined by its origin and normal. Required

/geometry/*/point (list)

/geometry/*/point\n
Description Point on plane (two entries for 2D problems or three entries for 3D problems).

/geometry/*/point/* (float)

/geometry/*/point/*\n
Description FIXME: Missing documentation in the specification.

/geometry/*/normal (list)

/geometry/*/normal\n
Description Normal of plane (two entries for 2D problems or three entries for 3D problems).

/geometry/*/normal/* (float)

/geometry/*/normal/*\n
Description FIXME: Missing documentation in the specification.

Optional

/geometry/*/type (string)

/geometry/*/type\n
Description Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Description Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
Description The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: ground Description Plane orthogonal to gravity defined by its height. Required

/geometry/*/height (float)

/geometry/*/height\n
Description Height of ground plane.

Optional

/geometry/*/type (string)

/geometry/*/type\n
Description Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Description Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
Description The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: mesh_sequence Description Mesh sequence. Required

/geometry/*/mesh_sequence
/geometry/*/mesh_sequence\n
/geometry/*/mesh_sequence (string)/geometry/*/mesh_sequence (list)

Description Directory (or GLOB) of meshes for the mesh sequence.

Description List of mesh files for the mesh sequence.

/geometry/*/mesh_sequence/* (file)

/geometry/*/mesh_sequence/*\n
Description Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

/geometry/*/fps (int)

/geometry/*/fps\n
Description Frames of the mesh sequence per second.

Optional

/geometry/*/type (string)

/geometry/*/type\n
Description Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Description Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Description Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Description Geometric transformations applied to the geometry after loading it.

Default: None Optional

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Description Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Description Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Description Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Description Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Description Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
Description FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
Description number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Description Advanced options for geometry

Default: None Optional

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Description Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Description Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
Description parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Description Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Description Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
Description The geometry elements are not included in deforming geometry, only in collision computations

Default: False

/materials (list)

/materials\n
Description Material Parameters lists including ID pointing to volume selection, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), Density (\\(\\rho\\)), or Lam\u00e9 constants (\\(\\lambda\\) and \\(\\mu\\)).

/materials/*
/materials/*\n
NeoHookeanNeoHookeanMooneyRivlinMooneyRivlin3ParamMooneyRivlin3ParamSymbolicUnconstrainedOgdenIncompressibleOgdenLinearElasticityLinearElasticityHookeLinearElasticityHookeLinearElasticitySaintVenantSaintVenantStokesNavierStokesOperatorSplittingIncompressibleLinearElasticityIncompressibleLinearElasticityLaplacianHelmholtzBilaplacianAMIPSFixedCorotationalFixedCorotational

Type: NeoHookean Description Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: NeoHookean Description Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
Description The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: MooneyRivlin Description Material Parameters including ID, for Mooney-Rivlin Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
Description The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
Description The unit of the Value

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: MooneyRivlin3Param Description Material Parameters including ID, for Mooney-Rivlin Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
Description The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
Description The unit of the Value

/materials/*/c3
/materials/*/c3\n
/materials/*/c3 (float)/materials/*/c3 (string)/materials/*/c3 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c3/value
/materials/*/c3/value\n
/materials/*/c3/value (float)/materials/*/c3/value (string)/materials/*/c3/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c3/unit (string)

/materials/*/c3/unit\n
Description The unit of the Value

/materials/*/d1
/materials/*/d1\n
/materials/*/d1 (float)/materials/*/d1 (string)/materials/*/d1 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/d1/value
/materials/*/d1/value\n
/materials/*/d1/value (float)/materials/*/d1/value (string)/materials/*/d1/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/d1/unit (string)

/materials/*/d1/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: MooneyRivlin3ParamSymbolic Description Material Parameters including ID, for Mooney-Rivlin Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
Description The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
Description The unit of the Value

/materials/*/c3
/materials/*/c3\n
/materials/*/c3 (float)/materials/*/c3 (string)/materials/*/c3 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c3/value
/materials/*/c3/value\n
/materials/*/c3/value (float)/materials/*/c3/value (string)/materials/*/c3/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c3/unit (string)

/materials/*/c3/unit\n
Description The unit of the Value

/materials/*/d1
/materials/*/d1\n
/materials/*/d1 (float)/materials/*/d1 (string)/materials/*/d1 (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/d1/value
/materials/*/d1/value\n
/materials/*/d1/value (float)/materials/*/d1/value (string)/materials/*/d1/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/d1/unit (string)

/materials/*/d1/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: UnconstrainedOgden Description Material Parameters including ID, for Ogden. Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/alphas
/materials/*/alphas\n
/materials/*/alphas (float)/materials/*/alphas (string)/materials/*/alphas (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/alphas/value
/materials/*/alphas/value\n
/materials/*/alphas/value (float)/materials/*/alphas/value (string)/materials/*/alphas/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/alphas/unit (string)

/materials/*/alphas/unit\n
Description The unit of the Value

/materials/*/mus (list)

/materials/*/mus\n
Description Ogden mu

/materials/*/mus/*
/materials/*/mus/*\n
/materials/*/mus/* (float)/materials/*/mus/* (string)/materials/*/mus/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/mus/*/value
/materials/*/mus/*/value\n
/materials/*/mus/*/value (float)/materials/*/mus/*/value (string)/materials/*/mus/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/mus/*/unit (string)

/materials/*/mus/*/unit\n
Description The unit of the Value

/materials/*/Ds (list)

/materials/*/Ds\n
Description Ogden D

/materials/*/Ds/*
/materials/*/Ds/*\n
/materials/*/Ds/* (float)/materials/*/Ds/* (string)/materials/*/Ds/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/Ds/*/value
/materials/*/Ds/*/value\n
/materials/*/Ds/*/value (float)/materials/*/Ds/*/value (string)/materials/*/Ds/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/Ds/*/unit (string)

/materials/*/Ds/*/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: IncompressibleOgden Description Material Parameters including ID, for Ogden. Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c
/materials/*/c\n
/materials/*/c (float)/materials/*/c (string)/materials/*/c (object)/materials/*/c (list)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c/value
/materials/*/c/value\n
/materials/*/c/value (float)/materials/*/c/value (string)/materials/*/c/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c/unit (string)

/materials/*/c/unit\n
Description The unit of the Value

Description Coefficient(s) of Incompressible Ogden

/materials/*/c/*
/materials/*/c/*\n
/materials/*/c/* (float)/materials/*/c/* (string)/materials/*/c/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/c/*/value
/materials/*/c/*/value\n
/materials/*/c/*/value (float)/materials/*/c/*/value (string)/materials/*/c/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/c/*/unit (string)

/materials/*/c/*/unit\n
Description The unit of the Value

/materials/*/m
/materials/*/m\n
/materials/*/m (float)/materials/*/m (string)/materials/*/m (object)/materials/*/m (list)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/m/value
/materials/*/m/value\n
/materials/*/m/value (float)/materials/*/m/value (string)/materials/*/m/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/m/unit (string)

/materials/*/m/unit\n
Description The unit of the Value

Description Exponent(s) of Incompressible Ogden

/materials/*/m/*
/materials/*/m/*\n
/materials/*/m/* (float)/materials/*/m/* (string)/materials/*/m/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/m/*/value
/materials/*/m/*/value\n
/materials/*/m/*/value (float)/materials/*/m/*/value (string)/materials/*/m/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/m/*/unit (string)

/materials/*/m/*/unit\n
Description The unit of the Value

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: LinearElasticity Description Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: LinearElasticity Description Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
Description The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: HookeLinearElasticity Description Material Parameters including ID, E, nu, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: HookeLinearElasticity Description Material Parameters including ID, E, nu, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/elasticity_tensor (list)

/materials/*/elasticity_tensor\n
Description Symmetric elasticity tensor

/materials/*/elasticity_tensor/*
/materials/*/elasticity_tensor/*\n
/materials/*/elasticity_tensor/* (float)/materials/*/elasticity_tensor/* (string)/materials/*/elasticity_tensor/* (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/elasticity_tensor/*/value
/materials/*/elasticity_tensor/*/value\n
/materials/*/elasticity_tensor/*/value (float)/materials/*/elasticity_tensor/*/value (string)/materials/*/elasticity_tensor/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/elasticity_tensor/*/unit (string)

/materials/*/elasticity_tensor/*/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: SaintVenant Description Material Parameters including ID, E, nu, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: SaintVenant Description Material Parameters including ID, E, nu, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/elasticity_tensor (list)

/materials/*/elasticity_tensor\n
Description Symmetric elasticity tensor

/materials/*/elasticity_tensor/*
/materials/*/elasticity_tensor/*\n
/materials/*/elasticity_tensor/* (float)/materials/*/elasticity_tensor/* (string)/materials/*/elasticity_tensor/* (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/elasticity_tensor/*/value
/materials/*/elasticity_tensor/*/value\n
/materials/*/elasticity_tensor/*/value (float)/materials/*/elasticity_tensor/*/value (string)/materials/*/elasticity_tensor/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/elasticity_tensor/*/unit (string)

/materials/*/elasticity_tensor/*/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: Stokes Description Material Parameters including ID, viscosity, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: NavierStokes Description Material Parameters including ID, viscosity, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: OperatorSplitting Description Material Parameters including ID, viscosity, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: IncompressibleLinearElasticity Description Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: IncompressibleLinearElasticity Description Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
Description The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: Laplacian Description Material Parameters including ID, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: Helmholtz Description Material Parameters including ID, k, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: Bilaplacian Description Material Parameters including ID, density (\\(\\rho\\)) Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

Type: AMIPS Description Material Parameters including ID Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

Type: FixedCorotational Description Material Parameters including ID Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
Description The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Type: FixedCorotational Description Material Parameters including ID Required

/materials/*/type (string)

/materials/*/type\n
Description Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
Description The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
Description The unit of the Value

Optional

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Description Volume selection ID

Default: 0

Description Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Description Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Description Value as a constant float

Default: 1

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
Description The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
Description The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
Description The unit of the Value

Optional

/units (object)

/units\n
Description Basic units used in the code.

Default: None Optional

/units/length (string)

/units/length\n
Description Length unit.

Default: 'm'

/units/mass (string)

/units/mass\n
Description Mass unit.

Default: 'kg'

/units/time (string)

/units/time\n
Description Time unit.

Default: 's'

/units/characteristic_length (float)

/units/characteristic_length\n
Description Characteristic length, used for tolerances.

Default: 1

/preset_problem
/preset_problem\n
LinearQuadraticCubicSineFrankeFrankeOldGenericScalarExactZero_BCElasticWalkTorsionElasticDoubleTorsionElasticElasticZeroBCElasticExactElasticCantileverExactCompressionElasticExactQuadraticElasticExactLinearElasticExactPointBasedTensorKernelNodeTimeDependentScalarMinSurfGravityConstantVelocityTwoSpheresDrivenCavityDrivenCavityC0DrivenCavitySmoothFlowFlowWithObstacleCornerFlowUnitFlowWithObstacleStokesLawTaylorGreenVortexSimpleStokeProblemExactSineStokeProblemExactTransientStokeProblemExactKovnaszyAirfoilLshapeTestProblemBilaplacianProblemWithSolution

Type: Linear Description TODO

Default: 'skip' Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Quadratic Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Cubic Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Sine Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Franke Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: FrankeOld Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: GenericScalarExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/func (int)

/preset_problem/func\n
Description TODO

Default: 0

Type: Zero_BC Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Elastic Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Walk Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TorsionElastic Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/axis_coordiante (int)

/preset_problem/axis_coordiante\n
Description TODO

Default: 2

/preset_problem/n_turns (float)

/preset_problem/n_turns\n
Description TODO

Default: 0.5

/preset_problem/fixed_boundary (int)

/preset_problem/fixed_boundary\n
Description TODO

Default: 5

/preset_problem/turning_boundary (int)

/preset_problem/turning_boundary\n
Description TODO

Default: 6

/preset_problem/bbox_center (list)

/preset_problem/bbox_center\n
Description TODO

/preset_problem/bbox_center/* (float)

/preset_problem/bbox_center/*\n
Description TODO

Default: 0

Type: DoubleTorsionElastic Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/axis_coordiante0 (int)

/preset_problem/axis_coordiante0\n
Description TODO

Default: 2

/preset_problem/axis_coordiante1 (int)

/preset_problem/axis_coordiante1\n
Description TODO

Default: 2

/preset_problem/angular_v0 (float)

/preset_problem/angular_v0\n
Description TODO

Default: 0.5

/preset_problem/angular_v1 (float)

/preset_problem/angular_v1\n
Description TODO

Default: -0.5

/preset_problem/turning_boundary0 (int)

/preset_problem/turning_boundary0\n
Description TODO

Default: 5

/preset_problem/turning_boundary1 (int)

/preset_problem/turning_boundary1\n
Description TODO

Default: 6

/preset_problem/bbox_center (list)

/preset_problem/bbox_center\n
Description TODO

/preset_problem/bbox_center/* (float)

/preset_problem/bbox_center/*\n
Description TODO

Default: 0

Type: ElasticZeroBC Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: ElasticExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: ElasticCantileverExact Description TODO, add displacement, E, nu, formulation, mesh_size Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: CompressionElasticExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: QuadraticElasticExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: LinearElasticExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: PointBasedTensor Description TODO, add optionals Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Kernel Description TODO, add optionals Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/formulation (string)

/preset_problem/formulation\n
Description TODO

Default: ''

/preset_problem/n_kernels (int)

/preset_problem/n_kernels\n
Description TODO

Default: 0

/preset_problem/kernel_distance (float)

/preset_problem/kernel_distance\n
Description TODO

Default: 0

/preset_problem/kernel_weights (string)

/preset_problem/kernel_weights\n
Description TODO

Default: ''

Type: Node Description TODO, add optionals Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TimeDependentScalar Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: MinSurf Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Gravity Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: ConstantVelocity Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TwoSpheres Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavity Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavityC0 Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavitySmooth Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Flow Description TODO, add inflow, outflow, inflow_amout, outflow_amout, direction, obstacle Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: FlowWithObstacle Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: CornerFlow Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: UnitFlowWithObstacle Description TODO, add inflow_id, direction, no_slip Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: StokesLaw Description TODO, add radius Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
Description TODO

Default: 1

Type: TaylorGreenVortex Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
Description TODO

Default: 1

Type: SimpleStokeProblemExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/func (int)

/preset_problem/func\n
Description TODO

Default: 0

Type: SineStokeProblemExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TransientStokeProblemExact Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/func (int)

/preset_problem/func\n
Description TODO

Default: 0

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
Description TODO

Default: 1

Type: Kovnaszy Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
Description TODO

Default: 1

Type: Airfoil Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: Lshape Description TODO Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Optional

Type: TestProblem Description TODO, type, omega, is_scalar Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: BilaplacianProblemWithSolution Description TODO, type, omega, is_scalar Required

/preset_problem/type (string)

/preset_problem/type\n
Description Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/common (file)

/common\n
Description Path to common settings will patch the current file.

Default: ''

Extensions: ['.json']

/root_path (string)

/root_path\n
Description Path for all relative paths, set automatically to the folder containing this JSON.

Default: ''

/space (object)

/space\n
Description Options related to the FE space.

Default: None Optional

/space/discr_order
/space/discr_order\n
/space/discr_order (int)/space/discr_order (file)/space/discr_order (list)

Description Lagrange element order for the space for the main unknown, for all elements.

Default: 1

Description Path to file containing Lagrange element order for the space for the main unknown per element.

Extensions: ['.txt', '.bin']

Description List of Lagrange element order for the space for the main unknown with volume IDs.

/space/discr_order/* (object)

/space/discr_order/*\n
Description Lagrange element order for the a space tagged with volume ID for the main unknown. Required

/space/discr_order/*/id
/space/discr_order/*/id\n
/space/discr_order/*/id (int)/space/discr_order/*/id (list)

Description Volume selection ID to apply the discr_order to.

Description List of volume selection IDs to apply the discr_order to.

/space/discr_order/*/id/* (int)

/space/discr_order/*/id/*\n
Description Volume selection ID to apply the discr_order to.

/space/discr_order/*/order (int)

/space/discr_order/*/order\n
Description Lagrange element order for the space for the main unknown, for all elements.

/space/pressure_discr_order (int)

/space/pressure_discr_order\n
Description Lagrange element order for the space for the pressure unknown, for all elements.

Default: 1

/space/basis_type (string)

/space/basis_type\n
Description Type of basis to use for non polygonal element, one of Lagrange, Spline, or Serendipity. Spline or Serendipity work only for quad/hex meshes

Default: 'Lagrange'

Options: ['Lagrange', 'Spline', 'Serendipity']

/space/poly_basis_type (string)

/space/poly_basis_type\n
Description Type of basis to use for a polygonal element, one of MFSHarmonic, MeanValue, or Wachspress see \u2018PolySpline..\u2019 paper for details.

Default: 'MFSHarmonic'

Options: ['MFSHarmonic', 'MeanValue', 'Wachspress']

/space/use_p_ref (bool)

/space/use_p_ref\n
Description Perform a priori p-refinement based on element shape, as described in \u2018Decoupling..\u2019 paper.

Default: False

/space/remesh (object)

/space/remesh\n
Description Settings for adaptive remeshing

Default: None Optional

/space/remesh/enabled (bool)

/space/remesh/enabled\n
Description Whether to do adaptive remeshing

Default: False

/space/remesh/split (object)

/space/remesh/split\n
Description Settings for adaptive remeshing edge splitting operations

Default: None Optional

/space/remesh/split/enabled (bool)

/space/remesh/split/enabled\n
Description Whether to do edge splitting in adaptive remeshing

Default: True

/space/remesh/split/acceptance_tolerance (float)

/space/remesh/split/acceptance_tolerance\n
Description Accept split operation if energy decreased by at least x

Default: 0.001

Range: [0, inf]

/space/remesh/split/culling_threshold (float)

/space/remesh/split/culling_threshold\n
Description Split operation culling threshold on energy

Default: 0.95

Range: [0, 1]

/space/remesh/split/max_depth (int)

/space/remesh/split/max_depth\n
Description Maximum depth split per time-step

Default: 3

Range: [1, inf]

/space/remesh/split/min_edge_length (float)

/space/remesh/split/min_edge_length\n
Description Minimum edge length to split

Default: 1e-06

Range: [0, inf]

/space/remesh/collapse (object)

/space/remesh/collapse\n
Description Settings for adaptive remeshing edge collapse operations

Default: None Optional

/space/remesh/collapse/enabled (bool)

/space/remesh/collapse/enabled\n
Description Whether to do edge collapse in adaptive remeshing

Default: True

/space/remesh/collapse/acceptance_tolerance (float)

/space/remesh/collapse/acceptance_tolerance\n
Description Accept collapse operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/collapse/culling_threshold (float)

/space/remesh/collapse/culling_threshold\n
Description Collapse operation culling threshold on energy

Default: 0.01

Range: [0, 1]

/space/remesh/collapse/max_depth (int)

/space/remesh/collapse/max_depth\n
Description Maximum depth collapse per time-step

Default: 3

Range: [1, inf]

/space/remesh/collapse/rel_max_edge_length (float)

/space/remesh/collapse/rel_max_edge_length\n
Description Length of maximum edge length to collapse relative to initial minimum edge length

Default: 1

Range: [0, inf]

/space/remesh/collapse/abs_max_edge_length (float)

/space/remesh/collapse/abs_max_edge_length\n
Description Length of maximum edge length to collapse in absolute units of distance

Default: 1e+100

Range: [0, inf]

/space/remesh/swap (object)

/space/remesh/swap\n
Description Settings for adaptive remeshing edge/face swap operations

Default: None Optional

/space/remesh/swap/enabled (bool)

/space/remesh/swap/enabled\n
Description Whether to do edge/face swap in adaptive remeshing

Default: False

/space/remesh/swap/acceptance_tolerance (float)

/space/remesh/swap/acceptance_tolerance\n
Description Accept swap operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/swap/max_depth (int)

/space/remesh/swap/max_depth\n
Description Maximum depth swap per time-step

Default: 3

Range: [1, inf]

/space/remesh/smooth (object)

/space/remesh/smooth\n
Description Settings for adaptive remeshing vertex smoothing operations

Default: None Optional

/space/remesh/smooth/enabled (bool)

/space/remesh/smooth/enabled\n
Description Whether to do vertex smoothing in adaptive remeshing

Default: False

/space/remesh/smooth/acceptance_tolerance (float)

/space/remesh/smooth/acceptance_tolerance\n
Description Accept smooth operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/smooth/max_iters (int)

/space/remesh/smooth/max_iters\n
Description Maximum number of smoothing iterations per time-step

Default: 1

Range: [1, inf]

/space/remesh/local_relaxation (object)

/space/remesh/local_relaxation\n
Description Settings for adaptive remeshing local relaxation

Default: None Optional

/space/remesh/local_relaxation/local_mesh_n_ring (int)

/space/remesh/local_relaxation/local_mesh_n_ring\n
Description Size of n-ring for local relaxation

Default: 2

/space/remesh/local_relaxation/local_mesh_rel_area (float)

/space/remesh/local_relaxation/local_mesh_rel_area\n
Description Minimum area for local relaxation

Default: 0.01

/space/remesh/local_relaxation/max_nl_iterations (int)

/space/remesh/local_relaxation/max_nl_iterations\n
Description Maximum number of nonlinear solver iterations before acceptance check

Default: 1

/space/remesh/type (string)

/space/remesh/type\n
Description Type of adaptive remeshing to use.

Default: 'physics'

Options: ['physics', 'sizing_field']

/space/advanced (object)

/space/advanced\n
Description Advanced settings for the FE space.

Default: None Optional

/space/advanced/discr_order_max (int)

/space/advanced/discr_order_max\n
Description Maximal discretization order in adaptive p-refinement and hp-refinement

Default: 4

/space/advanced/isoparametric (bool)

/space/advanced/isoparametric\n
Description Forces geometric map basis to be the same degree as the main variable basis, irrespective of the degree associated with the geom. map degrees associated with the elements of the geometry.

Default: False

/space/advanced/bc_method (string)

/space/advanced/bc_method\n
Description Method for imposing analytic Dirichet boundary conditions. If \u2018lsq\u2019 (least-squares fit), then the bc function is sampled at quadrature points, and the FEspace nodal values on the boundary are determined by minimizing L2 norm of the difference. If \u2018sample\u2019, then the analytic bc function is sampled at the boundary nodes.

Default: 'sample'

Options: ['lsq', 'sample']

/space/advanced/n_boundary_samples (int)

/space/advanced/n_boundary_samples\n
Description Per-element number of boundary samples for analytic Dirichlet and Neumann boundary conditions.

Default: -1

/space/advanced/quadrature_order (int)

/space/advanced/quadrature_order\n
Description Minimal quadrature order to use in matrix and rhs assembly; the actual order is determined as min(2*(p-1)+1,quadrature_order).

Default: -1

/space/advanced/mass_quadrature_order (int)

/space/advanced/mass_quadrature_order\n
Description Minimal quadrature order to use in mass matrix assembler; the actual order is determined as min(2*p+1,quadrature_order)

Default: -1

/space/advanced/integral_constraints (int)

/space/advanced/integral_constraints\n
Description Number of constraints for non-conforming polygonal basis; 0, 1, or 2; see \u2018PolySpline..\u2019 paper for details.

Default: 2

/space/advanced/n_harmonic_samples (int)

/space/advanced/n_harmonic_samples\n
Description If MFSHarmonics is used for a polygonal element, number of collocation samples used in the basis construction;see \u2018PolySpline..\u2019 paper for details.

Default: 10

/space/advanced/force_no_ref_for_harmonic (bool)

/space/advanced/force_no_ref_for_harmonic\n
Description If true, do not do uniform global refinement if the mesh contains polygonal elements.

Default: False

/space/advanced/B (int)

/space/advanced/B\n
Description The target deviation of the error on elements from perfect element error, for a priori geometry-dependent p-refinement, see \u2018Decoupling .. \u2018 paper.

Default: 3

/space/advanced/h1_formula (bool)

/space/advanced/h1_formula\n
Description

Default: False

/space/advanced/count_flipped_els (bool)

/space/advanced/count_flipped_els\n
Description Count the number of elements with Jacobian of the geometric map not positive at quadrature points.

Default: True

/space/advanced/use_particle_advection (bool)

/space/advanced/use_particle_advection\n
Description Use particle advection in splitting method for solving NS equation.

Default: False

/time
/time\n
/time (object)/time (object)/time (object)

Description The time parameters: start time t0, end time tend, time step dt.

Default: 'skip' Required

/time/tend (float)

/time/tend\n
Description Ending time

Range: [0, inf]

/time/dt (float)

/time/dt\n
Description Time step size \\(\\Delta t\\)

Range: [0, inf]

Optional

/time/t0 (float)

/time/t0\n
Description Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Description Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Description Implicit Euler time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Description Backwards differentiation formula time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/steps (int)

/time/integrator/steps\n
Description BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Description Implicit Newmark time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/gamma (float)

/time/integrator/gamma\n
Description Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Description Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Description Ignore inertia in time dependent. Used for doing incremental load.

Default: False

Description The time parameters: start time t0, time step dt, number of time steps. Required

/time/time_steps (int)

/time/time_steps\n
Description Number of time steps

Range: [0, inf]

/time/dt (float)

/time/dt\n
Description Time step size \\(\\Delta t\\)

Range: [0, inf]

Optional

/time/t0 (float)

/time/t0\n
Description Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Description Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Description Implicit Euler time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Description Backwards differentiation formula time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/steps (int)

/time/integrator/steps\n
Description BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Description Implicit Newmark time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/gamma (float)

/time/integrator/gamma\n
Description Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Description Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Description Ignore inertia in time dependent. Used for doing incremental load.

Default: False

Description The time parameters: start time t0, end time tend, number of time steps. Required

/time/time_steps (int)

/time/time_steps\n
Description Number of time steps

Range: [0, inf]

/time/tend (float)

/time/tend\n
Description Ending time

Range: [0, inf]

Optional

/time/t0 (float)

/time/t0\n
Description Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Description Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Description Implicit Euler time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Description Backwards differentiation formula time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/steps (int)

/time/integrator/steps\n
Description BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Description Implicit Newmark time integration Required

/time/integrator/type (string)

/time/integrator/type\n
Description Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Optional

/time/integrator/gamma (float)

/time/integrator/gamma\n
Description Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Description Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Description Ignore inertia in time dependent. Used for doing incremental load.

Default: False

/contact (object)

/contact\n
Description Contact handling parameters.

Default: None Optional

/contact/enabled (bool)

/contact/enabled\n
Description True if contact handling is enabled.

Default: False

/contact/dhat (float)

/contact/dhat\n
Description Contact barrier activation distance.

Default: 0.001

Range: [0, inf]

/contact/dhat_percentage (float)

/contact/dhat_percentage\n
Description \\(\\hat{d}\\) as percentage of the diagonal of the bounding box

Default: 0.8

/contact/epsv (float)

/contact/epsv\n
Description Friction smoothing parameter.

Default: 0.001

Range: [0, inf]

/contact/friction_coefficient (float)

/contact/friction_coefficient\n
Description Coefficient of friction (global)

Default: 0

/contact/use_convergent_formulation (bool)

/contact/use_convergent_formulation\n
Description Whether to use the convergent (area weighted) formulation of IPC.

Default: False

/contact/collision_mesh
/contact/collision_mesh\n
/contact/collision_mesh (object)/contact/collision_mesh (object)

Description Load a preconstructed collision mesh.

Default: 'skip' Required

/contact/collision_mesh/mesh (string)

/contact/collision_mesh/mesh\n
Description Path to preconstructed collision mesh.

/contact/collision_mesh/linear_map (string)

/contact/collision_mesh/linear_map\n
Description HDF file storing the linear mapping of displacements.

Optional

/contact/collision_mesh/enabled (bool)

/contact/collision_mesh/enabled\n
Description

Default: True

Description Construct a collision mesh with a maximum edge length. Required

/contact/collision_mesh/max_edge_length (float)

/contact/collision_mesh/max_edge_length\n
Description Maximum edge length to use for building the collision mesh.

Optional

/contact/collision_mesh/tessellation_type (string)

/contact/collision_mesh/tessellation_type\n
Description Type of tessellation to use for building the collision mesh.

Default: 'regular'

Options: ['regular', 'irregular']

/contact/collision_mesh/enabled (bool)

/contact/collision_mesh/enabled\n
Description

Default: True

/contact/periodic (bool)

/contact/periodic\n
Description Set to true to check collision between adjacent periodic cells.

Default: False

/solver (object)

/solver\n
Description The settings for the solver including linear solver, nonlinear solver, and some advanced options.

Default: None Optional

/solver/max_threads (int)

/solver/max_threads\n
Description Maximum number of threads used; 0 is unlimited.

Default: 0

Range: [0, inf]

/solver/linear (object)

/solver/linear\n
Description Settings for the linear solver.

Default: None Optional

/solver/linear/enable_overwrite_solver (bool)

/solver/linear/enable_overwrite_solver\n
Description If solver name is not present, falls back to default

Default: False

/solver/linear/solver (string)

/solver/linear/solver\n
Description Linear solver type.

Default: ''

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

/solver/linear/precond (string)

/solver/linear/precond\n
Description Preconditioner used if using an iterative linear solver.

Default: ''

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

/solver/linear/Eigen::LeastSquaresConjugateGradient (object)

/solver/linear/Eigen::LeastSquaresConjugateGradient\n
Description Settings for the Eigen\u2019s Least Squares Conjugate Gradient solver.

Default: None Optional

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter (int)

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance (float)

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::DGMRES (object)

/solver/linear/Eigen::DGMRES\n
Description Settings for the Eigen\u2019s DGMRES solver.

Default: None Optional

/solver/linear/Eigen::DGMRES/max_iter (int)

/solver/linear/Eigen::DGMRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::DGMRES/tolerance (float)

/solver/linear/Eigen::DGMRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::ConjugateGradient (object)

/solver/linear/Eigen::ConjugateGradient\n
Description Settings for the Eigen\u2019s Conjugate Gradient solver.

Default: None Optional

/solver/linear/Eigen::ConjugateGradient/max_iter (int)

/solver/linear/Eigen::ConjugateGradient/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::ConjugateGradient/tolerance (float)

/solver/linear/Eigen::ConjugateGradient/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::BiCGSTAB (object)

/solver/linear/Eigen::BiCGSTAB\n
Description Settings for the Eigen\u2019s BiCGSTAB solver.

Default: None Optional

/solver/linear/Eigen::BiCGSTAB/max_iter (int)

/solver/linear/Eigen::BiCGSTAB/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::BiCGSTAB/tolerance (float)

/solver/linear/Eigen::BiCGSTAB/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::GMRES (object)

/solver/linear/Eigen::GMRES\n
Description Settings for the Eigen\u2019s GMRES solver.

Default: None Optional

/solver/linear/Eigen::GMRES/max_iter (int)

/solver/linear/Eigen::GMRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::GMRES/tolerance (float)

/solver/linear/Eigen::GMRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::MINRES (object)

/solver/linear/Eigen::MINRES\n
Description Settings for the Eigen\u2019s MINRES solver.

Default: None Optional

/solver/linear/Eigen::MINRES/max_iter (int)

/solver/linear/Eigen::MINRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::MINRES/tolerance (float)

/solver/linear/Eigen::MINRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/linear/Pardiso (object)

/solver/linear/Pardiso\n
Description Settings for the Pardiso solver.

Default: None Optional

/solver/linear/Pardiso/mtype (int)

/solver/linear/Pardiso/mtype\n
Description Matrix type.

Default: 11

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

/solver/linear/Hypre (object)

/solver/linear/Hypre\n
Description Settings for the Hypre solver.

Default: None Optional

/solver/linear/Hypre/max_iter (int)

/solver/linear/Hypre/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/Hypre/pre_max_iter (int)

/solver/linear/Hypre/pre_max_iter\n
Description Maximum number of pre iterations.

Default: 1

/solver/linear/Hypre/tolerance (float)

/solver/linear/Hypre/tolerance\n
Description Convergence tolerance.

Default: 1e-10

/solver/linear/AMGCL (object)

/solver/linear/AMGCL\n
Description Settings for the AMGCL solver.

Default: None Optional

/solver/linear/AMGCL/solver (object)

/solver/linear/AMGCL/solver\n
Description Solver settings for the AMGCL.

Default: None Optional

/solver/linear/AMGCL/solver/tol (float)

/solver/linear/AMGCL/solver/tol\n
Description Convergence tolerance.

Default: 1e-10

/solver/linear/AMGCL/solver/maxiter (int)

/solver/linear/AMGCL/solver/maxiter\n
Description Maximum number of iterations.

Default: 1000

/solver/linear/AMGCL/solver/type (string)

/solver/linear/AMGCL/solver/type\n
Description Type of solver to use.

Default: 'cg'

/solver/linear/AMGCL/precond (object)

/solver/linear/AMGCL/precond\n
Description Preconditioner settings for the AMGCL.

Default: None Optional

/solver/linear/AMGCL/precond/relax (object)

/solver/linear/AMGCL/precond/relax\n
Description Preconditioner settings for the AMGCL.

Default: None Optional

/solver/linear/AMGCL/precond/relax/degree (int)

/solver/linear/AMGCL/precond/relax/degree\n
Description Degree of the polynomial.

Default: 16

/solver/linear/AMGCL/precond/relax/type (string)

/solver/linear/AMGCL/precond/relax/type\n
Description Type of relaxation to use.

Default: 'chebyshev'

/solver/linear/AMGCL/precond/relax/power_iters (int)

/solver/linear/AMGCL/precond/relax/power_iters\n
Description Number of power iterations.

Default: 100

/solver/linear/AMGCL/precond/relax/higher (float)

/solver/linear/AMGCL/precond/relax/higher\n
Description Higher level relaxation.

Default: 2

/solver/linear/AMGCL/precond/relax/lower (float)

/solver/linear/AMGCL/precond/relax/lower\n
Description Lower level relaxation.

Default: 0.008333333333

/solver/linear/AMGCL/precond/relax/scale (bool)

/solver/linear/AMGCL/precond/relax/scale\n
Description Scale.

Default: True

/solver/linear/AMGCL/precond/class (string)

/solver/linear/AMGCL/precond/class\n
Description Type of preconditioner to use.

Default: 'amg'

/solver/linear/AMGCL/precond/max_levels (int)

/solver/linear/AMGCL/precond/max_levels\n
Description Maximum number of levels.

Default: 6

/solver/linear/AMGCL/precond/direct_coarse (bool)

/solver/linear/AMGCL/precond/direct_coarse\n
Description Use direct solver for the coarsest level.

Default: False

/solver/linear/AMGCL/precond/ncycle (int)

/solver/linear/AMGCL/precond/ncycle\n
Description Number of cycles.

Default: 2

/solver/linear/AMGCL/precond/coarsening (object)

/solver/linear/AMGCL/precond/coarsening\n
Description Coarsening parameters.

Default: None Optional

/solver/linear/AMGCL/precond/coarsening/type (string)

/solver/linear/AMGCL/precond/coarsening/type\n
Description Coarsening type.

Default: 'smoothed_aggregation'

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool)

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius\n
Description Should the spectral radius be estimated.

Default: True

/solver/linear/AMGCL/precond/coarsening/relax (float)

/solver/linear/AMGCL/precond/coarsening/relax\n
Description Coarsening relaxation.

Default: 1

/solver/linear/AMGCL/precond/coarsening/aggr (object)

/solver/linear/AMGCL/precond/coarsening/aggr\n
Description Aggregation settings.

Default: None Optional

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong (float)

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong\n
Description Aggregation epsilon strong.

Default: 0

/solver/adjoint_linear (object)

/solver/adjoint_linear\n
Description Settings for the linear solver.

Default: None Optional

/solver/adjoint_linear/enable_overwrite_solver (bool)

/solver/adjoint_linear/enable_overwrite_solver\n
Description If solver name is not present, falls back to default

Default: False

/solver/adjoint_linear/solver (string)

/solver/adjoint_linear/solver\n
Description Linear solver type.

Default: ''

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

/solver/adjoint_linear/precond (string)

/solver/adjoint_linear/precond\n
Description Preconditioner used if using an iterative linear solver.

Default: ''

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient (object)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient\n
Description Settings for the Eigen\u2019s Least Squares Conjugate Gradient solver.

Default: None Optional

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter (int)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance (float)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::DGMRES (object)

/solver/adjoint_linear/Eigen::DGMRES\n
Description Settings for the Eigen\u2019s DGMRES solver.

Default: None Optional

/solver/adjoint_linear/Eigen::DGMRES/max_iter (int)

/solver/adjoint_linear/Eigen::DGMRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::DGMRES/tolerance (float)

/solver/adjoint_linear/Eigen::DGMRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::ConjugateGradient (object)

/solver/adjoint_linear/Eigen::ConjugateGradient\n
Description Settings for the Eigen\u2019s Conjugate Gradient solver.

Default: None Optional

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter (int)

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance (float)

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::BiCGSTAB (object)

/solver/adjoint_linear/Eigen::BiCGSTAB\n
Description Settings for the Eigen\u2019s BiCGSTAB solver.

Default: None Optional

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter (int)

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance (float)

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::GMRES (object)

/solver/adjoint_linear/Eigen::GMRES\n
Description Settings for the Eigen\u2019s GMRES solver.

Default: None Optional

/solver/adjoint_linear/Eigen::GMRES/max_iter (int)

/solver/adjoint_linear/Eigen::GMRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::GMRES/tolerance (float)

/solver/adjoint_linear/Eigen::GMRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::MINRES (object)

/solver/adjoint_linear/Eigen::MINRES\n
Description Settings for the Eigen\u2019s MINRES solver.

Default: None Optional

/solver/adjoint_linear/Eigen::MINRES/max_iter (int)

/solver/adjoint_linear/Eigen::MINRES/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::MINRES/tolerance (float)

/solver/adjoint_linear/Eigen::MINRES/tolerance\n
Description Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Pardiso (object)

/solver/adjoint_linear/Pardiso\n
Description Settings for the Pardiso solver.

Default: None Optional

/solver/adjoint_linear/Pardiso/mtype (int)

/solver/adjoint_linear/Pardiso/mtype\n
Description Matrix type.

Default: 11

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

/solver/adjoint_linear/Hypre (object)

/solver/adjoint_linear/Hypre\n
Description Settings for the Hypre solver.

Default: None Optional

/solver/adjoint_linear/Hypre/max_iter (int)

/solver/adjoint_linear/Hypre/max_iter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Hypre/pre_max_iter (int)

/solver/adjoint_linear/Hypre/pre_max_iter\n
Description Maximum number of pre iterations.

Default: 1

/solver/adjoint_linear/Hypre/tolerance (float)

/solver/adjoint_linear/Hypre/tolerance\n
Description Convergence tolerance.

Default: 1e-10

/solver/adjoint_linear/AMGCL (object)

/solver/adjoint_linear/AMGCL\n
Description Settings for the AMGCL solver.

Default: None Optional

/solver/adjoint_linear/AMGCL/solver (object)

/solver/adjoint_linear/AMGCL/solver\n
Description Solver settings for the AMGCL.

Default: None Optional

/solver/adjoint_linear/AMGCL/solver/tol (float)

/solver/adjoint_linear/AMGCL/solver/tol\n
Description Convergence tolerance.

Default: 1e-10

/solver/adjoint_linear/AMGCL/solver/maxiter (int)

/solver/adjoint_linear/AMGCL/solver/maxiter\n
Description Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/AMGCL/solver/type (string)

/solver/adjoint_linear/AMGCL/solver/type\n
Description Type of solver to use.

Default: 'cg'

/solver/adjoint_linear/AMGCL/precond (object)

/solver/adjoint_linear/AMGCL/precond\n
Description Preconditioner settings for the AMGCL.

Default: None Optional

/solver/adjoint_linear/AMGCL/precond/relax (object)

/solver/adjoint_linear/AMGCL/precond/relax\n
Description Preconditioner settings for the AMGCL.

Default: None Optional

/solver/adjoint_linear/AMGCL/precond/relax/degree (int)

/solver/adjoint_linear/AMGCL/precond/relax/degree\n
Description Degree of the polynomial.

Default: 16

/solver/adjoint_linear/AMGCL/precond/relax/type (string)

/solver/adjoint_linear/AMGCL/precond/relax/type\n
Description Type of relaxation to use.

Default: 'chebyshev'

/solver/adjoint_linear/AMGCL/precond/relax/power_iters (int)

/solver/adjoint_linear/AMGCL/precond/relax/power_iters\n
Description Number of power iterations.

Default: 100

/solver/adjoint_linear/AMGCL/precond/relax/higher (float)

/solver/adjoint_linear/AMGCL/precond/relax/higher\n
Description Higher level relaxation.

Default: 2

/solver/adjoint_linear/AMGCL/precond/relax/lower (float)

/solver/adjoint_linear/AMGCL/precond/relax/lower\n
Description Lower level relaxation.

Default: 0.008333333333

/solver/adjoint_linear/AMGCL/precond/relax/scale (bool)

/solver/adjoint_linear/AMGCL/precond/relax/scale\n
Description Scale.

Default: True

/solver/adjoint_linear/AMGCL/precond/class (string)

/solver/adjoint_linear/AMGCL/precond/class\n
Description Type of preconditioner to use.

Default: 'amg'

/solver/adjoint_linear/AMGCL/precond/max_levels (int)

/solver/adjoint_linear/AMGCL/precond/max_levels\n
Description Maximum number of levels.

Default: 6

/solver/adjoint_linear/AMGCL/precond/direct_coarse (bool)

/solver/adjoint_linear/AMGCL/precond/direct_coarse\n
Description Use direct solver for the coarsest level.

Default: False

/solver/adjoint_linear/AMGCL/precond/ncycle (int)

/solver/adjoint_linear/AMGCL/precond/ncycle\n
Description Number of cycles.

Default: 2

/solver/adjoint_linear/AMGCL/precond/coarsening (object)

/solver/adjoint_linear/AMGCL/precond/coarsening\n
Description Coarsening parameters.

Default: None Optional

/solver/adjoint_linear/AMGCL/precond/coarsening/type (string)

/solver/adjoint_linear/AMGCL/precond/coarsening/type\n
Description Coarsening type.

Default: 'smoothed_aggregation'

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool)

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius\n
Description Should the spectral radius be estimated.

Default: True

/solver/adjoint_linear/AMGCL/precond/coarsening/relax (float)

/solver/adjoint_linear/AMGCL/precond/coarsening/relax\n
Description Coarsening relaxation.

Default: 1

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr (object)

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr\n
Description Aggregation settings.

Default: None Optional

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong (float)

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong\n
Description Aggregation epsilon strong.

Default: 0

/solver/nonlinear (object)

/solver/nonlinear\n
Description Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

Default: None Optional

/solver/nonlinear/solver
/solver/nonlinear/solver\n
/solver/nonlinear/solver (string)/solver/nonlinear/solver (list)

Description Nonlinear solver type

Default: 'Newton'

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

Description List of solvers for ballback. Eg, [{\u2018type\u2019:\u2019Newton\u2019}, {\u2018type\u2019:\u2019L-BFGS\u2019}, {\u2018type\u2019:\u2019GradientDescent\u2019}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

/solver/nonlinear/solver/*
/solver/nonlinear/solver/*\n
NewtonProjectedNewtonRegularizedNewtonRegularizedProjectedNewtonDenseNewtonDenseProjectedNewtonDenseRegularizedNewtonDenseRegularizedProjectedNewtonGradientDescentStochasticGradientDescentL-BFGSBFGSADAMStochasticADAM

Type: Newton Description Options for Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: ProjectedNewton Description Options for projected Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: RegularizedNewton Description Options for regularized Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: RegularizedProjectedNewton Description Options for regularized projected Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: DenseNewton Description Options for Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseProjectedNewton Description Options for projected Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseRegularizedNewton Description Options for regularized Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: DenseRegularizedProjectedNewton Description Options for projected regularized Newton. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: GradientDescent Description Options for Gradient Descent. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: StochasticGradientDescent Description Options for Stochastic Gradient Descent. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/erase_component_probability (float)

/solver/nonlinear/solver/*/erase_component_probability\n
Description Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

Type: L-BFGS Description Options for L-BFGS. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/history_size (int)

/solver/nonlinear/solver/*/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

Type: BFGS Description Options for BFGS. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: ADAM Description Options for ADAM. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/alpha (float)

/solver/nonlinear/solver/*/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/solver/*/beta_1 (float)

/solver/nonlinear/solver/*/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/solver/*/beta_2 (float)

/solver/nonlinear/solver/*/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/solver/*/epsilon (float)

/solver/nonlinear/solver/*/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

Type: StochasticADAM Description Options for ADAM. Required

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/nonlinear/solver/*/alpha (float)

/solver/nonlinear/solver/*/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/solver/*/beta_1 (float)

/solver/nonlinear/solver/*/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/solver/*/beta_2 (float)

/solver/nonlinear/solver/*/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/solver/*/epsilon (float)

/solver/nonlinear/solver/*/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/solver/*/erase_component_probability (float)

/solver/nonlinear/solver/*/erase_component_probability\n
Description Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

/solver/nonlinear/x_delta (float)

/solver/nonlinear/x_delta\n
Description Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

Default: 0

Range: [0, inf]

/solver/nonlinear/grad_norm (float)

/solver/nonlinear/grad_norm\n
Description Stopping criterion: Minimal gradient norm for the iterations to continue.

Default: 1e-08

Range: [0, inf]

/solver/nonlinear/first_grad_norm_tol (float)

/solver/nonlinear/first_grad_norm_tol\n
Description Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

Default: 1e-10

/solver/nonlinear/max_iterations (int)

/solver/nonlinear/max_iterations\n
Description Maximum number of iterations for a nonlinear solve.

Default: 500

/solver/nonlinear/iterations_per_strategy
/solver/nonlinear/iterations_per_strategy\n
/solver/nonlinear/iterations_per_strategy (int)/solver/nonlinear/iterations_per_strategy (list)

Description Number of iterations for every substrategy before reset.

Default: 5

Description Number of iterations for every substrategy before reset.

/solver/nonlinear/iterations_per_strategy/* (int)

/solver/nonlinear/iterations_per_strategy/*\n
Description Number of iterations for every substrategy before reset.

Default: 5

/solver/nonlinear/line_search (object)

/solver/nonlinear/line_search\n
Description Settings for line-search in the nonlinear solver

Default: None Optional

/solver/nonlinear/line_search/method (string)

/solver/nonlinear/line_search/method\n
Description Line-search type

Default: 'RobustArmijo'

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

/solver/nonlinear/line_search/use_grad_norm_tol (float)

/solver/nonlinear/line_search/use_grad_norm_tol\n
Description When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

Default: 1e-06

/solver/nonlinear/line_search/min_step_size (float)

/solver/nonlinear/line_search/min_step_size\n
Description Mimimum step size

Default: 1e-10

/solver/nonlinear/line_search/max_step_size_iter (int)

/solver/nonlinear/line_search/max_step_size_iter\n
Description Number of iterations

Default: 30

/solver/nonlinear/line_search/min_step_size_final (float)

/solver/nonlinear/line_search/min_step_size_final\n
Description Mimimum step size for last descent strategy

Default: 1e-20

/solver/nonlinear/line_search/max_step_size_iter_final (int)

/solver/nonlinear/line_search/max_step_size_iter_final\n
Description Number of iterations for last descent strategy

Default: 100

/solver/nonlinear/line_search/default_init_step_size (float)

/solver/nonlinear/line_search/default_init_step_size\n
Description Initial step size

Default: 1

/solver/nonlinear/line_search/step_ratio (float)

/solver/nonlinear/line_search/step_ratio\n
Description Ratio used to decrease the step

Default: 0.5

/solver/nonlinear/line_search/Armijo (object)

/solver/nonlinear/line_search/Armijo\n
Description Options for Armijo.

Default: None Optional

/solver/nonlinear/line_search/Armijo/c (float)

/solver/nonlinear/line_search/Armijo/c\n
Description Armijo c parameter.

Default: 0.0001

/solver/nonlinear/line_search/RobustArmijo (object)

/solver/nonlinear/line_search/RobustArmijo\n
Description Options for RobustArmijo.

Default: None Optional

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float)

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance\n
Description Relative tolerance on E to switch to approximate.

Default: 0.1

/solver/nonlinear/allow_out_of_iterations (bool)

/solver/nonlinear/allow_out_of_iterations\n
Description If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

Default: False

/solver/nonlinear/L-BFGS (object)

/solver/nonlinear/L-BFGS\n
Description Options for LBFGS.

Default: None Optional

/solver/nonlinear/L-BFGS/history_size (int)

/solver/nonlinear/L-BFGS/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/nonlinear/L-BFGS-B (object)

/solver/nonlinear/L-BFGS-B\n
Description Options for the boxed L-BFGS.

Default: None Optional

/solver/nonlinear/L-BFGS-B/history_size (int)

/solver/nonlinear/L-BFGS-B/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/nonlinear/Newton (object)

/solver/nonlinear/Newton\n
Description Options for Newton.

Default: None Optional

/solver/nonlinear/Newton/residual_tolerance (float)

/solver/nonlinear/Newton/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/Newton/reg_weight_min (float)

/solver/nonlinear/Newton/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/Newton/reg_weight_max (float)

/solver/nonlinear/Newton/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/Newton/reg_weight_inc (float)

/solver/nonlinear/Newton/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

/solver/nonlinear/Newton/force_psd_projection (bool)

/solver/nonlinear/Newton/force_psd_projection\n
Description Force the Hessian to be PSD when using second order solvers (i.e., Newton\u2019s method).

Default: False

/solver/nonlinear/Newton/use_psd_projection (bool)

/solver/nonlinear/Newton/use_psd_projection\n
Description Use PSD as fallback using second order solvers (i.e., Newton\u2019s method).

Default: True

/solver/nonlinear/Newton/use_psd_projection_in_regularized (bool)

/solver/nonlinear/Newton/use_psd_projection_in_regularized\n
Description Use PSD in regularized Newton.

Default: True

/solver/nonlinear/ADAM (object)

/solver/nonlinear/ADAM\n
Description Options for ADAM.

Default: None Optional

/solver/nonlinear/ADAM/alpha (float)

/solver/nonlinear/ADAM/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/ADAM/beta_1 (float)

/solver/nonlinear/ADAM/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/ADAM/beta_2 (float)

/solver/nonlinear/ADAM/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/ADAM/epsilon (float)

/solver/nonlinear/ADAM/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/StochasticADAM (object)

/solver/nonlinear/StochasticADAM\n
Description Options for ADAM.

Default: None Optional

/solver/nonlinear/StochasticADAM/alpha (float)

/solver/nonlinear/StochasticADAM/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/StochasticADAM/beta_1 (float)

/solver/nonlinear/StochasticADAM/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/StochasticADAM/beta_2 (float)

/solver/nonlinear/StochasticADAM/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/StochasticADAM/epsilon (float)

/solver/nonlinear/StochasticADAM/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/StochasticADAM/erase_component_probability (float)

/solver/nonlinear/StochasticADAM/erase_component_probability\n
Description Probability of erasing a component on the gradient for ADAM.

Default: 0.3

/solver/nonlinear/StochasticGradientDescent (object)

/solver/nonlinear/StochasticGradientDescent\n
Description Options for Stochastic Gradient Descent.

Default: None Optional

/solver/nonlinear/StochasticGradientDescent/erase_component_probability (float)

/solver/nonlinear/StochasticGradientDescent/erase_component_probability\n
Description Probability of erasing a component on the gradient for StochasticGradientDescent.

Default: 0.3

/solver/nonlinear/box_constraints (object)

/solver/nonlinear/box_constraints\n
Description FIXME: Missing documentation in the specification.

Default: None Optional

/solver/nonlinear/box_constraints/bounds (list)

/solver/nonlinear/box_constraints/bounds\n
Description Box constraints on optimization variables.

/solver/nonlinear/box_constraints/bounds/*
/solver/nonlinear/box_constraints/bounds/*\n
/solver/nonlinear/box_constraints/bounds/* (list)/solver/nonlinear/box_constraints/bounds/* (float)

Description Box constraint values on optimization variables.

/solver/nonlinear/box_constraints/bounds/*/* (float)

/solver/nonlinear/box_constraints/bounds/*/*\n
Description Box constraint values on optimization variables.

Description Box constraint values on optimization variables.

/solver/nonlinear/box_constraints/max_change
/solver/nonlinear/box_constraints/max_change\n
/solver/nonlinear/box_constraints/max_change (float)/solver/nonlinear/box_constraints/max_change (list)

Description Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

Default: -1

Description Maximum change of optimization variables in one iteration, only for solvers with box constraints.

/solver/nonlinear/box_constraints/max_change/* (float)

/solver/nonlinear/box_constraints/max_change/*\n
Description Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

/solver/nonlinear/advanced (object)

/solver/nonlinear/advanced\n
Description Nonlinear solver advanced options

Default: None Optional

/solver/nonlinear/advanced/f_delta (float)

/solver/nonlinear/advanced/f_delta\n
Description Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 0

Range: [0, inf]

/solver/nonlinear/advanced/f_delta_step_tol (int)

/solver/nonlinear/advanced/f_delta_step_tol\n
Description Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 100

/solver/nonlinear/advanced/derivative_along_delta_x_tol (float)

/solver/nonlinear/advanced/derivative_along_delta_x_tol\n
Description Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

Default: 0

Range: [0, inf]

/solver/nonlinear/advanced/apply_gradient_fd (string)

/solver/nonlinear/advanced/apply_gradient_fd\n
Description Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

Default: 'None'

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

/solver/nonlinear/advanced/gradient_fd_eps (float)

/solver/nonlinear/advanced/gradient_fd_eps\n
Description Expensive Option: Eps for finite difference to verify gradient of energy.

Default: 1e-07

/solver/augmented_lagrangian (object)

/solver/augmented_lagrangian\n
Description Parameters for the AL for imposing Dirichlet BCs. If the bc are not imposable, we add \\(w\\|u - bc\\|^2\\) to the energy (\\(u\\) is the solution at the Dirichlet nodes and \\(bc\\) are the Dirichlet values). After convergence, we try to impose bc again. The algorithm computes E + a/2*AL^2 - lambda AL, where E is the current energy (elastic, inertia, contact, etc.) and AL is the augmented Lagrangian energy. a starts at initial_weight and, in case DBC cannot be imposed, we update a as a *= scaling until max_weight. See IPC additional material

Default: None Optional

/solver/augmented_lagrangian/initial_weight (float)

/solver/augmented_lagrangian/initial_weight\n
Description Initial weight for AL

Default: 1000000.0

Range: [0, inf]

/solver/augmented_lagrangian/scaling (float)

/solver/augmented_lagrangian/scaling\n
Description Multiplication factor

Default: 2.0

/solver/augmented_lagrangian/max_weight (float)

/solver/augmented_lagrangian/max_weight\n
Description Maximum weight

Default: 100000000.0

/solver/augmented_lagrangian/eta (float)

/solver/augmented_lagrangian/eta\n
Description Tolerance for increasing the weight or updating the lagrangian

Default: 0.99

Range: [0, 1]

/solver/augmented_lagrangian/nonlinear (object)

/solver/augmented_lagrangian/nonlinear\n
Description Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/solver
/solver/augmented_lagrangian/nonlinear/solver\n
/solver/augmented_lagrangian/nonlinear/solver (string)/solver/augmented_lagrangian/nonlinear/solver (list)

Description Nonlinear solver type

Default: 'Newton'

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

Description List of solvers for ballback. Eg, [{\u2018type\u2019:\u2019Newton\u2019}, {\u2018type\u2019:\u2019L-BFGS\u2019}, {\u2018type\u2019:\u2019GradientDescent\u2019}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

/solver/augmented_lagrangian/nonlinear/solver/*
/solver/augmented_lagrangian/nonlinear/solver/*\n
NewtonProjectedNewtonRegularizedNewtonRegularizedProjectedNewtonDenseNewtonDenseProjectedNewtonDenseRegularizedNewtonDenseRegularizedProjectedNewtonGradientDescentStochasticGradientDescentL-BFGSBFGSADAMStochasticADAM

Type: Newton Description Options for Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: ProjectedNewton Description Options for projected Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: RegularizedNewton Description Options for regularized Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: RegularizedProjectedNewton Description Options for regularized projected Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: DenseNewton Description Options for Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseProjectedNewton Description Options for projected Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseRegularizedNewton Description Options for regularized Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: DenseRegularizedProjectedNewton Description Options for projected regularized Newton. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

Type: GradientDescent Description Options for Gradient Descent. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: StochasticGradientDescent Description Options for Stochastic Gradient Descent. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability\n
Description Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

Type: L-BFGS Description Options for L-BFGS. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/history_size (int)

/solver/augmented_lagrangian/nonlinear/solver/*/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

Type: BFGS Description Options for BFGS. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: ADAM Description Options for ADAM. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float)

/solver/augmented_lagrangian/nonlinear/solver/*/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float)

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

Type: StochasticADAM Description Options for ADAM. Required

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Description Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Optional

/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float)

/solver/augmented_lagrangian/nonlinear/solver/*/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float)

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability\n
Description Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/x_delta (float)

/solver/augmented_lagrangian/nonlinear/x_delta\n
Description Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/grad_norm (float)

/solver/augmented_lagrangian/nonlinear/grad_norm\n
Description Stopping criterion: Minimal gradient norm for the iterations to continue.

Default: 1e-08

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol (float)

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol\n
Description Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

Default: 1e-10

/solver/augmented_lagrangian/nonlinear/max_iterations (int)

/solver/augmented_lagrangian/nonlinear/max_iterations\n
Description Maximum number of iterations for a nonlinear solve.

Default: 500

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy\n
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy (int)/solver/augmented_lagrangian/nonlinear/iterations_per_strategy (list)

Description Number of iterations for every substrategy before reset.

Default: 5

Description Number of iterations for every substrategy before reset.

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/* (int)

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/*\n
Description Number of iterations for every substrategy before reset.

Default: 5

/solver/augmented_lagrangian/nonlinear/line_search (object)

/solver/augmented_lagrangian/nonlinear/line_search\n
Description Settings for line-search in the nonlinear solver

Default: None Optional

/solver/augmented_lagrangian/nonlinear/line_search/method (string)

/solver/augmented_lagrangian/nonlinear/line_search/method\n
Description Line-search type

Default: 'RobustArmijo'

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol (float)

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol\n
Description When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

Default: 1e-06

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size (float)

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size\n
Description Mimimum step size

Default: 1e-10

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter (int)

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter\n
Description Number of iterations

Default: 30

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final (float)

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final\n
Description Mimimum step size for last descent strategy

Default: 1e-20

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final (int)

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final\n
Description Number of iterations for last descent strategy

Default: 100

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size (float)

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size\n
Description Initial step size

Default: 1

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio (float)

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio\n
Description Ratio used to decrease the step

Default: 0.5

/solver/augmented_lagrangian/nonlinear/line_search/Armijo (object)

/solver/augmented_lagrangian/nonlinear/line_search/Armijo\n
Description Options for Armijo.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c (float)

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c\n
Description Armijo c parameter.

Default: 0.0001

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo (object)

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo\n
Description Options for RobustArmijo.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float)

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance\n
Description Relative tolerance on E to switch to approximate.

Default: 0.1

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations (bool)

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations\n
Description If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

Default: False

/solver/augmented_lagrangian/nonlinear/L-BFGS (object)

/solver/augmented_lagrangian/nonlinear/L-BFGS\n
Description Options for LBFGS.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size (int)

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/augmented_lagrangian/nonlinear/L-BFGS-B (object)

/solver/augmented_lagrangian/nonlinear/L-BFGS-B\n
Description Options for the boxed L-BFGS.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size (int)

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size\n
Description The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/augmented_lagrangian/nonlinear/Newton (object)

/solver/augmented_lagrangian/nonlinear/Newton\n
Description Options for Newton.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance\n
Description Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min\n
Description Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max\n
Description Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc\n
Description Regulariztion weight increment.

Default: 10

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection (bool)

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection\n
Description Force the Hessian to be PSD when using second order solvers (i.e., Newton\u2019s method).

Default: False

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection (bool)

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection\n
Description Use PSD as fallback using second order solvers (i.e., Newton\u2019s method).

Default: True

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized (bool)

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized\n
Description Use PSD in regularized Newton.

Default: True

/solver/augmented_lagrangian/nonlinear/ADAM (object)

/solver/augmented_lagrangian/nonlinear/ADAM\n
Description Options for ADAM.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/ADAM/alpha (float)

/solver/augmented_lagrangian/nonlinear/ADAM/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon (float)

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/StochasticADAM (object)

/solver/augmented_lagrangian/nonlinear/StochasticADAM\n
Description Options for ADAM.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha\n
Description Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1\n
Description Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2\n
Description Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon\n
Description Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability\n
Description Probability of erasing a component on the gradient for ADAM.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent (object)

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent\n
Description Options for Stochastic Gradient Descent.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability\n
Description Probability of erasing a component on the gradient for StochasticGradientDescent.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/box_constraints (object)

/solver/augmented_lagrangian/nonlinear/box_constraints\n
Description FIXME: Missing documentation in the specification.

Default: None Optional

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds (list)

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds\n
Description Box constraints on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*\n
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* (list)/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* (float)

Description Box constraint values on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/* (float)

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/*\n
Description Box constraint values on optimization variables.

Description Box constraint values on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change\n
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change (float)/solver/augmented_lagrangian/nonlinear/box_constraints/max_change (list)

Description Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

Default: -1

Description Maximum change of optimization variables in one iteration, only for solvers with box constraints.

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/* (float)

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/*\n
Description Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

/solver/augmented_lagrangian/nonlinear/advanced (object)

/solver/augmented_lagrangian/nonlinear/advanced\n
Description Nonlinear solver advanced options

Default: None Optional

/solver/augmented_lagrangian/nonlinear/advanced/f_delta (float)

/solver/augmented_lagrangian/nonlinear/advanced/f_delta\n
Description Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol (int)

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol\n
Description Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 100

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol (float)

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol\n
Description Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd (string)

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd\n
Description Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

Default: 'None'

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps (float)

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps\n
Description Expensive Option: Eps for finite difference to verify gradient of energy.

Default: 1e-07

/solver/contact (object)

/solver/contact\n
Description Settings for contact handling in the solver.

Default: None Optional

/solver/contact/CCD (object)

/solver/contact/CCD\n
Description CCD options

Default: None Optional

/solver/contact/CCD/broad_phase (string)

/solver/contact/CCD/broad_phase\n
Description Broad phase collision-detection algorithm to use

Default: 'hash_grid'

Options: ['hash_grid', 'HG', 'brute_force', 'BF', 'spatial_hash', 'SH', 'bvh', 'BVH', 'sweep_and_prune', 'SAP', 'sweep_and_tiniest_queue', 'STQ']

/solver/contact/CCD/tolerance (float)

/solver/contact/CCD/tolerance\n
Description CCD tolerance

Default: 1e-06

/solver/contact/CCD/max_iterations (int)

/solver/contact/CCD/max_iterations\n
Description Maximum number of iterations for continuous collision detection

Default: 1000000

/solver/contact/friction_iterations (int)

/solver/contact/friction_iterations\n
Description Maximum number of update iterations for lagged friction formulation (see IPC paper).

Default: 1

/solver/contact/friction_convergence_tol (float)

/solver/contact/friction_convergence_tol\n
Description Tolerence for friction convergence

Default: 0.01

/solver/contact/barrier_stiffness
/solver/contact/barrier_stiffness\n
/solver/contact/barrier_stiffness (string)/solver/contact/barrier_stiffness (float)

Description How coefficient of clamped log-barrier function for contact is updated

Default: 'adaptive'

Options: ['adaptive']

Description The coefficient of clamped log-barrier function value when not adaptive

/solver/rayleigh_damping (list)

/solver/rayleigh_damping\n
Description Apply Rayleigh damping.

/solver/rayleigh_damping/*
/solver/rayleigh_damping/*\n
/solver/rayleigh_damping/* (object)/solver/rayleigh_damping/* (object)

Description Apply Rayleigh damping to the given Form with a stiffness ratio. Required

/solver/rayleigh_damping/*/form (string)

/solver/rayleigh_damping/*/form\n
Description Form to damp.

Options: ['elasticity', 'contact', 'friction']

/solver/rayleigh_damping/*/stiffness_ratio (float)

/solver/rayleigh_damping/*/stiffness_ratio\n
Description Ratio of to damp (stiffness = 0.75 * stiffness_ratio * \u0394t\u00b3).

Range: [0, inf]

Optional

/solver/rayleigh_damping/*/lagging_iterations (int)

/solver/rayleigh_damping/*/lagging_iterations\n
Description Maximum number of update iterations for lagging.

Default: 1

Description Apply Rayleigh damping to the given Form with a stiffness. Required

/solver/rayleigh_damping/*/form (string)

/solver/rayleigh_damping/*/form\n
Description Form to damp.

Options: ['elasticity', 'contact', 'friction']

/solver/rayleigh_damping/*/stiffness (float)

/solver/rayleigh_damping/*/stiffness\n
Description Ratio of to damp.

Range: [0, inf]

Optional

/solver/rayleigh_damping/*/lagging_iterations (int)

/solver/rayleigh_damping/*/lagging_iterations\n
Description Maximum number of update iterations for lagging.

Default: 1

/solver/advanced (object)

/solver/advanced\n
Description Advanced settings for the solver

Default: None Optional

/solver/advanced/cache_size (int)

/solver/advanced/cache_size\n
Description Maximum number of elements when the assembly values are cached.

Default: 900000

/solver/advanced/lump_mass_matrix (bool)

/solver/advanced/lump_mass_matrix\n
Description If true, use diagonal mass matrix with entries on the diagonal equal to the sum of entries in each row of the full mass matrix.}

Default: False

/solver/advanced/lagged_regularization_weight (float)

/solver/advanced/lagged_regularization_weight\n
Description Weight used to regularize singular static problems.

Default: 0

/solver/advanced/lagged_regularization_iterations (int)

/solver/advanced/lagged_regularization_iterations\n
Description Number of regularize singular static problems.

Default: 1

/boundary_conditions (object)

/boundary_conditions\n
Description The settings for boundary conditions.

Default: None Optional

/boundary_conditions/rhs
/boundary_conditions/rhs\n
/boundary_conditions/rhs (float)/boundary_conditions/rhs (string)/boundary_conditions/rhs (object)/boundary_conditions/rhs (list)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/rhs/value
/boundary_conditions/rhs/value\n
/boundary_conditions/rhs/value (float)/boundary_conditions/rhs/value (string)/boundary_conditions/rhs/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/rhs/unit (string)

/boundary_conditions/rhs/unit\n
Description The unit of the Value

Description Right-hand side of the system being solved for vector-valued PDEs.

/boundary_conditions/rhs/*
/boundary_conditions/rhs/*\n
/boundary_conditions/rhs/* (float)/boundary_conditions/rhs/* (string)/boundary_conditions/rhs/* (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/rhs/*/value
/boundary_conditions/rhs/*/value\n
/boundary_conditions/rhs/*/value (float)/boundary_conditions/rhs/*/value (string)/boundary_conditions/rhs/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/rhs/*/unit (string)

/boundary_conditions/rhs/*/unit\n
Description The unit of the Value

/boundary_conditions/dirichlet_boundary (list)

/boundary_conditions/dirichlet_boundary\n
Description The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/dirichlet_boundary/*
/boundary_conditions/dirichlet_boundary/*\n
/boundary_conditions/dirichlet_boundary/* (object)/boundary_conditions/dirichlet_boundary/* (string)

Description Dirichlet boundary condition.

Default: None Required

/boundary_conditions/dirichlet_boundary/*/id
/boundary_conditions/dirichlet_boundary/*/id\n
/boundary_conditions/dirichlet_boundary/*/id (int)/boundary_conditions/dirichlet_boundary/*/id (string)

Description ID of boundary condition from surface selection.

Range: [0, 2147483646]

Description select all ids.

Options: ['all']

/boundary_conditions/dirichlet_boundary/*/value (list)

/boundary_conditions/dirichlet_boundary/*/value\n
Description Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/dirichlet_boundary/*/value/*
/boundary_conditions/dirichlet_boundary/*/value/*\n
/boundary_conditions/dirichlet_boundary/*/value/* (float)/boundary_conditions/dirichlet_boundary/*/value/* (string)/boundary_conditions/dirichlet_boundary/*/value/* (object)/boundary_conditions/dirichlet_boundary/*/value/* (list)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/dirichlet_boundary/*/value/*/value
/boundary_conditions/dirichlet_boundary/*/value/*/value\n
/boundary_conditions/dirichlet_boundary/*/value/*/value (float)/boundary_conditions/dirichlet_boundary/*/value/*/value (string)/boundary_conditions/dirichlet_boundary/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/dirichlet_boundary/*/value/*/unit (string)

/boundary_conditions/dirichlet_boundary/*/value/*/unit\n
Description The unit of the Value

Description Dirichlet boundary condition specified per timestep.

/boundary_conditions/dirichlet_boundary/*/value/*/*
/boundary_conditions/dirichlet_boundary/*/value/*/*\n
/boundary_conditions/dirichlet_boundary/*/value/*/* (float)/boundary_conditions/dirichlet_boundary/*/value/*/* (string)/boundary_conditions/dirichlet_boundary/*/value/*/* (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/dirichlet_boundary/*/value/*/*/value
/boundary_conditions/dirichlet_boundary/*/value/*/*/value\n
/boundary_conditions/dirichlet_boundary/*/value/*/*/value (float)/boundary_conditions/dirichlet_boundary/*/value/*/*/value (string)/boundary_conditions/dirichlet_boundary/*/value/*/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit (string)

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit\n
Description The unit of the Value

Optional

/boundary_conditions/dirichlet_boundary/*/time_reference (list)

/boundary_conditions/dirichlet_boundary/*/time_reference\n
Description List of times when the Dirichlet boundary condition is specified

/boundary_conditions/dirichlet_boundary/*/time_reference/* (float)

/boundary_conditions/dirichlet_boundary/*/time_reference/*\n
Description Values of Dirichlet boundary condition for timestep

/boundary_conditions/dirichlet_boundary/*/interpolation (list)

/boundary_conditions/dirichlet_boundary/*/interpolation\n
Description interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*
/boundary_conditions/dirichlet_boundary/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none Description interpolation of boundary condition

Default: {'type': 'none'} Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear Description interpolation of boundary condition Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp Description interpolation of boundary condition Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to\n
Description interpolation ending time

Optional

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from\n
Description interpolation starting time

Default: 0

Type: piecewise_constant Description interpolation of boundary condition Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear Description interpolation of boundary condition Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic Description interpolation of boundary condition Required

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/dirichlet_boundary/*/dimension (list)

/boundary_conditions/dirichlet_boundary/*/dimension\n
Description List of 2 (2D) or 3 (3D) boolean values indicating if the Dirichlet boundary condition is applied for a particular dimension.

/boundary_conditions/dirichlet_boundary/*/dimension/* (bool)

/boundary_conditions/dirichlet_boundary/*/dimension/*\n
Description value

Default: True

Description Dirichlet boundary condition loaded from a file, , 1 for scalar, \u2154 for tensor depending on dimension. /boundary_conditions/neumann_boundary (list)

/boundary_conditions/neumann_boundary\n
Description The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/neumann_boundary/* (object)

/boundary_conditions/neumann_boundary/*\n
Description Neumann boundary condition

Default: None Required

/boundary_conditions/neumann_boundary/*/id
/boundary_conditions/neumann_boundary/*/id\n
/boundary_conditions/neumann_boundary/*/id (int)/boundary_conditions/neumann_boundary/*/id (string)

Description ID of boundary condition from surface selection.

Range: [0, 2147483646]

Description select all ids.

Options: ['all']

/boundary_conditions/neumann_boundary/*/value (list)

/boundary_conditions/neumann_boundary/*/value\n
Description Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/neumann_boundary/*/value/*
/boundary_conditions/neumann_boundary/*/value/*\n
/boundary_conditions/neumann_boundary/*/value/* (float)/boundary_conditions/neumann_boundary/*/value/* (string)/boundary_conditions/neumann_boundary/*/value/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/neumann_boundary/*/value/*/value
/boundary_conditions/neumann_boundary/*/value/*/value\n
/boundary_conditions/neumann_boundary/*/value/*/value (float)/boundary_conditions/neumann_boundary/*/value/*/value (string)/boundary_conditions/neumann_boundary/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/neumann_boundary/*/value/*/unit (string)

/boundary_conditions/neumann_boundary/*/value/*/unit\n
Description The unit of the Value

Optional

/boundary_conditions/neumann_boundary/*/interpolation (list)

/boundary_conditions/neumann_boundary/*/interpolation\n
Description interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*
/boundary_conditions/neumann_boundary/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none Description interpolation of boundary condition

Default: {'type': 'none'} Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear Description interpolation of boundary condition Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp Description interpolation of boundary condition Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/to (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/to\n
Description interpolation ending time

Optional

/boundary_conditions/neumann_boundary/*/interpolation/*/from (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/from\n
Description interpolation starting time

Default: 0

Type: piecewise_constant Description interpolation of boundary condition Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear Description interpolation of boundary condition Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic Description interpolation of boundary condition Required

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/normal_aligned_neumann_boundary (list)

/boundary_conditions/normal_aligned_neumann_boundary\n
Description Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/normal_aligned_neumann_boundary/* (object)

/boundary_conditions/normal_aligned_neumann_boundary/*\n
Description pressure BC entry

Default: None Required

/boundary_conditions/normal_aligned_neumann_boundary/*/id (int)

/boundary_conditions/normal_aligned_neumann_boundary/*/id\n
Description ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/normal_aligned_neumann_boundary/*/value
/boundary_conditions/normal_aligned_neumann_boundary/*/value\n
/boundary_conditions/normal_aligned_neumann_boundary/*/value (float)/boundary_conditions/normal_aligned_neumann_boundary/*/value (string)/boundary_conditions/normal_aligned_neumann_boundary/*/value (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/normal_aligned_neumann_boundary/*/value/value
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value\n
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (float)/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (string)/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit\n
Description The unit of the Value

Optional

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation
/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none Description interpolation of boundary condition

Default: {'type': 'none'} Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear Description interpolation of boundary condition Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp Description interpolation of boundary condition Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to\n
Description interpolation ending time

Optional

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from\n
Description interpolation starting time

Default: 0

Type: piecewise_constant Description interpolation of boundary condition Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
Description interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
Description interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
Description interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
Description interpolation value

Optional

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear Description interpolation of boundary condition Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
Description interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
Description interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
Description interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
Description interpolation value

Optional

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic Description interpolation of boundary condition Required

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
Description interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
Description interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
Description interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
Description interpolation value

Optional

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/pressure_boundary (list)

/boundary_conditions/pressure_boundary\n
Description Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/pressure_boundary/* (object)

/boundary_conditions/pressure_boundary/*\n
Description pressure BC entry

Default: None Required

/boundary_conditions/pressure_boundary/*/id (int)

/boundary_conditions/pressure_boundary/*/id\n
Description ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/pressure_boundary/*/value
/boundary_conditions/pressure_boundary/*/value\n
/boundary_conditions/pressure_boundary/*/value (float)/boundary_conditions/pressure_boundary/*/value (string)/boundary_conditions/pressure_boundary/*/value (object)/boundary_conditions/pressure_boundary/*/value (list)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/pressure_boundary/*/value/value
/boundary_conditions/pressure_boundary/*/value/value\n
/boundary_conditions/pressure_boundary/*/value/value (float)/boundary_conditions/pressure_boundary/*/value/value (string)/boundary_conditions/pressure_boundary/*/value/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/pressure_boundary/*/value/unit (string)

/boundary_conditions/pressure_boundary/*/value/unit\n
Description The unit of the Value

Description Values of pressure boundary condition specified per timestep

/boundary_conditions/pressure_boundary/*/value/*
/boundary_conditions/pressure_boundary/*/value/*\n
/boundary_conditions/pressure_boundary/*/value/* (float)/boundary_conditions/pressure_boundary/*/value/* (string)/boundary_conditions/pressure_boundary/*/value/* (object)

Description Value as a constant float

Default: 0

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/pressure_boundary/*/value/*/value
/boundary_conditions/pressure_boundary/*/value/*/value\n
/boundary_conditions/pressure_boundary/*/value/*/value (float)/boundary_conditions/pressure_boundary/*/value/*/value (string)/boundary_conditions/pressure_boundary/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/pressure_boundary/*/value/*/unit (string)

/boundary_conditions/pressure_boundary/*/value/*/unit\n
Description The unit of the Value

Optional

/boundary_conditions/pressure_boundary/*/time_reference (list)

/boundary_conditions/pressure_boundary/*/time_reference\n
Description List of times when the pressure boundary condition is specified

/boundary_conditions/pressure_boundary/*/time_reference/* (float)

/boundary_conditions/pressure_boundary/*/time_reference/*\n
Description Values of pressure boundary condition for timestep

/boundary_conditions/pressure_cavity (list)

/boundary_conditions/pressure_cavity\n
Description Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/pressure_cavity/* (object)

/boundary_conditions/pressure_cavity/*\n
Description pressure BC entry

Default: None Required

/boundary_conditions/pressure_cavity/*/id (int)

/boundary_conditions/pressure_cavity/*/id\n
Description ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/pressure_cavity/*/value
/boundary_conditions/pressure_cavity/*/value\n
/boundary_conditions/pressure_cavity/*/value (float)/boundary_conditions/pressure_cavity/*/value (string)/boundary_conditions/pressure_cavity/*/value (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/pressure_cavity/*/value/value
/boundary_conditions/pressure_cavity/*/value/value\n
/boundary_conditions/pressure_cavity/*/value/value (float)/boundary_conditions/pressure_cavity/*/value/value (string)/boundary_conditions/pressure_cavity/*/value/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/pressure_cavity/*/value/unit (string)

/boundary_conditions/pressure_cavity/*/value/unit\n
Description The unit of the Value

/boundary_conditions/obstacle_displacements (list)

/boundary_conditions/obstacle_displacements\n
Description The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/obstacle_displacements/* (object)

/boundary_conditions/obstacle_displacements/*\n
Description Obstacle displacements

Default: None Required

/boundary_conditions/obstacle_displacements/*/id
/boundary_conditions/obstacle_displacements/*/id\n
/boundary_conditions/obstacle_displacements/*/id (int)/boundary_conditions/obstacle_displacements/*/id (string)

Description ID of boundary condition from surface selection.

Range: [0, 2147483646]

Description select all ids.

Options: ['all']

/boundary_conditions/obstacle_displacements/*/value (list)

/boundary_conditions/obstacle_displacements/*/value\n
Description Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/obstacle_displacements/*/value/*
/boundary_conditions/obstacle_displacements/*/value/*\n
/boundary_conditions/obstacle_displacements/*/value/* (float)/boundary_conditions/obstacle_displacements/*/value/* (string)/boundary_conditions/obstacle_displacements/*/value/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/boundary_conditions/obstacle_displacements/*/value/*/value
/boundary_conditions/obstacle_displacements/*/value/*/value\n
/boundary_conditions/obstacle_displacements/*/value/*/value (float)/boundary_conditions/obstacle_displacements/*/value/*/value (string)/boundary_conditions/obstacle_displacements/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/boundary_conditions/obstacle_displacements/*/value/*/unit (string)

/boundary_conditions/obstacle_displacements/*/value/*/unit\n
Description The unit of the Value

Optional

/boundary_conditions/obstacle_displacements/*/interpolation (list)

/boundary_conditions/obstacle_displacements/*/interpolation\n
Description interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*
/boundary_conditions/obstacle_displacements/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none Description interpolation of boundary condition

Default: {'type': 'none'} Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear Description interpolation of boundary condition Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp Description interpolation of boundary condition Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/to (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/to\n
Description interpolation ending time

Optional

/boundary_conditions/obstacle_displacements/*/interpolation/*/from (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/from\n
Description interpolation starting time

Default: 0

Type: piecewise_constant Description interpolation of boundary condition Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear Description interpolation of boundary condition Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic Description interpolation of boundary condition Required

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
Description type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
Description interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
Description interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
Description interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
Description interpolation value

Optional

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
Description how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/periodic_boundary (object)

/boundary_conditions/periodic_boundary\n
Description Options for periodic boundary conditions.

Default: None Optional

/boundary_conditions/periodic_boundary/enabled (bool)

/boundary_conditions/periodic_boundary/enabled\n
Description

Default: False

/boundary_conditions/periodic_boundary/tolerance (float)

/boundary_conditions/periodic_boundary/tolerance\n
Description Relative tolerance of deciding periodic correspondence

Default: 1e-05

/boundary_conditions/periodic_boundary/correspondence (list)

/boundary_conditions/periodic_boundary/correspondence\n
Description Periodic directions for periodic boundary conditions. If not specified, default to axis-aligned directions.

/boundary_conditions/periodic_boundary/correspondence/* (list)

/boundary_conditions/periodic_boundary/correspondence/*\n
Description One periodic direction.

/boundary_conditions/periodic_boundary/correspondence/*/* (float)

/boundary_conditions/periodic_boundary/correspondence/*/*\n
Description One entry of a periodic direction.

/boundary_conditions/periodic_boundary/linear_displacement_offset (list)

/boundary_conditions/periodic_boundary/linear_displacement_offset\n
Description

/boundary_conditions/periodic_boundary/linear_displacement_offset/* (list)

/boundary_conditions/periodic_boundary/linear_displacement_offset/*\n
Description

/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*\n
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* (float)/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* (string)

Description

Description

/boundary_conditions/periodic_boundary/fixed_macro_strain (list)

/boundary_conditions/periodic_boundary/fixed_macro_strain\n
Description

/boundary_conditions/periodic_boundary/fixed_macro_strain/* (int)

/boundary_conditions/periodic_boundary/fixed_macro_strain/*\n
Description

/boundary_conditions/periodic_boundary/force_zero_mean (bool)

/boundary_conditions/periodic_boundary/force_zero_mean\n
Description The periodic solution is not unique, set to true to find the solution with zero mean.

Default: False

/initial_conditions (object)

/initial_conditions\n
Description Initial conditions for the time-dependent problem, imposed on the main variable, its derivative or second derivative

Default: None Optional

/initial_conditions/solution (list)

/initial_conditions/solution\n
Description initial solution

/initial_conditions/solution/* (object)

/initial_conditions/solution/*\n
Description A list of (ID, value) pairs defining the initial conditions for the main variable values. Ids are set by selection, and values can be floats or formulas.

Default: None Required

/initial_conditions/solution/*/id (int)

/initial_conditions/solution/*/id\n
Description ID from volume selections

/initial_conditions/solution/*/value (list)

/initial_conditions/solution/*/value\n
Description value of the solution

/initial_conditions/solution/*/value/*
/initial_conditions/solution/*/value/*\n
/initial_conditions/solution/*/value/* (float)/initial_conditions/solution/*/value/* (string)/initial_conditions/solution/*/value/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/initial_conditions/solution/*/value/*/value
/initial_conditions/solution/*/value/*/value\n
/initial_conditions/solution/*/value/*/value (float)/initial_conditions/solution/*/value/*/value (string)/initial_conditions/solution/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/initial_conditions/solution/*/value/*/unit (string)

/initial_conditions/solution/*/value/*/unit\n
Description The unit of the Value

/initial_conditions/velocity (list)

/initial_conditions/velocity\n
Description initial velocity

/initial_conditions/velocity/* (object)

/initial_conditions/velocity/*\n
Description A list of (ID, value) pairs defining the initial conditions for the first derivative of the main variable values. Ids are set by selection, and values can be floats or formulas.

Default: None Required

/initial_conditions/velocity/*/id (int)

/initial_conditions/velocity/*/id\n
Description ID from volume selections

/initial_conditions/velocity/*/value (list)

/initial_conditions/velocity/*/value\n
Description value od the initial velocity

/initial_conditions/velocity/*/value/*
/initial_conditions/velocity/*/value/*\n
/initial_conditions/velocity/*/value/* (float)/initial_conditions/velocity/*/value/* (string)/initial_conditions/velocity/*/value/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/initial_conditions/velocity/*/value/*/value
/initial_conditions/velocity/*/value/*/value\n
/initial_conditions/velocity/*/value/*/value (float)/initial_conditions/velocity/*/value/*/value (string)/initial_conditions/velocity/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/initial_conditions/velocity/*/value/*/unit (string)

/initial_conditions/velocity/*/value/*/unit\n
Description The unit of the Value

/initial_conditions/acceleration (list)

/initial_conditions/acceleration\n
Description initial acceleration

/initial_conditions/acceleration/* (object)

/initial_conditions/acceleration/*\n
Description entries

Default: None Required

/initial_conditions/acceleration/*/id (int)

/initial_conditions/acceleration/*/id\n
Description ID from volume selections

/initial_conditions/acceleration/*/value (list)

/initial_conditions/acceleration/*/value\n
Description value

/initial_conditions/acceleration/*/value/*
/initial_conditions/acceleration/*/value/*\n
/initial_conditions/acceleration/*/value/* (float)/initial_conditions/acceleration/*/value/* (string)/initial_conditions/acceleration/*/value/* (object)

Description Value as a constant float

Description Value as an expression of \\(x,y,z,t\\) or a file

Description Value with unit Required

/initial_conditions/acceleration/*/value/*/value
/initial_conditions/acceleration/*/value/*/value\n
/initial_conditions/acceleration/*/value/*/value (float)/initial_conditions/acceleration/*/value/*/value (string)/initial_conditions/acceleration/*/value/*/value (file)

Description The value of the constant

Description The value as an expression

Description The value as a file

/initial_conditions/acceleration/*/value/*/unit (string)

/initial_conditions/acceleration/*/value/*/unit\n
Description The unit of the Value

/output (object)

/output\n
Description output settings

Default: None Optional

/output/directory (string)

/output/directory\n
Description Directory for output files.

Default: ''

/output/log (object)

/output/log\n
Description Setting for the output log.

Default: None Optional

/output/log/level
/output/log/level\n
/output/log/level (int)/output/log/level (string)

Description Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

Range: [0, 6]

Description Level of logging.

Default: 'debug'

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

/output/log/file_level
/output/log/file_level\n
/output/log/file_level (int)/output/log/file_level (string)

Description Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

Range: [0, 6]

Description Level of logging.

Default: 'trace'

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

/output/log/path (string)

/output/log/path\n
Description File where to save the log; empty string is output to terminal.

Default: ''

/output/log/quiet (bool)

/output/log/quiet\n
Description Disable cout for logging.

Default: False

/output/json (string)

/output/json\n
Description File name for JSON output statistics on time/error/etc.

Default: ''

/output/restart_json (string)

/output/restart_json\n
Description File name for JSON output to restart the simulation.

Default: ''

/output/paraview (object)

/output/paraview\n
Description Output in paraview format

Default: None Optional

/output/paraview/file_name (string)

/output/paraview/file_name\n
Description Paraview output file name

Default: ''

/output/paraview/vismesh_rel_area (float)

/output/paraview/vismesh_rel_area\n
Description relative area for the upsampled visualisation mesh

Default: 1e-05

/output/paraview/skip_frame (int)

/output/paraview/skip_frame\n
Description export every skip_frame-th frames for time dependent simulations

Default: 1

/output/paraview/high_order_mesh (bool)

/output/paraview/high_order_mesh\n
Description Enables/disables high-order output for paraview. Supported only for isoparametric or linear meshes with high-order solutions.

Default: True

/output/paraview/volume (bool)

/output/paraview/volume\n
Description Export volumetric mesh

Default: True

/output/paraview/surface (bool)

/output/paraview/surface\n
Description Export surface mesh (in 2d polygon)

Default: False

/output/paraview/wireframe (bool)

/output/paraview/wireframe\n
Description Export the wireframe of the mesh

Default: False

/output/paraview/points (bool)

/output/paraview/points\n
Description Export the Dirichlet points

Default: False

/output/paraview/options (object)

/output/paraview/options\n
Description Optional fields in the output

Default: None Optional

/output/paraview/options/use_hdf5 (bool)

/output/paraview/options/use_hdf5\n
Description If true, export the data as hdf5, compatible with paraview >5.11

Default: False

/output/paraview/options/material (bool)

/output/paraview/options/material\n
Description If true, write out material values sampled on the vertices of the mesh

Default: False

/output/paraview/options/body_ids (bool)

/output/paraview/options/body_ids\n
Description Export volumes ids

Default: False

/output/paraview/options/contact_forces (bool)

/output/paraview/options/contact_forces\n
Description If true, write out contact forces for surface

Default: False

/output/paraview/options/friction_forces (bool)

/output/paraview/options/friction_forces\n
Description If true, write out friction forces for surface

Default: False

/output/paraview/options/velocity (bool)

/output/paraview/options/velocity\n
Description If true, write out velocities

Default: False

/output/paraview/options/acceleration (bool)

/output/paraview/options/acceleration\n
Description If true, write out accelerations

Default: False

/output/paraview/options/scalar_values (bool)

/output/paraview/options/scalar_values\n
Description If true, write out scalar values

Default: True

/output/paraview/options/tensor_values (bool)

/output/paraview/options/tensor_values\n
Description If true, write out tensor values

Default: True

/output/paraview/options/discretization_order (bool)

/output/paraview/options/discretization_order\n
Description If true, write out discretization order

Default: True

/output/paraview/options/nodes (bool)

/output/paraview/options/nodes\n
Description If true, write out node order

Default: True

/output/paraview/options/forces (bool)

/output/paraview/options/forces\n
Description If true, write out all variational forces on the FE mesh

Default: False

/output/data (object)

/output/data\n
Description File names to write output data to.

Default: None Optional

/output/data/solution (string)

/output/data/solution\n
Description Main variable solution. Unrolled [xyz, xyz, \u2026] using PolyFEM ordering. If reorder_nodes exports the solution with the same order the vertices of the input mesh as a #n x d file

Default: ''

/output/data/full_mat (string)

/output/data/full_mat\n
Description System matrix without boundary conditions. Doesn\u2019t work for nonlinear problems

Default: ''

/output/data/stiffness_mat (string)

/output/data/stiffness_mat\n
Description System matrix with boundary conditions. Doesn\u2019t work for nonlinear problems

Default: ''

/output/data/stress_mat (string)

/output/data/stress_mat\n
Description Exports stress

Default: ''

/output/data/state (string)

/output/data/state\n
Description Writes the complete state in PolyFEM hdf5 format, used to restart the sim

Default: ''

/output/data/rest_mesh (string)

/output/data/rest_mesh\n
Description Writes the rest mesh in MSH format, used to restart the sim

Default: ''

/output/data/mises (string)

/output/data/mises\n
Description File name to write per-node Von Mises stress values to.

Default: ''

/output/data/nodes (string)

/output/data/nodes\n
Description Writes the FEM nodes

Default: ''

/output/data/advanced (object)

/output/data/advanced\n
Description advanced options

Default: None Optional

/output/data/advanced/reorder_nodes (bool)

/output/data/advanced/reorder_nodes\n
Description Reorder nodes accodring to input

Default: False

/output/advanced (object)

/output/advanced\n
Description Additional output options

Default: None Optional

/output/advanced/timestep_prefix (string)

/output/advanced/timestep_prefix\n
Description Prefix for output file names for each time step, the final file is step_i.[vtu|vtm] where i is the time index.

Default: 'step_'

/output/advanced/sol_on_grid (float)

/output/advanced/sol_on_grid\n
Description exports the solution sampled on a grid, specify the grid spacing

Default: -1

/output/advanced/compute_error (bool)

/output/advanced/compute_error\n
Description Enables the computation of the error. If no reference solution is provided, return the norms of the solution

Default: True

/output/advanced/sol_at_node (int)

/output/advanced/sol_at_node\n
Description Write out solution values at a specific node. the values will be written in the output JSON file

Default: -1

/output/advanced/vis_boundary_only (bool)

/output/advanced/vis_boundary_only\n
Description saves only elements touching the boundaries

Default: False

/output/advanced/curved_mesh_size (bool)

/output/advanced/curved_mesh_size\n
Description upsample curved edges to compute mesh size

Default: False

/output/advanced/save_solve_sequence_debug (bool)

/output/advanced/save_solve_sequence_debug\n
Description saves AL internal steps, for debugging

Default: False

/output/advanced/save_ccd_debug_meshes (bool)

/output/advanced/save_ccd_debug_meshes\n
Description saves AL internal steps, for debugging

Default: False

/output/advanced/save_time_sequence (bool)

/output/advanced/save_time_sequence\n
Description saves timesteps

Default: True

/output/advanced/save_nl_solve_sequence (bool)

/output/advanced/save_nl_solve_sequence\n
Description saves obj after every nonlinear iteration, for debugging

Default: False

/output/advanced/spectrum (bool)

/output/advanced/spectrum\n
Description exports the spectrum of the matrix in the output JSON. Works only if POLYSOLVE_WITH_SPECTRA is enabled

Default: False

/output/reference (object)

/output/reference\n
Description Write out the analytic/numerical ground-truth solution and or its gradient

Default: None Optional

/output/reference/solution (list)

/output/reference/solution\n
Description reference solution used to compute errors

/output/reference/solution/* (string)

/output/reference/solution/*\n
Description value as a function of \\(x,y,z,t\\)

Default: ''

/output/reference/gradient (list)

/output/reference/gradient\n
Description gradient of the reference solution to compute errors

/output/reference/gradient/* (string)

/output/reference/gradient/*\n
Description value as a function of \\(x,y,z,t\\)

Default: ''

/input (object)

/input\n
Description input data

Default: None Optional

/input/data (object)

/input/data\n
Description input to restart time dependent sim

Default: None Optional

/input/data/state (file)

/input/data/state\n
Description input state as hdf5

Default: ''

/input/data/reorder (bool)

/input/data/reorder\n
Description reorder input data

Default: False

/tests (object)

/tests\n
Description Used to test to compare different norms of solutions.

Default: None Optional

/tests/err_h1 (float)

/tests/err_h1\n
Description Reference h1 solution\u2019s norm.

Default: 0

/tests/err_h1_semi (float)

/tests/err_h1_semi\n
Description Reference h1 seminorm solution\u2019s norm.

Default: 0

/tests/err_l2 (float)

/tests/err_l2\n
Description Reference \\(L^2\\) solution\u2019s norm.

Default: 0

/tests/err_linf (float)

/tests/err_linf\n
Description Reference \\(L^\\infty\\) solution\u2019s norm.

Default: 0

/tests/err_linf_grad (float)

/tests/err_linf_grad\n
Description Reference \\(L^\\infty\\) solution\u2019s gradient norm.

Default: 0

/tests/err_lp (float)

/tests/err_lp\n
Description Reference \\(L^8\\) solution\u2019s gradient norm.

Default: 0

/tests/margin (float)

/tests/margin\n
Description Reference tolerance used in tests.

Default: 1e-05

/tests/time_steps
/tests/time_steps\n
/tests/time_steps (int)/tests/time_steps (string)

Description Number of time steps to test.

Default: 1

Range: [1, inf]

Description Number of time steps to test.

Options: ['all', 'static']

"},{"location":"cxx_index/","title":"C++ Library","text":"

PolyFEM in C++ uses modern CMake and is cross-platform.

"},{"location":"cxx_index/#compilation","title":"Compilation","text":"

All the C++ dependencies required to build the code are automatically downloaded through CMake. We test PolyFEM on macOS, Linux, and Windows, and it should build out-of-the-box with CMake:

mkdir build\ncd build\ncmake ..\nmake -j4\n
"},{"location":"cxx_index/#optional","title":"Optional","text":"

Optionally, the formulas for higher-order bases can be computed at CMake time using a Python script. If you choose to do so, PolyFEM requires a working installation of Python and some additional packages to build correctly:

  • numpy and sympy (optional)
  • quadpy (optional)
"},{"location":"cxx_index/#usage","title":"Usage","text":"

The main executable, ./PolyFEM_bin, can as command-line interface. Simply run:

./PolyFEM_bin --help\n

More detailed documentation can be found in the tutorial.

"},{"location":"json/","title":"JSON Input","text":""},{"location":"json/#json-files-structure","title":"JSON Files Structure","text":"

PolyFEM_bin expects as input a JSON file containing the setup and parameters of the problem you wish to solve. A basic example of such a file is as follows:

{\n\"common\": \"\", // path to another JSON file containing default arguments on which to patch these arguments\n\n\"geometry\": [{\n\"mesh\": \"\" // mesh path (absolute or relative to JSON file)\n}],\n\n\"time\": {                         // time-dependent problem\n\"tend\": 1,                    // end time\n\"dt\": 0.1,                    // time step size\n\"time_steps\": 10,             // (alternativly) number of time steps\n\"integrator\": \"ImplicitEuler\" // time integration method\n},\n\n\"contact\": {\n\"enabled\": true // enable contact handling\n},\n\n\"solver\": {\n\"linear\": {\n\"solver\": \"Eigen::PardisoLDLT\"\n},\n\"nonlinear\": {\n\"line_search\": {\n\"method\": \"backtracking\"\n},\n\"solver\": \"newton\"\n}\n},\n\n// Material parameter\n\"materials\": {\n\"type\": \"NeoHookean\", // material model\n\"E\": 1.5, // Young's modulus\n\"nu\": 0.3, // Poisson ratio\n\"rho\": 1 // density\n},\n\n\"output\": {\n\"json\": \"sim.json\",           // output statistics\n\"paraview\": {                 // output geometry as paraview VTU files\n\"file_name\": \"sim.pvd\",\n\"options\": {\n\"material\": true,     // save material properties\n\"body_ids\": true      // save body ids\n},\n\"vismesh_rel_area\": 1e-05 // relative area for upsampling the solution\n}\n}\n}\n
"},{"location":"json/#materials","title":"Materials","text":"

Options:

  • scalar_formulation: Helmholtz, Laplacian, Bilaplacian (mixed)
  • tensor_formulation: HookeLinearElasticity, LinearElasticity, NeoHookean, SaintVenant, IncompressibleLinearElasticity (mixed), Stokes (mixed), NavierStokes (mixed)

Each formulation has a set of material parameters that can be set alongside it in materials.

See formulations for more details.

"},{"location":"json/#time-integrators","title":"Time Integrators","text":"

Options: ImplicitEuler, ImplicitNewmark, BDF

The parameters for the time integration are stored inside the \"time_integrator_params\" field.

See time integrators for more details.

"},{"location":"json/#solvers","title":"Solvers","text":""},{"location":"json/#linear-solver","title":"Linear Solver","text":"

PolyFEM offers several linear solver options based on compilation options. For more information, see PolySolve a stand-alone linear solver wrapper library used by PolyFEM.

Options: AMGCL, Eigen::BiCGSTAB, Eigen::CholmodSupernodalLLT, Eigen::ConjugateGradient, Eigen::DGMRES, Eigen::GMRES, Eigen::LeastSquaresConjugateGradient, Eigen::MINRES, Eigen::PardisoLDLT, Eigen::PardisoLU, Eigen::SimplicialLDLT, Eigen::SparseLU, Eigen::UmfPackLU, Hypre, Pardiso

"},{"location":"json/#nonlinear-solver","title":"Nonlinear Solver","text":"

Options: newton, lbfgs

See solvers for more details.

"},{"location":"json/#line-search","title":"Line Search","text":"

Options: backtracking, armijo, armijo_alt, more_thuente

See solvers for more details.

"},{"location":"json/#contact","title":"Contact","text":"
\"contact\": {\n\"has_collision\": false,           // Enable collision detection\n\"dhat\": 0.03,                     // Barrier activation distance, check IPC paper\n\"mu\": 0.0,                        // Coefficient of friction (0 disables friction)\n\"epsv\": 1e-3,                     // Smoothing parameter for the transition between static and dynamic friction\n\"friction_iterations\": 1,         // Friction lagging iterations (0 disables friction and < 0 indicates unlimited iterations)\n\"friction_convergence_tol\": 1e-2, // Friction lagging convergence tolerance\n\"barrier_stiffness\": \"adaptive\",\n}\n\n\"solver\": {\n\"contact\": {\n\"broad_phase_method\": \"hash_grid\",\n\"ccd_tolerance\": 1e-6,\n\"ccd_max_iterations\": 1e6\n}\n},\n

See contact for more details.

"},{"location":"json/#geometry","title":"Geometry","text":"
\"geometry\": [{\n\"mesh\": \" \", // Mesh path (absolute or relative to JSON file)\n\"enabled\": true,\n\n\"transformation\": {\n\"scale\": [1, 1, 1],\n\"rotation\": [0, 0, 0],\n\"rotation_mode\": \"xyz\",\n\"translation\": [0, 0, 0]\n},\n\n\"surface_selection\": [],\n\"volume_selection\": [],\n\n\"is_obstacle\": false\n}],\n
"},{"location":"json/#mesh","title":"Mesh","text":"

The path to the mesh file (absolute or relative to JSON file).

"},{"location":"json/#enable","title":"Enable","text":"

A boolean for enabling the body. By default, bodies are enabled.

"},{"location":"json/#transformation","title":"Transformation","text":"

A pre-transform is applied to the geometry at load. The order of the transformation is scale, rotate, then translate.

"},{"location":"json/#scale","title":"Scale","text":"

The \"scale\" field encodes a scaling of the mesh. This can either be a single number for uniform scaling or an array of \\(d\\) numbers for scaling in each axis.

"},{"location":"json/#dimensions","title":"Dimensions","text":"

Alternatively, the \"dimensions\" field encodes the absolute size of the mesh\u2019s axis-aligned bounding box. This should be an array of \\(d\\) numbers for the dimensions of each axis. This is equivalent to using a scale of dimensions / initial_dimensions where nonfinite values are replaced by 1. If the \"dimensions\" field is present, the \"scale\" field is ignored.

"},{"location":"json/#rotation","title":"Rotation","text":"

The \"rotation\" field encodes a rotation around the mesh\u2019s origin. The rotation can either be a single number or an array of numbers depending on the \"rotation_mode\".

The \"rotation_mode\" field indicates how the \"rotation\" is represented. The options are:

  • \"axis_angle\": The \"rotation\" must be an array of four numbers where the first number is the angle of rotation in degrees and the last three are the axis of rotation. The axis will be normalized.
  • \"quaternion\": The \"rotation\" must be an array of four numbers which represent a quaternion \\(w + xi + yj + zk\\). The order of \"rotation\" is [x, y, z, w]. The quaternion will be normalized.
  • \"rotation_vector\": The \"rotation\" must be an array of three numbers whose magnitude is the angle of rotation in degrees and the normalized version is the axis of rotation.
  • r\"[xyz]+\": Indicates the \"rotation\" is a series of Euler angle rotations in degrees. The \"rotation\" can be either a number or variable-length array as long as the length matches the rotation mode string\u2019s length. The Euler rotations will be applied in the order of the string (from left to right).

The default \"rotation_mode\" is \"xyz\" which indicates an Euler angle rotation in the order x, y, and then z.

"},{"location":"json/#translation","title":"Translation","text":"

The \"translation\" field encodes a translation of the mesh. This must be an array of length \\(d\\), the dimension of the scene.

"},{"location":"json/#surface-selection","title":"Surface Selection","text":"

Either * a single number for a selection ID to apply to all surfaces in the mesh, * a file path containing one ID per surface element, or * a single or list of selection objects used to assign a given \"id\" (see selections).

"},{"location":"json/#volume-selection","title":"Volume Selection","text":"

Same as surface selection, but for assigning IDs to the volume elements of the mesh.

"},{"location":"json/#obstacles","title":"Obstacles","text":"

Obstacles serve as a way of specifying non-simulated collision objects.

"},{"location":"json/#mesh_1","title":"Mesh","text":"

The path to the mesh file (absolute or relative to JSON file). In addition to the standard volumetric meshes supported by simulated meshes, this can be a codimensional/surface mesh (i.e., points, edges, or triangles). Currently, codimensional points and edges are only supported using the OBJ file format. Codimensional points are specified as vertices that are not indexed by any elements. Codimensional edges are specified as OBJ line elements.

"},{"location":"json/#surface-selection_1","title":"Surface Selection","text":"

Must be a single number.

"},{"location":"json/#selections","title":"Selections","text":""},{"location":"json/#box","title":"Box","text":"

An axis-aligned box selection.

Parameters:

  • box: a \\(2 \\times n\\) array where the first row is the minimum corner and the second row is the maximum corner
  • relative (default: false): if the coordinates of box are relative to the mesh\u2019s rest bounding box

Example

{\"box\": [[0, 0, 0], [1, 0.1, 1]], \"relative\": true} will select all points in the bottom 10% of the mesh (assuming the vertical direction if in the y-axis).

"},{"location":"json/#sphere","title":"Sphere","text":"

A sphere (or circle in 2D) selection.

Parameters:

  • center: center of the sphere (\\(n\\)-length array)
  • radius: radius of the sphere (float value)
  • relative (default: false): if the center is relative to the mesh\u2019s rest bounding box and the radius is relative to the mesh\u2019s bounding box diagonal

Example

{\"center\": [0, 0, 0], \"radius\": 1} will select points that are less than 1 unit from the origin.

"},{"location":"json/#axis-plane","title":"Axis-Plane","text":"

An axis-aligned plane selection. Everything on one side of the plane is selected.

Parameters:

  • axis: axis aligned with the plane
    • Input can either be a string of format r\"[+-]?[xyzXYZ]\" or int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and coordinate is the axis to align the plane with
  • position: position of the plane along the axis (float value)
  • relative (default: false): if the position is relative to the mesh\u2019s rest bounding box

Example

{\"axis\": \"-X\", \"position\": 1} will select points with a x-coordinate less than 1.

"},{"location":"json/#plane","title":"Plane","text":"

A plane selection. Everything on one side of the plane is selected.

Parameters:

  • normal: normal of the plane (\\(n\\)-length array)
  • point: point on the plane (has priority over offset) (\\(n\\)-length array)
    • (alternatively) offset: offset along the normal from the origin defining the point (float value)
  • relative (default: false): if the point is relative to the mesh\u2019s rest bounding box (does not apply to the offset)

Example

{\"normal\": [1, 1, 0], \"point\": [0, 1, 0]} will select points \\(x\\) where \\((x-p) \\cdot n \\ge 0\\).

"},{"location":"json/#restart","title":"Restart","text":"

For time-dependent simulation, the state variables (\\(u\\), \\(v = \\dot{u}\\), and \\(a = \\ddot{u}\\)) are exported using the following parameters:

\"output\": {\n\"data\": {\n\"state\": \"<path/to/state.hdf5>\"\n}\n}\n

The path can be either absolute or relative to the output directory. The state will be saved in HDF5 format containing the keys u, v, and a for the solution, velocity, and acceleration, respectively.

This file can then be used to initialize (or restart) the simulation from the saved state by specifying:

\"input\": {\n\"data\": {\n\"state\": \"<path/to/state.hdf5>\"\n}\n}\n

Note

When restarting the simulation it is necessary to also specify the \"time\": {\"t0\": <start_time>} parameter for the starting time. Otherwise, it will assume a starting time of 0.

"},{"location":"json_defaults_and_spec/","title":"JSON Specification","text":""},{"location":"json_defaults_and_spec/#defaults","title":"Defaults","text":"

The following json contains the default values by PolyFEM.

Values of \"REQUIRED!\" indicate the field has no default and must be specified by the user.

{\n\"boundary_conditions\": {\n\"dirichlet_boundary\": [],\n\"neumann_boundary\": [],\n\"normal_aligned_neumann_boundary\": [],\n\"obstacle_displacements\": [],\n\"periodic_boundary\": {\n\"correspondence\": [],\n\"enabled\": false,\n\"fixed_macro_strain\": [],\n\"force_zero_mean\": false,\n\"linear_displacement_offset\": [],\n\"tolerance\": 1e-05\n},\n\"pressure_boundary\": [],\n\"pressure_cavity\": [],\n\"rhs\": {\n\"unit\": \"REQUIRED!\",\n\"value\": \"REQUIRED!\"\n}\n},\n\"common\": \"\",\n\"contact\": {\n\"collision_mesh\": {\n\"enabled\": true,\n\"linear_map\": \"REQUIRED!\",\n\"max_edge_length\": \"REQUIRED!\",\n\"mesh\": \"REQUIRED!\",\n\"tessellation_type\": \"regular\"\n},\n\"dhat\": 0.001,\n\"dhat_percentage\": 0.8,\n\"enabled\": false,\n\"epsv\": 0.001,\n\"friction_coefficient\": 0,\n\"periodic\": false,\n\"use_convergent_formulation\": false\n},\n\"geometry\": \"REQUIRED!\",\n\"initial_conditions\": {\n\"acceleration\": [],\n\"solution\": [],\n\"velocity\": []\n},\n\"input\": {\n\"data\": {\n\"reorder\": false,\n\"state\": \"\"\n}\n},\n\"materials\": \"REQUIRED!\",\n\"output\": {\n\"advanced\": {\n\"compute_error\": true,\n\"curved_mesh_size\": false,\n\"save_ccd_debug_meshes\": false,\n\"save_nl_solve_sequence\": false,\n\"save_solve_sequence_debug\": false,\n\"save_time_sequence\": true,\n\"sol_at_node\": -1,\n\"sol_on_grid\": -1,\n\"spectrum\": false,\n\"timestep_prefix\": \"step_\",\n\"vis_boundary_only\": false\n},\n\"data\": {\n\"advanced\": {\n\"reorder_nodes\": false\n},\n\"full_mat\": \"\",\n\"mises\": \"\",\n\"nodes\": \"\",\n\"rest_mesh\": \"\",\n\"solution\": \"\",\n\"state\": \"\",\n\"stiffness_mat\": \"\",\n\"stress_mat\": \"\"\n},\n\"directory\": \"\",\n\"json\": \"\",\n\"log\": {\n\"file_level\": \"trace\",\n\"level\": \"debug\",\n\"path\": \"\",\n\"quiet\": false\n},\n\"paraview\": {\n\"file_name\": \"\",\n\"high_order_mesh\": true,\n\"options\": {\n\"acceleration\": false,\n\"body_ids\": false,\n\"contact_forces\": false,\n\"discretization_order\": true,\n\"forces\": false,\n\"friction_forces\": false,\n\"material\": false,\n\"nodes\": true,\n\"scalar_values\": true,\n\"tensor_values\": true,\n\"use_hdf5\": false,\n\"velocity\": false\n},\n\"points\": false,\n\"skip_frame\": 1,\n\"surface\": false,\n\"vismesh_rel_area\": 1e-05,\n\"volume\": true,\n\"wireframe\": false\n},\n\"reference\": {\n\"gradient\": [],\n\"solution\": []\n},\n\"restart_json\": \"\"\n},\n\"preset_problem\": {\n\"U\": {},\n\"angular_v0\": 0.5,\n\"angular_v1\": -0.5,\n\"axis_coordiante\": 2,\n\"axis_coordiante0\": 2,\n\"axis_coordiante1\": 2,\n\"bbox_center\": [],\n\"fixed_boundary\": 5,\n\"force\": {},\n\"formulation\": \"\",\n\"func\": 0,\n\"kernel_distance\": 0,\n\"kernel_weights\": \"\",\n\"n_kernels\": 0,\n\"n_turns\": 0.5,\n\"time_dependent\": {},\n\"turning_boundary\": 6,\n\"turning_boundary0\": 5,\n\"turning_boundary1\": 6,\n\"type\": \"REQUIRED!\",\n\"viscosity\": 1\n},\n\"root_path\": \"\",\n\"solver\": {\n\"adjoint_linear\": {\n\"AMGCL\": {\n\"precond\": {\n\"class\": \"amg\",\n\"coarsening\": {\n\"aggr\": {\n\"eps_strong\": 0\n},\n\"estimate_spectral_radius\": true,\n\"relax\": 1,\n\"type\": \"smoothed_aggregation\"\n},\n\"direct_coarse\": false,\n\"max_levels\": 6,\n\"ncycle\": 2,\n\"relax\": {\n\"degree\": 16,\n\"higher\": 2,\n\"lower\": 0.008333333333,\n\"power_iters\": 100,\n\"scale\": true,\n\"type\": \"chebyshev\"\n}\n},\n\"solver\": {\n\"maxiter\": 1000,\n\"tol\": 1e-10,\n\"type\": \"cg\"\n}\n},\n\"Eigen::BiCGSTAB\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::ConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::DGMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::GMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::LeastSquaresConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::MINRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Hypre\": {\n\"max_iter\": 1000,\n\"pre_max_iter\": 1,\n\"tolerance\": 1e-10\n},\n\"Pardiso\": {\n\"mtype\": 11\n},\n\"enable_overwrite_solver\": false,\n\"precond\": \"\",\n\"solver\": \"\"\n},\n\"advanced\": {\n\"cache_size\": 900000,\n\"lagged_regularization_iterations\": 1,\n\"lagged_regularization_weight\": 0,\n\"lump_mass_matrix\": false\n},\n\"augmented_lagrangian\": {\n\"eta\": 0.99,\n\"initial_weight\": 1000000.0,\n\"max_weight\": 100000000.0,\n\"nonlinear\": {\n\"ADAM\": {\n\"alpha\": 0.001,\n\"beta_1\": 0.9,\n\"beta_2\": 0.999,\n\"epsilon\": 1e-08\n},\n\"L-BFGS\": {\n\"history_size\": 6\n},\n\"L-BFGS-B\": {\n\"history_size\": 6\n},\n\"Newton\": {\n\"force_psd_projection\": false,\n\"reg_weight_inc\": 10,\n\"reg_weight_max\": 100000000.0,\n\"reg_weight_min\": 1e-08,\n\"residual_tolerance\": 1e-05,\n\"use_psd_projection\": true,\n\"use_psd_projection_in_regularized\": true\n},\n\"StochasticADAM\": {\n\"alpha\": 0.001,\n\"beta_1\": 0.9,\n\"beta_2\": 0.999,\n\"epsilon\": 1e-08,\n\"erase_component_probability\": 0.3\n},\n\"StochasticGradientDescent\": {\n\"erase_component_probability\": 0.3\n},\n\"advanced\": {\n\"apply_gradient_fd\": \"None\",\n\"derivative_along_delta_x_tol\": 0,\n\"f_delta\": 0,\n\"f_delta_step_tol\": 100,\n\"gradient_fd_eps\": 1e-07\n},\n\"allow_out_of_iterations\": false,\n\"box_constraints\": {\n\"bounds\": [],\n\"max_change\": -1\n},\n\"first_grad_norm_tol\": 1e-10,\n\"grad_norm\": 1e-08,\n\"iterations_per_strategy\": 5,\n\"line_search\": {\n\"Armijo\": {\n\"c\": 0.0001\n},\n\"RobustArmijo\": {\n\"delta_relative_tolerance\": 0.1\n},\n\"default_init_step_size\": 1,\n\"max_step_size_iter\": 30,\n\"max_step_size_iter_final\": 100,\n\"method\": \"RobustArmijo\",\n\"min_step_size\": 1e-10,\n\"min_step_size_final\": 1e-20,\n\"step_ratio\": 0.5,\n\"use_grad_norm_tol\": 1e-06\n},\n\"max_iterations\": 500,\n\"solver\": \"Newton\",\n\"x_delta\": 0\n},\n\"scaling\": 2.0\n},\n\"contact\": {\n\"CCD\": {\n\"broad_phase\": \"hash_grid\",\n\"max_iterations\": 1000000,\n\"tolerance\": 1e-06\n},\n\"barrier_stiffness\": \"adaptive\",\n\"friction_convergence_tol\": 0.01,\n\"friction_iterations\": 1\n},\n\"linear\": {\n\"AMGCL\": {\n\"precond\": {\n\"class\": \"amg\",\n\"coarsening\": {\n\"aggr\": {\n\"eps_strong\": 0\n},\n\"estimate_spectral_radius\": true,\n\"relax\": 1,\n\"type\": \"smoothed_aggregation\"\n},\n\"direct_coarse\": false,\n\"max_levels\": 6,\n\"ncycle\": 2,\n\"relax\": {\n\"degree\": 16,\n\"higher\": 2,\n\"lower\": 0.008333333333,\n\"power_iters\": 100,\n\"scale\": true,\n\"type\": \"chebyshev\"\n}\n},\n\"solver\": {\n\"maxiter\": 1000,\n\"tol\": 1e-10,\n\"type\": \"cg\"\n}\n},\n\"Eigen::BiCGSTAB\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::ConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::DGMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::GMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::LeastSquaresConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Eigen::MINRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-12\n},\n\"Hypre\": {\n\"max_iter\": 1000,\n\"pre_max_iter\": 1,\n\"tolerance\": 1e-10\n},\n\"Pardiso\": {\n\"mtype\": 11\n},\n\"enable_overwrite_solver\": false,\n\"precond\": \"\",\n\"solver\": \"\"\n},\n\"max_threads\": 0,\n\"nonlinear\": {\n\"ADAM\": {\n\"alpha\": 0.001,\n\"beta_1\": 0.9,\n\"beta_2\": 0.999,\n\"epsilon\": 1e-08\n},\n\"L-BFGS\": {\n\"history_size\": 6\n},\n\"L-BFGS-B\": {\n\"history_size\": 6\n},\n\"Newton\": {\n\"force_psd_projection\": false,\n\"reg_weight_inc\": 10,\n\"reg_weight_max\": 100000000.0,\n\"reg_weight_min\": 1e-08,\n\"residual_tolerance\": 1e-05,\n\"use_psd_projection\": true,\n\"use_psd_projection_in_regularized\": true\n},\n\"StochasticADAM\": {\n\"alpha\": 0.001,\n\"beta_1\": 0.9,\n\"beta_2\": 0.999,\n\"epsilon\": 1e-08,\n\"erase_component_probability\": 0.3\n},\n\"StochasticGradientDescent\": {\n\"erase_component_probability\": 0.3\n},\n\"advanced\": {\n\"apply_gradient_fd\": \"None\",\n\"derivative_along_delta_x_tol\": 0,\n\"f_delta\": 0,\n\"f_delta_step_tol\": 100,\n\"gradient_fd_eps\": 1e-07\n},\n\"allow_out_of_iterations\": false,\n\"box_constraints\": {\n\"bounds\": [],\n\"max_change\": -1\n},\n\"first_grad_norm_tol\": 1e-10,\n\"grad_norm\": 1e-08,\n\"iterations_per_strategy\": 5,\n\"line_search\": {\n\"Armijo\": {\n\"c\": 0.0001\n},\n\"RobustArmijo\": {\n\"delta_relative_tolerance\": 0.1\n},\n\"default_init_step_size\": 1,\n\"max_step_size_iter\": 30,\n\"max_step_size_iter_final\": 100,\n\"method\": \"RobustArmijo\",\n\"min_step_size\": 1e-10,\n\"min_step_size_final\": 1e-20,\n\"step_ratio\": 0.5,\n\"use_grad_norm_tol\": 1e-06\n},\n\"max_iterations\": 500,\n\"solver\": \"Newton\",\n\"x_delta\": 0\n},\n\"rayleigh_damping\": []\n},\n\"space\": {\n\"advanced\": {\n\"B\": 3,\n\"bc_method\": \"sample\",\n\"count_flipped_els\": true,\n\"discr_order_max\": 4,\n\"force_no_ref_for_harmonic\": false,\n\"h1_formula\": false,\n\"integral_constraints\": 2,\n\"isoparametric\": false,\n\"mass_quadrature_order\": -1,\n\"n_boundary_samples\": -1,\n\"n_harmonic_samples\": 10,\n\"quadrature_order\": -1,\n\"use_particle_advection\": false\n},\n\"basis_type\": \"Lagrange\",\n\"discr_order\": 1,\n\"poly_basis_type\": \"MFSHarmonic\",\n\"pressure_discr_order\": 1,\n\"remesh\": {\n\"collapse\": {\n\"abs_max_edge_length\": 1e+100,\n\"acceptance_tolerance\": -1e-08,\n\"culling_threshold\": 0.01,\n\"enabled\": true,\n\"max_depth\": 3,\n\"rel_max_edge_length\": 1\n},\n\"enabled\": false,\n\"local_relaxation\": {\n\"local_mesh_n_ring\": 2,\n\"local_mesh_rel_area\": 0.01,\n\"max_nl_iterations\": 1\n},\n\"smooth\": {\n\"acceptance_tolerance\": -1e-08,\n\"enabled\": false,\n\"max_iters\": 1\n},\n\"split\": {\n\"acceptance_tolerance\": 0.001,\n\"culling_threshold\": 0.95,\n\"enabled\": true,\n\"max_depth\": 3,\n\"min_edge_length\": 1e-06\n},\n\"swap\": {\n\"acceptance_tolerance\": -1e-08,\n\"enabled\": false,\n\"max_depth\": 3\n},\n\"type\": \"physics\"\n},\n\"use_p_ref\": false\n},\n\"tests\": {\n\"err_h1\": 0,\n\"err_h1_semi\": 0,\n\"err_l2\": 0,\n\"err_linf\": 0,\n\"err_linf_grad\": 0,\n\"err_lp\": 0,\n\"margin\": 1e-05,\n\"time_steps\": 1\n},\n\"time\": {\n\"dt\": \"REQUIRED!\",\n\"integrator\": {\n\"beta\": 0.25,\n\"gamma\": 0.5,\n\"steps\": 1,\n\"type\": \"REQUIRED!\"\n},\n\"quasistatic\": false,\n\"t0\": 0,\n\"tend\": \"REQUIRED!\",\n\"time_steps\": \"REQUIRED!\"\n},\n\"units\": {\n\"characteristic_length\": 1,\n\"length\": \"m\",\n\"mass\": \"kg\",\n\"time\": \"s\"\n}\n}\n
"},{"location":"json_defaults_and_spec/#full-specification","title":"Full SpecificationDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionOptionalDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionRequiredDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionRequiredDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionOptionalDescriptionOptionalDescriptionDescriptionDescriptionOptionalDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescriptionDescription","text":"

The following json contains the full specification of the PolyFEM JSON API.

/ (object)

/\n
Root of the configuration file.

/geometry (list)

/geometry\n
List of geometry objects.

/geometry/*
/geometry/*\n
/geometry/* (object)mesh_arrayplanegroundmesh_sequence

Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object.

/geometry/*/mesh (file)

/geometry/*/mesh\n
Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

/geometry/*/type (string)

/geometry/*/type\n
Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Geometric transformations applied to the geometry after loading it.

Default: None

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection
/geometry/*/volume_selection\n
/geometry/*/volume_selection (int)/geometry/*/volume_selection (file)/geometry/*/volume_selection (object)/geometry/*/volume_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Offsets the volume IDs loaded from the mesh.

Default: None

/geometry/*/volume_selection/id_offset (int)

/geometry/*/volume_selection/id_offset\n
Offsets the volume IDs loaded from the mesh.

Default: 0

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/volume_selection/*
/geometry/*/volume_selection/*\n
/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box (list)

/geometry/*/volume_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/* (list)

/geometry/*/volume_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/*/* (float)

/geometry/*/volume_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center (list)

/geometry/*/volume_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center/* (float)

/geometry/*/volume_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1 (list)

/geometry/*/volume_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1/* (float)

/geometry/*/volume_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2 (list)

/geometry/*/volume_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2/* (float)

/geometry/*/volume_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point (list)

/geometry/*/volume_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point/* (float)

/geometry/*/volume_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal (list)

/geometry/*/volume_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal/* (float)

/geometry/*/volume_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/axis
/geometry/*/volume_selection/*/axis\n
/geometry/*/volume_selection/*/axis (int)/geometry/*/volume_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/position (float)

/geometry/*/volume_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

/geometry/*/surface_selection
/geometry/*/surface_selection\n
/geometry/*/surface_selection (int)/geometry/*/surface_selection (file)/geometry/*/surface_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/surface_selection/*
/geometry/*/surface_selection/*\n
/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box (list)

/geometry/*/surface_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/* (list)

/geometry/*/surface_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/*/* (float)

/geometry/*/surface_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center (list)

/geometry/*/surface_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center/* (float)

/geometry/*/surface_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1 (list)

/geometry/*/surface_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1/* (float)

/geometry/*/surface_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2 (list)

/geometry/*/surface_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2/* (float)

/geometry/*/surface_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point (list)

/geometry/*/surface_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point/* (float)

/geometry/*/surface_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal (list)

/geometry/*/surface_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal/* (float)

/geometry/*/surface_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/axis
/geometry/*/surface_selection/*/axis\n
/geometry/*/surface_selection/*/axis (int)/geometry/*/surface_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/position (float)

/geometry/*/surface_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None

/geometry/*/surface_selection/*/threshold (float)

/geometry/*/surface_selection/*/threshold\n
Threshold for box side selection.

/geometry/*/surface_selection/*/id_offset (int)

/geometry/*/surface_selection/*/id_offset\n
ID offset of box side selection.

Default: 0

/geometry/*/curve_selection (object)

/geometry/*/curve_selection\n
Selection of curves

Default: None

/geometry/*/point_selection
/geometry/*/point_selection\n
/geometry/*/point_selection (int)/geometry/*/point_selection (file)/geometry/*/point_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/point_selection/*
/geometry/*/point_selection/*\n
/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box (list)

/geometry/*/point_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/* (list)

/geometry/*/point_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/*/* (float)

/geometry/*/point_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center (list)

/geometry/*/point_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center/* (float)

/geometry/*/point_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1 (list)

/geometry/*/point_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1/* (float)

/geometry/*/point_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2 (list)

/geometry/*/point_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2/* (float)

/geometry/*/point_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point (list)

/geometry/*/point_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point/* (float)

/geometry/*/point_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal (list)

/geometry/*/point_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal/* (float)

/geometry/*/point_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/axis
/geometry/*/point_selection/*/axis\n
/geometry/*/point_selection/*/axis (int)/geometry/*/point_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/position (float)

/geometry/*/point_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None

/geometry/*/point_selection/*/threshold (float)

/geometry/*/point_selection/*/threshold\n
Threshold for box side selection.

/geometry/*/point_selection/*/id_offset (int)

/geometry/*/point_selection/*/id_offset\n
ID offset of box side selection.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Advanced options for geometry

Default: None

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: mesh_array Each geometry object stores a mesh, a set of transformations applied to it after loading, and a set of selections, which can be used to specify boundary conditions, materials, optimization parameters and other quantities that can be associated with a part of an object.

/geometry/*/mesh (file)

/geometry/*/mesh\n
Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

/geometry/*/array (object)

/geometry/*/array\n
Array of meshes

/geometry/*/array/offset (float)

/geometry/*/array/offset\n
Offset of the mesh in the array.

/geometry/*/array/size (list)

/geometry/*/array/size\n
Size of the array (two entries for 2D problems or three entries for 3D problems).

/geometry/*/array/size/* (int)

/geometry/*/array/size/*\n
Size of the array (two entries for 2D problems or three entries for 3D problems).

Range: [1, inf]

/geometry/*/array/relative (bool)

/geometry/*/array/relative\n
Is the offset value relative to the mesh\u2019s dimensions.

Default: False

/geometry/*/type (string)

/geometry/*/type\n
Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Geometric transformations applied to the geometry after loading it.

Default: None

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection
/geometry/*/volume_selection\n
/geometry/*/volume_selection (int)/geometry/*/volume_selection (file)/geometry/*/volume_selection (object)/geometry/*/volume_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

Offsets the volume IDs loaded from the mesh.

Default: None

/geometry/*/volume_selection/id_offset (int)

/geometry/*/volume_selection/id_offset\n
Offsets the volume IDs loaded from the mesh.

Default: 0

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/volume_selection/*
/geometry/*/volume_selection/*\n
/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)/geometry/*/volume_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box (list)

/geometry/*/volume_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/* (list)

/geometry/*/volume_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/box/*/* (float)

/geometry/*/volume_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center (list)

/geometry/*/volume_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/center/* (float)

/geometry/*/volume_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/radius (float)

/geometry/*/volume_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1 (list)

/geometry/*/volume_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p1/* (float)

/geometry/*/volume_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2 (list)

/geometry/*/volume_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/p2/* (float)

/geometry/*/volume_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point (list)

/geometry/*/volume_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/point/* (float)

/geometry/*/volume_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal (list)

/geometry/*/volume_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/normal/* (float)

/geometry/*/volume_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/volume_selection/*/id (int)

/geometry/*/volume_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/axis
/geometry/*/volume_selection/*/axis\n
/geometry/*/volume_selection/*/axis (int)/geometry/*/volume_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/position (float)

/geometry/*/volume_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/volume_selection/*/relative (bool)

/geometry/*/volume_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

/geometry/*/surface_selection
/geometry/*/surface_selection\n
/geometry/*/surface_selection (int)/geometry/*/surface_selection (file)/geometry/*/surface_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/surface_selection/*
/geometry/*/surface_selection/*\n
/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)/geometry/*/surface_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box (list)

/geometry/*/surface_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/* (list)

/geometry/*/surface_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/box/*/* (float)

/geometry/*/surface_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center (list)

/geometry/*/surface_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/center/* (float)

/geometry/*/surface_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/radius (float)

/geometry/*/surface_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1 (list)

/geometry/*/surface_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p1/* (float)

/geometry/*/surface_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2 (list)

/geometry/*/surface_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/p2/* (float)

/geometry/*/surface_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point (list)

/geometry/*/surface_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/point/* (float)

/geometry/*/surface_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal (list)

/geometry/*/surface_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/normal/* (float)

/geometry/*/surface_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/surface_selection/*/id (int)

/geometry/*/surface_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/axis
/geometry/*/surface_selection/*/axis\n
/geometry/*/surface_selection/*/axis (int)/geometry/*/surface_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/position (float)

/geometry/*/surface_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/surface_selection/*/relative (bool)

/geometry/*/surface_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None

/geometry/*/surface_selection/*/threshold (float)

/geometry/*/surface_selection/*/threshold\n
Threshold for box side selection.

/geometry/*/surface_selection/*/id_offset (int)

/geometry/*/surface_selection/*/id_offset\n
ID offset of box side selection.

Default: 0

/geometry/*/curve_selection (object)

/geometry/*/curve_selection\n
Selection of curves

Default: None

/geometry/*/point_selection
/geometry/*/point_selection\n
/geometry/*/point_selection (int)/geometry/*/point_selection (file)/geometry/*/point_selection (list)

Assign specified ID to all elements of the geometry.

Load ids from a file; the file is required to have one ID per element of the geometry

Extensions: ['.txt']

List of selection (ID assignment) operations to apply to the geometry; operations can be box, sphere, etc.

/geometry/*/point_selection/*
/geometry/*/point_selection/*\n
/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)/geometry/*/point_selection/* (object)

Assign the ID to all elements with barycenters inside an axis-aligned box given by the list of its 2 corners, one with min, the other with max coordinates along all axes. If relative option is set to true, the coordinates of the box corners are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box (list)

/geometry/*/point_selection/*/box\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/* (list)

/geometry/*/point_selection/*/box/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/box/*/* (float)

/geometry/*/point_selection/*/box/*/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a sphere with specified center and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center (list)

/geometry/*/point_selection/*/center\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/center/* (float)

/geometry/*/point_selection/*/center/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters inside a cylinder with specified axis (p1, p2) and radius. If relative option is set to true, the coordinates of the center are specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry, and the radius is specified relative to the bounding box diagonal length.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/radius (float)

/geometry/*/point_selection/*/radius\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1 (list)

/geometry/*/point_selection/*/p1\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p1/* (float)

/geometry/*/point_selection/*/p1/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2 (list)

/geometry/*/point_selection/*/p2\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/p2/* (float)

/geometry/*/point_selection/*/p2/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assign the ID to all elements with barycenters in a halfspace. The halfspace boundary plane is defined by a point in the plane and the normal, which points to the halfspace. The option relative set to true indicates that the point position is specified in bilinear/trilinear coordinates with respect to the bounding box of the geometry.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point (list)

/geometry/*/point_selection/*/point\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/point/* (float)

/geometry/*/point_selection/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal (list)

/geometry/*/point_selection/*/normal\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/normal/* (float)

/geometry/*/point_selection/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Same as halfspace, but the boundary plane is axis-aligned. The choice of axis is specified either by a string matching the regexp r\u201d[+-][xyzXYZ]\u201d or an int matching the regular expression [+-]?[123] where the sign is the side of the plane to select and letter or number indicates the axis to which the plane is perpendicular. The offset is the plane offset from the origin. If the relative option is set to true, the offset is with respect to the center of the bounding box.

Default: None

/geometry/*/point_selection/*/id (int)

/geometry/*/point_selection/*/id\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/axis
/geometry/*/point_selection/*/axis\n
/geometry/*/point_selection/*/axis (int)/geometry/*/point_selection/*/axis (string)

FIXME: Missing documentation in the specification.

FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/position (float)

/geometry/*/point_selection/*/position\n
FIXME: Missing documentation in the specification.

/geometry/*/point_selection/*/relative (bool)

/geometry/*/point_selection/*/relative\n
FIXME: Missing documentation in the specification.

Default: False

Assigns ids to sides touching the bbox of the model using a threshold. Assigns 1+offset to left, 2+offset to bottom, 3+offset to right, 4+offset to top, 5+offset to front, 6+offset to back, 7+offset to everything else.

Default: None

/geometry/*/point_selection/*/threshold (float)

/geometry/*/point_selection/*/threshold\n
Threshold for box side selection.

/geometry/*/point_selection/*/id_offset (int)

/geometry/*/point_selection/*/id_offset\n
ID offset of box side selection.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Advanced options for geometry

Default: None

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: plane Plane geometry object defined by its origin and normal.

/geometry/*/point (list)

/geometry/*/point\n
Point on plane (two entries for 2D problems or three entries for 3D problems).

/geometry/*/point/* (float)

/geometry/*/point/*\n
FIXME: Missing documentation in the specification.

/geometry/*/normal (list)

/geometry/*/normal\n
Normal of plane (two entries for 2D problems or three entries for 3D problems).

/geometry/*/normal/* (float)

/geometry/*/normal/*\n
FIXME: Missing documentation in the specification.

/geometry/*/type (string)

/geometry/*/type\n
Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: ground Plane orthogonal to gravity defined by its height.

/geometry/*/height (float)

/geometry/*/height\n
Height of ground plane.

/geometry/*/type (string)

/geometry/*/type\n
Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
The geometry elements are not included in deforming geometry, only in collision computations

Default: False

Type: mesh_sequence Mesh sequence.

/geometry/*/mesh_sequence
/geometry/*/mesh_sequence\n
/geometry/*/mesh_sequence (string)/geometry/*/mesh_sequence (list)

Directory (or GLOB) of meshes for the mesh sequence.

List of mesh files for the mesh sequence.

/geometry/*/mesh_sequence/* (file)

/geometry/*/mesh_sequence/*\n
Path of the mesh file to load.

Extensions: ['.obj', '.msh', '.stl', '.ply', '.mesh']

/geometry/*/fps (int)

/geometry/*/fps\n
Frames of the mesh sequence per second.

/geometry/*/type (string)

/geometry/*/type\n
Type of geometry, currently only one supported. In future we will add stuff like planes, spheres, etc.

Default: 'mesh'

Options: ['mesh', 'plane', 'ground', 'mesh_sequence', 'mesh_array']

/geometry/*/extract (string)

/geometry/*/extract\n
Used to extract stuff from the mesh. Eg extract surface extracts the surface from a tet mesh.

Default: 'volume'

Options: ['volume', 'edges', 'points', 'surface']

/geometry/*/unit (string)

/geometry/*/unit\n
Units of the geometric model.

Default: ''

/geometry/*/transformation (object)

/geometry/*/transformation\n
Geometric transformations applied to the geometry after loading it.

Default: None

/geometry/*/transformation/translation (list)

/geometry/*/transformation/translation\n
Translate (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/translation/* (float)

/geometry/*/transformation/translation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation (list)

/geometry/*/transformation/rotation\n
Rotate, in 2D, one number, the rotation angle, in 3D, three or four Euler angles, axis+angle, or a unit quaternion. Depends on rotation mode.

/geometry/*/transformation/rotation/* (float)

/geometry/*/transformation/rotation/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/rotation_mode (string)

/geometry/*/transformation/rotation_mode\n
Type of rotation, supported are any permutation of [xyz]+, axis_angle, quaternion, or rotation_vector.

Default: 'xyz'

/geometry/*/transformation/scale (list)

/geometry/*/transformation/scale\n
Scale by specified factors along axes (two entries for 2D problems or three entries for 3D problems).

/geometry/*/transformation/scale/* (float)

/geometry/*/transformation/scale/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/transformation/dimensions
/geometry/*/transformation/dimensions\n
/geometry/*/transformation/dimensions (float)/geometry/*/transformation/dimensions (list)

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

Default: 1

Scale the object so that bounding box dimensions match specified dimensions, 2 entries for 2D problems, 3 entries for 3D problems.

/geometry/*/transformation/dimensions/* (float)

/geometry/*/transformation/dimensions/*\n
FIXME: Missing documentation in the specification.

Default: 0

/geometry/*/n_refs (int)

/geometry/*/n_refs\n
number of uniform refinements

Default: 0

/geometry/*/advanced (object)

/geometry/*/advanced\n
Advanced options for geometry

Default: None

/geometry/*/advanced/normalize_mesh (bool)

/geometry/*/advanced/normalize_mesh\n
Rescale the mesh to it fits in the biunit cube

Default: False

/geometry/*/advanced/force_linear_geometry (bool)

/geometry/*/advanced/force_linear_geometry\n
Discard high-order nodes for curved geometries

Default: False

/geometry/*/advanced/refinement_location (float)

/geometry/*/advanced/refinement_location\n
parametric location of the refinement

Default: 0.5

/geometry/*/advanced/min_component (int)

/geometry/*/advanced/min_component\n
Size of the minumum component for collision

Default: -1

/geometry/*/enabled (bool)

/geometry/*/enabled\n
Skips the geometry if false

Default: True

/geometry/*/is_obstacle (bool)

/geometry/*/is_obstacle\n
The geometry elements are not included in deforming geometry, only in collision computations

Default: False

/materials (list)

/materials\n
Material Parameters lists including ID pointing to volume selection, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), Density (\\(\\rho\\)), or Lam\u00e9 constants (\\(\\lambda\\) and \\(\\mu\\)).

/materials/*
/materials/*\n
NeoHookeanNeoHookeanMooneyRivlinMooneyRivlin3ParamMooneyRivlin3ParamSymbolicUnconstrainedOgdenIncompressibleOgdenLinearElasticityLinearElasticityHookeLinearElasticityHookeLinearElasticitySaintVenantSaintVenantStokesNavierStokesOperatorSplittingIncompressibleLinearElasticityIncompressibleLinearElasticityLaplacianHelmholtzBilaplacianAMIPSFixedCorotationalFixedCorotational

Type: NeoHookean Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: NeoHookean Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: MooneyRivlin Material Parameters including ID, for Mooney-Rivlin

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
The unit of the Value

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: MooneyRivlin3Param Material Parameters including ID, for Mooney-Rivlin

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
The unit of the Value

/materials/*/c3
/materials/*/c3\n
/materials/*/c3 (float)/materials/*/c3 (string)/materials/*/c3 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c3/value
/materials/*/c3/value\n
/materials/*/c3/value (float)/materials/*/c3/value (string)/materials/*/c3/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c3/unit (string)

/materials/*/c3/unit\n
The unit of the Value

/materials/*/d1
/materials/*/d1\n
/materials/*/d1 (float)/materials/*/d1 (string)/materials/*/d1 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/d1/value
/materials/*/d1/value\n
/materials/*/d1/value (float)/materials/*/d1/value (string)/materials/*/d1/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/d1/unit (string)

/materials/*/d1/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: MooneyRivlin3ParamSymbolic Material Parameters including ID, for Mooney-Rivlin

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c1
/materials/*/c1\n
/materials/*/c1 (float)/materials/*/c1 (string)/materials/*/c1 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c1/value
/materials/*/c1/value\n
/materials/*/c1/value (float)/materials/*/c1/value (string)/materials/*/c1/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c1/unit (string)

/materials/*/c1/unit\n
The unit of the Value

/materials/*/c2
/materials/*/c2\n
/materials/*/c2 (float)/materials/*/c2 (string)/materials/*/c2 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c2/value
/materials/*/c2/value\n
/materials/*/c2/value (float)/materials/*/c2/value (string)/materials/*/c2/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c2/unit (string)

/materials/*/c2/unit\n
The unit of the Value

/materials/*/c3
/materials/*/c3\n
/materials/*/c3 (float)/materials/*/c3 (string)/materials/*/c3 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c3/value
/materials/*/c3/value\n
/materials/*/c3/value (float)/materials/*/c3/value (string)/materials/*/c3/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c3/unit (string)

/materials/*/c3/unit\n
The unit of the Value

/materials/*/d1
/materials/*/d1\n
/materials/*/d1 (float)/materials/*/d1 (string)/materials/*/d1 (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/d1/value
/materials/*/d1/value\n
/materials/*/d1/value (float)/materials/*/d1/value (string)/materials/*/d1/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/d1/unit (string)

/materials/*/d1/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: UnconstrainedOgden Material Parameters including ID, for Ogden.

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/alphas
/materials/*/alphas\n
/materials/*/alphas (float)/materials/*/alphas (string)/materials/*/alphas (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/alphas/value
/materials/*/alphas/value\n
/materials/*/alphas/value (float)/materials/*/alphas/value (string)/materials/*/alphas/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/alphas/unit (string)

/materials/*/alphas/unit\n
The unit of the Value

/materials/*/mus (list)

/materials/*/mus\n
Ogden mu

/materials/*/mus/*
/materials/*/mus/*\n
/materials/*/mus/* (float)/materials/*/mus/* (string)/materials/*/mus/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/mus/*/value
/materials/*/mus/*/value\n
/materials/*/mus/*/value (float)/materials/*/mus/*/value (string)/materials/*/mus/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/mus/*/unit (string)

/materials/*/mus/*/unit\n
The unit of the Value

/materials/*/Ds (list)

/materials/*/Ds\n
Ogden D

/materials/*/Ds/*
/materials/*/Ds/*\n
/materials/*/Ds/* (float)/materials/*/Ds/* (string)/materials/*/Ds/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/Ds/*/value
/materials/*/Ds/*/value\n
/materials/*/Ds/*/value (float)/materials/*/Ds/*/value (string)/materials/*/Ds/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/Ds/*/unit (string)

/materials/*/Ds/*/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: IncompressibleOgden Material Parameters including ID, for Ogden.

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/c
/materials/*/c\n
/materials/*/c (float)/materials/*/c (string)/materials/*/c (object)/materials/*/c (list)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c/value
/materials/*/c/value\n
/materials/*/c/value (float)/materials/*/c/value (string)/materials/*/c/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c/unit (string)

/materials/*/c/unit\n
The unit of the Value

Coefficient(s) of Incompressible Ogden

/materials/*/c/*
/materials/*/c/*\n
/materials/*/c/* (float)/materials/*/c/* (string)/materials/*/c/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/c/*/value
/materials/*/c/*/value\n
/materials/*/c/*/value (float)/materials/*/c/*/value (string)/materials/*/c/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/c/*/unit (string)

/materials/*/c/*/unit\n
The unit of the Value

/materials/*/m
/materials/*/m\n
/materials/*/m (float)/materials/*/m (string)/materials/*/m (object)/materials/*/m (list)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/m/value
/materials/*/m/value\n
/materials/*/m/value (float)/materials/*/m/value (string)/materials/*/m/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/m/unit (string)

/materials/*/m/unit\n
The unit of the Value

Exponent(s) of Incompressible Ogden

/materials/*/m/*
/materials/*/m/*\n
/materials/*/m/* (float)/materials/*/m/* (string)/materials/*/m/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/m/*/value
/materials/*/m/*/value\n
/materials/*/m/*/value (float)/materials/*/m/*/value (string)/materials/*/m/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/m/*/unit (string)

/materials/*/m/*/unit\n
The unit of the Value

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: LinearElasticity Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: LinearElasticity Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: HookeLinearElasticity Material Parameters including ID, E, nu, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: HookeLinearElasticity Material Parameters including ID, E, nu, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/elasticity_tensor (list)

/materials/*/elasticity_tensor\n
Symmetric elasticity tensor

/materials/*/elasticity_tensor/*
/materials/*/elasticity_tensor/*\n
/materials/*/elasticity_tensor/* (float)/materials/*/elasticity_tensor/* (string)/materials/*/elasticity_tensor/* (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/elasticity_tensor/*/value
/materials/*/elasticity_tensor/*/value\n
/materials/*/elasticity_tensor/*/value (float)/materials/*/elasticity_tensor/*/value (string)/materials/*/elasticity_tensor/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/elasticity_tensor/*/unit (string)

/materials/*/elasticity_tensor/*/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: SaintVenant Material Parameters including ID, E, nu, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: SaintVenant Material Parameters including ID, E, nu, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/elasticity_tensor (list)

/materials/*/elasticity_tensor\n
Symmetric elasticity tensor

/materials/*/elasticity_tensor/*
/materials/*/elasticity_tensor/*\n
/materials/*/elasticity_tensor/* (float)/materials/*/elasticity_tensor/* (string)/materials/*/elasticity_tensor/* (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/elasticity_tensor/*/value
/materials/*/elasticity_tensor/*/value\n
/materials/*/elasticity_tensor/*/value (float)/materials/*/elasticity_tensor/*/value (string)/materials/*/elasticity_tensor/*/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/elasticity_tensor/*/unit (string)

/materials/*/elasticity_tensor/*/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: Stokes Material Parameters including ID, viscosity, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: NavierStokes Material Parameters including ID, viscosity, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: OperatorSplitting Material Parameters including ID, viscosity, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/viscosity
/materials/*/viscosity\n
/materials/*/viscosity (float)/materials/*/viscosity (string)/materials/*/viscosity (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/viscosity/value
/materials/*/viscosity/value\n
/materials/*/viscosity/value (float)/materials/*/viscosity/value (string)/materials/*/viscosity/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/viscosity/unit (string)

/materials/*/viscosity/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: IncompressibleLinearElasticity Material Parameters including ID, Young\u2019s modulus (\\(E\\)), Poisson\u2019s ratio (\\(\\nu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: IncompressibleLinearElasticity Material Parameters including ID, Lam\u00e9 first (\\(\\lambda\\)), Lam\u00e9 second (\\(\\mu\\)), density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: Laplacian Material Parameters including ID, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: Helmholtz Material Parameters including ID, k, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/k
/materials/*/k\n
/materials/*/k (float)/materials/*/k (string)/materials/*/k (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/k/value
/materials/*/k/value\n
/materials/*/k/value (float)/materials/*/k/value (string)/materials/*/k/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/k/unit (string)

/materials/*/k/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: Bilaplacian Material Parameters including ID, density (\\(\\rho\\))

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

Type: AMIPS Material Parameters including ID

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

Type: FixedCorotational Material Parameters including ID

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/E
/materials/*/E\n
/materials/*/E (float)/materials/*/E (string)/materials/*/E (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/E/value
/materials/*/E/value\n
/materials/*/E/value (float)/materials/*/E/value (string)/materials/*/E/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/E/unit (string)

/materials/*/E/unit\n
The unit of the Value

/materials/*/nu
/materials/*/nu\n
/materials/*/nu (float)/materials/*/nu (string)/materials/*/nu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/nu/value
/materials/*/nu/value\n
/materials/*/nu/value (float)/materials/*/nu/value (string)/materials/*/nu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/nu/unit (string)

/materials/*/nu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

Type: FixedCorotational Material Parameters including ID

/materials/*/type (string)

/materials/*/type\n
Type of material

Options: ['LinearElasticity', 'HookeLinearElasticity', 'SaintVenant', 'NeoHookean', 'MooneyRivlin', 'MooneyRivlin3Param', 'MooneyRivlin3ParamSymbolic', 'UnconstrainedOgden', 'IncompressibleOgden', 'Stokes', 'NavierStokes', 'OperatorSplitting', 'IncompressibleLinearElasticity', 'Laplacian', 'Helmholtz', 'Bilaplacian', 'AMIPS', 'FixedCorotational']

/materials/*/lambda
/materials/*/lambda\n
/materials/*/lambda (float)/materials/*/lambda (string)/materials/*/lambda (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/lambda/value
/materials/*/lambda/value\n
/materials/*/lambda/value (float)/materials/*/lambda/value (string)/materials/*/lambda/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/lambda/unit (string)

/materials/*/lambda/unit\n
The unit of the Value

/materials/*/mu
/materials/*/mu\n
/materials/*/mu (float)/materials/*/mu (string)/materials/*/mu (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/mu/value
/materials/*/mu/value\n
/materials/*/mu/value (float)/materials/*/mu/value (string)/materials/*/mu/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/mu/unit (string)

/materials/*/mu/unit\n
The unit of the Value

/materials/*/id
/materials/*/id\n
/materials/*/id (int)/materials/*/id (list)

Volume selection ID

Default: 0

Volume selection IDs

/materials/*/id/* (int)

/materials/*/id/*\n
Volume selection ID

/materials/*/rho
/materials/*/rho\n
/materials/*/rho (float)/materials/*/rho (string)/materials/*/rho (object)

Value as a constant float

Default: 1

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/rho/value
/materials/*/rho/value\n
/materials/*/rho/value (float)/materials/*/rho/value (string)/materials/*/rho/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/rho/unit (string)

/materials/*/rho/unit\n
The unit of the Value

/materials/*/phi
/materials/*/phi\n
/materials/*/phi (float)/materials/*/phi (string)/materials/*/phi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/phi/value
/materials/*/phi/value\n
/materials/*/phi/value (float)/materials/*/phi/value (string)/materials/*/phi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/phi/unit (string)

/materials/*/phi/unit\n
The unit of the Value

/materials/*/psi
/materials/*/psi\n
/materials/*/psi (float)/materials/*/psi (string)/materials/*/psi (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/materials/*/psi/value
/materials/*/psi/value\n
/materials/*/psi/value (float)/materials/*/psi/value (string)/materials/*/psi/value (file)

The value of the constant

The value as an expression

The value as a file

/materials/*/psi/unit (string)

/materials/*/psi/unit\n
The unit of the Value

/units (object)

/units\n
Basic units used in the code.

Default: None

/units/length (string)

/units/length\n
Length unit.

Default: 'm'

/units/mass (string)

/units/mass\n
Mass unit.

Default: 'kg'

/units/time (string)

/units/time\n
Time unit.

Default: 's'

/units/characteristic_length (float)

/units/characteristic_length\n
Characteristic length, used for tolerances.

Default: 1

/preset_problem
/preset_problem\n
LinearQuadraticCubicSineFrankeFrankeOldGenericScalarExactZero_BCElasticWalkTorsionElasticDoubleTorsionElasticElasticZeroBCElasticExactElasticCantileverExactCompressionElasticExactQuadraticElasticExactLinearElasticExactPointBasedTensorKernelNodeTimeDependentScalarMinSurfGravityConstantVelocityTwoSpheresDrivenCavityDrivenCavityC0DrivenCavitySmoothFlowFlowWithObstacleCornerFlowUnitFlowWithObstacleStokesLawTaylorGreenVortexSimpleStokeProblemExactSineStokeProblemExactTransientStokeProblemExactKovnaszyAirfoilLshapeTestProblemBilaplacianProblemWithSolution

Type: Linear TODO

Default: 'skip'

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Quadratic TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Cubic TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Sine TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Franke TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: FrankeOld TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: GenericScalarExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/func (int)

/preset_problem/func\n
TODO

Default: 0

Type: Zero_BC TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Elastic TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Walk TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TorsionElastic TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/axis_coordiante (int)

/preset_problem/axis_coordiante\n
TODO

Default: 2

/preset_problem/n_turns (float)

/preset_problem/n_turns\n
TODO

Default: 0.5

/preset_problem/fixed_boundary (int)

/preset_problem/fixed_boundary\n
TODO

Default: 5

/preset_problem/turning_boundary (int)

/preset_problem/turning_boundary\n
TODO

Default: 6

/preset_problem/bbox_center (list)

/preset_problem/bbox_center\n
TODO

/preset_problem/bbox_center/* (float)

/preset_problem/bbox_center/*\n
TODO

Default: 0

Type: DoubleTorsionElastic TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/axis_coordiante0 (int)

/preset_problem/axis_coordiante0\n
TODO

Default: 2

/preset_problem/axis_coordiante1 (int)

/preset_problem/axis_coordiante1\n
TODO

Default: 2

/preset_problem/angular_v0 (float)

/preset_problem/angular_v0\n
TODO

Default: 0.5

/preset_problem/angular_v1 (float)

/preset_problem/angular_v1\n
TODO

Default: -0.5

/preset_problem/turning_boundary0 (int)

/preset_problem/turning_boundary0\n
TODO

Default: 5

/preset_problem/turning_boundary1 (int)

/preset_problem/turning_boundary1\n
TODO

Default: 6

/preset_problem/bbox_center (list)

/preset_problem/bbox_center\n
TODO

/preset_problem/bbox_center/* (float)

/preset_problem/bbox_center/*\n
TODO

Default: 0

Type: ElasticZeroBC TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: ElasticExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: ElasticCantileverExact TODO, add displacement, E, nu, formulation, mesh_size

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: CompressionElasticExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: QuadraticElasticExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: LinearElasticExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: PointBasedTensor TODO, add optionals

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Kernel TODO, add optionals

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/formulation (string)

/preset_problem/formulation\n
TODO

Default: ''

/preset_problem/n_kernels (int)

/preset_problem/n_kernels\n
TODO

Default: 0

/preset_problem/kernel_distance (float)

/preset_problem/kernel_distance\n
TODO

Default: 0

/preset_problem/kernel_weights (string)

/preset_problem/kernel_weights\n
TODO

Default: ''

Type: Node TODO, add optionals

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TimeDependentScalar TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: MinSurf TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Gravity TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: ConstantVelocity TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TwoSpheres TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavity TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavityC0 TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: DrivenCavitySmooth TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Flow TODO, add inflow, outflow, inflow_amout, outflow_amout, direction, obstacle

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: FlowWithObstacle TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: CornerFlow TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: UnitFlowWithObstacle TODO, add inflow_id, direction, no_slip

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: StokesLaw TODO, add radius

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
TODO

Default: 1

Type: TaylorGreenVortex TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
TODO

Default: 1

Type: SimpleStokeProblemExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/func (int)

/preset_problem/func\n
TODO

Default: 0

Type: SineStokeProblemExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TransientStokeProblemExact TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/func (int)

/preset_problem/func\n
TODO

Default: 0

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
TODO

Default: 1

Type: Kovnaszy TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/preset_problem/viscosity (float)

/preset_problem/viscosity\n
TODO

Default: 1

Type: Airfoil TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: Lshape TODO

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: TestProblem TODO, type, omega, is_scalar

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

Type: BilaplacianProblemWithSolution TODO, type, omega, is_scalar

/preset_problem/type (string)

/preset_problem/type\n
Type of preset problem to use.

Options: ['Linear', 'Quadratic', 'Cubic', 'Sine', 'Franke', 'FrankeOld', 'GenericScalarExact', 'Zero_BC', 'Elastic', 'Walk', 'TorsionElastic', 'DoubleTorsionElastic', 'ElasticZeroBC', 'ElasticExact', 'ElasticCantileverExact', 'CompressionElasticExact', 'QuadraticElasticExact', 'LinearElasticExact', 'PointBasedTensor', 'Kernel', 'Node', 'TimeDependentScalar', 'MinSurf', 'Gravity', 'ConstantVelocity', 'TwoSpheres', 'DrivenCavity', 'DrivenCavityC0', 'DrivenCavitySmooth', 'Flow', 'FlowWithObstacle', 'CornerFlow', 'UnitFlowWithObstacle', 'StokesLaw', 'TaylorGreenVortex', 'SimpleStokeProblemExact', 'SineStokeProblemExact', 'TransientStokeProblemExact', 'Kovnaszy', 'Airfoil', 'Lshape', 'TestProblem', 'BilaplacianProblemWithSolution']

/common (file)

/common\n
Path to common settings will patch the current file.

Default: ''

Extensions: ['.json']

/root_path (string)

/root_path\n
Path for all relative paths, set automatically to the folder containing this JSON.

Default: ''

/space (object)

/space\n
Options related to the FE space.

Default: None

/space/discr_order
/space/discr_order\n
/space/discr_order (int)/space/discr_order (file)/space/discr_order (list)

Lagrange element order for the space for the main unknown, for all elements.

Default: 1

Path to file containing Lagrange element order for the space for the main unknown per element.

Extensions: ['.txt', '.bin']

List of Lagrange element order for the space for the main unknown with volume IDs.

/space/discr_order/* (object)

/space/discr_order/*\n
Lagrange element order for the a space tagged with volume ID for the main unknown.

/space/discr_order/*/id
/space/discr_order/*/id\n
/space/discr_order/*/id (int)/space/discr_order/*/id (list)

Volume selection ID to apply the discr_order to.

List of volume selection IDs to apply the discr_order to.

/space/discr_order/*/id/* (int)

/space/discr_order/*/id/*\n
Volume selection ID to apply the discr_order to.

/space/discr_order/*/order (int)

/space/discr_order/*/order\n
Lagrange element order for the space for the main unknown, for all elements.

/space/pressure_discr_order (int)

/space/pressure_discr_order\n
Lagrange element order for the space for the pressure unknown, for all elements.

Default: 1

/space/basis_type (string)

/space/basis_type\n
Type of basis to use for non polygonal element, one of Lagrange, Spline, or Serendipity. Spline or Serendipity work only for quad/hex meshes

Default: 'Lagrange'

Options: ['Lagrange', 'Spline', 'Serendipity']

/space/poly_basis_type (string)

/space/poly_basis_type\n
Type of basis to use for a polygonal element, one of MFSHarmonic, MeanValue, or Wachspress see \u2018PolySpline..\u2019 paper for details.

Default: 'MFSHarmonic'

Options: ['MFSHarmonic', 'MeanValue', 'Wachspress']

/space/use_p_ref (bool)

/space/use_p_ref\n
Perform a priori p-refinement based on element shape, as described in \u2018Decoupling..\u2019 paper.

Default: False

/space/remesh (object)

/space/remesh\n
Settings for adaptive remeshing

Default: None

/space/remesh/enabled (bool)

/space/remesh/enabled\n
Whether to do adaptive remeshing

Default: False

/space/remesh/split (object)

/space/remesh/split\n
Settings for adaptive remeshing edge splitting operations

Default: None

/space/remesh/split/enabled (bool)

/space/remesh/split/enabled\n
Whether to do edge splitting in adaptive remeshing

Default: True

/space/remesh/split/acceptance_tolerance (float)

/space/remesh/split/acceptance_tolerance\n
Accept split operation if energy decreased by at least x

Default: 0.001

Range: [0, inf]

/space/remesh/split/culling_threshold (float)

/space/remesh/split/culling_threshold\n
Split operation culling threshold on energy

Default: 0.95

Range: [0, 1]

/space/remesh/split/max_depth (int)

/space/remesh/split/max_depth\n
Maximum depth split per time-step

Default: 3

Range: [1, inf]

/space/remesh/split/min_edge_length (float)

/space/remesh/split/min_edge_length\n
Minimum edge length to split

Default: 1e-06

Range: [0, inf]

/space/remesh/collapse (object)

/space/remesh/collapse\n
Settings for adaptive remeshing edge collapse operations

Default: None

/space/remesh/collapse/enabled (bool)

/space/remesh/collapse/enabled\n
Whether to do edge collapse in adaptive remeshing

Default: True

/space/remesh/collapse/acceptance_tolerance (float)

/space/remesh/collapse/acceptance_tolerance\n
Accept collapse operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/collapse/culling_threshold (float)

/space/remesh/collapse/culling_threshold\n
Collapse operation culling threshold on energy

Default: 0.01

Range: [0, 1]

/space/remesh/collapse/max_depth (int)

/space/remesh/collapse/max_depth\n
Maximum depth collapse per time-step

Default: 3

Range: [1, inf]

/space/remesh/collapse/rel_max_edge_length (float)

/space/remesh/collapse/rel_max_edge_length\n
Length of maximum edge length to collapse relative to initial minimum edge length

Default: 1

Range: [0, inf]

/space/remesh/collapse/abs_max_edge_length (float)

/space/remesh/collapse/abs_max_edge_length\n
Length of maximum edge length to collapse in absolute units of distance

Default: 1e+100

Range: [0, inf]

/space/remesh/swap (object)

/space/remesh/swap\n
Settings for adaptive remeshing edge/face swap operations

Default: None

/space/remesh/swap/enabled (bool)

/space/remesh/swap/enabled\n
Whether to do edge/face swap in adaptive remeshing

Default: False

/space/remesh/swap/acceptance_tolerance (float)

/space/remesh/swap/acceptance_tolerance\n
Accept swap operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/swap/max_depth (int)

/space/remesh/swap/max_depth\n
Maximum depth swap per time-step

Default: 3

Range: [1, inf]

/space/remesh/smooth (object)

/space/remesh/smooth\n
Settings for adaptive remeshing vertex smoothing operations

Default: None

/space/remesh/smooth/enabled (bool)

/space/remesh/smooth/enabled\n
Whether to do vertex smoothing in adaptive remeshing

Default: False

/space/remesh/smooth/acceptance_tolerance (float)

/space/remesh/smooth/acceptance_tolerance\n
Accept smooth operation if energy decreased by at least x

Default: -1e-08

Range: [-inf, 0]

/space/remesh/smooth/max_iters (int)

/space/remesh/smooth/max_iters\n
Maximum number of smoothing iterations per time-step

Default: 1

Range: [1, inf]

/space/remesh/local_relaxation (object)

/space/remesh/local_relaxation\n
Settings for adaptive remeshing local relaxation

Default: None

/space/remesh/local_relaxation/local_mesh_n_ring (int)

/space/remesh/local_relaxation/local_mesh_n_ring\n
Size of n-ring for local relaxation

Default: 2

/space/remesh/local_relaxation/local_mesh_rel_area (float)

/space/remesh/local_relaxation/local_mesh_rel_area\n
Minimum area for local relaxation

Default: 0.01

/space/remesh/local_relaxation/max_nl_iterations (int)

/space/remesh/local_relaxation/max_nl_iterations\n
Maximum number of nonlinear solver iterations before acceptance check

Default: 1

/space/remesh/type (string)

/space/remesh/type\n
Type of adaptive remeshing to use.

Default: 'physics'

Options: ['physics', 'sizing_field']

/space/advanced (object)

/space/advanced\n
Advanced settings for the FE space.

Default: None

/space/advanced/discr_order_max (int)

/space/advanced/discr_order_max\n
Maximal discretization order in adaptive p-refinement and hp-refinement

Default: 4

/space/advanced/isoparametric (bool)

/space/advanced/isoparametric\n
Forces geometric map basis to be the same degree as the main variable basis, irrespective of the degree associated with the geom. map degrees associated with the elements of the geometry.

Default: False

/space/advanced/bc_method (string)

/space/advanced/bc_method\n
Method for imposing analytic Dirichet boundary conditions. If \u2018lsq\u2019 (least-squares fit), then the bc function is sampled at quadrature points, and the FEspace nodal values on the boundary are determined by minimizing L2 norm of the difference. If \u2018sample\u2019, then the analytic bc function is sampled at the boundary nodes.

Default: 'sample'

Options: ['lsq', 'sample']

/space/advanced/n_boundary_samples (int)

/space/advanced/n_boundary_samples\n
Per-element number of boundary samples for analytic Dirichlet and Neumann boundary conditions.

Default: -1

/space/advanced/quadrature_order (int)

/space/advanced/quadrature_order\n
Minimal quadrature order to use in matrix and rhs assembly; the actual order is determined as min(2*(p-1)+1,quadrature_order).

Default: -1

/space/advanced/mass_quadrature_order (int)

/space/advanced/mass_quadrature_order\n
Minimal quadrature order to use in mass matrix assembler; the actual order is determined as min(2*p+1,quadrature_order)

Default: -1

/space/advanced/integral_constraints (int)

/space/advanced/integral_constraints\n
Number of constraints for non-conforming polygonal basis; 0, 1, or 2; see \u2018PolySpline..\u2019 paper for details.

Default: 2

/space/advanced/n_harmonic_samples (int)

/space/advanced/n_harmonic_samples\n
If MFSHarmonics is used for a polygonal element, number of collocation samples used in the basis construction;see \u2018PolySpline..\u2019 paper for details.

Default: 10

/space/advanced/force_no_ref_for_harmonic (bool)

/space/advanced/force_no_ref_for_harmonic\n
If true, do not do uniform global refinement if the mesh contains polygonal elements.

Default: False

/space/advanced/B (int)

/space/advanced/B\n
The target deviation of the error on elements from perfect element error, for a priori geometry-dependent p-refinement, see \u2018Decoupling .. \u2018 paper.

Default: 3

/space/advanced/h1_formula (bool)

/space/advanced/h1_formula\n

Default: False

/space/advanced/count_flipped_els (bool)

/space/advanced/count_flipped_els\n
Count the number of elements with Jacobian of the geometric map not positive at quadrature points.

Default: True

/space/advanced/use_particle_advection (bool)

/space/advanced/use_particle_advection\n
Use particle advection in splitting method for solving NS equation.

Default: False

/time
/time\n
/time (object)/time (object)/time (object)

The time parameters: start time t0, end time tend, time step dt.

Default: 'skip'

/time/tend (float)

/time/tend\n
Ending time

Range: [0, inf]

/time/dt (float)

/time/dt\n
Time step size \\(\\Delta t\\)

Range: [0, inf]

/time/t0 (float)

/time/t0\n
Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Implicit Euler time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Backwards differentiation formula time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/steps (int)

/time/integrator/steps\n
BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Implicit Newmark time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/gamma (float)

/time/integrator/gamma\n
Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Ignore inertia in time dependent. Used for doing incremental load.

Default: False

The time parameters: start time t0, time step dt, number of time steps.

/time/time_steps (int)

/time/time_steps\n
Number of time steps

Range: [0, inf]

/time/dt (float)

/time/dt\n
Time step size \\(\\Delta t\\)

Range: [0, inf]

/time/t0 (float)

/time/t0\n
Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Implicit Euler time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Backwards differentiation formula time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/steps (int)

/time/integrator/steps\n
BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Implicit Newmark time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/gamma (float)

/time/integrator/gamma\n
Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Ignore inertia in time dependent. Used for doing incremental load.

Default: False

The time parameters: start time t0, end time tend, number of time steps.

/time/time_steps (int)

/time/time_steps\n
Number of time steps

Range: [0, inf]

/time/tend (float)

/time/tend\n
Ending time

Range: [0, inf]

/time/t0 (float)

/time/t0\n
Startning time

Default: 0

Range: [0, inf]

/time/integrator
/time/integrator\n
/time/integrator (string)ImplicitEulerBDFImplicitNewmark

Time integrator

Default: 'ImplicitEuler'

Options: ['ImplicitEuler', 'BDF1', 'BDF2', 'BDF3', 'BDF4', 'BDF5', 'BDF6', 'ImplicitNewmark']

Type: ImplicitEuler Implicit Euler time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

Type: BDF Backwards differentiation formula time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/steps (int)

/time/integrator/steps\n
BDF order

Default: 1

Range: [1, 6]

Type: ImplicitNewmark Implicit Newmark time integration

/time/integrator/type (string)

/time/integrator/type\n
Type of time integrator to use

Options: ['ImplicitEuler', 'BDF', 'ImplicitNewmark']

/time/integrator/gamma (float)

/time/integrator/gamma\n
Newmark gamma

Default: 0.5

Range: [0, 1]

/time/integrator/beta (float)

/time/integrator/beta\n
Newmark beta

Default: 0.25

Range: [0, 0.5]

/time/quasistatic (bool)

/time/quasistatic\n
Ignore inertia in time dependent. Used for doing incremental load.

Default: False

/contact (object)

/contact\n
Contact handling parameters.

Default: None

/contact/enabled (bool)

/contact/enabled\n
True if contact handling is enabled.

Default: False

/contact/dhat (float)

/contact/dhat\n
Contact barrier activation distance.

Default: 0.001

Range: [0, inf]

/contact/dhat_percentage (float)

/contact/dhat_percentage\n
\\(\\hat{d}\\) as percentage of the diagonal of the bounding box

Default: 0.8

/contact/epsv (float)

/contact/epsv\n
Friction smoothing parameter.

Default: 0.001

Range: [0, inf]

/contact/friction_coefficient (float)

/contact/friction_coefficient\n
Coefficient of friction (global)

Default: 0

/contact/use_convergent_formulation (bool)

/contact/use_convergent_formulation\n
Whether to use the convergent (area weighted) formulation of IPC.

Default: False

/contact/collision_mesh
/contact/collision_mesh\n
/contact/collision_mesh (object)/contact/collision_mesh (object)

Load a preconstructed collision mesh.

Default: 'skip'

/contact/collision_mesh/mesh (string)

/contact/collision_mesh/mesh\n
Path to preconstructed collision mesh.

/contact/collision_mesh/linear_map (string)

/contact/collision_mesh/linear_map\n
HDF file storing the linear mapping of displacements.

/contact/collision_mesh/enabled (bool)

/contact/collision_mesh/enabled\n

Default: True

Construct a collision mesh with a maximum edge length.

/contact/collision_mesh/max_edge_length (float)

/contact/collision_mesh/max_edge_length\n
Maximum edge length to use for building the collision mesh.

/contact/collision_mesh/tessellation_type (string)

/contact/collision_mesh/tessellation_type\n
Type of tessellation to use for building the collision mesh.

Default: 'regular'

Options: ['regular', 'irregular']

/contact/collision_mesh/enabled (bool)

/contact/collision_mesh/enabled\n

Default: True

/contact/periodic (bool)

/contact/periodic\n
Set to true to check collision between adjacent periodic cells.

Default: False

/solver (object)

/solver\n
The settings for the solver including linear solver, nonlinear solver, and some advanced options.

Default: None

/solver/max_threads (int)

/solver/max_threads\n
Maximum number of threads used; 0 is unlimited.

Default: 0

Range: [0, inf]

/solver/linear (object)

/solver/linear\n
Settings for the linear solver.

Default: None

/solver/linear/enable_overwrite_solver (bool)

/solver/linear/enable_overwrite_solver\n
If solver name is not present, falls back to default

Default: False

/solver/linear/solver (string)

/solver/linear/solver\n
Linear solver type.

Default: ''

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

/solver/linear/precond (string)

/solver/linear/precond\n
Preconditioner used if using an iterative linear solver.

Default: ''

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

/solver/linear/Eigen::LeastSquaresConjugateGradient (object)

/solver/linear/Eigen::LeastSquaresConjugateGradient\n
Settings for the Eigen\u2019s Least Squares Conjugate Gradient solver.

Default: None

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter (int)

/solver/linear/Eigen::LeastSquaresConjugateGradient/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance (float)

/solver/linear/Eigen::LeastSquaresConjugateGradient/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::DGMRES (object)

/solver/linear/Eigen::DGMRES\n
Settings for the Eigen\u2019s DGMRES solver.

Default: None

/solver/linear/Eigen::DGMRES/max_iter (int)

/solver/linear/Eigen::DGMRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::DGMRES/tolerance (float)

/solver/linear/Eigen::DGMRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::ConjugateGradient (object)

/solver/linear/Eigen::ConjugateGradient\n
Settings for the Eigen\u2019s Conjugate Gradient solver.

Default: None

/solver/linear/Eigen::ConjugateGradient/max_iter (int)

/solver/linear/Eigen::ConjugateGradient/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::ConjugateGradient/tolerance (float)

/solver/linear/Eigen::ConjugateGradient/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::BiCGSTAB (object)

/solver/linear/Eigen::BiCGSTAB\n
Settings for the Eigen\u2019s BiCGSTAB solver.

Default: None

/solver/linear/Eigen::BiCGSTAB/max_iter (int)

/solver/linear/Eigen::BiCGSTAB/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::BiCGSTAB/tolerance (float)

/solver/linear/Eigen::BiCGSTAB/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::GMRES (object)

/solver/linear/Eigen::GMRES\n
Settings for the Eigen\u2019s GMRES solver.

Default: None

/solver/linear/Eigen::GMRES/max_iter (int)

/solver/linear/Eigen::GMRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::GMRES/tolerance (float)

/solver/linear/Eigen::GMRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Eigen::MINRES (object)

/solver/linear/Eigen::MINRES\n
Settings for the Eigen\u2019s MINRES solver.

Default: None

/solver/linear/Eigen::MINRES/max_iter (int)

/solver/linear/Eigen::MINRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Eigen::MINRES/tolerance (float)

/solver/linear/Eigen::MINRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/linear/Pardiso (object)

/solver/linear/Pardiso\n
Settings for the Pardiso solver.

Default: None

/solver/linear/Pardiso/mtype (int)

/solver/linear/Pardiso/mtype\n
Matrix type.

Default: 11

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

/solver/linear/Hypre (object)

/solver/linear/Hypre\n
Settings for the Hypre solver.

Default: None

/solver/linear/Hypre/max_iter (int)

/solver/linear/Hypre/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/linear/Hypre/pre_max_iter (int)

/solver/linear/Hypre/pre_max_iter\n
Maximum number of pre iterations.

Default: 1

/solver/linear/Hypre/tolerance (float)

/solver/linear/Hypre/tolerance\n
Convergence tolerance.

Default: 1e-10

/solver/linear/AMGCL (object)

/solver/linear/AMGCL\n
Settings for the AMGCL solver.

Default: None

/solver/linear/AMGCL/solver (object)

/solver/linear/AMGCL/solver\n
Solver settings for the AMGCL.

Default: None

/solver/linear/AMGCL/solver/tol (float)

/solver/linear/AMGCL/solver/tol\n
Convergence tolerance.

Default: 1e-10

/solver/linear/AMGCL/solver/maxiter (int)

/solver/linear/AMGCL/solver/maxiter\n
Maximum number of iterations.

Default: 1000

/solver/linear/AMGCL/solver/type (string)

/solver/linear/AMGCL/solver/type\n
Type of solver to use.

Default: 'cg'

/solver/linear/AMGCL/precond (object)

/solver/linear/AMGCL/precond\n
Preconditioner settings for the AMGCL.

Default: None

/solver/linear/AMGCL/precond/relax (object)

/solver/linear/AMGCL/precond/relax\n
Preconditioner settings for the AMGCL.

Default: None

/solver/linear/AMGCL/precond/relax/degree (int)

/solver/linear/AMGCL/precond/relax/degree\n
Degree of the polynomial.

Default: 16

/solver/linear/AMGCL/precond/relax/type (string)

/solver/linear/AMGCL/precond/relax/type\n
Type of relaxation to use.

Default: 'chebyshev'

/solver/linear/AMGCL/precond/relax/power_iters (int)

/solver/linear/AMGCL/precond/relax/power_iters\n
Number of power iterations.

Default: 100

/solver/linear/AMGCL/precond/relax/higher (float)

/solver/linear/AMGCL/precond/relax/higher\n
Higher level relaxation.

Default: 2

/solver/linear/AMGCL/precond/relax/lower (float)

/solver/linear/AMGCL/precond/relax/lower\n
Lower level relaxation.

Default: 0.008333333333

/solver/linear/AMGCL/precond/relax/scale (bool)

/solver/linear/AMGCL/precond/relax/scale\n
Scale.

Default: True

/solver/linear/AMGCL/precond/class (string)

/solver/linear/AMGCL/precond/class\n
Type of preconditioner to use.

Default: 'amg'

/solver/linear/AMGCL/precond/max_levels (int)

/solver/linear/AMGCL/precond/max_levels\n
Maximum number of levels.

Default: 6

/solver/linear/AMGCL/precond/direct_coarse (bool)

/solver/linear/AMGCL/precond/direct_coarse\n
Use direct solver for the coarsest level.

Default: False

/solver/linear/AMGCL/precond/ncycle (int)

/solver/linear/AMGCL/precond/ncycle\n
Number of cycles.

Default: 2

/solver/linear/AMGCL/precond/coarsening (object)

/solver/linear/AMGCL/precond/coarsening\n
Coarsening parameters.

Default: None

/solver/linear/AMGCL/precond/coarsening/type (string)

/solver/linear/AMGCL/precond/coarsening/type\n
Coarsening type.

Default: 'smoothed_aggregation'

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool)

/solver/linear/AMGCL/precond/coarsening/estimate_spectral_radius\n
Should the spectral radius be estimated.

Default: True

/solver/linear/AMGCL/precond/coarsening/relax (float)

/solver/linear/AMGCL/precond/coarsening/relax\n
Coarsening relaxation.

Default: 1

/solver/linear/AMGCL/precond/coarsening/aggr (object)

/solver/linear/AMGCL/precond/coarsening/aggr\n
Aggregation settings.

Default: None

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong (float)

/solver/linear/AMGCL/precond/coarsening/aggr/eps_strong\n
Aggregation epsilon strong.

Default: 0

/solver/adjoint_linear (object)

/solver/adjoint_linear\n
Settings for the linear solver.

Default: None

/solver/adjoint_linear/enable_overwrite_solver (bool)

/solver/adjoint_linear/enable_overwrite_solver\n
If solver name is not present, falls back to default

Default: False

/solver/adjoint_linear/solver (string)

/solver/adjoint_linear/solver\n
Linear solver type.

Default: ''

Options: ['Eigen::SimplicialLDLT', 'Eigen::SparseLU', 'Eigen::CholmodSupernodalLLT', 'Eigen::UmfPackLU', 'Eigen::SuperLU', 'Eigen::PardisoLDLT', 'Eigen::PardisoLLT', 'Eigen::PardisoLU', 'Pardiso', 'Hypre', 'AMGCL', 'Eigen::LeastSquaresConjugateGradient', 'Eigen::DGMRES', 'Eigen::ConjugateGradient', 'Eigen::BiCGSTAB', 'Eigen::GMRES', 'Eigen::MINRES']

/solver/adjoint_linear/precond (string)

/solver/adjoint_linear/precond\n
Preconditioner used if using an iterative linear solver.

Default: ''

Options: ['Eigen::IdentityPreconditioner', 'Eigen::DiagonalPreconditioner', 'Eigen::IncompleteCholesky', 'Eigen::LeastSquareDiagonalPreconditioner', 'Eigen::IncompleteLUT']

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient (object)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient\n
Settings for the Eigen\u2019s Least Squares Conjugate Gradient solver.

Default: None

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter (int)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance (float)

/solver/adjoint_linear/Eigen::LeastSquaresConjugateGradient/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::DGMRES (object)

/solver/adjoint_linear/Eigen::DGMRES\n
Settings for the Eigen\u2019s DGMRES solver.

Default: None

/solver/adjoint_linear/Eigen::DGMRES/max_iter (int)

/solver/adjoint_linear/Eigen::DGMRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::DGMRES/tolerance (float)

/solver/adjoint_linear/Eigen::DGMRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::ConjugateGradient (object)

/solver/adjoint_linear/Eigen::ConjugateGradient\n
Settings for the Eigen\u2019s Conjugate Gradient solver.

Default: None

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter (int)

/solver/adjoint_linear/Eigen::ConjugateGradient/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance (float)

/solver/adjoint_linear/Eigen::ConjugateGradient/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::BiCGSTAB (object)

/solver/adjoint_linear/Eigen::BiCGSTAB\n
Settings for the Eigen\u2019s BiCGSTAB solver.

Default: None

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter (int)

/solver/adjoint_linear/Eigen::BiCGSTAB/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance (float)

/solver/adjoint_linear/Eigen::BiCGSTAB/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::GMRES (object)

/solver/adjoint_linear/Eigen::GMRES\n
Settings for the Eigen\u2019s GMRES solver.

Default: None

/solver/adjoint_linear/Eigen::GMRES/max_iter (int)

/solver/adjoint_linear/Eigen::GMRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::GMRES/tolerance (float)

/solver/adjoint_linear/Eigen::GMRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Eigen::MINRES (object)

/solver/adjoint_linear/Eigen::MINRES\n
Settings for the Eigen\u2019s MINRES solver.

Default: None

/solver/adjoint_linear/Eigen::MINRES/max_iter (int)

/solver/adjoint_linear/Eigen::MINRES/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Eigen::MINRES/tolerance (float)

/solver/adjoint_linear/Eigen::MINRES/tolerance\n
Convergence tolerance.

Default: 1e-12

/solver/adjoint_linear/Pardiso (object)

/solver/adjoint_linear/Pardiso\n
Settings for the Pardiso solver.

Default: None

/solver/adjoint_linear/Pardiso/mtype (int)

/solver/adjoint_linear/Pardiso/mtype\n
Matrix type.

Default: 11

Options: [1, 2, -2, 3, 4, -4, 6, 11, 13]

/solver/adjoint_linear/Hypre (object)

/solver/adjoint_linear/Hypre\n
Settings for the Hypre solver.

Default: None

/solver/adjoint_linear/Hypre/max_iter (int)

/solver/adjoint_linear/Hypre/max_iter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/Hypre/pre_max_iter (int)

/solver/adjoint_linear/Hypre/pre_max_iter\n
Maximum number of pre iterations.

Default: 1

/solver/adjoint_linear/Hypre/tolerance (float)

/solver/adjoint_linear/Hypre/tolerance\n
Convergence tolerance.

Default: 1e-10

/solver/adjoint_linear/AMGCL (object)

/solver/adjoint_linear/AMGCL\n
Settings for the AMGCL solver.

Default: None

/solver/adjoint_linear/AMGCL/solver (object)

/solver/adjoint_linear/AMGCL/solver\n
Solver settings for the AMGCL.

Default: None

/solver/adjoint_linear/AMGCL/solver/tol (float)

/solver/adjoint_linear/AMGCL/solver/tol\n
Convergence tolerance.

Default: 1e-10

/solver/adjoint_linear/AMGCL/solver/maxiter (int)

/solver/adjoint_linear/AMGCL/solver/maxiter\n
Maximum number of iterations.

Default: 1000

/solver/adjoint_linear/AMGCL/solver/type (string)

/solver/adjoint_linear/AMGCL/solver/type\n
Type of solver to use.

Default: 'cg'

/solver/adjoint_linear/AMGCL/precond (object)

/solver/adjoint_linear/AMGCL/precond\n
Preconditioner settings for the AMGCL.

Default: None

/solver/adjoint_linear/AMGCL/precond/relax (object)

/solver/adjoint_linear/AMGCL/precond/relax\n
Preconditioner settings for the AMGCL.

Default: None

/solver/adjoint_linear/AMGCL/precond/relax/degree (int)

/solver/adjoint_linear/AMGCL/precond/relax/degree\n
Degree of the polynomial.

Default: 16

/solver/adjoint_linear/AMGCL/precond/relax/type (string)

/solver/adjoint_linear/AMGCL/precond/relax/type\n
Type of relaxation to use.

Default: 'chebyshev'

/solver/adjoint_linear/AMGCL/precond/relax/power_iters (int)

/solver/adjoint_linear/AMGCL/precond/relax/power_iters\n
Number of power iterations.

Default: 100

/solver/adjoint_linear/AMGCL/precond/relax/higher (float)

/solver/adjoint_linear/AMGCL/precond/relax/higher\n
Higher level relaxation.

Default: 2

/solver/adjoint_linear/AMGCL/precond/relax/lower (float)

/solver/adjoint_linear/AMGCL/precond/relax/lower\n
Lower level relaxation.

Default: 0.008333333333

/solver/adjoint_linear/AMGCL/precond/relax/scale (bool)

/solver/adjoint_linear/AMGCL/precond/relax/scale\n
Scale.

Default: True

/solver/adjoint_linear/AMGCL/precond/class (string)

/solver/adjoint_linear/AMGCL/precond/class\n
Type of preconditioner to use.

Default: 'amg'

/solver/adjoint_linear/AMGCL/precond/max_levels (int)

/solver/adjoint_linear/AMGCL/precond/max_levels\n
Maximum number of levels.

Default: 6

/solver/adjoint_linear/AMGCL/precond/direct_coarse (bool)

/solver/adjoint_linear/AMGCL/precond/direct_coarse\n
Use direct solver for the coarsest level.

Default: False

/solver/adjoint_linear/AMGCL/precond/ncycle (int)

/solver/adjoint_linear/AMGCL/precond/ncycle\n
Number of cycles.

Default: 2

/solver/adjoint_linear/AMGCL/precond/coarsening (object)

/solver/adjoint_linear/AMGCL/precond/coarsening\n
Coarsening parameters.

Default: None

/solver/adjoint_linear/AMGCL/precond/coarsening/type (string)

/solver/adjoint_linear/AMGCL/precond/coarsening/type\n
Coarsening type.

Default: 'smoothed_aggregation'

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius (bool)

/solver/adjoint_linear/AMGCL/precond/coarsening/estimate_spectral_radius\n
Should the spectral radius be estimated.

Default: True

/solver/adjoint_linear/AMGCL/precond/coarsening/relax (float)

/solver/adjoint_linear/AMGCL/precond/coarsening/relax\n
Coarsening relaxation.

Default: 1

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr (object)

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr\n
Aggregation settings.

Default: None

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong (float)

/solver/adjoint_linear/AMGCL/precond/coarsening/aggr/eps_strong\n
Aggregation epsilon strong.

Default: 0

/solver/nonlinear (object)

/solver/nonlinear\n
Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

Default: None

/solver/nonlinear/solver
/solver/nonlinear/solver\n
/solver/nonlinear/solver (string)/solver/nonlinear/solver (list)

Nonlinear solver type

Default: 'Newton'

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

List of solvers for ballback. Eg, [{\u2018type\u2019:\u2019Newton\u2019}, {\u2018type\u2019:\u2019L-BFGS\u2019}, {\u2018type\u2019:\u2019GradientDescent\u2019}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

/solver/nonlinear/solver/*
/solver/nonlinear/solver/*\n
NewtonProjectedNewtonRegularizedNewtonRegularizedProjectedNewtonDenseNewtonDenseProjectedNewtonDenseRegularizedNewtonDenseRegularizedProjectedNewtonGradientDescentStochasticGradientDescentL-BFGSBFGSADAMStochasticADAM

Type: Newton Options for Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: ProjectedNewton Options for projected Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: RegularizedNewton Options for regularized Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: RegularizedProjectedNewton Options for regularized projected Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: DenseNewton Options for Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseProjectedNewton Options for projected Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseRegularizedNewton Options for regularized Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: DenseRegularizedProjectedNewton Options for projected regularized Newton.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/residual_tolerance (float)

/solver/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/solver/*/reg_weight_min (float)

/solver/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/solver/*/reg_weight_max (float)

/solver/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/solver/*/reg_weight_inc (float)

/solver/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: GradientDescent Options for Gradient Descent.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: StochasticGradientDescent Options for Stochastic Gradient Descent.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/erase_component_probability (float)

/solver/nonlinear/solver/*/erase_component_probability\n
Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

Type: L-BFGS Options for L-BFGS.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/history_size (int)

/solver/nonlinear/solver/*/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

Type: BFGS Options for BFGS.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: ADAM Options for ADAM.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/alpha (float)

/solver/nonlinear/solver/*/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/solver/*/beta_1 (float)

/solver/nonlinear/solver/*/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/solver/*/beta_2 (float)

/solver/nonlinear/solver/*/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/solver/*/epsilon (float)

/solver/nonlinear/solver/*/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

Type: StochasticADAM Options for ADAM.

/solver/nonlinear/solver/*/type (string)

/solver/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/nonlinear/solver/*/alpha (float)

/solver/nonlinear/solver/*/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/solver/*/beta_1 (float)

/solver/nonlinear/solver/*/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/solver/*/beta_2 (float)

/solver/nonlinear/solver/*/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/solver/*/epsilon (float)

/solver/nonlinear/solver/*/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/solver/*/erase_component_probability (float)

/solver/nonlinear/solver/*/erase_component_probability\n
Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

/solver/nonlinear/x_delta (float)

/solver/nonlinear/x_delta\n
Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

Default: 0

Range: [0, inf]

/solver/nonlinear/grad_norm (float)

/solver/nonlinear/grad_norm\n
Stopping criterion: Minimal gradient norm for the iterations to continue.

Default: 1e-08

Range: [0, inf]

/solver/nonlinear/first_grad_norm_tol (float)

/solver/nonlinear/first_grad_norm_tol\n
Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

Default: 1e-10

/solver/nonlinear/max_iterations (int)

/solver/nonlinear/max_iterations\n
Maximum number of iterations for a nonlinear solve.

Default: 500

/solver/nonlinear/iterations_per_strategy
/solver/nonlinear/iterations_per_strategy\n
/solver/nonlinear/iterations_per_strategy (int)/solver/nonlinear/iterations_per_strategy (list)

Number of iterations for every substrategy before reset.

Default: 5

Number of iterations for every substrategy before reset.

/solver/nonlinear/iterations_per_strategy/* (int)

/solver/nonlinear/iterations_per_strategy/*\n
Number of iterations for every substrategy before reset.

Default: 5

/solver/nonlinear/line_search (object)

/solver/nonlinear/line_search\n
Settings for line-search in the nonlinear solver

Default: None

/solver/nonlinear/line_search/method (string)

/solver/nonlinear/line_search/method\n
Line-search type

Default: 'RobustArmijo'

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

/solver/nonlinear/line_search/use_grad_norm_tol (float)

/solver/nonlinear/line_search/use_grad_norm_tol\n
When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

Default: 1e-06

/solver/nonlinear/line_search/min_step_size (float)

/solver/nonlinear/line_search/min_step_size\n
Mimimum step size

Default: 1e-10

/solver/nonlinear/line_search/max_step_size_iter (int)

/solver/nonlinear/line_search/max_step_size_iter\n
Number of iterations

Default: 30

/solver/nonlinear/line_search/min_step_size_final (float)

/solver/nonlinear/line_search/min_step_size_final\n
Mimimum step size for last descent strategy

Default: 1e-20

/solver/nonlinear/line_search/max_step_size_iter_final (int)

/solver/nonlinear/line_search/max_step_size_iter_final\n
Number of iterations for last descent strategy

Default: 100

/solver/nonlinear/line_search/default_init_step_size (float)

/solver/nonlinear/line_search/default_init_step_size\n
Initial step size

Default: 1

/solver/nonlinear/line_search/step_ratio (float)

/solver/nonlinear/line_search/step_ratio\n
Ratio used to decrease the step

Default: 0.5

/solver/nonlinear/line_search/Armijo (object)

/solver/nonlinear/line_search/Armijo\n
Options for Armijo.

Default: None

/solver/nonlinear/line_search/Armijo/c (float)

/solver/nonlinear/line_search/Armijo/c\n
Armijo c parameter.

Default: 0.0001

/solver/nonlinear/line_search/RobustArmijo (object)

/solver/nonlinear/line_search/RobustArmijo\n
Options for RobustArmijo.

Default: None

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float)

/solver/nonlinear/line_search/RobustArmijo/delta_relative_tolerance\n
Relative tolerance on E to switch to approximate.

Default: 0.1

/solver/nonlinear/allow_out_of_iterations (bool)

/solver/nonlinear/allow_out_of_iterations\n
If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

Default: False

/solver/nonlinear/L-BFGS (object)

/solver/nonlinear/L-BFGS\n
Options for LBFGS.

Default: None

/solver/nonlinear/L-BFGS/history_size (int)

/solver/nonlinear/L-BFGS/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/nonlinear/L-BFGS-B (object)

/solver/nonlinear/L-BFGS-B\n
Options for the boxed L-BFGS.

Default: None

/solver/nonlinear/L-BFGS-B/history_size (int)

/solver/nonlinear/L-BFGS-B/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/nonlinear/Newton (object)

/solver/nonlinear/Newton\n
Options for Newton.

Default: None

/solver/nonlinear/Newton/residual_tolerance (float)

/solver/nonlinear/Newton/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/nonlinear/Newton/reg_weight_min (float)

/solver/nonlinear/Newton/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/nonlinear/Newton/reg_weight_max (float)

/solver/nonlinear/Newton/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/nonlinear/Newton/reg_weight_inc (float)

/solver/nonlinear/Newton/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

/solver/nonlinear/Newton/force_psd_projection (bool)

/solver/nonlinear/Newton/force_psd_projection\n
Force the Hessian to be PSD when using second order solvers (i.e., Newton\u2019s method).

Default: False

/solver/nonlinear/Newton/use_psd_projection (bool)

/solver/nonlinear/Newton/use_psd_projection\n
Use PSD as fallback using second order solvers (i.e., Newton\u2019s method).

Default: True

/solver/nonlinear/Newton/use_psd_projection_in_regularized (bool)

/solver/nonlinear/Newton/use_psd_projection_in_regularized\n
Use PSD in regularized Newton.

Default: True

/solver/nonlinear/ADAM (object)

/solver/nonlinear/ADAM\n
Options for ADAM.

Default: None

/solver/nonlinear/ADAM/alpha (float)

/solver/nonlinear/ADAM/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/ADAM/beta_1 (float)

/solver/nonlinear/ADAM/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/ADAM/beta_2 (float)

/solver/nonlinear/ADAM/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/ADAM/epsilon (float)

/solver/nonlinear/ADAM/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/StochasticADAM (object)

/solver/nonlinear/StochasticADAM\n
Options for ADAM.

Default: None

/solver/nonlinear/StochasticADAM/alpha (float)

/solver/nonlinear/StochasticADAM/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/nonlinear/StochasticADAM/beta_1 (float)

/solver/nonlinear/StochasticADAM/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/nonlinear/StochasticADAM/beta_2 (float)

/solver/nonlinear/StochasticADAM/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/nonlinear/StochasticADAM/epsilon (float)

/solver/nonlinear/StochasticADAM/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/nonlinear/StochasticADAM/erase_component_probability (float)

/solver/nonlinear/StochasticADAM/erase_component_probability\n
Probability of erasing a component on the gradient for ADAM.

Default: 0.3

/solver/nonlinear/StochasticGradientDescent (object)

/solver/nonlinear/StochasticGradientDescent\n
Options for Stochastic Gradient Descent.

Default: None

/solver/nonlinear/StochasticGradientDescent/erase_component_probability (float)

/solver/nonlinear/StochasticGradientDescent/erase_component_probability\n
Probability of erasing a component on the gradient for StochasticGradientDescent.

Default: 0.3

/solver/nonlinear/box_constraints (object)

/solver/nonlinear/box_constraints\n
FIXME: Missing documentation in the specification.

Default: None

/solver/nonlinear/box_constraints/bounds (list)

/solver/nonlinear/box_constraints/bounds\n
Box constraints on optimization variables.

/solver/nonlinear/box_constraints/bounds/*
/solver/nonlinear/box_constraints/bounds/*\n
/solver/nonlinear/box_constraints/bounds/* (list)/solver/nonlinear/box_constraints/bounds/* (float)

Box constraint values on optimization variables.

/solver/nonlinear/box_constraints/bounds/*/* (float)

/solver/nonlinear/box_constraints/bounds/*/*\n
Box constraint values on optimization variables.

Box constraint values on optimization variables.

/solver/nonlinear/box_constraints/max_change
/solver/nonlinear/box_constraints/max_change\n
/solver/nonlinear/box_constraints/max_change (float)/solver/nonlinear/box_constraints/max_change (list)

Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

Default: -1

Maximum change of optimization variables in one iteration, only for solvers with box constraints.

/solver/nonlinear/box_constraints/max_change/* (float)

/solver/nonlinear/box_constraints/max_change/*\n
Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

/solver/nonlinear/advanced (object)

/solver/nonlinear/advanced\n
Nonlinear solver advanced options

Default: None

/solver/nonlinear/advanced/f_delta (float)

/solver/nonlinear/advanced/f_delta\n
Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 0

Range: [0, inf]

/solver/nonlinear/advanced/f_delta_step_tol (int)

/solver/nonlinear/advanced/f_delta_step_tol\n
Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 100

/solver/nonlinear/advanced/derivative_along_delta_x_tol (float)

/solver/nonlinear/advanced/derivative_along_delta_x_tol\n
Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

Default: 0

Range: [0, inf]

/solver/nonlinear/advanced/apply_gradient_fd (string)

/solver/nonlinear/advanced/apply_gradient_fd\n
Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

Default: 'None'

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

/solver/nonlinear/advanced/gradient_fd_eps (float)

/solver/nonlinear/advanced/gradient_fd_eps\n
Expensive Option: Eps for finite difference to verify gradient of energy.

Default: 1e-07

/solver/augmented_lagrangian (object)

/solver/augmented_lagrangian\n
Parameters for the AL for imposing Dirichlet BCs. If the bc are not imposable, we add \\(w\\|u - bc\\|^2\\) to the energy (\\(u\\) is the solution at the Dirichlet nodes and \\(bc\\) are the Dirichlet values). After convergence, we try to impose bc again. The algorithm computes E + a/2*AL^2 - lambda AL, where E is the current energy (elastic, inertia, contact, etc.) and AL is the augmented Lagrangian energy. a starts at initial_weight and, in case DBC cannot be imposed, we update a as a *= scaling until max_weight. See IPC additional material

Default: None

/solver/augmented_lagrangian/initial_weight (float)

/solver/augmented_lagrangian/initial_weight\n
Initial weight for AL

Default: 1000000.0

Range: [0, inf]

/solver/augmented_lagrangian/scaling (float)

/solver/augmented_lagrangian/scaling\n
Multiplication factor

Default: 2.0

/solver/augmented_lagrangian/max_weight (float)

/solver/augmented_lagrangian/max_weight\n
Maximum weight

Default: 100000000.0

/solver/augmented_lagrangian/eta (float)

/solver/augmented_lagrangian/eta\n
Tolerance for increasing the weight or updating the lagrangian

Default: 0.99

Range: [0, 1]

/solver/augmented_lagrangian/nonlinear (object)

/solver/augmented_lagrangian/nonlinear\n
Settings for nonlinear solver. Interior-loop linear solver settings are defined in the solver/linear section.

Default: None

/solver/augmented_lagrangian/nonlinear/solver
/solver/augmented_lagrangian/nonlinear/solver\n
/solver/augmented_lagrangian/nonlinear/solver (string)/solver/augmented_lagrangian/nonlinear/solver (list)

Nonlinear solver type

Default: 'Newton'

Options: ['Newton', 'DenseNewton', 'GradientDescent', 'ADAM', 'StochasticADAM', 'StochasticGradientDescent', 'L-BFGS', 'BFGS', 'L-BFGS-B', 'MMA']

List of solvers for ballback. Eg, [{\u2018type\u2019:\u2019Newton\u2019}, {\u2018type\u2019:\u2019L-BFGS\u2019}, {\u2018type\u2019:\u2019GradientDescent\u2019}] will solve using Newton, in case of failure will fallback to L-BFGS and eventually to GradientDescent

/solver/augmented_lagrangian/nonlinear/solver/*
/solver/augmented_lagrangian/nonlinear/solver/*\n
NewtonProjectedNewtonRegularizedNewtonRegularizedProjectedNewtonDenseNewtonDenseProjectedNewtonDenseRegularizedNewtonDenseRegularizedProjectedNewtonGradientDescentStochasticGradientDescentL-BFGSBFGSADAMStochasticADAM

Type: Newton Options for Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: ProjectedNewton Options for projected Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: RegularizedNewton Options for regularized Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: RegularizedProjectedNewton Options for regularized projected Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: DenseNewton Options for Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseProjectedNewton Options for projected Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

Type: DenseRegularizedNewton Options for regularized Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: DenseRegularizedProjectedNewton Options for projected regularized Newton.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/solver/*/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/solver/*/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

Type: GradientDescent Options for Gradient Descent.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: StochasticGradientDescent Options for Stochastic Gradient Descent.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability\n
Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

Type: L-BFGS Options for L-BFGS.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/history_size (int)

/solver/augmented_lagrangian/nonlinear/solver/*/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

Type: BFGS Options for BFGS.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

Type: ADAM Options for ADAM.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float)

/solver/augmented_lagrangian/nonlinear/solver/*/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float)

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

Type: StochasticADAM Options for ADAM.

/solver/augmented_lagrangian/nonlinear/solver/*/type (string)

/solver/augmented_lagrangian/nonlinear/solver/*/type\n
Nonlinear solver type

Options: ['Newton', 'DenseNewton', 'ProjectedNewton', 'DenseProjectedNewton', 'RegularizedNewton', 'DenseRegularizedNewton', 'RegularizedProjectedNewton', 'DenseRegularizedProjectedNewton', 'GradientDescent', 'StochasticGradientDescent', 'ADAM', 'StochasticADAM', 'L-BFGS', 'BFGS']

/solver/augmented_lagrangian/nonlinear/solver/*/alpha (float)

/solver/augmented_lagrangian/nonlinear/solver/*/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/solver/*/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon (float)

/solver/augmented_lagrangian/nonlinear/solver/*/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/solver/*/erase_component_probability\n
Probability of erasing a component on the gradient for stochastic solvers.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/x_delta (float)

/solver/augmented_lagrangian/nonlinear/x_delta\n
Stopping criterion: minimal change of the variables x for the iterations to continue. Computed as the L2 norm of x divide by the time step.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/grad_norm (float)

/solver/augmented_lagrangian/nonlinear/grad_norm\n
Stopping criterion: Minimal gradient norm for the iterations to continue.

Default: 1e-08

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol (float)

/solver/augmented_lagrangian/nonlinear/first_grad_norm_tol\n
Minimal gradient norm for the iterations to not start, assume we already are at a minimum.

Default: 1e-10

/solver/augmented_lagrangian/nonlinear/max_iterations (int)

/solver/augmented_lagrangian/nonlinear/max_iterations\n
Maximum number of iterations for a nonlinear solve.

Default: 500

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy\n
/solver/augmented_lagrangian/nonlinear/iterations_per_strategy (int)/solver/augmented_lagrangian/nonlinear/iterations_per_strategy (list)

Number of iterations for every substrategy before reset.

Default: 5

Number of iterations for every substrategy before reset.

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/* (int)

/solver/augmented_lagrangian/nonlinear/iterations_per_strategy/*\n
Number of iterations for every substrategy before reset.

Default: 5

/solver/augmented_lagrangian/nonlinear/line_search (object)

/solver/augmented_lagrangian/nonlinear/line_search\n
Settings for line-search in the nonlinear solver

Default: None

/solver/augmented_lagrangian/nonlinear/line_search/method (string)

/solver/augmented_lagrangian/nonlinear/line_search/method\n
Line-search type

Default: 'RobustArmijo'

Options: ['Armijo', 'RobustArmijo', 'Backtracking', 'None']

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol (float)

/solver/augmented_lagrangian/nonlinear/line_search/use_grad_norm_tol\n
When the energy is smaller than use_grad_norm_tol, line-search uses norm of gradient instead of energy

Default: 1e-06

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size (float)

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size\n
Mimimum step size

Default: 1e-10

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter (int)

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter\n
Number of iterations

Default: 30

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final (float)

/solver/augmented_lagrangian/nonlinear/line_search/min_step_size_final\n
Mimimum step size for last descent strategy

Default: 1e-20

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final (int)

/solver/augmented_lagrangian/nonlinear/line_search/max_step_size_iter_final\n
Number of iterations for last descent strategy

Default: 100

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size (float)

/solver/augmented_lagrangian/nonlinear/line_search/default_init_step_size\n
Initial step size

Default: 1

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio (float)

/solver/augmented_lagrangian/nonlinear/line_search/step_ratio\n
Ratio used to decrease the step

Default: 0.5

/solver/augmented_lagrangian/nonlinear/line_search/Armijo (object)

/solver/augmented_lagrangian/nonlinear/line_search/Armijo\n
Options for Armijo.

Default: None

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c (float)

/solver/augmented_lagrangian/nonlinear/line_search/Armijo/c\n
Armijo c parameter.

Default: 0.0001

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo (object)

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo\n
Options for RobustArmijo.

Default: None

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance (float)

/solver/augmented_lagrangian/nonlinear/line_search/RobustArmijo/delta_relative_tolerance\n
Relative tolerance on E to switch to approximate.

Default: 0.1

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations (bool)

/solver/augmented_lagrangian/nonlinear/allow_out_of_iterations\n
If false (default), an exception will be thrown when the nonlinear solver reaches the maximum number of iterations.

Default: False

/solver/augmented_lagrangian/nonlinear/L-BFGS (object)

/solver/augmented_lagrangian/nonlinear/L-BFGS\n
Options for LBFGS.

Default: None

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size (int)

/solver/augmented_lagrangian/nonlinear/L-BFGS/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/augmented_lagrangian/nonlinear/L-BFGS-B (object)

/solver/augmented_lagrangian/nonlinear/L-BFGS-B\n
Options for the boxed L-BFGS.

Default: None

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size (int)

/solver/augmented_lagrangian/nonlinear/L-BFGS-B/history_size\n
The number of corrections to approximate the inverse Hessian matrix.

Default: 6

/solver/augmented_lagrangian/nonlinear/Newton (object)

/solver/augmented_lagrangian/nonlinear/Newton\n
Options for Newton.

Default: None

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance (float)

/solver/augmented_lagrangian/nonlinear/Newton/residual_tolerance\n
Tolerance of the linear system residual. If residual is above, the direction is rejected.

Default: 1e-05

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_min\n
Minimum regulariztion weight.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_max\n
Maximum regulariztion weight.

Default: 100000000.0

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc (float)

/solver/augmented_lagrangian/nonlinear/Newton/reg_weight_inc\n
Regulariztion weight increment.

Default: 10

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection (bool)

/solver/augmented_lagrangian/nonlinear/Newton/force_psd_projection\n
Force the Hessian to be PSD when using second order solvers (i.e., Newton\u2019s method).

Default: False

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection (bool)

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection\n
Use PSD as fallback using second order solvers (i.e., Newton\u2019s method).

Default: True

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized (bool)

/solver/augmented_lagrangian/nonlinear/Newton/use_psd_projection_in_regularized\n
Use PSD in regularized Newton.

Default: True

/solver/augmented_lagrangian/nonlinear/ADAM (object)

/solver/augmented_lagrangian/nonlinear/ADAM\n
Options for ADAM.

Default: None

/solver/augmented_lagrangian/nonlinear/ADAM/alpha (float)

/solver/augmented_lagrangian/nonlinear/ADAM/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/ADAM/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/ADAM/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon (float)

/solver/augmented_lagrangian/nonlinear/ADAM/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/StochasticADAM (object)

/solver/augmented_lagrangian/nonlinear/StochasticADAM\n
Options for ADAM.

Default: None

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/alpha\n
Parameter alpha for ADAM.

Default: 0.001

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1 (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_1\n
Parameter beta_1 for ADAM.

Default: 0.9

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2 (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/beta_2\n
Parameter beta_2 for ADAM.

Default: 0.999

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/epsilon\n
Parameter epsilon for ADAM.

Default: 1e-08

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/StochasticADAM/erase_component_probability\n
Probability of erasing a component on the gradient for ADAM.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent (object)

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent\n
Options for Stochastic Gradient Descent.

Default: None

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability (float)

/solver/augmented_lagrangian/nonlinear/StochasticGradientDescent/erase_component_probability\n
Probability of erasing a component on the gradient for StochasticGradientDescent.

Default: 0.3

/solver/augmented_lagrangian/nonlinear/box_constraints (object)

/solver/augmented_lagrangian/nonlinear/box_constraints\n
FIXME: Missing documentation in the specification.

Default: None

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds (list)

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds\n
Box constraints on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*\n
/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* (list)/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/* (float)

Box constraint values on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/* (float)

/solver/augmented_lagrangian/nonlinear/box_constraints/bounds/*/*\n
Box constraint values on optimization variables.

Box constraint values on optimization variables.

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change\n
/solver/augmented_lagrangian/nonlinear/box_constraints/max_change (float)/solver/augmented_lagrangian/nonlinear/box_constraints/max_change (list)

Maximum change of optimization variables in one iteration, only for solvers with box constraints. Negative value to disable this constraint.

Default: -1

Maximum change of optimization variables in one iteration, only for solvers with box constraints.

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/* (float)

/solver/augmented_lagrangian/nonlinear/box_constraints/max_change/*\n
Maximum change of every optimization variable in one iteration, only for solvers with box constraints.

/solver/augmented_lagrangian/nonlinear/advanced (object)

/solver/augmented_lagrangian/nonlinear/advanced\n
Nonlinear solver advanced options

Default: None

/solver/augmented_lagrangian/nonlinear/advanced/f_delta (float)

/solver/augmented_lagrangian/nonlinear/advanced/f_delta\n
Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol (int)

/solver/augmented_lagrangian/nonlinear/advanced/f_delta_step_tol\n
Dangerous Option: Quit the optimization if the solver reduces the energy by less than f_delta for consecutive f_delta_step_tol steps.

Default: 100

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol (float)

/solver/augmented_lagrangian/nonlinear/advanced/derivative_along_delta_x_tol\n
Quit the optimization if the directional derivative along the descent direction is smaller than this tolerance.

Default: 0

Range: [0, inf]

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd (string)

/solver/augmented_lagrangian/nonlinear/advanced/apply_gradient_fd\n
Expensive Option: For every iteration of the nonlinear solver, run finite difference to verify gradient of energy.

Default: 'None'

Options: ['None', 'DirectionalDerivative', 'FullFiniteDiff']

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps (float)

/solver/augmented_lagrangian/nonlinear/advanced/gradient_fd_eps\n
Expensive Option: Eps for finite difference to verify gradient of energy.

Default: 1e-07

/solver/contact (object)

/solver/contact\n
Settings for contact handling in the solver.

Default: None

/solver/contact/CCD (object)

/solver/contact/CCD\n
CCD options

Default: None

/solver/contact/CCD/broad_phase (string)

/solver/contact/CCD/broad_phase\n
Broad phase collision-detection algorithm to use

Default: 'hash_grid'

Options: ['hash_grid', 'HG', 'brute_force', 'BF', 'spatial_hash', 'SH', 'bvh', 'BVH', 'sweep_and_prune', 'SAP', 'sweep_and_tiniest_queue', 'STQ']

/solver/contact/CCD/tolerance (float)

/solver/contact/CCD/tolerance\n
CCD tolerance

Default: 1e-06

/solver/contact/CCD/max_iterations (int)

/solver/contact/CCD/max_iterations\n
Maximum number of iterations for continuous collision detection

Default: 1000000

/solver/contact/friction_iterations (int)

/solver/contact/friction_iterations\n
Maximum number of update iterations for lagged friction formulation (see IPC paper).

Default: 1

/solver/contact/friction_convergence_tol (float)

/solver/contact/friction_convergence_tol\n
Tolerence for friction convergence

Default: 0.01

/solver/contact/barrier_stiffness
/solver/contact/barrier_stiffness\n
/solver/contact/barrier_stiffness (string)/solver/contact/barrier_stiffness (float)

How coefficient of clamped log-barrier function for contact is updated

Default: 'adaptive'

Options: ['adaptive']

The coefficient of clamped log-barrier function value when not adaptive

/solver/rayleigh_damping (list)

/solver/rayleigh_damping\n
Apply Rayleigh damping.

/solver/rayleigh_damping/*
/solver/rayleigh_damping/*\n
/solver/rayleigh_damping/* (object)/solver/rayleigh_damping/* (object)

Apply Rayleigh damping to the given Form with a stiffness ratio.

/solver/rayleigh_damping/*/form (string)

/solver/rayleigh_damping/*/form\n
Form to damp.

Options: ['elasticity', 'contact', 'friction']

/solver/rayleigh_damping/*/stiffness_ratio (float)

/solver/rayleigh_damping/*/stiffness_ratio\n
Ratio of to damp (stiffness = 0.75 * stiffness_ratio * \u0394t\u00b3).

Range: [0, inf]

/solver/rayleigh_damping/*/lagging_iterations (int)

/solver/rayleigh_damping/*/lagging_iterations\n
Maximum number of update iterations for lagging.

Default: 1

Apply Rayleigh damping to the given Form with a stiffness.

/solver/rayleigh_damping/*/form (string)

/solver/rayleigh_damping/*/form\n
Form to damp.

Options: ['elasticity', 'contact', 'friction']

/solver/rayleigh_damping/*/stiffness (float)

/solver/rayleigh_damping/*/stiffness\n
Ratio of to damp.

Range: [0, inf]

/solver/rayleigh_damping/*/lagging_iterations (int)

/solver/rayleigh_damping/*/lagging_iterations\n
Maximum number of update iterations for lagging.

Default: 1

/solver/advanced (object)

/solver/advanced\n
Advanced settings for the solver

Default: None

/solver/advanced/cache_size (int)

/solver/advanced/cache_size\n
Maximum number of elements when the assembly values are cached.

Default: 900000

/solver/advanced/lump_mass_matrix (bool)

/solver/advanced/lump_mass_matrix\n
If true, use diagonal mass matrix with entries on the diagonal equal to the sum of entries in each row of the full mass matrix.}

Default: False

/solver/advanced/lagged_regularization_weight (float)

/solver/advanced/lagged_regularization_weight\n
Weight used to regularize singular static problems.

Default: 0

/solver/advanced/lagged_regularization_iterations (int)

/solver/advanced/lagged_regularization_iterations\n
Number of regularize singular static problems.

Default: 1

/boundary_conditions (object)

/boundary_conditions\n
The settings for boundary conditions.

Default: None

/boundary_conditions/rhs
/boundary_conditions/rhs\n
/boundary_conditions/rhs (float)/boundary_conditions/rhs (string)/boundary_conditions/rhs (object)/boundary_conditions/rhs (list)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/rhs/value
/boundary_conditions/rhs/value\n
/boundary_conditions/rhs/value (float)/boundary_conditions/rhs/value (string)/boundary_conditions/rhs/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/rhs/unit (string)

/boundary_conditions/rhs/unit\n
The unit of the Value

Right-hand side of the system being solved for vector-valued PDEs.

/boundary_conditions/rhs/*
/boundary_conditions/rhs/*\n
/boundary_conditions/rhs/* (float)/boundary_conditions/rhs/* (string)/boundary_conditions/rhs/* (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/rhs/*/value
/boundary_conditions/rhs/*/value\n
/boundary_conditions/rhs/*/value (float)/boundary_conditions/rhs/*/value (string)/boundary_conditions/rhs/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/rhs/*/unit (string)

/boundary_conditions/rhs/*/unit\n
The unit of the Value

/boundary_conditions/dirichlet_boundary (list)

/boundary_conditions/dirichlet_boundary\n
The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/dirichlet_boundary/*
/boundary_conditions/dirichlet_boundary/*\n
/boundary_conditions/dirichlet_boundary/* (object)/boundary_conditions/dirichlet_boundary/* (string)

Dirichlet boundary condition.

Default: None

/boundary_conditions/dirichlet_boundary/*/id
/boundary_conditions/dirichlet_boundary/*/id\n
/boundary_conditions/dirichlet_boundary/*/id (int)/boundary_conditions/dirichlet_boundary/*/id (string)

ID of boundary condition from surface selection.

Range: [0, 2147483646]

select all ids.

Options: ['all']

/boundary_conditions/dirichlet_boundary/*/value (list)

/boundary_conditions/dirichlet_boundary/*/value\n
Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/dirichlet_boundary/*/value/*
/boundary_conditions/dirichlet_boundary/*/value/*\n
/boundary_conditions/dirichlet_boundary/*/value/* (float)/boundary_conditions/dirichlet_boundary/*/value/* (string)/boundary_conditions/dirichlet_boundary/*/value/* (object)/boundary_conditions/dirichlet_boundary/*/value/* (list)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/dirichlet_boundary/*/value/*/value
/boundary_conditions/dirichlet_boundary/*/value/*/value\n
/boundary_conditions/dirichlet_boundary/*/value/*/value (float)/boundary_conditions/dirichlet_boundary/*/value/*/value (string)/boundary_conditions/dirichlet_boundary/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/dirichlet_boundary/*/value/*/unit (string)

/boundary_conditions/dirichlet_boundary/*/value/*/unit\n
The unit of the Value

Dirichlet boundary condition specified per timestep.

/boundary_conditions/dirichlet_boundary/*/value/*/*
/boundary_conditions/dirichlet_boundary/*/value/*/*\n
/boundary_conditions/dirichlet_boundary/*/value/*/* (float)/boundary_conditions/dirichlet_boundary/*/value/*/* (string)/boundary_conditions/dirichlet_boundary/*/value/*/* (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/dirichlet_boundary/*/value/*/*/value
/boundary_conditions/dirichlet_boundary/*/value/*/*/value\n
/boundary_conditions/dirichlet_boundary/*/value/*/*/value (float)/boundary_conditions/dirichlet_boundary/*/value/*/*/value (string)/boundary_conditions/dirichlet_boundary/*/value/*/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit (string)

/boundary_conditions/dirichlet_boundary/*/value/*/*/unit\n
The unit of the Value

/boundary_conditions/dirichlet_boundary/*/time_reference (list)

/boundary_conditions/dirichlet_boundary/*/time_reference\n
List of times when the Dirichlet boundary condition is specified

/boundary_conditions/dirichlet_boundary/*/time_reference/* (float)

/boundary_conditions/dirichlet_boundary/*/time_reference/*\n
Values of Dirichlet boundary condition for timestep

/boundary_conditions/dirichlet_boundary/*/interpolation (list)

/boundary_conditions/dirichlet_boundary/*/interpolation\n
interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*
/boundary_conditions/dirichlet_boundary/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none interpolation of boundary condition

Default: {'type': 'none'}

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/to\n
interpolation ending time

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/from\n
interpolation starting time

Default: 0

Type: piecewise_constant interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic interpolation of boundary condition

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values (list)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend (string)

/boundary_conditions/dirichlet_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/dirichlet_boundary/*/dimension (list)

/boundary_conditions/dirichlet_boundary/*/dimension\n
List of 2 (2D) or 3 (3D) boolean values indicating if the Dirichlet boundary condition is applied for a particular dimension.

/boundary_conditions/dirichlet_boundary/*/dimension/* (bool)

/boundary_conditions/dirichlet_boundary/*/dimension/*\n
value

Default: True

Dirichlet boundary condition loaded from a file, , 1 for scalar, \u2154 for tensor depending on dimension. /boundary_conditions/neumann_boundary (list)

/boundary_conditions/neumann_boundary\n
The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/neumann_boundary/* (object)

/boundary_conditions/neumann_boundary/*\n
Neumann boundary condition

Default: None

/boundary_conditions/neumann_boundary/*/id
/boundary_conditions/neumann_boundary/*/id\n
/boundary_conditions/neumann_boundary/*/id (int)/boundary_conditions/neumann_boundary/*/id (string)

ID of boundary condition from surface selection.

Range: [0, 2147483646]

select all ids.

Options: ['all']

/boundary_conditions/neumann_boundary/*/value (list)

/boundary_conditions/neumann_boundary/*/value\n
Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/neumann_boundary/*/value/*
/boundary_conditions/neumann_boundary/*/value/*\n
/boundary_conditions/neumann_boundary/*/value/* (float)/boundary_conditions/neumann_boundary/*/value/* (string)/boundary_conditions/neumann_boundary/*/value/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/neumann_boundary/*/value/*/value
/boundary_conditions/neumann_boundary/*/value/*/value\n
/boundary_conditions/neumann_boundary/*/value/*/value (float)/boundary_conditions/neumann_boundary/*/value/*/value (string)/boundary_conditions/neumann_boundary/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/neumann_boundary/*/value/*/unit (string)

/boundary_conditions/neumann_boundary/*/value/*/unit\n
The unit of the Value

/boundary_conditions/neumann_boundary/*/interpolation (list)

/boundary_conditions/neumann_boundary/*/interpolation\n
interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*
/boundary_conditions/neumann_boundary/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none interpolation of boundary condition

Default: {'type': 'none'}

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/to (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/to\n
interpolation ending time

/boundary_conditions/neumann_boundary/*/interpolation/*/from (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/from\n
interpolation starting time

Default: 0

Type: piecewise_constant interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic interpolation of boundary condition

/boundary_conditions/neumann_boundary/*/interpolation/*/type (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/neumann_boundary/*/interpolation/*/points (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/neumann_boundary/*/interpolation/*/points/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/neumann_boundary/*/interpolation/*/values (list)

/boundary_conditions/neumann_boundary/*/interpolation/*/values\n
interpolation values

/boundary_conditions/neumann_boundary/*/interpolation/*/values/* (float)

/boundary_conditions/neumann_boundary/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/neumann_boundary/*/interpolation/*/extend (string)

/boundary_conditions/neumann_boundary/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/normal_aligned_neumann_boundary (list)

/boundary_conditions/normal_aligned_neumann_boundary\n
Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/normal_aligned_neumann_boundary/* (object)

/boundary_conditions/normal_aligned_neumann_boundary/*\n
pressure BC entry

Default: None

/boundary_conditions/normal_aligned_neumann_boundary/*/id (int)

/boundary_conditions/normal_aligned_neumann_boundary/*/id\n
ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/normal_aligned_neumann_boundary/*/value
/boundary_conditions/normal_aligned_neumann_boundary/*/value\n
/boundary_conditions/normal_aligned_neumann_boundary/*/value (float)/boundary_conditions/normal_aligned_neumann_boundary/*/value (string)/boundary_conditions/normal_aligned_neumann_boundary/*/value (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/normal_aligned_neumann_boundary/*/value/value
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value\n
/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (float)/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (string)/boundary_conditions/normal_aligned_neumann_boundary/*/value/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/value/unit\n
The unit of the Value

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation
/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none interpolation of boundary condition

Default: {'type': 'none'}

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear interpolation of boundary condition

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp interpolation of boundary condition

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/to\n
interpolation ending time

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/from\n
interpolation starting time

Default: 0

Type: piecewise_constant interpolation of boundary condition

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
interpolation value

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear interpolation of boundary condition

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
interpolation value

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic interpolation of boundary condition

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points\n
interpolation time points

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/points/*\n
interpolation time point

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values (list)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values\n
interpolation values

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/* (float)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/values/*\n
interpolation value

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend (string)

/boundary_conditions/normal_aligned_neumann_boundary/*/interpolation/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/pressure_boundary (list)

/boundary_conditions/pressure_boundary\n
Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/pressure_boundary/* (object)

/boundary_conditions/pressure_boundary/*\n
pressure BC entry

Default: None

/boundary_conditions/pressure_boundary/*/id (int)

/boundary_conditions/pressure_boundary/*/id\n
ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/pressure_boundary/*/value
/boundary_conditions/pressure_boundary/*/value\n
/boundary_conditions/pressure_boundary/*/value (float)/boundary_conditions/pressure_boundary/*/value (string)/boundary_conditions/pressure_boundary/*/value (object)/boundary_conditions/pressure_boundary/*/value (list)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/pressure_boundary/*/value/value
/boundary_conditions/pressure_boundary/*/value/value\n
/boundary_conditions/pressure_boundary/*/value/value (float)/boundary_conditions/pressure_boundary/*/value/value (string)/boundary_conditions/pressure_boundary/*/value/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/pressure_boundary/*/value/unit (string)

/boundary_conditions/pressure_boundary/*/value/unit\n
The unit of the Value

Values of pressure boundary condition specified per timestep

/boundary_conditions/pressure_boundary/*/value/*
/boundary_conditions/pressure_boundary/*/value/*\n
/boundary_conditions/pressure_boundary/*/value/* (float)/boundary_conditions/pressure_boundary/*/value/* (string)/boundary_conditions/pressure_boundary/*/value/* (object)

Value as a constant float

Default: 0

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/pressure_boundary/*/value/*/value
/boundary_conditions/pressure_boundary/*/value/*/value\n
/boundary_conditions/pressure_boundary/*/value/*/value (float)/boundary_conditions/pressure_boundary/*/value/*/value (string)/boundary_conditions/pressure_boundary/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/pressure_boundary/*/value/*/unit (string)

/boundary_conditions/pressure_boundary/*/value/*/unit\n
The unit of the Value

/boundary_conditions/pressure_boundary/*/time_reference (list)

/boundary_conditions/pressure_boundary/*/time_reference\n
List of times when the pressure boundary condition is specified

/boundary_conditions/pressure_boundary/*/time_reference/* (float)

/boundary_conditions/pressure_boundary/*/time_reference/*\n
Values of pressure boundary condition for timestep

/boundary_conditions/pressure_cavity (list)

/boundary_conditions/pressure_cavity\n
Neumann boundary condition for normal times value for vector-valued PDEs.

/boundary_conditions/pressure_cavity/* (object)

/boundary_conditions/pressure_cavity/*\n
pressure BC entry

Default: None

/boundary_conditions/pressure_cavity/*/id (int)

/boundary_conditions/pressure_cavity/*/id\n
ID for the pressure Neumann boundary condition

Range: [0, 2147483646]

/boundary_conditions/pressure_cavity/*/value
/boundary_conditions/pressure_cavity/*/value\n
/boundary_conditions/pressure_cavity/*/value (float)/boundary_conditions/pressure_cavity/*/value (string)/boundary_conditions/pressure_cavity/*/value (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/pressure_cavity/*/value/value
/boundary_conditions/pressure_cavity/*/value/value\n
/boundary_conditions/pressure_cavity/*/value/value (float)/boundary_conditions/pressure_cavity/*/value/value (string)/boundary_conditions/pressure_cavity/*/value/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/pressure_cavity/*/value/unit (string)

/boundary_conditions/pressure_cavity/*/value/unit\n
The unit of the Value

/boundary_conditions/obstacle_displacements (list)

/boundary_conditions/obstacle_displacements\n
The list of boundary conditions for the main variable. Elements of the list are assignment pairs (ID, value) where ID is assigned by surface selection.

/boundary_conditions/obstacle_displacements/* (object)

/boundary_conditions/obstacle_displacements/*\n
Obstacle displacements

Default: None

/boundary_conditions/obstacle_displacements/*/id
/boundary_conditions/obstacle_displacements/*/id\n
/boundary_conditions/obstacle_displacements/*/id (int)/boundary_conditions/obstacle_displacements/*/id (string)

ID of boundary condition from surface selection.

Range: [0, 2147483646]

select all ids.

Options: ['all']

/boundary_conditions/obstacle_displacements/*/value (list)

/boundary_conditions/obstacle_displacements/*/value\n
Values of boundary condition, length 1 for scalar-valued pde, \u2154 for vector-valued PDEs depending on the dimension.

/boundary_conditions/obstacle_displacements/*/value/*
/boundary_conditions/obstacle_displacements/*/value/*\n
/boundary_conditions/obstacle_displacements/*/value/* (float)/boundary_conditions/obstacle_displacements/*/value/* (string)/boundary_conditions/obstacle_displacements/*/value/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/boundary_conditions/obstacle_displacements/*/value/*/value
/boundary_conditions/obstacle_displacements/*/value/*/value\n
/boundary_conditions/obstacle_displacements/*/value/*/value (float)/boundary_conditions/obstacle_displacements/*/value/*/value (string)/boundary_conditions/obstacle_displacements/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/boundary_conditions/obstacle_displacements/*/value/*/unit (string)

/boundary_conditions/obstacle_displacements/*/value/*/unit\n
The unit of the Value

/boundary_conditions/obstacle_displacements/*/interpolation (list)

/boundary_conditions/obstacle_displacements/*/interpolation\n
interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*
/boundary_conditions/obstacle_displacements/*/interpolation/*\n
nonelinearlinear_ramppiecewise_constantpiecewise_linearpiecewise_cubic

Type: none interpolation of boundary condition

Default: {'type': 'none'}

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

Type: linear_ramp interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/to (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/to\n
interpolation ending time

/boundary_conditions/obstacle_displacements/*/interpolation/*/from (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/from\n
interpolation starting time

Default: 0

Type: piecewise_constant interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_linear interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

Type: piecewise_cubic interpolation of boundary condition

/boundary_conditions/obstacle_displacements/*/interpolation/*/type (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/type\n
type of interpolation of boundary condition

Options: ['none', 'linear', 'linear_ramp', 'piecewise_constant', 'piecewise_linear', 'piecewise_cubic']

/boundary_conditions/obstacle_displacements/*/interpolation/*/points (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points\n
interpolation time points

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/points/*\n
interpolation time point

/boundary_conditions/obstacle_displacements/*/interpolation/*/values (list)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values\n
interpolation values

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/* (float)

/boundary_conditions/obstacle_displacements/*/interpolation/*/values/*\n
interpolation value

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend (string)

/boundary_conditions/obstacle_displacements/*/interpolation/*/extend\n
how to extend the piecewise interpolation

Default: 'constant'

Options: ['constant', 'extrapolate', 'repeat', 'repeat_offset']

/boundary_conditions/periodic_boundary (object)

/boundary_conditions/periodic_boundary\n
Options for periodic boundary conditions.

Default: None

/boundary_conditions/periodic_boundary/enabled (bool)

/boundary_conditions/periodic_boundary/enabled\n

Default: False

/boundary_conditions/periodic_boundary/tolerance (float)

/boundary_conditions/periodic_boundary/tolerance\n
Relative tolerance of deciding periodic correspondence

Default: 1e-05

/boundary_conditions/periodic_boundary/correspondence (list)

/boundary_conditions/periodic_boundary/correspondence\n
Periodic directions for periodic boundary conditions. If not specified, default to axis-aligned directions.

/boundary_conditions/periodic_boundary/correspondence/* (list)

/boundary_conditions/periodic_boundary/correspondence/*\n
One periodic direction.

/boundary_conditions/periodic_boundary/correspondence/*/* (float)

/boundary_conditions/periodic_boundary/correspondence/*/*\n
One entry of a periodic direction.

/boundary_conditions/periodic_boundary/linear_displacement_offset (list)

/boundary_conditions/periodic_boundary/linear_displacement_offset\n

/boundary_conditions/periodic_boundary/linear_displacement_offset/* (list)

/boundary_conditions/periodic_boundary/linear_displacement_offset/*\n

/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/*\n
/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* (float)/boundary_conditions/periodic_boundary/linear_displacement_offset/*/* (string)

/boundary_conditions/periodic_boundary/fixed_macro_strain (list)

/boundary_conditions/periodic_boundary/fixed_macro_strain\n

/boundary_conditions/periodic_boundary/fixed_macro_strain/* (int)

/boundary_conditions/periodic_boundary/fixed_macro_strain/*\n

/boundary_conditions/periodic_boundary/force_zero_mean (bool)

/boundary_conditions/periodic_boundary/force_zero_mean\n
The periodic solution is not unique, set to true to find the solution with zero mean.

Default: False

/initial_conditions (object)

/initial_conditions\n
Initial conditions for the time-dependent problem, imposed on the main variable, its derivative or second derivative

Default: None

/initial_conditions/solution (list)

/initial_conditions/solution\n
initial solution

/initial_conditions/solution/* (object)

/initial_conditions/solution/*\n
A list of (ID, value) pairs defining the initial conditions for the main variable values. Ids are set by selection, and values can be floats or formulas.

Default: None

/initial_conditions/solution/*/id (int)

/initial_conditions/solution/*/id\n
ID from volume selections

/initial_conditions/solution/*/value (list)

/initial_conditions/solution/*/value\n
value of the solution

/initial_conditions/solution/*/value/*
/initial_conditions/solution/*/value/*\n
/initial_conditions/solution/*/value/* (float)/initial_conditions/solution/*/value/* (string)/initial_conditions/solution/*/value/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/initial_conditions/solution/*/value/*/value
/initial_conditions/solution/*/value/*/value\n
/initial_conditions/solution/*/value/*/value (float)/initial_conditions/solution/*/value/*/value (string)/initial_conditions/solution/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/initial_conditions/solution/*/value/*/unit (string)

/initial_conditions/solution/*/value/*/unit\n
The unit of the Value

/initial_conditions/velocity (list)

/initial_conditions/velocity\n
initial velocity

/initial_conditions/velocity/* (object)

/initial_conditions/velocity/*\n
A list of (ID, value) pairs defining the initial conditions for the first derivative of the main variable values. Ids are set by selection, and values can be floats or formulas.

Default: None

/initial_conditions/velocity/*/id (int)

/initial_conditions/velocity/*/id\n
ID from volume selections

/initial_conditions/velocity/*/value (list)

/initial_conditions/velocity/*/value\n
value od the initial velocity

/initial_conditions/velocity/*/value/*
/initial_conditions/velocity/*/value/*\n
/initial_conditions/velocity/*/value/* (float)/initial_conditions/velocity/*/value/* (string)/initial_conditions/velocity/*/value/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/initial_conditions/velocity/*/value/*/value
/initial_conditions/velocity/*/value/*/value\n
/initial_conditions/velocity/*/value/*/value (float)/initial_conditions/velocity/*/value/*/value (string)/initial_conditions/velocity/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/initial_conditions/velocity/*/value/*/unit (string)

/initial_conditions/velocity/*/value/*/unit\n
The unit of the Value

/initial_conditions/acceleration (list)

/initial_conditions/acceleration\n
initial acceleration

/initial_conditions/acceleration/* (object)

/initial_conditions/acceleration/*\n
entries

Default: None

/initial_conditions/acceleration/*/id (int)

/initial_conditions/acceleration/*/id\n
ID from volume selections

/initial_conditions/acceleration/*/value (list)

/initial_conditions/acceleration/*/value\n
value

/initial_conditions/acceleration/*/value/*
/initial_conditions/acceleration/*/value/*\n
/initial_conditions/acceleration/*/value/* (float)/initial_conditions/acceleration/*/value/* (string)/initial_conditions/acceleration/*/value/* (object)

Value as a constant float

Value as an expression of \\(x,y,z,t\\) or a file

Value with unit

/initial_conditions/acceleration/*/value/*/value
/initial_conditions/acceleration/*/value/*/value\n
/initial_conditions/acceleration/*/value/*/value (float)/initial_conditions/acceleration/*/value/*/value (string)/initial_conditions/acceleration/*/value/*/value (file)

The value of the constant

The value as an expression

The value as a file

/initial_conditions/acceleration/*/value/*/unit (string)

/initial_conditions/acceleration/*/value/*/unit\n
The unit of the Value

/output (object)

/output\n
output settings

Default: None

/output/directory (string)

/output/directory\n
Directory for output files.

Default: ''

/output/log (object)

/output/log\n
Setting for the output log.

Default: None

/output/log/level
/output/log/level\n
/output/log/level (int)/output/log/level (string)

Level of logging, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

Range: [0, 6]

Level of logging.

Default: 'debug'

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

/output/log/file_level
/output/log/file_level\n
/output/log/file_level (int)/output/log/file_level (string)

Level of logging to a file, 0 trace, 1 debug, 2 info, 3 warning, 4 error, 5 critical, and 6 off.

Range: [0, 6]

Level of logging.

Default: 'trace'

Options: ['trace', 'debug', 'info', 'warning', 'error', 'critical', 'off']

/output/log/path (string)

/output/log/path\n
File where to save the log; empty string is output to terminal.

Default: ''

/output/log/quiet (bool)

/output/log/quiet\n
Disable cout for logging.

Default: False

/output/json (string)

/output/json\n
File name for JSON output statistics on time/error/etc.

Default: ''

/output/restart_json (string)

/output/restart_json\n
File name for JSON output to restart the simulation.

Default: ''

/output/paraview (object)

/output/paraview\n
Output in paraview format

Default: None

/output/paraview/file_name (string)

/output/paraview/file_name\n
Paraview output file name

Default: ''

/output/paraview/vismesh_rel_area (float)

/output/paraview/vismesh_rel_area\n
relative area for the upsampled visualisation mesh

Default: 1e-05

/output/paraview/skip_frame (int)

/output/paraview/skip_frame\n
export every skip_frame-th frames for time dependent simulations

Default: 1

/output/paraview/high_order_mesh (bool)

/output/paraview/high_order_mesh\n
Enables/disables high-order output for paraview. Supported only for isoparametric or linear meshes with high-order solutions.

Default: True

/output/paraview/volume (bool)

/output/paraview/volume\n
Export volumetric mesh

Default: True

/output/paraview/surface (bool)

/output/paraview/surface\n
Export surface mesh (in 2d polygon)

Default: False

/output/paraview/wireframe (bool)

/output/paraview/wireframe\n
Export the wireframe of the mesh

Default: False

/output/paraview/points (bool)

/output/paraview/points\n
Export the Dirichlet points

Default: False

/output/paraview/options (object)

/output/paraview/options\n
Optional fields in the output

Default: None

/output/paraview/options/use_hdf5 (bool)

/output/paraview/options/use_hdf5\n
If true, export the data as hdf5, compatible with paraview >5.11

Default: False

/output/paraview/options/material (bool)

/output/paraview/options/material\n
If true, write out material values sampled on the vertices of the mesh

Default: False

/output/paraview/options/body_ids (bool)

/output/paraview/options/body_ids\n
Export volumes ids

Default: False

/output/paraview/options/contact_forces (bool)

/output/paraview/options/contact_forces\n
If true, write out contact forces for surface

Default: False

/output/paraview/options/friction_forces (bool)

/output/paraview/options/friction_forces\n
If true, write out friction forces for surface

Default: False

/output/paraview/options/velocity (bool)

/output/paraview/options/velocity\n
If true, write out velocities

Default: False

/output/paraview/options/acceleration (bool)

/output/paraview/options/acceleration\n
If true, write out accelerations

Default: False

/output/paraview/options/scalar_values (bool)

/output/paraview/options/scalar_values\n
If true, write out scalar values

Default: True

/output/paraview/options/tensor_values (bool)

/output/paraview/options/tensor_values\n
If true, write out tensor values

Default: True

/output/paraview/options/discretization_order (bool)

/output/paraview/options/discretization_order\n
If true, write out discretization order

Default: True

/output/paraview/options/nodes (bool)

/output/paraview/options/nodes\n
If true, write out node order

Default: True

/output/paraview/options/forces (bool)

/output/paraview/options/forces\n
If true, write out all variational forces on the FE mesh

Default: False

/output/data (object)

/output/data\n
File names to write output data to.

Default: None

/output/data/solution (string)

/output/data/solution\n
Main variable solution. Unrolled [xyz, xyz, \u2026] using PolyFEM ordering. If reorder_nodes exports the solution with the same order the vertices of the input mesh as a #n x d file

Default: ''

/output/data/full_mat (string)

/output/data/full_mat\n
System matrix without boundary conditions. Doesn\u2019t work for nonlinear problems

Default: ''

/output/data/stiffness_mat (string)

/output/data/stiffness_mat\n
System matrix with boundary conditions. Doesn\u2019t work for nonlinear problems

Default: ''

/output/data/stress_mat (string)

/output/data/stress_mat\n
Exports stress

Default: ''

/output/data/state (string)

/output/data/state\n
Writes the complete state in PolyFEM hdf5 format, used to restart the sim

Default: ''

/output/data/rest_mesh (string)

/output/data/rest_mesh\n
Writes the rest mesh in MSH format, used to restart the sim

Default: ''

/output/data/mises (string)

/output/data/mises\n
File name to write per-node Von Mises stress values to.

Default: ''

/output/data/nodes (string)

/output/data/nodes\n
Writes the FEM nodes

Default: ''

/output/data/advanced (object)

/output/data/advanced\n
advanced options

Default: None

/output/data/advanced/reorder_nodes (bool)

/output/data/advanced/reorder_nodes\n
Reorder nodes accodring to input

Default: False

/output/advanced (object)

/output/advanced\n
Additional output options

Default: None

/output/advanced/timestep_prefix (string)

/output/advanced/timestep_prefix\n
Prefix for output file names for each time step, the final file is step_i.[vtu|vtm] where i is the time index.

Default: 'step_'

/output/advanced/sol_on_grid (float)

/output/advanced/sol_on_grid\n
exports the solution sampled on a grid, specify the grid spacing

Default: -1

/output/advanced/compute_error (bool)

/output/advanced/compute_error\n
Enables the computation of the error. If no reference solution is provided, return the norms of the solution

Default: True

/output/advanced/sol_at_node (int)

/output/advanced/sol_at_node\n
Write out solution values at a specific node. the values will be written in the output JSON file

Default: -1

/output/advanced/vis_boundary_only (bool)

/output/advanced/vis_boundary_only\n
saves only elements touching the boundaries

Default: False

/output/advanced/curved_mesh_size (bool)

/output/advanced/curved_mesh_size\n
upsample curved edges to compute mesh size

Default: False

/output/advanced/save_solve_sequence_debug (bool)

/output/advanced/save_solve_sequence_debug\n
saves AL internal steps, for debugging

Default: False

/output/advanced/save_ccd_debug_meshes (bool)

/output/advanced/save_ccd_debug_meshes\n
saves AL internal steps, for debugging

Default: False

/output/advanced/save_time_sequence (bool)

/output/advanced/save_time_sequence\n
saves timesteps

Default: True

/output/advanced/save_nl_solve_sequence (bool)

/output/advanced/save_nl_solve_sequence\n
saves obj after every nonlinear iteration, for debugging

Default: False

/output/advanced/spectrum (bool)

/output/advanced/spectrum\n
exports the spectrum of the matrix in the output JSON. Works only if POLYSOLVE_WITH_SPECTRA is enabled

Default: False

/output/reference (object)

/output/reference\n
Write out the analytic/numerical ground-truth solution and or its gradient

Default: None

/output/reference/solution (list)

/output/reference/solution\n
reference solution used to compute errors

/output/reference/solution/* (string)

/output/reference/solution/*\n
value as a function of \\(x,y,z,t\\)

Default: ''

/output/reference/gradient (list)

/output/reference/gradient\n
gradient of the reference solution to compute errors

/output/reference/gradient/* (string)

/output/reference/gradient/*\n
value as a function of \\(x,y,z,t\\)

Default: ''

/input (object)

/input\n
input data

Default: None

/input/data (object)

/input/data\n
input to restart time dependent sim

Default: None

/input/data/state (file)

/input/data/state\n
input state as hdf5

Default: ''

/input/data/reorder (bool)

/input/data/reorder\n
reorder input data

Default: False

/tests (object)

/tests\n
Used to test to compare different norms of solutions.

Default: None

/tests/err_h1 (float)

/tests/err_h1\n
Reference h1 solution\u2019s norm.

Default: 0

/tests/err_h1_semi (float)

/tests/err_h1_semi\n
Reference h1 seminorm solution\u2019s norm.

Default: 0

/tests/err_l2 (float)

/tests/err_l2\n
Reference \\(L^2\\) solution\u2019s norm.

Default: 0

/tests/err_linf (float)

/tests/err_linf\n
Reference \\(L^\\infty\\) solution\u2019s norm.

Default: 0

/tests/err_linf_grad (float)

/tests/err_linf_grad\n
Reference \\(L^\\infty\\) solution\u2019s gradient norm.

Default: 0

/tests/err_lp (float)

/tests/err_lp\n
Reference \\(L^8\\) solution\u2019s gradient norm.

Default: 0

/tests/margin (float)

/tests/margin\n
Reference tolerance used in tests.

Default: 1e-05

/tests/time_steps
/tests/time_steps\n
/tests/time_steps (int)/tests/time_steps (string)

Number of time steps to test.

Default: 1

Range: [1, inf]

Number of time steps to test.

Options: ['all', 'static']

"},{"location":"library/","title":"Polyfem as Libary","text":"

Polyfem uses modern cmake, so it it should be enough to add this line

add_subdirectory(<path-to-polyfem> polyfem)\n
in your cmake project, and then simply add
target_link_library(<your_target> polyfem)\n
in your cmake script. Polyfem will download the dependencies that it needs with the version that it needs. If you dont need the viewer for your own project you can add
SET(POLYFEM_NO_UI ON)\n

"},{"location":"library/#interface","title":"Interface","text":"

The interface of polyfem is similar as Python. You should create a polyfem::State object and then call methods on it. Most of the fields are public for convenience but we discourage use or access them.

This is the main interface of polyfem::State.

"},{"location":"library/#initialization","title":"Initialization","text":"
void init(const json &args)\nvoid init(const std::string &json_path)\n

loads the settings from a json object or file

"},{"location":"library/#logging","title":"Logging","text":"

void set_log_level(int log_level)\nstd::string get_log()\n
Sets the log level (1-6) and gets the log at the end

"},{"location":"library/#loading-mesh","title":"Loading mesh","text":"

void load_mesh()\nvoid load_mesh(const std::string &path)\nvoid load_mesh(const Eigen::MatrixXd &V, const Eigen::MatrixXi &F)\n
Different ways of loading a mesh

"},{"location":"library/#set-boundary-sides-sets","title":"Set boundary sides sets","text":"

void set_boundary_side_set(const std::function<int(const polyfem::RowVectorNd&)> &boundary_marker)\nvoid set_boundary_side_set(const std::function<int(const polyfem::RowVectorNd&, bool)> &boundary_marker)\nvoid set_boundary_side_set(const std::function<int(const std::vector<int>&, bool)> &boundary_marker)\n
All boundary side sets are assigned with a lambda function, the first 2 takes the barycenter of the face/edge, the last one the primite id. The second argument is a boolean that specifies if the sideset is boundary.

"},{"location":"library/#solving","title":"Solving","text":"
void solve();\n

Note the solver internally calls

void build_basis();\nvoid assemble_stiffness_mat();\nvoid assemble_rhs();\nvoid solve_problem();\n
You can use these instead of solve.

If you problem has a solution you can use

void compute_errors();\n
to obtain the error.

"},{"location":"library/#getters","title":"Getters","text":"

const Eigen::MatrixXd &get_solution() const\nconst Eigen::MatrixXd &get_pressure() const\n
Gets the raw solution and pressure. The order of the coefficient is unrelated to the order of the vertices of the mesh.

void get_sampled_solution(Eigen::MatrixXd &points, Eigen::MatrixXi &tets, Eigen::MatrixXd &fun, bool boundary_only = false)\nvoid get_stresses(Eigen::MatrixXd &fun, bool boundary_only = false)\nvoid get_sampled_mises(Eigen::MatrixXd &fun, bool boundary_only = false)\nvoid get_sampled_mises_avg(Eigen::MatrixXd &fun, Eigen::MatrixXd &tfun, bool boundary_only = false)\n
Gets the solution/stresses on the visualization mesh, use vismesh_rel_area to control density

"},{"location":"library/#exporting","title":"Exporting","text":"

Exports the solution to VTU for visualization

void get_sidesets(Eigen::MatrixXd &pts, Eigen::MatrixXi &faces, Eigen::MatrixXd &sidesets);\n\nvoid export_data();\n\nvoid save_vtu(const std::string &name);\nvoid save_wire(const std::string &name, bool isolines = false);\n
"},{"location":"license/","title":"License","text":"
MIT License\n\nCopyright (c) 2018 polyfem\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n
"},{"location":"polyfempy_doc/","title":"Docs","text":""},{"location":"polyfempy_doc/#class-problem","title":"class Problem","text":"

Generic problem problem, scalar or tensor depending on the pde. Warning, this problem needs to be used with the set_pde function in settings

"},{"location":"polyfempy_doc/#init","title":"init","text":"

__init__(rhs=None, exact=None)

Initialize . See help(type()) for accurate signature.

"},{"location":"polyfempy_doc/#add_dirichlet_value","title":"add_dirichlet_value","text":"

add_dirichlet_value(id, value, is_dirichlet_dim=None)

set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems.

"},{"location":"polyfempy_doc/#add_neumann_value","title":"add_neumann_value","text":"

add_neumann_value(id, value)

set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_dirichlet_value","title":"set_dirichlet_value","text":"

set_dirichlet_value(id, value, is_dirichlet_dim=None)

set the Dirichlet value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed, only for vector-based problems.

"},{"location":"polyfempy_doc/#set_displacement","title":"set_displacement","text":"

set_displacement(id, value, is_dim_fixed=None)

set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_force","title":"set_force","text":"

set_force(id, value)

set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_neumann_value","title":"set_neumann_value","text":"

set_neumann_value(id, value)

set the Neumann value value for the sideset id. Note the value must be a scalar, vector in 2D, or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_velocity","title":"set_velocity","text":"

set_velocity(id, value, is_dim_fixed=None)

set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_x_symmetric","title":"set_x_symmetric","text":"

set_x_symmetric(id)

x coorinate is fixed, y is allowed to move (Neumann)

"},{"location":"polyfempy_doc/#set_xy_symmetric","title":"set_xy_symmetric","text":"

set_xy_symmetric(id)

xy coorinates are fixed, z is allowed to move (Neumann)

"},{"location":"polyfempy_doc/#set_xz_symmetric","title":"set_xz_symmetric","text":"

set_xz_symmetric(id)

xz coorinates are fixed, y is allowed to move (Neumann)

"},{"location":"polyfempy_doc/#set_y_symmetric","title":"set_y_symmetric","text":"

set_y_symmetric(id)

y coorinate is fixed, x is allowed to move (Neumann)

"},{"location":"polyfempy_doc/#set_yz_symmetric","title":"set_yz_symmetric","text":"

set_yz_symmetric(id)

yz coorinates are fixed, x is allowed to move (Neumann)

"},{"location":"polyfempy_doc/#class-settings","title":"class Settings","text":"

Class that encodes the settings of the solver, it models the input json file

"},{"location":"polyfempy_doc/#init_1","title":"init","text":"

__init__(discr_order=1, pressure_discr_order=1, pde='Laplacian', nl_solver_rhs_steps=1, tend=1, time_steps=10)

Initialize . See help(type()) for accurate signature.

"},{"location":"polyfempy_doc/#serialize","title":"serialize","text":"

serialize()

stringyfied json description of this class, used to run the solver

"},{"location":"polyfempy_doc/#set_advanced_option","title":"set_advanced_option","text":"

set_advanced_option(key, value)

Used to set any advanced option not present in this class, for instance set_advanced_option(\u201cuse_spline\u201d,True), see https://polyfem.github.io/documentation/ for full list

"},{"location":"polyfempy_doc/#set_isolines_export_path","title":"set_isolines_export_path","text":"

set_isolines_export_path(path)

Sets the path to export the isolines of the solution

"},{"location":"polyfempy_doc/#set_material_params","title":"set_material_params","text":"

set_material_params(name, value)

set the material parameters, for instance set_material_params(\u201cE\u201d, 200) sets the Young\u2019s modulus E to 200. See https://polyfem.github.io/documentation/#formulations for full list

"},{"location":"polyfempy_doc/#set_pde","title":"set_pde","text":"

set_pde(pde)

Sets the PDE to solve, use any of the polyfempy.PDEs

"},{"location":"polyfempy_doc/#set_problem","title":"set_problem","text":"

set_problem(problem)

Sets the problem, use any of the problems in Problems or the Problem

"},{"location":"polyfempy_doc/#set_solution_export_path","title":"set_solution_export_path","text":"

set_solution_export_path(path)

Sets the path to save the solution

"},{"location":"polyfempy_doc/#set_vtu_export_path","title":"set_vtu_export_path","text":"

set_vtu_export_path(path, bounda_only=False)

Sets the path to export a vtu file with the results, use bounda_only to export only one layer of the mesh in 3d

"},{"location":"polyfempy_doc/#set_wireframe_export_path","title":"set_wireframe_export_path","text":"

set_wireframe_export_path(path)

Sets the path to export a wireframe of the mesh

pde

Get the PDE

problem

Get the problem

"},{"location":"polyfempy_doc/#class-drivencavity","title":"class DrivenCavity","text":"

Classical driven cavity problem in fluid simulation

"},{"location":"polyfempy_doc/#class-flow","title":"class Flow","text":"

Inflow/outflow problem for fluids. You can specify the sideset for the moving fluxes, the axial direction of the flow, and the list of obstacle sidesets. https://polyfem.github.io/documentation/#flow

"},{"location":"polyfempy_doc/#init_2","title":"init","text":"

__init__(inflow=1, outflow=3, inflow_amout=0.25, outflow_amout=0.25, direction=0, obstacle=[7])

Initialize . See help(type()) for accurate signature.

"},{"location":"polyfempy_doc/#class-franke","title":"class Franke","text":"

Franke problem with exact solution https://polyfem.github.io/documentation/#franke

"},{"location":"polyfempy_doc/#class-genericscalar","title":"class GenericScalar","text":"

Generic scalar problem https://polyfem.github.io/documentation/#genericscalar

"},{"location":"polyfempy_doc/#add_dirichlet_value_1","title":"add_dirichlet_value","text":"

add_dirichlet_value(id, value)

add the Dirichlet value value for the sideset id

"},{"location":"polyfempy_doc/#add_neumann_value_1","title":"add_neumann_value","text":"

add_neumann_value(id, value)

add the Neumann value value for the sideset id

"},{"location":"polyfempy_doc/#class-generictensor","title":"class GenericTensor","text":"

Generic tensor problem https://polyfem.github.io/documentation/#generictensor

"},{"location":"polyfempy_doc/#add_dirichlet_value_2","title":"add_dirichlet_value","text":"

add_dirichlet_value(id, value, is_dirichlet_dim=None)

add the Dirichlet value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem. is_dirichlet_dim is a vector of boolean specifying which dimentions are fixed.

"},{"location":"polyfempy_doc/#add_neumann_value_2","title":"add_neumann_value","text":"

add_neumann_value(id, value)

add the Neumann value value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_displacement_1","title":"set_displacement","text":"

set_displacement(id, value, is_dim_fixed=None)

set the displacement value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_force_1","title":"set_force","text":"

set_force(id, value)

set the force value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#set_velocity_1","title":"set_velocity","text":"

set_velocity(id, value, is_dim_fixed=None)

set the velocity value for the sideset id. Note the value must be a vector in 2D or 3D depending on the problem

"},{"location":"polyfempy_doc/#class-gravity","title":"class Gravity","text":"

time dependent gravity problem https://polyfem.github.io/documentation/#gravity

"},{"location":"polyfempy_doc/#init_3","title":"init","text":"

__init__(force=0.1)

Initialize . See help(type()) for accurate signature.

"},{"location":"polyfempy_doc/#class-torsion","title":"class Torsion","text":"

3D torsion problem, specify which sideset to fix (fixed_boundary) and which one turns turning_boundary https://polyfem.github.io/documentation/#torsionelastic

"},{"location":"polyfempy_doc/#init_4","title":"init","text":"

__init__(axis_coordiante=2, n_turns=0.5, fixed_boundary=5, turning_boundary=6)

Initialize . See help(type()) for accurate signature.

"},{"location":"polyfempy_doc/#class-pdes","title":"class PDEs","text":"

List of supported partial differential equations

Bilaplacian = \u2018Bilaplacian\u2019

Helmholtz = \u2018Helmholtz\u2019

HookeLinearElasticity = \u2018HookeLinearElasticity\u2019

IncompressibleLinearElasticity = \u2018IncompressibleLinearElasticity\u2019

Laplacian = \u2018Laplacian\u2019

LinearElasticity = \u2018LinearElasticity\u2019

NeoHookean = \u2018NeoHookean\u2019

NonLinearElasticity = \u2018NonLinearElasticity\u2019

SaintVenant = \u2018SaintVenant\u2019

Stokes = \u2018Stokes\u2019

"},{"location":"polyfempy_doc/#class-scalarformulations","title":"class ScalarFormulations","text":"

Bilaplacian = \u2018Bilaplacian\u2019

Helmholtz = \u2018Helmholtz\u2019

Laplacian = \u2018Laplacian\u2019

"},{"location":"polyfempy_doc/#class-solver","title":"class Solver","text":"

Polyfem solver

"},{"location":"polyfempy_doc/#compute_errors","title":"compute_errors","text":"

compute_errors()

compute the error

"},{"location":"polyfempy_doc/#export_data","title":"export_data","text":"

export_data()

exports all data specified in the settings

"},{"location":"polyfempy_doc/#export_vtu","title":"export_vtu","text":"

export_vtu(path: str)

exports the solution as vtu

"},{"location":"polyfempy_doc/#export_wire","title":"export_wire","text":"

export_wire(path: str, isolines: bool = False)

exports wireframe of the mesh

"},{"location":"polyfempy_doc/#get_boundary_sidesets","title":"get_boundary_sidesets","text":"

get_boundary_sidesets() -> tuple

exports get the boundary sideset, edges in 2d or trangles in 3d

"},{"location":"polyfempy_doc/#get_log","title":"get_log","text":"

get_log() -> str

gets the log as json

"},{"location":"polyfempy_doc/#get_pressure","title":"get_pressure","text":"

get_pressure() -> array

returns the pressure

"},{"location":"polyfempy_doc/#get_sampled_connectivity_frames","title":"get_sampled_connectivity_frames","text":"

get_sampled_connectivity_frames() -> List[array]

returns the connectivity frames for a time dependent problem on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_mises","title":"get_sampled_mises","text":"

get_sampled_mises(boundary_only: bool = False) -> array

returns the von mises stresses on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_mises_avg","title":"get_sampled_mises_avg","text":"

get_sampled_mises_avg(boundary_only: bool = False) -> tuple

returns the von mises stresses and stress tensor averaged around a vertex on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_mises_avg_frames","title":"get_sampled_mises_avg_frames","text":"

get_sampled_mises_avg_frames() -> List[array]

returns the von mises stresses per frame averaged around a vertex on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_mises_frames","title":"get_sampled_mises_frames","text":"

get_sampled_mises_frames() -> List[array]

returns the von mises stresses frames on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_points_frames","title":"get_sampled_points_frames","text":"

get_sampled_points_frames() -> List[array]

returns the points frames for a time dependent problem on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_solution","title":"get_sampled_solution","text":"

get_sampled_solution(boundary_only: bool = False) -> tuple

returns the solution on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_sampled_solution_frames","title":"get_sampled_solution_frames","text":"

get_sampled_solution_frames() -> List[array]

returns the solution frames for a time dependent problem on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#get_solution","title":"get_solution","text":"

get_solution() -> array

returns the solution

"},{"location":"polyfempy_doc/#get_stresses","title":"get_stresses","text":"

get_stresses(boundary_only: bool = False) -> array

returns the stress tensor on a densly sampled mesh, use \u2018vismesh_rel_area\u2019 to control density

"},{"location":"polyfempy_doc/#load_mesh_from_path","title":"load_mesh_from_path","text":"

load_mesh_from_path(path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

Loads a mesh from the path and \u2018bc_tag\u2019 from the json if any bc tags

"},{"location":"polyfempy_doc/#load_mesh_from_path_and_tags","title":"load_mesh_from_path_and_tags","text":"

load_mesh_from_path_and_tags(path: str, bc_tag_path: str, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

Loads a mesh and bc_tags from path

"},{"location":"polyfempy_doc/#load_mesh_from_settings","title":"load_mesh_from_settings","text":"

load_mesh_from_settings(normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

Loads a mesh from the \u2018mesh\u2019 field of the json and \u2018bc_tag\u2019 if any bc tags

"},{"location":"polyfempy_doc/#set_boundary_side_set_from_bary","title":"set_boundary_side_set_from_bary","text":"

set_boundary_side_set_from_bary(boundary_marker: Callable[[array[float64[1, n]]], int])

Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face)

"},{"location":"polyfempy_doc/#set_boundary_side_set_from_bary_and_boundary","title":"set_boundary_side_set_from_bary_and_boundary","text":"

set_boundary_side_set_from_bary_and_boundary(boundary_marker: Callable[[array[float64[1, n]], bool], int])

Sets the side set for the boundary conditions, the functions takes the barycenter of the boundary (edge or face) and a flag that says if the element is boundary

"},{"location":"polyfempy_doc/#set_boundary_side_set_from_v_ids","title":"set_boundary_side_set_from_v_ids","text":"

set_boundary_side_set_from_v_ids(boundary_marker: Callable[[List[int], bool], int])

Sets the side set for the boundary conditions, the functions takes the sorted list of vertex id and a flag that says if the element is boundary

"},{"location":"polyfempy_doc/#set_high_order_mesh","title":"set_high_order_mesh","text":"

set_high_order_mesh(vertices: array, connectivity: array, nodes_pos: array, nodes_indices: List[List[int]], normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

Loads an high order mesh from vertices, connectivity, nodes, and node indices mapping element to nodes

"},{"location":"polyfempy_doc/#set_log_level","title":"set_log_level","text":"

set_log_level(log_level: int)

sets polyfem log level, valid value between 0 (all logs) and 6 (no logs)

"},{"location":"polyfempy_doc/#set_mesh","title":"set_mesh","text":"

set_mesh(vertices: array, connectivity: array, normalize_mesh: bool = False, vismesh_rel_area: float = 1e-05, n_refs: int = 0, boundary_id_threshold: float = -1.0)

Loads a mesh from vertices and connectivity

"},{"location":"polyfempy_doc/#set_rhs","title":"set_rhs","text":"

set_rhs(matrix: array)

Sets the rhs

"},{"location":"polyfempy_doc/#set_rhs_from_path","title":"set_rhs_from_path","text":"

set_rhs_from_path(path: str)

Loads the rhs from a file

"},{"location":"polyfempy_doc/#set_settings","title":"set_settings","text":"

set_settings(json: object)

load PDE and problem parameters from the settings

"},{"location":"polyfempy_doc/#settings","title":"settings","text":"

settings(json: object)

load PDE and problem parameters from the settings

"},{"location":"polyfempy_doc/#solve","title":"solve","text":"

solve()

solve the pde

"},{"location":"polyfempy_doc/#class-tensorformulations","title":"class TensorFormulations","text":"

HookeLinearElasticity = \u2018HookeLinearElasticity\u2019

IncompressibleLinearElasticity = \u2018IncompressibleLinearElasticity\u2019

LinearElasticity = \u2018LinearElasticity\u2019

NeoHookean = \u2018NeoHookean\u2019

NonLinearElasticity = \u2018NonLinearElasticity\u2019

SaintVenant = \u2018SaintVenant\u2019

Stokes = \u2018Stokes\u2019

"},{"location":"polysolve/","title":"PolySolve","text":"

This library contains a cross-platform Eigen wrapper for many different external linear solvers including (but not limited to):

  • CHOLMOD
  • Hypre
  • AMGCL
  • Pardiso
"},{"location":"polysolve/#example-usage","title":"Example Usage","text":"
const std::string solver_name = \"Hypre\"\nauto solver = LinearSolver::create(solver_name, \"\");\n\n// Configuration parameters like iteration or accuracy for iterative solvers\n// solver->setParameters(params);\n\n// System sparse matrix\nEigen::SparseMatrix<double> A;\n\n// Right-hand side\nEigen::VectorXd b;\n\n// Solution\nEigen::VectorXd x(b.size());\n\nsolver->analyzePattern(A, A.rows());\nsolver->factorize(A);\nsolver->solve(b, x);\n

You can use LinearSolver::availableSolvers() to obtain the list of available solvers.

"},{"location":"polysolve/#parameters","title":"Parameters","text":"

Polysolve uses a JSON file to provide parameters to the individual solvers. The following template can be used as a starting point, and a more detailed explanation of the parameters is below.

{\n\"Eigen::LeastSquaresConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Eigen::DGMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Eigen::ConjugateGradient\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Eigen::BiCGSTAB\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Eigen::GMRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Eigen::MINRES\": {\n\"max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"Pardiso\": {\n\"mtype\": -1\n},\n\"Hypre\": {\n\"max_iter\": 1000,\n\"pre_max_iter\": 1000,\n\"tolerance\": 1e-6\n},\n\"AMGCL\": {\n\"precond\": {\n\"relax\": {\n\"degree\": 16,\n\"type\": \"chebyshev\",\n\"power_iters\": 100,\n\"higher\": 2,\n\"lower\": 0.008333333333,\n\"scale\": true\n},\n\"class\": \"amg\",\n\"max_levels\": 6,\n\"direct_coarse\": false,\n\"ncycle\": 2,\n\"coarsening\": {\n\"type\": \"smoothed_aggregation\",\n\"estimate_spectral_radius\": true,\n\"relax\": 1,\n\"aggr\": {\n\"eps_strong\": 0\n}\n}\n},\n\"solver\": {\n\"tol\": 1e-10,\n\"maxiter\": 1000,\n\"type\": \"cg\"\n}\n}\n}\n
"},{"location":"polysolve/#iterative-solvers-amgcl-eigen-internal-solvers-hypre","title":"Iterative solvers (AMGCL, Eigen Internal Solvers, HYPRE)","text":"
  • max_iter controls the solver\u2019s iterations, default 1000
  • conv_tol, tolerance controls the convergence tolerance, default 1e-10
"},{"location":"polysolve/#hypre-only","title":"Hypre Only","text":"
  • pre_max_iter, number of pre iterations, default 1
"},{"location":"polysolve/#amgcl-only","title":"AMGCL Only","text":"

The default parameters of the AMGCL solver are:

{\n\"precond\": {\n\"relax\": {\n\"degree\": 16,\n\"type\": \"chebyshev\",\n\"power_iters\": 100,\n\"higher\": 2,\n\"lower\": 0.008333333333,\n\"scale\": true\n},\n\"class\": \"amg\",\n\"max_levels\": 6,\n\"direct_coarse\": false,\n\"ncycle\": 2,\n\"coarsening\": {\n\"type\": \"smoothed_aggregation\",\n\"estimate_spectral_radius\": true,\n\"relax\": 1,\n\"aggr\": {\n\"eps_strong\": 0\n}\n}\n},\n\"solver\": {\n\"tol\": 1e-10,\n\"maxiter\": 1000,\n\"type\": \"cg\"\n}\n}\n

For a more details and options refer to the AMGCL documentation.

"},{"location":"polysolve/#pardiso","title":"Pardiso","text":"

mtype, sets the matrix type, default 11

mtype Description 1 real and structurally symmetric 2 real and symmetric positive definite -2 real and symmetric indefinite 3 complex and structurally symmetric 4 complex and Hermitian positive definite -4 complex and Hermitian indefinite 6 complex and symmetric 11 real and nonsymmetric 13 complex and nonsymmetric"},{"location":"python/","title":"Python bindings","text":"

Warning

The python bindings are in beta. Expect API changes and possible bugs. Use at your own peril!

I am making efforts to provide a simple python interface to Polyfem.

For doing so I am maintaining a conda package which can be easily installed https://anaconda.org/conda-forge/polyfempy.

Note that the conda deployment is slow and this tutorial will follow the deployment version.

If you hare in a hurry for the juicy latest feature you can clone the repository Polyfem-python and use pip to install:

python setup.py develop\n
and
python setup.py test\n
for testing.

Note that the folders tests contain some tests which can be used as documentation.

The documentation can be found here.

"},{"location":"python/#tutorial","title":"Tutorial","text":"

Polyfem relies on 3 main objects:

  1. Settings that contains the main settings such discretization order (e.g., \\(P_1\\) or \\(P_2\\)), material parameters, formulation, etc.
  2. Problem that describe the problem you want to solve, that is the boundary conditions and right-hand side. There are some predefined problems, such as DrivenCavity, or generic problems, such as GenericTensor.
  3. Solver that is the actual FEM solver.

The usage of specific problems is indented for benchmarking, in general you want to use the GenericTensor for tensor-based PDEs (e.g., elasticity) or GenericScalar for scalar PDEs (e.g., Poisson).

A typical use of Polyfem is:

settings = polyfempy.Settings()\n# set necessary settings\n# e.g. settings.discr_order = 2\n\nproblem = polyfempy.GenericTensor() # or any other problem\n# set problem related data\n# e.g. problem.set_displacement(1, [0, 0], [True, False])\n\nsettings.problem = problem\n\n#now we can create a solver and solve\nsolver = polyfempy.Solver()\n\nsolver.settings(settings)\nsolver.load_mesh_from_path(mesh_path)\n\nsolver.solve()\n

Note 1: for legacy reasons Polyfem always normalizes the mesh (i.e., rescale it to lay in the \\([0,1]^d\\) box, you can use normalize_mesh = False while loading to disable this feature.

Note 2: the solution \\(u(x)\\) of a FEM solver are the coefficients \\(u_i\\) you need to multiply the bases \\(\\varphi_i(x)\\) with: $$ u(x)=\\sum u_i \\varphi_i(x). $$ The coefficients \\(u_i\\) are unrelated with the mesh vertices because of reordering of the nodes or high-order bases. For instance \\(P_2\\) bases have additional nodes on the edges which do not exist in the mesh.

For this reason Polyfem uses a visualization mesh where the solution is sampled at the vertices. This mesh has two advantages: 1. it solves the problem of nodes reordering and additional nodes in the same way 2. it provides a \u201ctrue\u201d visualization for high order solution by densely sampling each element (a \\(P_2\\) solution is a piecewise quadratic function which is visualized in a picewise linear fashion, thus the need of a dense element sampling).

To control the resolution of the visualization mesh use vismesh_rel_area named-argument while loading.

"},{"location":"python/#notebook","title":"Notebook","text":"

For more details and nice interactive example go to the notebook tutorial!

Or just play with the tutorial in

"},{"location":"python_examples/","title":"Jupyter Tutorial","text":"

This is a jupyter notebook. The \"real\" notebook can be found here.

Polyfem relies on 3 main objects:

  1. Settings that contains the main settings such discretization order (e.g., $P_1$ or $P_2$), material parameters, formulation, etc.
  2. Problem that describe the problem you want to solve, that is the boundary conditions and right-hand side. There are some predefined problems, such as DrivenCavity, or generic problems, such as GenericTensor.
  3. Solver that is the actual FEM solver.

The usage of specific problems is indented for benchmarking, in general you want to use the GenericTensor for tensor-based PDEs (e.g., elasticity) or GenericScalar for scalar PDEs (e.g., Poisson).

A typical use of Polyfem is:

settings = polyfempy.Settings(\n    pde=polyfempy.PDEs.LinearElasticity, # or any other PDE\n    discr_order=2\n)\n# set necessary settings\n# e.g. settings.discr_order = 2\n\nproblem = polyfempy.Problem() # or any other problem\n# set problem related data\n# e.g. problem.set_displacement(1, [0, 0], [True, False])\n\nsettings.problem = problem\n\n#now we can create a solver and solve\nsolver = polyfempy.Solver()\n\nsolver.settings(settings)\nsolver.load_mesh_from_path(mesh_path, normalize_mesh=False)\n\nsolver.solve()\n

Note 1: for legacy reasons Polyfem always normalizes the mesh (i.e., rescale it to lay in the $[0,1]^d$ box, you can use normalize_mesh=False when loading to disable this feature.

Note 2: the solution $u(x)$ of a FEM solver are the coefficients $u_i$ you need to multiply the bases $\\varphi_i(x)$ with: $$ u(x)=\\sum u_i \\varphi_i(x). $$ The coefficients $u_i$ are unrelated with the mesh vertices because of reordering of the nodes or high-order bases. For instance $P_2$ bases have additional nodes on the edges which do not exist in the mesh.

For this reason Polyfem uses a visualization mesh where the solution is sampled at the vertices. This mesh has two advantages:

  1. it solves the problem of nodes reordering and additional nodes in the same way
  2. it provides a \"true\" visualization for high order solution by densely sampling each element (a $P_2$ solution is a piecewise quadratic function which is visualized in a picewise linear fashion, thus the need of a dense element sampling).

To control the resolution of the visualization mesh use vismesh_rel_area while loading.

Some imports for plotting

In\u00a0[\u00a0]: Copied!
import meshplot as mp\n
import meshplot as mp

algebra

In\u00a0[\u00a0]: Copied!
import numpy as np\n
import numpy as np

and finally polyfempy

In\u00a0[\u00a0]: Copied!
import polyfempy as pf\n
import polyfempy as pf

Creates a quad mesh of n_pts x n_pts in the form of a regular grid

In\u00a0[\u00a0]: Copied!
def create_quad_mesh(n_pts):\n    extend = np.linspace(0,1,n_pts)\n    x, y = np.meshgrid(extend, extend, sparse=False, indexing='xy')\n    pts = np.column_stack((x.ravel(), y.ravel()))\n    \n    faces = np.ndarray([(n_pts-1)**2, 4],dtype=np.int32)\n\n    index = 0\n    for i in range(n_pts-1):\n        for j in range(n_pts-1):\n            faces[index, :] = np.array([\n                j + i * n_pts,\n                j+1 + i * n_pts,\n                j+1 + (i+1) * n_pts,\n                j + (i+1) * n_pts\n            ])\n            index = index + 1\n            \n    return pts, faces\n
def create_quad_mesh(n_pts): extend = np.linspace(0,1,n_pts) x, y = np.meshgrid(extend, extend, sparse=False, indexing='xy') pts = np.column_stack((x.ravel(), y.ravel())) faces = np.ndarray([(n_pts-1)**2, 4],dtype=np.int32) index = 0 for i in range(n_pts-1): for j in range(n_pts-1): faces[index, :] = np.array([ j + i * n_pts, j+1 + i * n_pts, j+1 + (i+1) * n_pts, j + (i+1) * n_pts ]) index = index + 1 return pts, faces

This is the python version of the plate with hole example explained here.

Set the mesh path

In\u00a0[\u00a0]: Copied!
mesh_path = \"plane_hole.obj\"\n
mesh_path = \"plane_hole.obj\"

create settings:

  • Pick linear $P_1$ elements (if the mesh would be a quad it would be $Q_1$)
  • We are use a linear material model
In\u00a0[\u00a0]: Copied!
settings = pf.Settings(\n    discr_order=1,\n    pde=pf.PDEs.LinearElasticity\n)\n
settings = pf.Settings( discr_order=1, pde=pf.PDEs.LinearElasticity )

and choose Young's modulus and poisson ratio

In\u00a0[\u00a0]: Copied!
settings.set_material_params(\"E\", 210000)\nsettings.set_material_params(\"nu\", 0.3)\n
settings.set_material_params(\"E\", 210000) settings.set_material_params(\"nu\", 0.3)

Next we setup the problem

In\u00a0[\u00a0]: Copied!
problem = pf.Problem()\n
problem = pf.Problem()

sideset 1 has symetric boundary in $x$

In\u00a0[\u00a0]: Copied!
problem.set_x_symmetric(1)\n
problem.set_x_symmetric(1)

sideset 4 has symmetric boundary in $y$

In\u00a0[\u00a0]: Copied!
problem.set_y_symmetric(4)\n
problem.set_y_symmetric(4)

sideset 3 has a force of [100, 0] applied

In\u00a0[\u00a0]: Copied!
problem.set_force(3, [100, 0])\n
problem.set_force(3, [100, 0])

fianally set the problem

In\u00a0[\u00a0]: Copied!
settings.problem = problem\n
settings.problem = problem

Solve! Note: we normalize the mesh to be in $[0,1]^2$

In\u00a0[\u00a0]: Copied!
solver = pf.Solver()\n\nsolver.settings(settings)\nsolver.load_mesh_from_path(mesh_path, normalize_mesh=True)\n\nsolver.solve()\n
solver = pf.Solver() solver.settings(settings) solver.load_mesh_from_path(mesh_path, normalize_mesh=True) solver.solve()

Get the solution

In\u00a0[\u00a0]: Copied!
pts, tets, disp = solver.get_sampled_solution()\n
pts, tets, disp = solver.get_sampled_solution()

diplace the mesh

In\u00a0[\u00a0]: Copied!
vertices = pts + disp\n
vertices = pts + disp

and get the stresses

In\u00a0[\u00a0]: Copied!
mises, _ = solver.get_sampled_mises_avg()\n
mises, _ = solver.get_sampled_mises_avg()

finally plot with the above code

In\u00a0[\u00a0]: Copied!
mp.plot(vertices, tets, mises, return_plot=True)\n
mp.plot(vertices, tets, mises, return_plot=True)

Note that we used get_sampled_mises_avg to get the Von Mises stresses because they depend on the Jacobian of the displacement which, becase we use $P_1$ elements, is piece-wise constant. To avoid that effect in get_sampled_mises_avg the mises are averaged per vertex weighted by the area of the triangles. If you want the \"real\" mises just call

In\u00a0[\u00a0]: Copied!
mises = solver.get_sampled_mises()\nmp.plot(vertices, tets, mises, return_plot=True)\n
mises = solver.get_sampled_mises() mp.plot(vertices, tets, mises, return_plot=True)

This is the same example as before, but we use wildmeshing to create a curved mesh.

In\u00a0[\u00a0]: Copied!
import wildmeshing as wm\nmesh_path = \"plane_hole.svg\"\n\nv, f, nodes, F_nodes = wm.triangulate_svg(mesh_path, cut_outside=True)\n
import wildmeshing as wm mesh_path = \"plane_hole.svg\" v, f, nodes, F_nodes = wm.triangulate_svg(mesh_path, cut_outside=True)

Now we proceed as before

In\u00a0[\u00a0]: Copied!
#create settings\nsettings = pf.Settings(\n    discr_order=1, #pick linear P_1 elements, even if the geometry is P_3\n    pde=pf.PDEs.LinearElasticity #Linear elasticity\n)\n\n#Material parameters\nsettings.set_material_params(\"E\", 210000)\nsettings.set_material_params(\"nu\", 0.3)\n
#create settings settings = pf.Settings( discr_order=1, #pick linear P_1 elements, even if the geometry is P_3 pde=pf.PDEs.LinearElasticity #Linear elasticity ) #Material parameters settings.set_material_params(\"E\", 210000) settings.set_material_params(\"nu\", 0.3)

Next we setup the problem as before

In\u00a0[\u00a0]: Copied!
problem = pf.Problem()\n\n#sideset 1 is symmetric in x\nproblem.set_x_symmetric(1)\n\n#sideset 4 is symmetric in y\nproblem.set_y_symmetric(4)\n\n#sideset 3 has a force of [100, 0] applied\nproblem.set_force(3, [100, 0])\n
problem = pf.Problem() #sideset 1 is symmetric in x problem.set_x_symmetric(1) #sideset 4 is symmetric in y problem.set_y_symmetric(4) #sideset 3 has a force of [100, 0] applied problem.set_force(3, [100, 0])

fianally set the problem

In\u00a0[\u00a0]: Copied!
settings.problem = problem\n
settings.problem = problem

Create the solver and load the high-order mesh, the only difference with respect to before

In\u00a0[\u00a0]: Copied!
solver = pf.Solver()\n\nsolver.settings(settings)\nsolver.set_high_order_mesh(v, f, nodes, F_nodes, normalize_mesh=True)\n
solver = pf.Solver() solver.settings(settings) solver.set_high_order_mesh(v, f, nodes, F_nodes, normalize_mesh=True)

And finally, solve!

In\u00a0[\u00a0]: Copied!
solver.solve()\n
solver.solve()

Get and plot the solution, same as before

In\u00a0[\u00a0]: Copied!
pts, tets, disp = solver.get_sampled_solution()\n\n#diplace the mesh\nvertices = pts + disp\n\n#get the stresses\nmises, _ = solver.get_sampled_mises_avg()\n\n#plot\nmp.plot(vertices, tets, mises, return_plot=True)\n
pts, tets, disp = solver.get_sampled_solution() #diplace the mesh vertices = pts + disp #get the stresses mises, _ = solver.get_sampled_mises_avg() #plot mp.plot(vertices, tets, mises, return_plot=True)

Non-linear example. We want to torque a 3D bar around the $z$ direction.

The example is really similar as the one just above.

Sets the mesh, create a solver, and load the mesh.

In this case the mesh has already the correct size. We also choose a coarse visualization mesh

In\u00a0[\u00a0]: Copied!
mesh_path = \"square_beam_h.HYBRID\"\nsolver = pf.Solver()\nsolver.load_mesh_from_path(mesh_path, normalize_mesh=False, vismesh_rel_area=0.001)\n
mesh_path = \"square_beam_h.HYBRID\" solver = pf.Solver() solver.load_mesh_from_path(mesh_path, normalize_mesh=False, vismesh_rel_area=0.001)

We want to use the default sideset marking, top of the mesh is 5 and bottom is 6.

Let's verify. We first extract the sidesets: p are some point, t triangles, and s the sidesets from 1 to 6

In\u00a0[\u00a0]: Copied!
p, t, s = solver.get_boundary_sidesets()\n
p, t, s = solver.get_boundary_sidesets()

Now we can plot it

In\u00a0[\u00a0]: Copied!
tmp = np.zeros_like(s)\ntmp[s==5] = 1\ntmp[s==6] = 1\n\nmp.plot(p, t, tmp, return_plot=True)\n
tmp = np.zeros_like(s) tmp[s==5] = 1 tmp[s==6] = 1 mp.plot(p, t, tmp, return_plot=True)

Now we create the settings, as before.

Note: It is an hex-mesh so we are using $Q_1$.

Differently from before we want a non-linear material model: NeoHookean.

To avoid ambiguities in the rotation, we want to do 5 steps of incremental loading.

In\u00a0[\u00a0]: Copied!
settings = pf.Settings(\n    discr_order=1,\n    pde=pf.PDEs.NonLinearElasticity,\n    \n    nl_solver_rhs_steps=5\n)\n
settings = pf.Settings( discr_order=1, pde=pf.PDEs.NonLinearElasticity, nl_solver_rhs_steps=5 )

Choose Young's modulus and Poisson's ratio, as before

In\u00a0[\u00a0]: Copied!
settings.set_material_params(\"E\", 200)\nsettings.set_material_params(\"nu\", 0.35)\n
settings.set_material_params(\"E\", 200) settings.set_material_params(\"nu\", 0.35)

Now we setup problem with fixed sideset (5), rotating sideset (6), ahlf a tour along the $z$-axis.

In\u00a0[\u00a0]: Copied!
problem = pf.Torsion(\n    fixed_boundary=5, #sideset 5 is fixed\n    turning_boundary=6, #sideset 6 rotates\n    \n    n_turns = 0.5, #by half a tour\n    \n    axis_coordiante=2, #around the z-axis, 2\n    \n)\n
problem = pf.Torsion( fixed_boundary=5, #sideset 5 is fixed turning_boundary=6, #sideset 6 rotates n_turns = 0.5, #by half a tour axis_coordiante=2, #around the z-axis, 2 )

and set the problem and solve

In\u00a0[\u00a0]: Copied!
settings.problem = problem\n\n#solving!\nsolver.settings(settings)\n\nsolver.solve()\n
settings.problem = problem #solving! solver.settings(settings) solver.solve()

takes approx 1 min because it is a complicated non-linear problem!

Get solution and stesses as before

Since we want to show only the surface there is no need of getting the whole volume, so we set boundary_only to True

In\u00a0[\u00a0]: Copied!
pts, tets, disp = solver.get_sampled_solution(boundary_only=True)\nvertices = pts + disp\nmises, _ = solver.get_sampled_mises_avg(boundary_only=True)\n
pts, tets, disp = solver.get_sampled_solution(boundary_only=True) vertices = pts + disp mises, _ = solver.get_sampled_mises_avg(boundary_only=True)

and plot the 3d result!

In\u00a0[\u00a0]: Copied!
mp.plot(vertices, tets, mises, shading={\"flat\":True}, return_plot=True)\n
mp.plot(vertices, tets, mises, shading={\"flat\":True}, return_plot=True)

Create the mesh using the utility function

In\u00a0[\u00a0]: Copied!
pts, faces = create_quad_mesh(50)\n
pts, faces = create_quad_mesh(50)

create settings, pick linear $Q_2$ elements for velocity and $Q_1$ for pressure and select stokes as material model.

In\u00a0[\u00a0]: Copied!
settings = pf.Settings(\n    discr_order=2,\n    pressure_discr_order=1,\n    \n    pde=pf.PDEs.Stokes\n)\n
settings = pf.Settings( discr_order=2, pressure_discr_order=1, pde=pf.PDEs.Stokes )

Set the viscosity of the fluid

In\u00a0[\u00a0]: Copied!
settings.set_material_params(\"viscosity\", 1)\n
settings.set_material_params(\"viscosity\", 1)

The default solver do not support mixed formulation, we need to choose UmfPackLU

In\u00a0[\u00a0]: Copied!
settings.set_advanced_option(\"solver_type\", \"Eigen::UmfPackLU\")\n
settings.set_advanced_option(\"solver_type\", \"Eigen::UmfPackLU\")

We use the standard Driven Cavity problem

In\u00a0[\u00a0]: Copied!
problem = pf.DrivenCavity()\n
problem = pf.DrivenCavity()

we set the problem

In\u00a0[\u00a0]: Copied!
settings.problem = problem\n
settings.problem = problem

We create the solver and set the settings

In\u00a0[\u00a0]: Copied!
solver = pf.Solver()\nsolver.settings(settings)\n
solver = pf.Solver() solver.settings(settings)

This time we are using pts and faces instead of loading from the disk

In\u00a0[\u00a0]: Copied!
solver.set_mesh(pts, faces, vismesh_rel_area=0.001)\n
solver.set_mesh(pts, faces, vismesh_rel_area=0.001)

Solve!

In\u00a0[\u00a0]: Copied!
solver.solve()\n
solver.solve()

We now get the solution and the pressure

In\u00a0[\u00a0]: Copied!
pts, tris, velocity = solver.get_sampled_solution()\n
pts, tris, velocity = solver.get_sampled_solution()

and plot it!

In\u00a0[\u00a0]: Copied!
each = 10\np = mp.plot(pts, tris, np.linalg.norm(velocity, axis=1), return_plot=True)\np.add_lines(pts[0:pts.shape[0]:each,:], pts[0:pts.shape[0]:each,:]+velocity[0:pts.shape[0]:each,:]/6)\np\n
each = 10 p = mp.plot(pts, tris, np.linalg.norm(velocity, axis=1), return_plot=True) p.add_lines(pts[0:pts.shape[0]:each,:], pts[0:pts.shape[0]:each,:]+velocity[0:pts.shape[0]:each,:]/6) p

Create the mesh using the utility function

In\u00a0[\u00a0]: Copied!
pts, faces = create_quad_mesh(50)\n
pts, faces = create_quad_mesh(50)

create settings, pick linear $Q_1$ elements, and a linear material model.

In this case we want to run a simulation with $t\\in[0, 10]$ and have 50 time steps.

In\u00a0[\u00a0]: Copied!
settings = pf.Settings(\n    discr_order=1,\n    pde=pf.PDEs.LinearElasticity,\n    \n    tend=10,\n    time_steps=50\n)\n
settings = pf.Settings( discr_order=1, pde=pf.PDEs.LinearElasticity, tend=10, time_steps=50 )

Choose Young's modulus and poisson ratio

In\u00a0[\u00a0]: Copied!
settings.set_material_params(\"E\", 1)\nsettings.set_material_params(\"nu\", 0.3)\n
settings.set_material_params(\"E\", 1) settings.set_material_params(\"nu\", 0.3)

Next we setup the problem, this doesnt have any parameters. It will...

In\u00a0[\u00a0]: Copied!
problem = pf.Gravity()\n
problem = pf.Gravity()

we set the problem

In\u00a0[\u00a0]: Copied!
settings.problem = problem\n
settings.problem = problem

We create the solver and set the settings

In\u00a0[\u00a0]: Copied!
solver = pf.Solver()\nsolver.settings(settings)\n
solver = pf.Solver() solver.settings(settings)

This time we are using pts and faces instead of loading from the disk (For efficienty in the browser we select a coarse vis mesh)

In\u00a0[\u00a0]: Copied!
solver.set_mesh(pts, faces, vismesh_rel_area=0.001)\n
solver.set_mesh(pts, faces, vismesh_rel_area=0.001)

Solve!

In\u00a0[\u00a0]: Copied!
solver.solve()\n
solver.solve()

Get the solution and the mises

In\u00a0[\u00a0]: Copied!
pts = solver.get_sampled_points_frames()\ntris = solver.get_sampled_connectivity_frames()\ndisp = solver.get_sampled_solution_frames()\nmises = solver.get_sampled_mises_avg_frames()\n
pts = solver.get_sampled_points_frames() tris = solver.get_sampled_connectivity_frames() disp = solver.get_sampled_solution_frames() mises = solver.get_sampled_mises_avg_frames() In\u00a0[\u00a0]: Copied!
def plot(frame, p=None):\n    return mp.plot(pts[frame]+disp[frame], tris[frame], mises[frame], return_plot=True, plot=p)\n
def plot(frame, p=None): return mp.plot(pts[frame]+disp[frame], tris[frame], mises[frame], return_plot=True, plot=p)

Before the animation, let's plot the solution some frames

In\u00a0[\u00a0]: Copied!
plot(0)\n
plot(0) In\u00a0[\u00a0]: Copied!
plot(5)\n
plot(5) In\u00a0[\u00a0]: Copied!
plot(11)\n
plot(11)

Now we are ready to do the animation

In\u00a0[\u00a0]: Copied!
p = plot(0)\n\n@mp.interact(frame=(0, len(mises)))\ndef step(frame=0):\n    plot(frame, p)\n
p = plot(0) @mp.interact(frame=(0, len(mises))) def step(frame=0): plot(frame, p)"},{"location":"python_examples/#polyfem-python-tutorial","title":"Polyfem Python Tutorial\u00b6","text":""},{"location":"python_examples/#examples","title":"Examples\u00b6","text":""},{"location":"python_examples/#utility","title":"Utility\u00b6","text":""},{"location":"python_examples/#plate-hole","title":"Plate hole\u00b6","text":""},{"location":"python_examples/#plate-hole-with-high-order-mesh","title":"Plate hole with High-Order Mesh\u00b6","text":""},{"location":"python_examples/#torsion","title":"Torsion\u00b6","text":""},{"location":"python_examples/#fluid-simulation","title":"Fluid simulation\u00b6","text":""},{"location":"python_examples/#time-dependent-simulation","title":"Time dependent simulation\u00b6","text":""},{"location":"details/contact/","title":"Contact","text":"

PolyFEM uses Incremental Potential Contact (IPC) [Li et al. 2020] to handle contacts.

IPC in PolyFEM is implemented through the use of the IPC Toolkit.

Todo

Describe the IPC formulation and parameters.

"},{"location":"details/formulations/","title":"Formulations","text":"

The following formulations are available in the PolyFEM list of possible formulations. The constants can be set in params. All formulations support boundary conditions. For the elasticity formulations we output:

Cauchy stress tensor

\\[ \\sigma = \\frac 1 J \\frac{\\partial \\Psi}{\\partial F} F^T \\]

Frist Piola Kirchhoff stress tensor (Wikipedia)

\\[ P = J \\sigma F^{-T} \\]

Second Piola Kirchhoff stress tensor (Wikipedia)

\\[ S = J F^{-1} \\sigma F^{-T}, \\]

where \\(\\Psi\\) is the energy density, \\(F\\) the deformation gradient, and \\(J=\\det(F)\\).

"},{"location":"details/formulations/#scalar","title":"Scalar","text":""},{"location":"details/formulations/#laplacian","title":"Laplacian","text":"
  • Constants: none
  • Description: solve for \\(-\\Delta u = f\\)
"},{"location":"details/formulations/#bilaplacian-mixed","title":"Bilaplacian (mixed)","text":"
  • Constants: none
  • Description: solve for \\(-\\Delta^2 u = f\\)
"},{"location":"details/formulations/#helmholtz","title":"Helmholtz","text":"
  • Constants: \\(k\\)
  • Description: solve for \\(-\\Delta u - k^2 u = f\\)
"},{"location":"details/formulations/#tensor","title":"Tensor","text":""},{"location":"details/formulations/#linear-elasticity","title":"Linear Elasticity","text":"
  • Constants: E/nu, lambda/mu
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where
\\[ \\sigma[u] = 2 \\mu \\epsilon[u]+ \\lambda \\text{tr}(\\epsilon[u]) I \\qquad \\epsilon[u] = \\frac 1 2 \\left(\\nabla u^T + \\nabla u\\right) \\]"},{"location":"details/formulations/#hooke-linear-elasticity","title":"Hooke Linear Elasticity","text":"
  • Constants: elasticity_tensor, E/nu, lambda/mu
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where
\\[ \\sigma[u] = C : \\epsilon[u] \\qquad \\epsilon[u] = \\frac 1 2 \\left(\\nabla u^T + \\nabla u\\right) \\]

where \\(C\\) is the elasticity tensor

"},{"location":"details/formulations/#incompressible-linear-elasticity-mixed","title":"Incompressible Linear Elasticity (mixed)","text":"
  • Constants: E/nu, lambda/mu
  • Description: solve for
\\[\\begin{align} -\\text{div}(2\\mu\\epsilon[u] + p I) &= f\\\\ \\text{div}(u) - \\lambda^{-1}p &= 0 \\end{align}\\]"},{"location":"details/formulations/#saint-venantkirchoff-elasticity","title":"Saint Venant\u2013Kirchoff Elasticity","text":"
  • Constants: elasticity_tensor, E/nu, lambda/mu
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where
\\[ \\sigma[u] = C: \\epsilon[u] \\qquad \\epsilon[u] = \\frac 1 2 \\left(\\nabla u^T \\nabla u + \\nabla u^T + \\nabla u\\right) \\]

where \\(C\\) is the elasticity tensor

"},{"location":"details/formulations/#neohookean-elasticity","title":"NeoHookean Elasticity","text":"
  • Constants: E/nu, lambda/mu
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where
\\[ \\sigma[u] = \\mu (F[u] - F[u]^{-T}) + \\lambda \\ln(\\det F[u]) F[u]^{-T} \\qquad F[u] = \\nabla u + I \\]"},{"location":"details/formulations/#mooney-rivlin-elasticity","title":"Mooney-Rivlin Elasticity","text":"
  • Constants: c1/c2/k=1
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where \\(\\sigma[u]=\\nabla_u \\Psi[u]\\). The energy density \\(\\Psi\\) is
\\[ \\Psi[u] = c_1 (\\widetilde{I_1} - d) + c_2 (\\widetilde{I_2} - d) + \\frac{k}{2} \\ln^2(J) \\]

where \\(d\\) is the dimension (2 or 3),

\\[\\begin{align} F = \\nabla u + I, \\quad J = \\det(F), \\quad \\tilde{F} = \\frac{1}{\\sqrt[d]{J}} F, \\quad \\widetilde{C} = \\widetilde{F} \\widetilde{F}^T, \\\\ \\widetilde{I_1} = \\text{tr}\\left(\\widetilde{C}\\right), \\quad \\text{and} \\quad \\widetilde{I_2} = \\frac{1}{2} \\left(\\left(\\trace{\\widetilde{C}}\\right)^2 - \\text{tr}\\left(\\widetilde{C}^2\\right)\\right). \\end{align}\\]
  • Reference: FEBio documentation
"},{"location":"details/formulations/#incompressible-ogden-elasticity","title":"Incompressible Ogden Elasticity","text":"
  • Constants: c/m/k
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where \\(\\sigma[u]=\\nabla_u \\Psi[u]\\). The energy density \\(\\Psi\\) is
\\[ \\Psi[u] = \\sum_{i=1}^N \\frac{c_i}{m_i^2} \\left( \\sum_{j=1}^d \\tilde{\\lambda}_j^{m_i} - d \\right) + \\frac{1}{2} K \\ln(J)^2 \\]

where \\(N\\), the number of terms, is dictated by the number of coefficients given, \\(d\\) is the dimension (2 or 3), \\(J = \\det(F)\\) where \\(F = \\nabla u + I\\), and \\(\\tilde{\\lambda}_j = J^{-\\frac{1}{d}}\\lambda_j\\) are the eigenvalues of \\(\\tilde{F}\\) (same as in the Mooney-Rivlin Elasticity).

  • Reference: FEBio documentation
"},{"location":"details/formulations/#unconstrained-ogden-elasticity","title":"Unconstrained Ogden Elasticity","text":"
  • Constants: mus/alphas/Ds
  • Description: solve for \\(-\\text{div}(\\sigma[u]) = f\\) where \\(\\sigma[u]=\\nabla_u \\Psi[u]\\). The energy density \\(\\Psi\\) is
\\[ \\Psi[u] = \\sum_{i=1}^N \\frac{2 \\mu_i}{\\alpha_i^2} \\left( \\sum_{j=1}^d \\tilde{\\lambda}_j^{\\alpha_i} - d \\right) + \\sum_{i=1}^N \\frac{\\left(J-1\\right)^{2 i}}{D_i} \\]

where \\(N\\), the number of terms, is dictated by the number of coefficients given, \\(d\\) is the dimension (2 or 3), \\(J = \\det(F)\\) where \\(F = \\nabla u + I\\), and \\(\\tilde{\\lambda}_j = J^{-\\frac{1}{d}}\\lambda_j\\) where \\(\\lambda_j\\) are the eigenvalues of \\(F.\\)

  • Reference: ABAQUS documentation
"},{"location":"details/formulations/#viscous-damping","title":"Viscous Damping","text":"
  • Constants: phi/psi
  • Description: an extra energy that represents dissipation, adding to the elastic energy in transient problems
\\[ R(F,\\dot{F})=\\psi \\|\\dot{E}(F,\\dot{F})\\|^2+\\frac{\\phi}{2}\\text{tr}^2\\dot{E}(F,\\dot{F}) \\]

where \\(F[u] = \\nabla u + I\\) and \\(E[u] = \\frac{1}{2}(F^TF-I)\\).

The above corresponds to the viscous Piola-Kirchhoff stress

\\[ P=F(2\\psi\\dot{E}+\\phi\\text{tr}(\\dot{E})I)=\\nabla_2 R(F,\\dot{F}). \\]"},{"location":"details/formulations/#stokes-mixed","title":"Stokes (mixed)","text":"
  • Constants: viscosity (\\(\\nu\\))
  • Description: solve for
\\[\\begin{align} -\\nu\\Delta u + \\nabla p &= f\\\\ -\\text{div}(u) &= 0 \\end{align}\\]"},{"location":"details/formulations/#navierstokes-mixed","title":"Navier\u2013Stokes (mixed)","text":"
  • Constants: viscosity (\\(\\nu\\))
  • Description: solve for
\\[\\begin{align} u\\cdot \\nabla u -\\nu\\Delta u + \\nabla p &= f\\\\ -\\text{div}(u) &= 0 \\end{align}\\]"},{"location":"details/formulations/#implementing-new-formulations","title":"Implementing New Formulations","text":"

Todo

Describe how to implement a new formulation in C++.

"},{"location":"details/miscellaneous/","title":"Miscellaneous","text":""},{"location":"details/miscellaneous/#understanding-solver-logs","title":"Understanding solver logs","text":"

The nonlinear solver will log a debug message per iteration with some useful information. Take the following example log:

[polyfem] [debug] [Newton] iter=51 f=-1.06006e-06 ||\u2207f||=0.006432 ||\u0394x||=0.0037612 \u0394x\u22c5\u2207f(x)=-6.71732e-08 g=9.69072e-05 tol=1e-05 rate=0.0321861 ||step||=0.000121058\n

The terms in order they appear are:

  • iter: the iteration number
  • f: the value of the objective function
  • ||\u2207f||: the \\(L^2\\)-norm of the gradient of f
  • ||\u0394x||: the \\(L^2\\)-norm of the update direction to our optimization variables (e.g., displacements/positions for elasticity)
  • \u0394x\u22c5\u2207f(x): the dot product between these values (this is a measure of how much progress we can expect the optimization can make)
  • g: the convergence criteria (i.e., the optimization stops when g < tol); this depends on the choice of \"useGradNorm\" solver parameter (for more information see here)
  • tol: the convergence criteria tolerance
  • rate: the step size the line-search produced (i.e. \\(x_{i+1} = x_i + \\text{rate} * \\Delta x\\))
  • ||step||: the L2 norm of the step (i.e. \\(\\|\\text{rate} * \\Delta x\\| = \\text{rate} * \\|\\Delta x\\|\\))
"},{"location":"details/problems/","title":"Problems","text":"

Each problem has a specific set of optional problem_params described here.

"},{"location":"details/problems/#generic","title":"Generic","text":""},{"location":"details/problems/#genericscalar","title":"GenericScalar","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: scalar
  • Description: solves for generic scalar problem with specified rhs
  • Options:
    \"rhs\": 3                            // Rhs of the problem\n\"dirichlet_boundary\": [             // List of Dirichlet boundaries\n{\n\"id\": 1,                        // Boundary id\n\"value\": 0                      // Boundary value\n},\n{\n\"id\": 2,                        // Boundary id\n\"value\": \"sin(x)+y\"             // Formulas are supported\n}],\n\"neumann_boundary\": [               // List of Neumann boundaries\n{\n\"id\": 3,                        // Boundary id\n\"value\": 1,                     // Boundary value\n},\n{\n\"id\": 4,                        // Boundary id\n\"value\": \"x^2\"                  // Formulas are supported\n}]\n
"},{"location":"details/problems/#generictensor","title":"GenericTensor","text":"
  • Has exact solution: false
  • Time-dependent: user-selected
  • Form: tensor
  • Description: solves for generic tensor problem with specified body forces
  • Options:
    \"rhs\": [1, 2, 3]                    // Rhs of the problem\n\"dirichlet_boundary\": [             // List of Dirichelt boundaries\n{\n\"id\": 1,                        // Boundary id\n\"value\": [0, 0, 0],             // Boundary vector value\n\"dimension\": [                  // Which dimension are Dirichelt\ntrue,\ntrue,\nfalse                   // In this case z is free\n]\n},\n{\n\"id\": 2,                        // Boundary id\n\"value\": [\"sin(x)+y\", \"z^2\", 0] // Formulas are supported\n}],\n\"neumann_boundary\": [               // List of Neumann boundaries\n{\n\"id\": 3,                        // Boundary id\n\"value\": [0, 0, 0]              // Boundary vector value\n},\n{\n\"id\": 4,                        // Boundary id\n\"value\": [\"sin(z)+y\", \"z^2\", 0] // Formulas are supported\n}],\n\"is_time_dependent\": false,\n\"initial_solution\": [0, 0, 0],\n\"initial_velocity\": [0, 0, 0],\n\"initial_acceleration\": [0, 0, 0]\n
"},{"location":"details/problems/#specific","title":"Specific","text":""},{"location":"details/problems/#compressionelasticexact","title":"CompressionElasticExact","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: tensor
  • Description: solve for
\\[\\begin{align} f_{2D}(x,y) &= -\\begin{bmatrix}(y^3 + x^2 + xy)/20\\\\ (3x^4 + xy^2 + x)/20\\end{bmatrix}\\\\ f_{3D}(x,y,z) &= -\\begin{bmatrix}(xy + x^2 + y^3 + 6z)/14\\\\ (zx - z^3 + xy^2 + 3x^4)/14\\\\ (xyz + y^2z^2 - 2x)/14\\end{bmatrix} \\end{align}\\]"},{"location":"details/problems/#cubic","title":"Cubic","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solve for \\(f(x,y,z) = (2y-0.9)^4 + 0.1\\)
"},{"location":"details/problems/#drivencavity","title":"DrivenCavity","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solve for zero right-hand side, and 0.25 for boundary id 1
"},{"location":"details/problems/#elastic","title":"Elastic","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solve for zero right-hand side, -0.25 for boundary id \u2155, 0.25 for id 3/6
"},{"location":"details/problems/#elasticexact","title":"ElasticExact","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: tensor
  • Description: solve for
\\[\\begin{align} f_{2D}(x,y) &= \\begin{bmatrix}(y^3 + x^2 + xy)/50\\\\ (3x^4 + xy^2 + x)/50\\end{bmatrix}\\\\ f_{3D}(x,y,z) &= \\begin{bmatrix}(xy + x^2 + y^3 + 6z)/80\\\\ (xz - z^3 + xy^2 + 3x^4)/80\\\\ (xyz + y^2 z^2 - 2x)/80\\end{bmatrix} \\end{align}\\]"},{"location":"details/problems/#elasticzerobc","title":"ElasticZeroBC","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solve for [0, 0.5, 0] right-hand side and zero boundary condition
"},{"location":"details/problems/#flow","title":"Flow","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solve for zero right-hand side, [0.25, 0, 0] for boundary id \u2153, [0, 0, 0] for 7
"},{"location":"details/problems/#franke","title":"Franke","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solves for the 2D and 3D Franke function
"},{"location":"details/problems/#gravity","title":"Gravity","text":"
  • Has exact solution: false
  • Time-dependent: true
  • Form: tensor
  • Description: solves for 0.1 body force in y direction and zero for boundary 4
"},{"location":"details/problems/#kernel","title":"Kernel","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar/tensor
  • Description: solves the omogenous PDE with n_kernels kernels placed on the bounding box at kernel_distance
  • Options: n_kernels sets the number of kernels, kernel_distance sets the distance from the bounding box
"},{"location":"details/problems/#linear","title":"Linear","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solve for \\(f(x,y,z) = x\\)
"},{"location":"details/problems/#linearelasticexact","title":"LinearElasticExact","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: tensor
  • Description: solve for
\\[\\begin{align} f_{2D}(x,y) &= \\begin{bmatrix}-(y + x)/50\\\\ -(3x + y)/50\\end{bmatrix}\\\\ f_{3D}(x,y,z) &= \\begin{bmatrix}-(y + x + z)/50\\\\ -(3x + y - z)/50\\\\ -(x + y - 2z)/50\\end{bmatrix}\\\\ \\end{align}\\]"},{"location":"details/problems/#minsurf","title":"MinSurf","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: scalar
  • Description: solve for -10 for rhs, and zero Dirichelt boundary condition
"},{"location":"details/problems/#pointbasedtensor","title":"PointBasedTensor","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solves for point-based boudary conditions
  • Options:
    \"scaling\": 1,               // Scaling factor\n\"rhs\": 0,                   // Right-hand side\n\"translation\": [0, 0, 0]    // Translation\n\"boundary_ids\": [           // List of Dirichelt boundaries\n{\n\"id\": 1,                // Boundary id\n\"value\": [0, 0, 0]      // Boundary vector value\n},\n{\n\"id\": 2,\n\"value\": {              // Rbf interpolated value\n\"function\": \"\",     // Function file\n\"points\": \"\",       // Points file\n\"rbf\": \"gaussian\",  // Rbf kernel\n\"epsilon\": 1.5,     // Rbf epsilon\n\"coordinate\": 2,    // Coordinate to ignore\n\n\"dimension\": [      // Which dimension are Dirichlet\ntrue,\ntrue,\nfalse           // In this case z is free\n]\n}\n},\n{\n\"id\": 2,\n\"value\": {              // Rbf interpolated value\n\"function\": \"\",     // Function file\n\"points\": \"\",       // Points file\n\"triangles\": \"\",    // Triangles file\n\"coordinate\": 2,    // Coordinate to ignore\n}\n}]\n
"},{"location":"details/problems/#quadratic","title":"Quadratic","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solve for \\(f(x,y,z) = x^2\\)
"},{"location":"details/problems/#quadraticelasticexact","title":"QuadraticElasticExact","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: tensor
  • Description: solve for
\\[\\begin{align} f_{2D}(x,y) &= \\begin{bmatrix} -(y^2 + x^2 + xy)/50\\\\ -(3x^2 + y)/50\\end{bmatrix}\\\\ f_{3D}(x,y,z) &= \\begin{bmatrix}-(y^2 + x^2 + xy + yz)/50\\\\ -(3x^2 + y + z^2)/50\\\\ -(xz + y^2 - 2z)/50\\end{bmatrix} \\end{align}\\]"},{"location":"details/problems/#sine","title":"Sine","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solve for
\\[\\begin{align} f(x,y) &= \\sin(10x)\\sin(10y)\\\\ f(x,y,z) &= \\sin(10x)\\sin(10y)\\sin(10z) \\end{align}\\]"},{"location":"details/problems/#testproblem","title":"TestProblem","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: scalar
  • Description: solve for extreme problem to test errors for high order discretizations
"},{"location":"details/problems/#timedependentflow","title":"TimeDependentFlow","text":"
  • Has exact solution: false
  • Time-dependent: true
  • Form: tensor
  • Description: solve for zero right-hand side, [0.25, 0, 0] for boundary id \u2153, [0, 0, 0] for 7, and zero inital velocity
"},{"location":"details/problems/#timedependentscalar","title":"TimeDependentScalar","text":"
  • Has exact solution: false
  • Time-dependent: true
  • Form: scalar
  • Description: solve for one right-hand side, zero boundary condition, and zero time boundary
"},{"location":"details/problems/#torsionelastic","title":"TorsionElastic","text":"
  • Has exact solution: false
  • Time-dependent: false
  • Form: tensor
  • Description: solve for zero body forces, fixed_boundary fixed (zero displacement), turning_boundary rotating around axis_coordiante for n_turns
  • Options: fixed_boundary id of the fixed boundary, turning_boundary id of the moving boundary, axis_coordiante coordinate of the rotating axis, n_turns number of turns
"},{"location":"details/problems/#zero_bc","title":"Zero_BC","text":"
  • Has exact solution: true
  • Time-dependent: false
  • Form: tensor
  • Description: solve for
\\[\\begin{align} f_{2D}(x,y) &= (1 - x) x^2 y (1-y)^2\\\\ f_{3D}(x,y,z) &= (1 - x) x^2 y (1-y)^2 z (1 - z) \\end{align}\\]"},{"location":"details/solvers/","title":"Solvers","text":""},{"location":"details/solvers/#linear-solver","title":"Linear Solver","text":"

PolyFEM offers several linear solver options based on compilation options. For more information, see PolySolve a stand-alone linear solver wrapper library used by PolyFEM.

Options: AMGCL, Eigen::BiCGSTAB, Eigen::CholmodSupernodalLLT, Eigen::ConjugateGradient, Eigen::DGMRES, Eigen::GMRES, Eigen::LeastSquaresConjugateGradient, Eigen::MINRES, Eigen::PardisoLDLT, Eigen::PardisoLU, Eigen::SimplicialLDLT, Eigen::SparseLU, Eigen::UmfPackLU, Hypre, Pardiso

"},{"location":"details/solvers/#nonlinear-solver","title":"Nonlinear Solver","text":"

To solve nonlinear formulations, PolyFEM offers two options: Newton\u2019s method (newton) and L-BFGS (lbfgs).

The settings for the solver are stored inside the field \"nonlinear\". General settings include:

  • \"grad_norm\" (default: 1e-8): convergence tolerance on the norm (\\(L^2\\)) of the gradient
  • \"nl_iterations\" (default: 1000): maximum number of iterations to spend solving
  • \"use_grad_norm\" (default: true): whether to use the gradient norm or update direction norm for convergence checks
    • When optimizing a function it is natural to check for a zero (up to tolerance) gradient as this signifies an extremum. However, we also implement the convergence criteria used by Li et al. [2020]. Where instead of the gradient\u2019s norm the update direction\u2019s \\(L^\\infty\\)-norm is used. This provides two benefits: (1) it expresses the convergence criteria in the units of the variable (e.g., distance for elasticity) which (2) avoids applying small updates that lead to a marginal change in the variables. Note: this criterion has been well tested for nonlinear elasticity, but your mileage may vary for other formulations.
"},{"location":"details/solvers/#newtons-method","title":"Newton\u2019s Method","text":"

A (projected) Newton\u2019s method with line search.

"},{"location":"details/solvers/#l-bfgs","title":"L-BFGS","text":"

A quasi-Newton method, L-BFGS requires more iterations than the full Newton\u2019s method but avoids expensive linear solves.

Reference: https://en.wikipedia.org/wiki/Limited-memory_BFGS Acknowledgments: The L-BFGS solver is implemented using the LBFGS++ library.

"},{"location":"details/solvers/#line-search","title":"Line Search","text":"

Todo

Describe line-search and its purpose.

"},{"location":"details/solvers/#backtracking","title":"Backtracking","text":"

Todo

Describe this method and its parameters.

"},{"location":"details/solvers/#armijo","title":"Armijo","text":"

Todo

Describe this method and its parameters.

"},{"location":"details/solvers/#armijo-alt","title":"Armijo (alt)","text":"

Todo

Describe this method and its parameters.

"},{"location":"details/solvers/#more-thuente","title":"More-Thuente","text":"

Todo

Describe this method and its parameters.

"},{"location":"details/time_integrators/","title":"Time Integrators","text":""},{"location":"details/time_integrators/#implicit-euler","title":"Implicit Euler","text":"
  • Parameters: None
  • Description:
\\[\\begin{align} \\dot{u}^{t+1} &= \\dot{u}^t + h \\ddot{u}^{t+1}\\\\ u^{t+1} &= u^t + h \\dot{u}^{t+1} \\end{align}\\]

where \\(h\\) is the time step size.

  • Reference: https://en.wikipedia.org/wiki/Backward_Euler_method
"},{"location":"details/time_integrators/#implicit-newmark","title":"Implicit Newmark","text":"
  • Parameters: beta, gamma
  • Description:
\\[\\begin{align} \\dot{u}^{t+1} &= \\dot{u}^t + (1-\\gamma)h\\ddot{u}^t + \\gamma h\\ddot{u}^{t+1}\\\\ u^{t+1} &= u^t + h\\dot{u}^t + \\tfrac{h^2}{2}((1-2\\beta)\\ddot{u}^t + 2\\beta\\ddot{u}^{t+1}) \\end{align}\\]

where \\(h\\) is the time step size and by default \\(\\gamma = 0.5\\) and \\(\\beta = 0.25\\).

  • Reference: https://en.wikipedia.org/wiki/Newmark-beta_method

Note

This is equivalent to the Trapezoidal rule for \\(\\gamma = 0.5\\) and \\(\\beta = 0.25\\).

"},{"location":"details/time_integrators/#backward-differentiation-formula-bdf","title":"Backward Differentiation Formula (BDF)","text":"
  • Parameters: num_steps
  • Description:
\\[\\begin{align} \\dot{u}^{t+1} &= (\\sum_{i=0}^{n-1} \\alpha_i \\dot{u}^{t-i}) + h\\beta\\ddot{u}^{t+1}\\\\ u^{t+1} &= (\\sum_{i=0}^{n-1} \\alpha_i u^{t-i}) + h\\beta\\dot{u}^{t+1} \\end{align}\\]

where \\(h\\) is the time step size, the coefficients \\(\\alpha_i\\) and \\(\\beta\\) are choosen to make the method \\(n\\)-th order accurate, and \\(n \\in \\{1, \\ldots, 6\\}\\) is the number of previous steps to consider (default: num_steps=1). This is equivalent to implicit Euler for \\(n=1\\). To initialize the values for \\(i > 0\\), the method starts from \\(n=1\\) and successively builds the history, increasing \\(n\\) by 1 until the \\(n\\)-th step. However, we know this can result in less than order \\(n\\) accuracy [Nishikawa 2019].

  • Reference: https://en.wikipedia.org/wiki/Backward_differentiation_formula
"},{"location":"tools/exporter/","title":"Exporter","text":"In\u00a0[\u00a0]: Copied!
import pydoc\nimport polyfempy\nimport re\nimport queue\nimport tempfile\n
import pydoc import polyfempy import re import queue import tempfile In\u00a0[\u00a0]: Copied!
packages = queue.Queue()\npackages.put(\"polyfempy\")\n
packages = queue.Queue() packages.put(\"polyfempy\") In\u00a0[\u00a0]: Copied!
docs = \"\"\n
docs = \"\" In\u00a0[\u00a0]: Copied!
\n
In\u00a0[\u00a0]: Copied!
while not packages.empty():\n\tpackage = packages.get()\n\n\twith tempfile.NamedTemporaryFile(suffix=\".md\") as tmp_file:\n\t\twith open(tmp_file.name, \"w\") as f:\n\t\t\tpydoc.doc(package,output=f)\n\n\t\twith open(tmp_file.name, \"r\") as f:\n\t\t\tlines = f.read()\n\n\tif \"PACKAGE CONTENTS\" in lines:\n\t\tprocess = False\n\n\t\tfor line in iter(lines.splitlines()):\n\t\t\tline = line.strip()\n\n\t\t\tif \"PACKAGE CONTENTS\" in line:\n\t\t\t\tprocess = True\n\t\t\t\tcontinue\n\n\t\t\tif \"FILE\" in line:\n\t\t\t\tbreak\n\n\t\t\tif not process:\n\t\t\t\tcontinue\n\t\t\tif len(line) <= 0:\n\t\t\t\tcontinue\n\n\t\t\tpackages.put(package + \".\" + line)\n\n\t\tcontinue\n\tif \"CLASSES\" in lines:\n\t\tprocess = False\n\n\n\t\tfor line in iter(lines.splitlines()):\n\t\t\tline = line.strip()\n\n\t\t\tif \"CLASSES\" in line:\n\t\t\t\tprocess = True\n\t\t\t\tcontinue\n\n\t\t\tif \"FILE\" in line:\n\t\t\t\tbreak\n\n\t\t\tif not process:\n\t\t\t\tcontinue\n\t\t\tif len(line) <= 0:\n\t\t\t\tcontinue\n\n\t\t\tif \"class \" in line:\n\t\t\t\tbreak\n\t\t\tif \"builtins.object\" in line:\n\t\t\t\tcontinue\n\n\t\t\tpackages.put(package + \".\" + line)\n\n\t\tcontinue\n\n\tlines = lines.replace(\"pybind11_builtins.pybind11_object\", \"\")\n\tlines = lines.replace(\"builtins.object\", \"\")\n\tlines = lines.replace(\"|\", \"\")\n\tlines = lines.replace(\"class \", \"## class \")\n\tlines = lines.replace(\"self: polyfempy.polyfempy.Solver, \", \"\")\n\tlines = lines.replace(\"self: polyfempy.polyfempy.Solver\", \"\")\n\tlines = lines.replace(\"self, \", \"\")\n\tlines = lines.replace(\"self\", \"\")\n\tlines = lines.replace(\" -> None\", \"\")\n\tlines = lines.replace(\"[float64[m, n]]\", \"\")\n\tlines = lines.replace(\"[int32[m, n]]\", \"\")\n\tlines = lines.replace(\"numpy.ndarray\", \"array\")\n\n\ttmp = \"\"\n\n\tskipping = False\n\tnext_mark = False\n\tskip_next = False\n\n\tfor line in iter(lines.splitlines()):\n\t\tline = line.strip()\n\n\t\tif skip_next:\n\t\t\tskip_next = False\n\t\t\tcontinue\n\t\tif len(line) <= 0:\n\t\t\tcontinue\n\n\t\tif \"Python Library Documentation\" in line:\n\t\t\tcontinue\n\n\t\tif \"Methods inherited\" in line:\n\t\t\tcontinue\n\n\t\tif \"Overloaded function.\" in line:\n\t\t\tcontinue\n\n\t\tif \"Method resolution order\" in line:\n\t\t\tskipping = True\n\n\t\tif \"Methods defined here\" in line:\n\t\t\tskipping = False\n\t\t\tcontinue\n\n\t\tif \"Data and other attributes defi\" in line:\n\t\t\tcontinue\n\n\t\tif \"Data descriptors defined\" in line:\n\t\t\tcontinue\n\n\t\tif \"-----------------------------\" in line:\n\t\t\tcontinue\n\n\t\tif \"__init__\" not in line and re.match(r\"__\\w+\", line):\n\t\t\tskip_next = True\n\t\t\tcontinue\n\t\tif \"params()\" in line or \"get_pde(pde)\" in line or \"get_problem(problem)\" in line or \"get_problem()\" in line or \"name()\" in line or \"__init__()\" in line or \"__init__(/, *args, **kwargs)\" in line:\n\t\t\tskip_next = True\n\t\t\tcontinue\n\n\t\tif skipping:\n\t\t\tcontinue\n\n\t\tif re.match(r'\\w+\\(\\.\\.\\.\\)', line):\n\t\t\tnext_mark = True\n\t\t\tcontinue\n\n\t\tif \"class\" in line:\n\t\t\tline = line.replace(\"()\", \"\")\n\n\t\tif re.match(r\"\\d\\. .+\", line):\n\t\t\tline = re.sub(r\"\\d\\. \", \"\", line)\n\t\t\tline.strip()\n\t\t\tnext_mark = True\n\n\t\tif next_mark or re.match(r'\\w+\\(.*\\)', line):\n\t\t\tnext_mark = False\n\t\t\txxx = line\n\t\t\tif \"__init__\" in line:\n\t\t\t\tline = line.replace(\"__init__\", \"init\")\n\t\t\tline = \"### \" + line[0:line.find('(')] +\"\\n\"\n\t\t\tline += \"`\" + xxx + \"`\"\n\n\t\tif \"## class \" in line:\n\t\t\tline = line.replace(package + \" = \", \"\")\n\n\t\ttmp += line + \"\\n\\n\"\n\n\tdocs += tmp + \"\\n\\n\\n\"\n\t# break\n
while not packages.empty(): \tpackage = packages.get() \twith tempfile.NamedTemporaryFile(suffix=\".md\") as tmp_file: \t\twith open(tmp_file.name, \"w\") as f: \t\t\tpydoc.doc(package,output=f) \t\twith open(tmp_file.name, \"r\") as f: \t\t\tlines = f.read() \tif \"PACKAGE CONTENTS\" in lines: \t\tprocess = False \t\tfor line in iter(lines.splitlines()): \t\t\tline = line.strip() \t\t\tif \"PACKAGE CONTENTS\" in line: \t\t\t\tprocess = True \t\t\t\tcontinue \t\t\tif \"FILE\" in line: \t\t\t\tbreak \t\t\tif not process: \t\t\t\tcontinue \t\t\tif len(line) <= 0: \t\t\t\tcontinue \t\t\tpackages.put(package + \".\" + line) \t\tcontinue \tif \"CLASSES\" in lines: \t\tprocess = False \t\tfor line in iter(lines.splitlines()): \t\t\tline = line.strip() \t\t\tif \"CLASSES\" in line: \t\t\t\tprocess = True \t\t\t\tcontinue \t\t\tif \"FILE\" in line: \t\t\t\tbreak \t\t\tif not process: \t\t\t\tcontinue \t\t\tif len(line) <= 0: \t\t\t\tcontinue \t\t\tif \"class \" in line: \t\t\t\tbreak \t\t\tif \"builtins.object\" in line: \t\t\t\tcontinue \t\t\tpackages.put(package + \".\" + line) \t\tcontinue \tlines = lines.replace(\"pybind11_builtins.pybind11_object\", \"\") \tlines = lines.replace(\"builtins.object\", \"\") \tlines = lines.replace(\"|\", \"\") \tlines = lines.replace(\"class \", \"## class \") \tlines = lines.replace(\"self: polyfempy.polyfempy.Solver, \", \"\") \tlines = lines.replace(\"self: polyfempy.polyfempy.Solver\", \"\") \tlines = lines.replace(\"self, \", \"\") \tlines = lines.replace(\"self\", \"\") \tlines = lines.replace(\" -> None\", \"\") \tlines = lines.replace(\"[float64[m, n]]\", \"\") \tlines = lines.replace(\"[int32[m, n]]\", \"\") \tlines = lines.replace(\"numpy.ndarray\", \"array\") \ttmp = \"\" \tskipping = False \tnext_mark = False \tskip_next = False \tfor line in iter(lines.splitlines()): \t\tline = line.strip() \t\tif skip_next: \t\t\tskip_next = False \t\t\tcontinue \t\tif len(line) <= 0: \t\t\tcontinue \t\tif \"Python Library Documentation\" in line: \t\t\tcontinue \t\tif \"Methods inherited\" in line: \t\t\tcontinue \t\tif \"Overloaded function.\" in line: \t\t\tcontinue \t\tif \"Method resolution order\" in line: \t\t\tskipping = True \t\tif \"Methods defined here\" in line: \t\t\tskipping = False \t\t\tcontinue \t\tif \"Data and other attributes defi\" in line: \t\t\tcontinue \t\tif \"Data descriptors defined\" in line: \t\t\tcontinue \t\tif \"-----------------------------\" in line: \t\t\tcontinue \t\tif \"__init__\" not in line and re.match(r\"__\\w+\", line): \t\t\tskip_next = True \t\t\tcontinue \t\tif \"params()\" in line or \"get_pde(pde)\" in line or \"get_problem(problem)\" in line or \"get_problem()\" in line or \"name()\" in line or \"__init__()\" in line or \"__init__(/, *args, **kwargs)\" in line: \t\t\tskip_next = True \t\t\tcontinue \t\tif skipping: \t\t\tcontinue \t\tif re.match(r'\\w+\\(\\.\\.\\.\\)', line): \t\t\tnext_mark = True \t\t\tcontinue \t\tif \"class\" in line: \t\t\tline = line.replace(\"()\", \"\") \t\tif re.match(r\"\\d\\. .+\", line): \t\t\tline = re.sub(r\"\\d\\. \", \"\", line) \t\t\tline.strip() \t\t\tnext_mark = True \t\tif next_mark or re.match(r'\\w+\\(.*\\)', line): \t\t\tnext_mark = False \t\t\txxx = line \t\t\tif \"__init__\" in line: \t\t\t\tline = line.replace(\"__init__\", \"init\") \t\t\tline = \"### \" + line[0:line.find('(')] +\"\\n\" \t\t\tline += \"`\" + xxx + \"`\" \t\tif \"## class \" in line: \t\t\tline = line.replace(package + \" = \", \"\") \t\ttmp += line + \"\\n\\n\" \tdocs += tmp + \"\\n\\n\\n\" \t# break In\u00a0[\u00a0]: Copied!
with open(\"polyfempy_doc.md\", \"w\") as f:\n\tf.write(docs)\n
with open(\"polyfempy_doc.md\", \"w\") as f: \tf.write(docs)"},{"location":"tools/plot_to_md/","title":"Plot to md","text":"In\u00a0[\u00a0]: Copied!
import meshplot\n
import meshplot In\u00a0[\u00a0]: Copied!
first = True\nmeshplot.website()\n
first = True meshplot.website() In\u00a0[\u00a0]: Copied!
def mp_to_md(self):\n    global first\n    if first:\n        first = False\n        res = self.to_html(imports=True, html_frame=False)\n    else:\n        res = self.to_html(imports=False, html_frame=False)\n\n    return res\n
def mp_to_md(self): global first if first: first = False res = self.to_html(imports=True, html_frame=False) else: res = self.to_html(imports=False, html_frame=False) return res In\u00a0[\u00a0]: Copied!
get_ipython().display_formatter.formatters[\"text/html\"].for_type(meshplot.Viewer, mp_to_md)\n
get_ipython().display_formatter.formatters[\"text/html\"].for_type(meshplot.Viewer, mp_to_md)"},{"location":"tutorials/getting_started/","title":"Getting Started","text":""},{"location":"tutorials/getting_started/#a-first-example-solving-the-laplacian-on-a-plate-hole-mesh","title":"A First-Example: Solving the Laplacian on a Plate-Hole Mesh","text":"

Here you can find the plate with hole mesh used in this tutorial.

Mesh Solution

To setup and run this simulation create a JSON file (for example, run.json) containing the following:

{\n\"geometry\": {\n\"advanced\": {\n\"normalize_mesh\": true\n},\n\"mesh\": \"plate_hole.obj\",\n\"surface_selection\": {\n\"threshold\": 1e-07\n}\n},\n\n\"materials\": {\n\"type\": \"Laplacian\"\n},\n\n\"output\": {\n\"json\": \"stats.json\",\n\"paraview\": {\n\"file_name\": \"<result.vtu>\"\n}\n},\n\n\"preset_problem\": {\n\"type\": \"Franke\"\n},\n\n\"solver\": {\n\"linear\": {\n\"solver\": \"Eigen::SparseLU\"\n}\n}\n}\n

Then run PolyFEM_bin --json run.json.

Refer to the JSON API for a the full description of JSON parameters.

"},{"location":"tutorials/getting_started/#boundary-conditions","title":"Boundary Conditions","text":"

PolyFEM uses boundary tags to mark boundary primitives (edges in 2D and faces in 3D). By default:

  • in 2D all edges whose barycenter is close up to 1e-7 to the left side of the bounding box get the tag 1, the right side gets 3, bottom 2, and top 4. Any other boundary gets 7.
  • in 3D the threshold is a bit larger (1e-2) and x-direction gets 1, 3, y-direction gets 2, 4, and z-direction gets 5, 6. Any other boundary gets 7.

You can also specify a file containing a list of integers per each edge/face of the mesh indicating the tag in the JSON.

If you want to run the real plate-with-hole problem, set the correct Lam\u00e9 constants in \"materials\", and specify the proper boundary conditions in \"boundary_conditions\". For this example, we want Neumann boundary condition of [100, 0] (a force of 100 in \\(x\\)) applied to the whole right side (pulling), so in the \"neumann_boundary\" array of \"boundary_conditions\", we add an entry with \"id\": 3 and \"value\": [100, 0]. For the two Dirichlet, it is a bit more complicated because we want reflective boundary conditions, that is we want to fix only one of the two coordinates. For instance, the right part of the mesh (\"id\": 1) needs to be fixed in \\(x\\) (or equivalent can move only in \\(y\\)-direction). To do so we add an entry to the \"dirichlet_boundary\" array with \"id\": 1 and \"value\": [0, 0], that is zero displacements, and specify which \"dimension\" these boundaries need to be applied, in this case, only the \\(x\\)-direction so \"dimension\" gets the value [true, false]. Similarly, the top part (\"id\": 4) gets \"dimension\": [false, true].

{\n\"materials\": {\n\"type\": \"LinearElasticity\",\n\"E\": 210000,\n\"nu\": 0.3\n},\n\n\"boundary_conditions\": {\n\"neumann_boundary\": [{\n\"id\": 3,\n\"value\": [100, 0]\n}],\n\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [0.0, 0.0],\n\"dimension\": [true, false]\n}, {\n\"id\": 4,\n\"dimension\": [false, true],\n\"value\": [0.0, 0.0]\n}]\n}\n}\n
"},{"location":"tutorials/getting_started/#spatially-varying-boundary-conditions","title":"Spatially Varying Boundary Conditions","text":"

The specified value for boundary conditions can also contain expressions as strings depending on x,y, and z. PolyFEM will evaluate these expressions on the edge/face. For this, we use the TinyExpr library.

In addition to TinyExpr\u2019s built-in functions, we define some useful utility functions including:

  • min(a, b): minimum of two values
  • max(a, b): maximum of two values
  • if(cond, a, b): if cond \\(\\ge\\) 0, return a, otherwise return b
  • sign(x): 1 if \\(x > 0\\), 0 if \\(x == 0\\), and -1 if \\(x < 0\\)
  • deg2rad(d): convert degrees to radians
  • rotate_2D_x(x, y, theta): given a value for x, y, and theta, compute the x component of a 2D rotation of theta radians
    • definition: \\(x\\cos(\\theta) - y\\sin(\\theta)\\)
  • rotate_2D_y(x, y, theta): given a value for x, y, and theta, compute the y component of a 2D rotation of theta radians
    • definition: \\(x\\sin(\\theta) + y\\cos(\\theta)\\)
  • smooth_abs(x, k): a smooth approximation to abs(x)
    • definition: \\(\\tanh(kx)x\\)
"},{"location":"tutorials/getting_started/#bc-setter-app","title":"BC Setter App","text":"

Since creating the file with association from boundary to ID is complicated, we also provide an application bc_setter to interactively color faces of 3D meshes (or edges of 2D meshes) and associate tags.

By shift-clicking you can color coplanar faces to assign an ID (command or control-click colors only one face). The UI also allows specifying the three values (for scalar problem only one) to assign to that boundary condition and choose between Dirichlet and Neumann.

On save, it will produce the .txt file with the tags to be used in the \"surface_selection\" JSON field and a JSON file to set the \"boundary_conditions\".

"},{"location":"tutorials/getting_started/#time-dependent-simulation","title":"Time-Dependent Simulation","text":"

To enable time-dependent simulation add

\"time\": {\n\"tend\": 1,\n\"dt\": 0.1\n}\n
to the root of the JSON. The duration of the simulation is specified as \"tend\" and the number of time steps can either be set directly using \"time_steps\" or by specifying the time step size \"dt\" (\"dt\" has priority over \"time_steps\").

You can also specify the time integration method using

\"time\": {\n\"integrator\": \"ImplicitEuler\"\n}\n
By default it uses \"ImplicitEuler\", and a complete list of options can be found here along with details about other time parameters.

When doing time-dependent simulation PolyFEM will generate a sequence of VTU files (one file per time step) and a PVD file of the animation that can be directly viewed in ParaView. You can change the name of this PVD file

"},{"location":"tutorials/getting_started/#time-dependent-boundary-conditions","title":"Time-Dependent Boundary Conditions","text":"

Enabling time-dependent simulation also enables the ability to use the current time to design time-dependent boundary conditions. To define time-dependent boundary conditions you can use the variable t in an expression value. For example,

\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"t\", 0, 0]\n}]\n
defines a boundary condition that linearly increases in the x component as time progresses. An example use case for this would be in an elasticity problem to move the boundary over time (remember in this case the value expresses the displacement, not the position).

"},{"location":"tutorials/getting_started/#selections-multi-material-and-collisions","title":"Selections, Multi-material, and Collisions","text":"

PolyFEM supports multi-material and contact.

For example, here we show how to simulate a sphere of radius 0.5 m centered at \\([0,1,0]\\) with material \\(E=10^8, \\nu=0.4, \\rho=2000\\) falling on thin soft mat (\\(E=10^6, \\nu=0.4, \\rho=1000\\)) we need to set the body id.

First, we need to specify the geometry and assign ids to the surface and volume. To do this add this to the main JSON file:

\"geometry\": [{\n\"mesh\": \"../../../meshes/3D/simple/sphere/sphere1K.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"../../../meshes/3D/simple/mat/mat40x40.msh\",\n\"transformation\": {\n\"scale\": 2\n},\n\"volume_selection\": 2,\n\"surface_selection\": [{\n\"id\": 1,\n\"axis\": \"-x\",\n\"position\": -1\n}, {\n\"id\": 2,\n\"axis\": \"x\",\n\"position\": 1\n}]\n}],\n

The sphere will be given a volume ID of 1 and the mat will get ID 2. An axis-plane selection is used can be used to set the surface IDs. Here the faces with a barycenter left of \\(x=-1\\) are given a surface ID of 1 and the faces with barycenters right of \\(x=1\\) will be given an ID of 2.

Next, we need to associate materials and boundary conditions with these IDs. We set the boundary conditions by adding the following to the JSON:

\"materials\": [{\n\"id\": 1,\n\"E\": 1e8,\n\"nu\": 0.4,\n\"rho\": 2000,\n\"type\": \"NeoHookean\"\n}, {\n\"id\": 2,\n\"E\": 1e6,\n\"nu\": 0.4,\n\"rho\": 1000,\n\"type\": \"NeoHookean\"\n}]\n
This sets the sphere to a stiff NeoHooean material (\\(E=10^8, \\nu=0.4, \\rho=2000\\)) and the mat to a softer NeoHookean material (\\(E=10^6, \\nu=0.4, \\rho=1000\\)).

We specify boundary conditions and \"rhs\" (for the gravity) as:

\"boundary_conditions\": {\n\"rhs\": [0, 9.81, 0],\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"-min(t,0.28)\", 0, 0]\n}, {\n\"id\": 2,\n\"value\": [\"min(t,0.28)\", 0, 0]\n}]\n}\n
Here the mat is given a Dirichlet boundary condition for the left selection to stretch it to the left and the right selection to stretch it to the right.

Since this is a contact problem we need to enable collision, no other thing is needed: \"contact\": {\"enabled\": true}, and run the simulation (the complete JSON script can be found here).

The final results look like these where we sliced the scene in half to show the internal stresses.

"},{"location":"tutorials/getting_started/#output","title":"Output","text":"

The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence.

"},{"location":"tutorials/getting_started/#visualizing-results-using-paraview","title":"Visualizing Results using ParaView","text":"

Here are some tips for working with the output in ParaView.

  1. Warp: if the solution is displacements, apply the displacements to the rest mesh
  2. Filter: filter elements by a field (here by body_ids to set the opacity of the box separately from the Octocat)
  3. Apply settings: apply the setting changes (there is a ParaView setting to automatically do this)
  4. Play: play the time sequence
  5. Input fields: select the field to visualize
  6. Rescale over all timesteps: rescale the colors to fit the range of all values over time
"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/","title":"IPC Quick Start Guide","text":"Author: Zachary Ferguson

Note

This is a retelling of the original IPC Quick Start Guide from the original IPC codebase.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#setup","title":"Setup","text":"

The first step is to clone and build PolyFEM (see here for instructions). This will create the PolyFEM_bin executable that we will use to run the examples. To run an example you can use the following command:

./PolyFEM_bin -j <path/to/example.json> -o <path/to/output/dir>\n

You can also use the --help flag to see all the available options.

All files used in this tutorial can be found here.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#ipc-default-parameters","title":"IPC Default Parameters","text":"

Since many of the default parameters in PolyFEM differ from those in the original IPC codebase, we provide a JSON file ipc-defaults.json which maps the default parameter values from IPC to their equivalent parameters in PolyFEM. This file is then included in all the example JSON files using \"common\": \"ipc-defaults.json\".

Todo

Describe what each of the default parameters controls.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#hello-world","title":"Hello, World!","text":"

Let us start with a \u201cHello, World!\u201d example of two cubes falling onto a ground plane.

The input JSON for this scene can be found at 2-cubes-falling.json. To run this example, use the following command:

./PolyFEM_bin -j 2-cubes-falling.json -o 2-cubes-falling\n

This will create a directory 2-cubes-falling with the following files:

$ ls 2-cubes-falling\nsim.pvd step_0.vtm step_0.vtu [...] step_200.vtm step_200.vtu\n

We can open the PVD file using ParaView and play the animation to visualize the simulation:

Tip

In ParaView, make sure to press the WarpByVector button to see the deformed animation. Otherwise, you will only see the undeformed rest mesh.

Let\u2019s take a look at the input JSON file 2-cubes-falling.json:

{\n\"common\": \"ipc-defaults.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"volume_selection\": 2\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}],\n\"contact\": {\n\"friction_coefficient\": 0.1\n}\n}\n

The config is simple:

  • \"common\": this includes the default IPC parameters from the ipc-defaults.json file.
  • \"geometry\": the geometry of the scene comprised of two cubes and a ground plane.
    • \"mesh\": the path to the mesh file (a tetrahedral mesh cube.msh for the cubes and a triangular mesh plane.obj for the ground plane).
    • \"transformation\": transform the input mesh before running the simulation.
      • \"translation\": translate the first cube up by 3 units and the second cube up by 1 unit.
    • \"volume_selection\": assigns an ID to the volume (uniformly) which we will use later.
    • \"is_obstacle\": specify that the ground plane is a static obstacle.
      • Obstacles are non-simulated geometries with prescribed displacements (here default to zero).
  • \"contact\": parameters for the contact model
    • \"friction_coefficient\": coefficient of friction for all contacts.
"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#physical-materials-and-time-steppers","title":"Physical Materials and Time Steppers","text":"

Now let\u2019s make some changes to the hello world script to make the simulation more interesting.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#stiffer-material","title":"Stiffer Material","text":"

The default material parameters in ipc-default.json are:

\"materials\": {\n\"type\": \"NeoHookean\",\n\"E\": 1e5,\n\"nu\": 0.4,\n\"rho\": 1000\n}\n

This corresponds to a NeoHookean material with Young\u2019s modulus \\(E = 10^5~\\text{Pa}\\), Poisson\u2019s ratio \\(\\nu = 0.4\\), and density \\(\\rho = 1000~\\frac{\\text{kg}}{\\text{m}^3}\\).

We can change these parameters for all objects in the scene by changing Young\u2019s modulus to \\(10^6~\\text{Pa}\\):

{\n\"common\": \"2-cubes-falling.json\",\n\"materials\": {\n\"E\": 1e6\n}\n}\n

Note

Notice that we changed the \"common\" parameter to point to the starting example 2-cubes-falling.json. This means our changes in this file will be applied on top of the changes in the starting example (which also are applied on top of the default parameters in ipc-defaults.json).

This will make Young\u2019s modulus 10x larger than the default while keeping density and Poisson\u2019s ratio the same. Let\u2019s see what we get:

Yes! The boxes are stiffer now.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#multiple-materials","title":"Multiple Materials","text":"

We can also set different materials for different objects:

{\n\"common\": \"2-cubes-falling.json\",\n\"materials\": [{\n\"id\": 1,\n\"type\": \"NeoHookean\",\n\"E\": 1e8,\n\"nu\": 0.4,\n\"rho\": 3000\n}, {\n\"id\": 2,\n\"type\": \"NeoHookean\",\n\"E\": 1e5,\n\"nu\": 0.4,\n\"rho\": 1000\n}]\n}\n

We replace our single \"materials\" object with a list of objects with \"id\" keys. These IDs correspond to the \"volume_selection\" from earlier. In general, \"volume_selection\" allows us to select a subset of the mesh\u2019s elements and assign a volume ID to them. In this case, we assign a uniform ID to all elements in the cube mesh. Where the first cube gets an ID of 1 and the second gets an ID of 2. We then use these volume IDs to assign different materials to each cube. The first cube gets a material that is 3\u00d7 heavier and 1000\u00d7 stiffer. While the second cube gets the original material.

Here we rendered softer material with a light yellow color. As we see the top box is nearly rigid now and the bottom box deforms more. Even with this super stiff material PolyFEM stays robust and accurate.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#simulation-time-and-time-step-size","title":"Simulation Time and Time Step Size","text":"

Following the default in IPC, we have been simulating the scene for 5 seconds with a time step size of 0.025s, generating 200 frames.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#smaller-time-step-sizes","title":"Smaller Time Step Sizes","text":"

One option to get more energetic animation (while sticking with implicit Euler stepping \u2013 see also Newmark stepping below) is to apply smaller time step sizes to reduce the numerical damping of implicit Euler time integration:

{\n\"common\": \"2-cubes-falling.json\",\n\"time\": {\n\"dt\": 0.005\n}\n}\n

The \"time\" parameter here controls time step size \"dt\": 0.005, which results in a more energetic animation:

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#larger-time-step-sizes-nearly-quasi-static","title":"Larger Time Step Sizes (Nearly Quasi-Static)","text":"

One of the exciting features of IPC and PolyFEM is that it is robust enough to support extremely large time step sizes on the order of seconds with implicit Euler. In turn, this enables rapid solutions of equilibrium conditions subject to contact, friction and large deformation (via nearly quasi-static solves under numerical damping). For a simple demonstration, we can simulate our hello world example with \\(\\Delta t = 1~\\text{s}\\):

{\n\"common\": \"2-cubes-falling.json\",\n\"time\": {\n\"dt\": 1\n}\n}\n

The animation now is composed of only five frames, one for each second. As we see numerical damping is so large that the cubes are barely bouncing.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#initial-velocity","title":"Initial Velocity","text":"

To set nonzero initial velocities for objects, we need to specify them as \"initial_conditions\".

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#initial-linear-velocity","title":"Initial Linear Velocity","text":"

For example, we can set the initial velocity of the top cube to be \\(-20~\\frac{\\text{m}}{\\text{s}}\\) in the y direction:

{\n\"common\": \"2-cubes-falling.json\",\n\"initial_conditions\": {\n\"velocity\": [{\n\"id\": 1,\n\"value\": [0, -20, 0]\n}]\n}\n}\n

Again here we are using the volume IDs to select the top cube.

Even for this high-speed impact scene, PolyFEM stays robust and accurate without numerical instabilities or explosions.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#initial-angular-velocity","title":"Initial Angular Velocity","text":"

Instead of using a constant value for the initial velocity, we can use a tiny expression dependent on the positions.

We can specify an initial angular velocity by computing

\\[ \\begin{bmatrix}\\omega_x & \\omega_y & \\omega_z\\end{bmatrix} \\times \\begin{bmatrix}x & y & z\\end{bmatrix} \\]

where \\(\\omega_{\\{x, y, z\\}}\\) are the angular velocity in radians and \\(x\\), \\(y\\), and \\(z\\) are the positions to be evaluated at.

Note

This assumes the center of rotation is at the origin. If you want to rotate around a different point, you need to translate the positions to the origin first.

For example, if we want to rotate the top cube 90 degrees/second around the y-axis, then we compute the initial velocity as

\\[ \\begin{bmatrix}0 & \\frac{\\pi}{2} & 0\\end{bmatrix} \\times \\begin{bmatrix}x & y & z\\end{bmatrix} = \\begin{bmatrix}\\frac{\\pi}{2}z & 0 & -\\frac{\\pi}{2}x\\end{bmatrix} \\]

In the JSON we encode this as a string containing the expression:

{\n\"common\": \"2-cubes-falling.json\",\n\"initial_conditions\": {\n\"velocity\": [{\n\"id\": 1,\n\"value\": [\"pi/2 * z\", 0, \"-pi/2 * x\"]\n}]\n}\n}\n

and voila now the top cube is spinning!

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#collision-obstacles","title":"Collision Obstacles","text":"

In many simulations we want to script the motion of certain objects, the best way to do this is to specify the object as an obstacle and then specify the prescribed displacement.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#translation","title":"Translation","text":"

To make the second code an obstacle all we need to do is set \"is_obstacle\": true. Then we can specify the displacement of this obstacle using the \"boundary_conditions/obstacle_displacements\" field:

{\n\"common\": \"2-cubes-falling.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"surface_selection\": 1,\n\"is_obstacle\": true\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}],\n\"boundary_conditions\": {\n\"obstacle_displacements\": [{\n\"id\": 1,\n\"value\": [\"t\", \"t\", \"t\"]\n}]\n}\n}\n

Notice that we changed the \"volume_selection\" to \"surface_selection\" because we need to identify the surface on which the boundary conditions apply.

We set the obstacle\u2019s displacement to [\"t\", \"t\", \"t\"] which means the obstacle will translate with a velocity of \\([1, 1, 1]\\) m/s.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#rotation","title":"Rotation","text":"

Making the second cube rotate is a bit trickier. We can compute the displacement in Euler\u2019s angle representation as

\\[ \\begin{bmatrix} \\Delta{x} \\\\ \\Delta{y} \\\\ \\Delta{z} \\end{bmatrix} = R_x(\\omega_x t) R_y(\\omega_y t) R_z(\\omega_z t) \\left( \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} - \\begin{bmatrix} c_x \\\\ c_y \\\\ c_z \\end{bmatrix} \\right) + \\begin{bmatrix} c_x \\\\ c_y \\\\ c_z \\end{bmatrix} - \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} \\]

where \\(\\Delta\\{x,y,z\\}\\) are the obstacle displacement, \\(\\omega_{\\{x,y,z\\}}\\) are the angular velocities, \\(c_{\\{x,y,z\\}}\\) is the center of rotation, \\(R_{\\{x,y,z\\}}\\) are the axis-aligned rotation matrices, and \\(x\\), \\(y\\), and \\(z\\) are the positions to be evaluated at. Computing this by hand can be annoying, so instead, you can use this Python notebook to compute the expression.

As an example, here we kinematically rotate the second cube with an angular velocity of \\([10, 90, 0]\\) degrees/second:

{\n\"common\": \"translating-obstacle.json\",\n\"boundary_conditions\": {\n\"obstacle_displacements\": [{\n\"id\": 1,\n\"value\": [\n\"x*cos(pi*t/2) - x + z*sin(pi*t/2)\",\n\"x*sin(pi*t/18)*sin(pi*t/2) - y - z*sin(pi*t/18)*cos(pi*t/2) + (y - 1)*cos(pi*t/18) + 1\",\n\"-x*sin(pi*t/2)*cos(pi*t/18) + z*cos(pi*t/18)*cos(pi*t/2) - z + (y - 1)*sin(pi*t/18)\"\n]\n}]\n}\n}\n

Here we render obstacles in grey.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#codimensional-collisions","title":"Codimensional Collisions","text":"

IPC contact handling is based on distances and so directly supports codimensional (surfaces, edges, points) kinematic collision obstacles!

Note

Currently, PolyFEM does not yet include simulated codimensional materials like shells or rods.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#closed-surface","title":"Closed Surface","text":"

If we script the motion of an object, then for a closed surface the interior tessellation is unnecessary, and we can directly use a surface mesh (.obj file)!

{\n\"common\": \"rotating-obstacle.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube.obj\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"surface_selection\": 1,\n\"is_obstacle\": true\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n

This is equivalent to using a volumetric mesh because PolyFEM automatically extracts and uses the surface for obstacles.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#open-surface","title":"Open Surface","text":"

This script replaces the cube with a single triangle (zero volume):

{\n\"common\": \"rotating-obstacle.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"triangle.obj\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"surface_selection\": 1,\n\"is_obstacle\": true\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n
"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#edges","title":"Edges","text":"

This script uses the same single triangle but only with its edges. Here we also scale the triangle 2\u00d7 larger to let the box fall through.

{\n\"common\": \"rotating-obstacle.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"triangle.obj\",\n\"transformation\": {\n\"translation\": [0, 1, 0],\n\"scale\": 2\n},\n\"surface_selection\": 1,\n\"is_obstacle\": true,\n\"extract\": \"edges\"\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n

The \"extract\": \"edges\" specifies that only the edges of the triangle mesh should be used.

Note

Alternatively, you can load an edge mesh directly by specifying an .obj file with line elements. For example, this is the same edge mesh in OBJ format:

v -0.5 0 -0.5\nv  0.5 0 -0.5\nv -0.5 0  0.5\nl 1 3\nl 3 2\nl 2 1\n

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#points","title":"Points","text":"

Even crazier, this script uses the same single triangle but only with its points. Here we also scale the point cloud 0.7\u00d7 smaller to let the box hit the points.

{\n\"common\": \"rotating-obstacle.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"triangle.obj\",\n\"transformation\": {\n\"translation\": [0, 1, 0],\n\"scale\": 0.7\n},\n\"surface_selection\": 1,\n\"is_obstacle\": true,\n\"extract\": \"points\"\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n

We use the \"extract\": \"points\" to only use the points of the triangle.

Note

Alternatively, you can load a point cloud directly by specifying an .obj file with no triangles or edges. For example, this is the same point cloud in OBJ format:

v -0.5 0 -0.5\nv  0.5 0 -0.5\nv -0.5 0  0.5\n

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#boundary-conditions","title":"Boundary Conditions","text":""},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#selection","title":"Selection","text":"

Similar to how we apply material, to apply boundary conditions we first need to select which nodes to which to apply the boundary conditions using the \"point_selection\" mesh field. Then, we can specify the boundary conditions in the \"boundary_conditions\" field.

{\n\"common\": \"2-cubes-falling.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"volume_selection\": 2,\n\"point_selection\": [{\n\"id\": 1,\n\"box\": [\n[0, 0, 0],\n[0.1, 1, 0.1]\n],\n\"relative\": true\n}, {\n\"id\": 2,\n\"box\": [\n[0.9, 0, 0.9],\n[1, 1, 1]\n],\n\"relative\": true\n}]\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}],\n\"output\": {\n\"paraview\": {\n\"points\": true\n}\n}\n}\n

Let\u2019s break down the \"point_selection\" field. The first object

\"id\": 1,\n\"box\": [\n[0, 0, 0],\n[0.1, 1, 0.1]\n],\n\"relative\": true\n
specifies that we should assign an ID of 1 to the nodes in the back left of the mesh. The second object
\"id\": 2,\n\"box\": [\n[0.9, 0, 0.9],\n[1, 1, 1]\n],\n\"relative\": true\n
specifies that we should assign an ID of 2 to the nodes in the front right of the mesh.

The \"box\" parameter specifies a bounding box by minimum and maximum corners in which points are selected. Notice the \"relative\": true field which indicates the box\u2019s coordinates are relative to the bounding box of the mesh. If we set \"relative\": false then the coordinates are in world space.

Note

For more information about how to setup boundary conditions (including the more ubiquitous surface selections) look here.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#dirichlet","title":"Dirichlet","text":"

For a simulated volumetric object, sometimes we script the motion of part of its vertices as Dirichlet boundary conditions. Using our point selections we can specify the boundary conditions as follows:

{\n\"common\": \"point-selection.json\",\n\"boundary_conditions\": {\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"-0.2 * t\", 0, \"-0.2 * t\"]\n}, {\n\"id\": 2,\n\"value\": [\"0.2 * t\", 0, \"0.2 * t\"]\n}]\n}\n}\n

The above script specifies that we should apply a displacement of \\([-0.2, 0, -0.2]\\) m/s to the nodes with ID 1 and a displacement of \\([0.2, 0, 0.2]\\) m/s to the nodes with ID 2. The expressions in strings are evaluated using TinyExpr. You can find out more about these expressions here and here.

Now let\u2019s see what we get:

As we see PolyFEM is robust even when there is large deformation.

What is different here from setting kinematic collision obstacles is that the unselected vertices are still degree-of-freedoms that are simulated. If one selects all vertices of an object by, for example, using a selection of

\"point_selection\": 1\n
and set them with Dirichlet boundary conditions, it will be essentially identical to a kinematic collision obstacle.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#neumann","title":"Neumann","text":"

Warning

Nodal Neumann boundary conditions are not yet supported in PolyFEM, so we will setup a similar scene using surface selection.

We can also add extra forces to part of the vertices of simulated volumetric objects in addition to gravity. This can be similarly realized by specifying the \"neumann_boundary\" like how we did for Dirichlet boundary conditions above:

{\n\"common\": \"point-selection.json\",\n\"geometry\": [{\n\"mesh\": \"cube-hex.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube-hex.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"volume_selection\": 2,\n\"surface_selection\": 1\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}],\n\"boundary_conditions\": {\n\"neumann_boundary\": [{\n\"id\": 1,\n\"value\": [\n\"2.5e4 * sign(x) * max(0, sign(x * z))\",\n0,\n\"2.5e4 * sign(z) * max(0, sign(x * z))\"\n]\n}]\n},\n\"output\": {\n\"paraview\": {\n\"options\": {\n\"forces\": true\n}\n}\n}\n}\n

Similar to the configuration in our Dirichlet example, the above script applies an a force of \\([-2.5 \\times 10^4, 0, -2.5 \\times 10^4]\\) N to the vertices in the left-back and \\([2.5 \\times 10^4, 0, 2.5 \\times 10^4]\\) N to the vertices in the right-front:

Note

Here simulate a hexahedral mesh, but we use a linear triangular mesh for contact handling. Additionally, the rendering shows a triangulation of the hexahedral mesh\u2019s surface.

Unlike Dirichlet boundary conditions, here the Neumann boundary condition does not restrict the vertical motion of the object, and it elongates the object only to a static state but not further.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#timed-boundary-conditions","title":"Timed Boundary Conditions","text":"

It is also possible to start and stop boundary conditions at a specific time. This can be done by utilizing tiny expressions:

{\n\"common\": \"point-selection.json\",\n\"boundary_conditions\": {\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"-0.2 * min(t, 2.5)\", 0, \"-0.2 * min(t, 2.5)\"]\n}, {\n\"id\": 2,\n\"value\": [\"0.2 * max(t - 2.5, 0)\", 0, \"0.2 * max(t - 2.5, 0)\"]\n}]\n}\n}\n

Here we apply a displacement of \\([-0.2, 0, -0.2]\\) m/s to the nodes with ID 1 from time \\(t=0\\) to \\(t=2.5\\) and a displacement of \\([0.2, 0, 0.2]\\) m/s to the nodes with ID 2 from time \\(t=2.5\\) to \\(t=\\infty\\). We can see this if we plot the x/z-displacement of the BC nodes: where the red line is the displacement of the nodes with ID 1 and the blue line is the displacement of the nodes with ID 2.

Finally, let\u2019s see what we get:

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#advanced-settings","title":"Advanced Settings","text":""},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#input-mesh-sequence","title":"Input Mesh Sequence","text":"

The way of setting kinematic collision obstacles displacements described earlier is expressive but a bit verbose. To support more complex scripting of kinematic collision objects, PolyFEM allows the use of input mesh file sequences.

For example, we can specify a folder path to the kinematic collision objects:

{\n\"common\": \"2-cubes-falling.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 3, 0]\n},\n\"volume_selection\": 1\n}, {\n\"type\": \"mesh_sequence\",\n\"transformation\": {\n\"translation\": [-0.6666666667, 0, -0.6666666667]\n},\n\"mesh_sequence\": \"sequence\",\n\"fps\": 40,\n\"is_obstacle\": true\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n

In the specified folder sequence we provide the mesh files of the triangle wire in each frame as *.obj. Note that the input sequence must maintain the correct vertex correspondence to the one throughout the entire sequence.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#smaller-distance-initialization","title":"Smaller Distance Initialization","text":"

IPC requires a tiny positive gap as it does not support the 0-distance configurations.

The following script sets the upper box in the hello world example right above the lower one:

{\n\"common\": \"2-cubes-falling.json\",\n\"geometry\": [{\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 2.001, 0]\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"cube.msh\",\n\"transformation\": {\n\"translation\": [0, 1, 0]\n},\n\"volume_selection\": 2\n}, {\n\"mesh\": \"plane.obj\",\n\"is_obstacle\": true\n}]\n}\n

Note the initial gap here is barely visible. In our experience we can set IPC\u2019s contact gap as small as practically needed; i.e., even small enough to fool the ray intersection checks in rendering algorithms.

Similarly, no two objects can have 0-distance separation : ); even atoms are at distance from each other.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#newmark-time-integration","title":"Newmark Time-Integration","text":"

Along with implicit Euler, PolyFEM supports other time integration methods such as implicit Newmark time integration. Implicit Newmark can be applied for improved energy preservation and control. To change the time integrator we can simply set the time integration method.

For example, the following script uses the time/integrator key to specify implicit Newmark (\"ImplicitNewmark\") should be the time integrator for the stiffer boxes scene without friction. By default, \"integrator\" is set to ImplicitEuler (backward Euler).

{\n\"common\": \"stiffer.json\",\n\"time\": {\n\"dt\": 0.005,\n\"integrator\": \"ImplicitNewmark\"\n},\n\"contact\": {\n\"friction_coefficient\": 0\n}\n}\n

Damping can be useful both for predictive or realistic simulation control of damping and also to extend the effective stability of the underlying Newmark time integration method. For example, here we use Rayleigh damping of elasticity:

{\n\"common\": \"newmark.json\",\n\"solver\": {\n\"rayleigh_damping\": {\n\"form\": \"elasticity\",\n\"stiffness_ratio\": 0.1\n}\n}\n}\n

Here we set the damping stiffness as a ratio \\(\\kappa_\\text{ratio}\\) between 0 and 1. The absolute damping stiffness will be set to \\(\\tfrac{3}{4} \\kappa_\\text{ratio} \\Delta t^3\\). If \\(\\kappa_\\text{ratio}=1\\), at the beginning of time-step Newmark\u2019s incremental potential Hessian (with damping term) will be equal to that of implicit Euler. This provides a starting basis for intuitively setting damping stiffness. To alternately directly set damping stiffness use the key \"stiffness\".

Here in this demo note that we used a smaller time step size at 0.005s as this is better for the stability of Newmark integration.

Newmark, \"stiffness_ratio\": 0.1 Newmark, \"stiffness_ratio\": 0.2 Newmark, \"stiffness_ratio\": 0.4 Backwards Euler"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#accuracy-control","title":"Accuracy Control","text":""},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#time-integration-accuracy","title":"Time Integration Accuracy","text":"

Nonlinear solver accuracy determines how accurate the dynamic time step solve is satisfied. To set the requested nonlinear solver accuracy, we can use the solver/nonlinear/grad_norm key to set Newton tolerance on the infinity norm of the Newton increment.

So far, we have used

{\n\"solver\": {\n\"nonlinear\": {\n\"grad_norm\": 1e-05\n}\n}\n}\n

The solver will stop once the current Newton increment cannot change any nodal position larger than 1e-5 m even if a full step is taken. Reducing this improves accuracy, but note that the compute cost can then go up.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#contact-accuracy","title":"Contact Accuracy","text":"

There are three additional accuracies for IPC. Each controls a contact accuracy in IPC: the barrier activation distance (\"dhat\") which IPC uses to determine if objects are in contact and exert contact forces; the tangent velocity (\"epsv\") determining where IPC sees the touching objects as not sliding and so exerts static friction forces; and the maximum amount of friction iterations (\"friction_iterations\") that IPC updates friction tangent and normal forces.

By default PolyFEM uses

{\n\"contact\": {\n\"dhat\": 1e-3,\n\"epsv\": 1e-3\n},\n\"solver\": {\n\"contact\": {\n\"friction_iterations\": 1\n}\n}\n}\n

Note

Unlike the original IPC code, these values are not scaled by the bounding box size.

The default setting provides a good trade-off between accuracy and efficiency, where there are no visible gaps, no obvious sliding artifacts, or friction force in inaccurate directions.

We can set \"friction_iterations\" set to -1 to iterate until the tangent operator and normal force converges to obtain even more accurate results. Note that IPC does not guarantee convergence for this case. In practice, for more accurate friction in large deformation or high-speed impact scenes, \"friction_iterations\" at 2~4 so far appears generally sufficient.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#use-your-own-mesh","title":"Use Your Own Mesh","text":"

For collision obstacles (including closed surfaces), one can directly specify the path to their mesh files (.obj, .stl, .ply, etc.) in the script to use it.

For the simulated objects that are tetrahedral meshes, PolyFEM supports MSH files. PolyFEM supports both ASCII and binary encoded version 2.2 and 4.1 files through the use of MshIO.

To generate a tetrahedral mesh from a triangle mesh, we recommend using fTetWild.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#restarting-a-simulation","title":"Restarting a Simulation","text":"

To learn how to restart a simulation, see here.

"},{"location":"tutorials/ipc_quick_start_guide/ipc_quick_start_guide/#more-simulation-examples","title":"More Simulation Examples","text":"

Hopefully, now you know the basics of how to use IPC within PolyFEM. For more examples, we have set up all the simulations in the original IPC paper (and more!) and you can find them all here.

If you have any further questions, feel free to post an issue on the PolyFEM GitHub repo.

"},{"location":"tutorials/ipc_quick_start_guide/rotating-obstacle/","title":"Rotating obstacle","text":"In\u00a0[2]: Copied!
import numpy\nimport sympy\n
import numpy import sympy In\u00a0[3]: Copied!
omega_x, omega_y, omega_z = sympy.symbols('omega_x omega_y omega_z')\nc_x, c_y, c_z = sympy.symbols('c_x c_y c_z')\nx, y, z, t = sympy.symbols('x y z t')\n\ndef deg2rad(deg):\n    return deg * sympy.pi / 180\n
omega_x, omega_y, omega_z = sympy.symbols('omega_x omega_y omega_z') c_x, c_y, c_z = sympy.symbols('c_x c_y c_z') x, y, z, t = sympy.symbols('x y z t') def deg2rad(deg): return deg * sympy.pi / 180

$$ \\begin{bmatrix} \\Delta{x} \\\\ \\Delta{y} \\\\ \\Delta{z} \\end{bmatrix} = R_x(\\omega_x t) R_y(\\omega_y t) R_z(\\omega_z t) \\left( \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} - \\begin{bmatrix} c_x \\\\ c_y \\\\ c_z \\end{bmatrix} \\right) + \\begin{bmatrix} c_x \\\\ c_y \\\\ c_z \\end{bmatrix} - \\begin{bmatrix} x \\\\ y \\\\ z \\end{bmatrix} $$

In\u00a0[4]: Copied!
Rx = numpy.array([\n    [1, 0, 0],\n    [0, sympy.cos(omega_x*t), -sympy.sin(omega_x*t)],\n    [0, sympy.sin(omega_x*t), sympy.cos(omega_x*t)]\n])\n\nRy = numpy.array([\n    [sympy.cos(omega_y*t), 0, sympy.sin(omega_y*t)],\n    [0, 1, 0],\n    [-sympy.sin(omega_y*t), 0, sympy.cos(omega_y*t)]\n])\n\nRz = numpy.array([\n    [sympy.cos(omega_z*t), -sympy.sin(omega_z*t), 0],\n    [sympy.sin(omega_z*t), sympy.cos(omega_z*t), 0],\n    [0, 0, 1]\n])\n\nR = Rx @ Ry @ Rz\n\nc = numpy.array([c_x, c_y, c_z])\npos = numpy.array([x, y, z])\ndisp = R @ (pos - c) + c - pos\n\ndisplay(sympy.Matrix(disp))\n
Rx = numpy.array([ [1, 0, 0], [0, sympy.cos(omega_x*t), -sympy.sin(omega_x*t)], [0, sympy.sin(omega_x*t), sympy.cos(omega_x*t)] ]) Ry = numpy.array([ [sympy.cos(omega_y*t), 0, sympy.sin(omega_y*t)], [0, 1, 0], [-sympy.sin(omega_y*t), 0, sympy.cos(omega_y*t)] ]) Rz = numpy.array([ [sympy.cos(omega_z*t), -sympy.sin(omega_z*t), 0], [sympy.sin(omega_z*t), sympy.cos(omega_z*t), 0], [0, 0, 1] ]) R = Rx @ Ry @ Rz c = numpy.array([c_x, c_y, c_z]) pos = numpy.array([x, y, z]) disp = R @ (pos - c) + c - pos display(sympy.Matrix(disp)) $\\displaystyle \\left[\\begin{matrix}c_{x} - x + \\left(- c_{x} + x\\right) \\cos{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} - \\left(- c_{y} + y\\right) \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{y} t \\right)} + \\left(- c_{z} + z\\right) \\sin{\\left(\\omega_{y} t \\right)}\\\\c_{y} - y + \\left(- c_{x} + x\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} + \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{x} t \\right)}\\right) + \\left(- c_{y} + y\\right) \\left(- \\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{y} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} + \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)}\\right) - \\left(- c_{z} + z\\right) \\sin{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{y} t \\right)}\\\\c_{z} - z + \\left(- c_{x} + x\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} - \\sin{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)}\\right) + \\left(- c_{y} + y\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} + \\sin{\\left(\\omega_{y} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{x} t \\right)}\\right) + \\left(- c_{z} + z\\right) \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{y} t \\right)}\\end{matrix}\\right]$ In\u00a0[5]: Copied!
def print_obstacle_displacement(omega, c):\n    print(\"[\")\n    subs = {\n        omega_x: deg2rad(omega[0]),\n        omega_y: deg2rad(omega[1]),\n        omega_z: deg2rad(omega[2]),\n        c_x: c[0],\n        c_y: c[1],\n        c_z: c[2],\n    }\n    for i, d in enumerate(disp):\n        expr = d.subs(subs).simplify()\n        expr_str = str(expr) if expr.is_constant() else f\"\\\"{str(expr).replace('**', '^')}\\\"\"\n        print(\"{}{}\".format(expr_str, \",\" if i < len(disp) - 1 else \"\"))\n    print(\"]\")\n
def print_obstacle_displacement(omega, c): print(\"[\") subs = { omega_x: deg2rad(omega[0]), omega_y: deg2rad(omega[1]), omega_z: deg2rad(omega[2]), c_x: c[0], c_y: c[1], c_z: c[2], } for i, d in enumerate(disp): expr = d.subs(subs).simplify() expr_str = str(expr) if expr.is_constant() else f\"\\\"{str(expr).replace('**', '^')}\\\"\" print(\"{}{}\".format(expr_str, \",\" if i < len(disp) - 1 else \"\")) print(\"]\") In\u00a0[6]: Copied!
print_obstacle_displacement([0, 0, -36], [-0.35, 0, 0])\nprint()\nprint_obstacle_displacement([0, 0, 36], [0.35, 0, 0])\n
print_obstacle_displacement([0, 0, -36], [-0.35, 0, 0]) print() print_obstacle_displacement([0, 0, 36], [0.35, 0, 0])
[\n\"-x + y*sin(pi*t/5) + (x + 0.35)*cos(pi*t/5) - 0.35\",\n\"y*cos(pi*t/5) - y - (x + 0.35)*sin(pi*t/5)\",\n0\n]\n\n[\n\"-x - y*sin(pi*t/5) + (x - 0.35)*cos(pi*t/5) + 0.35\",\n\"y*cos(pi*t/5) - y + (x - 0.35)*sin(pi*t/5)\",\n0\n]\n
In\u00a0[7]: Copied!
print_obstacle_displacement([0, 360/0.525, 0], [0, 0.1, 0])\n
print_obstacle_displacement([0, 360/0.525, 0], [0, 0.1, 0])
[\n\"x*cos(3.80952380952381*pi*t) - x + z*sin(3.80952380952381*pi*t)\",\n\"0\",\n\"-x*sin(3.80952380952381*pi*t) + z*cos(3.80952380952381*pi*t) - z\"\n]\n
In\u00a0[12]: Copied!
print_obstacle_displacement([20, 0, 0], [0, 0, 0])\n
print_obstacle_displacement([20, 0, 0], [0, 0, 0])
[\n\"0\",\n\"y*cos(pi*t/9) - y - z*sin(pi*t/9)\",\n\"y*sin(pi*t/9) + z*cos(pi*t/9) - z\"\n]\n
In\u00a0[\u00a0]: Copied!
\n
"},{"location":"tutorials/ipc_quick_start_guide/run_all/","title":"Run all","text":"In\u00a0[\u00a0]: Copied!
import sys\nfrom collections import namedtuple\nimport pathlib\nimport subprocess\n
import sys from collections import namedtuple import pathlib import subprocess In\u00a0[\u00a0]: Copied!
simrender_path = pathlib.Path(\"/home/zachary/Development/personal-projects/simrender\")\nif simrender_path.exists():\n    sys.path.append(str(simrender_path))\n    import render\n
simrender_path = pathlib.Path(\"/home/zachary/Development/personal-projects/simrender\") if simrender_path.exists(): sys.path.append(str(simrender_path)) import render In\u00a0[\u00a0]: Copied!
debug = False\n
debug = False In\u00a0[\u00a0]: Copied!
polyfem_bin = f\"/home/zachary/Development/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin\"\n#polyfem_bin = f\"/Users/zachary/Development/research/polyfem/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin\"\n
polyfem_bin = f\"/home/zachary/Development/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin\" #polyfem_bin = f\"/Users/zachary/Development/research/polyfem/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin\" In\u00a0[\u00a0]: Copied!
input_dir = pathlib.Path(__file__).parent / \"input\"\noutput_dir = pathlib.Path(__file__).parent / \"output\"\nvideos_dir = pathlib.Path(__file__).parent / \"videos\"\noutput_dir.mkdir(exist_ok=True, parents=True)\nvideos_dir.mkdir(exist_ok=True, parents=True)\n
input_dir = pathlib.Path(__file__).parent / \"input\" output_dir = pathlib.Path(__file__).parent / \"output\" videos_dir = pathlib.Path(__file__).parent / \"videos\" output_dir.mkdir(exist_ok=True, parents=True) videos_dir.mkdir(exist_ok=True, parents=True) In\u00a0[\u00a0]: Copied!
for script in input_dir.glob(\"*.json\"):\n    if script.name == \"ipc-defaults.json\":\n        continue\n\n    print(script.name)\n    # yes_or_no = input(\"Press enter to run [Y/n]: \")\n    # if yes_or_no.lower() not in [\"\", \"y\", \"yes\"]:\n    #     continue\n\n    subprocess.run(\n        ([\"lldb\", \"--\"] if debug else []) + [\n            polyfem_bin,\n            \"-j\", str(script),\n            \"-o\", str(output_dir / script.stem),\n            \"--log_level\", \"debug\"\n        ])\n\n    if simrender_path is not None and simrender_path.exists():\n        render_args = render.parse_args([\n            \"--input\", str(list((output_dir /\n                           script.stem).glob(\"*.pvd\"))[0]),\n            \"--output\", str(videos_dir / (script.stem + \".mp4\")),\n            \"--bg-color\", \"46\", \"48\", \"62\", \"255\",\n            \"--base-zoom\", \"2\",\n            # \"--drop-frames\", \"4\"\n        ])\n        render.main(render_args)\n
for script in input_dir.glob(\"*.json\"): if script.name == \"ipc-defaults.json\": continue print(script.name) # yes_or_no = input(\"Press enter to run [Y/n]: \") # if yes_or_no.lower() not in [\"\", \"y\", \"yes\"]: # continue subprocess.run( ([\"lldb\", \"--\"] if debug else []) + [ polyfem_bin, \"-j\", str(script), \"-o\", str(output_dir / script.stem), \"--log_level\", \"debug\" ]) if simrender_path is not None and simrender_path.exists(): render_args = render.parse_args([ \"--input\", str(list((output_dir / script.stem).glob(\"*.pvd\"))[0]), \"--output\", str(videos_dir / (script.stem + \".mp4\")), \"--bg-color\", \"46\", \"48\", \"62\", \"255\", \"--base-zoom\", \"2\", # \"--drop-frames\", \"4\" ]) render.main(render_args)"},{"location":"tutorials/multi-material/multi-material/","title":"Simulating Multiple Materials in a Single Mesh","text":"Author: Zachary Ferguson and Hanwen Zhao

In this tutorial, we will demonstrate how to create a multi-material object using fTetWild and simulate it using PolyFEM.

The data for this tutorial can be found here.

"},{"location":"tutorials/multi-material/multi-material/#prerequisites","title":"Prerequisites","text":"

The following items are necessary to complete this tutorial. To replicate the experiment, you can feel free to use either the given mesh files or your own mesh.

  • Build PolyFEM
  • Build fTetwild
  • Download File: left_box.obj
  • Download File: middle_box.obj
  • Download File: right_box.obj
  • Download File: stretch-cubes.json
"},{"location":"tutorials/multi-material/multi-material/#build-polyfem","title":"Build PolyFEM","text":"

The instructions for building PolyFEM can be found here. After compilation, to use PolyFEM in any working directory machine, we suggest adding an alias

alias polyfem='path/to/PolyFEM/build/PolyFEM_bin'\n
to your ~/.bashrc or ~/.zshrc file.

Then you can use it by

polyfem --help\n
"},{"location":"tutorials/multi-material/multi-material/#build-ftetwild","title":"Build fTetWild","text":"

You can find the instruction for building fTetWild here. After doing so you should have an executable file FloatTetwild_bin. For convenience we can again define an alias for this binary:

alias tetwild='path/to/fTetWild/build/FloatTetwild_bin'\n

"},{"location":"tutorials/multi-material/multi-material/#creating-the-mesh","title":"Creating the Mesh","text":""},{"location":"tutorials/multi-material/multi-material/#input-meshes","title":"Input Meshes","text":"

We will use three mesh files to create a simple multi-material object: left_box.obj, middle_box.obj, and right_box.obj. The left and right boxes will have nearly rigid material properties, while the middle box will be more flexible.

Left: left_box.obj Middle: middle_box.obj Right: right_box.obj"},{"location":"tutorials/multi-material/multi-material/#constructive-solid-geometry","title":"Constructive Solid Geometry","text":"

The next step is to create a union of these three meshes, this can be done using fTetWild. To create a union of three objects, we can create a JSON file

{\n\"operation\": \"union\",\n\"left\": {\n\"operation\": \"union\",\n\"left\": \"left_box.obj\",\n\"right\": \"middle_box.obj\"\n},\n\"right\": \"right_box.obj\"\n}\n
and use it as input to fTetWild
tetwild --csg /path/to/union.json --no-color -o cubes.msh\n

The --csg flag stands for constructive solid geometry which describes how to construct a shape using set operations between other shapes (e.g., union, intersection, and difference). In our case, we want to union the three boxes together.

The --no-color is optional and disables the color output of fTetWild which can be used to visualize the quality of elements.

The combined mesh should look like this:

Note

To view .msh files you can use Gmsh.

"},{"location":"tutorials/multi-material/multi-material/#removing-extra-vertices","title":"Removing Extra Vertices","text":"

fTetWild will sometimes produce extra floating vertices that are not part of the mesh. These extra vertices do not harm anything, but can inflate the bounding box making it hard to select a side of the cube in PolyFEM. To remove these vertices we provide a simple Python script here.

"},{"location":"tutorials/multi-material/multi-material/#setting-up-the-simulation","title":"Setting up the Simulation","text":"

We will setup the simulation using PolyFEM\u2019s JSON interface. For more details, please refer to the JSON Input documentation.

We will go over the JSON script section by section. The complete JSON file can be found in the GitHub Repo.

"},{"location":"tutorials/multi-material/multi-material/#geometry","title":"Geometry","text":"
{\n\"geometry\": {\n\"mesh\": \"cubes_v22.msh\"\n}\n}\n

The \"geometry\" section specifies all required simulation geometry data. The \"mesh\" field defines the path to the volumetric mesh file. In this tutorial, only the cubes_v22.msh file from fTetwild will be utilized.

"},{"location":"tutorials/multi-material/multi-material/#boundary-conditions","title":"Boundary Conditions","text":"
{\n\"boundary_conditions\": {\n\"rhs\": [0, 0, 0],\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"-t\", 0, 0]\n}, {\n\"id\": 3,\n\"value\": [\"t\", 0, 0]\n}]\n}\n}\n

In boundary conditions, we permit the left box and right box sections to have Dirichlet boundaries that move along the x-axis as a function of time t. Here we use the default boundary IDs assigned described here.

The rhs is defined as [0, 0, 0], which indicates that the simulation has no prescribed body forces (i.e., no gravity).

"},{"location":"tutorials/multi-material/multi-material/#materials","title":"Materials","text":"
{\n\"materials\": [{\n\"id\": 1,\n\"E\": 2e11,\n\"nu\": 0.3,\n\"rho\": 7750,\n\"type\": \"NeoHookean\"\n}, {\n\"id\": 2,\n\"E\": 2.55e7,\n\"nu\": 0.48,\n\"rho\": 1700,\n\"type\": \"NeoHookean\"\n}, {\n\"id\": 3,\n\"E\": 2e11,\n\"nu\": 0.3,\n\"rho\": 7750,\n\"type\": \"NeoHookean\"\n}]\n}\n

In the materials section, we assign identical material properties to the left and right boxes but use a softer material for the middle box.

The volume IDs in this case are loaded directly from the cubes_v22.msh file. fTetWild automatically assigns these labels based on which domain the elements falls in the CSG.

Warning

Loading volume IDs from the mesh file is currently only supported with version 4.1 MSH files (both ASCII and binary).

"},{"location":"tutorials/multi-material/multi-material/#time-dependent-simulation","title":"Time-Dependent Simulation","text":"

{\n\"time\": {\n\"dt\": 0.0025,\n\"time_steps\": 20\n}\n}\n
In the \"time\" section, we define our time step size as 0.0025 seconds and the total number of steps to be 20.

"},{"location":"tutorials/multi-material/multi-material/#contact","title":"Contact","text":"
{\n\"contact\": {\n\"enabled\": true,\n\"dhat\": 0.001\n}\n}\n

We enable contact by defining a \"contact\" section as above.

"},{"location":"tutorials/multi-material/multi-material/#solver","title":"Solver","text":"
{\n\"solver\": {\n\"linear\": {\n\"solver\": \"Eigen::PardisoLDLT\"\n},\n\"nonlinear\": {\n\"line_search\": {\n\"method\": \"backtracking\"\n},\n\"solver\": \"newton\",\n\"grad_norm\": 1e-05,\n\"use_grad_norm\": true\n},\n\"advanced\": {\n\"lump_mass_matrix\": true\n}\n}\n}\n

We make a few adjustments to the solver. Here we are using Newton with backtracking line-search and Eigen::PardisoLDLT for linear solves. We also set the convergence tolerance for the gradient norm to 1e-05.

"},{"location":"tutorials/multi-material/multi-material/#spatial-discretization","title":"Spatial Discretization","text":"
{\n\"space\": {\n\"discr_order\": [{\n\"id\": 1,\n\"order\": 1\n}, {\n\"id\": 2,\n\"order\": 2\n}, {\n\"id\": 3,\n\"order\": 1\n}]\n}\n}\n

Lastly, we demonstrate that PolyFEM can simulate mixed order elements. In this example, we choose to use linear P1 elements for the left and right box, but use quadratic P2 elements for the middle box.

The use of higher-order representations can lead to more precise calculations with slightly more running time.

"},{"location":"tutorials/multi-material/multi-material/#running-the-simulation","title":"Running the Simulation","text":"

We can use the following command to run the simulation:

polyfem -j stretch-cubes.json -o output/\n

The simulation results will be written to output/ as a sequence of VTU file and a PVD file for the time sequence.

"},{"location":"tutorials/multi-material/multi-material/#visualize-the-simulation-results","title":"Visualize the Simulation Results","text":"

To visualize the simulation results in VTU format, we can use ParaView, an open-source, multi-platform data analysis and visualization application.

To view the results, please follow the instruction below.

  • Step 1: File - Open, select sequence group file step.vtu or step.vtm.
  • Step 2: Click Apply under the tab Properties located in the left side of the GUI.
  • Step 3: Click on Wrap By Vector to apply the displacement to the objects. This function can be found from the top menu bar.
  • Step 4: Click again Apply under the tab Properties.
  • Step 5: Now, the Play button can be used to view the time sequence results.
"},{"location":"tutorials/screw/screw/","title":"Screw a Bolt into a Nut","text":"Author: Duo Zhang

This tutorial showcases how to set up and use PolyFEM to simulate screwing a bolt into a nut (for example, to be used in a robotic assembly simulation).

"},{"location":"tutorials/screw/screw/#prerequisites","title":"Prerequisites","text":"

In this tutorial, we assume you have already installed PolyFEM on your machine. If not, please follow the instructions here. After compilation, to use PolyFEM in any working directory machine, we can set up an alias for the main executable for ./PolyFEM_bin by adding the following to ~/.bashrc or ~/.zshrc according to the type of your shell.

alias polyfem='path/to/PolyFEM/build/PolyFEM_bin'\n

Then you can use it by

polyfem --help\n
"},{"location":"tutorials/screw/screw/#data-preparation","title":"Data Preparation","text":"

The data needed in this tutorial can be found here. The volume mesh files are all made by fTetWild. Feel free you make your screws and nuts.

"},{"location":"tutorials/screw/screw/#overview","title":"Overview","text":"

In these tutorials, the bolt will be screwed into the nut in several different ways. The tutorials can also be found at Github: Screw tutorials. The screw is represented as a volume mesh

\"geometry\": [{\n\"mesh\": \"data/screw-big.msh\",\n\"transformation\": {\n\"translation\": [0, 0, 0],\n\"scale\": 0.01\n},\n\"volume_selection\": 1,\n\"surface_selection\": 2\n}]\n

and the nut is set to be an obstacle just to speed up the simulation by setting \"is_obstacle\": true because obstacles in PolyFEM are rigid and only the surface of obstacles is taken into consideration.

\"geometry\": [{\n// ...\n}, {\n\"mesh\": \"data/nut-big.stl\",\n\"is_obstacle\": true,\n\"transformation\": {\n\"translation\": [0, -0.02675, 0],\n\"scale\": 0.01\n}\n}]\n

For other parameters, the bolt is using the parameter of steel

\"materials\": [{\n\"type\": \"NeoHookean\",\n\"id\": 1,\n\"E\": 2e11,\n\"nu\": 0.3,\n\"rho\": 8050\n}]\n
"},{"location":"tutorials/screw/screw/#fully-constrained-screw-in-all-dimensions","title":"Fully Constrained Screw in All Dimensions","text":"

In this tutorial, the screw is completely controlled by Dirichlet boundary conditions in all three dimensions. Thus the trajectory of the screw is fixed(rotation and transformation) and needs to be calculated carefully. For a single-threaded bolt and every rotation of \\(360^{\\circ}\\), the bolt will go into the nut by the thread distance. In this case, the thread distance of the screw used in this tutorial is 1.33m. Therefore the Dirichlet Boundary Condition is set to

\"dirichlet_boundary\": [{\n\"id\": 2,\n\"value\": [\n\"x*cos(-2*pi*t) + z * sin(-2*pi*t)-x\",\n\"-1.33*0.01*t\", \"-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z\"\n],\n\"dimension\": [true, true, true]\n}]\n

Here the angular velocity of the rotation is \\(-2\\pi\\) and the bolt is getting into the nut along the y-axis by \\(1.33\\times 0.01\\) since the bolt and the nut is scaled by 0.01. The \"dimension\" argument is set to be true for all three dimensions to make sure the bolt is in full control.

To view the whole JSON file for this case, please go to screw.json.

To run this JSON with PolyFEM, please go to the GitHub repo Github: Screw tutorials and run the following in your terminal

polyfem --json screws.json --output_dir results\n
"},{"location":"tutorials/screw/screw/#constrained-rotation-but-free-movement-in-the-direction-of-feed","title":"Constrained Rotation but Free Movement in the Direction of Feed","text":"

In this tutorial, only two dimensions have Dirichlet boundary conditions. For the y-axis or the direction of feed, the screw is completely free. Therefore we only need to specify the rotation in the Dirichlet boundary condition and the bolt would get into the nut by basic high school physics.

\"dirichlet_boundary\": [{\n\"id\": 2,\n\"value\": [\n\"x*cos(-2*pi*t) + z * sin(-2*pi*t)-x\",\n\"-1.33*0.01*t\", \"-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z\"\n],\n\"dimension\": [true, false, true]\n}]\n

The only thing we need to modify in the \"dirichlet_boundary\" argument is to change the y-axis in \"dimension\" to false.

"},{"location":"tutorials/screw/screw/#top-constrained-bolt","title":"Top Constrained Bolt","text":"

Instead of putting Dirichlet boundary conditions on the whole bolt, we can also constrain only the top of the bolt to simulate some actuators. The following image is the visualization of the bolt only constrained on the top of the bolt by Dirichlet boundary conditions.

To make specified boundary condition selections, please refer to Selections. In the JSON file, we need to change the surface_selection to the axis-plane selection method instead of using an integer to select the whole body of the bolt.

\"geometry\": [{\n\"mesh\": \"data/screw-big.msh\",\n\"transformation\": {\n\"translation\": [0, 0, 0],\n\"scale\": 0.01\n},\n\"volume_selection\": 1,\n\"surface_selection\": [{\n\"id\": 3,\n\"axis\": \"y\",\n\"position\": 0.11\n}]\n}]\n

which is to apply the boundary condition with id=3 to the meshes whose coordinates in the y-axis are greater than 0.11 (If set \"axis\": \"-y\" is to select the negative side of the y-axis which are the meshes whose y-coordinates are less then 0.11).

To view the whole JSON file for this, please go to top_constrained.json.

"},{"location":"tutorials/screw/screw/#two-facets-constrained-bolt","title":"Two Facets Constrained Bolt","text":"

In addition to constraining the top part of the bolt to simulate an actuator, we can also only constrain the two facets of the head of the bolt to simulate a user pinching the bolt with two fingers and trying to screw the bolt into the nut. The following image is the visulization of contraining just two facets of the bolt.

In this case, the \"boundary_sidesets\" becomes:

 \"boundary_sidesets\": [{\n\"id\": 2,\n\"axis\": -3,\n\"position\": -0.039\n}, {\n\"id\": 2,\n\"axis\": 3,\n\"position\": 0.039\n}]\n

To view the whole JSON file, please go to two_facets_contrained.json.

"},{"location":"tutorials/screw/screw/#gravity-controlled-bolt","title":"Gravity Controlled Bolt","text":"

In theory, if the friction is 0 and the gravity is the only force applied to the bolt, then the bolt should be able to get into the nut automatically under gravity. In this case, it is not very useful but it is interesting to test. There\u2019s no need to set any boundary conditions because the bolt is completely free. The only thing that needs to be done is to enable gravity in the JSON file by setting

\"boundary_conditions\": {\n\"rhs\": [0, 9.81, 0]\n},\n

Note that the direction of gravity is along the y-axis.

The whole JSON file is here only_gravity.json.

"},{"location":"tutorials/sling-shot/sling-shot/","title":"Sling Shot","text":"

In this tutorial, we are going to develop an environment from scratch using polyfempy and Python for a sling-shot. In this scene, we have two fingers holding the ball and the fingers will pull the rubber band and then release the ball into the air.

"},{"location":"tutorials/sling-shot/sling-shot/#installation-of-python-bindings-of-polyfem","title":"Installation of Python Bindings of PolyFEM","text":"

In this tutorial, we are assuming you have already installed polyfempy on your machine. If not, please follow the instructions here. Note that there\u2019s no need to install standalone PolyFEM. All the dependencies that polyfempy requires will be installed automatically including PolyFEM. Also please note that please install and compile polyfempy from source by doing

python setup.py install\n
instead of using the Conda deployment.

After installation, please try to run

python -c \"import polyfempy as pf\"\n
to test if polyfempy is installed successfully. Note that this tutorial is using Conda virtual environment.

"},{"location":"tutorials/sling-shot/sling-shot/#installation-of-other-dependencies","title":"Installation of Other Dependencies","text":"

To build this project, there are some other dependencies we need. Note that meshio and igl are optional. They are only required if you want to render the scenes with python. 1. numpy conda install numpy 2. meshio(optional) conda install -c conda-forge meshio 3. python bindings of libigl(optional) conda install -c conda-forge igl

"},{"location":"tutorials/sling-shot/sling-shot/#data-preparation","title":"Data Preparation","text":"

The data needed in this tutorial can be found here. For triangle meshes, they are in surf_mesh folder and the volume meshes are in vol_mesh folder The volume mesh files are all made by fTetWild. Feel free you make you own sphere, rubber band and fingers.

"},{"location":"tutorials/sling-shot/sling-shot/#tutorial","title":"Tutorial","text":"

All the code and JSONs can be found at Github: Slingshot Tutorial. The file tree of this project is:

project\n|___pushbox\n|   |___src\n|   |___assets\n|       |___data\n|       |   |___surf_mesh\n|       |   |___vol_mesh\n|       |___json\n|___test.py\n

"},{"location":"tutorials/sling-shot/sling-shot/#json-environment-setup","title":"Json Environment Setup","text":"
  1. The first step is to make a JSON file slingshot.json in the JSON folder for the initial setup with the sphere, rubber band and fingers in it. Let\u2019s load the objects!
    \"geometry\": [\n{\n\"mesh\": \"slingshot/assets/data/vol_mesh/mat.msh\",\n\"transformation\": {\n\"translation\": [\n0.018,\n0.115,\n0\n],\n\"rotation\": [\n0,\n0,\n90\n],\n\"scale\": [\n0.00385,\n0.01,\n0.21\n]\n},\n\"volume_selection\": 1,\n\"advanced\": {\n\"normalize_mesh\": false\n},\n\"surface_selection\": [\n{\n\"id\": 3,\n\"axis\": -3,\n\"position\": -0.1\n},\n{\n\"id\": 3,\n\"axis\": 3,\n\"position\": 0.1\n}\n]\n},\n{\n\"mesh\": \"slingshot/assets/data/vol_mesh/sphere_grooved.msh\",\n\"transformation\": {\n\"translation\": [\n0,\n0.115,\n0\n],\n\"rotation\": [\n90,\n0,\n0\n],\n\"scale\": 0.0386\n},\n\"volume_selection\": 2,\n\"advanced\": {\n\"normalize_mesh\": false\n}\n},\n{\n\"mesh\": \"slingshot/assets/data/surf_mesh/left_finger.obj\",\n\"is_obstacle\": true,\n\"enabled\": true,\n\"transformation\": {\n\"translation\": [\n0.04,\n0.16032,\n0.0\n],\n\"rotation\": [\n0,\n-90,\n0\n],\n\"scale\": 1\n},\n\"surface_selection\": 1000\n},\n{\n\"mesh\": \"slingshot/assets/data/surf_mesh/right_finger.obj\",\n\"is_obstacle\": true,\n\"enabled\": true,\n\"transformation\": {\n\"translation\": [\n0.04,\n0.06965,\n0.0\n],\n\"rotation\": [\n0,\n-90,\n0\n],\n\"scale\": 1\n},\n\"surface_selection\": 1001\n}\n]\n
    The first mesh is a 21cm rubber band. It is originally a mat but then rescaled to the shape of a rubber band. The second mesh is a sphere with a groove in the middle part of its body in case the rubber band might slide off the sphere if the friction is not enough. As for the two fingers, there\u2019s no need to consider their deformation so they are set to obstacles. The displacements are not zero vectors because the fingers need to squeeze the ball and hold the ball tightly enough to pull the rubber band without sliding off the fingers while still pulling. Note that the volume_selection here means to select the entire volume of the tetrahedron mesh to be simulated and the surface_selection means the surface area that you want to select. For example, both fingers are obstacles and they are triangle meshes. So to move and simulate them, I would like to select the entire finger. Thus here I can select them by giving the whole mesh an index:
    {\n\"mesh\": \"slingshot/assets/data/surf_mesh/right_finger.obj\",\n\"is_obstacle\": true,\n...\n\"surface_selection\": 1001\n}\n
    In some scenarios, maybe the user only wants to select a part of the mesh and give the selected part a different movement from other parts. Then this could be done by setting the surface_selection part with specialized fields. For example, in this slingshot case, I would like to set the two ends of the rubber band to be still and the rest part to be able to move freely so that the rubber band will be extended while the sphere is pulled back by two fingers. To achieve this, the two ends of the rubber band can be selected by:
    {\n\"mesh\": \"slingshot/assets/data/vol_mesh/mat.msh\",\n...\n\"surface_selection\": [\n{\n\"id\": 3,\n\"axis\": -3,\n\"position\": -0.1\n},\n{\n\"id\": 3,\n\"axis\": 3,\n\"position\": 0.1\n}\n]\n}\n
    The detailed explanation of id, axis and position can be found at Selections in PolyFEM
  2. The second thing is to give proper material parameters to these objects. Since we are using a rubber band and also we want to grasp the ball tightly enough, we can use the material parameters for both of them. If you don\u2019t know the parameters of rubber, Just Google for Them! Feel free to use other material parameters.
    \"materials\": [\n{\n\"id\": 2,\n\"E\": 10000000.0,\n\"nu\": 0.4,\n\"rho\": 1150,\n\"type\": \"NeoHookean\"\n},\n{\n\"id\": 1,\n\"E\": 10000000.0,\n\"nu\": 0.4,\n\"rho\": 1150,\n\"type\": \"NeoHookean\"\n}\n]\n
  3. Since the sphere is all free and the only actuator are the fingers, there is no need to set Dirichlet boundary conditions for the sphere. As for the rubber band, although most of the rubber band is free to move, the two sides of the rubber band need to be static like attached to two poles. Then the Dirichlet boundary condition with \"id\":3 is set to zero for the two ends of the rubber band.
    \"boundary_conditions\": {\n\"obstacle_displacements\": [\n{\n\"id\": 1000,\n\"value\": [\n\"0\",\n\"-0.02 * t\",\n\"0\"\n]\n},\n{\n\"id\": 1001,\n\"value\": [\n\"0\",\n\"0.02 * t\",\n\"0\"\n]\n}\n],\n\"rhs\": [\n0,\n9.81,\n0\n],\n\"dirichlet_boundary\": [\n{\n\"id\": 3,\n\"value\": [\n0,\n0,\n0\n]\n}\n]\n}\n
    To view the whole JSON configuration file, please go to sling_shot.json.

After loading every object, the environment should look like

"},{"location":"tutorials/sling-shot/sling-shot/#python-environment-development","title":"Python Environment Development","text":"

In this section, we will develop a python environment to do the slingshot.

"},{"location":"tutorials/sling-shot/sling-shot/#class-initialization","title":"Class Initialization","text":"

In the src folder, create a python file slingshot.py. In this file, let\u2019s first import necessary libraries and create a PushBox class with its __init__ function:

import polyfempy as pf\nimport json\nimport numpy as np\n\n\nclass SlingShot:\n    def __init__(self) -> None:\n        self.asset_file = 'slingshot/assets/json/sling_shots.json'\n        with open(self.asset_file,'r') as f:\n            self.config = json.load(f)\n        self.dt = self.config[\"dt\"]\n        self.step_count = 1\n        self.solver = pf.Solver()\n        self.solver.set_log_level(3)\n        self.solver.set_settings(json.dumps(self.config))\n        self.solver.load_mesh_from_settings()\n        self.dt = self.config[\"dt\"]\n        self.t0 = self.config[\"t0\"]\n        self.solver.init_timestepping(self.t0, self.dt)\n        self.id_to_mesh = {}\n        self.id_to_position = {}\n        self.id_to_vf = {}\n        for mesh in self.config[\"meshes\"]:\n            self.id_to_mesh[mesh[\"body_id\"]] = mesh[\"mesh\"]\n            self.id_to_position[mesh[\"body_id\"]] = mesh[\"position\"]\n\n        # To grasp and hold the sphere very tightly\n        self.pre_steps = 4\n        for i in range(self.pre_steps):\n            self.run_simulation()\n        self.cumulative_action = {\"0\":np.array([0, -0.02 * self.dt * self.step_count, 0, 0.02 * self.dt * self.step_count]), \"1\":np.array([0, 0.02 * self.dt, 0, 0.02 * self.dt])}\n
In the __init__ function, we load the environment configuration from the JSON file we just made, initialize a step counter and the PolyFEM solver. Here we set the log_level of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on docs for log_levels (More specifically, \u2013log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}).

One thing to mention is that polyfempy is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so self.cumulative_action would take care of previous displacements.

Different from the PushBox environment, in this __init__ function, we need to squeeze the sphere to a certain point so that the sphere would never slide off the fingers unless the user decides to release it. That\u2019s why at the end of the __init__ function four pre_steps are trying to close the fingers and squeeze the rubber ball.

"},{"location":"tutorials/sling-shot/sling-shot/#take-the-action-from-the-user","title":"Take the action from the user","text":"

The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side. In this tutorial, the action space is 4-dimensional and consists of movement of the fingers along the x-axis, y-axis, and z-axis and one action to close or open the two fingers. The argument actions in this function are a dictionary and contain the actions for both fingers.

def set_boundary_conditions(self, actions:dict):\n    t0 = self.t0\n    t1 = t0 + self.dt\n    for mesh_id, action in actions.items():\n        self.solver.update_obstacle_displacement(\n                int(mesh_id),\n                [\n                    f\"{self.cumulative_action[mesh_id][0]} + ((t-{t0})*{action[0]})/({t1-t0})\",\n                    f\"{self.cumulative_action[mesh_id][1] + self.cumulative_action[mesh_id][3]} + ((t-{t0})*{action[1] + action[3]})/({t1-t0})\",\n                    f\"{self.cumulative_action[mesh_id][2]} + ((t-{t0})*{action[2]})/({t1-t0})\"\n                ]\n            )\n        self.cumulative_action[mesh_id] += action\n
In the current setting, the fingers are opening and closing along the y-axis. That is why the action to control the fingers to open or close also needs to be added to the overall y-axis. Also since there are two fingers in the scene, we use a for loop to update the displacements for both of them.

"},{"location":"tutorials/sling-shot/sling-shot/#run-simulation-for-the-current-timestep","title":"Run simulation for the current timestep","text":"
def run_simulation(self):\n    self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt\n    self.step_count += 1 # increment the step counter\n    self.t0 += self.dt # increment the starting time point for the next time step\n

To simulate the current timestep, we need to call self.solver.step_in_time, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now.

"},{"location":"tutorials/sling-shot/sling-shot/#get-the-position-of-each-object","title":"Get the position of each object","text":"

If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function.

def get_object_positions(self):\n    points, tets, _, body_ids, displacement = self.solver.get_sampled_solution()\n    self.id_to_position = {}\n    self.id_to_vertex = {}\n    for mesh_id, _ in self.id_to_mesh.items():\n        vertex_position = points + displacement\n        self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id]\n        mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat\n        tet_barycenter = np.mean(vertex_position[tets], axis=1)\n        self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0)\n    return self.id_to_position\n

This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a \u201ccentroid\u201d of the object to represent its position.

"},{"location":"tutorials/sling-shot/sling-shot/#step-function-exposed-to-the-user","title":"Step function exposed to the user","text":"

def step(self, action: np.ndarray):\n    actions = {\n            # x, y, z gripper_displacement\n            \"0\": np.array([action[0],\n                            action[1],\n                            action[2],\n                           -1 * action[3]/2]),\n            \"1\": np.array([action[0],\n                            action[1],\n                            action[2],\n                           action[3]/2])\n        }\n    self.set_boundary_conditions(actions)\n    self.run_simulation()\n    return self.get_object_positions()\n
The step function here takes the action from the user and simulates the timestep and returns the positions for each object to the user. Note that the action from the user is a numpy array containing the x,y,z movement of the two fingers and the displacement between the two fingers for the current timestep. Then the action needs to be transferred into a dictionary that \"self.set_boundary_conditions\" function would recognize for both of the fingers. At the same time, the two fingers\u2019 displacements are coupled so in the actions dictionary, the displacements need to be decoupled from both fingers and let them move in opposite directions.

To view the implementation of the whole class, please go to slingshot.py.

"},{"location":"tutorials/sling-shot/sling-shot/#test-of-the-environment","title":"Test of the Environment","text":"

Here\u2019s a very simple test case:

from slingshot.src.slingshot import SlingShot\nimport numpy as np\n\nenv = SlingShot()\nprint(\"Initialzied.\")\n# pull the rubber band\nfor i in range(3):\n    action = np.array([0.1,0,0,0])\n    env.step(action)\n\n# release it\naction = np.array([0,0,0,-0.1])\nenv.step(action)\n# let it fly\nfor i in range(20):\n    action = np.array([0,0,0,0])\n    env.step(action)\n
You can create a test.py file for this, and run it in the project folder: shell= python test.py The result should be like the gifs at the beginning.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/","title":"Sphere Pushing A Box","text":"Author: Duo Zhang

In this tutorial, we will be focusing on how to make an environment using a sphere to push a box on a table from scratch. In this scenario, one single JSON file for PolyFEM is seemingly not enough to simulate a varying and interactive environment like this. Therefore we will be using polyfempy, the python bindings for PolyFEM, to enable a more functional and versatile development.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#prerequisites","title":"Prerequisites","text":""},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#install-the-python-bindings-of-polyfem","title":"Install the Python Bindings of PolyFEM","text":"

In this tutorial, we are assuming you have already installed polyfempy in your machine. If not, please follow the instructions here. Note that there is no need to install standalone PolyFEM. All the dependencies that polyfempy requires will be installed automatically including PolyFEM. Also please note that please install and compile polyfempy from source by doing

python setup.py install\n
instead of using the conda depolyment.

After installation, please try to run

python -c \"import polyfempy as pf\"\n
to test if polyfempy is installed successfully.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#other-dependencies","title":"Other Dependencies","text":"

Note that this tutorial is using a Conda virtual environment.

To build this project, there are some other depencies we need. Note that meshio and igl are optional. They are only required if you want to render the scenes with python.

  1. numpy: conda install numpy
  2. meshio (optional): conda install -c conda-forge meshio
  3. python bindings of libigl (optional): conda install -c conda-forge igl
"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#data-preparation","title":"Data Preparation","text":"

The data needed in this tutorial can be found here. For triangle meshes, they are in surf_mesh folder and the volume meshes are in vol_mesh folder. The volume mesh files are all made using fTetWild. Feel free you make your own spheres and boxes.

All the codes and JSON files can be found here.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#environment-with-volume-meshes","title":"Environment with Volume Meshes","text":""},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#json-environment-setup","title":"JSON Environment Setup","text":"
  1. The first step is to make a JSON file push_box_all_vol_mesh.json in the JSON folder for the initial setup with the sphere, cube, and the table in it. Let\u2019s load the objects!

    {\n\"geometry\": [{\n\"mesh\": \"pushbox/assets/data/vol_mesh/sphere.msh\",\n\"transformation\": {\n\"translation\": [-1.0, 0.2, 0],\n\"scale\": 0.1\n},\n\"volume_selection\": 1,\n\"surface_selection\": 1\n}, {\n\"mesh\": \"pushbox/assets/data/vol_mesh/cube.msh\",\n\"transformation\": {\n\"translation\": [0, -0.0051, 0],\n\"scale\": [4, 0.01, 4]\n},\n\"volume_selection\": 2,\n\"surface_selection\": 2,\n}, {\n\"mesh\": \"pushbox/assets/data/vol_mesh/cube.msh\",\n\"transformation\": {\n\"translation\": [-0.65, 0.2, 0],\n\"scale\": 0.4\n},\n\"volume_selection\": 3,\n\"surface_selection\": 3\n}]\n}\n
    The first mesh is the sphere, and the third one is the cube. Here, the cube\u2019s mesh is re-scaled to act as the table. Feel free to use a 2D plane, or the mat mesh as the table in the GitHub repo.

  2. The second thing is to give proper material parameters to these objects.

    {\n\"materials\": [{\n\"id\": 1,\n\"E\": 2e11,\n\"nu\": 0.3,\n\"rho\": 7750,\n\"type\": \"NeoHookean\"\n}, {\n\"id\": 2,\n\"E\": 2e11,\n\"nu\": 0.3,\n\"rho\": 7750,\n\"type\": \"NeoHookean\"\n}, {\n\"id\": 3,\n\"E\": 1e8,\n\"nu\": 0.48,\n\"rho\": 1500.0,\n\"type\": \"NeoHookean\"\n}],\n}\n
    The material parameters go to their matching meshes with the same \"volume_selection\"s.

  3. For the boudary conditions, we can set it as:

    {\n\"boundary_conditions\": {\n\"rhs\": [0, 9.81, 0],\n\"dirichlet_boundary\": [{\n\"id\": 1,\n\"value\": [\"0\", \"0\", \"0\"]\n}, {\n\"id\": 2,\n\"value\": [0, 0, 0]\n}]\n}\n}\n
    The first Dirichlet boundary condition with \"id\":1 is set for the sphere. They are set to [\"0\", \"0\", \"0\"] just for initialization and the value of the boundary condition will be modified during the interaction.

    The second Dirichlet boundary condition is for the table since there\u2019s no need for the table to move. That\u2019s why it\u2019s set to [0,0,0].

    Note that there\u2019s no Dirichlet boundary condition with \"id\":3, however, the \"boundary_id\" for the cube is set to 3. This is because we want the cube to be completely free in all three dimensions.

    In addition to the Dirichlet boundary conditions, the problem should also be time-dependent and the gravity should also be specified in the \"rhs\" argument (the gravity here is along the y-axis).

To view the whole JSON file, please go to pushbox_all_vol_mehses.json.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#python-environment-development","title":"Python Environment Development","text":"

In this section, we will develop a python environment to control the sphere to interact with the box.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#class-initialization","title":"Class Initialization","text":"

In the src folder, create a python file pushbox.py. In this file, let\u2019s first import necessary libraries and create a PushBox class with its __init__ function:

import polyfempy as pf\nimport json\nimport numpy as np\n\nclass PushBox:\n    def __init__(self) -> None:\n        self.asset_file = 'pushbox/assets/json/push_box_all_vol_mesh.json'\n        with open(self.asset_file,'r') as f:\n            self.config = json.load(f)\n        self.step_count = 1\n        self.solver = pf.Solver()\n        self.solver.set_log_level(3)\n        self.solver.set_settings(json.dumps(self.config))\n        self.solver.load_mesh_from_settings()\n        self.cumulative_action = np.zeros(3)\n        self.dt = self.config[\"time\"]['dt']\n        self.t0 = self.config[\"time\"][\"t0\"]\n        self.solver.init_timestepping(self.t0, self.dt)\n\n        self.id_to_mesh = {}\n        self.id_to_position = {}\n        self.id_to_vf = {}\n        for mesh in self.config[\"geometry\"]:\n            if (\"is_obstacle\" in mesh.keys()) and (mesh[\"is_obstacle\"]):\n                self.obstacle_ids.append(mesh[\"surface_selection\"])\n            else:\n                self.id_to_mesh[mesh[\"volume_selection\"]] = mesh[\"mesh\"]\n                self.id_to_position[mesh[\"volume_selection\"]] = mesh[\"transformation\"][\"translation\"]\n

In the __init__ function, we load the environment configuration from the JSON file we just made, initialize a step counter and the polyfem solver. Here we set the log_level of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on docs for log_levels (More specifically, --log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}).

One thing to mention is that polyfempy is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so self.cumulative_action would take care of previous displacements.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#take-the-action-from-the-user","title":"Take the action from the user","text":"

The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side.

def set_boundary_conditions(self, action: np.ndarray): -> None\n    t0 = self.t0 # starting time point for this timestep\n    t1 = t0 + self.dt # end time point for this timestep\n    self.solver.update_dirichlet_boundary(\n            int(1), # the dirichlet boundary condition with id=1\n            [\n                f\"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})\",\n                f\"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})\",\n                f\"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})\"\n            ]\n        )\n        self.cumulative_action += action # accumulate the new action to displacement \n

This code block is to update the dirichlet boundary condition for the sphere in the next timestep. The current time is t0, and the current displacement is self.cumulative_action. Since the movement of the sphere needs to be continous and potential fatal penetration can happen if we just set the dirichlet boundary condition to self.cumulative_action + action. Image the action is large enough and greater than the edge length of the box while the sphere is on the left side of the box, then the sphere can teleport to the right side of the box without moving it. To avoid this kind of teleportation, we can interpolate the displacement from self.cumulative_action to self.cumulative_action + action for this timestep to make the movement of the sphere smooth and contiuous. The updated dirichlet boundary conditon in the above code block is the linear interplotion for the current timestep.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#run-simulation-for-the-current-timestep","title":"Run simulation for the current timestep","text":"
def run_simulation(self):\n    self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt\n    self.step_count += 1 # increment the step counter\n    self.t0 += self.dt # increment the starting time point for the next time step\n

To simulate the current timestep, we need to call self.solver.step_in_time, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#get-the-position-of-each-object","title":"Get the position of each object","text":"

If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function.

def get_object_positions(self):\n    points, tets, _, body_ids, displacement = self.solver.get_sampled_solution()\n    self.id_to_position = {}\n    self.id_to_vertex = {}\n    for mesh_id, _ in self.id_to_mesh.items():\n        vertex_position = points + displacement\n        self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id]\n        mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat\n        tet_barycenter = np.mean(vertex_position[tets], axis=1)\n        self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0)\n    return self.id_to_position\n

This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a \u201ccentroid\u201d of the object to represent its position.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#step-function-exposed-to-the-user","title":"Step function exposed to the user","text":"

def step(self, action: np.ndarray):\n    self.set_boundary_conditions(action)\n    self.run_simulation()\n    return self.get_object_positions()\n
The step function here takes the action from the user and runs the simulation for this timestep and returns the positions for each object to the user.

To view the implementation of the whole class, please go to pushbox.py.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#test-of-the-environment","title":"Test of the Environment","text":"

Here\u2019s a very simple but weird test case:

from pushbox.src.pushbox import PushBox\nimport numpy as np\n\nenv = PushBox()\n\n# push forward\nfor i in range(5):\n    action = np.array([0.1,0,0])\n    env.step(action)\n\n# go around the box\naction = np.array([-0.1,0,0])\nenv.step(action)\naction = np.array([0,0,0.3])\nenv.step(action)\naction = np.array([1.0,0,0])\nenv.step(action)\naction = np.array([0,0.3,0])\nenv.step(action)\naction = np.array([0,0,-0.6])\nenv.step(action)\naction = np.array([0,-0.4,0])\nenv.step(action)\naction = np.array([0,0,0.4])\nenv.step(action)\n

You can create a test.py file for this, and run it in the project folder:

python test.py\n

The result should be like the gifs at the beginning.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#environment-with-triangular-meshes","title":"Environment with Triangular Meshes","text":"

In the previous environment, all the meshes are volume meshes, so the sphere, box, and table are all deformable. The ability of deformation for all meshes is generally not good (if you want three of them to be deformable, then you can skip the rest of the tutorial) and takes a long time to simulate. Thus in this section, considering the table is only a support base and the sphere is only an actuator, the table and the sphere can be rigid. Then we can set them as obstacles (a special type of mesh whose displacement is fully prescribed and need not be volumetric).

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#json-environment-setup_1","title":"Json Environment Setup","text":"

Now the mesh part only needs to load the box and the sphere and the table can be loaded as obstacles:

{\n\"geometry\": [{\n\"mesh\": \"pushbox/assets/data/vol_mesh/cube.msh\",\n\"transformation\": {\n\"translation\": [-0.65, 0.2, 0],\n\"scale\": 0.4\n},\n\"volume_selection\": 3,\n\"surface_selection\": 3,\n\"advanced\": {\n\"normalize_mesh\": false\n}\n}, {\n\"mesh\": \"pushbox/assets/data/surf_mesh/sphere.obj\",\n\"is_obstacle\": true,\n\"enabled\": true,\n\"transformation\": {\n\"translation\": [-1.0, 0.2, 0],\n\"scale\": 0.1\n},\n\"surface_selection\": 1000\n}, {\n\"mesh\": \"pushbox/assets/data/surf_mesh/cube_dense.obj\",\n\"is_obstacle\": true,\n\"enabled\": true,\n\"transformation\": {\n\"translation\": [0, -0.0051, 0],\n\"scale\": [4, 0.01, 4]\n},\n\"surface_selection\": 1001\n}]\n}\n

Note that the obstacles have no boundary conditions or material parameters (since they are already rigid) but only displacements. Also, there\u2019s no need for Dirichlet boundary conditions anymore since the sphere is controlled by its displacement field.

The json file can be found at pushbox.json.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#python-environment-development_1","title":"Python Environment Development","text":""},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#class-initialization_1","title":"Class Initialization","text":"

In the src folder, create a python file pushbox_with_obstacles.py. The __init__ function stays the same except for the JSON file path.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#take-the-action-from-the-user_1","title":"Take the action from the user","text":"
def set_boundary_conditions(self, action):\n    t0 = self.t0\n    t1 = t0 + self.dt\n    self.solver.update_obstacle_displacement(\n            int(0),\n            [\n                f\"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})\",\n                f\"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})\",\n                f\"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})\"\n            ]\n        )\n    self.cumulative_action += action  \n

Note that the obstacles have no ID fields, thus we can\u2019t update its displacement with its id but the order of the obstacles in the JSON file. The index starts from 0. The rest part remains the same.

To view the whole implementation of the environment with obstacles, please go to pushbox_with_obstacles.py.

"},{"location":"tutorials/sphere-pushing-box/sphere-pushing-box/#test-of-the-environment_1","title":"Test of the Environment","text":"

The test script remains the same except for the first import. Make sure to import PushBox from the correct file.

from pushbox.src.pushbox_with_obstacles import PushBox\n

The entire script can be viewed in test_with_obs.py.

This is the end of the tutorial. Enjoy!

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/","title":"Trajectory Optimization","text":"Author: Zizhou Huang, Date: Feb. 19, 2024

In this tutorial, we will demonstrate how to use polyfem to optimize the initial velocity of throwing a ball to match a given trajectory.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#prerequisites","title":"Prerequisites","text":"

The following items are necessary to complete this tutorial. To reproduce the experiment, you can feel free to use either the given mesh files or your own mesh.

  • Build PolyFEM
  • Download File: square.obj
  • Download File: circle.msh
  • Download File: barycenter-opt.json
  • Download File: barycenter.json
  • Download File: barycenter-target.json

The files can also be found at polyfem-data.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#build-polyfem","title":"Build PolyFEM","text":"

The instructions for building PolyFEM can be found here.

Then you can use it by

polyfem --help\n
"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#setting-up-the-optimization","title":"Setting up the Optimization","text":"

We will setup the optimization using PolyFEM\u2019s JSON interface. For more details, please refer to the JSON Input documentation.

We will only go over the JSON script for the optimization configuration, please refer to other tutorials for the JSON script for the simulation configuration.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#parameters","title":"Parameters","text":"
{\n\"parameters\": [\n{\n\"number\": 2,\n\"initial\": [4, 0]\n}\n]\n}\n

In parameters, we specify the dimension and initial guess of the variable to be optimized. Since we are going to optimize the initial velocity of a ball in 2D, the dimension is 2.

In more complex optimizations, where several types of parameters are optimized, the parameters can be a list of variables of different dimensions.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#states","title":"States","text":"
{\n\"states\": [\n{\n\"path\": \"barycenter.json\"\n},\n{\n\"path\": \"barycenter-target.json\"\n}\n]\n}\n

In states, we specify the path to the JSON files of simulations, they follow the same rules for the simulation JSON scripts. PolyFEM will create a number of simulators, one for each JSON file, whose parameters can be optimized. During the optimization, certain parameters in these configurations are optimized, but the optimized values will not overwrite the values in these JSON files. Each simulator gets an ID starting from 0, following the order in this list. The ID of simulators may be used in variable to simulation and functionals.

Here we have two simulators: The first one is the simulator being optimized, while the second one is a fixed simulation that generates a reference trajectory. These JSON files are only for initializing the simulators, so one can use the same path for multiple simulators if possible.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#variable-to-simulation","title":"Variable to Simulation","text":"
{\n\"variable_to_simulation\": [\n{\n\"type\": \"initial\",\n\"state\": 0,\n\"composition\": [{\n\"type\": \"append-values\",\n\"values\": [0, 0]\n},{\n\"type\": \"per-body-to-per-node\",\n\"state\": 0\n},{\n\"type\": \"append-const\",\n\"value\": 0,\n\"size\": 146,\n\"start\": 0\n}]\n}\n]\n}\n

In variable to simulation, we specify how the optimization variables in parameters control the simulation configurations. Since different types of parameters in a number of simulations can be controlled at the same time, the variable to simulation is a list, where each entry specifies the control of one type of parameter, e.g. initial condition, in one simulation. The type specifies the type of parameter in the simulation, and state points to the ID of the simulation (according to the order in states).

The initial condition parameter has a dimension of 2 * dim * n_basis, where dim is the dimension of the simulation (2 or 3), n_basis is the number of finite element basis in the simulation, because it consists of the initial displacement and velocity at every basis node. This allows the user to specify the initial condition not only as a rigid body transformation, but also as an arbitrary deformation, e.g. stretching and shearing.

In this tutorial, we only optimize the initial velocity of the ball, so we need to build a mapping, which we call composition in the JSON script, from the variable of size 2 to the full initial condition parameter of size 2 * dim * n_basis. The composition is a list of some pre-defined mappings, which will apply to the optimization variables in order, and the final output of the mappings will be assigned to the initial condition parameter.

There are two objects with different volume IDs, specified in barycenter.json and barycenter-target.json, and we only want to control the initial velocity of the ball, with volume ID 1. First, in append-values we append two zeros to the optimization variable, which represents the zero initial velocity of the floor. Second, in per-body-to-per-node we map the per-volume values to per-node, whose output has the dimension of dim * n_basis. Finally, in append-const we append more zeros to the start of the vector, to account for the zero initial displacement. Please refer to the opt-input-spec.json for the documentation of compositions.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#functionals","title":"Functionals","text":"
{\n\"functionals\": [\n{\n\"type\": \"transient_integral\",\n\"state\": 0,\n\"integral_type\": \"uniform\",\n\"static_objective\": {\n\"type\": \"center-target\",\n\"state\": 0,\n\"target_state\": 1,\n\"volume_selection\": [1]\n}\n}\n]\n}\n

The functionals specify the objective being minimized in the optimization. Please refer to objective-input-spec.json for the documentation of functionals.

Here we perform trajectory optimization on the ball, so the objective is the \\(L^2\\) difference between the two ball barycenters in the two simulations, integrated over time.

{\n\"type\": \"center-target\",\n\"state\": 0,\n\"target_state\": 1,\n\"volume_selection\": [1]\n}\n

The center-target computes the \\(L^2\\) difference between the solutions in state and target_state, integrated over the space with volume selection ID 1. We assume that both simulators have the same number of basis and dimension on the same volume selection (number of basis on other volume selections can be different).

{\n\"type\": \"transient_integral\",\n\"state\": 0,\n\"integral_type\": \"uniform\",\n\"static_objective\": { ... }\n}\n

The transient integral computes the integral over time of the static objective. The integral type and state specify the quadrature scheme and the simulator (the objective gets information like the number of time steps and dt from the simulator).

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#output","title":"Output","text":"
\"output\": {\n\"log\": {\n\"level\": 1\n}\n}\n

The output contains options regarding the logging of the optimization, here output/log/level specifies a log level of 1, corresponding to debugging, to log the energy and gradient during the optimization. The log level for simulations are specified in each state json, normally the simulation log level is set to info or warn so that we can focus more on the optimization logs.

"},{"location":"tutorials/trajectory-optimization/trajectory-optimization/#solver","title":"Solver","text":"
    \"solver\": {\n\"nonlinear\": {\n\"history_size\": 2,\n\"grad_norm\": 1e-4\n}\n}\n

The solver contains options of the nonlinear solver for the optimization. Since our forward problem and inverse problem share the same nonlinear solver code, the options of the inverse problem are the same as in the forward problem. However, since we can\u2019t compute the second order derivatives of the inverse problem, the Newton\u2019s method is not available here. By default the solver is L-BFGS, a quasi-Newton method using a limited amount of memory.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/","title":"Generate Vision Proprioception Data for Deformable Objects","text":"Author: Hanwen Zhao

In this tutorial, we will demonstrate how PolyFEM can be used to generate vision proprioception data for soft robotics study. The GitHub repo of this tutorial can be found here.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#prerequisites","title":"Prerequisites","text":"

The following, items are necessary to complete this tutorial. To replicate the experiment, readers can use either the given mesh files or their own mesh files.

In this tutorial, we assume that readers already have PolyFEM installed. If not, the PolyFEM install instruction can be found here.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#meshes","title":"Meshes","text":"

To decrease the computing complexity of this tutorial example, we assume that the target item is the only deformable solid and the environment is rigid and immovable.

Target Object Mesh (Radius: 0.5) Environment Mesh (Radius: 5.0)"},{"location":"tutorials/vision-proprioception/vision-proprioception/#problem-formulation","title":"Problem Formulation","text":"

This tutorial\u2019s objective is to launch a deformable target object into an environment mesh (i.e. a sphere rolling in a bowl) and gather the corresponding vision-based proprioceptive data (the internal view that shows deformation). Such data can be utilized to investigate the relationship between vision-based proprioception and kinematics of deformable objects.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#json-interface","title":"JSON Interface","text":"

PolyFEM provides an interface through JSON and Python. Here we demonstrate the JSON interface setup first. For more details, please refer to the JSON API.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#setup-similation","title":"Setup Similation","text":"

In this section, we will go over the JSON script that defines the simulation section by section. The complete JSON file can be found here.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#geometry","title":"Geometry","text":"

The \"geometry\" section specifies all geometry data required for simulation. For example, \"mesh\" defines the path to the volumetric mesh file. Then, the term \"transformation\" defines the operations that will be applied to the current mesh file. Next, volume selection specifies the mesh\u2019s identifier, allowing other parameters to be applied to specific meshes based on volume selection.

Furthermore, is obstacle permits the definition of a mesh as part of the environment. Obstacles are fully prescribed objects and as such, only their surface needs to be specified.

\"geometry\": [{\n\"mesh\": \"../data/sphere.msh\",\n\"transformation\": {\n\"translation\": [-0.4, 0.18, 0],\n\"scale\": 0.1\n},\n\"volume_selection\": 1\n}, {\n\"mesh\": \"../data/scene_bowl.msh\",\n\"is_obstacle\": true,\n\"enabled\": true,\n\"transformation\": {\n\"translation\": [0, 0, 0],\n\"scale\": 0.01\n}\n}]\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#mesh-related-configuration","title":"Mesh Related Configuration","text":"

In the previous section, we defined the simulation-required geometry. Following that, we must define their material properties and initial conditions. In the \"initial_conditions\" section, we assign the mesh with volume selection value 1 and an initial velocity of [2, 0, 2]. Next, in the materials section, we use NeoHookean for non-linear elasticity and define Young\u2019s modulus E, Poisson\u2019s ratio nu, and density rho.

Next, we define time step size as dt and time steps as the number of steps. enable in the contact determines whether collision detection and friction calculation are considered. And boundary conditions permit us to add gravity to the simulation with ease.

{\n\"initial_conditions\": {\n\"velocity\": [\n{\n\"id\": 1,\n\"value\": [2, 0, 2]\n}\n]\n},\n\"materials\": [\n{\n\"id\": 1,\n\"E\": 5000.0,\n\"nu\": 0.3,\n\"rho\": 100,\n\"type\": \"NeoHookean\"\n}\n],\n\"time\": {\n\"t0\": 0,\n\"dt\": 0.1,\n\"time_steps\": 100\n},\n\"contact\": {\n\"enabled\": true,\n\"dhat\": 0.0001,\n\"epsv\": 0.004,\n\"friction_coefficient\": 0.3\n},\n\"boundary_conditions\": {\n\"rhs\": [0, 9.81, 0]\n}\n}\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#simulation-related-configuration","title":"Simulation Related Configuration","text":"
{\n\"solver\": {\n\"linear\": {\n\"solver\": \"Eigen::CholmodSupernodalLLT\"\n},\n\"nonlinear\": {\n\"line_search\": {\n\"method\": \"backtracking\"\n},\n\"grad_norm\": 0.001,\n\"use_grad_norm\": false\n},\n\"contact\": {\n\"friction_iterations\": 20,\n\"CCD\": {\n\"broad_phase\": \"STQ\"\n}\n}\n},\n\"output\": {\n\"json\": \"results.json\",\n\"paraview\": {\n\"file_name\": \"output.pvd\",\n\"options\": {\n\"material\": true,\n\"body_ids\": true\n},\n\"vismesh_rel_area\": 10000000\n},\n\"advanced\": {\n\"save_solve_sequence_debug\": false,\n\"save_time_sequence\": true\n}\n}\n}\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#run-simulation","title":"Run Simulation","text":"

To run the simulation, the following command can be used where polyfem should be replaced with .../polyfem/build/PolyFEM_bin.

cd PolyFEM_Tutorial_SoRo\nmkdir output\npolyfem --json json/scene_bowl.json --output_dir output\n

The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#python-interface","title":"Python Interface","text":"

In addition, to the JSON files, PolyFEM also supports a Python interface through polyfem-python. More information can be found in the Python Documentation. Python interface not only allows to read configuration from JSON directly but also allows user to have more control during the simulation (eg. simulation stepping or change boundary conditions).

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#import-from-json","title":"Import from JSON","text":"

If the JSON file is available, we can simply import the configuration by reading the JSON file.

import polyfem as pf\n\nwith open('./scene_bowl.json') as f:\n    config = json.load(f)\nsolver = pf.Solver()\nsolver.set_settings(json.dumps(config))\nsolver.load_mesh_from_settings()\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#run-simulation-in-python","title":"Run Simulation in Python","text":"

Python interface provides a more flexible solution to simulate solving the time-dependent problem completely or interacting with the solver with steps.

# OPTION 1: solve the problem and extract the solution\nsolver.solve()\npts, tris, velocity = solver.get_sampled_solution()\n
# OPTION 2: solve the problem with time steping\nsolver.init_timestepping(t0, dt)\nfor i in range(timesteps):\n    solver.step_in_time(t, dt, i)\n    # interact with intermediate result\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#visualize-simulation-results","title":"Visualize Simulation Results","text":"

To visualize the simulation sequential results in VTU format, we can use ParaView, an open-source, multi-platform data analysis and visualization application.

To view the results, please follow the instructions below. ![]paraview.png) * Step 1: File - Open, select sequence group file step.vtu or step.vtm. * Step 2: Click Apply under the tab Properties located on the left side of the GUI. * Step 3: Click on Wrap By Vector to apply the displacement to the objects. This function can be found in the top menu bar. * Step 4: Click again Apply under the tab Properties. * Step 5: Now, the Play button can be used to view the time sequence results.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#bouns-blender-rendering","title":"Bouns: Blender Rendering","text":"

Blender is a free and open-source 3D computer graphics software toolset that can be used for animation, rendering, and video games. Here, we are using Blender to create vision propriocetions (internal views). First, we need to convert the VTU outputs back to mesh files that represent the target object at each time step. Then, we can colorize the target object using vertex coloring and render the final image with the Blender camera instance.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#convert-vtu-to-obj","title":"Convert VTU to OBJ","text":"

To convert VTU to OBJ format, we can use the MeshIO library that is available in Python. A minimum example is shown below.

import meshio\nm = meshio.read('step.vtu')\nm.write('step.obj')\n
"},{"location":"tutorials/vision-proprioception/vision-proprioception/#colorize-the-obj-files","title":"Colorize the OBJ Files","text":"

There are many different ways to colorize a mesh object. For example, coloring through mesh vertices, mesh faces, or a UV map. Here we demonstrate a simple way, which is to color the mesh using its vertices. The OBJ extension format support RGB floating values append to the vertex coordinates.

"},{"location":"tutorials/vision-proprioception/vision-proprioception/#blender-rendering-using-python","title":"Blender Rendering using Python","text":"

In the example below, the Python script controls the rendering process. First, it loads colorized mesh files and adds light and camera to the pre-calculated position and orientation (based on the vertice coordinates and surface normal). It then renders the image using vertex color.

In this example, the camera is attched to one of the triangle in the surface mesh OBJ. And the camera is pointing at the center of the sphere, the rendering results are shown below.

blender_render.py:

import os, sys\nimport math\nimport bpy\n\nos.chdir(sys.path[0])\n\nargv_offset = 0\n\n# IMPORT MESH\nmesh = bpy.ops.import_mesh.ply(filepath=sys.argv[6+argv_offset])\nmesh = bpy.context.active_object\nbpy.ops.object.mode_set(mode = 'VERTEX_PAINT')\n\n# ADD LIGHT\nlight_data = bpy.data.lights.new('light', type='POINT')\nlight = bpy.data.objects.new('light', light_data)\nlight.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])]\nbpy.context.collection.objects.link(light)\n\n# ADD CAMERA\ncam_data = bpy.data.cameras.new('camera')\ncam = bpy.data.objects.new('camera', cam_data)\ncam.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])]\ncam.rotation_euler = [float(sys.argv[11+argv_offset]), float(sys.argv[12+argv_offset]), float(sys.argv[13+argv_offset])]\ncam.data.lens = 14\nbpy.context.collection.objects.link(cam)\n\n# ADD MATERIAL\nmat = bpy.data.materials.new(name='Material')\nmat.use_nodes=True\n# create two shortcuts for the nodes we need to connect\n# Principled BSDF\nps = mat.node_tree.nodes.get('Principled BSDF')\n# Vertex Color\nvc = mat.node_tree.nodes.new(\"ShaderNodeVertexColor\")\nvc.location = (-300, 200)\nvc.label = 'vc'\n# connect the nodes\nmat.node_tree.links.new(vc.outputs[0], ps.inputs[0])\n# apply the material\nmesh.data.materials.append(mat)\n\n# CREATE A SCENE\nscene = bpy.context.scene\nscene.camera = cam\nscene.render.image_settings.file_format = 'PNG'\nscene.render.resolution_x = 512\nscene.render.resolution_y = 512\nscene.render.resolution_percentage = 100\nscene.render.filepath = sys.argv[7+argv_offset]\n\n# RENDER\nbpy.ops.render.render(write_still=1)\n

The rendering can be processed through Blender GUI or bash command as shown below.

blender blender_project.blend -b --python blender_render.py -- target_mesh_path output_path camera_position_x camera_position_y camera_position_z camera_orientation_x camera_orientation_y camera_orientation_z\n
"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..c70d6413 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,148 @@ + + + + http://polyfem.github.io/polyfem/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/_json_spec/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/cxx_index/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/json/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/json_defaults_and_spec/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/library/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/license/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/polyfempy_doc/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/polysolve/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/python/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/python_examples/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/contact/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/formulations/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/miscellaneous/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/problems/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/solvers/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/details/time_integrators/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tools/exporter/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tools/plot_to_md/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/getting_started/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/ipc_quick_start_guide/rotating-obstacle/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/ipc_quick_start_guide/run_all/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/multi-material/multi-material/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/screw/screw/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/sling-shot/sling-shot/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/sphere-pushing-box/sphere-pushing-box/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/trajectory-optimization/trajectory-optimization/ + 2024-06-14 + daily + + + http://polyfem.github.io/polyfem/tutorials/vision-proprioception/vision-proprioception/ + 2024-06-14 + daily + + \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz new file mode 100644 index 00000000..b14b0d8b Binary files /dev/null and b/sitemap.xml.gz differ diff --git a/theme/404.html b/theme/404.html new file mode 100644 index 00000000..30bb0562 --- /dev/null +++ b/theme/404.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} + +{% block content %} +

404: File not found!

+{% endblock %} \ No newline at end of file diff --git a/theme/extra.css b/theme/extra.css new file mode 100644 index 00000000..25fdd928 --- /dev/null +++ b/theme/extra.css @@ -0,0 +1,20 @@ +:root { + --md-admonition-icon--json-spec: url('data:image/svg+xml;charset=utf-8,'); +} + +.md-typeset .admonition.json-spec, +.md-typeset details.json-spec { + border-color: rgb(76, 174, 79); +} + +.md-typeset .json-spec>.admonition-title, +.md-typeset .json-spec>summary { + background-color: rgba(76, 174, 79, 0.1); +} + +.md-typeset .json-spec>.admonition-title::before, +.md-typeset .json-spec>summary::before { + background-color: rgb(76, 174, 79); + -webkit-mask-image: var(--md-admonition-icon--json-spec); + mask-image: var(--md-admonition-icon--json-spec); +} \ No newline at end of file diff --git a/theme/main.html b/theme/main.html new file mode 100644 index 00000000..6baffaca --- /dev/null +++ b/theme/main.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} + +{% block content %} +{% if page.nb_url %} + + {% include ".icons/material/download.svg" %} + +{% endif %} + +{{ super() }} +{% endblock content %} \ No newline at end of file diff --git a/theme/no_toc.html b/theme/no_toc.html new file mode 100644 index 00000000..b562fce7 --- /dev/null +++ b/theme/no_toc.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} + +{{ super() }} +{% endblock content %} \ No newline at end of file diff --git a/tools/exporter/exporter.py b/tools/exporter/exporter.py new file mode 100644 index 00000000..e684ce88 --- /dev/null +++ b/tools/exporter/exporter.py @@ -0,0 +1,165 @@ +import pydoc +import polyfempy +import re +import queue +import tempfile + +packages = queue.Queue() +packages.put("polyfempy") + +docs = "" + + + +while not packages.empty(): + package = packages.get() + + with tempfile.NamedTemporaryFile(suffix=".md") as tmp_file: + with open(tmp_file.name, "w") as f: + pydoc.doc(package,output=f) + + with open(tmp_file.name, "r") as f: + lines = f.read() + + if "PACKAGE CONTENTS" in lines: + process = False + + for line in iter(lines.splitlines()): + line = line.strip() + + if "PACKAGE CONTENTS" in line: + process = True + continue + + if "FILE" in line: + break + + if not process: + continue + if len(line) <= 0: + continue + + packages.put(package + "." + line) + + continue + if "CLASSES" in lines: + process = False + + + for line in iter(lines.splitlines()): + line = line.strip() + + if "CLASSES" in line: + process = True + continue + + if "FILE" in line: + break + + if not process: + continue + if len(line) <= 0: + continue + + if "class " in line: + break + if "builtins.object" in line: + continue + + packages.put(package + "." + line) + + continue + + lines = lines.replace("pybind11_builtins.pybind11_object", "") + lines = lines.replace("builtins.object", "") + lines = lines.replace("|", "") + lines = lines.replace("class ", "## class ") + lines = lines.replace("self: polyfempy.polyfempy.Solver, ", "") + lines = lines.replace("self: polyfempy.polyfempy.Solver", "") + lines = lines.replace("self, ", "") + lines = lines.replace("self", "") + lines = lines.replace(" -> None", "") + lines = lines.replace("[float64[m, n]]", "") + lines = lines.replace("[int32[m, n]]", "") + lines = lines.replace("numpy.ndarray", "array") + + tmp = "" + + skipping = False + next_mark = False + skip_next = False + + for line in iter(lines.splitlines()): + line = line.strip() + + if skip_next: + skip_next = False + continue + if len(line) <= 0: + continue + + if "Python Library Documentation" in line: + continue + + if "Methods inherited" in line: + continue + + if "Overloaded function." in line: + continue + + if "Method resolution order" in line: + skipping = True + + if "Methods defined here" in line: + skipping = False + continue + + if "Data and other attributes defi" in line: + continue + + if "Data descriptors defined" in line: + continue + + if "-----------------------------" in line: + continue + + if "__init__" not in line and re.match(r"__\w+", line): + skip_next = True + continue + if "params()" in line or "get_pde(pde)" in line or "get_problem(problem)" in line or "get_problem()" in line or "name()" in line or "__init__()" in line or "__init__(/, *args, **kwargs)" in line: + skip_next = True + continue + + if skipping: + continue + + if re.match(r'\w+\(\.\.\.\)', line): + next_mark = True + continue + + if "class" in line: + line = line.replace("()", "") + + if re.match(r"\d\. .+", line): + line = re.sub(r"\d\. ", "", line) + line.strip() + next_mark = True + + if next_mark or re.match(r'\w+\(.*\)', line): + next_mark = False + xxx = line + if "__init__" in line: + line = line.replace("__init__", "init") + line = "### " + line[0:line.find('(')] +"\n" + line += "`" + xxx + "`" + + if "## class " in line: + line = line.replace(package + " = ", "") + + tmp += line + "\n\n" + + docs += tmp + "\n\n\n" + # break + +with open("polyfempy_doc.md", "w") as f: + f.write(docs) diff --git a/tools/exporter/index.html b/tools/exporter/index.html new file mode 100644 index 00000000..25d73a27 --- /dev/null +++ b/tools/exporter/index.html @@ -0,0 +1,2507 @@ + + + + + + + + + + + + + + + + + + + + + + Exporter - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + +

Exporter

+ + + + + + + + + +
+
+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/plot_to_md/index.html b/tools/plot_to_md/index.html new file mode 100644 index 00000000..9729ff28 --- /dev/null +++ b/tools/plot_to_md/index.html @@ -0,0 +1,2163 @@ + + + + + + + + + + + + + + + + + + + + + + Plot to md - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + +

Plot to md

+ + + + + + + + + +
+
+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/plot_to_md/plot_to_md.py b/tools/plot_to_md/plot_to_md.py new file mode 100644 index 00000000..6a735bef --- /dev/null +++ b/tools/plot_to_md/plot_to_md.py @@ -0,0 +1,17 @@ +import meshplot + +first = True +meshplot.website() + +def mp_to_md(self): + global first + if first: + first = False + res = self.to_html(imports=True, html_frame=False) + else: + res = self.to_html(imports=False, html_frame=False) + + return res + + +get_ipython().display_formatter.formatters["text/html"].for_type(meshplot.Viewer, mp_to_md) diff --git a/tutorials/getting_started/getting_started.md b/tutorials/getting_started/getting_started.md new file mode 100644 index 00000000..2c638e9d --- /dev/null +++ b/tutorials/getting_started/getting_started.md @@ -0,0 +1,247 @@ +# Getting Started + +## A First-Example: Solving the Laplacian on a Plate-Hole Mesh + +[Here](../img/plate_hole.obj) you can find the *plate with hole* mesh used in this tutorial. + +| Mesh | Solution | +| --- | --- | +| ![Load mesh](../img/plate_hole_mesh.png) | ![Load mesh](../img/plate_hole_solution.png) | + +To setup and run this simulation create a JSON file (for example, `run.json`) containing the following: + +```json +{ + "geometry": { + "advanced": { + "normalize_mesh": true + }, + "mesh": "plate_hole.obj", + "surface_selection": { + "threshold": 1e-07 + } + }, + + "materials": { + "type": "Laplacian" + }, + + "output": { + "json": "stats.json", + "paraview": { + "file_name": "" + } + }, + + "preset_problem": { + "type": "Franke" + }, + + "solver": { + "linear": { + "solver": "Eigen::SparseLU" + } + } +} +``` + +Then run `PolyFEM_bin --json run.json`. + +Refer to the [JSON API](../../json) for a the full description of JSON parameters. + +Boundary Conditions +------------------- + +PolyFEM uses boundary tags to mark boundary primitives (edges in 2D and faces in 3D). By default: + +- in 2D all edges whose barycenter is close up to 1e-7 to the left side of the bounding box get the tag 1, the right side gets 3, bottom 2, and top 4. Any other boundary gets 7. +- in 3D the threshold is a bit larger (1e-2) and x-direction gets 1, 3, y-direction gets 2, 4, and z-direction gets 5, 6. Any other boundary gets 7. + +You can also specify a file containing a list of integers per each edge/face of the mesh indicating the tag in the JSON. + +If you want to run the *real* plate-with-hole problem, set the correct Lamé constants in `"materials"`, and specify the proper boundary conditions in `"boundary_conditions"`. For this example, we want Neumann boundary condition of `[100, 0]` (a force of 100 in $x$) applied to the whole right side (pulling), so in the `"neumann_boundary"` array of `"boundary_conditions"`, we add an entry with `"id": 3` and `"value": [100, 0]`. +For the two Dirichlet, it is a bit more complicated because we want reflective boundary conditions, that is we want to fix only one of the two coordinates. For instance, the right part of the mesh (`"id": 1`) needs to be fixed in $x$ (or equivalent can move only in $y$-direction). To do so we add an entry to the `"dirichlet_boundary"` array with `"id": 1` and `"value": [0, 0]`, that is zero displacements, and specify which `"dimension"` these boundaries need to be applied, in this case, only the $x$-direction so `"dimension"` gets the value `[true, false]`. Similarly, the top part (`"id": 4`) gets `"dimension": [false, true]`. + + +```json +{ + "materials": { + "type": "LinearElasticity", + "E": 210000, + "nu": 0.3 + }, + + "boundary_conditions": { + "neumann_boundary": [{ + "id": 3, + "value": [100, 0] + }], + + "dirichlet_boundary": [{ + "id": 1, + "value": [0.0, 0.0], + "dimension": [true, false] + }, { + "id": 4, + "dimension": [false, true], + "value": [0.0, 0.0] + }] + } +} +``` + +### Spatially Varying Boundary Conditions + +The specified value for boundary conditions can also contain expressions as strings depending on `x`,`y`, and `z`. PolyFEM will evaluate these expressions on the edge/face. For this, we use the [TinyExpr](https://github.com/codeplea/tinyexpr) library. + +In addition to [TinyExpr's built-in functions](https://github.com/codeplea/tinyexpr#functions-supported), we define some useful utility functions including: + +* `min(a, b)`: minimum of two values +* `max(a, b)`: maximum of two values +* `if(cond, a, b)`: if `cond` $\ge$ 0, return `a`, otherwise return `b` +* `sign(x)`: 1 if $x > 0$, 0 if $x == 0$, and -1 if $x < 0$ +* `deg2rad(d)`: convert degrees to radians +* `rotate_2D_x(x, y, theta)`: given a value for `x`, `y`, and `theta`, compute the *x* component of a 2D rotation of `theta` radians + * definition: $x\cos(\theta) - y\sin(\theta)$ +* `rotate_2D_y(x, y, theta)`: given a value for `x`, `y`, and `theta`, compute the *y* component of a 2D rotation of `theta` radians + * definition: $x\sin(\theta) + y\cos(\theta)$ +* `smooth_abs(x, k)`: a smooth approximation to `abs(x)` + * definition: $\tanh(kx)x$ + +### BC Setter App + +Since creating the file with association from boundary to ID is complicated, we also provide an application `bc_setter` to interactively *color* faces of 3D meshes (or edges of 2D meshes) and associate tags. + +By *shift*-clicking you can color coplanar faces to assign an ID (*command* or *control*-click colors only one face). The UI also allows specifying the three values (for scalar problem only one) to assign to that boundary condition and choose between Dirichlet and Neumann. + +On save, it will produce the `.txt` file with the tags to be used in the `"surface_selection"` JSON field and a JSON file to set the `"boundary_conditions"`. + +![bc_setter](../img/bc_setter.png) + +Time-Dependent Simulation +------------------------- + +To enable time-dependent simulation add +``` json +"time": { + "tend": 1, + "dt": 0.1 +} +``` +to the root of the JSON. The duration of the simulation is specified as `"tend"` and the number of time steps can either be set directly using `"time_steps"` or by specifying the time step size `"dt"` (`"dt"` has priority over `"time_steps"`). + +You can also specify the time integration method using +```json +"time": { + "integrator": "ImplicitEuler" +} +``` +By default it uses `"ImplicitEuler"`, and a complete list of options can be found [here](../../details/time_integrators) along with details about other time parameters. + +When doing time-dependent simulation PolyFEM will generate a sequence of VTU files (one file per time step) and a [PVD](https://www.paraview.org/Wiki/ParaView/Data_formats#PVD_File_Format) file of the animation that can be directly viewed in [ParaView](https://www.paraview.org/). You can change the name of this PVD file + +### Time-Dependent Boundary Conditions + +Enabling time-dependent simulation also enables the ability to use the current time to design time-dependent boundary conditions. To define time-dependent boundary conditions you can use the variable `t` in an expression value. For example, +```json +"dirichlet_boundary": [{ + "id": 1, + "value": ["t", 0, 0] +}] +``` +defines a boundary condition that linearly increases in the x component as time progresses. An example use case for this would be in an elasticity problem to move the boundary over time (remember in this case the value expresses the displacement, not the position). + +Selections, Multi-material, and Collisions +------------------------------------------ + +![Sphere-mat](../img/sphere-mat.png) + +PolyFEM supports multi-material and contact. + +For example, here we show how to simulate a sphere of radius 0.5 m centered at $[0,1,0]$ with material $E=10^8, \nu=0.4, \rho=2000$ falling on thin soft mat ($E=10^6, \nu=0.4, \rho=1000$) we need to set the body id. + +First, we need to specify the geometry and assign ids to the surface and volume. +To do this add this to the main JSON file: + +```json +"geometry": [{ + "mesh": "../../../meshes/3D/simple/sphere/sphere1K.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "volume_selection": 1 +}, { + "mesh": "../../../meshes/3D/simple/mat/mat40x40.msh", + "transformation": { + "scale": 2 + }, + "volume_selection": 2, + "surface_selection": [{ + "id": 1, + "axis": "-x", + "position": -1 + }, { + "id": 2, + "axis": "x", + "position": 1 + }] +}], +``` + +The sphere will be given a volume ID of 1 and the mat will get ID 2. An axis-plane selection is used can be used to set the surface IDs. Here the faces with a barycenter left of $x=-1$ are given a surface ID of 1 and the faces with barycenters right of $x=1$ will be given an ID of 2. + +Next, we need to associate materials and boundary conditions with these IDs. We set the boundary conditions by adding the following to the JSON: +```json +"materials": [{ + "id": 1, + "E": 1e8, + "nu": 0.4, + "rho": 2000, + "type": "NeoHookean" +}, { + "id": 2, + "E": 1e6, + "nu": 0.4, + "rho": 1000, + "type": "NeoHookean" +}] +``` +This sets the sphere to a stiff NeoHooean material ($E=10^8, \nu=0.4, \rho=2000$) and the mat to a softer NeoHookean material ($E=10^6, \nu=0.4, \rho=1000$). + +We specify boundary conditions and `"rhs"` (for the gravity) as: +```json +"boundary_conditions": { + "rhs": [0, 9.81, 0], + "dirichlet_boundary": [{ + "id": 1, + "value": ["-min(t,0.28)", 0, 0] + }, { + "id": 2, + "value": ["min(t,0.28)", 0, 0] + }] +} +``` +Here the mat is given a Dirichlet boundary condition for the left selection to stretch it to the left and the right selection to stretch it to the right. + +Since this is a contact problem we need to enable collision, **no other thing is needed**: `"contact": {"enabled": true}`, and run the simulation (the complete JSON script can be found [here](https://github.com/polyfem/polyfem-data/blob/397d67ebab70fdf66c2303bf0777f2da07b186d8/contact/examples/3D/large-ratios/sphere-mat.json)). + +The final results look like these where we sliced the scene in half to show the internal stresses. +![Sphere-mat](../img/sphere-mat-res.png) + +Output +------ + +The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence. + +### Visualizing Results using ParaView + +Here are some tips for working with the output in ParaView. + +![Sphere-mat](../img/paraview@0.5x.png) + +1. Warp: if the solution is displacements, apply the displacements to the rest mesh +2. Filter: filter elements by a field (here by `body_ids` to set the opacity of the box separately from the Octocat) +3. Apply settings: apply the setting changes (there is a ParaView setting to automatically do this) +4. Play: play the time sequence +5. Input fields: select the field to visualize +6. Rescale over all timesteps: rescale the colors to fit the range of all values over time diff --git a/tutorials/getting_started/index.html b/tutorials/getting_started/index.html new file mode 100644 index 00000000..e8a7df79 --- /dev/null +++ b/tutorials/getting_started/index.html @@ -0,0 +1,1437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Getting Started - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Getting Started

+

A First-Example: Solving the Laplacian on a Plate-Hole Mesh

+

Here you can find the plate with hole mesh used in this tutorial.

+ + + + + + + + + + + + + +
MeshSolution
Load meshLoad mesh
+

To setup and run this simulation create a JSON file (for example, run.json) containing the following:

+
{
+    "geometry": {
+        "advanced": {
+            "normalize_mesh": true
+        },
+        "mesh": "plate_hole.obj",
+        "surface_selection": {
+            "threshold": 1e-07
+        }
+    },
+
+    "materials": {
+        "type": "Laplacian"
+    },
+
+    "output": {
+        "json": "stats.json",
+        "paraview": {
+            "file_name": "<result.vtu>"
+        }
+    },
+
+    "preset_problem": {
+        "type": "Franke"
+    },
+
+    "solver": {
+        "linear": {
+            "solver": "Eigen::SparseLU"
+        }
+    }
+}
+
+

Then run PolyFEM_bin --json run.json.

+

Refer to the JSON API for a the full description of JSON parameters.

+

Boundary Conditions

+

PolyFEM uses boundary tags to mark boundary primitives (edges in 2D and faces in 3D). By default:

+
    +
  • in 2D all edges whose barycenter is close up to 1e-7 to the left side of the bounding box get the tag 1, the right side gets 3, bottom 2, and top 4. Any other boundary gets 7.
  • +
  • in 3D the threshold is a bit larger (1e-2) and x-direction gets 1, 3, y-direction gets 2, 4, and z-direction gets 5, 6. Any other boundary gets 7.
  • +
+

You can also specify a file containing a list of integers per each edge/face of the mesh indicating the tag in the JSON.

+

If you want to run the real plate-with-hole problem, set the correct Lamé constants in "materials", and specify the proper boundary conditions in "boundary_conditions". For this example, we want Neumann boundary condition of [100, 0] (a force of 100 in \(x\)) applied to the whole right side (pulling), so in the "neumann_boundary" array of "boundary_conditions", we add an entry with "id": 3 and "value": [100, 0]. +For the two Dirichlet, it is a bit more complicated because we want reflective boundary conditions, that is we want to fix only one of the two coordinates. For instance, the right part of the mesh ("id": 1) needs to be fixed in \(x\) (or equivalent can move only in \(y\)-direction). To do so we add an entry to the "dirichlet_boundary" array with "id": 1 and "value": [0, 0], that is zero displacements, and specify which "dimension" these boundaries need to be applied, in this case, only the \(x\)-direction so "dimension" gets the value [true, false]. Similarly, the top part ("id": 4) gets "dimension": [false, true].

+
{
+    "materials": {
+        "type": "LinearElasticity",
+        "E": 210000,
+        "nu": 0.3
+    },
+
+    "boundary_conditions": {
+        "neumann_boundary": [{
+            "id": 3,
+            "value": [100, 0]
+        }],
+
+        "dirichlet_boundary": [{
+            "id": 1,
+            "value": [0.0, 0.0],
+            "dimension": [true, false]
+        }, {
+            "id": 4,
+            "dimension": [false, true],
+            "value": [0.0, 0.0]
+        }]
+    }
+}
+
+

Spatially Varying Boundary Conditions

+

The specified value for boundary conditions can also contain expressions as strings depending on x,y, and z. PolyFEM will evaluate these expressions on the edge/face. For this, we use the TinyExpr library.

+

In addition to TinyExpr’s built-in functions, we define some useful utility functions including:

+
    +
  • min(a, b): minimum of two values
  • +
  • max(a, b): maximum of two values
  • +
  • if(cond, a, b): if cond \(\ge\) 0, return a, otherwise return b
  • +
  • sign(x): 1 if \(x > 0\), 0 if \(x == 0\), and -1 if \(x < 0\)
  • +
  • deg2rad(d): convert degrees to radians
  • +
  • rotate_2D_x(x, y, theta): given a value for x, y, and theta, compute the x component of a 2D rotation of theta radians
      +
    • definition: \(x\cos(\theta) - y\sin(\theta)\)
    • +
    +
  • +
  • rotate_2D_y(x, y, theta): given a value for x, y, and theta, compute the y component of a 2D rotation of theta radians
      +
    • definition: \(x\sin(\theta) + y\cos(\theta)\)
    • +
    +
  • +
  • smooth_abs(x, k): a smooth approximation to abs(x)
      +
    • definition: \(\tanh(kx)x\)
    • +
    +
  • +
+

BC Setter App

+

Since creating the file with association from boundary to ID is complicated, we also provide an application bc_setter to interactively color faces of 3D meshes (or edges of 2D meshes) and associate tags.

+

By shift-clicking you can color coplanar faces to assign an ID (command or control-click colors only one face). The UI also allows specifying the three values (for scalar problem only one) to assign to that boundary condition and choose between Dirichlet and Neumann.

+

On save, it will produce the .txt file with the tags to be used in the "surface_selection" JSON field and a JSON file to set the "boundary_conditions".

+

bc_setter

+

Time-Dependent Simulation

+

To enable time-dependent simulation add +

"time": {
+    "tend": 1,
+    "dt": 0.1
+}
+
+to the root of the JSON. The duration of the simulation is specified as "tend" and the number of time steps can either be set directly using "time_steps" or by specifying the time step size "dt" ("dt" has priority over "time_steps").

+

You can also specify the time integration method using +

"time": {
+    "integrator": "ImplicitEuler"
+}
+
+By default it uses "ImplicitEuler", and a complete list of options can be found here along with details about other time parameters.

+

When doing time-dependent simulation PolyFEM will generate a sequence of VTU files (one file per time step) and a PVD file of the animation that can be directly viewed in ParaView. You can change the name of this PVD file

+

Time-Dependent Boundary Conditions

+

Enabling time-dependent simulation also enables the ability to use the current time to design time-dependent boundary conditions. To define time-dependent boundary conditions you can use the variable t in an expression value. For example, +

"dirichlet_boundary": [{
+    "id": 1,
+    "value": ["t", 0, 0]
+}]
+
+defines a boundary condition that linearly increases in the x component as time progresses. An example use case for this would be in an elasticity problem to move the boundary over time (remember in this case the value expresses the displacement, not the position).

+

Selections, Multi-material, and Collisions

+

Sphere-mat

+

PolyFEM supports multi-material and contact.

+

For example, here we show how to simulate a sphere of radius 0.5 m centered at \([0,1,0]\) with material \(E=10^8, \nu=0.4, \rho=2000\) falling on thin soft mat (\(E=10^6, \nu=0.4, \rho=1000\)) we need to set the body id.

+

First, we need to specify the geometry and assign ids to the surface and volume. +To do this add this to the main JSON file:

+
"geometry": [{
+    "mesh": "../../../meshes/3D/simple/sphere/sphere1K.msh",
+    "transformation": {
+        "translation": [0, 1, 0]
+    },
+    "volume_selection": 1
+}, {
+    "mesh": "../../../meshes/3D/simple/mat/mat40x40.msh",
+    "transformation": {
+        "scale": 2
+    },
+    "volume_selection": 2,
+    "surface_selection": [{
+        "id": 1,
+        "axis": "-x",
+        "position": -1
+    }, {
+        "id": 2,
+        "axis": "x",
+        "position": 1
+    }]
+}],
+
+

The sphere will be given a volume ID of 1 and the mat will get ID 2. An axis-plane selection is used can be used to set the surface IDs. Here the faces with a barycenter left of \(x=-1\) are given a surface ID of 1 and the faces with barycenters right of \(x=1\) will be given an ID of 2.

+

Next, we need to associate materials and boundary conditions with these IDs. We set the boundary conditions by adding the following to the JSON: +

"materials": [{
+    "id": 1,
+    "E": 1e8,
+    "nu": 0.4,
+    "rho": 2000,
+    "type": "NeoHookean"
+}, {
+    "id": 2,
+    "E": 1e6,
+    "nu": 0.4,
+    "rho": 1000,
+    "type": "NeoHookean"
+}]
+
+This sets the sphere to a stiff NeoHooean material (\(E=10^8, \nu=0.4, \rho=2000\)) and the mat to a softer NeoHookean material (\(E=10^6, \nu=0.4, \rho=1000\)).

+

We specify boundary conditions and "rhs" (for the gravity) as: +

"boundary_conditions": {
+    "rhs": [0, 9.81, 0],
+    "dirichlet_boundary": [{
+        "id": 1,
+        "value": ["-min(t,0.28)", 0, 0]
+    }, {
+        "id": 2,
+        "value": ["min(t,0.28)", 0, 0]
+    }]
+}
+
+Here the mat is given a Dirichlet boundary condition for the left selection to stretch it to the left and the right selection to stretch it to the right.

+

Since this is a contact problem we need to enable collision, no other thing is needed: "contact": {"enabled": true}, and run the simulation (the complete JSON script can be found here).

+

The final results look like these where we sliced the scene in half to show the internal stresses. +Sphere-mat

+

Output

+

The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence.

+

Visualizing Results using ParaView

+

Here are some tips for working with the output in ParaView.

+

Sphere-mat

+
    +
  1. Warp: if the solution is displacements, apply the displacements to the rest mesh
  2. +
  3. Filter: filter elements by a field (here by body_ids to set the opacity of the box separately from the Octocat)
  4. +
  5. Apply settings: apply the setting changes (there is a ParaView setting to automatically do this)
  6. +
  7. Play: play the time sequence
  8. +
  9. Input fields: select the field to visualize
  10. +
  11. Rescale over all timesteps: rescale the colors to fit the range of all values over time
  12. +
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/WarpByVector.png b/tutorials/ipc_quick_start_guide/WarpByVector.png new file mode 100644 index 00000000..a1ab6dd1 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/WarpByVector.png differ diff --git a/tutorials/ipc_quick_start_guide/input/2-cubes-falling.json b/tutorials/ipc_quick_start_guide/input/2-cubes-falling.json new file mode 100644 index 00000000..e397c4c1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/2-cubes-falling.json @@ -0,0 +1,22 @@ +{ + "common": "ipc-defaults.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "volume_selection": 2 + }, { + "mesh": "plane.obj", + "is_obstacle": true + }], + "contact": { + "friction_coefficient": 0.1 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/backwards-euler.json b/tutorials/ipc_quick_start_guide/input/backwards-euler.json new file mode 100644 index 00000000..71cc7146 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/backwards-euler.json @@ -0,0 +1,10 @@ +{ + "common": "stiffer.json", + "time": { + "dt": 0.005, + "integrator": "ImplicitEuler" + }, + "contact": { + "friction_coefficient": 0 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/cube-hex.msh b/tutorials/ipc_quick_start_guide/input/cube-hex.msh new file mode 100644 index 00000000..0b445bfe --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/cube-hex.msh @@ -0,0 +1,18 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +8 +1 -0.5 -0.5 -0.5 +2 0.5 -0.5 -0.5 +3 0.5 0.5 -0.5 +4 -0.5 0.5 -0.5 +5 -0.5 -0.5 0.5 +6 0.5 -0.5 0.5 +7 0.5 0.5 0.5 +8 -0.5 0.5 0.5 +$EndNodes +$Elements +1 +1 5 2 0 0 1 2 3 4 5 6 7 8 +$EndElements diff --git a/tutorials/ipc_quick_start_guide/input/cube.msh b/tutorials/ipc_quick_start_guide/input/cube.msh new file mode 100644 index 00000000..c1c4c3f7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/cube.msh @@ -0,0 +1,33 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Nodes +1 8 1 8 +3 0 0 8 +1 +2 +3 +4 +5 +6 +7 +8 +-0.5 -0.5 -0.5 +0.5 -0.5 -0.5 +0.5 -0.5 0.5 +-0.5 -0.5 0.5 +-0.5 0.5 -0.5 +0.5 0.5 -0.5 +0.5 0.5 0.5 +-0.5 0.5 0.5 +$EndNodes +$Elements +1 6 1 6 +3 0 4 6 +1 1 5 7 6 +2 4 7 3 1 +3 1 5 8 7 +4 4 7 1 8 +5 3 1 7 2 +6 7 1 6 2 +$EndElements diff --git a/tutorials/ipc_quick_start_guide/input/cube.obj b/tutorials/ipc_quick_start_guide/input/cube.obj new file mode 100644 index 00000000..a34c4f0a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/cube.obj @@ -0,0 +1,20 @@ +v -0.5 -0.5 -0.5 +v 0.5 -0.5 -0.5 +v 0.5 -0.5 0.5 +v -0.5 -0.5 0.5 +v -0.5 0.5 -0.5 +v 0.5 0.5 -0.5 +v 0.5 0.5 0.5 +v -0.5 0.5 0.5 +f 1 2 3 +f 1 3 4 +f 1 5 6 +f 1 6 2 +f 2 6 7 +f 2 7 3 +f 4 3 7 +f 4 7 8 +f 1 8 5 +f 1 4 8 +f 5 8 7 +f 5 7 6 \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/dirichlet-bcs.json b/tutorials/ipc_quick_start_guide/input/dirichlet-bcs.json new file mode 100644 index 00000000..7ba05bce --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/dirichlet-bcs.json @@ -0,0 +1,12 @@ +{ + "common": "point-selection.json", + "boundary_conditions": { + "dirichlet_boundary": [{ + "id": 1, + "value": ["-0.2 * t", 0, "-0.2 * t"] + }, { + "id": 2, + "value": ["0.2 * t", 0, "0.2 * t"] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/heavy-top.json b/tutorials/ipc_quick_start_guide/input/heavy-top.json new file mode 100644 index 00000000..6cad83de --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/heavy-top.json @@ -0,0 +1,16 @@ +{ + "common": "2-cubes-falling.json", + "materials": [{ + "id": 1, + "type": "NeoHookean", + "E": 1e8, + "nu": 0.4, + "rho": 3000 + }, { + "id": 2, + "type": "NeoHookean", + "E": 1e5, + "nu": 0.4, + "rho": 1000 + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/initial-angular-velocity.json b/tutorials/ipc_quick_start_guide/input/initial-angular-velocity.json new file mode 100644 index 00000000..b39f63d8 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/initial-angular-velocity.json @@ -0,0 +1,9 @@ +{ + "common": "2-cubes-falling.json", + "initial_conditions": { + "velocity": [{ + "id": 1, + "value": ["pi/2 * z", 0, "-pi/2 * x"] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/initial-linear-velocity.json b/tutorials/ipc_quick_start_guide/input/initial-linear-velocity.json new file mode 100644 index 00000000..e2609fd8 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/initial-linear-velocity.json @@ -0,0 +1,9 @@ +{ + "common": "2-cubes-falling.json", + "initial_conditions": { + "velocity": [{ + "id": 1, + "value": [0, -20, 0] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/ipc-defaults.json b/tutorials/ipc_quick_start_guide/input/ipc-defaults.json new file mode 100644 index 00000000..b98a2a35 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/ipc-defaults.json @@ -0,0 +1,54 @@ +{ + "contact": { + "enabled": true, + "dhat": 1e-3, + "friction_coefficient": 0.0, + "epsv": 1e-3 + }, + "time": { + "integrator": "ImplicitEuler", + "tend": 5, + "dt": 0.025 + }, + "space": { + "advanced": { + "bc_method": "sample" + } + }, + "boundary_conditions": { + "rhs": [0, 9.81, 0] + }, + "materials": { + "type": "NeoHookean", + "E": 1e5, + "nu": 0.4, + "rho": 1000 + }, + "solver": { + "linear": { + "solver": ["Eigen::PardisoLDLT", "Eigen::CholmodDecomposition"] + }, + "nonlinear": { + "x_delta": 1e-05 + }, + "advanced": { + "lump_mass_matrix": true + }, + "contact": { + "friction_convergence_tol": 0.01, + "friction_iterations": 1 + } + }, + "output": { + "paraview": { + "file_name": "sim.pvd", + "options": { + "material": true, + "body_ids": true, + "tensor_values": false, + "nodes": false + }, + "vismesh_rel_area": 1e7 + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/larger-dt.json b/tutorials/ipc_quick_start_guide/input/larger-dt.json new file mode 100644 index 00000000..90951a58 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/larger-dt.json @@ -0,0 +1,6 @@ +{ + "common": "2-cubes-falling.json", + "time": { + "dt": 1 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/mesh-sequence.json b/tutorials/ipc_quick_start_guide/input/mesh-sequence.json new file mode 100644 index 00000000..519793cf --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/mesh-sequence.json @@ -0,0 +1,21 @@ +{ + "common": "2-cubes-falling.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "type": "mesh_sequence", + "transformation": { + "translation": [-0.6666666667, 0, -0.6666666667] + }, + "mesh_sequence": "sequence", + "fps": 40, + "is_obstacle": true + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/neumann-bcs.json b/tutorials/ipc_quick_start_guide/input/neumann-bcs.json new file mode 100644 index 00000000..899fa277 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/neumann-bcs.json @@ -0,0 +1,37 @@ +{ + "common": "point-selection.json", + "geometry": [{ + "mesh": "cube-hex.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube-hex.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "volume_selection": 2, + "surface_selection": 1 + }, { + "mesh": "plane.obj", + "is_obstacle": true + }], + "boundary_conditions": { + "neumann_boundary": [{ + "id": 1, + "value": [ + "2.5e4 * sign(x) * max(0, sign(x * z))", + 0, + "2.5e4 * sign(z) * max(0, sign(x * z))" + ] + }] + }, + "output": { + "paraview": { + "options": { + "forces": true + } + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/newmark.json b/tutorials/ipc_quick_start_guide/input/newmark.json new file mode 100644 index 00000000..4638ff20 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/newmark.json @@ -0,0 +1,10 @@ +{ + "common": "stiffer.json", + "time": { + "dt": 0.005, + "integrator": "ImplicitNewmark" + }, + "contact": { + "friction_coefficient": 0 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/plane.obj b/tutorials/ipc_quick_start_guide/input/plane.obj new file mode 100644 index 00000000..73164d45 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/plane.obj @@ -0,0 +1,324 @@ +# Blender v3.3.0 OBJ File: '' +# www.blender.org +v -5.000000 0.000000 5.000000 +v -4.000000 0.000000 5.000000 +v -5.000000 0.000000 4.000000 +v -4.000000 0.000000 4.000000 +v -3.000000 0.000000 5.000000 +v -3.000000 0.000000 4.000000 +v -2.000000 0.000000 5.000000 +v -2.000000 0.000000 4.000000 +v -1.000000 0.000000 5.000000 +v -1.000000 0.000000 4.000000 +v 0.000000 0.000000 5.000000 +v 0.000000 0.000000 4.000000 +v 1.000000 0.000000 5.000000 +v 1.000000 0.000000 4.000000 +v 2.000000 0.000000 5.000000 +v 2.000000 0.000000 4.000000 +v 3.000000 0.000000 5.000000 +v 3.000000 0.000000 4.000000 +v 4.000000 0.000000 5.000000 +v 4.000000 0.000000 4.000000 +v 5.000000 0.000000 5.000000 +v 5.000000 0.000000 4.000000 +v -5.000000 0.000000 3.000000 +v -4.000000 0.000000 3.000000 +v -3.000000 0.000000 3.000000 +v -2.000000 0.000000 3.000000 +v -1.000000 0.000000 3.000000 +v 0.000000 0.000000 3.000000 +v 1.000000 0.000000 3.000000 +v 2.000000 0.000000 3.000000 +v 3.000000 0.000000 3.000000 +v 4.000000 0.000000 3.000000 +v 5.000000 0.000000 3.000000 +v -5.000000 0.000000 2.000000 +v -4.000000 0.000000 2.000000 +v -3.000000 0.000000 2.000000 +v -2.000000 0.000000 2.000000 +v -1.000000 0.000000 2.000000 +v 0.000000 0.000000 2.000000 +v 1.000000 0.000000 2.000000 +v 2.000000 0.000000 2.000000 +v 3.000000 0.000000 2.000000 +v 4.000000 0.000000 2.000000 +v 5.000000 0.000000 2.000000 +v -5.000000 0.000000 1.000000 +v -4.000000 0.000000 1.000000 +v -3.000000 0.000000 1.000000 +v -2.000000 0.000000 1.000000 +v -1.000000 0.000000 1.000000 +v 0.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v 2.000000 0.000000 1.000000 +v 3.000000 0.000000 1.000000 +v 4.000000 0.000000 1.000000 +v 5.000000 0.000000 1.000000 +v -5.000000 0.000000 0.000000 +v -4.000000 0.000000 0.000000 +v -3.000000 0.000000 0.000000 +v -2.000000 0.000000 0.000000 +v -1.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 1.000000 0.000000 0.000000 +v 2.000000 0.000000 0.000000 +v 3.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v 5.000000 0.000000 0.000000 +v -5.000000 0.000000 -1.000000 +v -4.000000 0.000000 -1.000000 +v -3.000000 0.000000 -1.000000 +v -2.000000 0.000000 -1.000000 +v -1.000000 0.000000 -1.000000 +v 0.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +v 2.000000 0.000000 -1.000000 +v 3.000000 0.000000 -1.000000 +v 4.000000 0.000000 -1.000000 +v 5.000000 0.000000 -1.000000 +v -5.000000 0.000000 -2.000000 +v -4.000000 0.000000 -2.000000 +v -3.000000 0.000000 -2.000000 +v -2.000000 0.000000 -2.000000 +v -1.000000 0.000000 -2.000000 +v 0.000000 0.000000 -2.000000 +v 1.000000 0.000000 -2.000000 +v 2.000000 0.000000 -2.000000 +v 3.000000 0.000000 -2.000000 +v 4.000000 0.000000 -2.000000 +v 5.000000 0.000000 -2.000000 +v -5.000000 0.000000 -3.000000 +v -4.000000 0.000000 -3.000000 +v -3.000000 0.000000 -3.000000 +v -2.000000 0.000000 -3.000000 +v -1.000000 0.000000 -3.000000 +v 0.000000 0.000000 -3.000000 +v 1.000000 0.000000 -3.000000 +v 2.000000 0.000000 -3.000000 +v 3.000000 0.000000 -3.000000 +v 4.000000 0.000000 -3.000000 +v 5.000000 0.000000 -3.000000 +v -5.000000 0.000000 -4.000000 +v -4.000000 0.000000 -4.000000 +v -3.000000 0.000000 -4.000000 +v -2.000000 0.000000 -4.000000 +v -1.000000 0.000000 -4.000000 +v 0.000000 0.000000 -4.000000 +v 1.000000 0.000000 -4.000000 +v 2.000000 0.000000 -4.000000 +v 3.000000 0.000000 -4.000000 +v 4.000000 0.000000 -4.000000 +v 5.000000 0.000000 -4.000000 +v -5.000000 0.000000 -5.000000 +v -4.000000 0.000000 -5.000000 +v -3.000000 0.000000 -5.000000 +v -2.000000 0.000000 -5.000000 +v -1.000000 0.000000 -5.000000 +v 0.000000 0.000000 -5.000000 +v 1.000000 0.000000 -5.000000 +v 2.000000 0.000000 -5.000000 +v 3.000000 0.000000 -5.000000 +v 4.000000 0.000000 -5.000000 +v 5.000000 0.000000 -5.000000 +s off +f 2 3 1 +f 5 4 2 +f 7 6 5 +f 9 8 7 +f 11 10 9 +f 13 12 11 +f 15 14 13 +f 17 16 15 +f 19 18 17 +f 21 20 19 +f 4 23 3 +f 6 24 4 +f 8 25 6 +f 10 26 8 +f 12 27 10 +f 14 28 12 +f 16 29 14 +f 18 30 16 +f 20 31 18 +f 22 32 20 +f 24 34 23 +f 25 35 24 +f 26 36 25 +f 27 37 26 +f 28 38 27 +f 29 39 28 +f 30 40 29 +f 31 41 30 +f 32 42 31 +f 33 43 32 +f 35 45 34 +f 36 46 35 +f 37 47 36 +f 38 48 37 +f 39 49 38 +f 40 50 39 +f 41 51 40 +f 42 52 41 +f 43 53 42 +f 44 54 43 +f 46 56 45 +f 47 57 46 +f 48 58 47 +f 49 59 48 +f 50 60 49 +f 51 61 50 +f 52 62 51 +f 53 63 52 +f 54 64 53 +f 55 65 54 +f 57 67 56 +f 58 68 57 +f 59 69 58 +f 60 70 59 +f 61 71 60 +f 62 72 61 +f 63 73 62 +f 64 74 63 +f 65 75 64 +f 66 76 65 +f 68 78 67 +f 69 79 68 +f 70 80 69 +f 71 81 70 +f 72 82 71 +f 73 83 72 +f 74 84 73 +f 75 85 74 +f 76 86 75 +f 77 87 76 +f 79 89 78 +f 80 90 79 +f 81 91 80 +f 82 92 81 +f 83 93 82 +f 84 94 83 +f 85 95 84 +f 86 96 85 +f 87 97 86 +f 88 98 87 +f 90 100 89 +f 91 101 90 +f 92 102 91 +f 93 103 92 +f 94 104 93 +f 95 105 94 +f 96 106 95 +f 97 107 96 +f 98 108 97 +f 99 109 98 +f 101 111 100 +f 102 112 101 +f 103 113 102 +f 104 114 103 +f 105 115 104 +f 106 116 105 +f 107 117 106 +f 108 118 107 +f 109 119 108 +f 110 120 109 +f 2 4 3 +f 5 6 4 +f 7 8 6 +f 9 10 8 +f 11 12 10 +f 13 14 12 +f 15 16 14 +f 17 18 16 +f 19 20 18 +f 21 22 20 +f 4 24 23 +f 6 25 24 +f 8 26 25 +f 10 27 26 +f 12 28 27 +f 14 29 28 +f 16 30 29 +f 18 31 30 +f 20 32 31 +f 22 33 32 +f 24 35 34 +f 25 36 35 +f 26 37 36 +f 27 38 37 +f 28 39 38 +f 29 40 39 +f 30 41 40 +f 31 42 41 +f 32 43 42 +f 33 44 43 +f 35 46 45 +f 36 47 46 +f 37 48 47 +f 38 49 48 +f 39 50 49 +f 40 51 50 +f 41 52 51 +f 42 53 52 +f 43 54 53 +f 44 55 54 +f 46 57 56 +f 47 58 57 +f 48 59 58 +f 49 60 59 +f 50 61 60 +f 51 62 61 +f 52 63 62 +f 53 64 63 +f 54 65 64 +f 55 66 65 +f 57 68 67 +f 58 69 68 +f 59 70 69 +f 60 71 70 +f 61 72 71 +f 62 73 72 +f 63 74 73 +f 64 75 74 +f 65 76 75 +f 66 77 76 +f 68 79 78 +f 69 80 79 +f 70 81 80 +f 71 82 81 +f 72 83 82 +f 73 84 83 +f 74 85 84 +f 75 86 85 +f 76 87 86 +f 77 88 87 +f 79 90 89 +f 80 91 90 +f 81 92 91 +f 82 93 92 +f 83 94 93 +f 84 95 94 +f 85 96 95 +f 86 97 96 +f 87 98 97 +f 88 99 98 +f 90 101 100 +f 91 102 101 +f 92 103 102 +f 93 104 103 +f 94 105 104 +f 95 106 105 +f 96 107 106 +f 97 108 107 +f 98 109 108 +f 99 110 109 +f 101 112 111 +f 102 113 112 +f 103 114 113 +f 104 115 114 +f 105 116 115 +f 106 117 116 +f 107 118 117 +f 108 119 118 +f 109 120 119 +f 110 121 120 diff --git a/tutorials/ipc_quick_start_guide/input/point-selection.json b/tutorials/ipc_quick_start_guide/input/point-selection.json new file mode 100644 index 00000000..ffd404f4 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/point-selection.json @@ -0,0 +1,39 @@ +{ + "common": "2-cubes-falling.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "volume_selection": 2, + "point_selection": [{ + "id": 1, + "box": [ + [0, 0, 0], + [0.1, 1, 0.1] + ], + "relative": true + }, { + "id": 2, + "box": [ + [0.9, 0, 0.9], + [1, 1, 1] + ], + "relative": true + }] + }, { + "mesh": "plane.obj", + "is_obstacle": true + }], + "output": { + "paraview": { + "points": true + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.1.json b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.1.json new file mode 100644 index 00000000..7313280f --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.1.json @@ -0,0 +1,9 @@ +{ + "common": "newmark.json", + "solver": { + "rayleigh_damping": { + "form": "elasticity", + "stiffness_ratio": 0.1 + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.2.json b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.2.json new file mode 100644 index 00000000..d8a8bda7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.2.json @@ -0,0 +1,9 @@ +{ + "common": "newmark.json", + "solver": { + "rayleigh_damping": { + "form": "elasticity", + "stiffness_ratio": 0.2 + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.4.json b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.4.json new file mode 100644 index 00000000..855106cb --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rayleigh-damping-ratio=0.4.json @@ -0,0 +1,9 @@ +{ + "common": "newmark.json", + "solver": { + "rayleigh_damping": { + "form": "elasticity", + "stiffness_ratio": 0.4 + } + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rotating-obstacle-edges.json b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-edges.json new file mode 100644 index 00000000..e0e1634d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-edges.json @@ -0,0 +1,22 @@ +{ + "common": "rotating-obstacle.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "triangle.obj", + "transformation": { + "translation": [0, 1, 0], + "scale": 2 + }, + "surface_selection": 1, + "is_obstacle": true, + "extract": "edges" + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rotating-obstacle-points.json b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-points.json new file mode 100644 index 00000000..ff846c4a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-points.json @@ -0,0 +1,22 @@ +{ + "common": "rotating-obstacle.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "triangle.obj", + "transformation": { + "translation": [0, 1, 0], + "scale": 0.7 + }, + "surface_selection": 1, + "is_obstacle": true, + "extract": "points" + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rotating-obstacle-surface.json b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-surface.json new file mode 100644 index 00000000..576b5766 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-surface.json @@ -0,0 +1,20 @@ +{ + "common": "rotating-obstacle.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube.obj", + "transformation": { + "translation": [0, 1, 0] + }, + "surface_selection": 1, + "is_obstacle": true + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rotating-obstacle-triangle.json b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-triangle.json new file mode 100644 index 00000000..41e50159 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rotating-obstacle-triangle.json @@ -0,0 +1,20 @@ +{ + "common": "rotating-obstacle.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "triangle.obj", + "transformation": { + "translation": [0, 1, 0] + }, + "surface_selection": 1, + "is_obstacle": true + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/rotating-obstacle.json b/tutorials/ipc_quick_start_guide/input/rotating-obstacle.json new file mode 100644 index 00000000..78790a72 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/rotating-obstacle.json @@ -0,0 +1,13 @@ +{ + "common": "translating-obstacle.json", + "boundary_conditions": { + "obstacle_displacements": [{ + "id": 1, + "value": [ + "x*cos(pi*t/2) - x + z*sin(pi*t/2)", + "x*sin(pi*t/18)*sin(pi*t/2) - y - z*sin(pi*t/18)*cos(pi*t/2) + (y - 1)*cos(pi*t/18) + 1", + "-x*sin(pi*t/2)*cos(pi*t/18) + z*cos(pi*t/18)*cos(pi*t/2) - z + (y - 1)*sin(pi*t/18)" + ] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/sequence/0.obj b/tutorials/ipc_quick_start_guide/input/sequence/0.obj new file mode 100644 index 00000000..7729284c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/0.obj @@ -0,0 +1,6 @@ +v 0.0000000000e+00 1.0000000000e+00 0.0000000000e+00 +v 2.0000000000e+00 1.0000000000e+00 0.0000000000e+00 +v 0.0000000000e+00 1.0000000000e+00 2.0000000000e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/1.obj b/tutorials/ipc_quick_start_guide/input/sequence/1.obj new file mode 100644 index 00000000..f9ca31da --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/1.obj @@ -0,0 +1,6 @@ +v -3.8488852000e-02 1.0041886426e+00 4.0039917733e-02 +v 1.9599692205e+00 1.0045312481e+00 -3.8478966334e-02 +v 4.0030779518e-02 9.9546875195e-01 2.0384789663e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/10.obj b/tutorials/ipc_quick_start_guide/input/sequence/10.obj new file mode 100644 index 00000000..7fde0f14 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/10.obj @@ -0,0 +1,6 @@ +v -3.0781668712e-01 1.0333444413e+00 3.9101861294e-01 +v 1.5399663479e+00 1.0519244465e+00 -3.7406480674e-01 +v 4.5734051982e-01 9.4867394857e-01 2.2369236366e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/100.obj b/tutorials/ipc_quick_start_guide/input/sequence/100.obj new file mode 100644 index 00000000..ccfdddc2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/100.obj @@ -0,0 +1,6 @@ +v 1.8026905220e+00 7.9821871586e-01 6.9108415559e-01 +v 4.6425959172e-01 1.1659670138e+00 2.1310021080e+00 +v 3.6439082208e-01 9.6538273310e-01 -6.8853535598e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/101.obj b/tutorials/ipc_quick_start_guide/input/sequence/101.obj new file mode 100644 index 00000000..a93978cf --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/101.obj @@ -0,0 +1,6 @@ +v 1.8009524324e+00 7.9847510723e-01 6.6207199370e-01 +v 5.2008423985e-01 1.1597126706e+00 2.1550167232e+00 +v 3.0959805467e-01 9.7140620842e-01 -6.5927458463e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/102.obj b/tutorials/ipc_quick_start_guide/input/sequence/102.obj new file mode 100644 index 00000000..b112dbde --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/102.obj @@ -0,0 +1,6 @@ +v 1.7970090928e+00 7.9897864246e-01 6.3207602363e-01 +v 5.7574107634e-01 1.1534841997e+00 2.1757178554e+00 +v 2.5492872031e-01 9.7741361719e-01 -6.2893504533e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/103.obj b/tutorials/ipc_quick_start_guide/input/sequence/103.obj new file mode 100644 index 00000000..82993856 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/103.obj @@ -0,0 +1,6 @@ +v 1.7908666409e+00 7.9972853702e-01 6.0114233294e-01 +v 6.3114320855e-01 1.1472913266e+00 2.1930724586e+00 +v 2.0046814073e-01 9.8339558533e-01 -5.9756482920e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/104.obj b/tutorials/ipc_quick_start_guide/input/sequence/104.obj new file mode 100644 index 00000000..9930f616 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/104.obj @@ -0,0 +1,6 @@ +v 1.7825346498e+00 8.0072362530e-01 5.6931847519e-01 +v 6.8620414142e-01 1.1411437215e+00 2.2070527104e+00 +v 1.4630131182e-01 9.8934277849e-01 -5.6521363623e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/105.obj b/tutorials/ipc_quick_start_guide/input/sequence/105.obj new file mode 100644 index 00000000..0bc1e981 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/105.obj @@ -0,0 +1,6 @@ +v 1.7720261116e+00 8.0196235634e-01 5.3665339375e-01 +v 7.4083791266e-01 1.1350509836e+00 2.2176360558e+00 +v 9.2512770906e-02 9.9524591660e-01 -5.3193269769e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/106.obj b/tutorials/ipc_quick_start_guide/input/sequence/106.obj new file mode 100644 index 00000000..403161a7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/106.obj @@ -0,0 +1,6 @@ +v 1.7593574147e+00 8.0344280055e-01 5.0319734516e-01 +v 7.9495922671e-01 1.1290226268e+00 2.2248052422e+00 +v 3.9186464852e-02 1.0010957883e+00 -4.9777469613e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/107.obj b/tutorials/ipc_quick_start_guide/input/sequence/107.obj new file mode 100644 index 00000000..4053479e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/107.obj @@ -0,0 +1,6 @@ +v 1.7445483200e+00 8.0516264985e-01 4.6900182040e-01 +v 8.4848358795e-01 1.1230680642e+00 2.2285483464e+00 +v -1.3594381020e-02 1.0068832655e+00 -4.6279368314e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/108.obj b/tutorials/ipc_quick_start_guide/input/sequence/108.obj new file mode 100644 index 00000000..b31495d9 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/108.obj @@ -0,0 +1,6 @@ +v 1.7276219291e+00 8.0711922299e-01 4.3411946462e-01 +v 9.0132743257e-01 1.1171965939e+00 2.2288587931e+00 +v -6.5747392826e-02 1.0125993175e+00 -4.2704499502e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/109.obj b/tutorials/ipc_quick_start_guide/input/sequence/109.obj new file mode 100644 index 00000000..79934e83 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/109.obj @@ -0,0 +1,6 @@ +v 1.7086046487e+00 8.0930946900e-01 3.9860399524e-01 +v 9.5340825899e-01 1.1114173842e+00 2.2257353652e+00 +v -1.1719117670e-01 1.0182350248e+00 -3.9058516636e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/11.obj b/tutorials/ipc_quick_start_guide/input/sequence/11.obj new file mode 100644 index 00000000..f2bd76de --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/11.obj @@ -0,0 +1,6 @@ +v -3.2832082876e-01 1.0355420232e+00 4.2785604253e-01 +v 1.4880005984e+00 1.0577741036e+00 -4.0909210877e-01 +v 5.0871636084e-01 9.4295536495e-01 2.2419112936e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/110.obj b/tutorials/ipc_quick_start_guide/input/sequence/110.obj new file mode 100644 index 00000000..81ee1de9 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/110.obj @@ -0,0 +1,6 @@ +v 1.6875261491e+00 8.1172997215e-01 3.6251011788e-01 +v 1.0046447567e+00 1.1057394594e+00 2.2191822058e+00 +v -1.6784544586e-01 1.0237815937e+00 -3.5347184181e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/111.obj b/tutorials/ipc_quick_start_guide/input/sequence/111.obj new file mode 100644 index 00000000..11c9aa6d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/111.obj @@ -0,0 +1,6 @@ +v 1.6644193185e+00 8.1437695733e-01 3.2589344103e-01 +v 1.0549569331e+00 1.1001716858e+00 2.2092088116e+00 +v -2.1763114590e-01 1.0292303695e+00 -3.1576368609e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/112.obj b/tutorials/ipc_quick_start_guide/input/sequence/112.obj new file mode 100644 index 00000000..4bf2e0ae --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/112.obj @@ -0,0 +1,6 @@ +v 1.6393202106e+00 8.1724629597e-01 2.8881038922e-01 +v 1.1042662384e+00 1.0947227575e+00 2.1958300181e+00 +v -2.6647057824e-01 1.0345728500e+00 -2.7752029245e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/113.obj b/tutorials/ipc_quick_start_guide/input/sequence/113.obj new file mode 100644 index 00000000..94c5b0ef --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/113.obj @@ -0,0 +1,6 @@ +v 1.6122679895e+00 8.2033351242e-01 2.5131811495e-01 +v 1.1524956883e+00 1.0894011834e+00 2.1790659767e+00 +v -3.1428752136e-01 1.0398006992e+00 -2.3880208960e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/114.obj b/tutorials/ipc_quick_start_guide/input/sequence/114.obj new file mode 100644 index 00000000..346ccce7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/114.obj @@ -0,0 +1,6 @@ +v 1.5833048679e+00 8.2363379088e-01 2.1347440955e-01 +v 1.1995699842e+00 1.0842152735e+00 2.1589421227e+00 +v -3.6100734981e-01 1.0449057597e+00 -1.9967024741e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/115.obj b/tutorials/ipc_quick_start_guide/input/sequence/115.obj new file mode 100644 index 00000000..b8ff028f --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/115.obj @@ -0,0 +1,6 @@ +v 1.5524760411e+00 8.2714198296e-01 1.7533761292e-01 +v 1.2454156304e+00 1.0791731259e+00 2.1354891362e+00 +v -4.0655715068e-01 1.0498800662e+00 -1.6018658144e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/116.obj b/tutorials/ipc_quick_start_guide/input/sequence/116.obj new file mode 100644 index 00000000..895a4824 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/116.obj @@ -0,0 +1,6 @@ +v 1.5198296172e+00 8.3085261585e-01 1.3696652244e-01 +v 1.2899610493e+00 1.0742826145e+00 2.1087428936e+00 +v -4.5086583743e-01 1.0547158571e+00 -1.2041345640e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/117.obj b/tutorials/ipc_quick_start_guide/input/sequence/117.obj new file mode 100644 index 00000000..a9bc1005 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/117.obj @@ -0,0 +1,6 @@ +v 1.4854165409e+00 8.3475990060e-01 9.8420301175e-02 +v 1.3331366929e+00 1.0695513763e+00 2.0787444124e+00 +v -4.9386426084e-01 1.0594055872e+00 -8.0413688868e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/118.obj b/tutorials/ipc_quick_start_guide/input/sequence/118.obj new file mode 100644 index 00000000..6367cf53 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/118.obj @@ -0,0 +1,6 @@ +v 1.4492905150e+00 8.3885774134e-01 5.9758385599e-02 +v 1.3748751512e+00 1.0649867999e+00 2.0455397862e+00 +v -5.3548531696e-01 1.0639419393e+00 -4.0250449166e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/119.obj b/tutorials/ipc_quick_start_guide/input/sequence/119.obj new file mode 100644 index 00000000..9d5fb83a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/119.obj @@ -0,0 +1,6 @@ +v 1.4115079161e+00 8.4313974463e-01 2.1040392745e-02 +v 1.4151112575e+00 1.0605960134e+00 2.0091801136e+00 +v -5.7566405184e-01 1.0683178355e+00 1.2837190780e-05 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/12.obj b/tutorials/ipc_quick_start_guide/input/sequence/12.obj new file mode 100644 index 00000000..0b1ff728 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/12.obj @@ -0,0 +1,6 @@ +v -3.4680119212e-01 1.0375161847e+00 4.6404471899e-01 +v 1.4352614868e+00 1.0637082425e+00 -4.4346097496e-01 +v 5.6081014708e-01 9.3716461284e-01 2.2434185468e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/120.obj b/tutorials/ipc_quick_start_guide/input/sequence/120.obj new file mode 100644 index 00000000..952f549d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/120.obj @@ -0,0 +1,6 @@ +v 1.3721290951e+00 8.4759895800e-01 -1.7620086625e-02 +v 1.4537835796e+00 1.0563856023e+00 1.9697753040e+00 +v -6.1433637391e-01 1.0725261767e+00 4.0366474713e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/121.obj b/tutorials/ipc_quick_start_guide/input/sequence/121.obj new file mode 100644 index 00000000..b6c14ded --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/121.obj @@ -0,0 +1,6 @@ +v 1.3323824763e+00 8.5209564132e-01 -5.4726114400e-02 +v 1.4919987071e+00 1.0522293591e+00 1.9288234576e+00 +v -6.5027496193e-01 1.0764276143e+00 8.2184063925e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/122.obj b/tutorials/ipc_quick_start_guide/input/sequence/122.obj new file mode 100644 index 00000000..dc4a86da --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/122.obj @@ -0,0 +1,6 @@ +v 1.2927428712e+00 8.5657693438e-01 -9.0227227976e-02 +v 1.5301097566e+00 1.0480879307e+00 1.8863810398e+00 +v -6.8301094851e-01 1.0799702173e+00 1.2539287112e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/123.obj b/tutorials/ipc_quick_start_guide/input/sequence/123.obj new file mode 100644 index 00000000..61866fcb --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/123.obj @@ -0,0 +1,6 @@ +v 1.2532721558e+00 8.6103584039e-01 -1.2406726431e-01 +v 1.5680572390e+00 1.0439677798e+00 1.8425150490e+00 +v -7.1249323394e-01 1.0831484542e+00 1.6992619671e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/124.obj b/tutorials/ipc_quick_start_guide/input/sequence/124.obj new file mode 100644 index 00000000..c85b02ee --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/124.obj @@ -0,0 +1,6 @@ +v 1.2140319424e+00 8.6546539753e-01 -1.5619265317e-01 +v 1.6057819200e+00 1.0398753363e+00 1.7972947055e+00 +v -7.3867579741e-01 1.0859573622e+00 2.1571527359e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/125.obj b/tutorials/ipc_quick_start_guide/input/sequence/125.obj new file mode 100644 index 00000000..33b4c37d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/125.obj @@ -0,0 +1,6 @@ +v 1.1750834835e+00 8.6985868980e-01 -1.8655250081e-01 +v 1.6432249135e+00 1.0358169865e+00 1.7507913435e+00 +v -7.6151776881e-01 1.0883925552e+00 2.6268937447e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/126.obj b/tutorials/ipc_quick_start_guide/input/sequence/126.obj new file mode 100644 index 00000000..b0f7e87b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/126.obj @@ -0,0 +1,6 @@ +v 1.1364875763e+00 8.7420885780e-01 -2.1509866943e-01 +v 1.6803277729e+00 1.0317990637e+00 1.7030783003e+00 +v -7.8098349256e-01 1.0904502301e+00 3.1077592231e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/127.obj b/tutorials/ipc_quick_start_guide/input/sequence/127.obj new file mode 100644 index 00000000..69220c6a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/127.obj @@ -0,0 +1,6 @@ +v 1.0983044674e+00 8.7850910944e-01 -2.4178585228e-01 +v 1.7170325825e+00 1.0278278381e+00 1.6542308013e+00 +v -7.9704258324e-01 1.0921271734e+00 3.5990060357e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/128.obj b/tutorials/ipc_quick_start_guide/input/sequence/128.obj new file mode 100644 index 00000000..12d2ad2e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/128.obj @@ -0,0 +1,6 @@ +v 1.0605937217e+00 8.8275273481e-01 -2.6657166921e-01 +v 1.7532820843e+00 1.0239095029e+00 1.6043257926e+00 +v -8.0966998566e-01 1.0934207672e+00 4.0998753433e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/129.obj b/tutorials/ipc_quick_start_guide/input/sequence/129.obj new file mode 100644 index 00000000..1a24f098 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/129.obj @@ -0,0 +1,6 @@ +v 1.0234142429e+00 8.8693310377e-01 -2.8941665459e-01 +v 1.7890196576e+00 1.0200501769e+00 1.5534419693e+00 +v -8.1884596923e-01 1.0943289883e+00 4.6095923032e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/13.obj b/tutorials/ipc_quick_start_guide/input/sequence/13.obj new file mode 100644 index 00000000..4957d059 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/13.obj @@ -0,0 +1,6 @@ +v -3.6322893040e-01 1.0392638443e+00 4.9952813860e-01 +v 1.3818313364e+00 1.0697176002e+00 -4.7711777160e-01 +v 6.1354056199e-01 9.3131073143e-01 2.2414430286e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/130.obj b/tutorials/ipc_quick_start_guide/input/sequence/130.obj new file mode 100644 index 00000000..f0c813f2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/130.obj @@ -0,0 +1,6 @@ +v 9.8682406699e-01 8.9104368928e-01 -3.1028440091e-01 +v 1.8241895176e+00 1.0162558826e+00 1.5016595061e+00 +v -8.2455621031e-01 1.0948504175e+00 5.1273687426e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/131.obj b/tutorials/ipc_quick_start_guide/input/sequence/131.obj new file mode 100644 index 00000000..2d6215d7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/131.obj @@ -0,0 +1,6 @@ +v 9.5088030995e-01 8.9507807321e-01 -3.2914158702e-01 +v 1.8587367661e+00 1.0125325412e+00 1.4490599810e+00 +v -8.2679179518e-01 1.0949842392e+00 5.6524039083e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/132.obj b/tutorials/ipc_quick_start_guide/input/sequence/132.obj new file mode 100644 index 00000000..81acb4bc --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/132.obj @@ -0,0 +1,6 @@ +v 9.1563907881e-01 8.9902995639e-01 -3.4595803021e-01 +v 1.8926074765e+00 1.0088859630e+00 1.3957262469e+00 +v -8.2554923389e-01 1.0947302429e+00 6.1838857164e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/133.obj b/tutorials/ipc_quick_start_guide/input/sequence/133.obj new file mode 100644 index 00000000..73c4f312 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/133.obj @@ -0,0 +1,6 @@ +v 8.8115538396e-01 9.0289316845e-01 -3.6070673324e-01 +v 1.9257487783e+00 1.0053218384e+00 1.3417423032e+00 +v -8.2083046573e-01 1.0940888232e+00 6.7209920203e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/134.obj b/tutorials/ipc_quick_start_guide/input/sequence/134.obj new file mode 100644 index 00000000..8a5c8335 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/134.obj @@ -0,0 +1,6 @@ +v 8.4748305333e-01 9.0666167739e-01 -3.7336392658e-01 +v 1.9581089395e+00 1.0018457293e+00 1.2871931639e+00 +v -8.1264285622e-01 1.0930609799e+00 7.2628918934e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/135.obj b/tutorials/ipc_quick_start_guide/input/sequence/135.obj new file mode 100644 index 00000000..a9836a23 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/135.obj @@ -0,0 +1,6 @@ +v 8.1467464831e-01 9.1032959907e-01 -3.8390910541e-01 +v 1.9896374476e+00 9.9846305996e-01 1.2321647255e+00 +v -8.0099918559e-01 1.0916483157e+00 7.8087469269e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/136.obj b/tutorials/ipc_quick_start_guide/input/sequence/136.obj new file mode 100644 index 00000000..aede6c61 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/136.obj @@ -0,0 +1,6 @@ +v 7.8278138177e-01 9.1389120636e-01 -3.9232506171e-01 +v 2.0202850882e+00 9.9517910905e-01 1.1767436325e+00 +v -7.8591762885e-01 1.0898530339e+00 8.3577125381e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/137.obj b/tutorials/ipc_quick_start_guide/input/sequence/137.obj new file mode 100644 index 00000000..432bfc8e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/137.obj @@ -0,0 +1,6 @@ +v 7.5185303805e-01 9.1734093807e-01 -3.9859791108e-01 +v 2.0500040218e+00 9.9199900098e-01 1.1210171424e+00 +v -7.6742172740e-01 1.0876779354e+00 8.9089392886e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/138.obj b/tutorials/ipc_quick_start_guide/input/sequence/138.obj new file mode 100644 index 00000000..0d65f66d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/138.obj @@ -0,0 +1,6 @@ +v 7.2193789533e-01 9.2067340764e-01 -4.0271711442e-01 +v 2.0787478587e+00 9.8892769809e-01 1.0650729893e+00 +v -7.4554035228e-01 1.0851264137e+00 9.4615742107e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/139.obj b/tutorials/ipc_quick_start_guide/input/sequence/139.obj new file mode 100644 index 00000000..2e9a0b8b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/139.obj @@ -0,0 +1,6 @@ +v 6.9308265019e-01 9.2388341157e-01 -4.0467549437e-01 +v 2.1064717313e+00 9.8596999292e-01 1.0089992473e+00 +v -7.2030765913e-01 1.0822024499e+00 1.0014762138e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/14.obj b/tutorials/ipc_quick_start_guide/input/sequence/14.obj new file mode 100644 index 00000000..714510b0 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/14.obj @@ -0,0 +1,6 @@ +v -3.7757840086e-01 1.0407822741e+00 5.3425089855e-01 +v 1.3277935492e+00 1.0757927964e+00 -5.1000997649e-01 +v 6.6682529530e-01 9.2540285844e-01 2.2359878083e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/140.obj b/tutorials/ipc_quick_start_guide/input/sequence/140.obj new file mode 100644 index 00000000..992c7124 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/140.obj @@ -0,0 +1,6 @@ +v 6.6533234477e-01 9.2696593752e-01 -4.0446924655e-01 +v 2.1331323640e+00 9.8313050064e-01 9.5288419262e-01 +v -6.9176303485e-01 1.0789106066e+00 1.0567647043e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/141.obj b/tutorials/ipc_quick_start_guide/input/sequence/141.obj new file mode 100644 index 00000000..88a10d0d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/141.obj @@ -0,0 +1,6 @@ +v 6.3669113155e-01 9.3014262879e-01 -4.0205740736e-01 +v 2.1566489761e+00 9.8064010861e-01 8.9685670402e-01 +v -6.6199020102e-01 1.0754824772e+00 1.1119778749e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/142.obj b/tutorials/ipc_quick_start_guide/input/sequence/142.obj new file mode 100644 index 00000000..f790852e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/142.obj @@ -0,0 +1,6 @@ +v 6.0705605652e-01 9.3342492345e-01 -3.9744005864e-01 +v 2.1768371974e+00 9.7851910097e-01 8.4100792107e-01 +v -6.3118329357e-01 1.0719398096e+00 1.1670332230e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/143.obj b/tutorials/ipc_quick_start_guide/input/sequence/143.obj new file mode 100644 index 00000000..dcc42079 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/143.obj @@ -0,0 +1,6 @@ +v 5.7647339348e-01 9.3680769471e-01 -3.9062366074e-01 +v 2.1936655295e+00 9.7677078526e-01 7.8542576856e-01 +v -5.9939038616e-01 1.0682881305e+00 1.2218455568e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/144.obj b/tutorials/ipc_quick_start_guide/input/sequence/144.obj new file mode 100644 index 00000000..2cbb95e1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/144.obj @@ -0,0 +1,6 @@ +v 5.4499089536e-01 9.4028565896e-01 -3.8161810661e-01 +v 2.2071077188e+00 9.7539788727e-01 7.3019775509e-01 +v -5.6666109151e-01 1.0645331369e+00 1.2763300636e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/145.obj b/tutorials/ipc_quick_start_guide/input/sequence/145.obj new file mode 100644 index 00000000..e632108c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/145.obj @@ -0,0 +1,6 @@ +v 5.1265771973e-01 9.4385338396e-01 -3.7043670640e-01 +v 2.2171427972e+00 9.7440254679e-01 6.7541083647e-01 +v -5.3304648405e-01 1.0606806867e+00 1.3304024425e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/146.obj b/tutorials/ipc_quick_start_guide/input/sequence/146.obj new file mode 100644 index 00000000..6521b243 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/146.obj @@ -0,0 +1,6 @@ +v 4.7952435201e-01 9.4750529739e-01 -3.5709616665e-01 +v 2.2237551151e+00 9.7378631423e-01 6.2115127997e-01 +v -4.9859902010e-01 1.0567367904e+00 1.3839790358e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/147.obj b/tutorials/ipc_quick_start_guide/input/sequence/147.obj new file mode 100644 index 00000000..3291a77e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/147.obj @@ -0,0 +1,6 @@ +v 4.4564252669e-01 9.5123569551e-01 -3.4161656425e-01 +v 2.2269343656e+00 9.7355014825e-01 5.6750452968e-01 +v -4.6337245608e-01 1.0527076008e+00 1.4369769600e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/148.obj b/tutorials/ipc_quick_start_guide/input/sequence/148.obj new file mode 100644 index 00000000..d5d6d610 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/148.obj @@ -0,0 +1,6 @@ +v 4.1106514657e-01 9.5503875205e-01 -3.2402131505e-01 +v 2.2266756007e+00 9.7369441424e-01 5.1455507312e-01 +v -4.2742176451e-01 1.0485994041e+00 1.4893142345e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/149.obj b/tutorials/ipc_quick_start_guide/input/sequence/149.obj new file mode 100644 index 00000000..f51e58b1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/149.obj @@ -0,0 +1,6 @@ +v 3.7584620020e-01 9.5890852733e-01 -3.0433713737e-01 +v 2.2229792389e+00 9.7421888374e-01 4.6238630935e-01 +v -3.9080304828e-01 1.0444186098e+00 1.5409099102e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/15.obj b/tutorials/ipc_quick_start_guide/input/sequence/15.obj new file mode 100644 index 00000000..d3f386b2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/15.obj @@ -0,0 +1,6 @@ +v -3.8982720487e-01 1.0420691040e+00 5.6815878337e-01 +v 1.2732324757e+00 1.0819243481e+00 -5.4208626092e-01 +v 7.2058117144e-01 9.1945021590e-01 2.2270613863e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/150.obj b/tutorials/ipc_quick_start_guide/input/sequence/150.obj new file mode 100644 index 00000000..8a458a0b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/150.obj @@ -0,0 +1,6 @@ +v 3.4004067757e-01 9.6283897755e-01 -2.8259401023e-01 +v 2.2158510649e+00 9.7512273481e-01 4.1108041883e-01 +v -3.5357345301e-01 1.0401717407e+00 1.5916841955e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/151.obj b/tutorials/ipc_quick_start_guide/input/sequence/151.obj new file mode 100644 index 00000000..0340414b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/151.obj @@ -0,0 +1,6 @@ +v 3.0370448428e-01 9.6682396417e-01 -2.5882512661e-01 +v 2.2053022201e+00 9.7640455332e-01 3.6071823508e-01 +v -3.1579107790e-01 1.0358654227e+00 1.6415585810e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/152.obj b/tutorials/ipc_quick_start_guide/input/sequence/152.obj new file mode 100644 index 00000000..28b72e9a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/152.obj @@ -0,0 +1,6 @@ +v 2.6689435432e-01 9.7085726352e-01 -2.3306684159e-01 +v 2.1913491854e+00 9.7806233515e-01 3.1137911855e-01 +v -2.7751488500e-01 1.0315063745e+00 1.6904559621e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/153.obj b/tutorials/ipc_quick_start_guide/input/sequence/153.obj new file mode 100644 index 00000000..d9a77057 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/153.obj @@ -0,0 +1,6 @@ +v 2.2966776145e-01 9.7493257654e-01 -2.0535861565e-01 +v 2.1740137557e+00 9.8009348931e-01 2.6314083272e-01 +v -2.3880460720e-01 1.0271013971e+00 1.7383007591e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/154.obj b/tutorials/ipc_quick_start_guide/input/sequence/154.obj new file mode 100644 index 00000000..0704ee25 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/154.obj @@ -0,0 +1,6 @@ +v 1.9208282951e-01 9.7904353857e-01 -1.7574295301e-01 +v 2.1533230055e+00 9.8249484198e-01 2.1607942272e-01 +v -1.9972065496e-01 1.0226573633e+00 1.7850190353e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/155.obj b/tutorials/ipc_quick_start_guide/input/sequence/155.obj new file mode 100644 index 00000000..9ee7d3c3 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/155.obj @@ -0,0 +1,6 @@ +v 1.5419824172e-01 9.8318372931e-01 -1.4426533537e-01 +v 2.1293092469e+00 9.8526264150e-01 1.7026909663e-01 +v -1.6032402207e-01 1.0181812068e+00 1.8305386126e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/156.obj b/tutorials/ipc_quick_start_guide/input/sequence/156.obj new file mode 100644 index 00000000..38d18244 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/156.obj @@ -0,0 +1,6 @@ +v 1.1607314901e-01 9.8734668283e-01 -1.1097415081e-01 +v 2.1020099790e+00 9.8839256419e-01 1.2578210962e-01 +v -1.2067619035e-01 1.0136799114e+00 1.8747891841e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/157.obj b/tutorials/ipc_quick_start_guide/input/sequence/157.obj new file mode 100644 index 00000000..698583c2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/157.obj @@ -0,0 +1,6 @@ +v 7.7767077753e-02 9.9152589767e-01 -7.5920618359e-02 +v 2.0714678296e+00 9.9187972110e-01 8.2688651208e-02 +v -8.0839033773e-02 1.0091605002e+00 1.9177024235e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/158.obj b/tutorials/ipc_quick_start_guide/input/sequence/158.obj new file mode 100644 index 00000000..d6c09c00 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/158.obj @@ -0,0 +1,6 @@ +v 3.9339836826e-02 9.9571484699e-01 -3.9158707973e-02 +v 2.0377304884e+00 9.9571866567e-01 4.1056735654e-02 +v -4.0874721820e-02 1.0046300245e+00 1.9592120922e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/159.obj b/tutorials/ipc_quick_start_guide/input/sequence/159.obj new file mode 100644 index 00000000..35ef726b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/159.obj @@ -0,0 +1,6 @@ +v 8.5142423465e-04 9.9990698876e-01 -7.4505632217e-04 +v 2.0008506325e+00 9.9990340220e-01 9.5209581685e-04 +v -8.4562245916e-04 1.0000955530e+00 1.9992541425e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/16.obj b/tutorials/ipc_quick_start_guide/input/sequence/16.obj new file mode 100644 index 00000000..65d95596 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/16.obj @@ -0,0 +1,6 @@ +v -3.9995622284e-01 1.0431223252e+00 6.0119884956e-01 +v 1.2182332831e+00 1.0881026843e+00 -5.7329656981e-01 +v 7.7472427941e-01 9.1346209569e-01 2.2146776819e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/160.obj b/tutorials/ipc_quick_start_guide/input/sequence/160.obj new file mode 100644 index 00000000..971ab07e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/160.obj @@ -0,0 +1,6 @@ +v -3.7638066524e-02 1.0040957759e+00 3.9261129447e-02 +v 1.9608858448e+00 1.0044273952e+00 -3.7561911635e-02 +v 3.9185795208e-02 9.9556416047e-01 2.0377668254e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/161.obj b/tutorials/ipc_quick_start_guide/input/sequence/161.obj new file mode 100644 index 00000000..1218128b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/161.obj @@ -0,0 +1,6 @@ +v -7.4590125259e-02 1.0081137763e+00 7.9259399138e-02 +v 1.9193769381e+00 1.0091226892e+00 -7.5963170118e-02 +v 8.0635473476e-02 9.9088202658e-01 2.0731520219e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/162.obj b/tutorials/ipc_quick_start_guide/input/sequence/162.obj new file mode 100644 index 00000000..c79eb4e6 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/162.obj @@ -0,0 +1,6 @@ +v -1.0991441086e-01 1.0119511635e+00 1.1915332758e-01 +v 1.8764213667e+00 1.0139784008e+00 -1.1422572637e-01 +v 1.2347137158e-01 9.8605290561e-01 2.1053205078e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/163.obj b/tutorials/ipc_quick_start_guide/input/sequence/163.obj new file mode 100644 index 00000000..e00e6231 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/163.obj @@ -0,0 +1,6 @@ +v -1.4355578386e-01 1.0156019477e+00 1.5888062733e-01 +v 1.8320861821e+00 1.0189869503e+00 -1.5228986879e-01 +v 1.6762662416e-01 9.8108433566e-01 2.1342220546e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/164.obj b/tutorials/ipc_quick_start_guide/input/sequence/164.obj new file mode 100644 index 00000000..9c8f8520 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/164.obj @@ -0,0 +1,6 @@ +v -1.7546173176e-01 1.0190604303e+00 1.9837927104e-01 +v 1.7864405895e+00 1.0241405199e+00 -1.9009619550e-01 +v 2.1303230640e-01 9.7598407254e-01 2.1598115336e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/165.obj b/tutorials/ipc_quick_start_guide/input/sequence/165.obj new file mode 100644 index 00000000..a861919b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/165.obj @@ -0,0 +1,6 @@ +v -2.0558245097e-01 1.0223212127e+00 2.3758758829e-01 +v 1.7395558395e+00 1.0294310649e+00 -2.2758570706e-01 +v 2.5961754162e-01 9.7076007762e-01 2.1820489860e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/166.obj b/tutorials/ipc_quick_start_guide/input/sequence/166.obj new file mode 100644 index 00000000..aef8e896 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/166.obj @@ -0,0 +1,6 @@ +v -2.3387092458e-01 1.0253792050e+00 2.7644436182e-01 +v 1.6915051168e+00 1.0348503271e+00 -2.6469989854e-01 +v 3.0730961189e-01 9.6542050539e-01 2.2008996853e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/167.obj b/tutorials/ipc_quick_start_guide/input/sequence/167.obj new file mode 100644 index 00000000..ce6fdb36 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/167.obj @@ -0,0 +1,6 @@ +v -2.6028299574e-01 1.0282296339e+00 3.1488892316e-01 +v 1.6423634266e+00 1.0403898474e+00 -3.0138085092e-01 +v 3.5603407159e-01 9.5997369078e-01 2.2163341918e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/168.obj b/tutorials/ipc_quick_start_guide/input/sequence/168.obj new file mode 100644 index 00000000..baa25b5c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/168.obj @@ -0,0 +1,6 @@ +v -2.8477743659e-01 1.0308680501e+00 3.5286124725e-01 +v 1.5922074765e+00 1.0460409789e+00 -3.3757132139e-01 +v 4.0571486354e-01 9.5442813609e-01 2.2283283981e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/169.obj b/tutorials/ipc_quick_start_guide/input/sequence/169.obj new file mode 100644 index 00000000..00d33c79 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/169.obj @@ -0,0 +1,6 @@ +v -3.0731601260e-01 1.0332903352e+00 3.9030204620e-01 +v 1.5411155577e+00 1.0517949004e+00 -3.7321483282e-01 +v 4.5627443779e-01 9.4879249778e-01 2.2368635671e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/17.obj b/tutorials/ipc_quick_start_guide/input/sequence/17.obj new file mode 100644 index 00000000..0d6e1fe8 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/17.obj @@ -0,0 +1,6 @@ +v -4.0794964406e-01 1.0439402939e+00 6.3331950829e-01 +v 1.1628818226e+00 1.0943181609e+00 -6.0359219984e-01 +v 8.2917010378e-01 9.0744784509e-01 2.1988560109e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/170.obj b/tutorials/ipc_quick_start_guide/input/sequence/170.obj new file mode 100644 index 00000000..71e3e46c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/170.obj @@ -0,0 +1,6 @@ +v -3.2786354227e-01 1.0354927081e+00 4.2715286179e-01 +v 1.4891674223e+00 1.0576426304e+00 -4.0825576181e-01 +v 5.0763387265e-01 9.4307557291e-01 2.2419263611e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/171.obj b/tutorials/ipc_quick_start_guide/input/sequence/171.obj new file mode 100644 index 00000000..79ff3803 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/171.obj @@ -0,0 +1,6 @@ +v -3.4638795205e-01 1.0374717312e+00 4.6335615673e-01 +v 1.4364441588e+00 1.0635750409e+00 -4.4263942560e-01 +v 5.5971299787e-01 9.3728628543e-01 2.2435088625e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/172.obj b/tutorials/ipc_quick_start_guide/input/sequence/172.obj new file mode 100644 index 00000000..d1b912d4 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/172.obj @@ -0,0 +1,6 @@ +v -3.6286032638e-01 1.0392243152e+00 4.9885540452e-01 +v 1.3830280659e+00 1.0695828716e+00 -4.7631216737e-01 +v 6.1243051980e-01 9.3143367224e-01 2.2416085866e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/173.obj b/tutorials/ipc_quick_start_guide/input/sequence/173.obj new file mode 100644 index 00000000..7c9517a2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/173.obj @@ -0,0 +1,6 @@ +v -3.7725495286e-01 1.0407477246e+00 5.3359517762e-01 +v 1.3290025235e+00 1.0756567447e+00 -5.0922144005e-01 +v 6.6570414826e-01 9.2552686909e-01 2.2362284848e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/174.obj b/tutorials/ipc_quick_start_guide/input/sequence/174.obj new file mode 100644 index 00000000..ec0fd36c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/174.obj @@ -0,0 +1,6 @@ +v -3.8954936235e-01 1.0420395814e+00 5.6752123400e-01 +v 1.2744518631e+00 1.0817871792e+00 -5.4131588828e-01 +v 7.1945072505e-01 9.1957509632e-01 2.2273769407e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/175.obj b/tutorials/ipc_quick_start_guide/input/sequence/175.obj new file mode 100644 index 00000000..928d1b06 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/175.obj @@ -0,0 +1,6 @@ +v -3.9972436409e-01 1.0430978692e+00 6.0058060182e-01 +v 1.2194612356e+00 1.0879646058e+00 -5.7254542862e-01 +v 7.7358635367e-01 9.1358764446e-01 2.2150677564e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/176.obj b/tutorials/ipc_quick_start_guide/input/sequence/176.obj new file mode 100644 index 00000000..202d732a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/176.obj @@ -0,0 +1,6 @@ +v -4.0776407558e-01 1.0439209361e+00 6.3272166209e-01 +v 1.1641164789e+00 1.0941793818e+00 -6.0286132774e-01 +v 8.2802653036e-01 9.0757385976e-01 2.1993201314e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/177.obj b/tutorials/ipc_quick_start_guide/input/sequence/177.obj new file mode 100644 index 00000000..579caa89 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/177.obj @@ -0,0 +1,6 @@ +v -4.1365594748e-01 1.0445074973e+00 6.6389422927e-01 +v 1.1085039835e+00 1.1004218064e+00 -6.3221627842e-01 +v 8.8268627596e-01 9.0154312953e-01 2.1801586324e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/178.obj b/tutorials/ipc_quick_start_guide/input/sequence/178.obj new file mode 100644 index 00000000..411b7ae6 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/178.obj @@ -0,0 +1,6 @@ +v -4.1739078310e-01 1.0448566374e+00 6.9404962961e-01 +v 1.0527105580e+00 1.1066821353e+00 -6.6056447348e-01 +v 9.3748026858e-01 8.9550486757e-01 2.1576131551e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/179.obj b/tutorials/ipc_quick_start_guide/input/sequence/179.obj new file mode 100644 index 00000000..e444d432 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/179.obj @@ -0,0 +1,6 @@ +v -4.1896275279e-01 1.0449678114e+00 7.2314077709e-01 +v 9.9682329333e-01 1.1129505965e+00 -6.8786167723e-01 +v 9.9232297677e-01 8.8946849942e-01 2.1317188773e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/18.obj b/tutorials/ipc_quick_start_guide/input/sequence/18.obj new file mode 100644 index 00000000..8791a60d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/18.obj @@ -0,0 +1,6 @@ +v -4.1379499144e-01 1.0445217332e+00 6.6447060586e-01 +v 1.1072644954e+00 1.1005610758e+00 -6.3292587544e-01 +v 8.8383365657e-01 9.0141685215e-01 2.1796210554e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/180.obj b/tutorials/ipc_quick_start_guide/input/sequence/180.obj new file mode 100644 index 00000000..bb320f0f --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/180.obj @@ -0,0 +1,6 @@ +v -4.1836940308e-01 1.0448408458e+00 7.5112224695e-01 +v 9.4092942692e-01 1.1192174054e+00 -7.1406529453e-01 +v 1.0471287930e+00 8.8344344766e-01 2.1025162043e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/181.obj b/tutorials/ipc_quick_start_guide/input/sequence/181.obj new file mode 100644 index 00000000..3f5f1202 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/181.obj @@ -0,0 +1,6 @@ +v -4.1557072251e-01 1.0444668428e+00 7.8003501055e-01 +v 8.8515714443e-01 1.1254636835e+00 -7.3704977335e-01 +v 1.1018531054e+00 8.7743002109e-01 2.0721353695e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/182.obj b/tutorials/ipc_quick_start_guide/input/sequence/182.obj new file mode 100644 index 00000000..3f74de12 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/182.obj @@ -0,0 +1,6 @@ +v -4.1056935958e-01 1.0438460040e+00 8.0992152904e-01 +v 8.2959522420e-01 1.1316792986e+00 -7.5669164308e-01 +v 1.1564122116e+00 8.7143722423e-01 2.0407113889e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/183.obj b/tutorials/ipc_quick_start_guide/input/sequence/183.obj new file mode 100644 index 00000000..9bf522d6 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/183.obj @@ -0,0 +1,6 @@ +v -4.0337313590e-01 1.0429793017e+00 8.4073440365e-01 +v 7.7433038143e-01 1.1378545515e+00 -7.7296099072e-01 +v 1.2107209324e+00 8.6547441485e-01 2.0082925670e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/184.obj b/tutorials/ipc_quick_start_guide/input/sequence/184.obj new file mode 100644 index 00000000..18d220ea --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/184.obj @@ -0,0 +1,6 @@ +v -3.9399329914e-01 1.0418680921e+00 8.7242478960e-01 +v 7.1944886759e-01 1.1439798063e+00 -7.8583316764e-01 +v 1.2646944795e+00 8.5955090390e-01 1.9749287609e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/185.obj b/tutorials/ipc_quick_start_guide/input/sequence/185.obj new file mode 100644 index 00000000..fb7f6634 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/185.obj @@ -0,0 +1,6 @@ +v -3.8244450551e-01 1.0405141129e+00 9.0494247236e-01 +v 6.6503633578e-01 1.1500455049e+00 -7.9528882806e-01 +v 1.3182485878e+00 8.5367594100e-01 1.9406713031e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/186.obj b/tutorials/ipc_quick_start_guide/input/sequence/186.obj new file mode 100644 index 00000000..e721ec22 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/186.obj @@ -0,0 +1,6 @@ +v -3.6874479687e-01 1.0389194811e+00 9.3823594599e-01 +v 6.1117770704e-01 1.1560421822e+00 -8.0131395924e-01 +v 1.3712996467e+00 8.4785869998e-01 1.9055729210e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/187.obj b/tutorials/ipc_quick_start_guide/input/sequence/187.obj new file mode 100644 index 00000000..890df145 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/187.obj @@ -0,0 +1,6 @@ +v -3.5291557258e-01 1.0370866889e+00 9.7225249362e-01 +v 5.5795703781e-01 1.1619604810e+00 -8.0389990335e-01 +v 1.4237648312e+00 8.4210826459e-01 1.8696876543e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/188.obj b/tutorials/ipc_quick_start_guide/input/sequence/188.obj new file mode 100644 index 00000000..d8475a81 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/188.obj @@ -0,0 +1,6 @@ +v -3.3498155608e-01 1.0350186006e+00 1.0069382697e+00 +v 5.0545738867e-01 1.1677911663e+00 -8.0304337100e-01 +v 1.4755622306e+00 8.3643361427e-01 1.8330707715e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/189.obj b/tutorials/ipc_quick_start_guide/input/sequence/189.obj new file mode 100644 index 00000000..13db5414 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/189.obj @@ -0,0 +1,6 @@ +v -3.1497075630e-01 1.0327184476e+00 1.0422383839e+00 +v 4.5376069475e-01 1.1735251398e+00 -7.9874644636e-01 +v 1.5266109765e+00 8.3084361017e-01 1.7957786829e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/19.obj b/tutorials/ipc_quick_start_guide/input/sequence/19.obj new file mode 100644 index 00000000..0befbe45 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/19.obj @@ -0,0 +1,6 @@ +v -4.1748314090e-01 1.0448657357e+00 6.9460350201e-01 +v 1.0514681173e+00 1.1068216842e+00 -6.6125182263e-01 +v 9.3862960994e-01 8.9537853108e-01 2.1570028260e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/190.obj b/tutorials/ipc_quick_start_guide/input/sequence/190.obj new file mode 100644 index 00000000..1921d200 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/190.obj @@ -0,0 +1,6 @@ +v -2.9291442394e-01 1.0301898236e+00 1.0780969871e+00 +v 4.0294763777e-01 1.1791534545e+00 -7.9101658390e-01 +v 1.5768313694e+00 8.2534698133e-01 1.7578688526e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/191.obj b/tutorials/ipc_quick_start_guide/input/sequence/191.obj new file mode 100644 index 00000000..3ed86982 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/191.obj @@ -0,0 +1,6 @@ +v -2.6884700270e-01 1.0274366790e+00 1.1144573584e+00 +v 3.5309752015e-01 1.1846673278e+00 -7.7986659677e-01 +v 1.6261450026e+00 8.1995231101e-01 1.7193997092e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/192.obj b/tutorials/ipc_quick_start_guide/input/sequence/192.obj new file mode 100644 index 00000000..28439eef --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/192.obj @@ -0,0 +1,6 @@ +v -2.4280607550e-01 1.0244633145e+00 1.1512619935e+00 +v 3.0428814119e-01 1.1900581563e+00 -7.6531463680e-01 +v 1.6744748849e+00 8.1466802333e-01 1.6804305542e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/193.obj b/tutorials/ipc_quick_start_guide/input/sequence/193.obj new file mode 100644 index 00000000..2627283d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/193.obj @@ -0,0 +1,6 @@ +v -2.1483230583e-01 1.0212743747e+00 1.1884526949e+00 +v 2.5659567565e-01 1.1953175283e+00 -7.4738416616e-01 +v 1.7217455606e+00 8.0950237011e-01 1.6410214699e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/194.obj b/tutorials/ipc_quick_start_guide/input/sequence/194.obj new file mode 100644 index 00000000..710393e4 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/194.obj @@ -0,0 +1,6 @@ +v -1.8496937427e-01 1.0178748407e+00 1.2259706621e+00 +v 2.1009455482e-01 1.2004372373e+00 -7.2610392071e-01 +v 1.7678832276e+00 8.0446341798e-01 1.6012332250e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/195.obj b/tutorials/ipc_quick_start_guide/input/sequence/195.obj new file mode 100644 index 00000000..472d3220 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/195.obj @@ -0,0 +1,6 @@ +v -1.5326391028e-01 1.0142700223e+00 1.2637565841e+00 +v 1.6485735037e-01 1.2054092950e+00 -7.0150786521e-01 +v 1.8128158520e+00 7.9955903579e-01 1.5611271800e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/196.obj b/tutorials/ipc_quick_start_guide/input/sequence/196.obj new file mode 100644 index 00000000..5b80f055 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/196.obj @@ -0,0 +1,6 @@ +v -1.1976541947e-01 1.0104655497e+00 1.3017507313e+00 +v 1.2095466102e-01 1.2102259435e+00 -6.7363514023e-01 +v 1.8564732814e+00 7.9479688234e-01 1.5207651919e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/197.obj b/tutorials/ipc_quick_start_guide/input/sequence/197.obj new file mode 100644 index 00000000..497edb49 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/197.obj @@ -0,0 +1,6 @@ +v -8.4526206259e-02 1.0064673648e+00 1.3398930494e+00 +v 7.8455002403e-02 1.2148796674e+00 -6.4253000111e-01 +v 1.8987873536e+00 7.9018439443e-01 1.4802095167e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/198.obj b/tutorials/ipc_quick_start_guide/input/sequence/198.obj new file mode 100644 index 00000000..53d227f0 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/198.obj @@ -0,0 +1,6 @@ +v -4.7601292286e-02 1.0022817118e+00 1.3781232527e+00 +v 3.7424700050e-02 1.2193632058e+00 -6.0824174884e-01 +v 1.9396920033e+00 7.8572877520e-01 1.4395227131e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/199.obj b/tutorials/ipc_quick_start_guide/input/sequence/199.obj new file mode 100644 index 00000000..36309102 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/199.obj @@ -0,0 +1,6 @@ +v -9.0483304883e-03 9.9791512771e-01 1.4163809181e+00 +v -2.0722141010e-03 1.2236695632e+00 -5.7082465311e-01 +v 1.9791233655e+00 7.8143698296e-01 1.3987675444e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/2.obj b/tutorials/ipc_quick_start_guide/input/sequence/2.obj new file mode 100644 index 00000000..b9e5e4be --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/2.obj @@ -0,0 +1,6 @@ +v -7.5406338591e-02 1.0082028056e+00 8.0036594020e-02 +v 1.9184283582e+00 1.0092300871e+00 -7.6877861927e-02 +v 8.1511105990e-02 9.9078336354e-01 2.0737952250e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/20.obj b/tutorials/ipc_quick_start_guide/input/sequence/20.obj new file mode 100644 index 00000000..26778b20 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/20.obj @@ -0,0 +1,6 @@ +v -4.1900833570e-01 1.0449717644e+00 7.2367114587e-01 +v 9.9557978411e-01 1.1130902136e+00 -6.8852584045e-01 +v 9.9347242938e-01 8.8934230750e-01 2.1310366138e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/200.obj b/tutorials/ipc_quick_start_guide/input/sequence/200.obj new file mode 100644 index 00000000..6572a07d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/200.obj @@ -0,0 +1,6 @@ +v 3.0726735975e-02 9.9341282843e-01 1.4546124533e+00 +v -4.0319850572e-02 1.2278304176e+00 -5.3033099423e-01 +v 2.0166741258e+00 7.7735411696e-01 1.3580137539e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/21.obj b/tutorials/ipc_quick_start_guide/input/sequence/21.obj new file mode 100644 index 00000000..fa4510a9 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/21.obj @@ -0,0 +1,6 @@ +v -4.1836819536e-01 1.0448396539e+00 7.5162814937e-01 +v 9.3968673478e-01 1.1193568791e+00 -7.1470536994e-01 +v 1.0482765072e+00 8.8331760378e-01 2.1017629366e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/22.obj b/tutorials/ipc_quick_start_guide/input/sequence/22.obj new file mode 100644 index 00000000..b39332ed --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/22.obj @@ -0,0 +1,6 @@ +v -4.1552185999e-01 1.0444603096e+00 7.8056244505e-01 +v 8.8391807520e-01 1.1256025979e+00 -7.3761797369e-01 +v 1.1029981557e+00 8.7730452344e-01 2.0713590616e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/23.obj b/tutorials/ipc_quick_start_guide/input/sequence/23.obj new file mode 100644 index 00000000..05e71b13 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/23.obj @@ -0,0 +1,6 @@ +v -4.1047297495e-01 1.0438341465e+00 8.1046948730e-01 +v 8.2836165562e-01 1.1318174436e+00 -7.5718726644e-01 +v 1.1575527542e+00 8.7131227539e-01 2.0399130675e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/24.obj b/tutorials/ipc_quick_start_guide/input/sequence/24.obj new file mode 100644 index 00000000..910d6f83 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/24.obj @@ -0,0 +1,6 @@ +v -4.0322943601e-01 1.0429621451e+00 8.4130184530e-01 +v 7.7310418264e-01 1.1379917181e+00 -7.7338344846e-01 +v 1.2118551305e+00 8.6535021657e-01 2.0074732931e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/25.obj b/tutorials/ipc_quick_start_guide/input/sequence/25.obj new file mode 100644 index 00000000..1c67f365 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/25.obj @@ -0,0 +1,6 @@ +v -3.9380256469e-01 1.0418456699e+00 8.7301064386e-01 +v 7.1823189622e-01 1.1441157871e+00 -7.8618198536e-01 +v 1.2658205064e+00 8.5942765675e-01 1.9740896285e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/26.obj b/tutorials/ipc_quick_start_guide/input/sequence/26.obj new file mode 100644 index 00000000..9c171a23 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/26.obj @@ -0,0 +1,6 @@ +v -3.8220710159e-01 1.0404864626e+00 9.0554560637e-01 +v 6.6383048989e-01 1.1501800853e+00 -7.9556363733e-01 +v 1.3193645756e+00 8.5355384851e-01 1.9398134712e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/27.obj b/tutorials/ipc_quick_start_guide/input/sequence/27.obj new file mode 100644 index 00000000..da0b972a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/27.obj @@ -0,0 +1,6 @@ +v -3.6846115649e-01 1.0388866568e+00 9.3885523299e-01 +v 6.0998481121e-01 1.1561751605e+00 -8.0151452238e-01 +v 1.3724037985e+00 8.4773795954e-01 1.9046975453e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/28.obj b/tutorials/ipc_quick_start_guide/input/sequence/28.obj new file mode 100644 index 00000000..db4a9e44 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/28.obj @@ -0,0 +1,6 @@ +v -3.5258619870e-01 1.0370487494e+00 9.7288677982e-01 +v 5.5677889629e-01 1.1620916566e+00 -8.0402609932e-01 +v 1.4248553678e+00 8.4198907140e-01 1.8687959181e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/29.obj b/tutorials/ipc_quick_start_guide/input/sequence/29.obj new file mode 100644 index 00000000..e84b099b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/29.obj @@ -0,0 +1,6 @@ +v -3.3460702366e-01 1.0349756124e+00 1.0075863788e+00 +v 5.0429578263e-01 1.1679203414e+00 -8.0309519473e-01 +v 1.4766373945e+00 8.3631616097e-01 1.8321638832e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/3.obj b/tutorials/ipc_quick_start_guide/input/sequence/3.obj new file mode 100644 index 00000000..1ffd20fc --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/3.obj @@ -0,0 +1,6 @@ +v -1.1069483339e-01 1.0120362230e+00 1.1992758103e-01 +v 1.8754422565e+00 1.0140891825e+00 -1.1513676236e-01 +v 1.2437623005e-01 9.8595114853e-01 2.1058936341e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/30.obj b/tutorials/ipc_quick_start_guide/input/sequence/30.obj new file mode 100644 index 00000000..24ae51a7 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/30.obj @@ -0,0 +1,6 @@ +v -3.1455171004e-01 1.0326704852e+00 1.0428991177e+00 +v 4.5261737952e-01 1.1736521200e+00 -7.9872400898e-01 +v 1.5276690345e+00 8.3072808680e-01 1.7948578742e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/31.obj b/tutorials/ipc_quick_start_guide/input/sequence/31.obj new file mode 100644 index 00000000..1ab5a35a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/31.obj @@ -0,0 +1,6 @@ +v -2.9245157836e-01 1.0301369692e+00 1.0787691282e+00 +v 4.0182433996e-01 1.1792780486e+00 -7.9092011233e-01 +v 1.5778706151e+00 8.2523357487e-01 1.7569353771e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/32.obj b/tutorials/ipc_quick_start_guide/input/sequence/32.obj new file mode 100644 index 00000000..4c06aece --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/32.obj @@ -0,0 +1,6 @@ +v -2.6834114048e-01 1.0273790225e+00 1.1151396715e+00 +v 3.5199593499e-01 1.1847893483e+00 -7.7969643347e-01 +v 1.6271637589e+00 8.1984120511e-01 1.7184548402e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/33.obj b/tutorials/ipc_quick_start_guide/input/sequence/33.obj new file mode 100644 index 00000000..f8a9f0db --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/33.obj @@ -0,0 +1,6 @@ +v -2.4225804663e-01 1.0244009534e+00 1.1519532274e+00 +v 3.0320992980e-01 1.1901774198e+00 -7.6507123930e-01 +v 1.6754715071e+00 8.1455939805e-01 1.6794755827e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/34.obj b/tutorials/ipc_quick_start_guide/input/sequence/34.obj new file mode 100644 index 00000000..3ceb98d5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/34.obj @@ -0,0 +1,6 @@ +v -2.1424302615e-01 1.0212074139e+00 1.1891515848e+00 +v 2.5554246252e-01 1.1954338557e+00 -7.4706810611e-01 +v 1.7227184388e+00 8.0939640161e-01 1.6400577025e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/35.obj b/tutorials/ipc_quick_start_guide/input/sequence/35.obj new file mode 100644 index 00000000..dd6291b4 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/35.obj @@ -0,0 +1,6 @@ +v -1.8433982383e-01 1.0178033920e+00 1.2266759314e+00 +v 2.0906792528e-01 1.2005504543e+00 -7.2571588322e-01 +v 1.7688307889e+00 8.0436027831e-01 1.6002619819e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/36.obj b/tutorials/ipc_quick_start_guide/input/sequence/36.obj new file mode 100644 index 00000000..b92747d2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/36.obj @@ -0,0 +1,6 @@ +v -1.5259513198e-01 1.0141942044e+00 1.2644669463e+00 +v 1.6385884803e-01 1.2055192318e+00 -7.0104864765e-01 +v 1.8137365633e+00 7.9945889247e-01 1.5601497930e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/37.obj b/tutorials/ipc_quick_start_guide/input/sequence/37.obj new file mode 100644 index 00000000..022105a1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/37.obj @@ -0,0 +1,6 @@ +v -1.1905848374e-01 1.0103854843e+00 1.3024649301e+00 +v 1.1998574163e-01 1.2103324404e+00 -6.7310562309e-01 +v 1.8573656952e+00 7.9469989337e-01 1.5197829618e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/38.obj b/tutorials/ipc_quick_start_guide/input/sequence/38.obj new file mode 100644 index 00000000..ee2cf9c5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/38.obj @@ -0,0 +1,6 @@ +v -8.3782273006e-02 1.0063831835e+00 1.3406097849e+00 +v 7.7517121993e-02 1.2149825648e+00 -6.4193119595e-01 +v 1.8996500204e+00 7.9009071787e-01 1.4792237917e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/39.obj b/tutorials/ipc_quick_start_guide/input/sequence/39.obj new file mode 100644 index 00000000..f30861f4 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/39.obj @@ -0,0 +1,6 @@ +v -4.6821579160e-02 1.0021935528e+00 1.3788412211e+00 +v 3.6519266208e-02 1.2194623497e+00 -6.0757477539e-01 +v 1.9405235202e+00 7.8563856398e-01 1.4385348469e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/4.obj b/tutorials/ipc_quick_start_guide/input/sequence/4.obj new file mode 100644 index 00000000..3d80823a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/4.obj @@ -0,0 +1,6 @@ +v -1.4429925280e-01 1.0156829111e+00 1.5965059590e-01 +v 1.8310780146e+00 1.0191009495e+00 -1.5319596174e-01 +v 1.6855924072e-01 9.8097964987e-01 2.1347240747e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/40.obj b/tutorials/ipc_quick_start_guide/input/sequence/40.obj new file mode 100644 index 00000000..18b2baa8 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/40.obj @@ -0,0 +1,6 @@ +v -8.2341109907e-03 9.9782313529e-01 1.4170988136e+00 +v -2.9438444365e-03 1.2237648056e+00 -5.7009073752e-01 +v 1.9799223781e+00 7.8135038459e-01 1.3977788939e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/41.obj b/tutorials/ipc_quick_start_guide/input/sequence/41.obj new file mode 100644 index 00000000..6c875ef0 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/41.obj @@ -0,0 +1,6 @@ +v 3.1540635138e-02 9.9332087315e-01 1.4553296364e+00 +v -4.1189872568e-02 1.2279253367e+00 -5.2953080116e-01 +v 2.0174058311e+00 7.7727499352e-01 1.3570263434e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/42.obj b/tutorials/ipc_quick_start_guide/input/sequence/42.obj new file mode 100644 index 00000000..f811a9c5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/42.obj @@ -0,0 +1,6 @@ +v 7.1240741436e-02 9.8883015739e-01 1.4920688805e+00 +v -7.9358948770e-02 1.2320738118e+00 -4.8736341073e-01 +v 2.0517155381e+00 7.7355511546e-01 1.3149356763e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/43.obj b/tutorials/ipc_quick_start_guide/input/sequence/43.obj new file mode 100644 index 00000000..cd34a4df --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/43.obj @@ -0,0 +1,6 @@ +v 1.1080219866e-01 9.8435845094e-01 1.5271553511e+00 +v -1.1739353170e-01 1.2362042082e+00 -4.4375823424e-01 +v 2.0827959041e+00 7.7019701006e-01 1.2714687480e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/44.obj b/tutorials/ipc_quick_start_guide/input/sequence/44.obj new file mode 100644 index 00000000..9c9da813 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/44.obj @@ -0,0 +1,6 @@ +v 1.5016325330e-01 9.7991273389e-01 1.5605342796e+00 +v -1.5523425066e-01 1.2403100787e+00 -3.9878333759e-01 +v 2.1105984141e+00 7.6720591917e-01 1.2266934085e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/45.obj b/tutorials/ipc_quick_start_guide/input/sequence/45.obj new file mode 100644 index 00000000..f94ad09f --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/45.obj @@ -0,0 +1,6 @@ +v 1.8926246466e-01 9.7549994581e-01 1.5921535629e+00 +v -1.9282203756e-01 1.2443850141e+00 -3.5250892473e-01 +v 2.1350796699e+00 7.6458651173e-01 1.1806795503e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/46.obj b/tutorials/ipc_quick_start_guide/input/sequence/46.obj new file mode 100644 index 00000000..8aca4eb1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/46.obj @@ -0,0 +1,6 @@ +v 2.2803880077e-01 9.7112697483e-01 1.6219638446e+00 +v -2.3009821912e-01 1.2484226536e+00 -3.0500722812e-01 +v 2.1562014576e+00 7.6234287647e-01 1.1334989992e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/47.obj b/tutorials/ipc_quick_start_guide/input/sequence/47.obj new file mode 100644 index 00000000..7e7cee3e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/47.obj @@ -0,0 +1,6 @@ +v 2.6643173366e-01 9.6680064696e-01 1.6499185921e+00 +v -2.6700460848e-01 1.2524166945e+00 -2.5635239595e-01 +v 2.1739308071e+00 7.6047851560e-01 1.0852254020e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/48.obj b/tutorials/ipc_quick_start_guide/input/sequence/48.obj new file mode 100644 index 00000000..cfb06474 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/48.obj @@ -0,0 +1,6 @@ +v 3.0438133383e-01 9.6252771539e-01 1.6759741691e+00 +v -3.0348359600e-01 1.2563609023e+00 -2.0662037642e-01 +v 2.1882400440e+00 7.5899633928e-01 1.0359341117e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/49.obj b/tutorials/ipc_quick_start_guide/input/sequence/49.obj new file mode 100644 index 00000000..b20c094e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/49.obj @@ -0,0 +1,6 @@ +v 3.4182836382e-01 9.5831484994e-01 1.7000899041e+00 +v -3.3947823919e-01 1.2602491201e+00 -1.5588879916e-01 +v 2.1991068325e+00 7.5789866108e-01 9.8570207019e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/5.obj b/tutorials/ipc_quick_start_guide/input/sequence/5.obj new file mode 100644 index 00000000..8ea5688c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/5.obj @@ -0,0 +1,6 @@ +v -1.7616714199e-01 1.0191371777e+00 1.9914361797e-01 +v 1.7854048829e+00 1.0242575649e+00 -1.9099606589e-01 +v 2.1399116985e-01 9.7587662794e-01 2.1602415290e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/50.obj b/tutorials/ipc_quick_start_guide/input/sequence/50.obj new file mode 100644 index 00000000..2415f819 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/50.obj @@ -0,0 +1,6 @@ +v 3.7871437063e-01 9.5416862670e-01 1.7222281532e+00 +v -3.7493235161e-01 1.2640752787e+00 -1.0423685407e-01 +v 2.2065142102e+00 7.5718719441e-01 9.3460768745e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/51.obj b/tutorials/ipc_quick_start_guide/input/sequence/51.obj new file mode 100644 index 00000000..87bd020f --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/51.obj @@ -0,0 +1,6 @@ +v 4.1498177703e-01 9.5009551772e-01 1.7423543596e+00 +v -4.0979059058e-01 1.2678334055e+00 -5.1745167726e-02 +v 2.2104506147e+00 7.5686304981e-01 8.8273071973e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/52.obj b/tutorials/ipc_quick_start_guide/input/sequence/52.obj new file mode 100644 index 00000000..cd8489f1 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/52.obj @@ -0,0 +1,6 @@ +v 4.5057397138e-01 9.4610188091e-01 1.7604371071e+00 +v -4.4399854352e-01 1.2715176341e+00 1.5043225216e-03 +v 2.2109099020e+00 7.5692673321e-01 8.3015214485e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/53.obj b/tutorials/ipc_quick_start_guide/input/sequence/53.obj new file mode 100644 index 00000000..c7961963 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/53.obj @@ -0,0 +1,6 @@ +v 4.8543536160e-01 9.4219395293e-01 1.7764481544e+00 +v -4.7750277941e-01 1.2751222099e+00 5.5428442213e-02 +v 2.2078913584e+00 7.5737814411e-01 7.7695408902e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/54.obj b/tutorials/ipc_quick_start_guide/input/sequence/54.obj new file mode 100644 index 00000000..540d9916 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/54.obj @@ -0,0 +1,6 @@ +v 5.1951156670e-01 9.3837783106e-01 1.7903625277e+00 +v -5.1025103420e-01 1.2786415100e+00 1.0994307058e-01 +v 2.2013996998e+00 7.5821657817e-01 7.2321953979e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/55.obj b/tutorials/ipc_quick_start_guide/input/sequence/55.obj new file mode 100644 index 00000000..f4f90270 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/55.obj @@ -0,0 +1,6 @@ +v 5.5274939514e-01 9.3465947196e-01 1.8021585078e+00 +v -5.4219218904e-01 1.2820700413e+00 1.6496311325e-01 +v 2.1914450598e+00 7.5944072676e-01 6.6903237487e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/56.obj b/tutorials/ipc_quick_start_guide/input/sequence/56.obj new file mode 100644 index 00000000..744ea688 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/56.obj @@ -0,0 +1,6 @@ +v 5.8509696467e-01 9.3104467966e-01 1.8118176816e+00 +v -5.7327638503e-01 1.2854024517e+00 2.2040268621e-01 +v 2.1780429773e+00 7.6104867886e-01 6.1447717778e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/57.obj b/tutorials/ipc_quick_start_guide/input/sequence/57.obj new file mode 100644 index 00000000..8bac0d36 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/57.obj @@ -0,0 +1,6 @@ +v 6.1650378251e-01 9.2753909641e-01 1.8193249712e+00 +v -6.0345510095e-01 1.2886335395e+00 2.7617525063e-01 +v 2.1612143725e+00 7.6303792443e-01 5.5963910679e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/58.obj b/tutorials/ipc_quick_start_guide/input/sequence/58.obj new file mode 100644 index 00000000..00bed694 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/58.obj @@ -0,0 +1,6 @@ +v 6.4692082445e-01 9.2414819459e-01 1.8246686583e+00 +v -6.3268122875e-01 1.2917582611e+00 3.3219374807e-01 +v 2.1409855147e+00 7.6540535835e-01 5.0460376170e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/59.obj b/tutorials/ipc_quick_start_guide/input/sequence/59.obj new file mode 100644 index 00000000..b6637f41 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/59.obj @@ -0,0 +1,6 @@ +v 6.7630061094e-01 9.2087726688e-01 1.8278404013e+00 +v -6.6090914752e-01 1.2947717388e+00 3.8837073606e-01 +v 2.1173879804e+00 7.6814728514e-01 4.4945705024e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/6.obj b/tutorials/ipc_quick_start_guide/input/sequence/6.obj new file mode 100644 index 00000000..ddba663b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/6.obj @@ -0,0 +1,6 @@ +v -2.0624875680e-01 1.0223936309e+00 2.3834498560e-01 +v 1.7384941550e+00 1.0295509796e+00 -2.2847808510e-01 +v 2.6060109979e-01 9.7065004840e-01 2.1824061505e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/60.obj b/tutorials/ipc_quick_start_guide/input/sequence/60.obj new file mode 100644 index 00000000..d51a601a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/60.obj @@ -0,0 +1,6 @@ +v 7.0459728216e-01 9.1773141953e-01 1.8288352500e+00 +v -6.8809479432e-01 1.2976692688e+00 4.4461852497e-01 +v 2.0904586046e+00 7.7125942476e-01 3.9428505399e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/61.obj b/tutorials/ipc_quick_start_guide/input/sequence/61.obj new file mode 100644 index 00000000..7ccb4d61 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/61.obj @@ -0,0 +1,6 @@ +v 7.3275470880e-01 9.1460583750e-01 1.8276320090e+00 +v -7.1320769293e-01 1.3003366026e+00 5.0082967247e-01 +v 2.0612274637e+00 7.7462719376e-01 3.3915425197e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/62.obj b/tutorials/ipc_quick_start_guide/input/sequence/62.obj new file mode 100644 index 00000000..dbacffef --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/62.obj @@ -0,0 +1,6 @@ +v 7.6192807054e-01 9.1137223166e-01 1.8242087183e+00 +v -7.3500951102e-01 1.3026364086e+00 5.5689259700e-01 +v 2.0309393182e+00 7.7811216721e-01 2.8412686248e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/63.obj b/tutorials/ipc_quick_start_guide/input/sequence/63.obj new file mode 100644 index 00000000..98417b8d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/63.obj @@ -0,0 +1,6 @@ +v 7.9207184378e-01 9.0803564782e-01 1.8185707210e+00 +v -7.5346620225e-01 1.3045650953e+00 6.1271978654e-01 +v 1.9996414614e+00 7.8170890358e-01 2.2928878054e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/64.obj b/tutorials/ipc_quick_start_guide/input/sequence/64.obj new file mode 100644 index 00000000..3429c0c5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/64.obj @@ -0,0 +1,6 @@ +v 8.2313899012e-01 9.0460129260e-01 1.8107268175e+00 +v -7.6854894185e-01 1.3061196506e+00 6.6822409703e-01 +v 1.9673827624e+00 7.8541178690e-01 1.7472560567e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/65.obj b/tutorials/ipc_quick_start_guide/input/sequence/65.obj new file mode 100644 index 00000000..bf09263d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/65.obj @@ -0,0 +1,6 @@ +v 8.5508102975e-01 9.0107452527e-01 1.8006892515e+00 +v -7.8023417163e-01 1.3072976461e+00 7.2331888839e-01 +v 1.9342135904e+00 7.8921503549e-01 1.2052250827e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/66.obj b/tutorials/ipc_quick_start_guide/input/sequence/66.obj new file mode 100644 index 00000000..2795783d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/66.obj @@ -0,0 +1,6 @@ +v 8.8784811725e-01 8.9746084931e-01 1.7884736908e+00 +v -7.8850363684e-01 1.3080972415e+00 7.7791815979e-01 +v 1.9001857356e+00 7.9311271102e-01 6.6764096682e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/67.obj b/tutorials/ipc_quick_start_guide/input/sequence/67.obj new file mode 100644 index 00000000..a188c344 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/67.obj @@ -0,0 +1,6 @@ +v 9.2138911931e-01 8.9376590387e-01 1.7740992032e+00 +v -7.9334441454e-01 1.3085171869e+00 8.3193668392e-01 +v 1.8653523286e+00 7.9709872776e-01 1.3534285107e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/68.obj b/tutorials/ipc_quick_start_guide/input/sequence/68.obj new file mode 100644 index 00000000..87965591 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/68.obj @@ -0,0 +1,6 @@ +v 9.5565169458e-01 8.8999545495e-01 1.7575882261e+00 +v -7.9474893382e-01 1.3085568253e+00 8.8529013995e-01 +v 1.8297677576e+00 8.0116686208e-01 -3.9083837373e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/69.obj b/tutorials/ipc_quick_start_guide/input/sequence/69.obj new file mode 100644 index 00000000..5b816d84 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/69.obj @@ -0,0 +1,6 @@ +v 9.9058237536e-01 8.8615538641e-01 1.7389665323e+00 +v -7.9271498763e-01 1.3082160931e+00 9.3789524521e-01 +v 1.7934875831e+00 8.0531076217e-01 -9.1008136502e-02 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/7.obj b/tutorials/ipc_quick_start_guide/input/sequence/7.obj new file mode 100644 index 00000000..aaa7a37d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/7.obj @@ -0,0 +1,6 @@ +v -2.3449714136e-01 1.0254471875e+00 2.7719349239e-01 +v 1.6904190564e+00 1.0349729309e+00 -2.6558352613e-01 +v 3.0831627408e-01 9.6530806978e-01 2.2011833267e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/70.obj b/tutorials/ipc_quick_start_guide/input/sequence/70.obj new file mode 100644 index 00000000..58c7e1f5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/70.obj @@ -0,0 +1,6 @@ +v 1.0261266511e+00 8.8225169077e-01 1.7182631891e+00 +v -7.8724573619e-01 1.3074955206e+00 9.8966988518e-01 +v 1.7565684516e+00 8.0952395795e-01 -1.4215756104e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/71.obj b/tutorials/ipc_quick_start_guide/input/sequence/71.obj new file mode 100644 index 00000000..e7f2a0d6 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/71.obj @@ -0,0 +1,6 @@ +v 1.0622290534e+00 8.7829045992e-01 1.6955105131e+00 +v -7.7834970210e-01 1.3063962309e+00 1.0405332417e+00 +v 1.7190680068e+00 8.1379987118e-01 -1.9245226931e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/72.obj b/tutorials/ipc_quick_start_guide/input/sequence/72.obj new file mode 100644 index 00000000..b3609166 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/72.obj @@ -0,0 +1,6 @@ +v 1.0988332426e+00 8.7427787554e-01 1.6707440200e+00 +v -7.6604075699e-01 1.3049199383e+00 1.0904059189e+00 +v 1.6810448000e+00 8.1813182571e-01 -2.4181375379e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/73.obj b/tutorials/ipc_quick_start_guide/input/sequence/73.obj new file mode 100644 index 00000000..bb393926 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/73.obj @@ -0,0 +1,6 @@ +v 1.1358820960e+00 8.7022019945e-01 1.6440023688e+00 +v -7.5033809992e-01 1.3030689455e+00 1.1392100676e+00 +v 1.6425581983e+00 8.2251305791e-01 -2.9016496368e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/74.obj b/tutorials/ipc_quick_start_guide/input/sequence/74.obj new file mode 100644 index 00000000..ac80da5b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/74.obj @@ -0,0 +1,6 @@ +v 1.1733177966e+00 8.6612376390e-01 1.6153273019e+00 +v -7.3126622733e-01 1.3008461404e+00 1.1868695063e+00 +v 1.6036682924e+00 8.2693672719e-01 -3.3743042519e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/75.obj b/tutorials/ipc_quick_start_guide/input/sequence/75.obj new file mode 100644 index 00000000..8ee73210 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/75.obj @@ -0,0 +1,6 @@ +v 1.2110819235e+00 8.6199496160e-01 1.5847635794e+00 +v -7.0885489491e-01 1.2982549909e+00 1.2333098405e+00 +v 1.5644358023e+00 8.3139592689e-01 -3.8353635936e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/76.obj b/tutorials/ipc_quick_start_guide/input/sequence/76.obj new file mode 100644 index 00000000..6b6806d5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/76.obj @@ -0,0 +1,6 @@ +v 1.2491155434e+00 8.5784023582e-01 1.5523589097e+00 +v -6.8313907110e-01 1.2952995403e+00 1.2784585786e+00 +v 1.5249219829e+00 8.3588369478e-01 -4.2841079712e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/77.obj b/tutorials/ipc_quick_start_guide/input/sequence/77.obj new file mode 100644 index 00000000..d0f3909a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/77.obj @@ -0,0 +1,6 @@ +v 1.2873593021e+00 8.5366607023e-01 1.5181638747e+00 +v -6.5415888249e-01 1.2919844000e+00 1.3222452451e+00 +v 1.4851885282e+00 8.4039302390e-01 -4.7198369181e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/78.obj b/tutorials/ipc_quick_start_guide/input/sequence/78.obj new file mode 100644 index 00000000..1a5e083b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/78.obj @@ -0,0 +1,6 @@ +v 1.3257535174e+00 8.4947897893e-01 1.4822318510e+00 +v -6.2195955124e-01 1.2883147433e+00 1.3646014907e+00 +v 1.4452974749e+00 8.4491687383e-01 -5.1418702831e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/79.obj b/tutorials/ipc_quick_start_guide/input/sequence/79.obj new file mode 100644 index 00000000..c5149652 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/79.obj @@ -0,0 +1,6 @@ +v 1.3642382725e+00 8.4528549613e-01 1.4446189267e+00 +v -5.8659132437e-01 1.2842962968e+00 1.4054611988e+00 +v 1.4053111060e+00 8.4944818143e-01 -5.5495492941e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/8.obj b/tutorials/ipc_quick_start_guide/input/sequence/8.obj new file mode 100644 index 00000000..d55c161a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/8.obj @@ -0,0 +1,6 @@ +v -2.6086820138e-01 1.0282930811e+00 3.1562848275e-01 +v 1.6412546300e+00 1.0405149553e+00 -3.0225448362e-01 +v 3.5706221100e-01 9.5985903078e-01 2.2165437324e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/80.obj b/tutorials/ipc_quick_start_guide/input/sequence/80.obj new file mode 100644 index 00000000..1e075c23 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/80.obj @@ -0,0 +1,6 @@ +v 1.4027535088e+00 8.4109214623e-01 1.4053928951e+00 +v -5.4810939544e-01 1.2799353116e+00 1.4447696706e+00 +v 1.3652918530e+00 8.5397985206e-01 -5.9421467699e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/81.obj b/tutorials/ipc_quick_start_guide/input/sequence/81.obj new file mode 100644 index 00000000..babe2e62 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/81.obj @@ -0,0 +1,6 @@ +v 1.4404805997e+00 8.3698808300e-01 1.3653756809e+00 +v -5.0733233925e-01 1.2753212031e+00 1.4832262419e+00 +v 1.3245436781e+00 8.5858742002e-01 -6.3114429366e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/82.obj b/tutorials/ipc_quick_start_guide/input/sequence/82.obj new file mode 100644 index 00000000..fbc353c9 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/82.obj @@ -0,0 +1,6 @@ +v 1.4766078255e+00 8.3306155741e-01 1.3254512776e+00 +v -4.6507663632e-01 1.2705430185e+00 1.5215924120e+00 +v 1.2823773579e+00 8.6334553802e-01 -6.6486460561e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/83.obj b/tutorials/ipc_quick_start_guide/input/sequence/83.obj new file mode 100644 index 00000000..130918b5 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/83.obj @@ -0,0 +1,6 @@ +v 1.5110787928e+00 8.2931869861e-01 1.2856820054e+00 +v -4.2140824627e-01 1.2656082165e+00 1.5598082931e+00 +v 1.2388587120e+00 8.6824677892e-01 -6.9532297684e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/84.obj b/tutorials/ipc_quick_start_guide/input/sequence/84.obj new file mode 100644 index 00000000..40bded0e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/84.obj @@ -0,0 +1,6 @@ +v 1.5438396938e+00 8.2576534912e-01 1.2461299424e+00 +v -3.7639533377e-01 1.2605245001e+00 1.5978142320e+00 +v 1.1940556707e+00 8.7328349212e-01 -7.2247186326e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/85.obj b/tutorials/ipc_quick_start_guide/input/sequence/85.obj new file mode 100644 index 00000000..cbde2b85 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/85.obj @@ -0,0 +1,6 @@ +v 1.5748393899e+00 8.2240705559e-01 1.2068568275e+00 +v -3.3010816229e-01 1.2552998048e+00 1.6355509029e+00 +v 1.1480381693e+00 8.7844781561e-01 -7.4626888664e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/86.obj b/tutorials/ipc_quick_start_guide/input/sequence/86.obj new file mode 100644 index 00000000..bd625f3a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/86.obj @@ -0,0 +1,6 @@ +v 1.6040294915e+00 8.1924906027e-01 1.1679239644e+00 +v -2.8261898434e-01 1.2499422862e+00 1.6729594007e+00 +v 1.1008780388e+00 8.8373168816e-01 -7.6667690092e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/87.obj b/tutorials/ipc_quick_start_guide/input/sequence/87.obj new file mode 100644 index 00000000..0ddc2e80 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/87.obj @@ -0,0 +1,6 @@ +v 1.6313644339e+00 8.1629629276e-01 1.1293921255e+00 +v -2.3400192866e-01 1.2444603071e+00 1.7099813323e+00 +v 1.0526488938e+00 8.8912686174e-01 -7.8366405013e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/88.obj b/tutorials/ipc_quick_start_guide/input/sequence/88.obj new file mode 100644 index 00000000..1edf552b --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/88.obj @@ -0,0 +1,6 @@ +v 1.6568015484e+00 8.1355336229e-01 1.0913214575e+00 +v -1.8433288461e-01 1.2388624247e+00 1.7465589082e+00 +v 1.0034260175e+00 8.9462491486e-01 -7.9720381788e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/89.obj b/tutorials/ipc_quick_start_guide/input/sequence/89.obj new file mode 100644 index 00000000..cf15c579 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/89.obj @@ -0,0 +1,6 @@ +v 1.6803011283e+00 8.1102455062e-01 1.0537713867e+00 +v -1.3368938361e-01 1.2331573772e+00 1.7826350323e+00 +v 9.5328624443e-01 9.0021726546e-01 -8.0727506935e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/9.obj b/tutorials/ipc_quick_start_guide/input/sequence/9.obj new file mode 100644 index 00000000..318a77b2 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/9.obj @@ -0,0 +1,6 @@ +v -2.8532077302e-01 1.0309268694e+00 3.5358994658e-01 +v 1.5910776192e+00 1.0461684021e+00 -3.3843373036e-01 +v 4.0676281988e-01 9.5431143716e-01 2.2284633759e+00 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/90.obj b/tutorials/ipc_quick_start_guide/input/sequence/90.obj new file mode 100644 index 00000000..eb2fa041 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/90.obj @@ -0,0 +1,6 @@ +v 1.7018264915e+00 8.0871380501e-01 1.0168005272e+00 +v -8.2150478307e-02 1.2273540697e+00 1.8181533914e+00 +v 9.0230784025e-01 9.0589518401e-01 -8.1386208368e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/91.obj b/tutorials/ipc_quick_start_guide/input/sequence/91.obj new file mode 100644 index 00000000..db09d664 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/91.obj @@ -0,0 +1,6 @@ +v 1.7213440376e+00 8.0662473225e-01 9.8046658912e-01 +v -2.9796618866e-02 1.2214615610e+00 1.8530585431e+00 +v 8.5057037969e-01 9.1164980755e-01 -8.1695457877e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/92.obj b/tutorials/ipc_quick_start_guide/input/sequence/92.obj new file mode 100644 index 00000000..0710c1f3 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/92.obj @@ -0,0 +1,6 @@ +v 1.7388233001e+00 8.0476059341e-01 9.4482628784e-01 +v 2.3290472368e-02 1.2154890493e+00 1.8872960018e+00 +v 7.9815462228e-01 9.1747215360e-01 -8.1654772756e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/93.obj b/tutorials/ipc_quick_start_guide/input/sequence/93.obj new file mode 100644 index 00000000..270ca62a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/93.obj @@ -0,0 +1,6 @@ +v 1.7542369946e+00 8.0312429837e-01 9.0993525650e-01 +v 7.7027928504e-02 1.2094458573e+00 1.9208123245e+00 +v 7.4514238645e-01 9.2335313362e-01 -8.1264216504e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/94.obj b/tutorials/ipc_quick_start_guide/input/sequence/94.obj new file mode 100644 index 00000000..85e5c21c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/94.obj @@ -0,0 +1,6 @@ +v 1.7675610606e+00 8.0171840140e-01 8.7584795849e-01 +v 1.3133186747e-01 1.2033414181e+00 1.9535551937e+00 +v 6.9161642167e-01 9.2928356770e-01 -8.0524398762e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/95.obj b/tutorials/ipc_quick_start_guide/input/sequence/95.obj new file mode 100644 index 00000000..e273ed35 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/95.obj @@ -0,0 +1,6 @@ +v 1.7787746994e+00 8.0054509706e-01 8.4261760260e-01 +v 1.8611752295e-01 1.1971852605e+00 1.9854734993e+00 +v 6.3766027930e-01 9.3525419872e-01 -7.9436474351e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/96.obj b/tutorials/ipc_quick_start_guide/input/sequence/96.obj new file mode 100644 index 00000000..593a5925 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/96.obj @@ -0,0 +1,6 @@ +v 1.7878604069e+00 7.9960621686e-01 8.1029605997e-01 +v 2.4129937665e-01 1.1909869942e+00 2.0165174181e+00 +v 5.8335818228e-01 9.4125570679e-01 -7.8002141469e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/97.obj b/tutorials/ipc_quick_start_guide/input/sequence/97.obj new file mode 100644 index 00000000..d1765a15 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/97.obj @@ -0,0 +1,6 @@ +v 1.7948040002e+00 7.9890322636e-01 7.7893378313e-01 +v 2.9679129189e-01 1.1847562942e+00 2.0466384920e+00 +v 5.2879489343e-01 9.4727872387e-01 -7.6223639053e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/98.obj b/tutorials/ipc_quick_start_guide/input/sequence/98.obj new file mode 100644 index 00000000..01859e8a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/98.obj @@ -0,0 +1,6 @@ +v 1.7995946407e+00 7.9843722292e-01 7.4857972718e-01 +v 3.5250664796e-01 1.1785028866e+00 2.0757897033e+00 +v 4.7405558334e-01 9.5331384834e-01 -7.4103743268e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/sequence/99.obj b/tutorials/ipc_quick_start_guide/input/sequence/99.obj new file mode 100644 index 00000000..6b5ce756 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/sequence/99.obj @@ -0,0 +1,6 @@ +v 1.8022248499e+00 7.9820893396e-01 7.1928127347e-01 +v 4.0835847539e-01 1.1722365326e+00 2.1039255482e+00 +v 4.1922569726e-01 9.5935165960e-01 -7.1645763184e-01 +l 1 3 +l 2 1 +l 3 2 diff --git a/tutorials/ipc_quick_start_guide/input/smaller-distance.json b/tutorials/ipc_quick_start_guide/input/smaller-distance.json new file mode 100644 index 00000000..8aeea06c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/smaller-distance.json @@ -0,0 +1,19 @@ +{ + "common": "2-cubes-falling.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 2.001, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "volume_selection": 2 + }, { + "mesh": "plane.obj", + "is_obstacle": true + }] +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/smaller-dt.json b/tutorials/ipc_quick_start_guide/input/smaller-dt.json new file mode 100644 index 00000000..545c6d4a --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/smaller-dt.json @@ -0,0 +1,6 @@ +{ + "common": "2-cubes-falling.json", + "time": { + "dt": 0.005 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/stiffer.json b/tutorials/ipc_quick_start_guide/input/stiffer.json new file mode 100644 index 00000000..c87d0083 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/stiffer.json @@ -0,0 +1,6 @@ +{ + "common": "2-cubes-falling.json", + "materials": { + "E": 1e6 + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/timed-bcs.json b/tutorials/ipc_quick_start_guide/input/timed-bcs.json new file mode 100644 index 00000000..edc97a4e --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/timed-bcs.json @@ -0,0 +1,12 @@ +{ + "common": "point-selection.json", + "boundary_conditions": { + "dirichlet_boundary": [{ + "id": 1, + "value": ["-0.2 * min(t, 2.5)", 0, "-0.2 * min(t, 2.5)"] + }, { + "id": 2, + "value": ["0.2 * max(t - 2.5, 0)", 0, "0.2 * max(t - 2.5, 0)"] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/translating-obstacle.json b/tutorials/ipc_quick_start_guide/input/translating-obstacle.json new file mode 100644 index 00000000..667b9710 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/translating-obstacle.json @@ -0,0 +1,26 @@ +{ + "common": "2-cubes-falling.json", + "geometry": [{ + "mesh": "cube.msh", + "transformation": { + "translation": [0, 3, 0] + }, + "volume_selection": 1 + }, { + "mesh": "cube.msh", + "transformation": { + "translation": [0, 1, 0] + }, + "surface_selection": 1, + "is_obstacle": true + }, { + "mesh": "plane.obj", + "is_obstacle": true + }], + "boundary_conditions": { + "obstacle_displacements": [{ + "id": 1, + "value": ["t", "t", "t"] + }] + } +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/input/triangle.obj b/tutorials/ipc_quick_start_guide/input/triangle.obj new file mode 100644 index 00000000..71cd7648 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/input/triangle.obj @@ -0,0 +1,4 @@ +v -0.5 0 -0.5 +v 0.5 0 -0.5 +v -0.5 0 0.5 +f 1 3 2 \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/index.html b/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/index.html new file mode 100644 index 00000000..216b98ef --- /dev/null +++ b/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/index.html @@ -0,0 +1,2436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + IPC Quick Start Guide - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

IPC Quick Start Guide

+
Author: Zachary Ferguson
+ +
+

Note

+

This is a retelling of the original IPC Quick Start Guide from the original IPC codebase.

+
+

Setup

+

The first step is to clone and build PolyFEM (see here for instructions). This will create the PolyFEM_bin executable that we will use to run the examples. To run an example you can use the following command:

+
./PolyFEM_bin -j <path/to/example.json> -o <path/to/output/dir>
+
+

You can also use the --help flag to see all the available options.

+ + +

All files used in this tutorial can be found here.

+

IPC Default Parameters

+

Since many of the default parameters in PolyFEM differ from those in the original IPC codebase, we provide a JSON file ipc-defaults.json which maps the default parameter values from IPC to their equivalent parameters in PolyFEM. This file is then included in all the example JSON files using "common": "ipc-defaults.json".

+
+

Todo

+

Describe what each of the default parameters controls.

+
+

Hello, World!

+

Let us start with a “Hello, World!” example of two cubes falling onto a ground plane.

+

The input JSON for this scene can be found at 2-cubes-falling.json. To run this example, use the following command:

+
./PolyFEM_bin -j 2-cubes-falling.json -o 2-cubes-falling
+
+

This will create a directory 2-cubes-falling with the following files:

+
$ ls 2-cubes-falling
+sim.pvd step_0.vtm step_0.vtu [...] step_200.vtm step_200.vtu
+
+

We can open the PVD file using ParaView and play the animation to visualize the simulation:

+ + +
+

Tip

+

In ParaView, make sure to press the WarpByVector WarpByVector button to see the deformed animation. Otherwise, you will only see the undeformed rest mesh.

+
+
+

Let’s take a look at the input JSON file 2-cubes-falling.json:

+
{
+    "common": "ipc-defaults.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "volume_selection": 2
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }],
+    "contact": {
+        "friction_coefficient": 0.1
+    }
+}
+
+

The config is simple:

+
    +
  • "common": this includes the default IPC parameters from the ipc-defaults.json file.
  • +
  • "geometry": the geometry of the scene comprised of two cubes and a ground plane.
      +
    • "mesh": the path to the mesh file (a tetrahedral mesh cube.msh for the cubes and a triangular mesh plane.obj for the ground plane).
    • +
    • "transformation": transform the input mesh before running the simulation.
        +
      • "translation": translate the first cube up by 3 units and the second cube up by 1 unit.
      • +
      +
    • +
    • "volume_selection": assigns an ID to the volume (uniformly) which we will use later.
    • +
    • "is_obstacle": specify that the ground plane is a static obstacle.
        +
      • Obstacles are non-simulated geometries with prescribed displacements (here default to zero).
      • +
      +
    • +
    +
  • +
  • "contact": parameters for the contact model
      +
    • "friction_coefficient": coefficient of friction for all contacts.
    • +
    +
  • +
+

Physical Materials and Time Steppers

+

Now let’s make some changes to the hello world script to make the simulation more interesting.

+

Stiffer Material

+

The default material parameters in ipc-default.json are:

+
"materials": {
+    "type": "NeoHookean",
+    "E": 1e5,
+    "nu": 0.4,
+    "rho": 1000
+}
+
+

This corresponds to a NeoHookean material with Young’s modulus \(E = 10^5~\text{Pa}\), Poisson’s ratio \(\nu = 0.4\), and density \(\rho = 1000~\frac{\text{kg}}{\text{m}^3}\).

+

We can change these parameters for all objects in the scene by changing Young’s modulus to \(10^6~\text{Pa}\):

+
{
+    "common": "2-cubes-falling.json",
+    "materials": {
+        "E": 1e6
+    }
+}
+
+
+

Note

+

Notice that we changed the "common" parameter to point to the starting example 2-cubes-falling.json. This means our changes in this file will be applied on top of the changes in the starting example (which also are applied on top of the default parameters in ipc-defaults.json).

+
+

This will make Young’s modulus 10x larger than the default while keeping density and Poisson’s ratio the same. Let’s see what we get:

+ + +

Yes! The boxes are stiffer now.

+

Multiple Materials

+

We can also set different materials for different objects:

+
{
+    "common": "2-cubes-falling.json",
+    "materials": [{
+        "id": 1,
+        "type": "NeoHookean",
+        "E": 1e8,
+        "nu": 0.4,
+        "rho": 3000
+    }, {
+        "id": 2,
+        "type": "NeoHookean",
+        "E": 1e5,
+        "nu": 0.4,
+        "rho": 1000
+    }]
+}
+
+

We replace our single "materials" object with a list of objects with "id" keys. These IDs correspond to the "volume_selection" from earlier. In general, "volume_selection" allows us to select a subset of the mesh’s elements and assign a volume ID to them. In this case, we assign a uniform ID to all elements in the cube mesh. Where the first cube gets an ID of 1 and the second gets an ID of 2. We then use these volume IDs to assign different materials to each cube. The first cube gets a material that is 3× heavier and 1000× stiffer. While the second cube gets the original material.

+ + +

Here we rendered softer material with a light yellow color. As we see the top box is nearly rigid now and the bottom box deforms more. Even with this super stiff material PolyFEM stays robust and accurate.

+

Simulation Time and Time Step Size

+

Following the default in IPC, we have been simulating the scene for 5 seconds with a time step size of 0.025s, generating 200 frames.

+

Smaller Time Step Sizes

+

One option to get more energetic animation (while sticking with implicit Euler stepping – see also Newmark stepping below) is to apply smaller time step sizes to reduce the numerical damping of implicit Euler time integration:

+
{
+    "common": "2-cubes-falling.json",
+    "time": {
+        "dt": 0.005
+    }
+}
+
+

The "time" parameter here controls time step size "dt": 0.005, which results in a more energetic animation:

+ + +

Larger Time Step Sizes (Nearly Quasi-Static)

+

One of the exciting features of IPC and PolyFEM is that it is robust enough to support extremely large time step sizes on the order of seconds with implicit Euler. In turn, this enables rapid solutions of equilibrium conditions subject to contact, friction and large deformation (via nearly quasi-static solves under numerical damping). For a simple demonstration, we can simulate our hello world example with \(\Delta t = 1~\text{s}\):

+
{
+    "common": "2-cubes-falling.json",
+    "time": {
+        "dt": 1
+    }
+}
+
+

The animation now is composed of only five frames, one for each second. As we see numerical damping is so large that the cubes are barely bouncing.

+ + +

Initial Velocity

+

To set nonzero initial velocities for objects, we need to specify them as "initial_conditions".

+

Initial Linear Velocity

+

For example, we can set the initial velocity of the top cube to be \(-20~\frac{\text{m}}{\text{s}}\) in the y direction:

+
{
+    "common": "2-cubes-falling.json",
+    "initial_conditions": {
+        "velocity": [{
+            "id": 1,
+            "value": [0, -20, 0]
+        }]
+    }
+}
+
+

Again here we are using the volume IDs to select the top cube.

+ + +

Even for this high-speed impact scene, PolyFEM stays robust and accurate without numerical instabilities or explosions.

+

Initial Angular Velocity

+

Instead of using a constant value for the initial velocity, we can use a tiny expression dependent on the positions.

+

We can specify an initial angular velocity by computing

+
\[ +\begin{bmatrix}\omega_x & \omega_y & \omega_z\end{bmatrix} +\times +\begin{bmatrix}x & y & z\end{bmatrix} +\]
+

where \(\omega_{\{x, y, z\}}\) are the angular velocity in radians and \(x\), \(y\), and \(z\) are the positions to be evaluated at.

+
+

Note

+

This assumes the center of rotation is at the origin. If you want to rotate around a different point, you need to translate the positions to the origin first.

+
+

For example, if we want to rotate the top cube 90 degrees/second around the y-axis, then we compute the initial velocity as

+
\[ +\begin{bmatrix}0 & \frac{\pi}{2} & 0\end{bmatrix} +\times +\begin{bmatrix}x & y & z\end{bmatrix} += +\begin{bmatrix}\frac{\pi}{2}z & 0 & -\frac{\pi}{2}x\end{bmatrix} +\]
+

In the JSON we encode this as a string containing the expression:

+
{
+    "common": "2-cubes-falling.json",
+    "initial_conditions": {
+        "velocity": [{
+            "id": 1,
+            "value": ["pi/2 * z", 0, "-pi/2 * x"]
+        }]
+    }
+}
+
+

and voila now the top cube is spinning!

+ + +

Collision Obstacles

+

In many simulations we want to script the motion of certain objects, the best way to do this is to specify the object as an obstacle and then specify the prescribed displacement.

+

Translation

+

To make the second code an obstacle all we need to do is set "is_obstacle": true. +Then we can specify the displacement of this obstacle using the "boundary_conditions/obstacle_displacements" field:

+
{
+    "common": "2-cubes-falling.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "surface_selection": 1,
+        "is_obstacle": true
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }],
+    "boundary_conditions": {
+        "obstacle_displacements": [{
+            "id": 1,
+            "value": ["t", "t", "t"]
+        }]
+    }
+}
+
+

Notice that we changed the "volume_selection" to "surface_selection" because we need to identify the surface on which the boundary conditions apply.

+

We set the obstacle’s displacement to ["t", "t", "t"] which means the obstacle will translate with a velocity of \([1, 1, 1]\) m/s.

+ + +

Rotation

+

Making the second cube rotate is a bit trickier. We can compute the displacement in Euler’s angle representation as

+
\[ +\begin{bmatrix} +\Delta{x} \\ \Delta{y} \\ \Delta{z} +\end{bmatrix} += +R_x(\omega_x t) R_y(\omega_y t) R_z(\omega_z t) +\left( +\begin{bmatrix} +x \\ y \\ z +\end{bmatrix} +- +\begin{bmatrix} +c_x \\ c_y \\ c_z +\end{bmatrix} +\right) ++ +\begin{bmatrix} +c_x \\ c_y \\ c_z +\end{bmatrix} +- +\begin{bmatrix} +x \\ y \\ z +\end{bmatrix} +\]
+

where \(\Delta\{x,y,z\}\) are the obstacle displacement, \(\omega_{\{x,y,z\}}\) are the angular velocities, \(c_{\{x,y,z\}}\) is the center of rotation, \(R_{\{x,y,z\}}\) are the axis-aligned rotation matrices, and \(x\), \(y\), and \(z\) are the positions to be evaluated at. Computing this by hand can be annoying, so instead, you can use this Python notebook to compute the expression.

+

As an example, here we kinematically rotate the second cube with an angular velocity of \([10, 90, 0]\) degrees/second:

+
{
+    "common": "translating-obstacle.json",
+    "boundary_conditions": {
+        "obstacle_displacements": [{
+            "id": 1,
+            "value": [
+                "x*cos(pi*t/2) - x + z*sin(pi*t/2)",
+                "x*sin(pi*t/18)*sin(pi*t/2) - y - z*sin(pi*t/18)*cos(pi*t/2) + (y - 1)*cos(pi*t/18) + 1",
+                "-x*sin(pi*t/2)*cos(pi*t/18) + z*cos(pi*t/18)*cos(pi*t/2) - z + (y - 1)*sin(pi*t/18)"
+            ]
+        }]
+    }
+}
+
+ + +

Here we render obstacles in grey.

+

Codimensional Collisions

+

IPC contact handling is based on distances and so directly supports codimensional (surfaces, edges, points) kinematic collision obstacles!

+
+

Note

+

Currently, PolyFEM does not yet include simulated codimensional materials like shells or rods.

+
+

Closed Surface

+

If we script the motion of an object, then for a closed surface the interior tessellation is unnecessary, and we can directly use a surface mesh (.obj file)!

+
{
+    "common": "rotating-obstacle.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube.obj",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "surface_selection": 1,
+        "is_obstacle": true
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+

This is equivalent to using a volumetric mesh because PolyFEM automatically extracts and uses the surface for obstacles.

+ + +

Open Surface

+

This script replaces the cube with a single triangle (zero volume):

+
{
+    "common": "rotating-obstacle.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "triangle.obj",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "surface_selection": 1,
+        "is_obstacle": true
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+ + +

Edges

+

This script uses the same single triangle but only with its edges. Here we also scale the triangle 2× larger to let the box fall through.

+
{
+    "common": "rotating-obstacle.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "triangle.obj",
+        "transformation": {
+            "translation": [0, 1, 0],
+            "scale": 2
+        },
+        "surface_selection": 1,
+        "is_obstacle": true,
+        "extract": "edges"
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+

The "extract": "edges" specifies that only the edges of the triangle mesh should be used.

+ + +
+

Note

+

Alternatively, you can load an edge mesh directly by specifying an .obj file with line elements. For example, this is the same edge mesh in OBJ format: +

v -0.5 0 -0.5
+v  0.5 0 -0.5
+v -0.5 0  0.5
+l 1 3
+l 3 2
+l 2 1
+

+
+

Points

+

Even crazier, this script uses the same single triangle but only with its points. Here we also scale the point cloud 0.7× smaller to let the box hit the points.

+
{
+    "common": "rotating-obstacle.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "triangle.obj",
+        "transformation": {
+            "translation": [0, 1, 0],
+            "scale": 0.7
+        },
+        "surface_selection": 1,
+        "is_obstacle": true,
+        "extract": "points"
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+

We use the "extract": "points" to only use the points of the triangle.

+ + +
+

Note

+

Alternatively, you can load a point cloud directly by specifying an .obj file with no triangles or edges. For example, this is the same point cloud in OBJ format: +

v -0.5 0 -0.5
+v  0.5 0 -0.5
+v -0.5 0  0.5
+

+
+

Boundary Conditions

+

Selection

+

Similar to how we apply material, to apply boundary conditions we first need to select which nodes to which to apply the boundary conditions using the "point_selection" mesh field. Then, we can specify the boundary conditions in the "boundary_conditions" field.

+
{
+    "common": "2-cubes-falling.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "volume_selection": 2,
+        "point_selection": [{
+            "id": 1,
+            "box": [
+                [0, 0, 0],
+                [0.1, 1, 0.1]
+            ],
+            "relative": true
+        }, {
+            "id": 2,
+            "box": [
+                [0.9, 0, 0.9],
+                [1, 1, 1]
+            ],
+            "relative": true
+        }]
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }],
+    "output": {
+        "paraview": {
+            "points": true
+        }
+    }
+}
+
+

Let’s break down the "point_selection" field. The first object +

"id": 1,
+"box": [
+    [0, 0, 0],
+    [0.1, 1, 0.1]
+],
+"relative": true
+
+specifies that we should assign an ID of 1 to the nodes in the back left of the mesh. The second object +
"id": 2,
+"box": [
+    [0.9, 0, 0.9],
+    [1, 1, 1]
+],
+"relative": true
+
+specifies that we should assign an ID of 2 to the nodes in the front right of the mesh.

+

The "box" parameter specifies a bounding box by minimum and maximum corners in which points are selected. Notice the "relative": true field which indicates the box’s coordinates are relative to the bounding box of the mesh. If we set "relative": false then the coordinates are in world space.

+
+

Note

+

For more information about how to setup boundary conditions (including the more ubiquitous surface selections) look here.

+
+

Dirichlet

+

For a simulated volumetric object, sometimes we script the motion of part of its vertices as Dirichlet boundary conditions. Using our point selections we can specify the boundary conditions as follows:

+
{
+    "common": "point-selection.json",
+    "boundary_conditions": {
+        "dirichlet_boundary": [{
+            "id": 1,
+            "value": ["-0.2 * t", 0, "-0.2 * t"]
+        }, {
+            "id": 2,
+            "value": ["0.2 * t", 0, "0.2 * t"]
+        }]
+    }
+}
+
+

The above script specifies that we should apply a displacement of \([-0.2, 0, -0.2]\) m/s to the nodes with ID 1 and a displacement of \([0.2, 0, 0.2]\) m/s to the nodes with ID 2. The expressions in strings are evaluated using TinyExpr. You can find out more about these expressions here and here.

+

Now let’s see what we get:

+ + +

As we see PolyFEM is robust even when there is large deformation.

+

What is different here from setting kinematic collision obstacles is that the unselected vertices are still degree-of-freedoms that are simulated. If one selects all vertices of an object by, for example, using a selection of +

"point_selection": 1
+
+and set them with Dirichlet boundary conditions, it will be essentially identical to a kinematic collision obstacle.

+

Neumann

+
+

Warning

+

Nodal Neumann boundary conditions are not yet supported in PolyFEM, so we will setup a similar scene using surface selection.

+
+

We can also add extra forces to part of the vertices of simulated volumetric objects in addition to gravity. This can be similarly realized by specifying the "neumann_boundary" like how we did for Dirichlet boundary conditions above:

+
{
+    "common": "point-selection.json",
+    "geometry": [{
+        "mesh": "cube-hex.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube-hex.msh",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "volume_selection": 2,
+        "surface_selection": 1
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }],
+    "boundary_conditions": {
+        "neumann_boundary": [{
+            "id": 1,
+            "value": [
+                "2.5e4 * sign(x) * max(0, sign(x * z))",
+                0,
+                "2.5e4 * sign(z) * max(0, sign(x * z))"
+            ]
+        }]
+    },
+    "output": {
+        "paraview": {
+            "options": {
+                "forces": true
+            }
+        }
+    }
+}
+
+

Similar to the configuration in our Dirichlet example, the above script applies an a force of \([-2.5 \times 10^4, 0, -2.5 \times 10^4]\) N to the vertices in the left-back and \([2.5 \times 10^4, 0, 2.5 \times 10^4]\) N to the vertices in the right-front:

+ + +
+

Note

+

Here simulate a hexahedral mesh, but we use a linear triangular mesh for contact handling. +Additionally, the rendering shows a triangulation of the hexahedral mesh’s surface.

+
+

Unlike Dirichlet boundary conditions, here the Neumann boundary condition does not restrict the vertical motion of the object, and it elongates the object only to a static state but not further.

+

Timed Boundary Conditions

+

It is also possible to start and stop boundary conditions at a specific time. This can be done by utilizing tiny expressions:

+
{
+    "common": "point-selection.json",
+    "boundary_conditions": {
+        "dirichlet_boundary": [{
+            "id": 1,
+            "value": ["-0.2 * min(t, 2.5)", 0, "-0.2 * min(t, 2.5)"]
+        }, {
+            "id": 2,
+            "value": ["0.2 * max(t - 2.5, 0)", 0, "0.2 * max(t - 2.5, 0)"]
+        }]
+    }
+}
+
+

Here we apply a displacement of \([-0.2, 0, -0.2]\) m/s to the nodes with ID 1 from time \(t=0\) to \(t=2.5\) and a displacement of \([0.2, 0, 0.2]\) m/s to the nodes with ID 2 from time \(t=2.5\) to \(t=\infty\). We can see this if we plot the x/z-displacement of the BC nodes: +

+where the red line is the displacement of the nodes with ID 1 and the blue line is the displacement of the nodes with ID 2.

+

Finally, let’s see what we get:

+ + +

Advanced Settings

+

Input Mesh Sequence

+

The way of setting kinematic collision obstacles displacements described earlier is expressive but a bit verbose. To support more complex scripting of kinematic collision objects, PolyFEM allows the use of input mesh file sequences.

+

For example, we can specify a folder path to the kinematic collision objects:

+
{
+    "common": "2-cubes-falling.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 3, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "type": "mesh_sequence",
+        "transformation": {
+            "translation": [-0.6666666667, 0, -0.6666666667]
+        },
+        "mesh_sequence": "sequence",
+        "fps": 40,
+        "is_obstacle": true
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+

In the specified folder sequence we provide the mesh files of the triangle wire in each frame as *.obj. Note that the input sequence must maintain the correct vertex correspondence to the one throughout the entire sequence.

+ + + +

Smaller Distance Initialization

+

IPC requires a tiny positive gap as it does not support the 0-distance configurations.

+

The following script sets the upper box in the hello world example right above the lower one:

+
{
+    "common": "2-cubes-falling.json",
+    "geometry": [{
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 2.001, 0]
+        },
+        "volume_selection": 1
+    }, {
+        "mesh": "cube.msh",
+        "transformation": {
+            "translation": [0, 1, 0]
+        },
+        "volume_selection": 2
+    }, {
+        "mesh": "plane.obj",
+        "is_obstacle": true
+    }]
+}
+
+ + +

Note the initial gap here is barely visible. In our experience we can set IPC’s contact gap as small as practically needed; i.e., even small enough to fool the ray intersection checks in rendering algorithms.

+ +

Similarly, no two objects can have 0-distance separation : ); even atoms are at distance from each other.

+

Newmark Time-Integration

+

Along with implicit Euler, PolyFEM supports other time integration methods such as implicit Newmark time integration. Implicit Newmark can be applied for improved energy preservation and control. To change the time integrator we can simply set the time integration method.

+

For example, the following script uses the time/integrator key to specify implicit Newmark ("ImplicitNewmark") should be the time integrator for the stiffer boxes scene without friction. By default, "integrator" is set to ImplicitEuler (backward Euler).

+
{
+    "common": "stiffer.json",
+    "time": {
+        "dt": 0.005,
+        "integrator": "ImplicitNewmark"
+    },
+    "contact": {
+        "friction_coefficient": 0
+    }
+}
+
+

Damping can be useful both for predictive or realistic simulation control of damping and also to extend the effective stability of the underlying Newmark time integration method. For example, here we use Rayleigh damping of elasticity:

+
{
+    "common": "newmark.json",
+    "solver": {
+        "rayleigh_damping": {
+            "form": "elasticity",
+            "stiffness_ratio": 0.1
+        }
+    }
+}
+
+

Here we set the damping stiffness as a ratio \(\kappa_\text{ratio}\) between 0 and 1. The absolute damping stiffness will be set to \(\tfrac{3}{4} \kappa_\text{ratio} \Delta t^3\). If \(\kappa_\text{ratio}=1\), at the beginning of time-step Newmark’s incremental potential Hessian (with damping term) will be equal to that of implicit Euler. This provides a starting basis for intuitively setting damping stiffness. To alternately directly set damping stiffness use the key "stiffness".

+

Here in this demo note that we used a smaller time step size at 0.005s as this is better for the stability of Newmark integration.

+ + + + + + + + + + + + + + + + + + + + + +
Newmark, "stiffness_ratio": 0.1Newmark, "stiffness_ratio": 0.2
Newmark, "stiffness_ratio": 0.4Backwards Euler
+

Accuracy Control

+

Time Integration Accuracy

+

Nonlinear solver accuracy determines how accurate the dynamic time step solve is satisfied. To set the requested nonlinear solver accuracy, we can use the solver/nonlinear/grad_norm key to set Newton tolerance on the infinity norm of the Newton increment.

+

So far, we have used

+
{
+    "solver": {
+        "nonlinear": {
+            "grad_norm": 1e-05
+        }
+    }
+}
+
+

The solver will stop once the current Newton increment cannot change any nodal position larger than 1e-5 m even if a full step is taken. Reducing this improves accuracy, but note that the compute cost can then go up.

+

Contact Accuracy

+

There are three additional accuracies for IPC. Each controls a contact accuracy in IPC: the barrier activation distance ("dhat") which IPC uses to determine if objects are in contact and exert contact forces; the tangent velocity ("epsv") determining where IPC sees the touching objects as not sliding and so exerts static friction forces; and the maximum amount of friction iterations ("friction_iterations") that IPC updates friction tangent and normal forces.

+

By default PolyFEM uses +

{
+    "contact": {
+        "dhat": 1e-3,
+        "epsv": 1e-3
+    },
+    "solver": {
+        "contact": {
+            "friction_iterations": 1
+        }
+    }
+}
+

+
+

Note

+

Unlike the original IPC code, these values are not scaled by the bounding box size.

+
+

The default setting provides a good trade-off between accuracy and efficiency, where there are no visible gaps, no obvious sliding artifacts, or friction force in inaccurate directions.

+

We can set "friction_iterations" set to -1 to iterate until the tangent operator and normal force converges to obtain even more accurate results. Note that IPC does not guarantee convergence for this case. In practice, for more accurate friction in large deformation or high-speed impact scenes, "friction_iterations" at 2~4 so far appears generally sufficient.

+

Use Your Own Mesh

+

For collision obstacles (including closed surfaces), one can directly specify the path to their mesh files (.obj, .stl, .ply, etc.) in the script to use it.

+

For the simulated objects that are tetrahedral meshes, PolyFEM supports MSH files. PolyFEM supports both ASCII and binary encoded version 2.2 and 4.1 files through the use of MshIO.

+

To generate a tetrahedral mesh from a triangle mesh, we recommend using fTetWild.

+

Restarting a Simulation

+

To learn how to restart a simulation, see here.

+

More Simulation Examples

+

Hopefully, now you know the basics of how to use IPC within PolyFEM. For more examples, we have set up all the simulations in the original IPC paper (and more!) and you can find them all here.

+

If you have any further questions, feel free to post an issue on the PolyFEM GitHub repo.

+ +
+
+ + + Last update: + 2023-10-04 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/ipc_quick_start_guide.md b/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/ipc_quick_start_guide.md new file mode 100644 index 00000000..49d2bc65 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/ipc_quick_start_guide/ipc_quick_start_guide.md @@ -0,0 +1,589 @@ +# IPC Quick Start Guide + +
Author: Zachary Ferguson
+ +!!! note + This is a retelling of the original [IPC Quick Start Guide](https://github.com/ipc-sim/IPC/wiki) from the original IPC codebase. + +## Setup + +The first step is to clone and build PolyFEM (see [here](../../cxx_index.md) for instructions). This will create the `PolyFEM_bin` executable that we will use to run the examples. To run an example you can use the following command: + +```bash +./PolyFEM_bin -j -o +``` + +You can also use the `--help` flag to see all the available options. + + + +All files used in this tutorial can be found [here](https://github.com/polyfem/polyfem.github.io/tree/docs/docs/tutorials/ipc_quick_start_guide/input). + +### IPC Default Parameters + +Since many of the default parameters in PolyFEM differ from those in the original IPC codebase, we provide a JSON file [`ipc-defaults.json`](input/ipc-defaults.json) which maps the default parameter values from IPC to their equivalent parameters in PolyFEM. This file is then included in all the example JSON files using `"common": "ipc-defaults.json"`. + +!!! todo + Describe what each of the default parameters controls. + +## Hello, World! + +Let us start with a "Hello, World!" example of two cubes falling onto a ground plane. + +The input JSON for this scene can be found at [`2-cubes-falling.json`](input/2-cubes-falling.json). To run this example, use the following command: + +```bash +./PolyFEM_bin -j 2-cubes-falling.json -o 2-cubes-falling +``` + +This will create a directory `2-cubes-falling` with the following files: + +``` +$ ls 2-cubes-falling +sim.pvd step_0.vtm step_0.vtu [...] step_200.vtm step_200.vtu +``` + +We can open the PVD file using [ParaView](https://www.paraview.org/) and play the animation to visualize the simulation: + + + +!!! tip + In ParaView, make sure to press the WarpByVector WarpByVector button to see the deformed animation. Otherwise, you will only see the undeformed rest mesh. + +--- + +Let’s take a look at the input JSON file [`2-cubes-falling.json`](input/2-cubes-falling.json): + +```json +{% include "input/2-cubes-falling.json" %} +``` + +The config is simple: + +* `"common"`: this includes the default IPC parameters from the `ipc-defaults.json` file. +* `"geometry"`: the geometry of the scene comprised of two cubes and a ground plane. + * `"mesh"`: the path to the mesh file (a tetrahedral mesh `cube.msh` for the cubes and a triangular mesh `plane.obj` for the ground plane). + * `"transformation"`: transform the input mesh before running the simulation. + * `"translation"`: translate the first cube up by 3 units and the second cube up by 1 unit. + * `"volume_selection"`: assigns an ID to the volume (uniformly) which we will use later. + * `"is_obstacle"`: specify that the ground plane is a static obstacle. + * Obstacles are non-simulated geometries with prescribed displacements (here default to zero). +* `"contact"`: parameters for the contact model + * `"friction_coefficient"`: coefficient of friction for all contacts. + +## Physical Materials and Time Steppers + +Now let’s make some changes to the hello world script to make the simulation more interesting. + +### Stiffer Material + +The default material parameters in `ipc-default.json` are: + +```json +"materials": { + "type": "NeoHookean", + "E": 1e5, + "nu": 0.4, + "rho": 1000 +} +``` + +This corresponds to a NeoHookean material with Young’s modulus $E = 10^5~\text{Pa}$, Poisson’s ratio $\nu = 0.4$, and density $\rho = 1000~\frac{\text{kg}}{\text{m}^3}$. + +We can change these parameters for all objects in the scene by changing Young's modulus to $10^6~\text{Pa}$: + +```json +{% include "input/stiffer.json" %} +``` + +!!! note + Notice that we changed the `"common"` parameter to point to the starting example `2-cubes-falling.json`. This means our changes in this file will be applied on top of the changes in the starting example (which also are applied on top of the default parameters in `ipc-defaults.json`). + +This will make Young’s modulus 10x larger than the default while keeping density and Poisson’s ratio the same. Let’s see what we get: + + + +Yes! The boxes are stiffer now. + +### Multiple Materials + +We can also set different materials for different objects: + +```json +{% include "input/heavy-top.json" %} +``` + +We replace our single `"materials"` object with a list of objects with `"id"` keys. These IDs correspond to the `"volume_selection"` from earlier. In general, `"volume_selection"` allows us to select a subset of the mesh's elements and assign a volume ID to them. In this case, we assign a uniform ID to all elements in the cube mesh. Where the first cube gets an ID of 1 and the second gets an ID of 2. We then use these volume IDs to assign different materials to each cube. The first cube gets a material that is 3× heavier and 1000× stiffer. While the second cube gets the original material. + + + +Here we rendered softer material with a light yellow color. As we see the top box is nearly rigid now and the bottom box deforms more. Even with this super stiff material PolyFEM stays robust and accurate. + +### Simulation Time and Time Step Size + +Following the default in IPC, we have been simulating the scene for 5 seconds with a time step size of 0.025s, generating 200 frames. + +#### Smaller Time Step Sizes + +One option to get more energetic animation (while sticking with implicit Euler stepping -- see also Newmark stepping below) is to apply smaller time step sizes to reduce the numerical damping of implicit Euler time integration: + +```json +{% include "input/smaller-dt.json" %} +``` + +The `"time"` parameter here controls time step size `"dt": 0.005`, which results in a more energetic animation: + + + +#### Larger Time Step Sizes (Nearly Quasi-Static) + +One of the exciting features of IPC and PolyFEM is that it is robust enough to support extremely large time step sizes on the order of seconds with implicit Euler. In turn, this enables rapid solutions of equilibrium conditions subject to contact, friction and large deformation (via nearly quasi-static solves under numerical damping). For a simple demonstration, we can simulate our hello world example with $\Delta t = 1~\text{s}$: + +```json +{% include "input/larger-dt.json" %} +``` + +The animation now is composed of only five frames, one for each second. As we see numerical damping is so large that the cubes are barely bouncing. + + + +## Initial Velocity + +To set nonzero initial velocities for objects, we need to specify them as `"initial_conditions"`. + +### Initial Linear Velocity + +For example, we can set the initial velocity of the top cube to be $-20~\frac{\text{m}}{\text{s}}$ in the y direction: + +```json +{% include "input/initial-linear-velocity.json" %} +``` + +Again here we are using the volume IDs to select the top cube. + + + +Even for this high-speed impact scene, PolyFEM stays robust and accurate without numerical instabilities or explosions. + +### Initial Angular Velocity + +Instead of using a constant value for the initial velocity, we can use a tiny expression dependent on the positions. + +We can specify an initial angular velocity by computing + +$$ +\begin{bmatrix}\omega_x & \omega_y & \omega_z\end{bmatrix} +\times +\begin{bmatrix}x & y & z\end{bmatrix} +$$ + +where $\omega_{\{x, y, z\}}$ are the angular velocity in radians and $x$, $y$, and $z$ are the positions to be evaluated at. + +!!! note + This assumes the center of rotation is at the origin. If you want to rotate around a different point, you need to translate the positions to the origin first. + +For example, if we want to rotate the top cube 90 degrees/second around the y-axis, then we compute the initial velocity as + +$$ +\begin{bmatrix}0 & \frac{\pi}{2} & 0\end{bmatrix} +\times +\begin{bmatrix}x & y & z\end{bmatrix} += +\begin{bmatrix}\frac{\pi}{2}z & 0 & -\frac{\pi}{2}x\end{bmatrix} +$$ + +In the JSON we encode this as a string containing the expression: + +```json +{% include "input/initial-angular-velocity.json" %} +``` + +and voila now the top cube is spinning! + + + +## Collision Obstacles + +In many simulations we want to script the motion of certain objects, the best way to do this is to specify the object as an obstacle and then specify the prescribed displacement. + +### Translation + +To make the second code an obstacle all we need to do is set `"is_obstacle": true`. +Then we can specify the displacement of this obstacle using the `"boundary_conditions/obstacle_displacements"` field: + +```json +{% include "input/translating-obstacle.json" %} +``` + +Notice that we changed the `"volume_selection"` to `"surface_selection"` because we need to identify the surface on which the boundary conditions apply. + +We set the obstacle's displacement to `["t", "t", "t"]` which means the obstacle will translate with a velocity of $[1, 1, 1]$ m/s. + + + +### Rotation + +Making the second cube rotate is a bit trickier. We can compute the displacement in Euler’s angle representation as + +$$ +\begin{bmatrix} +\Delta{x} \\ \Delta{y} \\ \Delta{z} +\end{bmatrix} += +R_x(\omega_x t) R_y(\omega_y t) R_z(\omega_z t) +\left( +\begin{bmatrix} +x \\ y \\ z +\end{bmatrix} +- +\begin{bmatrix} +c_x \\ c_y \\ c_z +\end{bmatrix} +\right) ++ +\begin{bmatrix} +c_x \\ c_y \\ c_z +\end{bmatrix} +- +\begin{bmatrix} +x \\ y \\ z +\end{bmatrix} +$$ + +where $\Delta\{x,y,z\}$ are the obstacle displacement, $\omega_{\{x,y,z\}}$ are the angular velocities, $c_{\{x,y,z\}}$ is the center of rotation, $R_{\{x,y,z\}}$ are the axis-aligned rotation matrices, and $x$, $y$, and $z$ are the positions to be evaluated at. Computing this by hand can be annoying, so instead, you can use [this Python notebook](rotating-obstacle.ipynb) to compute the expression. + +As an example, here we kinematically rotate the second cube with an angular velocity of $[10, 90, 0]$ degrees/second: + +```json +{% include "input/rotating-obstacle.json" %} +``` + + + +Here we render obstacles in grey. + +### Codimensional Collisions + +IPC contact handling is based on distances and so directly supports codimensional (surfaces, edges, points) kinematic collision obstacles! + +!!! note + Currently, PolyFEM does not yet include simulated codimensional materials like shells or rods. + +#### Closed Surface + +If we script the motion of an object, then for a closed surface the interior tessellation is unnecessary, and we can directly use a surface mesh (`.obj` file)! + +```json +{% include "input/rotating-obstacle-surface.json" %} +``` + +This is equivalent to using a volumetric mesh because PolyFEM automatically extracts and uses the surface for obstacles. + + + +#### Open Surface + +This script replaces the cube with a single triangle (zero volume): + +```json +{% include "input/rotating-obstacle-triangle.json" %} +``` + + + +#### Edges + +This script uses the same single triangle but only with its edges. Here we also scale the triangle 2× larger to let the box fall through. + +```json +{% include "input/rotating-obstacle-edges.json" %} +``` + +The `"extract": "edges"` specifies that only the edges of the triangle mesh should be used. + + + +!!! note + Alternatively, you can load an edge mesh directly by specifying an `.obj` file with line elements. For example, this is the same edge mesh in OBJ format: + ``` + v -0.5 0 -0.5 + v 0.5 0 -0.5 + v -0.5 0 0.5 + l 1 3 + l 3 2 + l 2 1 + ``` + +#### Points + +Even crazier, this script uses the same single triangle but only with its points. Here we also scale the point cloud 0.7× smaller to let the box hit the points. + +```json +{% include "input/rotating-obstacle-points.json" %} +``` + +We use the `"extract": "points"` to only use the points of the triangle. + + + +!!! note + Alternatively, you can load a point cloud directly by specifying an `.obj` file with no triangles or edges. For example, this is the same point cloud in OBJ format: + ``` + v -0.5 0 -0.5 + v 0.5 0 -0.5 + v -0.5 0 0.5 + ``` + +## Boundary Conditions + +### Selection + +Similar to how we apply material, to apply boundary conditions we first need to select which nodes to which to apply the boundary conditions using the `"point_selection"` mesh field. Then, we can specify the boundary conditions in the `"boundary_conditions"` field. + +```json +{% include "input/point-selection.json" %} +``` + +Let's break down the `"point_selection"` field. The first object +```json +"id": 1, +"box": [ + [0, 0, 0], + [0.1, 1, 0.1] +], +"relative": true +``` +specifies that we should assign an ID of `1` to the nodes in the back left of the mesh. The second object +```json +"id": 2, +"box": [ + [0.9, 0, 0.9], + [1, 1, 1] +], +"relative": true +``` +specifies that we should assign an ID of `2` to the nodes in the front right of the mesh. + +The `"box"` parameter specifies a bounding box by minimum and maximum corners in which points are selected. Notice the `"relative": true` field which indicates the box's coordinates are relative to the bounding box of the mesh. If we set `"relative": false` then the coordinates are in world space. + +!!! note + For more information about how to setup boundary conditions (including the more ubiquitous surface selections) look [here](../getting_started.md#boundary-conditions). + +### Dirichlet + +For a simulated volumetric object, sometimes we script the motion of part of its vertices as Dirichlet boundary conditions. Using our point selections we can specify the boundary conditions as follows: + +```json +{% include "input/dirichlet-bcs.json" %} +``` + +The above script specifies that we should apply a displacement of $[-0.2, 0, -0.2]$ m/s to the nodes with ID `1` and a displacement of $[0.2, 0, 0.2]$ m/s to the nodes with ID `2`. The expressions in strings are evaluated using [TinyExpr](https://github.com/codeplea/tinyexpr). You can find out more about these expressions [here](../getting_started.md#spatially-varying-boundary-conditions) and [here](../getting_started.md#time-dependent-boundary-conditions). + +Now let's see what we get: + + + +As we see PolyFEM is robust even when there is large deformation. + +What is different here from setting kinematic collision obstacles is that the unselected vertices are still degree-of-freedoms that are simulated. If one selects all vertices of an object by, for example, using a selection of +```json +"point_selection": 1 +``` +and set them with Dirichlet boundary conditions, it will be essentially identical to a kinematic collision obstacle. + +### Neumann + +!!! warning + Nodal Neumann boundary conditions are not yet supported in PolyFEM, so we will setup a similar scene using surface selection. + +We can also add extra forces to part of the vertices of simulated volumetric objects in addition to gravity. This can be similarly realized by specifying the `"neumann_boundary"` like how we did for Dirichlet boundary conditions above: + +```json +{% include "input/neumann-bcs.json" %} +``` + +Similar to the configuration in our Dirichlet example, the above script applies an a force of $[-2.5 \times 10^4, 0, -2.5 \times 10^4]$ N to the vertices in the left-back and $[2.5 \times 10^4, 0, 2.5 \times 10^4]$ N to the vertices in the right-front: + + + +!!! note + Here simulate a hexahedral mesh, but we use a linear triangular mesh for contact handling. + Additionally, the rendering shows a triangulation of the hexahedral mesh's surface. + +Unlike Dirichlet boundary conditions, here the Neumann boundary condition does not restrict the vertical motion of the object, and it elongates the object only to a static state but not further. + +### Timed Boundary Conditions + +It is also possible to start and stop boundary conditions at a specific time. This can be done by utilizing tiny expressions: + +```json +{% include "input/timed-bcs.json" %} +``` + +Here we apply a displacement of $[-0.2, 0, -0.2]$ m/s to the nodes with ID `1` from time $t=0$ to $t=2.5$ and a displacement of $[0.2, 0, 0.2]$ m/s to the nodes with ID `2` from time $t=2.5$ to $t=\infty$. We can see this if we plot the x/z-displacement of the BC nodes: +
+where the red line is the displacement of the nodes with ID `1` and the blue line is the displacement of the nodes with ID `2`. + +Finally, let's see what we get: + + + +## Advanced Settings + +### Input Mesh Sequence + +The way of setting kinematic collision obstacles displacements described earlier is expressive but a bit verbose. To support more complex scripting of kinematic collision objects, PolyFEM allows the use of input mesh file sequences. + +For example, we can specify a folder path to the kinematic collision objects: + +```json +{% include "input/mesh-sequence.json" %} +``` + +In the specified folder `sequence` we provide the mesh files of the triangle wire in each frame as `*.obj`. Note that the input sequence must maintain the correct vertex correspondence to the one throughout the entire sequence. + + + + + +### Smaller Distance Initialization + +IPC requires a tiny positive gap as it does not support the 0-distance configurations. + +The following script sets the upper box in the hello world example right above the lower one: + +```json +{% include "input/smaller-distance.json" %} +``` + + + +Note the initial gap here is barely visible. In our experience we can set IPC’s contact gap as small as practically needed; i.e., even small enough to fool the ray intersection checks in rendering algorithms. + +Similarly, no two objects can have 0-distance separation : ); even atoms are at distance from each other. + +### Newmark Time-Integration + +Along with implicit Euler, PolyFEM supports other time integration methods such as implicit Newmark time integration. Implicit Newmark can be applied for improved energy preservation and control. To change the time integrator we can simply set the time integration method. + +For example, the following script uses the `time/integrator` key to specify implicit Newmark (`"ImplicitNewmark"`) should be the time integrator for the stiffer boxes scene without friction. By default, `"integrator"` is set to `ImplicitEuler` (backward Euler). + +```json +{% include "input/newmark.json" %} +``` + +Damping can be useful both for predictive or realistic simulation control of damping and also to extend the effective stability of the underlying Newmark time integration method. For example, here we use Rayleigh damping of elasticity: + +```json +{% include "input/rayleigh-damping-ratio=0.1.json" %} +``` + +Here we set the damping stiffness as a ratio $\kappa_\text{ratio}$ between 0 and 1. The absolute damping stiffness will be set to $\tfrac{3}{4} \kappa_\text{ratio} \Delta t^3$. If $\kappa_\text{ratio}=1$, at the beginning of time-step Newmark's incremental potential Hessian (with damping term) will be equal to that of implicit Euler. This provides a starting basis for intuitively setting damping stiffness. To alternately directly set damping stiffness use the key `"stiffness"`. + +Here in this demo note that we used a smaller time step size at `0.005`s as this is better for the stability of Newmark integration. + +| Newmark, `"stiffness_ratio": 0.1` | Newmark, `"stiffness_ratio": 0.2` | +|:-------------------------------:|:-------------------------------:| +| | | +| Newmark, `"stiffness_ratio": 0.4` | Backwards Euler | +| | | + +### Accuracy Control + +#### Time Integration Accuracy + +Nonlinear solver accuracy determines how accurate the dynamic time step solve is satisfied. To set the requested nonlinear solver accuracy, we can use the `solver/nonlinear/grad_norm` key to set Newton tolerance on the infinity norm of the Newton increment. + +So far, we have used + +```json +{ + "solver": { + "nonlinear": { + "grad_norm": 1e-05 + } + } +} +``` + +The solver will stop once the current Newton increment cannot change any nodal position larger than `1e-5` m even if a full step is taken. Reducing this improves accuracy, but note that the compute cost can then go up. + +#### Contact Accuracy + +There are three additional accuracies for IPC. Each controls a contact accuracy in IPC: the barrier activation distance (`"dhat"`) which IPC uses to determine if objects are in contact and exert contact forces; the tangent velocity (`"epsv"`) determining where IPC sees the touching objects as not sliding and so exerts static friction forces; and the maximum amount of friction iterations (`"friction_iterations"`) that IPC updates friction tangent and normal forces. + +By default PolyFEM uses +```json +{ + "contact": { + "dhat": 1e-3, + "epsv": 1e-3 + }, + "solver": { + "contact": { + "friction_iterations": 1 + } + } +} +``` + +!!! note + Unlike the original IPC code, these values are **not** scaled by the bounding box size. + +The default setting provides a good trade-off between accuracy and efficiency, where there are no visible gaps, no obvious sliding artifacts, or friction force in inaccurate directions. + +We can set `"friction_iterations"` set to `-1` to iterate until the tangent operator and normal force converges to obtain even more accurate results. Note that IPC does not guarantee convergence for this case. In practice, for more accurate friction in large deformation or high-speed impact scenes, `"friction_iterations"` at `2`~`4` so far appears generally sufficient. + +### Use Your Own Mesh + +For collision obstacles (including closed surfaces), one can directly specify the path to their mesh files (`.obj`, `.stl`, `.ply`, etc.) in the script to use it. + +For the simulated objects that are tetrahedral meshes, PolyFEM supports [MSH](https://gmsh.info/doc/texinfo/gmsh.html#File-formats) files. PolyFEM supports both ASCII and binary encoded version 2.2 and 4.1 files through the use of [MshIO](https://github.com/qnzhou/MshIO). + +To generate a tetrahedral mesh from a triangle mesh, we recommend using [fTetWild](https://github.com/wildmeshing/fTetWild). + +### Restarting a Simulation + +To learn how to restart a simulation, see [here](../../json.md#restart). + +## More Simulation Examples + +Hopefully, now you know the basics of how to use IPC within PolyFEM. For more examples, we have set up all the simulations in the original IPC paper (and more!) and you can find them all [here](https://github.com/polyfem/polyfem-data/tree/main/contact/examples). + +If you have any further questions, feel free to post an [issue](https://github.com/polyfem/polyfem/issues) on the PolyFEM GitHub repo. diff --git a/tutorials/ipc_quick_start_guide/rotating-obstacle/index.html b/tutorials/ipc_quick_start_guide/rotating-obstacle/index.html new file mode 100644 index 00000000..4a3e7185 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/rotating-obstacle/index.html @@ -0,0 +1,2448 @@ + + + + + + + + + + + + + + + + + + + + + + Rotating obstacle - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + +

Rotating obstacle

+ + + + + + + + + +
+ +
+ + +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/rotating-obstacle/rotating-obstacle.ipynb b/tutorials/ipc_quick_start_guide/rotating-obstacle/rotating-obstacle.ipynb new file mode 100644 index 00000000..49444eaa --- /dev/null +++ b/tutorials/ipc_quick_start_guide/rotating-obstacle/rotating-obstacle.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [{ + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy\n", + "import sympy" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "omega_x, omega_y, omega_z = sympy.symbols('omega_x omega_y omega_z')\n", + "c_x, c_y, c_z = sympy.symbols('c_x c_y c_z')\n", + "x, y, z, t = sympy.symbols('x y z t')\n", + "\n", + "def deg2rad(deg):\n", + " return deg * sympy.pi / 180" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$$\n", + "\\begin{bmatrix}\n", + "\\Delta{x} \\\\ \\Delta{y} \\\\ \\Delta{z}\n", + "\\end{bmatrix}\n", + "=\n", + "R_x(\\omega_x t) R_y(\\omega_y t) R_z(\\omega_z t)\n", + "\\left(\n", + "\\begin{bmatrix}\n", + "x \\\\ y \\\\ z\n", + "\\end{bmatrix}\n", + "-\n", + "\\begin{bmatrix}\n", + "c_x \\\\ c_y \\\\ c_z\n", + "\\end{bmatrix}\n", + "\\right)\n", + "+\n", + "\\begin{bmatrix}\n", + "c_x \\\\ c_y \\\\ c_z\n", + "\\end{bmatrix}\n", + "-\n", + "\\begin{bmatrix}\n", + "x \\\\ y \\\\ z\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [{ + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}c_{x} - x + \\left(- c_{x} + x\\right) \\cos{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} - \\left(- c_{y} + y\\right) \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{y} t \\right)} + \\left(- c_{z} + z\\right) \\sin{\\left(\\omega_{y} t \\right)}\\\\c_{y} - y + \\left(- c_{x} + x\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} + \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{x} t \\right)}\\right) + \\left(- c_{y} + y\\right) \\left(- \\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{y} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} + \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)}\\right) - \\left(- c_{z} + z\\right) \\sin{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{y} t \\right)}\\\\c_{z} - z + \\left(- c_{x} + x\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} - \\sin{\\left(\\omega_{y} t \\right)} \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)}\\right) + \\left(- c_{y} + y\\right) \\left(\\sin{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{z} t \\right)} + \\sin{\\left(\\omega_{y} t \\right)} \\sin{\\left(\\omega_{z} t \\right)} \\cos{\\left(\\omega_{x} t \\right)}\\right) + \\left(- c_{z} + z\\right) \\cos{\\left(\\omega_{x} t \\right)} \\cos{\\left(\\omega_{y} t \\right)}\\end{matrix}\\right]$" + ], + "text/plain": [ + "Matrix([\n", + "[ c_x - x + (-c_x + x)*cos(omega_y*t)*cos(omega_z*t) - (-c_y + y)*sin(omega_z*t)*cos(omega_y*t) + (-c_z + z)*sin(omega_y*t)],\n", + "[c_y - y + (-c_x + x)*(sin(omega_x*t)*sin(omega_y*t)*cos(omega_z*t) + sin(omega_z*t)*cos(omega_x*t)) + (-c_y + y)*(-sin(omega_x*t)*sin(omega_y*t)*sin(omega_z*t) + cos(omega_x*t)*cos(omega_z*t)) - (-c_z + z)*sin(omega_x*t)*cos(omega_y*t)],\n", + "[ c_z - z + (-c_x + x)*(sin(omega_x*t)*sin(omega_z*t) - sin(omega_y*t)*cos(omega_x*t)*cos(omega_z*t)) + (-c_y + y)*(sin(omega_x*t)*cos(omega_z*t) + sin(omega_y*t)*sin(omega_z*t)*cos(omega_x*t)) + (-c_z + z)*cos(omega_x*t)*cos(omega_y*t)]])" + ] + }, + "metadata": {}, + "output_type": "display_data" + }], + "source": [ + "Rx = numpy.array([\n", + " [1, 0, 0],\n", + " [0, sympy.cos(omega_x*t), -sympy.sin(omega_x*t)],\n", + " [0, sympy.sin(omega_x*t), sympy.cos(omega_x*t)]\n", + "])\n", + "\n", + "Ry = numpy.array([\n", + " [sympy.cos(omega_y*t), 0, sympy.sin(omega_y*t)],\n", + " [0, 1, 0],\n", + " [-sympy.sin(omega_y*t), 0, sympy.cos(omega_y*t)]\n", + "])\n", + "\n", + "Rz = numpy.array([\n", + " [sympy.cos(omega_z*t), -sympy.sin(omega_z*t), 0],\n", + " [sympy.sin(omega_z*t), sympy.cos(omega_z*t), 0],\n", + " [0, 0, 1]\n", + "])\n", + "\n", + "R = Rx @ Ry @ Rz\n", + "\n", + "c = numpy.array([c_x, c_y, c_z])\n", + "pos = numpy.array([x, y, z])\n", + "disp = R @ (pos - c) + c - pos\n", + "\n", + "display(sympy.Matrix(disp))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def print_obstacle_displacement(omega, c):\n", + " print(\"[\")\n", + " subs = {\n", + " omega_x: deg2rad(omega[0]),\n", + " omega_y: deg2rad(omega[1]),\n", + " omega_z: deg2rad(omega[2]),\n", + " c_x: c[0],\n", + " c_y: c[1],\n", + " c_z: c[2],\n", + " }\n", + " for i, d in enumerate(disp):\n", + " expr = d.subs(subs).simplify()\n", + " expr_str = str(expr) if expr.is_constant() else f\"\\\"{str(expr).replace('**', '^')}\\\"\"\n", + " print(\"{}{}\".format(expr_str, \",\" if i < len(disp) - 1 else \"\"))\n", + " print(\"]\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [{ + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + "\"-x + y*sin(pi*t/5) + (x + 0.35)*cos(pi*t/5) - 0.35\",\n", + "\"y*cos(pi*t/5) - y - (x + 0.35)*sin(pi*t/5)\",\n", + "0\n", + "]\n", + "\n", + "[\n", + "\"-x - y*sin(pi*t/5) + (x - 0.35)*cos(pi*t/5) + 0.35\",\n", + "\"y*cos(pi*t/5) - y + (x - 0.35)*sin(pi*t/5)\",\n", + "0\n", + "]\n" + ] + }], + "source": [ + "print_obstacle_displacement([0, 0, -36], [-0.35, 0, 0])\n", + "print()\n", + "print_obstacle_displacement([0, 0, 36], [0.35, 0, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [{ + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + "\"x*cos(3.80952380952381*pi*t) - x + z*sin(3.80952380952381*pi*t)\",\n", + "\"0\",\n", + "\"-x*sin(3.80952380952381*pi*t) + z*cos(3.80952380952381*pi*t) - z\"\n", + "]\n" + ] + }], + "source": [ + "print_obstacle_displacement([0, 360/0.525, 0], [0, 0.1, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [{ + "name": "stdout", + "output_type": "stream", + "text": [ + "[\n", + "\"0\",\n", + "\"y*cos(pi*t/9) - y - z*sin(pi*t/9)\",\n", + "\"y*sin(pi*t/9) + z*cos(pi*t/9) - z\"\n", + "]\n" + ] + }], + "source": [ + "print_obstacle_displacement([20, 0, 0], [0, 0, 0])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.6 64-bit", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "e7370f93d1d0cde622a1f8e1c04877d8463912d04d973331ad4851f04de6915a" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/run_all/index.html b/tutorials/ipc_quick_start_guide/run_all/index.html new file mode 100644 index 00000000..9063c47d --- /dev/null +++ b/tutorials/ipc_quick_start_guide/run_all/index.html @@ -0,0 +1,2273 @@ + + + + + + + + + + + + + + + + + + + + + + Run all - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + + + + + +

Run all

+ + + + + + + + + +
+
+ + +
+
+ + + Last update: + 2023-10-04 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/ipc_quick_start_guide/run_all/run_all.py b/tutorials/ipc_quick_start_guide/run_all/run_all.py new file mode 100644 index 00000000..c4fc5b2c --- /dev/null +++ b/tutorials/ipc_quick_start_guide/run_all/run_all.py @@ -0,0 +1,48 @@ +import sys +from collections import namedtuple +import pathlib +import subprocess + +simrender_path = pathlib.Path("/home/zachary/Development/personal-projects/simrender") +if simrender_path.exists(): + sys.path.append(str(simrender_path)) + import render + +debug = False + +polyfem_bin = f"/home/zachary/Development/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin" +#polyfem_bin = f"/Users/zachary/Development/research/polyfem/polyfem/build/{'debug' if debug else 'release'}/PolyFEM_bin" + +input_dir = pathlib.Path(__file__).parent / "input" +output_dir = pathlib.Path(__file__).parent / "output" +videos_dir = pathlib.Path(__file__).parent / "videos" +output_dir.mkdir(exist_ok=True, parents=True) +videos_dir.mkdir(exist_ok=True, parents=True) + +for script in input_dir.glob("*.json"): + if script.name == "ipc-defaults.json": + continue + + print(script.name) + # yes_or_no = input("Press enter to run [Y/n]: ") + # if yes_or_no.lower() not in ["", "y", "yes"]: + # continue + + subprocess.run( + (["lldb", "--"] if debug else []) + [ + polyfem_bin, + "-j", str(script), + "-o", str(output_dir / script.stem), + "--log_level", "debug" + ]) + + if simrender_path is not None and simrender_path.exists(): + render_args = render.parse_args([ + "--input", str(list((output_dir / + script.stem).glob("*.pvd"))[0]), + "--output", str(videos_dir / (script.stem + ".mp4")), + "--bg-color", "46", "48", "62", "255", + "--base-zoom", "2", + # "--drop-frames", "4" + ]) + render.main(render_args) diff --git a/tutorials/ipc_quick_start_guide/timed-bcs.svg b/tutorials/ipc_quick_start_guide/timed-bcs.svg new file mode 100644 index 00000000..d7289a84 --- /dev/null +++ b/tutorials/ipc_quick_start_guide/timed-bcs.svg @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + 0.5 + 0.5 + + + 1 + 1 + + + 1.5 + 1.5 + + + 2 + 2 + + + 2.5 + 2.5 + + + 3 + 3 + + + 3.5 + 3.5 + + + 4 + 4 + + + 4.5 + 4.5 + + + 5 + 5 + + + -0.5 + -0.5 + + + -0.4 + -0.4 + + + -0.3 + -0.3 + + + -0.2 + -0.2 + + + -0.1 + -0.1 + + + 0.1 + 0.1 + + + 0.2 + 0.2 + + + 0.3 + 0.3 + + + 0.4 + 0.4 + + + 0.5 + 0.5 + + + + t + t + + + u + u + + + + + + + + + + + + + + + + + + + diff --git a/tutorials/ipc_quick_start_guide/videos/2-cubes-falling.mp4 b/tutorials/ipc_quick_start_guide/videos/2-cubes-falling.mp4 new file mode 100644 index 00000000..ea9ae02f Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/2-cubes-falling.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/2-cubes-falling2.mp4 b/tutorials/ipc_quick_start_guide/videos/2-cubes-falling2.mp4 new file mode 100644 index 00000000..4bad2e41 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/2-cubes-falling2.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/backwards-euler.mp4 b/tutorials/ipc_quick_start_guide/videos/backwards-euler.mp4 new file mode 100644 index 00000000..cad85c77 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/backwards-euler.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/dirichlet-bcs.mp4 b/tutorials/ipc_quick_start_guide/videos/dirichlet-bcs.mp4 new file mode 100644 index 00000000..697a19fb Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/dirichlet-bcs.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/heavy-top.mp4 b/tutorials/ipc_quick_start_guide/videos/heavy-top.mp4 new file mode 100644 index 00000000..0ece1074 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/heavy-top.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/initial-angular-velocity.mp4 b/tutorials/ipc_quick_start_guide/videos/initial-angular-velocity.mp4 new file mode 100644 index 00000000..cc949c4e Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/initial-angular-velocity.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/initial-linear-velocity.mp4 b/tutorials/ipc_quick_start_guide/videos/initial-linear-velocity.mp4 new file mode 100644 index 00000000..58f93942 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/initial-linear-velocity.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/larger-dt.mp4 b/tutorials/ipc_quick_start_guide/videos/larger-dt.mp4 new file mode 100644 index 00000000..b9c459e4 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/larger-dt.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/mesh-sequence.mp4 b/tutorials/ipc_quick_start_guide/videos/mesh-sequence.mp4 new file mode 100644 index 00000000..8aaaf0c1 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/mesh-sequence.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/neumann-bcs.mp4 b/tutorials/ipc_quick_start_guide/videos/neumann-bcs.mp4 new file mode 100644 index 00000000..3d653bd0 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/neumann-bcs.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/newmark.mp4 b/tutorials/ipc_quick_start_guide/videos/newmark.mp4 new file mode 100644 index 00000000..1342e082 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/newmark.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.1.mp4 b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.1.mp4 new file mode 100644 index 00000000..5fa1ad55 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.1.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.2.mp4 b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.2.mp4 new file mode 100644 index 00000000..d44a4e1a Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.2.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.4.mp4 b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.4.mp4 new file mode 100644 index 00000000..1060d9fa Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rayleigh-damping-ratio=0.4.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-edges.mp4 b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-edges.mp4 new file mode 100644 index 00000000..6f65bdf7 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-edges.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-points.mp4 b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-points.mp4 new file mode 100644 index 00000000..41ed9863 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-points.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-surface.mp4 b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-surface.mp4 new file mode 100644 index 00000000..20892c96 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-surface.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-triangle.mp4 b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-triangle.mp4 new file mode 100644 index 00000000..2837decf Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle-triangle.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/rotating-obstacle.mp4 b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle.mp4 new file mode 100644 index 00000000..1a005266 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/rotating-obstacle.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/smaller-distance.mp4 b/tutorials/ipc_quick_start_guide/videos/smaller-distance.mp4 new file mode 100644 index 00000000..78b7fa83 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/smaller-distance.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/smaller-dt.mp4 b/tutorials/ipc_quick_start_guide/videos/smaller-dt.mp4 new file mode 100644 index 00000000..d1887079 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/smaller-dt.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/stiffer.mp4 b/tutorials/ipc_quick_start_guide/videos/stiffer.mp4 new file mode 100644 index 00000000..41be8bdb Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/stiffer.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/timed-bcs.mp4 b/tutorials/ipc_quick_start_guide/videos/timed-bcs.mp4 new file mode 100644 index 00000000..a2b33ced Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/timed-bcs.mp4 differ diff --git a/tutorials/ipc_quick_start_guide/videos/translating-obstacle.mp4 b/tutorials/ipc_quick_start_guide/videos/translating-obstacle.mp4 new file mode 100644 index 00000000..68aeeb19 Binary files /dev/null and b/tutorials/ipc_quick_start_guide/videos/translating-obstacle.mp4 differ diff --git a/tutorials/multi-material/left_box.png b/tutorials/multi-material/left_box.png new file mode 100644 index 00000000..f0b37fcc Binary files /dev/null and b/tutorials/multi-material/left_box.png differ diff --git a/tutorials/multi-material/mesh.png b/tutorials/multi-material/mesh.png new file mode 100644 index 00000000..a87faac2 Binary files /dev/null and b/tutorials/multi-material/mesh.png differ diff --git a/tutorials/multi-material/middle_box.png b/tutorials/multi-material/middle_box.png new file mode 100644 index 00000000..37bc725b Binary files /dev/null and b/tutorials/multi-material/middle_box.png differ diff --git a/tutorials/multi-material/multi-material/index.html b/tutorials/multi-material/multi-material/index.html new file mode 100644 index 00000000..4e19508d --- /dev/null +++ b/tutorials/multi-material/multi-material/index.html @@ -0,0 +1,1553 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Multi-Material - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+ +
+ + + +
+
+ + + + + + + + + + +

Simulating Multiple Materials in a Single Mesh

+
Author: Zachary Ferguson and Hanwen Zhao
+ +

+

In this tutorial, we will demonstrate how to create a multi-material object using fTetWild and simulate it using PolyFEM.

+

The data for this tutorial can be found here.

+

Prerequisites

+

The following items are necessary to complete this tutorial. To replicate the experiment, you can feel free to use either the given mesh files or your own mesh.

+ +

Build PolyFEM

+

The instructions for building PolyFEM can be found here. After compilation, to use PolyFEM in any working directory machine, we suggest adding an alias +

alias polyfem='path/to/PolyFEM/build/PolyFEM_bin'
+
+to your ~/.bashrc or ~/.zshrc file.

+

Then you can use it by

+
polyfem --help
+
+

Build fTetWild

+

You can find the instruction for building fTetWild here. After doing so you should have an executable file FloatTetwild_bin. For convenience we can again define an alias for this binary: +

alias tetwild='path/to/fTetWild/build/FloatTetwild_bin'
+

+

Creating the Mesh

+

Input Meshes

+

We will use three mesh files to create a simple multi-material object: left_box.obj, middle_box.obj, and right_box.obj. The left and right boxes will have nearly rigid material properties, while the middle box will be more flexible.

+ + + + + + + + + + + + + + + +
Left: left_box.objMiddle: middle_box.objRight: right_box.obj
+

Constructive Solid Geometry

+

The next step is to create a union of these three meshes, this can be done using fTetWild. To create a union of three objects, we can create a JSON file +

{
+    "operation": "union",
+    "left": {
+        "operation": "union",
+        "left": "left_box.obj",
+        "right": "middle_box.obj"
+    },
+    "right": "right_box.obj"
+}
+
+and use it as input to fTetWild +
tetwild --csg /path/to/union.json --no-color -o cubes.msh
+

+

The --csg flag stands for constructive solid geometry which describes how to construct a shape using set operations between other shapes (e.g., union, intersection, and difference). In our case, we want to union the three boxes together.

+

The --no-color is optional and disables the color output of fTetWild which can be used to visualize the quality of elements.

+

The combined mesh should look like this:

+

+ +

+ +
+

Note

+

To view .msh files you can use Gmsh.

+
+

Removing Extra Vertices

+

fTetWild will sometimes produce extra floating vertices that are not part of the mesh. These extra vertices do not harm anything, but can inflate the bounding box making it hard to select a side of the cube in PolyFEM. To remove these vertices we provide a simple Python script here.

+

Setting up the Simulation

+

We will setup the simulation using PolyFEM’s JSON interface. For more details, please refer to the JSON Input documentation.

+

We will go over the JSON script section by section. The complete JSON file can be found in the GitHub Repo.

+

Geometry

+
{
+    "geometry": {
+        "mesh": "cubes_v22.msh"
+    }
+}
+
+

The "geometry" section specifies all required simulation geometry data. The "mesh" field defines the path to the volumetric mesh file. In this tutorial, only the cubes_v22.msh file from fTetwild will be utilized.

+

Boundary Conditions

+
{
+    "boundary_conditions": {
+        "rhs": [0, 0, 0],
+        "dirichlet_boundary": [{
+            "id": 1,
+            "value": ["-t", 0, 0]
+        }, {
+            "id": 3,
+            "value": ["t", 0, 0]
+        }]
+    }
+}
+
+

In boundary conditions, we permit the left box and right box sections to have Dirichlet boundaries that move along the x-axis as a function of time t. Here we use the default boundary IDs assigned described here.

+

The rhs is defined as [0, 0, 0], which indicates that the simulation has no prescribed body forces (i.e., no gravity).

+

Materials

+
{
+    "materials": [{
+        "id": 1,
+        "E": 2e11,
+        "nu": 0.3,
+        "rho": 7750,
+        "type": "NeoHookean"
+    }, {
+        "id": 2,
+        "E": 2.55e7,
+        "nu": 0.48,
+        "rho": 1700,
+        "type": "NeoHookean"
+    }, {
+        "id": 3,
+        "E": 2e11,
+        "nu": 0.3,
+        "rho": 7750,
+        "type": "NeoHookean"
+    }]
+}
+
+

In the materials section, we assign identical material properties to the left and right boxes but use a softer material for the middle box.

+

The volume IDs in this case are loaded directly from the cubes_v22.msh file. fTetWild automatically assigns these labels based on which domain the elements falls in the CSG.

+
+

Warning

+

Loading volume IDs from the mesh file is currently only supported with version 4.1 MSH files (both ASCII and binary).

+
+

Time-Dependent Simulation

+

{
+    "time": {
+        "dt": 0.0025,
+        "time_steps": 20
+    }
+}
+
+In the "time" section, we define our time step size as 0.0025 seconds and the total number of steps to be 20.

+

Contact

+
{
+    "contact": {
+        "enabled": true,
+        "dhat": 0.001
+    }
+}
+
+

We enable contact by defining a "contact" section as above.

+

Solver

+
{
+    "solver": {
+        "linear": {
+            "solver": "Eigen::PardisoLDLT"
+        },
+        "nonlinear": {
+            "line_search": {
+                "method": "backtracking"
+            },
+            "solver": "newton",
+            "grad_norm": 1e-05,
+            "use_grad_norm": true
+        },
+        "advanced": {
+            "lump_mass_matrix": true
+        }
+    }
+}
+
+

We make a few adjustments to the solver. Here we are using Newton with backtracking line-search and Eigen::PardisoLDLT for linear solves. We also set the convergence tolerance for the gradient norm to 1e-05.

+

Spatial Discretization

+
{
+    "space": {
+        "discr_order": [{
+            "id": 1,
+            "order": 1
+        }, {
+            "id": 2,
+            "order": 2
+        }, {
+            "id": 3,
+            "order": 1
+        }]
+    }
+}
+
+

Lastly, we demonstrate that PolyFEM can simulate mixed order elements. In this example, we choose to use linear P1 elements for the left and right box, but use quadratic P2 elements for the middle box.

+

The use of higher-order representations can lead to more precise calculations with slightly more running time.

+

Running the Simulation

+

We can use the following command to run the simulation:

+
polyfem -j stretch-cubes.json -o output/
+
+

The simulation results will be written to output/ as a sequence of VTU file and a PVD file for the time sequence.

+

Visualize the Simulation Results

+

To visualize the simulation results in VTU format, we can use ParaView, an open-source, multi-platform data analysis and visualization application.

+

To view the results, please follow the instruction below.

+

+
    +
  • Step 1: File - Open, select sequence group file step.vtu or step.vtm.
  • +
  • Step 2: Click Apply under the tab Properties located in the left side of the GUI.
  • +
  • Step 3: Click on Wrap By Vector to apply the displacement to the objects. This function can be found from the top menu bar.
  • +
  • Step 4: Click again Apply under the tab Properties.
  • +
  • Step 5: Now, the Play button can be used to view the time sequence results.
  • +
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/multi-material/multi-material/multi-material.md b/tutorials/multi-material/multi-material/multi-material.md new file mode 100644 index 00000000..235f0217 --- /dev/null +++ b/tutorials/multi-material/multi-material/multi-material.md @@ -0,0 +1,257 @@ +# Simulating Multiple Materials in a Single Mesh + +
Author: Zachary Ferguson and Hanwen Zhao
+ +
+ +In this tutorial, we will demonstrate how to create a multi-material object using [fTetWild](https://github.com/wildmeshing/fTetWild) and simulate it using PolyFEM. + +The data for this tutorial can be found [here](https://github.com/polyfem/polyfem-data/tree/main/multi-material). + +## Prerequisites + +The following items are necessary to complete this tutorial. To replicate the experiment, you can feel free to use either the given mesh files or your own mesh. + +- [ ] [Build PolyFEM](../../../cxx_index) +- [ ] [Build fTetwild](https://github.com/wildmeshing/fTetWild) +- [ ] [Download File: left_box.obj](https://github.com/polyfem/polyfem-data/blob/main/multi-material/tetwild/left_box.obj?raw=true) +- [ ] [Download File: middle_box.obj](https://github.com/polyfem/polyfem-data/blob/main/multi-material/tetwild/right_box.obj?raw=true) +- [ ] [Download File: right_box.obj](https://github.com/polyfem/polyfem-data/blob/main/multi-material/tetwild/middle_box.obj?raw=true) +- [ ] [Download File: stretch-cubes.json](https://github.com/polyfem/polyfem-data/blob/main/multi-material/stretch-cubes.json) + +### Build PolyFEM + +The instructions for building PolyFEM can be found [here](../../../cxx_index). After compilation, to use PolyFEM in any working directory machine, we suggest adding an alias +```shell +alias polyfem='path/to/PolyFEM/build/PolyFEM_bin' +``` +to your `~/.bashrc` or `~/.zshrc` file. + +Then you can use it by + +```shell +polyfem --help +``` + +### Build fTetWild + +You can find the instruction for building fTetWild [here](https://github.com/wildmeshing/fTetWild). After doing so you should have an executable file `FloatTetwild_bin`. For convenience we can again define an alias for this binary: +```shell +alias tetwild='path/to/fTetWild/build/FloatTetwild_bin' +``` + +## Creating the Mesh + +### Input Meshes + +We will use three mesh files to create a simple multi-material object: `left_box.obj`, `middle_box.obj`, and `right_box.obj`. The left and right boxes will have nearly rigid material properties, while the middle box will be more flexible. + +| Left: `left_box.obj` | Middle: `middle_box.obj` | Right: `right_box.obj` | +| -------------------- | ------------------------ | ---------------------- | +| | | | + +### Constructive Solid Geometry + +The next step is to create a union of these three meshes, this can be done using [fTetWild](https://github.com/wildmeshing/fTetWild). To create a union of three objects, we can create a JSON file +```json +{ + "operation": "union", + "left": { + "operation": "union", + "left": "left_box.obj", + "right": "middle_box.obj" + }, + "right": "right_box.obj" +} +``` +and use it as input to fTetWild +```sh +tetwild --csg /path/to/union.json --no-color -o cubes.msh +``` + +The `--csg` flag stands for [constructive solid geometry](https://en.wikipedia.org/wiki/Constructive_solid_geometry) which describes how to construct a shape using set operations between other shapes (e.g., union, intersection, and difference). In our case, we want to union the three boxes together. + +The `--no-color` is optional and disables the color output of fTetWild which can be used to visualize the quality of elements. + +The combined mesh should look like this: +

+ +

+ +!!! note + To view `.msh` files you can use [Gmsh](https://gmsh.info/). + +#### Removing Extra Vertices + +fTetWild will sometimes produce extra floating vertices that are not part of the mesh. These extra vertices do not harm anything, but can inflate the bounding box making it hard to select a side of the cube in PolyFEM. To remove these vertices we provide a simple Python script [here](https://github.com/polyfem/polyfem-data/blob/main/multi-material/tetwild/remove_tetwild_extra_points.py?raw=true). + +## Setting up the Simulation + +We will setup the simulation using PolyFEM's JSON interface. For more details, please refer to the [JSON Input](../../../json) documentation. + +We will go over the JSON script section by section. The complete JSON file can be found in the [GitHub Repo](https://github.com/polyfem/polyfem-data/blob/main/multi-material/stretch-cubes.json). + +### Geometry + +```json +{ + "geometry": { + "mesh": "cubes_v22.msh" + } +} +``` + +The `"geometry"` section specifies all required simulation geometry data. The `"mesh"` field defines the path to the volumetric mesh file. In this tutorial, only the `cubes_v22.msh` file from fTetwild will be utilized. + +### Boundary Conditions + +```json +{ + "boundary_conditions": { + "rhs": [0, 0, 0], + "dirichlet_boundary": [{ + "id": 1, + "value": ["-t", 0, 0] + }, { + "id": 3, + "value": ["t", 0, 0] + }] + } +} +``` + +In `boundary conditions`, we permit the `left box` and `right box` sections to have Dirichlet boundaries that move along the x-axis as a function of time `t`. Here we use the default boundary IDs assigned described [here](../../getting_started/#boundary-conditions). + +The `rhs` is defined as `[0, 0, 0]`, which indicates that the simulation has no prescribed body forces (i.e., no gravity). + +### Materials + +```json +{ + "materials": [{ + "id": 1, + "E": 2e11, + "nu": 0.3, + "rho": 7750, + "type": "NeoHookean" + }, { + "id": 2, + "E": 2.55e7, + "nu": 0.48, + "rho": 1700, + "type": "NeoHookean" + }, { + "id": 3, + "E": 2e11, + "nu": 0.3, + "rho": 7750, + "type": "NeoHookean" + }] +} +``` + +In the `materials` section, we assign identical material properties to the left and right boxes but use a softer material for the middle box. + +The volume IDs in this case are loaded directly from the `cubes_v22.msh` file. fTetWild automatically assigns these labels based on which domain the elements falls in the CSG. + +!!! warning + Loading volume IDs from the mesh file is currently only supported with version 4.1 MSH files (both ASCII and binary). + +### Time-Dependent Simulation +```json +{ + "time": { + "dt": 0.0025, + "time_steps": 20 + } +} +``` +In the `"time"` section, we define our time step size as `0.0025` seconds and the total number of steps to be `20`. + +### Contact + +```json +{ + "contact": { + "enabled": true, + "dhat": 0.001 + } +} +``` + +We enable contact by defining a `"contact"` section as above. + +### Solver + +```json +{ + "solver": { + "linear": { + "solver": "Eigen::PardisoLDLT" + }, + "nonlinear": { + "line_search": { + "method": "backtracking" + }, + "solver": "newton", + "grad_norm": 1e-05, + "use_grad_norm": true + }, + "advanced": { + "lump_mass_matrix": true + } + } +} +``` + +We make a few adjustments to the solver. Here we are using Newton with backtracking line-search and `Eigen::PardisoLDLT` for linear solves. We also set the convergence tolerance for the gradient norm to `1e-05`. + +### Spatial Discretization + +```json +{ + "space": { + "discr_order": [{ + "id": 1, + "order": 1 + }, { + "id": 2, + "order": 2 + }, { + "id": 3, + "order": 1 + }] + } +} +``` + +Lastly, we demonstrate that PolyFEM can simulate mixed order elements. In this example, we choose to use linear P1 elements for the left and right box, but use quadratic P2 elements for the middle box. + +The use of higher-order representations can lead to more precise calculations with slightly more running time. + +## Running the Simulation + +We can use the following command to run the simulation: + +```sh +polyfem -j stretch-cubes.json -o output/ +``` + +The simulation results will be written to `output/` as a sequence of VTU file and a PVD file for the time sequence. + +## Visualize the Simulation Results + +To visualize the simulation results in `VTU` format, we can use [`ParaView`](https://www.paraview.org/), an open-source, multi-platform data analysis and visualization application. + +To view the results, please follow the instruction below. + +![](paraview.png) + + +* Step 1: `File` - `Open`, select sequence group file step*.vtu or step*.vtm. +* Step 2: Click `Apply` under the tab `Properties` located in the left side of the GUI. +* Step 3: Click on `Wrap By Vector` to apply the displacement to the objects. This function can be found from the top menu bar. +* Step 4: Click again `Apply` under the tab `Properties`. +* Step 5: Now, the `Play` button can be used to view the time sequence results. + + diff --git a/tutorials/multi-material/paraview.png b/tutorials/multi-material/paraview.png new file mode 100644 index 00000000..0880ef95 Binary files /dev/null and b/tutorials/multi-material/paraview.png differ diff --git a/tutorials/multi-material/right_box.png b/tutorials/multi-material/right_box.png new file mode 100644 index 00000000..886f9ed4 Binary files /dev/null and b/tutorials/multi-material/right_box.png differ diff --git a/tutorials/multi-material/sim.gif b/tutorials/multi-material/sim.gif new file mode 100644 index 00000000..dbb3221f Binary files /dev/null and b/tutorials/multi-material/sim.gif differ diff --git a/tutorials/screw/full_sim.gif b/tutorials/screw/full_sim.gif new file mode 100644 index 00000000..a5962905 Binary files /dev/null and b/tutorials/screw/full_sim.gif differ diff --git a/tutorials/screw/screw/index.html b/tutorials/screw/screw/index.html new file mode 100644 index 00000000..58067fe5 --- /dev/null +++ b/tutorials/screw/screw/index.html @@ -0,0 +1,1313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Screwing a Bolt into a Nut - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Screw a Bolt into a Nut

+
Author: Duo Zhang
+ +

This tutorial showcases how to set up and use PolyFEM to simulate screwing a bolt into a nut (for example, to be used in a robotic assembly simulation).

+

+

Prerequisites

+

In this tutorial, we assume you have already installed PolyFEM on your machine. If not, please follow the instructions here. After compilation, to use PolyFEM in any working directory machine, we can set up an alias for the main executable for ./PolyFEM_bin by adding the following to ~/.bashrc or ~/.zshrc according to the type of your shell.

+
alias polyfem='path/to/PolyFEM/build/PolyFEM_bin'
+
+

Then you can use it by

+
polyfem --help
+
+

Data Preparation

+

The data needed in this tutorial can be found here. The volume mesh files are all made by fTetWild. Feel free you make your screws and nuts.

+

Overview

+

In these tutorials, the bolt will be screwed into the nut in several different ways. The tutorials can also be found at Github: Screw tutorials. The screw is represented as a volume mesh

+
"geometry": [{
+    "mesh": "data/screw-big.msh",
+    "transformation": {
+        "translation": [0, 0, 0],
+        "scale": 0.01
+    },
+    "volume_selection": 1,
+    "surface_selection": 2
+}]
+
+

and the nut is set to be an obstacle just to speed up the simulation by setting "is_obstacle": true because obstacles in PolyFEM are rigid and only the surface of obstacles is taken into consideration.

+
"geometry": [{
+    // ...
+}, {
+    "mesh": "data/nut-big.stl",
+    "is_obstacle": true,
+    "transformation": {
+        "translation": [0, -0.02675, 0],
+        "scale": 0.01
+    }
+}]
+
+

For other parameters, the bolt is using the parameter of steel

+
"materials": [{
+    "type": "NeoHookean",
+    "id": 1,
+    "E": 2e11,
+    "nu": 0.3,
+    "rho": 8050
+}]
+
+

Fully Constrained Screw in All Dimensions

+

In this tutorial, the screw is completely controlled by Dirichlet boundary conditions in all three dimensions. Thus the trajectory of the screw is fixed(rotation and transformation) and needs to be calculated carefully. For a single-threaded bolt and every rotation of \(360^{\circ}\), the bolt will go into the nut by the thread distance. In this case, the thread distance of the screw used in this tutorial is 1.33m. Therefore the Dirichlet Boundary Condition is set to

+
"dirichlet_boundary": [{
+    "id": 2,
+    "value": [
+        "x*cos(-2*pi*t) + z * sin(-2*pi*t)-x",
+        "-1.33*0.01*t", 
+        "-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z"
+    ],
+    "dimension": [true, true, true]
+}]
+
+

Here the angular velocity of the rotation is \(-2\pi\) and the bolt is getting into the nut along the y-axis by \(1.33\times 0.01\) since the bolt and the nut is scaled by 0.01. The "dimension" argument is set to be true for all three dimensions to make sure the bolt is in full control.

+

To view the whole JSON file for this case, please go to screw.json.

+

To run this JSON with PolyFEM, please go to the GitHub repo Github: Screw tutorials and run the following in your terminal

+
polyfem --json screws.json --output_dir results
+
+

Constrained Rotation but Free Movement in the Direction of Feed

+

In this tutorial, only two dimensions have Dirichlet boundary conditions. For the y-axis or the direction of feed, the screw is completely free. Therefore we only need to specify the rotation in the Dirichlet boundary condition and the bolt would get into the nut by basic high school physics.

+
"dirichlet_boundary": [{
+    "id": 2,
+    "value": [
+        "x*cos(-2*pi*t) + z * sin(-2*pi*t)-x",
+        "-1.33*0.01*t", 
+        "-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z"
+    ],
+    "dimension": [true, false, true]
+}]
+
+

The only thing we need to modify in the "dirichlet_boundary" argument is to change the y-axis in "dimension" to false.

+

Top Constrained Bolt

+

Instead of putting Dirichlet boundary conditions on the whole bolt, we can also constrain only the top of the bolt to simulate some actuators. The following image is the visualization of the bolt only constrained on the top of the bolt by Dirichlet boundary conditions.

+ +

+ +

+

To make specified boundary condition selections, please refer to Selections. In the JSON file, we need to change the surface_selection to the axis-plane selection method instead of using an integer to select the whole body of the bolt.

+
"geometry": [{
+    "mesh": "data/screw-big.msh",
+    "transformation": {
+        "translation": [0, 0, 0],
+        "scale": 0.01
+    },
+    "volume_selection": 1,
+    "surface_selection": [{
+        "id": 3,
+        "axis": "y",
+        "position": 0.11
+    }]
+}]
+
+

which is to apply the boundary condition with id=3 to the meshes whose coordinates in the y-axis are greater than 0.11 (If set "axis": "-y" is to select the negative side of the y-axis which are the meshes whose y-coordinates are less then 0.11).

+

To view the whole JSON file for this, please go to top_constrained.json.

+

Two Facets Constrained Bolt

+

In addition to constraining the top part of the bolt to simulate an actuator, we can also only constrain the two facets of the head of the bolt to simulate a user pinching the bolt with two fingers and trying to screw the bolt into the nut. The following image is the visulization of contraining just two facets of the bolt.

+ +

+ +

+

In this case, the "boundary_sidesets" becomes:

+
 "boundary_sidesets": [{
+    "id": 2,
+    "axis": -3,
+    "position": -0.039
+}, {
+    "id": 2,
+    "axis": 3,
+    "position": 0.039
+}]
+
+

To view the whole JSON file, please go to two_facets_contrained.json.

+

Gravity Controlled Bolt

+

In theory, if the friction is 0 and the gravity is the only force applied to the bolt, then the bolt should be able to get into the nut automatically under gravity. In this case, it is not very useful but it is interesting to test. There’s no need to set any boundary conditions because the bolt is completely free. The only thing that needs to be done is to enable gravity in the JSON file by setting

+
"boundary_conditions": {
+    "rhs": [0, 9.81, 0]
+},
+
+

Note that the direction of gravity is along the y-axis.

+

The whole JSON file is here only_gravity.json.

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/screw/screw/screw.md b/tutorials/screw/screw/screw.md new file mode 100644 index 00000000..46a91a12 --- /dev/null +++ b/tutorials/screw/screw/screw.md @@ -0,0 +1,182 @@ +# Screw a Bolt into a Nut + +
Author: Duo Zhang
+ +This tutorial showcases how to set up and use PolyFEM to simulate screwing a bolt into a nut (for example, to be used in a robotic assembly simulation). + +
+ +## Prerequisites + +In this tutorial, we assume you have already installed PolyFEM on your machine. If not, please follow the instructions [here](../../../cxx_index). After compilation, to use PolyFEM in any working directory machine, we can set up an alias for the main executable for `./PolyFEM_bin` by adding the following to `~/.bashrc` or `~/.zshrc` according to the type of your shell. + +```shell +alias polyfem='path/to/PolyFEM/build/PolyFEM_bin' +``` + +Then you can use it by + +```shell +polyfem --help +``` + +### Data Preparation + +The data needed in this tutorial can be found [here](https://github.com/KraftOreo/Screw_Polyfem_Tutorial/tree/main/data). The volume mesh files are all made by [fTetWild](https://github.com/wildmeshing/fTetWild). Feel free you make your screws and nuts. + +## Overview + +In these tutorials, the bolt will be screwed into the nut in several different ways. The tutorials can also be found at [Github: Screw tutorials](https://github.com/KraftOreo/Screw_Polyfem_Tutorial). The screw is represented as a [volume mesh](../../../json/#meshes) + +```json +"geometry": [{ + "mesh": "data/screw-big.msh", + "transformation": { + "translation": [0, 0, 0], + "scale": 0.01 + }, + "volume_selection": 1, + "surface_selection": 2 +}] +``` + +and the nut is set to be an [obstacle](../../../json/#obstacles) just to speed up the simulation by setting `"is_obstacle": true` because obstacles in PolyFEM are rigid and only the surface of obstacles is taken into consideration. + +```json +"geometry": [{ + // ... +}, { + "mesh": "data/nut-big.stl", + "is_obstacle": true, + "transformation": { + "translation": [0, -0.02675, 0], + "scale": 0.01 + } +}] +``` + +For other parameters, the bolt is using the parameter of steel + +```json +"materials": [{ + "type": "NeoHookean", + "id": 1, + "E": 2e11, + "nu": 0.3, + "rho": 8050 +}] +``` + +## Fully Constrained Screw in All Dimensions + +In this tutorial, the screw is completely controlled by [Dirichlet boundary conditions](../../getting_started/#boundary-conditions) in all three dimensions. Thus the trajectory of the screw is fixed(rotation and transformation) and needs to be calculated carefully. For a single-threaded bolt and every rotation of $360^{\circ}$, the bolt will go into the nut by the thread distance. In this case, the thread distance of the screw used in this tutorial is 1.33m. Therefore the Dirichlet Boundary Condition is set to + +```json +"dirichlet_boundary": [{ + "id": 2, + "value": [ + "x*cos(-2*pi*t) + z * sin(-2*pi*t)-x", + "-1.33*0.01*t", + "-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z" + ], + "dimension": [true, true, true] +}] +``` + +Here the angular velocity of the rotation is $-2\pi$ and the bolt is getting into the nut along the y-axis by $1.33\times 0.01$ since the bolt and the nut is scaled by 0.01. The `"dimension"` argument is set to be true for all three dimensions to make sure the bolt is in full control. + +To view the whole JSON file for this case, please go to [screw.json](https://github.com/KraftOreo/Screw_Polyfem_Tutorial/blob/main/screw.json). + +To run this JSON with PolyFEM, please go to the GitHub repo [Github: Screw tutorials](https://github.com/KraftOreo/Screw_Polyfem_Tutorial) and run the following in your terminal + +```shell +polyfem --json screws.json --output_dir results +``` + +## Constrained Rotation but Free Movement in the Direction of Feed + +In this tutorial, only two dimensions have [Dirichlet boundary conditions](../../getting_started/#boundary-conditions). For the y-axis or the direction of feed, the screw is completely free. Therefore we only need to specify the rotation in the Dirichlet boundary condition and the bolt would get into the nut by basic high school physics. + +```json +"dirichlet_boundary": [{ + "id": 2, + "value": [ + "x*cos(-2*pi*t) + z * sin(-2*pi*t)-x", + "-1.33*0.01*t", + "-1*x*sin(-2*pi*t) + z * cos(-2*pi*t)-z" + ], + "dimension": [true, false, true] +}] +``` + +The only thing we need to modify in the `"dirichlet_boundary"` argument is to change the y-axis in `"dimension"` to false. + +## Top Constrained Bolt + +Instead of putting [Dirichlet boundary conditions](../../getting_started/#boundary-conditions) on the whole bolt, we can also constrain only the top of the bolt to simulate some actuators. The following image is the visualization of the bolt only constrained on the top of the bolt by Dirichlet boundary conditions. + + +
+ +
+ +To make specified boundary condition selections, please refer to [Selections](../../getting_started/#selections-multi-material-and-collisions). In the JSON file, we need to change the `surface_selection` to the axis-plane selection method instead of using an integer to select the whole body of the bolt. + +```json +"geometry": [{ + "mesh": "data/screw-big.msh", + "transformation": { + "translation": [0, 0, 0], + "scale": 0.01 + }, + "volume_selection": 1, + "surface_selection": [{ + "id": 3, + "axis": "y", + "position": 0.11 + }] +}] +``` + +which is to apply the boundary condition with `id=3` to the meshes whose coordinates in the y-axis are greater than 0.11 (If set `"axis": "-y"` is to select the negative side of the y-axis which are the meshes whose y-coordinates are less then 0.11). + +To view the whole JSON file for this, please go to [top_constrained.json](https://github.com/KraftOreo/Screw_Polyfem_Tutorial/blob/main/top_constrained.json). + +## Two Facets Constrained Bolt + +In addition to constraining the top part of the bolt to simulate an actuator, we can also only constrain the two facets of the head of the bolt to simulate a user pinching the bolt with two fingers and trying to screw the bolt into the nut. The following image is the visulization of contraining just two facets of the bolt. + + +
+ +
+ +In this case, the `"boundary_sidesets"` becomes: + +```json + "boundary_sidesets": [{ + "id": 2, + "axis": -3, + "position": -0.039 +}, { + "id": 2, + "axis": 3, + "position": 0.039 +}] +``` + +To view the whole JSON file, please go to [two_facets_contrained.json](https://github.com/KraftOreo/Screw_Polyfem_Tutorial/blob/main/two_facets_contrained.json). + +## Gravity Controlled Bolt + +In theory, if the friction is 0 and the gravity is the only force applied to the bolt, then the bolt should be able to get into the nut automatically under gravity. In this case, it is not very useful but it is interesting to test. There's no need to set any boundary conditions because the bolt is completely free. The only thing that needs to be done is to enable gravity in the JSON file by setting + +```json +"boundary_conditions": { + "rhs": [0, 9.81, 0] +}, +``` + +Note that the direction of gravity is along the y-axis. + +The whole JSON file is here [only_gravity.json](https://github.com/KraftOreo/Screw_Polyfem_Tutorial/blob/main/only_gravity.json). \ No newline at end of file diff --git a/tutorials/screw/side_bc.png b/tutorials/screw/side_bc.png new file mode 100644 index 00000000..cebbce4b Binary files /dev/null and b/tutorials/screw/side_bc.png differ diff --git a/tutorials/screw/top_bc.png b/tutorials/screw/top_bc.png new file mode 100644 index 00000000..887a11be Binary files /dev/null and b/tutorials/screw/top_bc.png differ diff --git a/tutorials/sling-shot/setup.png b/tutorials/sling-shot/setup.png new file mode 100644 index 00000000..6a108053 Binary files /dev/null and b/tutorials/sling-shot/setup.png differ diff --git a/tutorials/sling-shot/sim1.gif b/tutorials/sling-shot/sim1.gif new file mode 100644 index 00000000..32e31e49 Binary files /dev/null and b/tutorials/sling-shot/sim1.gif differ diff --git a/tutorials/sling-shot/sim2.gif b/tutorials/sling-shot/sim2.gif new file mode 100644 index 00000000..5990d372 Binary files /dev/null and b/tutorials/sling-shot/sim2.gif differ diff --git a/tutorials/sling-shot/sling-shot/index.html b/tutorials/sling-shot/sling-shot/index.html new file mode 100644 index 00000000..374e3790 --- /dev/null +++ b/tutorials/sling-shot/sling-shot/index.html @@ -0,0 +1,1602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Sling-shot - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Sling Shot

+

In this tutorial, we are going to develop an environment from scratch using polyfempy and Python for a sling-shot. In this scene, we have two fingers holding the ball and the fingers will pull the rubber band and then release the ball into the air.

+

+ + +

+ +

Installation of Python Bindings of PolyFEM

+

In this tutorial, we are assuming you have already installed polyfempy on your machine. If not, please follow the instructions here. Note that there’s no need to install standalone PolyFEM. All the dependencies that polyfempy requires will be installed automatically including PolyFEM. Also please note that please install and compile polyfempy from source by doing +

python setup.py install
+
+instead of using the Conda deployment.

+

After installation, please try to run +

python -c "import polyfempy as pf"
+
+to test if polyfempy is installed successfully. Note that this tutorial is using Conda virtual environment.

+

Installation of Other Dependencies

+

To build this project, there are some other dependencies we need. Note that meshio and igl are optional. They are only required if you want to render the scenes with python. +1. numpy + conda install numpy +2. meshio(optional) + conda install -c conda-forge meshio +3. python bindings of libigl(optional) + conda install -c conda-forge igl

+

Data Preparation

+

The data needed in this tutorial can be found here. For triangle meshes, they are in surf_mesh folder and the volume meshes are in vol_mesh folder The volume mesh files are all made by fTetWild. Feel free you make you own sphere, rubber band and fingers.

+

Tutorial

+

All the code and JSONs can be found at Github: Slingshot Tutorial. +The file tree of this project is: +

project
+|___pushbox
+|   |___src
+|   |___assets
+|       |___data
+|       |   |___surf_mesh
+|       |   |___vol_mesh
+|       |___json
+|___test.py
+

+

Json Environment Setup

+
    +
  1. The first step is to make a JSON file slingshot.json in the JSON folder for the initial setup with the sphere, rubber band and fingers in it. Let’s load the objects! +
    "geometry": [
    +    {
    +        "mesh": "slingshot/assets/data/vol_mesh/mat.msh",
    +        "transformation": {
    +            "translation": [
    +                0.018,
    +                0.115,
    +                0
    +            ],
    +            "rotation": [
    +                0,
    +                0,
    +                90
    +            ],
    +            "scale": [
    +                0.00385,
    +                0.01,
    +                0.21
    +            ]
    +        },
    +        "volume_selection": 1,
    +        "advanced": {
    +            "normalize_mesh": false
    +        },
    +        "surface_selection": [
    +            {
    +                "id": 3,
    +                "axis": -3,
    +                "position": -0.1
    +            },
    +            {
    +                "id": 3,
    +                "axis": 3,
    +                "position": 0.1
    +            }
    +        ]
    +    },
    +    {
    +        "mesh": "slingshot/assets/data/vol_mesh/sphere_grooved.msh",
    +        "transformation": {
    +            "translation": [
    +                0,
    +                0.115,
    +                0
    +            ],
    +            "rotation": [
    +                90,
    +                0,
    +                0
    +            ],
    +            "scale": 0.0386
    +        },
    +        "volume_selection": 2,
    +        "advanced": {
    +            "normalize_mesh": false
    +        }
    +    },
    +    {
    +        "mesh": "slingshot/assets/data/surf_mesh/left_finger.obj",
    +        "is_obstacle": true,
    +        "enabled": true,
    +        "transformation": {
    +            "translation": [
    +                0.04,
    +                0.16032,
    +                0.0
    +            ],
    +            "rotation": [
    +                0,
    +                -90,
    +                0
    +            ],
    +            "scale": 1
    +        },
    +        "surface_selection": 1000
    +    },
    +    {
    +        "mesh": "slingshot/assets/data/surf_mesh/right_finger.obj",
    +        "is_obstacle": true,
    +        "enabled": true,
    +        "transformation": {
    +            "translation": [
    +                0.04,
    +                0.06965,
    +                0.0
    +            ],
    +            "rotation": [
    +                0,
    +                -90,
    +                0
    +            ],
    +            "scale": 1
    +        },
    +        "surface_selection": 1001
    +    }
    +]
    +
    + The first mesh is a 21cm rubber band. It is originally a mat but then rescaled to the shape of a rubber band. The second mesh is a sphere with a groove in the middle part of its body in case the rubber band might slide off the sphere if the friction is not enough. As for the two fingers, there’s no need to consider their deformation so they are set to obstacles. The displacements are not zero vectors because the fingers need to squeeze the ball and hold the ball tightly enough to pull the rubber band without sliding off the fingers while still pulling. + Note that the volume_selection here means to select the entire volume of the tetrahedron mesh to be simulated and the surface_selection means the surface area that you want to select. For example, both fingers are obstacles and they are triangle meshes. So to move and simulate them, I would like to select the entire finger. Thus here I can select them by giving the whole mesh an index: +
    {
    +    "mesh": "slingshot/assets/data/surf_mesh/right_finger.obj",
    +    "is_obstacle": true,
    +     ...
    +    "surface_selection": 1001
    +}
    +
    + In some scenarios, maybe the user only wants to select a part of the mesh and give the selected part a different movement from other parts. Then this could be done by setting the surface_selection part with specialized fields. For example, in this slingshot case, I would like to set the two ends of the rubber band to be still and the rest part to be able to move freely so that the rubber band will be extended while the sphere is pulled back by two fingers. To achieve this, the two ends of the rubber band can be selected by: +
    {
    +    "mesh": "slingshot/assets/data/vol_mesh/mat.msh",
    +    ...
    +    "surface_selection": [
    +        {
    +            "id": 3,
    +            "axis": -3,
    +            "position": -0.1
    +        },
    +        {
    +            "id": 3,
    +            "axis": 3,
    +            "position": 0.1
    +        }
    +    ]
    +}
    +
    + The detailed explanation of id, axis and position can be found at Selections in PolyFEM
  2. +
  3. The second thing is to give proper material parameters to these objects. Since we are using a rubber band and also we want to grasp the ball tightly enough, we can use the material parameters for both of them. If you don’t know the parameters of rubber, Just Google for Them! Feel free to use other material parameters. +
    "materials": [
    +{
    +    "id": 2,
    +    "E": 10000000.0,
    +    "nu": 0.4,
    +    "rho": 1150,
    +    "type": "NeoHookean"
    +},
    +{
    +    "id": 1,
    +    "E": 10000000.0,
    +    "nu": 0.4,
    +    "rho": 1150,
    +    "type": "NeoHookean"
    +}
    +]
    +
  4. +
  5. Since the sphere is all free and the only actuator are the fingers, there is no need to set Dirichlet boundary conditions for the sphere. As for the rubber band, although most of the rubber band is free to move, the two sides of the rubber band need to be static like attached to two poles. Then the Dirichlet boundary condition with "id":3 is set to zero for the two ends of the rubber band. +
    "boundary_conditions": {
    +    "obstacle_displacements": [
    +        {
    +            "id": 1000,
    +            "value": [
    +                "0",
    +                "-0.02 * t",
    +                "0"
    +            ]
    +        },
    +        {
    +            "id": 1001,
    +            "value": [
    +                "0",
    +                "0.02 * t",
    +                "0"
    +            ]
    +        }
    +    ],
    +    "rhs": [
    +        0,
    +        9.81,
    +        0
    +    ],
    +    "dirichlet_boundary": [
    +        {
    +            "id": 3,
    +            "value": [
    +                0,
    +                0,
    +                0
    +            ]
    +        }
    +    ]
    +}
    +
    +To view the whole JSON configuration file, please go to sling_shot.json.
  6. +
+

After loading every object, the environment should look like +

+

Python Environment Development

+

In this section, we will develop a python environment to do the slingshot.

+

Class Initialization

+

In the src folder, create a python file slingshot.py. In this file, let’s first import necessary libraries and create a PushBox class with its __init__ function: +

import polyfempy as pf
+import json
+import numpy as np
+
+
+class SlingShot:
+    def __init__(self) -> None:
+        self.asset_file = 'slingshot/assets/json/sling_shots.json'
+        with open(self.asset_file,'r') as f:
+            self.config = json.load(f)
+        self.dt = self.config["dt"]
+        self.step_count = 1
+        self.solver = pf.Solver()
+        self.solver.set_log_level(3)
+        self.solver.set_settings(json.dumps(self.config))
+        self.solver.load_mesh_from_settings()
+        self.dt = self.config["dt"]
+        self.t0 = self.config["t0"]
+        self.solver.init_timestepping(self.t0, self.dt)
+        self.id_to_mesh = {}
+        self.id_to_position = {}
+        self.id_to_vf = {}
+        for mesh in self.config["meshes"]:
+            self.id_to_mesh[mesh["body_id"]] = mesh["mesh"]
+            self.id_to_position[mesh["body_id"]] = mesh["position"]
+
+        # To grasp and hold the sphere very tightly
+        self.pre_steps = 4
+        for i in range(self.pre_steps):
+            self.run_simulation()
+        self.cumulative_action = {"0":np.array([0, -0.02 * self.dt * self.step_count, 0, 0.02 * self.dt * self.step_count]), "1":np.array([0, 0.02 * self.dt, 0, 0.02 * self.dt])}
+
+In the __init__ function, we load the environment configuration from the JSON file we just made, initialize a step counter and the PolyFEM solver. Here we set the log_level of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on docs for log_levels (More specifically, –log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}).

+

One thing to mention is that polyfempy is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so self.cumulative_action would take care of previous displacements.

+

Different from the PushBox environment, in this __init__ function, we need to squeeze the sphere to a certain point so that the sphere would never slide off the fingers unless the user decides to release it. That’s why at the end of the __init__ function four pre_steps are trying to close the fingers and squeeze the rubber ball.

+

Take the action from the user

+

The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side. In this tutorial, the action space is 4-dimensional and consists of movement of the fingers along the x-axis, y-axis, and z-axis and one action to close or open the two fingers. The argument actions in this function are a dictionary and contain the actions for both fingers. +

def set_boundary_conditions(self, actions:dict):
+    t0 = self.t0
+    t1 = t0 + self.dt
+    for mesh_id, action in actions.items():
+        self.solver.update_obstacle_displacement(
+                int(mesh_id),
+                [
+                    f"{self.cumulative_action[mesh_id][0]} + ((t-{t0})*{action[0]})/({t1-t0})",
+                    f"{self.cumulative_action[mesh_id][1] + self.cumulative_action[mesh_id][3]} + ((t-{t0})*{action[1] + action[3]})/({t1-t0})",
+                    f"{self.cumulative_action[mesh_id][2]} + ((t-{t0})*{action[2]})/({t1-t0})"
+                ]
+            )
+        self.cumulative_action[mesh_id] += action
+
+In the current setting, the fingers are opening and closing along the y-axis. That is why the action to control the fingers to open or close also needs to be added to the overall y-axis. Also since there are two fingers in the scene, we use a for loop to update the displacements for both of them.

+

Run simulation for the current timestep

+
def run_simulation(self):
+    self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt
+    self.step_count += 1 # increment the step counter
+    self.t0 += self.dt # increment the starting time point for the next time step
+
+

To simulate the current timestep, we need to call self.solver.step_in_time, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now.

+

Get the position of each object

+

If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function.

+
def get_object_positions(self):
+    points, tets, _, body_ids, displacement = self.solver.get_sampled_solution()
+    self.id_to_position = {}
+    self.id_to_vertex = {}
+    for mesh_id, _ in self.id_to_mesh.items():
+        vertex_position = points + displacement
+        self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id]
+        mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat
+        tet_barycenter = np.mean(vertex_position[tets], axis=1)
+        self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0)
+    return self.id_to_position
+
+

This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a “centroid” of the object to represent its position.

+

Step function exposed to the user

+

def step(self, action: np.ndarray):
+    actions = {
+            # x, y, z gripper_displacement
+            "0": np.array([action[0],
+                            action[1],
+                            action[2],
+                           -1 * action[3]/2]),
+            "1": np.array([action[0],
+                            action[1],
+                            action[2],
+                           action[3]/2])
+        }
+    self.set_boundary_conditions(actions)
+    self.run_simulation()
+    return self.get_object_positions()
+
+The step function here takes the action from the user and simulates the timestep and returns the positions for each object to the user. Note that the action from the user is a numpy array containing the x,y,z movement of the two fingers and the displacement between the two fingers for the current timestep. Then the action needs to be transferred into a dictionary that "self.set_boundary_conditions" function would recognize for both of the fingers. At the same time, the two fingers’ displacements are coupled so in the actions dictionary, the displacements need to be decoupled from both fingers and let them move in opposite directions.

+

To view the implementation of the whole class, please go to slingshot.py.

+

Test of the Environment

+

Here’s a very simple test case: +

from slingshot.src.slingshot import SlingShot
+import numpy as np
+
+env = SlingShot()
+print("Initialzied.")
+# pull the rubber band
+for i in range(3):
+    action = np.array([0.1,0,0,0])
+    env.step(action)
+
+# release it
+action = np.array([0,0,0,-0.1])
+env.step(action)
+# let it fly
+for i in range(20):
+    action = np.array([0,0,0,0])
+    env.step(action)
+
+You can create a test.py file for this, and run it in the project folder: +shell= +python test.py +The result should be like the gifs at the beginning.

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/sling-shot/sling-shot/sling-shot.md b/tutorials/sling-shot/sling-shot/sling-shot.md new file mode 100644 index 00000000..c63f228e --- /dev/null +++ b/tutorials/sling-shot/sling-shot/sling-shot.md @@ -0,0 +1,380 @@ +# Sling Shot +In this tutorial, we are going to develop an environment from scratch using `polyfempy` and Python for a sling-shot. In this scene, we have two fingers holding the ball and the fingers will pull the rubber band and then release the ball into the air. +

+ + +

+ +## Installation of Python Bindings of PolyFEM +In this tutorial, we are assuming you have already installed `polyfempy` on your machine. If not, please follow the instructions [here](https://github.com/polyfem/polyfem-python). Note that there's no need to install standalone PolyFEM. All the dependencies that `polyfempy` requires will be installed automatically including PolyFEM. Also please note that please install and compile `polyfempy` from source by doing +```sh +python setup.py install +``` +instead of using the Conda deployment. + +After installation, please try to run +```sh +python -c "import polyfempy as pf" +``` +to test if `polyfempy` is installed successfully. Note that this tutorial is using Conda virtual environment. + +## Installation of Other Dependencies +To build this project, there are some other dependencies we need. Note that `meshio` and `igl` are optional. They are only required if you want to render the scenes with python. +1. numpy + ```conda install numpy``` +2. meshio(optional) + ```conda install -c conda-forge meshio``` +3. python bindings of libigl(optional) + ```conda install -c conda-forge igl``` + +## Data Preparation +The data needed in this tutorial can be found [here](https://github.com/KraftOreo/Slingshot_Polyfem_Tutorial/tree/main/slingshot/assets/data). For triangle meshes, they are in [surf_mesh folder](https://github.com/KraftOreo/Slingshot_Polyfem_Tutorial/tree/main/slingshot/assets/data/surf_mesh) and the volume meshes are in [vol_mesh folder](https://github.com/KraftOreo/Slingshot_Polyfem_Tutorial/tree/main/slingshot/assets/data/vol_mesh) The volume mesh files are all made by [fTetWild](https://github.com/wildmeshing/fTetWild). Feel free you make you own sphere, rubber band and fingers. + +## Tutorial +All the code and JSONs can be found at [Github: Slingshot Tutorial](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial). +The file tree of this project is: +``` +project +|___pushbox +| |___src +| |___assets +| |___data +| | |___surf_mesh +| | |___vol_mesh +| |___json +|___test.py +``` +### Json Environment Setup +1. The first step is to make a JSON file `slingshot.json` in the JSON folder for the initial setup with the sphere, rubber band and fingers in it. Let's load the objects! + ```json + "geometry": [ + { + "mesh": "slingshot/assets/data/vol_mesh/mat.msh", + "transformation": { + "translation": [ + 0.018, + 0.115, + 0 + ], + "rotation": [ + 0, + 0, + 90 + ], + "scale": [ + 0.00385, + 0.01, + 0.21 + ] + }, + "volume_selection": 1, + "advanced": { + "normalize_mesh": false + }, + "surface_selection": [ + { + "id": 3, + "axis": -3, + "position": -0.1 + }, + { + "id": 3, + "axis": 3, + "position": 0.1 + } + ] + }, + { + "mesh": "slingshot/assets/data/vol_mesh/sphere_grooved.msh", + "transformation": { + "translation": [ + 0, + 0.115, + 0 + ], + "rotation": [ + 90, + 0, + 0 + ], + "scale": 0.0386 + }, + "volume_selection": 2, + "advanced": { + "normalize_mesh": false + } + }, + { + "mesh": "slingshot/assets/data/surf_mesh/left_finger.obj", + "is_obstacle": true, + "enabled": true, + "transformation": { + "translation": [ + 0.04, + 0.16032, + 0.0 + ], + "rotation": [ + 0, + -90, + 0 + ], + "scale": 1 + }, + "surface_selection": 1000 + }, + { + "mesh": "slingshot/assets/data/surf_mesh/right_finger.obj", + "is_obstacle": true, + "enabled": true, + "transformation": { + "translation": [ + 0.04, + 0.06965, + 0.0 + ], + "rotation": [ + 0, + -90, + 0 + ], + "scale": 1 + }, + "surface_selection": 1001 + } + ] + ``` + The first mesh is a 21cm rubber band. It is originally a mat but then rescaled to the shape of a rubber band. The second mesh is a sphere with a groove in the middle part of its body in case the rubber band might slide off the sphere if the friction is not enough. As for the two fingers, there's no need to consider their deformation so they are set to [obstacles](https://polyfem.github.io/json/#obstacles). The displacements are not zero vectors because the fingers need to squeeze the ball and hold the ball tightly enough to pull the rubber band without sliding off the fingers while still pulling. + Note that the `volume_selection` here means to select the entire volume of the tetrahedron mesh to be simulated and the `surface_selection` means the surface area that you want to select. For example, both fingers are obstacles and they are triangle meshes. So to move and simulate them, I would like to select the entire finger. Thus here I can select them by giving the whole mesh an index: + ```json + { + "mesh": "slingshot/assets/data/surf_mesh/right_finger.obj", + "is_obstacle": true, + ... + "surface_selection": 1001 + } + ``` + In some scenarios, maybe the user only wants to select a part of the mesh and give the selected part a different movement from other parts. Then this could be done by setting the surface_selection part with specialized fields. For example, in this slingshot case, I would like to set the two ends of the rubber band to be still and the rest part to be able to move freely so that the rubber band will be extended while the sphere is pulled back by two fingers. To achieve this, the two ends of the rubber band can be selected by: + ```json + { + "mesh": "slingshot/assets/data/vol_mesh/mat.msh", + ... + "surface_selection": [ + { + "id": 3, + "axis": -3, + "position": -0.1 + }, + { + "id": 3, + "axis": 3, + "position": 0.1 + } + ] + } + ``` + The detailed explanation of `id`, `axis` and `position` can be found at [Selections in PolyFEM](https://polyfem.github.io/tutorials/getting_started/#selections-multi-material-and-collisions) +2. The second thing is to give proper material parameters to these objects. Since we are using a rubber band and also we want to grasp the ball tightly enough, we can use the material parameters for both of them. If you don't know the parameters of rubber, Just Google for Them! Feel free to use other material parameters. + ```json + "materials": [ + { + "id": 2, + "E": 10000000.0, + "nu": 0.4, + "rho": 1150, + "type": "NeoHookean" + }, + { + "id": 1, + "E": 10000000.0, + "nu": 0.4, + "rho": 1150, + "type": "NeoHookean" + } + ] + ``` +4. Since the sphere is all free and the only actuator are the fingers, there is no need to set Dirichlet boundary conditions for the sphere. As for the rubber band, although most of the rubber band is free to move, the two sides of the rubber band need to be static like attached to two poles. Then the Dirichlet boundary condition with `"id":3` is set to zero for the two ends of the rubber band. + ```json + "boundary_conditions": { + "obstacle_displacements": [ + { + "id": 1000, + "value": [ + "0", + "-0.02 * t", + "0" + ] + }, + { + "id": 1001, + "value": [ + "0", + "0.02 * t", + "0" + ] + } + ], + "rhs": [ + 0, + 9.81, + 0 + ], + "dirichlet_boundary": [ + { + "id": 3, + "value": [ + 0, + 0, + 0 + ] + } + ] + } + ``` +To view the whole JSON configuration file, please go to [sling_shot.json](https://github.com/KraftOreo/Slingshot_Polyfem_Tutorial/blob/main/slingshot/assets/json/sling_shots.json). + +After loading every object, the environment should look like +![](setup.png) + + +### Python Environment Development +In this section, we will develop a python environment to do the slingshot. + +#### Class Initialization +In the `src` folder, create a python file `slingshot.py`. In this file, let's first import necessary libraries and create a PushBox class with its `__init__` function: +```python +import polyfempy as pf +import json +import numpy as np + + +class SlingShot: + def __init__(self) -> None: + self.asset_file = 'slingshot/assets/json/sling_shots.json' + with open(self.asset_file,'r') as f: + self.config = json.load(f) + self.dt = self.config["dt"] + self.step_count = 1 + self.solver = pf.Solver() + self.solver.set_log_level(3) + self.solver.set_settings(json.dumps(self.config)) + self.solver.load_mesh_from_settings() + self.dt = self.config["dt"] + self.t0 = self.config["t0"] + self.solver.init_timestepping(self.t0, self.dt) + self.id_to_mesh = {} + self.id_to_position = {} + self.id_to_vf = {} + for mesh in self.config["meshes"]: + self.id_to_mesh[mesh["body_id"]] = mesh["mesh"] + self.id_to_position[mesh["body_id"]] = mesh["position"] + + # To grasp and hold the sphere very tightly + self.pre_steps = 4 + for i in range(self.pre_steps): + self.run_simulation() + self.cumulative_action = {"0":np.array([0, -0.02 * self.dt * self.step_count, 0, 0.02 * self.dt * self.step_count]), "1":np.array([0, 0.02 * self.dt, 0, 0.02 * self.dt])} +``` +In the `__init__` function, we load the environment configuration from the JSON file we just made, initialize a step counter and the PolyFEM solver. Here we set the log_level of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on [docs for log_levels](https://polyfem.github.io/polyfempy_doc/#set_log_level) (More specifically, --log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}). + +One thing to mention is that `polyfempy` is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so `self.cumulative_action` would take care of previous displacements. + +Different from the [PushBox]() environment, in this `__init__` function, we need to squeeze the sphere to a certain point so that the sphere would never slide off the fingers unless the user decides to release it. That's why at the end of the `__init__` function four `pre_steps` are trying to close the fingers and squeeze the rubber ball. + +#### Take the action from the user +The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side. In this tutorial, the action space is 4-dimensional and consists of movement of the fingers along the x-axis, y-axis, and z-axis and one action to close or open the two fingers. The argument `actions` in this function are a dictionary and contain the actions for both fingers. +```python +def set_boundary_conditions(self, actions:dict): + t0 = self.t0 + t1 = t0 + self.dt + for mesh_id, action in actions.items(): + self.solver.update_obstacle_displacement( + int(mesh_id), + [ + f"{self.cumulative_action[mesh_id][0]} + ((t-{t0})*{action[0]})/({t1-t0})", + f"{self.cumulative_action[mesh_id][1] + self.cumulative_action[mesh_id][3]} + ((t-{t0})*{action[1] + action[3]})/({t1-t0})", + f"{self.cumulative_action[mesh_id][2]} + ((t-{t0})*{action[2]})/({t1-t0})" + ] + ) + self.cumulative_action[mesh_id] += action +``` +In the current setting, the fingers are opening and closing along the y-axis. That is why the action to control the fingers to open or close also needs to be added to the overall y-axis. Also since there are two fingers in the scene, we use a for loop to update the displacements for both of them. + +#### Run simulation for the current timestep + +```python +def run_simulation(self): + self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt + self.step_count += 1 # increment the step counter + self.t0 += self.dt # increment the starting time point for the next time step +``` + +To simulate the current timestep, we need to call `self.solver.step_in_time`, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now. + +#### Get the position of each object +If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function. + +```python +def get_object_positions(self): + points, tets, _, body_ids, displacement = self.solver.get_sampled_solution() + self.id_to_position = {} + self.id_to_vertex = {} + for mesh_id, _ in self.id_to_mesh.items(): + vertex_position = points + displacement + self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id] + mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat + tet_barycenter = np.mean(vertex_position[tets], axis=1) + self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0) + return self.id_to_position +``` + +This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a "centroid" of the object to represent its position. + +#### Step function exposed to the user +```python +def step(self, action: np.ndarray): + actions = { + # x, y, z gripper_displacement + "0": np.array([action[0], + action[1], + action[2], + -1 * action[3]/2]), + "1": np.array([action[0], + action[1], + action[2], + action[3]/2]) + } + self.set_boundary_conditions(actions) + self.run_simulation() + return self.get_object_positions() +``` +The step function here takes the action from the user and simulates the timestep and returns the positions for each object to the user. Note that the action from the user is a `numpy` array containing the `x,y,z` movement of the two fingers and the displacement between the two fingers for the current timestep. Then the action needs to be transferred into a dictionary that `"self.set_boundary_conditions"` function would recognize for both of the fingers. At the same time, the two fingers' displacements are coupled so in the `actions` dictionary, the displacements need to be decoupled from both fingers and let them move in opposite directions. + +To view the implementation of the whole class, please go to [slingshot.py](https://github.com/KraftOreo/Slingshot_Polyfem_Tutorial/blob/main/slingshot/src/slingshot.py). + +### Test of the Environment +Here's a very simple test case: +```python +from slingshot.src.slingshot import SlingShot +import numpy as np + +env = SlingShot() +print("Initialzied.") +# pull the rubber band +for i in range(3): + action = np.array([0.1,0,0,0]) + env.step(action) + +# release it +action = np.array([0,0,0,-0.1]) +env.step(action) +# let it fly +for i in range(20): + action = np.array([0,0,0,0]) + env.step(action) +``` +You can create a test.py file for this, and run it in the project folder: +```shell= +python test.py +``` +The result should be like the gifs at the beginning. \ No newline at end of file diff --git a/tutorials/sphere-pushing-box/sim1.gif b/tutorials/sphere-pushing-box/sim1.gif new file mode 100644 index 00000000..eea7ad2f Binary files /dev/null and b/tutorials/sphere-pushing-box/sim1.gif differ diff --git a/tutorials/sphere-pushing-box/sim2.gif b/tutorials/sphere-pushing-box/sim2.gif new file mode 100644 index 00000000..e08e21e5 Binary files /dev/null and b/tutorials/sphere-pushing-box/sim2.gif differ diff --git a/tutorials/sphere-pushing-box/sphere-pushing-box/index.html b/tutorials/sphere-pushing-box/sphere-pushing-box/index.html new file mode 100644 index 00000000..db5feb24 --- /dev/null +++ b/tutorials/sphere-pushing-box/sphere-pushing-box/index.html @@ -0,0 +1,1679 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Pushing A Box - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Sphere Pushing A Box

+
Author: Duo Zhang
+ +

In this tutorial, we will be focusing on how to make an environment using a sphere to push a box on a table from scratch. In this scenario, one single JSON file for PolyFEM is seemingly not enough to simulate a varying and interactive environment like this. Therefore we will be using polyfempy, the python bindings for PolyFEM, to enable a more functional and versatile development.

+

+ + +

+ +

Prerequisites

+

Install the Python Bindings of PolyFEM

+

In this tutorial, we are assuming you have already installed polyfempy in your machine. If not, please follow the instructions here. Note that there is no need to install standalone PolyFEM. All the dependencies that polyfempy requires will be installed automatically including PolyFEM. Also please note that please install and compile polyfempy from source by doing +

python setup.py install
+
+instead of using the conda depolyment.

+

After installation, please try to run +

python -c "import polyfempy as pf"
+
+to test if polyfempy is installed successfully.

+

Other Dependencies

+

Note that this tutorial is using a Conda virtual environment.

+

To build this project, there are some other depencies we need. Note that meshio and igl are optional. They are only required if you want to render the scenes with python.

+
    +
  1. numpy: conda install numpy
  2. +
  3. meshio (optional): conda install -c conda-forge meshio
  4. +
  5. python bindings of libigl (optional): conda install -c conda-forge igl
  6. +
+

Data Preparation

+

The data needed in this tutorial can be found here. For triangle meshes, they are in surf_mesh folder and the volume meshes are in vol_mesh folder. The volume mesh files are all made using fTetWild. Feel free you make your own spheres and boxes.

+

All the codes and JSON files can be found here.

+

Environment with Volume Meshes

+

JSON Environment Setup

+
    +
  1. +

    The first step is to make a JSON file push_box_all_vol_mesh.json in the JSON folder for the initial setup with the sphere, cube, and the table in it. Let’s load the objects! +

    {
    +    "geometry": [{
    +        "mesh": "pushbox/assets/data/vol_mesh/sphere.msh",
    +        "transformation": {
    +            "translation": [-1.0, 0.2, 0],
    +            "scale": 0.1
    +        },
    +        "volume_selection": 1,
    +        "surface_selection": 1
    +    }, {
    +        "mesh": "pushbox/assets/data/vol_mesh/cube.msh",
    +        "transformation": {
    +            "translation": [0, -0.0051, 0],
    +            "scale": [4, 0.01, 4]
    +        },
    +        "volume_selection": 2,
    +        "surface_selection": 2,
    +    }, {
    +        "mesh": "pushbox/assets/data/vol_mesh/cube.msh",
    +        "transformation": {
    +            "translation": [-0.65, 0.2, 0],
    +            "scale": 0.4
    +        },
    +        "volume_selection": 3,
    +        "surface_selection": 3
    +    }]
    +}
    +
    + The first mesh is the sphere, and the third one is the cube. Here, the cube’s mesh is re-scaled to act as the table. Feel free to use a 2D plane, or the mat mesh as the table in the GitHub repo.

    +
  2. +
  3. +

    The second thing is to give proper material parameters to these objects. +

    {
    +    "materials": [{
    +        "id": 1,
    +        "E": 2e11,
    +        "nu": 0.3,
    +        "rho": 7750,
    +        "type": "NeoHookean"
    +    }, {
    +        "id": 2,
    +        "E": 2e11,
    +        "nu": 0.3,
    +        "rho": 7750,
    +        "type": "NeoHookean"
    +    }, {
    +        "id": 3,
    +        "E": 1e8,
    +        "nu": 0.48,
    +        "rho": 1500.0,
    +        "type": "NeoHookean"
    +    }],
    +}
    +
    + The material parameters go to their matching meshes with the same "volume_selection"s.

    +
  4. +
  5. +

    For the boudary conditions, we can set it as: +

    {
    +    "boundary_conditions": {
    +        "rhs": [0, 9.81, 0],
    +        "dirichlet_boundary": [{
    +            "id": 1,
    +            "value": ["0", "0", "0"]
    +        }, {
    +           "id": 2,
    +            "value": [0, 0, 0]
    +        }]
    +    }
    +}
    +
    + The first Dirichlet boundary condition with "id":1 is set for the sphere. They are set to ["0", "0", "0"] just for initialization and the value of the boundary condition will be modified during the interaction.

    +

    The second Dirichlet boundary condition is for the table since there’s no need for the table to move. That’s why it’s set to [0,0,0].

    +

    Note that there’s no Dirichlet boundary condition with "id":3, however, the "boundary_id" for the cube is set to 3. This is because we want the cube to be completely free in all three dimensions.

    +

    In addition to the Dirichlet boundary conditions, the problem should also be time-dependent and the gravity should also be specified in the "rhs" argument (the gravity here is along the y-axis).

    +
  6. +
+

To view the whole JSON file, please go to pushbox_all_vol_mehses.json.

+

Python Environment Development

+

In this section, we will develop a python environment to control the sphere to interact with the box.

+

Class Initialization

+

In the src folder, create a python file pushbox.py. In this file, let’s first import necessary libraries and create a PushBox class with its __init__ function:

+
import polyfempy as pf
+import json
+import numpy as np
+
+class PushBox:
+    def __init__(self) -> None:
+        self.asset_file = 'pushbox/assets/json/push_box_all_vol_mesh.json'
+        with open(self.asset_file,'r') as f:
+            self.config = json.load(f)
+        self.step_count = 1
+        self.solver = pf.Solver()
+        self.solver.set_log_level(3)
+        self.solver.set_settings(json.dumps(self.config))
+        self.solver.load_mesh_from_settings()
+        self.cumulative_action = np.zeros(3)
+        self.dt = self.config["time"]['dt']
+        self.t0 = self.config["time"]["t0"]
+        self.solver.init_timestepping(self.t0, self.dt)
+
+        self.id_to_mesh = {}
+        self.id_to_position = {}
+        self.id_to_vf = {}
+        for mesh in self.config["geometry"]:
+            if ("is_obstacle" in mesh.keys()) and (mesh["is_obstacle"]):
+                self.obstacle_ids.append(mesh["surface_selection"])
+            else:
+                self.id_to_mesh[mesh["volume_selection"]] = mesh["mesh"]
+                self.id_to_position[mesh["volume_selection"]] = mesh["transformation"]["translation"]
+
+

In the __init__ function, we load the environment configuration from the JSON file we just made, initialize a step counter and the polyfem solver. Here we set the log_level of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on docs for log_levels (More specifically, --log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}).

+

One thing to mention is that polyfempy is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so self.cumulative_action would take care of previous displacements.

+

Take the action from the user

+

The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side.

+
def set_boundary_conditions(self, action: np.ndarray): -> None
+    t0 = self.t0 # starting time point for this timestep
+    t1 = t0 + self.dt # end time point for this timestep
+    self.solver.update_dirichlet_boundary(
+            int(1), # the dirichlet boundary condition with id=1
+            [
+                f"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})",
+                f"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})",
+                f"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})"
+            ]
+        )
+        self.cumulative_action += action # accumulate the new action to displacement 
+
+

This code block is to update the dirichlet boundary condition for the sphere in the next timestep. The current time is t0, and the current displacement is self.cumulative_action. Since the movement of the sphere needs to be continous and potential fatal penetration can happen if we just set the dirichlet boundary condition to self.cumulative_action + action. Image the action is large enough and greater than the edge length of the box while the sphere is on the left side of the box, then the sphere can teleport to the right side of the box without moving it. To avoid this kind of teleportation, we can interpolate the displacement from self.cumulative_action to self.cumulative_action + action for this timestep to make the movement of the sphere smooth and contiuous. The updated dirichlet boundary conditon in the above code block is the linear interplotion for the current timestep.

+

Run simulation for the current timestep

+
def run_simulation(self):
+    self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt
+    self.step_count += 1 # increment the step counter
+    self.t0 += self.dt # increment the starting time point for the next time step
+
+

To simulate the current timestep, we need to call self.solver.step_in_time, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now.

+

Get the position of each object

+

If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function.

+
def get_object_positions(self):
+    points, tets, _, body_ids, displacement = self.solver.get_sampled_solution()
+    self.id_to_position = {}
+    self.id_to_vertex = {}
+    for mesh_id, _ in self.id_to_mesh.items():
+        vertex_position = points + displacement
+        self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id]
+        mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat
+        tet_barycenter = np.mean(vertex_position[tets], axis=1)
+        self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0)
+    return self.id_to_position
+
+

This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a “centroid” of the object to represent its position.

+

Step function exposed to the user

+

def step(self, action: np.ndarray):
+    self.set_boundary_conditions(action)
+    self.run_simulation()
+    return self.get_object_positions()
+
+The step function here takes the action from the user and runs the simulation for this timestep and returns the positions for each object to the user.

+

To view the implementation of the whole class, please go to pushbox.py.

+

Test of the Environment

+

Here’s a very simple but weird test case:

+
from pushbox.src.pushbox import PushBox
+import numpy as np
+
+env = PushBox()
+
+# push forward
+for i in range(5):
+    action = np.array([0.1,0,0])
+    env.step(action)
+
+# go around the box
+action = np.array([-0.1,0,0])
+env.step(action)
+action = np.array([0,0,0.3])
+env.step(action)
+action = np.array([1.0,0,0])
+env.step(action)
+action = np.array([0,0.3,0])
+env.step(action)
+action = np.array([0,0,-0.6])
+env.step(action)
+action = np.array([0,-0.4,0])
+env.step(action)
+action = np.array([0,0,0.4])
+env.step(action)
+
+

You can create a test.py file for this, and run it in the project folder:

+
python test.py
+
+

The result should be like the gifs at the beginning.

+

Environment with Triangular Meshes

+

In the previous environment, all the meshes are volume meshes, so the sphere, box, and table are all deformable. The ability of deformation for all meshes is generally not good (if you want three of them to be deformable, then you can skip the rest of the tutorial) and takes a long time to simulate. Thus in this section, considering the table is only a support base and the sphere is only an actuator, the table and the sphere can be rigid. Then we can set them as obstacles (a special type of mesh whose displacement is fully prescribed and need not be volumetric).

+

Json Environment Setup

+

Now the mesh part only needs to load the box and the sphere and the table can be loaded as obstacles:

+
{
+    "geometry": [{
+        "mesh": "pushbox/assets/data/vol_mesh/cube.msh",
+        "transformation": {
+            "translation": [-0.65, 0.2, 0],
+            "scale": 0.4
+        },
+        "volume_selection": 3,
+        "surface_selection": 3,
+        "advanced": {
+            "normalize_mesh": false
+        }
+    }, {
+        "mesh": "pushbox/assets/data/surf_mesh/sphere.obj",
+        "is_obstacle": true,
+        "enabled": true,
+        "transformation": {
+            "translation": [-1.0, 0.2, 0],
+            "scale": 0.1
+        },
+        "surface_selection": 1000
+    }, {
+        "mesh": "pushbox/assets/data/surf_mesh/cube_dense.obj",
+        "is_obstacle": true,
+        "enabled": true,
+        "transformation": {
+            "translation": [0, -0.0051, 0],
+            "scale": [4, 0.01, 4]
+        },
+        "surface_selection": 1001
+    }]
+}
+
+

Note that the obstacles have no boundary conditions or material parameters (since they are already rigid) but only displacements. Also, there’s no need for Dirichlet boundary conditions anymore since the sphere is controlled by its displacement field.

+

The json file can be found at pushbox.json.

+

Python Environment Development

+

Class Initialization

+

In the src folder, create a python file pushbox_with_obstacles.py. The __init__ function stays the same except for the JSON file path.

+

Take the action from the user

+
def set_boundary_conditions(self, action):
+    t0 = self.t0
+    t1 = t0 + self.dt
+    self.solver.update_obstacle_displacement(
+            int(0),
+            [
+                f"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})",
+                f"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})",
+                f"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})"
+            ]
+        )
+    self.cumulative_action += action  
+
+

Note that the obstacles have no ID fields, thus we can’t update its displacement with its id but the order of the obstacles in the JSON file. The index starts from 0. The rest part remains the same.

+

To view the whole implementation of the environment with obstacles, please go to pushbox_with_obstacles.py.

+

Test of the Environment

+

The test script remains the same except for the first import. Make sure to import PushBox from the correct file.

+
from pushbox.src.pushbox_with_obstacles import PushBox
+
+

The entire script can be viewed in test_with_obs.py.

+

This is the end of the tutorial. Enjoy!

+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/sphere-pushing-box/sphere-pushing-box/sphere-pushing-box.md b/tutorials/sphere-pushing-box/sphere-pushing-box/sphere-pushing-box.md new file mode 100644 index 00000000..65942d9a --- /dev/null +++ b/tutorials/sphere-pushing-box/sphere-pushing-box/sphere-pushing-box.md @@ -0,0 +1,362 @@ +# Sphere Pushing A Box + +
Author: Duo Zhang
+ +In this tutorial, we will be focusing on how to make an environment using a sphere to push a box on a table from scratch. In this scenario, one single JSON file for PolyFEM is seemingly not enough to simulate a varying and interactive environment like this. Therefore we will be using `polyfempy`, the python bindings for PolyFEM, to enable a more functional and versatile development. + +

+ + +

+ +## Prerequisites + +### Install the Python Bindings of PolyFEM + +In this tutorial, we are assuming you have already installed polyfempy in your machine. If not, please follow the instructions [here](https://github.com/polyfem/polyfem-python). Note that there is no need to install standalone PolyFEM. All the dependencies that polyfempy requires will be installed automatically including PolyFEM. Also please note that please install and compile polyfempy from source by doing +```sh +python setup.py install +``` +instead of using the conda depolyment. + +After installation, please try to run +```sh +python -c "import polyfempy as pf" +``` +to test if `polyfempy` is installed successfully. + +### Other Dependencies + +Note that this tutorial is using a Conda virtual environment. + +To build this project, there are some other depencies we need. Note that meshio and igl are optional. They are only required if you want to render the scenes with python. + +1. numpy: `conda install numpy` +2. meshio (optional): `conda install -c conda-forge meshio` +3. python bindings of libigl (optional): `conda install -c conda-forge igl` + +## Data Preparation + +The data needed in this tutorial can be found [here](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/tree/main/assets/data). For triangle meshes, they are in [surf_mesh folder](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/tree/main/assets/data/surf_mesh) and the volume meshes are in [vol_mesh folder](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/tree/main/assets/data/vol_mesh). The volume mesh files are all made using [fTetWild](https://github.com/wildmeshing/fTetWild). Feel free you make your own spheres and boxes. + +All the codes and JSON files can be found [here](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial). + +## Environment with Volume Meshes + +### JSON Environment Setup + +1. The first step is to make a JSON file `push_box_all_vol_mesh.json` in the JSON folder for the initial setup with the sphere, cube, and the table in it. Let's load the objects! +```json +{ + "geometry": [{ + "mesh": "pushbox/assets/data/vol_mesh/sphere.msh", + "transformation": { + "translation": [-1.0, 0.2, 0], + "scale": 0.1 + }, + "volume_selection": 1, + "surface_selection": 1 + }, { + "mesh": "pushbox/assets/data/vol_mesh/cube.msh", + "transformation": { + "translation": [0, -0.0051, 0], + "scale": [4, 0.01, 4] + }, + "volume_selection": 2, + "surface_selection": 2, + }, { + "mesh": "pushbox/assets/data/vol_mesh/cube.msh", + "transformation": { + "translation": [-0.65, 0.2, 0], + "scale": 0.4 + }, + "volume_selection": 3, + "surface_selection": 3 + }] +} +``` + The first mesh is the sphere, and the third one is the cube. Here, the cube's mesh is re-scaled to act as the table. Feel free to use a 2D plane, or the mat mesh as the table in the GitHub repo. + +2. The second thing is to give proper material parameters to these objects. +```json +{ + "materials": [{ + "id": 1, + "E": 2e11, + "nu": 0.3, + "rho": 7750, + "type": "NeoHookean" + }, { + "id": 2, + "E": 2e11, + "nu": 0.3, + "rho": 7750, + "type": "NeoHookean" + }, { + "id": 3, + "E": 1e8, + "nu": 0.48, + "rho": 1500.0, + "type": "NeoHookean" + }], +} +``` + The material parameters go to their matching meshes with the same `"volume_selection"`s. + +3. For the boudary conditions, we can set it as: +```json +{ + "boundary_conditions": { + "rhs": [0, 9.81, 0], + "dirichlet_boundary": [{ + "id": 1, + "value": ["0", "0", "0"] + }, { + "id": 2, + "value": [0, 0, 0] + }] + } +} +``` + The first [Dirichlet boundary condition](../getting_started/#boundary-conditions) with `"id":1` is set for the sphere. They are set to `["0", "0", "0"]` just for initialization and the value of the boundary condition will be modified during the interaction. + + The second Dirichlet boundary condition is for the table since there's no need for the table to move. That's why it's set to `[0,0,0]`.
+ + Note that there's no Dirichlet boundary condition with `"id":3`, however, the `"boundary_id"` for the cube is set to 3. This is because we want the cube to be completely free in all three dimensions.
+ + In addition to the Dirichlet boundary conditions, the problem should also be time-dependent and the gravity should also be specified in the `"rhs"` argument (the gravity here is along the y-axis). + +To view the whole JSON file, please go to [pushbox_all_vol_mehses.json](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/blob/main/pushbox/assets/json/push_box_all_vol_mesh.json). + +### Python Environment Development + +In this section, we will develop a python environment to control the sphere to interact with the box. + +#### Class Initialization + +In the `src` folder, create a python file `pushbox.py`. In this file, let's first import necessary libraries and create a PushBox class with its `__init__` function: + +```python +import polyfempy as pf +import json +import numpy as np + +class PushBox: + def __init__(self) -> None: + self.asset_file = 'pushbox/assets/json/push_box_all_vol_mesh.json' + with open(self.asset_file,'r') as f: + self.config = json.load(f) + self.step_count = 1 + self.solver = pf.Solver() + self.solver.set_log_level(3) + self.solver.set_settings(json.dumps(self.config)) + self.solver.load_mesh_from_settings() + self.cumulative_action = np.zeros(3) + self.dt = self.config["time"]['dt'] + self.t0 = self.config["time"]["t0"] + self.solver.init_timestepping(self.t0, self.dt) + + self.id_to_mesh = {} + self.id_to_position = {} + self.id_to_vf = {} + for mesh in self.config["geometry"]: + if ("is_obstacle" in mesh.keys()) and (mesh["is_obstacle"]): + self.obstacle_ids.append(mesh["surface_selection"]) + else: + self.id_to_mesh[mesh["volume_selection"]] = mesh["mesh"] + self.id_to_position[mesh["volume_selection"]] = mesh["transformation"]["translation"] + +``` + +In the `__init__` function, we load the environment configuration from the JSON file we just made, initialize a step counter and the polyfem solver. Here we set the `log_level` of PolyFEM to 3 which only displays the errors and warnings from PolyFEM. Feel free to change the log level to get more information or less based on [docs for log_levels](https://polyfem.github.io/polyfempy_doc/#set_log_level) (More specifically, `--log_level ENUM:value in {trace->0,debug->1,info->2,warning->3,error->4,critical->5,off->6} OR {0,1,2,3,4,5,6}`). + +One thing to mention is that `polyfempy` is always calculating the result for this time step based on the displacement from the initial position which is the position read from the JSON file. However, we only pay close attention to the action or movement we want to exert for this timestep, so `self.cumulative_action` would take care of previous displacements. + +#### Take the action from the user + +The solver is already initialized in the previous section, now we can design an interface for the users to pass new actions to the sphere from their side. + +```python +def set_boundary_conditions(self, action: np.ndarray): -> None + t0 = self.t0 # starting time point for this timestep + t1 = t0 + self.dt # end time point for this timestep + self.solver.update_dirichlet_boundary( + int(1), # the dirichlet boundary condition with id=1 + [ + f"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})", + f"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})", + f"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})" + ] + ) + self.cumulative_action += action # accumulate the new action to displacement +``` + +This code block is to update the dirichlet boundary condition for the sphere in the next timestep. The current time is `t0`, and the current displacement is `self.cumulative_action`. Since the movement of the sphere needs to be continous and potential fatal penetration can happen if we just set the dirichlet boundary condition to `self.cumulative_action + action`. Image the action is large enough and greater than the edge length of the box while the sphere is on the left side of the box, then the sphere can teleport to the right side of the box without moving it. To avoid this kind of teleportation, we can interpolate the displacement from `self.cumulative_action` to `self.cumulative_action + action` for this timestep to make the movement of the sphere smooth and contiuous. The updated dirichlet boundary conditon in the above code block is the linear interplotion for the current timestep. + +#### Run simulation for the current timestep + +```python +def run_simulation(self): + self.solver.step_in_time(0, self.dt, self.step_count) # run simulation to the current time step, and the length of each timestep is self.dt + self.step_count += 1 # increment the step counter + self.t0 += self.dt # increment the starting time point for the next time step +``` + +To simulate the current timestep, we need to call `self.solver.step_in_time`, where the first argument of this function is the initial time of the simulation and the second argument is the time length for each time step and the third argument is the total time steps have been simulated now. + +#### Get the position of each object + +If you want to get the position information of each object in the simulation when you make interactions with the environment, you can get the positions of each mesh using this function. + +```python +def get_object_positions(self): + points, tets, _, body_ids, displacement = self.solver.get_sampled_solution() + self.id_to_position = {} + self.id_to_vertex = {} + for mesh_id, _ in self.id_to_mesh.items(): + vertex_position = points + displacement + self.id_to_vertex[mesh_id] = vertex_position[body_ids[:,0]==mesh_id] + mean_cell_id = np.mean(body_ids[tets], axis=1).astype(np.int32).flat + tet_barycenter = np.mean(vertex_position[tets], axis=1) + self.id_to_position[mesh_id] = np.mean(tet_barycenter[mean_cell_id == mesh_id], axis=0) + return self.id_to_position +``` + +This function gets sample vertices for each mesh from the solver and these vertices are averaged to get a "centroid" of the object to represent its position. + +#### Step function exposed to the user +```python +def step(self, action: np.ndarray): + self.set_boundary_conditions(action) + self.run_simulation() + return self.get_object_positions() +``` +The step function here takes the action from the user and runs the simulation for this timestep and returns the positions for each object to the user. + +To view the implementation of the whole class, please go to [pushbox.py](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/blob/main/pushbox/src/pushbox.py). + +### Test of the Environment + +Here's a very simple but weird test case: + +```python +from pushbox.src.pushbox import PushBox +import numpy as np + +env = PushBox() + +# push forward +for i in range(5): + action = np.array([0.1,0,0]) + env.step(action) + +# go around the box +action = np.array([-0.1,0,0]) +env.step(action) +action = np.array([0,0,0.3]) +env.step(action) +action = np.array([1.0,0,0]) +env.step(action) +action = np.array([0,0.3,0]) +env.step(action) +action = np.array([0,0,-0.6]) +env.step(action) +action = np.array([0,-0.4,0]) +env.step(action) +action = np.array([0,0,0.4]) +env.step(action) +``` + +You can create a test.py file for this, and run it in the project folder: + +```sh +python test.py +``` + +The result should be like the gifs at the beginning. + +## Environment with Triangular Meshes + +In the previous environment, all the meshes are volume meshes, so the sphere, box, and table are all deformable. The ability of deformation for all meshes is generally not good (if you want three of them to be deformable, then you can skip the rest of the tutorial) and takes a long time to simulate. Thus in this section, considering the table is only a support base and the sphere is only an actuator, the table and the sphere can be rigid. Then we can set them as [obstacles](../../../json/#obstacles) (a special type of mesh whose displacement is fully prescribed and need not be volumetric). + +### Json Environment Setup + +Now the mesh part only needs to load the box and the sphere and the table can be loaded as obstacles: + +```json +{ + "geometry": [{ + "mesh": "pushbox/assets/data/vol_mesh/cube.msh", + "transformation": { + "translation": [-0.65, 0.2, 0], + "scale": 0.4 + }, + "volume_selection": 3, + "surface_selection": 3, + "advanced": { + "normalize_mesh": false + } + }, { + "mesh": "pushbox/assets/data/surf_mesh/sphere.obj", + "is_obstacle": true, + "enabled": true, + "transformation": { + "translation": [-1.0, 0.2, 0], + "scale": 0.1 + }, + "surface_selection": 1000 + }, { + "mesh": "pushbox/assets/data/surf_mesh/cube_dense.obj", + "is_obstacle": true, + "enabled": true, + "transformation": { + "translation": [0, -0.0051, 0], + "scale": [4, 0.01, 4] + }, + "surface_selection": 1001 + }] +} +``` + +Note that the obstacles have no boundary conditions or material parameters (since they are already rigid) but only displacements. Also, there's no need for Dirichlet boundary conditions anymore since the sphere is controlled by its displacement field. + +The json file can be found at [pushbox.json](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/blob/main/pushbox/assets/json/push_box.json). + +### Python Environment Development + +#### Class Initialization + +In the `src` folder, create a python file `pushbox_with_obstacles.py`. The `__init__` function stays the same except for the JSON file path. + +#### Take the action from the user + +```python +def set_boundary_conditions(self, action): + t0 = self.t0 + t1 = t0 + self.dt + self.solver.update_obstacle_displacement( + int(0), + [ + f"{self.cumulative_action[0]} + ((t-{t0})*{action[0]})/({t1-t0})", + f"{self.cumulative_action[1]} + ((t-{t0})*{action[1]})/({t1-t0})", + f"{self.cumulative_action[2]} + ((t-{t0})*{action[2]})/({t1-t0})" + ] + ) + self.cumulative_action += action +``` + +Note that the obstacles have no ID fields, thus we can't update its displacement with its id but the order of the obstacles in the JSON file. The index starts from 0. The rest part remains the same. + +To view the whole implementation of the environment with obstacles, please go to [pushbox_with_obstacles.py](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/blob/main/pushbox/src/pushbox_with_obstacles.py). + +### Test of the Environment + +The test script remains the same except for the first import. Make sure to import `PushBox` from the correct file. + +```python +from pushbox.src.pushbox_with_obstacles import PushBox +``` + +The entire script can be viewed in [test_with_obs.py](https://github.com/KraftOreo/PushBox_PolyFEM_Tutorial/blob/main/test_obs.py). + +This is the end of the tutorial. Enjoy! \ No newline at end of file diff --git a/tutorials/trajectory-optimization/sim.gif b/tutorials/trajectory-optimization/sim.gif new file mode 100644 index 00000000..97fc4bec Binary files /dev/null and b/tutorials/trajectory-optimization/sim.gif differ diff --git a/tutorials/trajectory-optimization/trajectory-optimization/index.html b/tutorials/trajectory-optimization/trajectory-optimization/index.html new file mode 100644 index 00000000..8004747a --- /dev/null +++ b/tutorials/trajectory-optimization/trajectory-optimization/index.html @@ -0,0 +1,1345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Trajectory Optimization - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+ + + + + + + + + + +

Trajectory Optimization

+
Author: Zizhou Huang, Date: Feb. 19, 2024
+ +

In this tutorial, we will demonstrate how to use polyfem to optimize the initial velocity of throwing a ball to match a given trajectory.

+

+ +

+ +

Prerequisites

+

The following items are necessary to complete this tutorial. To reproduce the experiment, you can feel free to use either the given mesh files or your own mesh.

+ +

The files can also be found at polyfem-data.

+

Build PolyFEM

+

The instructions for building PolyFEM can be found here.

+

Then you can use it by

+
polyfem --help
+
+

Setting up the Optimization

+

We will setup the optimization using PolyFEM’s JSON interface. For more details, please refer to the JSON Input documentation.

+

We will only go over the JSON script for the optimization configuration, please refer to other tutorials for the JSON script for the simulation configuration.

+

Parameters

+
{
+    "parameters": [
+        {
+            "number": 2,
+            "initial": [4, 0]
+        }
+    ]
+}
+
+

In parameters, we specify the dimension and initial guess of the variable to be optimized. Since we are going to optimize the initial velocity of a ball in 2D, the dimension is 2.

+

In more complex optimizations, where several types of parameters are optimized, the parameters can be a list of variables of different dimensions.

+

States

+
{
+    "states": [
+        {
+            "path": "barycenter.json"
+        },
+        {
+            "path": "barycenter-target.json"
+        }
+    ]
+}
+
+

In states, we specify the path to the JSON files of simulations, they follow the same rules for the simulation JSON scripts. PolyFEM will create a number of simulators, one for each JSON file, whose parameters can be optimized. During the optimization, certain parameters in these configurations are optimized, but the optimized values will not overwrite the values in these JSON files. Each simulator gets an ID starting from 0, following the order in this list. The ID of simulators may be used in variable to simulation and functionals.

+

Here we have two simulators: The first one is the simulator being optimized, while the second one is a fixed simulation that generates a reference trajectory. These JSON files are only for initializing the simulators, so one can use the same path for multiple simulators if possible.

+

Variable to Simulation

+
{
+    "variable_to_simulation": [
+        {
+            "type": "initial",
+            "state": 0,
+            "composition": [{
+                "type": "append-values",
+                "values": [0, 0]
+            },{
+                "type": "per-body-to-per-node",
+                "state": 0
+            },{
+                "type": "append-const",
+                "value": 0,
+                "size": 146,
+                "start": 0
+            }]
+        }
+    ]
+}
+
+

In variable to simulation, we specify how the optimization variables in parameters control the simulation configurations. Since different types of parameters in a number of simulations can be controlled at the same time, the variable to simulation is a list, where each entry specifies the control of one type of parameter, e.g. initial condition, in one simulation. The type specifies the type of parameter in the simulation, and state points to the ID of the simulation (according to the order in states).

+

The initial condition parameter has a dimension of 2 * dim * n_basis, where dim is the dimension of the simulation (2 or 3), n_basis is the number of finite element basis in the simulation, because it consists of the initial displacement and velocity at every basis node. This allows the user to specify the initial condition not only as a rigid body transformation, but also as an arbitrary deformation, e.g. stretching and shearing.

+

In this tutorial, we only optimize the initial velocity of the ball, so we need to build a mapping, which we call composition in the JSON script, from the variable of size 2 to the full initial condition parameter of size 2 * dim * n_basis. The composition is a list of some pre-defined mappings, which will apply to the optimization variables in order, and the final output of the mappings will be assigned to the initial condition parameter.

+

There are two objects with different volume IDs, specified in barycenter.json and barycenter-target.json, and we only want to control the initial velocity of the ball, with volume ID 1. First, in append-values we append two zeros to the optimization variable, which represents the zero initial velocity of the floor. Second, in per-body-to-per-node we map the per-volume values to per-node, whose output has the dimension of dim * n_basis. Finally, in append-const we append more zeros to the start of the vector, to account for the zero initial displacement. Please refer to the opt-input-spec.json for the documentation of compositions.

+

Functionals

+
{
+    "functionals": [
+        {
+            "type": "transient_integral",
+            "state": 0,
+            "integral_type": "uniform",
+            "static_objective": 
+            {
+                "type": "center-target",
+                "state": 0,
+                "target_state": 1,
+                "volume_selection": [1]
+            }
+        }
+    ]
+}
+
+

The functionals specify the objective being minimized in the optimization. Please refer to objective-input-spec.json for the documentation of functionals.

+

Here we perform trajectory optimization on the ball, so the objective is the \(L^2\) difference between the two ball barycenters in the two simulations, integrated over time.

+
{
+    "type": "center-target",
+    "state": 0,
+    "target_state": 1,
+    "volume_selection": [1]
+}
+
+

The center-target computes the \(L^2\) difference between the solutions in state and target_state, integrated over the space with volume selection ID 1. We assume that both simulators have the same number of basis and dimension on the same volume selection (number of basis on other volume selections can be different).

+
{
+    "type": "transient_integral",
+    "state": 0,
+    "integral_type": "uniform",
+    "static_objective": { ... }
+}
+
+

The transient integral computes the integral over time of the static objective. The integral type and state specify the quadrature scheme and the simulator (the objective gets information like the number of time steps and dt from the simulator).

+

Output

+
"output": {
+    "log": {
+        "level": 1
+    }
+}
+
+

The output contains options regarding the logging of the optimization, here output/log/level specifies a log level of 1, corresponding to debugging, to log the energy and gradient during the optimization. The log level for simulations are specified in each state json, normally the simulation log level is set to info or warn so that we can focus more on the optimization logs.

+

Solver

+
    "solver": {
+        "nonlinear": {
+            "history_size": 2,
+            "grad_norm": 1e-4
+        }
+    }
+
+

The solver contains options of the nonlinear solver for the optimization. Since our forward problem and inverse problem share the same nonlinear solver code, the options of the inverse problem are the same as in the forward problem. However, since we can’t compute the second order derivatives of the inverse problem, the Newton’s method is not available here. By default the solver is L-BFGS, a quasi-Newton method using a limited amount of memory.

+ +
+
+ + + Last update: + 2024-02-19 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/trajectory-optimization/trajectory-optimization/trajectory-optimization.md b/tutorials/trajectory-optimization/trajectory-optimization/trajectory-optimization.md new file mode 100644 index 00000000..d0814df6 --- /dev/null +++ b/tutorials/trajectory-optimization/trajectory-optimization/trajectory-optimization.md @@ -0,0 +1,179 @@ +# Trajectory Optimization + +
Author: Zizhou Huang, Date: Feb. 19, 2024
+ +In this tutorial, we will demonstrate how to use polyfem to optimize the initial velocity of throwing a ball to match a given trajectory. + +

+ +

+ +## Prerequisites + +The following items are necessary to complete this tutorial. To reproduce the experiment, you can feel free to use either the given mesh files or your own mesh. + +- [ ] [Build PolyFEM](../../cxx_index.md) +- [ ] [Download File: square.obj](https://github.com/polyfem/polyfem-data/blob/main/contact/meshes/2D/simple/square.obj) +- [ ] [Download File: circle.msh](https://github.com/polyfem/polyfem-data/blob/main/differentiable/circle.msh) +- [ ] [Download File: barycenter-opt.json](https://github.com/polyfem/polyfem-data/blob/main/differentiable/optimizations/initial-condition-trajectory-opt/barycenter-opt.json) +- [ ] [Download File: barycenter.json](https://github.com/polyfem/polyfem-data/blob/main/differentiable/optimizations/initial-condition-trajectory-opt/barycenter.json) +- [ ] [Download File: barycenter-target.json](https://github.com/polyfem/polyfem-data/blob/main/differentiable/optimizations/initial-condition-trajectory-opt/barycenter-target.json) + +The files can also be found at [polyfem-data](https://github.com/polyfem/polyfem-data/blob/main/differentiable/optimizations/initial-condition-trajectory-opt/). + +### Build PolyFEM + +The instructions for building PolyFEM can be found [here](../../cxx_index.md). + +Then you can use it by + +```shell +polyfem --help +``` + +## Setting up the Optimization + +We will setup the optimization using PolyFEM's JSON interface. For more details, please refer to the [JSON Input](../../json.md) documentation. + +We will only go over the JSON script for the optimization configuration, please refer to other tutorials for the JSON script for the simulation configuration. + +### Parameters + +```json +{ + "parameters": [ + { + "number": 2, + "initial": [4, 0] + } + ] +} +``` + +In `parameters`, we specify the dimension and initial guess of the variable to be optimized. Since we are going to optimize the initial velocity of a ball in 2D, the dimension is 2. + +In more complex optimizations, where several types of parameters are optimized, the `parameters` can be a list of variables of different dimensions. + +### States + +```json +{ + "states": [ + { + "path": "barycenter.json" + }, + { + "path": "barycenter-target.json" + } + ] +} +``` + +In `states`, we specify the path to the JSON files of simulations, they follow the same [rules](../../json.md) for the simulation JSON scripts. PolyFEM will create a number of simulators, one for each JSON file, whose parameters can be optimized. During the optimization, certain parameters in these configurations are optimized, but the optimized values will not overwrite the values in these JSON files. Each simulator gets an ID starting from 0, following the order in this list. The ID of simulators may be used in `variable to simulation` and `functionals`. + +Here we have two simulators: The first one is the simulator being optimized, while the second one is a fixed simulation that generates a reference trajectory. These JSON files are only for initializing the simulators, so one can use the same path for multiple simulators if possible. + +### Variable to Simulation + +```json +{ + "variable_to_simulation": [ + { + "type": "initial", + "state": 0, + "composition": [{ + "type": "append-values", + "values": [0, 0] + },{ + "type": "per-body-to-per-node", + "state": 0 + },{ + "type": "append-const", + "value": 0, + "size": 146, + "start": 0 + }] + } + ] +} +``` + +In `variable to simulation`, we specify how the optimization variables in `parameters` control the simulation configurations. Since different types of parameters in a number of simulations can be controlled at the same time, the `variable to simulation` is a list, where each entry specifies the control of one type of parameter, e.g. initial condition, in one simulation. The `type` specifies the type of parameter in the simulation, and `state` points to the ID of the simulation (according to the order in `states`). + +The initial condition parameter has a dimension of `2 * dim * n_basis`, where `dim` is the dimension of the simulation (2 or 3), `n_basis` is the number of finite element basis in the simulation, because it consists of the initial displacement and velocity at every basis node. This allows the user to specify the initial condition not only as a rigid body transformation, but also as an arbitrary deformation, e.g. stretching and shearing. + +In this tutorial, we only optimize the initial velocity of the ball, so we need to build a mapping, which we call `composition` in the JSON script, from the variable of size 2 to the full initial condition parameter of size `2 * dim * n_basis`. The `composition` is a list of some pre-defined mappings, which will apply to the optimization variables in order, and the final output of the mappings will be assigned to the initial condition parameter. + +There are two objects with different volume IDs, specified in `barycenter.json` and `barycenter-target.json`, and we only want to control the initial velocity of the ball, with volume ID 1. First, in `append-values` we append two zeros to the optimization variable, which represents the zero initial velocity of the floor. Second, in `per-body-to-per-node` we map the per-volume values to per-node, whose output has the dimension of `dim * n_basis`. Finally, in `append-const` we append more zeros to the start of the vector, to account for the zero initial displacement. Please refer to the [opt-input-spec.json](https://github.com/polyfem/polyfem/blob/main/json-specs/opt-input-spec.json) for the documentation of compositions. + +### Functionals + +```json +{ + "functionals": [ + { + "type": "transient_integral", + "state": 0, + "integral_type": "uniform", + "static_objective": + { + "type": "center-target", + "state": 0, + "target_state": 1, + "volume_selection": [1] + } + } + ] +} +``` + +The `functionals` specify the objective being minimized in the optimization. Please refer to [objective-input-spec.json](https://github.com/polyfem/polyfem/blob/main/json-specs/objective-spec.json) for the documentation of `functionals`. + +Here we perform trajectory optimization on the ball, so the objective is the $L^2$ difference between the two ball barycenters in the two simulations, integrated over time. + +```json +{ + "type": "center-target", + "state": 0, + "target_state": 1, + "volume_selection": [1] +} +``` + +The `center-target` computes the $L^2$ difference between the solutions in `state` and `target_state`, integrated over the space with `volume selection` ID 1. We assume that both simulators have the same number of basis and dimension on the same volume selection (number of basis on other volume selections can be different). + +```json +{ + "type": "transient_integral", + "state": 0, + "integral_type": "uniform", + "static_objective": { ... } +} +``` + +The `transient integral` computes the integral over time of the `static objective`. The `integral type` and `state` specify the quadrature scheme and the simulator (the objective gets information like the number of time steps and dt from the simulator). + +### Output + +```json +"output": { + "log": { + "level": 1 + } +} +``` + +The `output` contains options regarding the logging of the optimization, here `output/log/level` specifies a log level of 1, corresponding to `debugging`, to log the energy and gradient during the optimization. The log level for simulations are specified in each state json, normally the simulation log level is set to `info` or `warn` so that we can focus more on the optimization logs. + +### Solver + +```json + "solver": { + "nonlinear": { + "history_size": 2, + "grad_norm": 1e-4 + } + } +``` + +The `solver` contains options of the nonlinear solver for the optimization. Since our forward problem and inverse problem share the same nonlinear solver code, the options of the inverse problem are the same as in the forward problem. However, since we can't compute the second order derivatives of the inverse problem, the Newton's method is not available here. By default the solver is [L-BFGS](https://github.com/yixuan/LBFGSpp), a quasi-Newton method using a limited amount of memory. diff --git a/tutorials/vision-proprioception/paraview.png b/tutorials/vision-proprioception/paraview.png new file mode 100644 index 00000000..143ef0e1 Binary files /dev/null and b/tutorials/vision-proprioception/paraview.png differ diff --git a/tutorials/vision-proprioception/vision-proprioception/index.html b/tutorials/vision-proprioception/vision-proprioception/index.html new file mode 100644 index 00000000..36c02de4 --- /dev/null +++ b/tutorials/vision-proprioception/vision-proprioception/index.html @@ -0,0 +1,1604 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + Vision Proprioception - PolyFEM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + +
+ + +
+ +
+ + + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + + + + +
+
+ + + + + + + + + + +

Generate Vision Proprioception Data for Deformable Objects

+
Author: Hanwen Zhao
+ +

+ + +

+ +

In this tutorial, we will demonstrate how PolyFEM can be used to generate vision proprioception data for soft robotics study. The GitHub repo of this tutorial can be found here.

+

Prerequisites

+

The following, items are necessary to complete this tutorial. To replicate the experiment, readers can use either the given mesh files or their own mesh files.

+

In this tutorial, we assume that readers already have PolyFEM installed. If not, the PolyFEM install instruction can be found here.

+

Meshes

+

To decrease the computing complexity of this tutorial example, we assume that the target item is the only deformable solid and the environment is rigid and immovable.

+ + + + + + + + + + + + + +
Target Object Mesh (Radius: 0.5)Environment Mesh (Radius: 5.0)
+

Problem Formulation

+

This tutorial’s objective is to launch a deformable target object into an environment mesh (i.e. a sphere rolling in a bowl) and gather the corresponding vision-based proprioceptive data (the internal view that shows deformation). Such data can be utilized to investigate the relationship between vision-based proprioception and kinematics of deformable objects.

+

JSON Interface

+

PolyFEM provides an interface through JSON and Python. Here we demonstrate the JSON interface setup first. For more details, please refer to the JSON API.

+

Setup Similation

+

In this section, we will go over the JSON script that defines the simulation section by section. The complete JSON file can be found here.

+

Geometry

+

The "geometry" section specifies all geometry data required for simulation. For example, "mesh" defines the path to the volumetric mesh file. Then, the term "transformation" defines the operations that will be applied to the current mesh file. Next, volume selection specifies the mesh’s identifier, allowing other parameters to be applied to specific meshes based on volume selection.

+

Furthermore, is obstacle permits the definition of a mesh as part of the environment. Obstacles are fully prescribed objects and as such, only their surface needs to be specified.

+
"geometry": [{
+    "mesh": "../data/sphere.msh",
+    "transformation": {
+        "translation": [-0.4, 0.18, 0],
+        "scale": 0.1
+    },
+    "volume_selection": 1
+}, {
+    "mesh": "../data/scene_bowl.msh",
+    "is_obstacle": true,
+    "enabled": true,
+    "transformation": {
+        "translation": [0, 0, 0],
+        "scale": 0.01
+    }
+}]
+
+ +

In the previous section, we defined the simulation-required geometry. Following that, we must define their material properties and initial conditions. In the "initial_conditions" section, we assign the mesh with volume selection value 1 and an initial velocity of [2, 0, 2]. Next, in the materials section, we use NeoHookean for non-linear elasticity and define Young’s modulus E, Poisson’s ratio nu, and density rho.

+

Next, we define time step size as dt and time steps as the number of steps. enable in the contact determines whether collision detection and friction calculation are considered. And boundary conditions permit us to add gravity to the simulation with ease.

+
{
+    "initial_conditions": {
+        "velocity": [
+            {
+                "id": 1,
+                "value": [2, 0, 2]
+            }
+        ]
+    },
+    "materials": [
+        {
+            "id": 1,
+            "E": 5000.0,
+            "nu": 0.3,
+            "rho": 100,
+            "type": "NeoHookean"
+        }
+    ],
+    "time": {
+        "t0": 0,
+        "dt": 0.1,
+        "time_steps": 100
+    },
+    "contact": {
+        "enabled": true,
+        "dhat": 0.0001,
+        "epsv": 0.004,
+        "friction_coefficient": 0.3
+    },
+    "boundary_conditions": {
+        "rhs": [0, 9.81, 0]
+    }
+}
+
+ +
{
+    "solver": {
+        "linear": {
+            "solver": "Eigen::CholmodSupernodalLLT"
+        },
+        "nonlinear": {
+            "line_search": {
+                "method": "backtracking"
+            },
+            "grad_norm": 0.001,
+            "use_grad_norm": false
+        },
+        "contact": {
+            "friction_iterations": 20,
+            "CCD": {
+                "broad_phase": "STQ"
+            }
+        }
+    },
+    "output": {
+        "json": "results.json",
+        "paraview": {
+            "file_name": "output.pvd",
+            "options": {
+                "material": true,
+                "body_ids": true
+            },
+            "vismesh_rel_area": 10000000
+        },
+        "advanced": {
+            "save_solve_sequence_debug": false,
+            "save_time_sequence": true
+        }
+    }
+}
+
+

Run Simulation

+

To run the simulation, the following command can be used where polyfem should be replaced with .../polyfem/build/PolyFEM_bin.

+
cd PolyFEM_Tutorial_SoRo
+mkdir output
+polyfem --json json/scene_bowl.json --output_dir output
+
+

The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence.

+

Python Interface

+

In addition, to the JSON files, PolyFEM also supports a Python interface through polyfem-python. More information can be found in the Python Documentation. Python interface not only allows to read configuration from JSON directly but also allows user to have more control during the simulation (eg. simulation stepping or change boundary conditions).

+

Import from JSON

+

If the JSON file is available, we can simply import the configuration by reading the JSON file.

+
import polyfem as pf
+
+with open('./scene_bowl.json') as f:
+    config = json.load(f)
+solver = pf.Solver()
+solver.set_settings(json.dumps(config))
+solver.load_mesh_from_settings()
+
+

Run Simulation in Python

+

Python interface provides a more flexible solution to simulate solving the time-dependent problem completely or interacting with the solver with steps.

+
# OPTION 1: solve the problem and extract the solution
+solver.solve()
+pts, tris, velocity = solver.get_sampled_solution()
+
+
# OPTION 2: solve the problem with time steping
+solver.init_timestepping(t0, dt)
+for i in range(timesteps):
+    solver.step_in_time(t, dt, i)
+    # interact with intermediate result
+
+

Visualize Simulation Results

+

To visualize the simulation sequential results in VTU format, we can use ParaView, an open-source, multi-platform data analysis and visualization application.

+

To view the results, please follow the instructions below. +![]paraview.png) +* Step 1: File - Open, select sequence group file step.vtu or step.vtm. +* Step 2: Click Apply under the tab Properties located on the left side of the GUI. +* Step 3: Click on Wrap By Vector to apply the displacement to the objects. This function can be found in the top menu bar. +* Step 4: Click again Apply under the tab Properties. +* Step 5: Now, the Play button can be used to view the time sequence results.

+

Bouns: Blender Rendering

+

Blender is a free and open-source 3D computer graphics software toolset that can be used for animation, rendering, and video games. Here, we are using Blender to create vision propriocetions (internal views). First, we need to convert the VTU outputs back to mesh files that represent the target object at each time step. Then, we can colorize the target object using vertex coloring and render the final image with the Blender camera instance.

+

Convert VTU to OBJ

+

To convert VTU to OBJ format, we can use the MeshIO library that is available in Python. A minimum example is shown below.

+
import meshio
+m = meshio.read('step.vtu')
+m.write('step.obj')
+
+

Colorize the OBJ Files

+

There are many different ways to colorize a mesh object. For example, coloring through mesh vertices, mesh faces, or a UV map. Here we demonstrate a simple way, which is to color the mesh using its vertices. The OBJ extension format support RGB floating values append to the vertex coordinates.

+

Blender Rendering using Python

+

In the example below, the Python script controls the rendering process. First, it loads colorized mesh files and adds light and camera to the pre-calculated position and orientation (based on the vertice coordinates and surface normal). It then renders the image using vertex color.

+

In this example, the camera is attched to one of the triangle in the surface mesh OBJ. And the camera is pointing at the center of the sphere, the rendering results are shown below.

+

+ +

+ +

blender_render.py: +

import os, sys
+import math
+import bpy
+
+os.chdir(sys.path[0])
+
+argv_offset = 0
+
+# IMPORT MESH
+mesh = bpy.ops.import_mesh.ply(filepath=sys.argv[6+argv_offset])
+mesh = bpy.context.active_object
+bpy.ops.object.mode_set(mode = 'VERTEX_PAINT')
+
+# ADD LIGHT
+light_data = bpy.data.lights.new('light', type='POINT')
+light = bpy.data.objects.new('light', light_data)
+light.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])]
+bpy.context.collection.objects.link(light)
+
+# ADD CAMERA
+cam_data = bpy.data.cameras.new('camera')
+cam = bpy.data.objects.new('camera', cam_data)
+cam.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])]
+cam.rotation_euler = [float(sys.argv[11+argv_offset]), float(sys.argv[12+argv_offset]), float(sys.argv[13+argv_offset])]
+cam.data.lens = 14
+bpy.context.collection.objects.link(cam)
+
+# ADD MATERIAL
+mat = bpy.data.materials.new(name='Material')
+mat.use_nodes=True
+# create two shortcuts for the nodes we need to connect
+# Principled BSDF
+ps = mat.node_tree.nodes.get('Principled BSDF')
+# Vertex Color
+vc = mat.node_tree.nodes.new("ShaderNodeVertexColor")
+vc.location = (-300, 200)
+vc.label = 'vc'
+# connect the nodes
+mat.node_tree.links.new(vc.outputs[0], ps.inputs[0])
+# apply the material
+mesh.data.materials.append(mat)
+
+# CREATE A SCENE
+scene = bpy.context.scene
+scene.camera = cam
+scene.render.image_settings.file_format = 'PNG'
+scene.render.resolution_x = 512
+scene.render.resolution_y = 512
+scene.render.resolution_percentage = 100
+scene.render.filepath = sys.argv[7+argv_offset]
+
+# RENDER
+bpy.ops.render.render(write_still=1)
+

+

The rendering can be processed through Blender GUI or bash command as shown below.

+
blender blender_project.blend -b --python blender_render.py -- target_mesh_path output_path camera_position_x camera_position_y camera_position_z camera_orientation_x camera_orientation_y camera_orientation_z
+
+ +
+
+ + + Last update: + 2023-10-03 + + +
+ + + + + + + +
+
+ + +
+ +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tutorials/vision-proprioception/vision-proprioception/vision-proprioception.md b/tutorials/vision-proprioception/vision-proprioception/vision-proprioception.md new file mode 100644 index 00000000..eb95e6c3 --- /dev/null +++ b/tutorials/vision-proprioception/vision-proprioception/vision-proprioception.md @@ -0,0 +1,292 @@ +# Generate Vision Proprioception Data for Deformable Objects + +
Author: Hanwen Zhao
+ +

+ + +

+ +In this tutorial, we will demonstrate how PolyFEM can be used to generate vision proprioception data for soft robotics study. The GitHub repo of this tutorial can be found [here](https://github.com/hanwenzhao/PolyFEM_Tutorial_SoRo). + +## Prerequisites + +The following, items are necessary to complete this tutorial. To replicate the experiment, readers can use either the given mesh files or their own mesh files. + +In this tutorial, we assume that readers already have PolyFEM installed. If not, the PolyFEM install instruction can be found [here](../../../cxx_index/). + +### Meshes + +To decrease the computing complexity of this tutorial example, we assume that the target item is the only deformable solid and the environment is rigid and immovable. + +| Target Object Mesh (Radius: 0.5) | Environment Mesh (Radius: 5.0) | +| ---- | ---- | +||| + +## Problem Formulation + +This tutorial's objective is to launch a deformable target object into an environment mesh (i.e. a sphere rolling in a bowl) and gather the corresponding vision-based proprioceptive data (the internal view that shows deformation). Such data can be utilized to investigate the relationship between vision-based proprioception and kinematics of deformable objects. + +## JSON Interface + +PolyFEM provides an interface through JSON and Python. Here we demonstrate the JSON interface setup first. For more details, please refer to the [JSON API](../../../json/). + +### Setup Similation +In this section, we will go over the JSON script that defines the simulation section by section. The complete JSON file can be found [here](https://github.com/hanwenzhao/PolyFEM_Tutorial_SoRo). + +#### Geometry + +The `"geometry"` section specifies all geometry data required for simulation. For example, `"mesh"` defines the path to the volumetric mesh file. Then, the term `"transformation"` defines the operations that will be applied to the current mesh file. Next, volume selection specifies the mesh's identifier, allowing other parameters to be applied to specific meshes based on volume selection. + +Furthermore, `is obstacle` permits the definition of a mesh as part of the environment. Obstacles are fully prescribed objects and as such, only their surface needs to be specified. + +```json +"geometry": [{ + "mesh": "../data/sphere.msh", + "transformation": { + "translation": [-0.4, 0.18, 0], + "scale": 0.1 + }, + "volume_selection": 1 +}, { + "mesh": "../data/scene_bowl.msh", + "is_obstacle": true, + "enabled": true, + "transformation": { + "translation": [0, 0, 0], + "scale": 0.01 + } +}] +``` + +#### Mesh Related Configuration + +In the previous section, we defined the simulation-required `geometry`. Following that, we must define their material properties and initial conditions. In the `"initial_conditions"` section, we assign the mesh with volume selection value `1` and an initial velocity of `[2, 0, 2]`. Next, in the `materials` section, we use `NeoHookean` for non-linear elasticity and define Young's modulus `E`, Poisson's ratio `nu`, and density `rho`. + +Next, we define time step size as `dt` and time steps as the number of steps. `enable` in the `contact` determines whether collision detection and friction calculation are considered. And `boundary conditions` permit us to add gravity to the simulation with ease. + +```json +{ + "initial_conditions": { + "velocity": [ + { + "id": 1, + "value": [2, 0, 2] + } + ] + }, + "materials": [ + { + "id": 1, + "E": 5000.0, + "nu": 0.3, + "rho": 100, + "type": "NeoHookean" + } + ], + "time": { + "t0": 0, + "dt": 0.1, + "time_steps": 100 + }, + "contact": { + "enabled": true, + "dhat": 0.0001, + "epsv": 0.004, + "friction_coefficient": 0.3 + }, + "boundary_conditions": { + "rhs": [0, 9.81, 0] + } +} +``` + +#### Simulation Related Configuration + +```json +{ + "solver": { + "linear": { + "solver": "Eigen::CholmodSupernodalLLT" + }, + "nonlinear": { + "line_search": { + "method": "backtracking" + }, + "grad_norm": 0.001, + "use_grad_norm": false + }, + "contact": { + "friction_iterations": 20, + "CCD": { + "broad_phase": "STQ" + } + } + }, + "output": { + "json": "results.json", + "paraview": { + "file_name": "output.pvd", + "options": { + "material": true, + "body_ids": true + }, + "vismesh_rel_area": 10000000 + }, + "advanced": { + "save_solve_sequence_debug": false, + "save_time_sequence": true + } + } +} +``` + +### Run Simulation +To run the simulation, the following command can be used where `polyfem` should be replaced with `.../polyfem/build/PolyFEM_bin`. + +```bash +cd PolyFEM_Tutorial_SoRo +mkdir output +polyfem --json json/scene_bowl.json --output_dir output +``` + +The simulation results will be output as a VTU file or a sequence of VTU files and a PVD file for the time sequence. + +## Python Interface + +In addition, to the JSON files, PolyFEM also supports a Python interface through [polyfem-python](https://github.com/polyfem/polyfem-python). More information can be found in the [Python Documentation](https://polyfem.github.io/polyfempy_doc/). Python interface not only allows to read configuration from JSON directly but also allows user to have more control during the simulation (eg. simulation stepping or change boundary conditions). + +### Import from JSON +If the JSON file is available, we can simply import the configuration by reading the JSON file. + +```python +import polyfem as pf + +with open('./scene_bowl.json') as f: + config = json.load(f) +solver = pf.Solver() +solver.set_settings(json.dumps(config)) +solver.load_mesh_from_settings() +``` + +### Run Simulation in Python +Python interface provides a more flexible solution to simulate solving the time-dependent problem completely or interacting with the solver with steps. + +```python +# OPTION 1: solve the problem and extract the solution +solver.solve() +pts, tris, velocity = solver.get_sampled_solution() +``` + +```python +# OPTION 2: solve the problem with time steping +solver.init_timestepping(t0, dt) +for i in range(timesteps): + solver.step_in_time(t, dt, i) + # interact with intermediate result +``` + +## Visualize Simulation Results + +To visualize the simulation sequential results in `VTU` format, we can use [`ParaView`](https://www.paraview.org/), an open-source, multi-platform data analysis and visualization application. + +To view the results, please follow the instructions below. +![]paraview.png) +* Step 1: `File` - `Open`, select sequence group file step*.vtu or step*.vtm. +* Step 2: Click `Apply` under the tab `Properties` located on the left side of the GUI. +* Step 3: Click on `Wrap By Vector` to apply the displacement to the objects. This function can be found in the top menu bar. +* Step 4: Click again `Apply` under the tab `Properties`. +* Step 5: Now, the `Play` button can be used to view the time sequence results. + + +## Bouns: Blender Rendering + +Blender is a free and open-source 3D computer graphics software toolset that can be used for animation, rendering, and video games. Here, we are using Blender to create vision propriocetions (internal views). First, we need to convert the VTU outputs back to mesh files that represent the target object at each time step. Then, we can colorize the target object using vertex coloring and render the final image with the Blender camera instance. + +### Convert VTU to OBJ + +To convert VTU to OBJ format, we can use the MeshIO library that is available in Python. A minimum example is shown below. + +```python +import meshio +m = meshio.read('step.vtu') +m.write('step.obj') +``` + +### Colorize the OBJ Files + +There are many different ways to colorize a mesh object. For example, coloring through mesh vertices, mesh faces, or a UV map. Here we demonstrate a simple way, which is to color the mesh using its vertices. The OBJ extension format support RGB floating values append to the vertex coordinates. + +### Blender Rendering using Python + +In the example below, the Python script controls the rendering process. First, it loads colorized mesh files and adds light and camera to the pre-calculated position and orientation (based on the vertice coordinates and surface normal). It then renders the image using vertex color. + +In this example, the camera is attched to one of the triangle in the surface mesh `OBJ`. And the camera is pointing at the center of the sphere, the rendering results are shown below. + +

+ +

+ +`blender_render.py`: +```python +import os, sys +import math +import bpy + +os.chdir(sys.path[0]) + +argv_offset = 0 + +# IMPORT MESH +mesh = bpy.ops.import_mesh.ply(filepath=sys.argv[6+argv_offset]) +mesh = bpy.context.active_object +bpy.ops.object.mode_set(mode = 'VERTEX_PAINT') + +# ADD LIGHT +light_data = bpy.data.lights.new('light', type='POINT') +light = bpy.data.objects.new('light', light_data) +light.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])] +bpy.context.collection.objects.link(light) + +# ADD CAMERA +cam_data = bpy.data.cameras.new('camera') +cam = bpy.data.objects.new('camera', cam_data) +cam.location = [float(sys.argv[8+argv_offset]), float(sys.argv[9+argv_offset]), float(sys.argv[10+argv_offset])] +cam.rotation_euler = [float(sys.argv[11+argv_offset]), float(sys.argv[12+argv_offset]), float(sys.argv[13+argv_offset])] +cam.data.lens = 14 +bpy.context.collection.objects.link(cam) + +# ADD MATERIAL +mat = bpy.data.materials.new(name='Material') +mat.use_nodes=True +# create two shortcuts for the nodes we need to connect +# Principled BSDF +ps = mat.node_tree.nodes.get('Principled BSDF') +# Vertex Color +vc = mat.node_tree.nodes.new("ShaderNodeVertexColor") +vc.location = (-300, 200) +vc.label = 'vc' +# connect the nodes +mat.node_tree.links.new(vc.outputs[0], ps.inputs[0]) +# apply the material +mesh.data.materials.append(mat) + +# CREATE A SCENE +scene = bpy.context.scene +scene.camera = cam +scene.render.image_settings.file_format = 'PNG' +scene.render.resolution_x = 512 +scene.render.resolution_y = 512 +scene.render.resolution_percentage = 100 +scene.render.filepath = sys.argv[7+argv_offset] + +# RENDER +bpy.ops.render.render(write_still=1) + +``` + +The rendering can be processed through Blender GUI or bash command as shown below. + +```bash +blender blender_project.blend -b --python blender_render.py -- target_mesh_path output_path camera_position_x camera_position_y camera_position_z camera_orientation_x camera_orientation_y camera_orientation_z +``` \ No newline at end of file