Example #1
0
def getError(model):
    V = FunctionSpace(model.mesh, model.disc, model.degree + 2)

    S_q = project(Expression(mms.q(), degree=5), V)
    S_h = project(Expression(mms.h(), degree=5), V)
    S_phi = project(Expression(mms.phi(), degree=5), V)
    S_phi_d = project(Expression(mms.phi_d(), degree=5), V)

    q, h, phi, phi_d, x_N, u_N = model.w[0].split()
    Eh = errornorm(h, S_h, norm_type="L2", degree_rise=2)
    Ephi = errornorm(phi, S_phi, norm_type="L2", degree_rise=2)
    Eq = errornorm(q, S_q, norm_type="L2", degree_rise=2)
    Ephi_d = errornorm(phi_d, S_phi_d, norm_type="L2", degree_rise=2)

    return Eh, Ephi, Eq, Ephi_d
Example #2
0
    def getError(model):
        Fq = FunctionSpace(model.mesh, "CG", model.q_degree + 2)
        Fh = FunctionSpace(model.mesh, model.h_disc, model.h_degree + 2)
        Fphi = FunctionSpace(model.mesh, "CG", model.phi_degree + 2)
        Fphi_d = FunctionSpace(model.mesh, model.phi_d_disc, model.phi_d_degree + 2)

        S_q = project(Expression(mms.q(), degree=5), Fq)
        S_h = project(Expression(mms.h(), degree=5), Fh)
        S_phi = project(Expression(mms.phi(), degree=5), Fphi)
        S_phi_d = project(Expression(mms.phi_d(), degree=5), Fphi_d)

        q, h, phi, phi_d, x_N, u_N = model.w[0].split()
        Eh = errornorm(h, S_h, norm_type="L2", degree_rise=2)
        Ephi = errornorm(phi, S_phi, norm_type="L2", degree_rise=2)
        Eq = errornorm(q, S_q, norm_type="L2", degree_rise=2)
        Ephi_d = errornorm(phi_d, S_phi_d, norm_type="L2", degree_rise=2)

        return Eh, Ephi, Eq, Ephi_d
Example #3
0
    def setup(self, dX, dT, disc):
        self.mms = True

        # define constants
        self.dX_ = dX
        self.L_ = np.pi
        self.Fr_ = 1.0
        self.Fr = Constant(1.0)
        self.beta_ = 1.0
        self.beta = Constant(1.0)

        # reset time
        self.t = 0.0

        self.q_b = Constant(0.0)  # 1e-1 / dX)
        self.h_b = Constant(0.0)
        self.phi_b = Constant(0.0)
        self.phi_d_b = Constant(0.0)

        self.q_degree = 1
        self.h_degree = 1
        self.phi_degree = 1
        self.phi_d_degree = 1

        self.q_disc = disc
        self.h_disc = disc
        self.phi_disc = disc
        self.phi_d_disc = disc
        self.slope_limiter = None

        self.initialise_function_spaces()

        self.w_ic = project(
            (Expression((mms.q(), mms.h(), mms.phi(), mms.phi_d(), "pi", mms.u_N()), self.W.ufl_element())), self.W
        )

        # define bc's
        bcq = DirichletBC(
            self.W.sub(0),
            Expression(mms.q(), degree=self.q_degree),
            "(near(x[0], 0.0) || near(x[0], pi)) && on_boundary",
        )
        bch = DirichletBC(
            self.W.sub(1),
            Expression(mms.h(), degree=self.h_degree),
            "(near(x[0], 0.0) || near(x[0], pi)) && on_boundary",
        )
        bcphi = DirichletBC(
            self.W.sub(2),
            Expression(mms.phi(), degree=self.phi_degree),
            "(near(x[0], 0.0) || near(x[0], pi)) && on_boundary",
        )
        bcphi_d = DirichletBC(
            self.W.sub(3),
            Expression(mms.phi_d(), degree=self.phi_d_degree),
            "(near(x[0], 0.0) || near(x[0], pi)) && on_boundary",
        )
        self.bc = [bcq, bch, bcphi, bcphi_d]
        self.bc = []

        # define source terms
        s_q = Expression(mms.s_q(), self.W.sub(0).ufl_element())
        s_h = Expression(mms.s_h(), self.W.sub(0).ufl_element())
        s_phi = Expression(mms.s_phi(), self.W.sub(0).ufl_element())
        s_phi_d = Expression(mms.s_phi_d(), self.W.sub(0).ufl_element())
        self.S = [s_q, s_h, s_phi, s_phi_d]

        self.timestep = dT
        self.adapt_timestep = False

        self.generate_form()

        # initialise plotting
        if self.plot:
            self.plotter = sw_io.Plotter(self, rescale=True, file=self.save_loc)
            self.plot_t = self.plot