Source code for fenicsR13.fenicsR13

#!/usr/bin/env python3

# pylint: disable=invalid-name
# pylint: disable=unsubscriptable-object

"""
Program to solve linearized R13 equations.

Different modes allow to solved the ecoupled heat or stress system.
Different meshes can be used to perform a convergence study with given
exact solution.
"""

import sys
import gc
import dolfin as df

from fenicsR13.meshes import H5Mesh
from fenicsR13.input import Input
from fenicsR13.solver import Solver
from fenicsR13.postprocessor import Postprocessor





[docs]def main(): """ Execute the main program. Searches for an ``"input.yml"`` file in the current directory to use as input. Usage: .. code-block:: bash # Install fenicsR13 pip install . # Usage: <path_to_program> <input_file> # Goto case folder: cd tests/2d_r13 fenicsR13 inputs/ \ r13_1_coeffs_nosources_norot_inflow_p1p1p1p1p1_stab.yml """ print_information() # Dolfin settings df.set_log_level(100) # 1: all logs df.parameters["ghost_mode"] = "shared_vertex" inputfile = sys.argv[1] if len(sys.argv) == 2 else "input.yml" input_file = Input(inputfile) params = input_file.dict # Setup parameter study loop if params["parameter_study"]["enable"]: parameter_values = params["parameter_study"]["parameter_values"] parameter_key = params["parameter_study"]["parameter_key"] else: parameter_values = [""] parameter_key = [""] initial_output_folder = params["output_folder"] for parameter_value in parameter_values: input_file.set_in_input(parameter_key, parameter_value) params["output_folder"] = initial_output_folder + str(parameter_value) print("Study", parameter_key, ":", parameter_value) # Ususal code: mesh_names = params["meshes"] convergence_study = params["convergence_study"]["enable"] show_plot = params["convergence_study"]["plot"] data = [] for p, mesh_name in enumerate(mesh_names): print("Mesh: " + mesh_name) mesh_name = mesh_names[p] current_mesh = H5Mesh(mesh_name) solver = Solver(params, current_mesh, p) solver.assemble() solver.solve() solver.write() if convergence_study: errors = solver.calculate_errors() data.append({ "h": current_mesh.mesh.hmax(), **errors }) if p == len(mesh_names) - 1: # after last mesh postp = Postprocessor(data, params["output_folder"]) postp.write_errors() postp.plot_errors(show_plot) solver = None gc.collect()
if __name__ == '__main__': main()