Beispiel #1
0
    def __init__(self, parameters=None, solver="ipcs"):
        "Create Navier-Stokes problem"

        self.parameters = Parameters("problem_parameters")

        # Create solver
        if solver == "taylor-hood":
            info("Using Taylor-Hood based Navier-Stokes solver")
            self.solver = TaylorHoodSolver(self)
        elif solver == "ipcs":
            info("Using IPCS based Navier-Stokes solver")
            self.solver = NavierStokesSolver(self)
        else:
            error("Unknown Navier--Stokes solver: %s" % solver)

        # Set up parameters
        self.parameters.add(self.solver.parameters)
Beispiel #2
0
    def __init__(self, parameters=None, solver="ipcs"):
        "Create Navier-Stokes problem"

        self.parameters = Parameters("problem_parameters")

        # Create solver
        if solver == "taylor-hood":
            info("Using Taylor-Hood based Navier-Stokes solver")
            self.solver = TaylorHoodSolver(self)
        elif solver == "ipcs":
            info("Using IPCS based Navier-Stokes solver")
            self.solver = NavierStokesSolver(self)
        else:
            error("Unknown Navier--Stokes solver: %s" % solver)

        # Set up parameters
        self.parameters.add(self.solver.parameters)
Beispiel #3
0
class NavierStokes(CBCProblem):
    "Base class for all Navier-Stokes problems"

    def __init__(self, parameters=None, solver="ipcs"):
        "Create Navier-Stokes problem"

        self.parameters = Parameters("problem_parameters")

        # Create solver
        if solver == "taylor-hood":
            info("Using Taylor-Hood based Navier-Stokes solver")
            self.solver = TaylorHoodSolver(self)
        elif solver == "ipcs":
            info("Using IPCS based Navier-Stokes solver")
            self.solver = NavierStokesSolver(self)
        else:
            error("Unknown Navier--Stokes solver: %s" % solver)

        # Set up parameters
        self.parameters.add(self.solver.parameters)

    def solve(self):
        "Solve and return computed solution (u, p)"

        # Update solver parameters
        self.solver.parameters.update(self.parameters["solver_parameters"])

        # Call solver
        return self.solver.solve()

    def step(self, dt):
        "Make a time step of size dt"

        # Update solver parameters
        self.solver.parameters.update(self.parameters["solver_parameters"])

        # Call solver
        return self.solver.step(dt)

    def update(self, t):
        "Propagate values to next time step"
        return self.solver.update(t)

    def solution(self):
        "Return current solution values"
        return self.solver.solution()

    def solution_values(self):
        "Return solution values at t_{n-1} and t_n"
        return self.solver.solution_values()

    #--- Functions that must be overloaded by subclasses ---

    def mesh(self):
        "Return mesh"
        missing_function("mesh")

    #--- Functions that may optionally be overloaded by subclasses ---

    def density(self):
        "Return density"
        return 1.0

    def viscosity(self):
        "Return viscosity"
        return 1.0

    def body_force(self, V):
        "Return body force f"
        return []

    def boundary_traction(self, V):
        "Return boundary traction g = sigma(u, p) * n"
        return []

    def mesh_velocity(self, V):
         "Return mesh velocity (for ALE formulations)"
         w = Constant((0,)*V.mesh().geometry().dim())
         return w

    def boundary_conditions(self, V, Q):
        "Return boundary conditions for velocity and pressure"
        return [], []

    def velocity_dirichlet_values(self):
        "Return Dirichlet boundary values for the velocity"
        return []

    def velocity_dirichlet_boundaries(self):
        "Return Dirichlet boundaries for the velocity"
        return []

    def pressure_dirichlet_values(self):
        "Return Dirichlet boundary conditions for the velocity"
        return []

    def pressure_dirichlet_boundaries(self):
        "Return Dirichlet boundaries for the velocity"
        return []

    def velocity_initial_condition(self):
        "Return initial condition for velocity"
        return None

    def pressure_initial_condition(self):
        "Return initial condition for pressure"
        return 0

    def end_time(self):
        "Return end time"
        return 1.0

    def time_step(self):
        "Return preferred time step"
        return None

    def max_velocity(self):
        "Return maximum velocity (used for selecting time step)"
        return 1.0

    def __str__(self):
        "Return a short description of the problem"
        return "Navier-Stokes problem"
Beispiel #4
0
class NavierStokes(CBCProblem):
    "Base class for all Navier-Stokes problems"

    def __init__(self, parameters=None, solver="ipcs"):
        "Create Navier-Stokes problem"

        self.parameters = Parameters("problem_parameters")

        # Create solver
        if solver == "taylor-hood":
            info("Using Taylor-Hood based Navier-Stokes solver")
            self.solver = TaylorHoodSolver(self)
        elif solver == "ipcs":
            info("Using IPCS based Navier-Stokes solver")
            self.solver = NavierStokesSolver(self)
        else:
            error("Unknown Navier--Stokes solver: %s" % solver)

        # Set up parameters
        self.parameters.add(self.solver.parameters)

    def solve(self):
        "Solve and return computed solution (u, p)"

        # Update solver parameters
        self.solver.parameters.update(self.parameters["solver_parameters"])

        # Call solver
        return self.solver.solve()

    def step(self, dt):
        "Make a time step of size dt"

        # Update solver parameters
        self.solver.parameters.update(self.parameters["solver_parameters"])

        # Call solver
        return self.solver.step(dt)

    def update(self, t):
        "Propagate values to next time step"
        return self.solver.update(t)

    def solution(self):
        "Return current solution values"
        return self.solver.solution()

    def solution_values(self):
        "Return solution values at t_{n-1} and t_n"
        return self.solver.solution_values()

    #--- Functions that must be overloaded by subclasses ---

    def mesh(self):
        "Return mesh"
        missing_function("mesh")

    #--- Functions that may optionally be overloaded by subclasses ---

    def density(self):
        "Return density"
        return 1.0

    def viscosity(self):
        "Return viscosity"
        return 1.0

    def body_force(self, V):
        "Return body force f"
        return []

    def boundary_traction(self, V):
        "Return boundary traction g = sigma(u, p) * n"
        return []

    def mesh_velocity(self, V):
        "Return mesh velocity (for ALE formulations)"
        w = Constant((0, ) * V.mesh().geometry().dim())
        return w

    def boundary_conditions(self, V, Q):
        "Return boundary conditions for velocity and pressure"
        return [], []

    def velocity_dirichlet_values(self):
        "Return Dirichlet boundary values for the velocity"
        return []

    def velocity_dirichlet_boundaries(self):
        "Return Dirichlet boundaries for the velocity"
        return []

    def pressure_dirichlet_values(self):
        "Return Dirichlet boundary conditions for the velocity"
        return []

    def pressure_dirichlet_boundaries(self):
        "Return Dirichlet boundaries for the velocity"
        return []

    def velocity_initial_condition(self):
        "Return initial condition for velocity"
        return None

    def pressure_initial_condition(self):
        "Return initial condition for pressure"
        return 0

    def end_time(self):
        "Return end time"
        return 1.0

    def time_step(self):
        "Return preferred time step"
        return None

    def max_velocity(self):
        "Return maximum velocity (used for selecting time step)"
        return 1.0

    def __str__(self):
        "Return a short description of the problem"
        return "Navier-Stokes problem"