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
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
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