def export_stability_factor_upper_bound(self, folder=None, filename=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "stability_factor" export([self._stability_factor_upper_bound], folder, filename + "_upper_bound")
def export_supremizer(self, folder=None, filename=None, supremizer=None, component=None, suffix=None): assert folder is not None assert filename is not None assert component is not None assert isinstance(component, str) if supremizer is None: supremizer = self._supremizer[component] export(supremizer, folder, filename + "_" + component, suffix, component)
def export_solution(self, folder=None, filename=None, solution=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "snapshot" if solution is None: solution = self.snapshot export(solution, folder, filename)
def _compute_yd(self): """ The desired state is (a component of) the solution of a nonlinear geostrophic problem for fixed parameters """ # State space state_element = MixedElement(scalar_element, scalar_element) W = FunctionSpace(mesh, state_element, components=["psi", "q"]) # Solution psiq = Function(W) # Import solution from file, if possible try: import_(psiq, self.name(), "yd") except OSError: # Fixed problem coefficients (mu[0] is (delta_M/L)**3, mu[1] is C) delta_M = 7e4 L = 1e6 C = 0 # Fixed problem coefficients related to the nonlinear term delta_I = 7e4 # Test and trial functions for variational forms definition phip = TestFunction(W) (phi, p) = split(phip) delta_psiq = TrialFunction(W) (delta_psi, delta_q) = split(delta_psiq) (psi, q) = split(psiq) # Variational forms F = (inner(q, phi) * dx + inner(grad(psi), grad(phi)) * dx + Constant(-(delta_I / L)**2) * inner(psi, q.dx(1) * p.dx(0) - q.dx(0) * p.dx(1)) * dx + inner(psi.dx(0), p) * dx + Constant( (delta_M / L)**3) * inner(grad(q), grad(p)) * dx + Constant(C) * inner(q, p) * dx - inner(self.f, p) * dx) J = derivative(F, psiq, delta_psiq) # Boundary conditions bc = [ DirichletBC(W, Constant((0., 0.)), boundaries, idx) for idx in [1, 2, 3, 4] ] # Solve nonlinear problem snes_solver_parameters = { "nonlinear_solver": "snes", "snes_solver": { "linear_solver": "mumps", "maximum_iterations": 20, "report": True } } problem = NonlinearVariationalProblem(F, psiq, bc, J) solver = NonlinearVariationalSolver(problem) solver.parameters.update(snes_solver_parameters) solver.solve() # Export solution to file export(psiq, self.name(), "yd") # Tracking is on the psi component (psi, q) = psiq.split(deepcopy=True) return psi
def export_output(self, folder=None, filename=None, output=None, suffix=None): """ Export solution to file. """ if folder is None: folder = self.folder_prefix if filename is None: filename = "solution" if output is None: output = [self._output] else: assert isinstance(output, list) assert len(output) == 1 export(output, folder, filename + "_output", suffix)
def export_supremizer(self, folder=None, filename=None, supremizer=None, component=None, suffix=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "supremizer" if supremizer is None: supremizer = self._supremizer assert component is None or isinstance(component, str) if component is None: component = "s" export(supremizer, folder, filename + "_" + component, suffix, component)
def export_solution(self, folder=None, filename=None, solution=None, component=None, suffix=None): """ Export solution to file. """ if folder is None: folder = self.folder_prefix if filename is None: filename = "solution" if solution is None: solution = self._solution assert component is None or isinstance(component, (str, list)) if component is None and len(self.components) > 1: component = self.components if component is None: export(solution, folder, filename, suffix) elif isinstance(component, str): export(solution, folder, filename + "_" + component, suffix, component) elif isinstance(component, list): for c in component: assert isinstance(c, str) export(solution, folder, filename + "_" + c, suffix, c) else: raise TypeError("Invalid component in export_solution()")
def export_eigenvector(self, folder=None, filename=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "stability_factor" export(self._eigenvector, folder, filename + "_eigenvector")
def export_solution(self, folder, filename, solution=None): if solution is None: solution = self.snapshot export(solution, folder, filename)
def export_eigenvector(self, folder=None, filename=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "coercivity_constant" export(self._eigenvector, folder, filename + "_eigenvector")
def export_stability_factor_lower_bound(self, folder=None, filename=None): if folder is None: folder = self.folder_prefix if filename is None: filename = "stability_factor" export([self._alpha_LB], folder, filename + "_LB")
def export_stability_factor_upper_bound(self, folder, filename): export([self._alpha_UB], folder, filename + "_UB")
def export_stability_factor_lower_bound(self, folder, filename): export([self._alpha_LB], folder, filename + "_LB")
def export_solution(self, folder, filename): export([self._eigenvalue], folder, filename + "_eigenvalue") export(self._eigenvector, folder, filename + "_eigenvector")
def export_eigenvector(self, folder, filename): export(self._eigenvector, folder, filename + "_eigenvector")
def export_eigenvalue(self, folder, filename): export([self._eigenvalue], folder, filename + "_eigenvalue")