Exemplo n.º 1
0
 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")
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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")
Exemplo n.º 9
0
 def export_solution(self, folder, filename, solution=None):
     if solution is None:
         solution = self.snapshot
     export(solution, folder, filename)
Exemplo n.º 10
0
 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")
Exemplo n.º 11
0
 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")
Exemplo n.º 12
0
 def export_stability_factor_upper_bound(self, folder, filename):
     export([self._alpha_UB], folder, filename + "_UB")
Exemplo n.º 13
0
 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")
Exemplo n.º 15
0
 def export_eigenvector(self, folder, filename):
     export(self._eigenvector, folder, filename + "_eigenvector")
Exemplo n.º 16
0
 def export_eigenvalue(self, folder, filename):
     export([self._eigenvalue], folder, filename + "_eigenvalue")