예제 #1
0
    def eval_f(self,u,t):
        """
        Routine to evaluate both parts of the RHS

        Args:
            u: current values
            t: current time

        Returns:
            the RHS divided into two parts
        """

        f = rhs_fenics_mesh(self.V)
        f.impl = self.__eval_fimpl(u,t)
        f.expl = self.__eval_fexpl(u,t)
        return f
예제 #2
0
    def prolong_space(self,G):
        """
        Prolongation implementation

        Args:
            G: the coarse level data (easier to access than via the coarse attribute)
        """

        if isinstance(G,fenics_mesh):
            u_fine = fenics_mesh(self.init_f)
            u_fine.values = df.interpolate(G.values,u_fine.V)
        elif isinstance(G,rhs_fenics_mesh):
            u_fine = rhs_fenics_mesh(self.init_f)
            u_fine.impl.values = df.interpolate(G.impl.values,u_fine.impl.V)
            u_fine.expl.values = df.interpolate(G.expl.values,u_fine.expl.V)

        return u_fine
예제 #3
0
    def restrict_space(self,F):
        """
        Restriction implementation

        Args:
            F: the fine level data (easier to access than via the fine attribute)
        """

        if isinstance(F,fenics_mesh):
            u_coarse = fenics_mesh(self.init_c)
            u_coarse.values = df.interpolate(F.values,u_coarse.V)
        elif isinstance(F,rhs_fenics_mesh):
            u_coarse = rhs_fenics_mesh(self.init_c)
            u_coarse.impl.values = df.interpolate(F.impl.values,u_coarse.impl.V)
            u_coarse.expl.values = df.interpolate(F.expl.values,u_coarse.expl.V)

        return u_coarse