Source code for model_package.Tardigrade_MOOSE.build_dynamic_Tardigrade_input_deck
import os
import sys
import argparse
import yaml
import inspect
import pandas
[docs]
def build_input(output_file, mesh_file, BCs, pressure, start, duration, dt, ref_density, height, parameter_sets=None, calibration_map=None):
'''Write a Tardigrade-MOOSE input file for dynamic simulation
:param str output_file: The name of Tardigrade-MOOSE file to write
:param str mesh_file: The name of the mesh file
:param str BCs: The type of boundary conditions, either "slip" or "clamp"
:param float pressure: The pressure to be applied
:param float duration: The duration of the simulation
:param float start: The time when heaviside pressure is applied
:param float dt: The fixed time increment
:param float ref_density: Density in reference configuration (Mg/mm^3)
:param float height: Height of the geometry
:param list parameter_sets: The list of yaml files containing calibration results, required if calibration-map is not provided
:param str calibration_map: Optional yaml file containing names of calibration files
:returns: ``output_file``
'''
# TODO: Write test to make sure the mesh_file exists
# unpack parameter set files if calibration map is provided
if calibration_map:
stream = open(calibration_map, 'r')
calibrations = yaml.load(stream, Loader=yaml.FullLoader)
stream.close()
# Get number of elements and assign the default parameter set
num_elements = len(calibrations.keys()) - 2
parameter_sets = [calibrations['ignore_boundary_yml'] for i in range(0, num_elements)]
# Override defaults for the elements not located on the boundary
summary_file = calibrations['ignore_boundary_summary_file']
if os.path.exists(summary_file):
df = pandas.read_csv(summary_file, sep=',')
for element in df['element']:
parameter_sets[element] = calibrations[str(element)]
else:
assert parameter_sets is not None
# Write input file
with open(output_file, 'w') as f:
f.write('###############################################################################\n')
f.write('[Mesh]\n')
f.write(' type = FileMesh\n')
f.write(' displacements = "disp_x disp_y disp_z"\n')
f.write(' dim = 3\n')
f.write(f' file = "{mesh_file}"\n')
f.write('[]\n')
f.write('\n')
f.write('[Variables]\n')
f.write(' [./disp_x]\n')
f.write(' [../]\n')
f.write(' [./disp_y]\n')
f.write(' [../]\n')
f.write(' [./disp_z]\n')
f.write(' [../]\n')
f.write(' [./phi_xx]\n')
f.write(' [../]\n')
f.write(' [./phi_yy]\n')
f.write(' [../]\n')
f.write(' [./phi_zz]\n')
f.write(' [../]\n')
f.write(' [./phi_yz]\n')
f.write(' [../]\n')
f.write(' [./phi_xz]\n')
f.write(' [../]\n')
f.write(' [./phi_xy]\n')
f.write(' [../]\n')
f.write(' [./phi_zy]\n')
f.write(' [../]\n')
f.write(' [./phi_zx]\n')
f.write(' [../]\n')
f.write(' [./phi_yx]\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[Kernels]\n')
f.write(' #Define the internal force balance equations\n')
f.write(' [./force_1]\n')
f.write(' type = InternalForce\n')
f.write(' component = 0\n')
f.write(' dof_num = 0\n')
f.write(' variable = disp_x\n')
f.write(' save_in = force_x\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./force_2]\n')
f.write(' type = InternalForce\n')
f.write(' component = 1\n')
f.write(' dof_num = 1\n')
f.write(' variable = disp_y\n')
f.write(' save_in = force_y\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./force_3]\n')
f.write(' type = InternalForce\n')
f.write(' component = 2\n')
f.write(' dof_num = 2\n')
f.write(' variable = disp_z\n')
f.write(' save_in = force_z\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' #Inertial force balance equations\n')
f.write(' [./inertia_kernel_1]\n')
f.write(' type = MicromorphicInertialForce\n')
f.write(' variable = disp_x\n')
f.write(' component = 0\n')
f.write(' dof_num = 0\n')
f.write(f' reference_density = {ref_density}\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' []\n')
f.write(' [./inertia_kernel_2]\n')
f.write(' type = MicromorphicInertialForce\n')
f.write(' variable = disp_y\n')
f.write(' component = 1\n')
f.write(' dof_num = 1\n')
f.write(f' reference_density = {ref_density}\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' []\n')
f.write(' [./inertia_kernel_3]\n')
f.write(' type = MicromorphicInertialForce\n')
f.write(' variable = disp_z\n')
f.write(' component = 2\n')
f.write(' dof_num = 2\n')
f.write(f' reference_density = {ref_density}\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' []\n')
f.write(' #Define the internal couple balance equations\n')
f.write(' [./couple_11]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 0\n')
f.write(' component_j = 0\n')
f.write(' dof_num = 3\n')
f.write(' variable = phi_xx\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_12]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 0\n')
f.write(' component_j = 1\n')
f.write(' dof_num = 4\n')
f.write(' variable = phi_xy\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_13]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 0\n')
f.write(' component_j = 2\n')
f.write(' dof_num = 5\n')
f.write(' variable = phi_xz\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_21]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 1\n')
f.write(' component_j = 0\n')
f.write(' dof_num = 6\n')
f.write(' variable = phi_yx\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_22]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 1\n')
f.write(' component_j = 1\n')
f.write(' dof_num = 7\n')
f.write(' variable = phi_yy\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_23]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 1\n')
f.write(' component_j = 2\n')
f.write(' dof_num = 8\n')
f.write(' variable = phi_yz\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_31]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 2\n')
f.write(' component_j = 0\n')
f.write(' dof_num = 9\n')
f.write(' variable = phi_zx\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_32]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 2\n')
f.write(' component_j = 1\n')
f.write(' dof_num = 10\n')
f.write(' variable = phi_zy\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write(' [./couple_33]\n')
f.write(' type = InternalCouple\n')
f.write(' component_i = 2\n')
f.write(' component_j = 2\n')
f.write(' dof_num = 11\n')
f.write(' variable = phi_zz\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = disp_x\n')
f.write(' u2 = disp_y\n')
f.write(' u3 = disp_z\n')
f.write(' phi_11 = phi_xx\n')
f.write(' phi_22 = phi_yy\n')
f.write(' phi_33 = phi_zz\n')
f.write(' phi_23 = phi_yz\n')
f.write(' phi_13 = phi_xz\n')
f.write(' phi_12 = phi_xy\n')
f.write(' phi_32 = phi_zy\n')
f.write(' phi_31 = phi_zx\n')
f.write(' phi_21 = phi_yx\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('\n')
f.write('[AuxVariables]\n')
f.write(' [force_x][]\n')
f.write(' [force_y][]\n')
f.write(' [force_z][]\n')
f.write(' [./pk2_11]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write(' [./pk2_22]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write(' [./pk2_33]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write(' [./sigma_11]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write(' [./sigma_22]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write(' [./sigma_33]\n')
f.write(' order = CONSTANT\n')
f.write(' family = MONOMIAL\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./pk2_11]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = PK2\n')
f.write(' index = 0\n')
f.write(' variable = pk2_11\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./pk2_22]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = PK2\n')
f.write(' index = 4\n')
f.write(' variable = pk2_22\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./pk2_33]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = PK2\n')
f.write(' index = 8\n')
f.write(' variable = pk2_33\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./sigma_11]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = SIGMA\n')
f.write(' index = 0\n')
f.write(' variable = sigma_11\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./sigma_22]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = SIGMA\n')
f.write(' index = 4\n')
f.write(' variable = sigma_22\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[AuxKernels]\n')
f.write(' [./sigma_33]\n')
f.write(' type = MaterialStdVectorAux\n')
f.write(' property = SIGMA\n')
f.write(' index = 8\n')
f.write(' variable = sigma_33\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('# Do some cool math to get the reaction force\n')
f.write('[Postprocessors]\n')
f.write(' [bot_react_z]\n')
f.write(' type = NodalSum\n')
f.write(' variable = force_z\n')
f.write(' boundary = "top"\n')
f.write(' []\n')
f.write('[]\n')
f.write('\n')
f.write('[Postprocessors]\n')
f.write(' [disp_x_p]\n')
f.write(' type = PointValue\n')
f.write(f' point = "0 0 {height/2}"\n')
f.write(' variable = disp_z\n')
f.write(' []\n')
f.write('\n')
f.write(' [middle_s33]\n')
f.write(' type = PointValue\n')
f.write(f' point = "0 0 {height/2}"\n')
f.write(' variable = sigma_33\n')
f.write(' []\n')
f.write('[]\n')
if BCs == 'slip':
f.write('[BCs]\n')
f.write(' active = "x_symm y_symm bottom_z top_z"\n')
f.write(' [./x_symm]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_x\n')
f.write(' boundary = "x_plane"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./y_symm]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_y\n')
f.write(' boundary = "y_plane"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./bottom_z]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_z\n')
f.write(' boundary = "bottom"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./top_z]\n')
f.write(' type = FunctionNeumannBC\n')
f.write(' variable = disp_z\n')
f.write(' boundary = "top"\n')
f.write(' function = heaviside\n')
f.write(' [../]\n')
f.write('[]\n')
elif BCs == 'clamp':
f.write('[BCs]\n')
f.write(' active = "bottom_x bottom_y bottom_z top_x top_y top_z"\n')
f.write(' [./bottom_x]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_x\n')
f.write(' boundary = "bottom"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./bottom_y]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_y\n')
f.write(' boundary = "bottom"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./bottom_z]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_z\n')
f.write(' boundary = "bottom"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./top_x]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_x\n')
f.write(' boundary = "top"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./top_y]\n')
f.write(' type = DirichletBC\n')
f.write(' variable = disp_y\n')
f.write(' boundary = "top"\n')
f.write(' preset = true\n')
f.write(' value = 0\n')
f.write(' [../]\n')
f.write(' [./top_z]\n')
f.write(' type = FunctionNeumannBC\n')
f.write(' variable = disp_z\n')
f.write(' boundary = "top"\n')
f.write(' function = heaviside\n')
f.write(' [../]\n')
f.write('[]\n')
else:
print('Specify a valid BC type!')
# Heaviside load
f.write('\n')
f.write('[Functions]\n')
f.write(' [heaviside]\n')
f.write(' type = ADParsedFunction\n')
if start < dt:
f.write(f' expression = "if(t<{start},0.0,{pressure})" # Heaviside function in MPa i.e N/mm2\n')
else:
f.write(f' expression = "if(t<{start},t*{pressure},{pressure})" # Heaviside function in MPa i.e N/mm2\n')
f.write(' []\n')
f.write('[]\n')
f.write('\n')
f.write('[Materials]\n')
# Load in parameter data for each filter domain / element
if len(parameter_sets) > 1:
for i, set in enumerate(parameter_sets):
# Load yaml file
stream = open(set, 'r')
UI = yaml.load(stream, Loader=yaml.FullLoader)
stream.close()
mat_line_1 = UI['line 1']
mat_line_2 = UI['line 2']
mat_line_3 = UI['line 3']
mat_line_4 = UI['line 4']
# Write in material info
f.write(f' [./linear_elastic_{i}]\n')
f.write(' type = MicromorphicMaterial\n')
f.write(f' material_fparameters = "{mat_line_1}\n')
f.write(f' {mat_line_2}\n')
f.write(f' {mat_line_3}\n')
f.write(f' {mat_line_4}"\n')
f.write(f' model_name = "LinearElasticity"\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = "disp_x"\n')
f.write(' u2 = "disp_y"\n')
f.write(' u3 = "disp_z"\n')
f.write(' phi_11 = "phi_xx"\n')
f.write(' phi_22 = "phi_yy"\n')
f.write(' phi_33 = "phi_zz"\n')
f.write(' phi_23 = "phi_yz"\n')
f.write(' phi_13 = "phi_xz"\n')
f.write(' phi_12 = "phi_xy"\n')
f.write(' phi_32 = "phi_zy"\n')
f.write(' phi_31 = "phi_zx"\n')
f.write(' phi_21 = "phi_yx"\n')
f.write(f' block = "element_{i}"\n')
f.write(' [../]\n')
else:
# Load yaml file
set = parameter_sets[0]
stream = open(set, 'r')
UI = yaml.load(stream, Loader=yaml.FullLoader)
stream.close()
mat_line_1 = UI['line 1']
mat_line_2 = UI['line 2']
mat_line_3 = UI['line 3']
mat_line_4 = UI['line 4']
# Write in material info
f.write(f' [./linear_elastic]\n')
f.write(' type = MicromorphicMaterial \n')
f.write(f' material_fparameters = "{mat_line_1}\n')
f.write(f' {mat_line_2}\n')
f.write(f' {mat_line_3}\n')
f.write(f' {mat_line_4}"\n')
f.write(f' model_name = "LinearElasticity"\n')
f.write('\n')
f.write(' #Coupled variables\n')
f.write(' u1 = "disp_x"\n')
f.write(' u2 = "disp_y"\n')
f.write(' u3 = "disp_z"\n')
f.write(' phi_11 = "phi_xx"\n')
f.write(' phi_22 = "phi_yy"\n')
f.write(' phi_33 = "phi_zz"\n')
f.write(' phi_23 = "phi_yz"\n')
f.write(' phi_13 = "phi_xz"\n')
f.write(' phi_12 = "phi_xy"\n')
f.write(' phi_32 = "phi_zy"\n')
f.write(' phi_31 = "phi_zx"\n')
f.write(' phi_21 = "phi_yx"\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[Preconditioning]\n')
f.write(' [./SMP]\n')
f.write(' type = SMP\n')
f.write('# type = FDP\n')
f.write(' full = true\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
f.write('[Executioner]\n')
f.write(' type = Transient\n')
f.write(' scheme = newmark-beta\n')
f.write(f' end_time = {duration + start}\n')
f.write(f' dt = {dt}\n')
f.write(' nl_rel_tol = 1e-8\n')
f.write(' nl_abs_tol = 1e-8\n')
f.write(' nl_max_its = 100\n')
f.write('[]\n')
f.write('\n')
f.write('[Outputs]\n')
f.write(' exodus = true\n')
f.write(' perf_graph = true\n')
f.write(' csv = true\n')
f.write(' [./console]\n')
f.write(' type = Console\n')
f.write(' [../]\n')
f.write('[]\n')
f.write('\n')
return 0
def get_parser():
filename = inspect.getfile(lambda: None)
basename = os.path.basename(filename)
basename_without_extension, extension = os.path.splitext(basename)
cli_description = "Write Tardigrade-MOOSE input file for dynamic simulation"
parser = argparse.ArgumentParser(description=cli_description,
prog=os.path.basename(filename))
parser.add_argument('-o', '--output-file', type=str, required=True,
help="The name of Tardigrade-MOOSE file to write")
parser.add_argument('--mesh', type=str, required=True,
help='The mesh file')
parser.add_argument('--parameter-sets', nargs="+", required=False, default=None,
help='List of yaml files containing calibration results, required if calibration-map is not provided')
parser.add_argument('--calibration-map', type=str, required=False, default=None,
help='Optional yaml file containing names of calibration files')
parser.add_argument('--BCs', type=str, required=True,
help='The type of boundary conditions, either "slip" or "clamp"')
parser.add_argument('--pressure', type=float, required=True,
help='The pressure to be applied')
parser.add_argument('--start', type=float, required=True,
help='The time when heaviside pressure is applied')
parser.add_argument('--duration', type=float, required=True,
help='The duration of the simulation')
parser.add_argument('--dt', type=float, required=True,
help='The fixed time increment')
parser.add_argument('--ref-density', type=float, required=True,
help='Density in reference configuration (Mg/mm^3)')
parser.add_argument('--height', type=float, required=True,
help='Height of the geometry')
return parser
if __name__ == '__main__':
parser = get_parser()
args, unknown = parser.parse_known_args()
sys.exit(build_input(output_file=args.output_file,
mesh_file=args.mesh,
BCs=args.BCs,
pressure=args.pressure,
start=args.start,
duration=args.duration,
dt=args.dt,
parameter_sets=args.parameter_sets,
calibration_map=args.calibration_map,
ref_density=args.ref_density,
height=args.height,
))