Source code for phaseflow.cavity_melting_simulation

""" **cavity_melting_simulation.py** applies Phaseflow to the melting of a binary alloy in a square cavity."""
import phaseflow
import fenics


[docs]class CavityMeltingSimulation( phaseflow.abstract_heated_cavity_phasechange_simulation.AbstractHeatedCavityPhaseChangeSimulation): def __init__(self, initial_uniform_gridsize = 1, time_order = 1, integration_measure = fenics.dx(metadata={"quadrature_degree": 8}), setup_solver = True): self.initial_hot_wall_refinement_cycles = 6 super().__init__( time_order = time_order, integration_measure = integration_measure, setup_solver = setup_solver, initial_uniform_gridsize = initial_uniform_gridsize) self.hot_wall_temperature.assign(1.) self.cold_wall_temperature.assign(-0.11) self.initial_concentration.assign(1.) self.temperature_rayleigh_number.assign(3.27e5) self.prandtl_number.assign(56.2) Ra_T = self.temperature_rayleigh_number.__float__() Pr = self.prandtl_number.__float__() self.concentration_rayleigh_number.assign(-0.3*Ra_T/Pr) self.stefan_number.assign(0.045) Le = 100. self.schmidt_number.assign(Pr*Le) self.pure_liquidus_temperature.assign(0.) self.liquidus_slope.assign(-0.1) self.regularization_central_temperature_offset.assign(0.01) self.regularization_smoothing_parameter.assign(0.025)
[docs] def initial_mesh(self): mesh = self.coarse_mesh() for cycle in range(self.initial_hot_wall_refinement_cycles): edge_markers = fenics.MeshFunction("bool", mesh, 1, False) self.hot_wall.mark(edge_markers, True) fenics.adapt(mesh, edge_markers) mesh = mesh.child() return mesh
[docs] def initial_values(self): initial_values = fenics.interpolate( fenics.Expression( ("0.", "0.", "0.", "(T_h - T_c)*(x[0] < x_m0) + T_c", "C_0*(x[0] < x_m0)"), T_h = self.hot_wall_temperature, T_c = self.cold_wall_temperature, C_0 = self.initial_concentration, x_m0 = 1./2.**(self.initial_hot_wall_refinement_cycles - 1), element = self.element()), self.function_space) return initial_values
[docs] def deepcopy(self): sim = super().deepcopy() sim.initial_hot_wall_refinement_cycles = 0 + self.initial_hot_wall_refinement_cycles return sim