Source code for phasefieldx.Element.Phase_Field_Fracture.Input

"""
Input: Phase-Field Fracture
===========================

"""

from phasefieldx.Materials.conversion import get_lambda_lame, get_mu_lame
import csv

[docs] class Input: """ Class for managing phase-field fracture simulation parameters. This class encapsulates parameters related to phase-field fracture simulations and provides methods for setting, logging, and exporting these parameters. Attributes ---------- E : float Young's modulus of the material. nu : float Poisson's ratio of the material. Gc : float Critical energy release rate. l : float Length scale parameter. lambda_ : float Lame's first parameter calculated from E and nu. mu : float Shear modulus calculated from E and nu. degradation : str Type of material degradation (isotropic or anisotropic). split_energy : str Type of energy splitting (spectral, deviatoric, or none). degradation_function : str Type of degradation function (e.g., quadratic). irreversibility : str Indication of irreversibility of damage. fatigue : bool Indicates if fatigue degradation is enabled. fatigue_degradation_function : str Fatigue degradation function type. fatigue_val : float Fatigue degradation value. k : int A numerical parameter. save_solution_xdmf : bool Indicates whether to save solutions in XDMF format. save_solution_vtu : bool Indicates whether to save solutions in VTU format. results_folder_name : str Name of the folder to save simulation results. Methods ------- __init__(...) Initialize the Input class with default parameters. save_log_info(logger) Log the simulation parameters using the provided logger. save_parameters_to_csv(filename="parameters.input") Save the simulation parameters to a two-column text file (tab-separated) for easy loading with pandas. __str__() Return a string representation of the simulation parameters. """ def __init__(self, E=210.0, nu=0.3, Gc=0.0027, l=0.015, degradation="isotropic", split_energy="no", degradation_function="quadratic", irreversibility="no", fatigue=False, fatigue_degradation_function="asymptotic", fatigue_val=0.05625, k=0, save_solution_xdmf=False, save_solution_vtu=True, results_folder_name="results"): """ Initialize the SimulationPhaseFieldFracture class with default parameters. """ self.E = E self.nu = nu self.Gc = Gc self.l = l self.lambda_ = get_lambda_lame(self.E, self.nu) self.mu = get_mu_lame(self.E, self.nu) self.degradation = degradation self.split_energy = split_energy self.degradation_function = degradation_function self.irreversibility = irreversibility self.fatigue = fatigue self.fatigue_degradation_function = fatigue_degradation_function self.fatigue_val = fatigue_val self.k = k self.save_solution_xdmf = save_solution_xdmf self.save_solution_vtu = save_solution_vtu self.results_folder_name = results_folder_name
[docs] def save_log_info(self, logger): """ Log the simulation parameters using the provided logger. Parameters: logger: An instance of a logging object. """ logger.info("Material parameters:") logger.info(f" E: {self.E}") logger.info(f" nu: {self.nu}") logger.info(f" Gc: {self.Gc}") logger.info(f" l: {self.l}") logger.info(f" k: {self.k}") logger.info(f" lambda: {self.lambda_}") logger.info(f" mu: {self.mu}") logger.info("Phase-field fracture model:") logger.info(f" degradation: {self.degradation}") logger.info(f" split_energy: {self.split_energy}") logger.info(f" degradation_function: {self.degradation_function}") logger.info(f" irreversibility: {self.irreversibility}") logger.info(f" fatigue degradation function: {self.fatigue_degradation_function}") logger.info(f" fatigue_val: {self.fatigue_val}")
[docs] def save_parameters_to_csv(self, filename="parameters.input"): """ Save the simulation parameters to a CSV file for easy loading with pandas. Parameters: filename (str): The name of the CSV file to save the parameters. """ params = { "E": self.E, "nu": self.nu, "Gc": self.Gc, "l": self.l, "k": self.k, "lambda": self.lambda_, "mu": self.mu, "degradation": self.degradation, "split_energy": self.split_energy, "degradation_function": self.degradation_function, "irreversibility": self.irreversibility, "fatigue": self.fatigue, "fatigue_degradation_function": self.fatigue_degradation_function, "fatigue_val": self.fatigue_val, "save_solution_xdmf": self.save_solution_xdmf, "save_solution_vtu": self.save_solution_vtu, "results_folder_name": self.results_folder_name } with open(filename, "w") as f: for key, value in params.items(): f.write(f"{key}\t{value}\n")
def __str__(self): """ Return a string representation of the simulation parameters. Returns: str: A formatted string containing simulation parameter information. """ parameter_info = [ "Material parameters:", f" E: {self.E}", f" nu: {self.nu}", f" Gc: {self.Gc}", f" l: {self.l}", f" k: {self.k}", f" lambda: {self.lambda_}", f" mu: {self.mu}", "Phase-field fracture model:", f" degradation: {self.degradation}", f" split_energy: {self.split_energy}", f" degradation_function: {self.degradation_function}", f" irreversibility: {self.irreversibility}", f" fatigue degradation function: {self.fatigue_degradation_function}", f" fatigue_val: {self.fatigue_val}" ] return "\n".join(parameter_info)