Example #1
0
    def u_exact(self,t):
        """
        Routine to compute the exact solution at time t

        Args:
            t: current time

        Returns:
            exact solution
        """
        
        me = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
                me.values[i,j] = self.u0*np.exp((self.lambda_f[j]+self.lambda_s[i])*t)
        return me
Example #2
0
    def __eval_fexpl(self,u,t):
        """
        Helper routine to evaluate the explicit part of the RHS

        Args:
            u: current values
            t: current time (not used here)

        Returns:
            explicit part of RHS
        """

        fexpl = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
                fexpl.values[i,j] = self.lambda_s[i]*u.values[i,j]
        return fexpl
Example #3
0
    def __eval_fexpl(self, u, t):
        """
        Helper routine to evaluate the explicit part of the RHS

        Args:
            u: current values
            t: current time (not used here)

        Returns:
            explicit part of RHS
        """

        fexpl = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
                fexpl.values[i, j] = self.lambda_s[i] * u.values[i, j]
        return fexpl
Example #4
0
    def u_exact(self, t):
        """
        Routine to compute the exact solution at time t

        Args:
            t: current time

        Returns:
            exact solution
        """

        me = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
                me.values[i, j] = self.u0 * np.exp(
                    (self.lambda_f[j] + self.lambda_s[i]) * t)
        return me
Example #5
0
    def solve_system(self,rhs,factor,u0,t):
        """
        Simple linear solver for (I-dtA)u = rhs

        Args:
            rhs: right-hand side for the nonlinear system
            factor: abbrev. for the node-to-node stepsize (or any other factor required)
            u0: initial guess for the iterative solver (not used here so far)
            t: current time (e.g. for time-dependent BCs)

        Returns:
            solution as mesh
        """

        me = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
               me.values[i,j] = rhs.values[i,j]/(1.0-factor*self.lambda_f[j])

        return me
Example #6
0
    def solve_system(self, rhs, factor, u0):
        """
        Simple linear solver for (I-dtA)u = rhs

        Args:
            rhs: right-hand side for the nonlinear system
            factor: abbrev. for the node-to-node stepsize (or any other factor required)
            u0: initial guess for the iterative solver (not used here so far)

        Returns:
            solution as mesh
        """

        me = mesh(self.nvars)
        for i in range(self.lambda_s.size):
            for j in range(self.lambda_f.size):
                me.values[i,
                          j] = rhs.values[i,
                                          j] / (1 - factor * self.lambda_f[j])

        return me