Ejemplo n.º 1
0
class SlippingFault(SaddlePointProblem):
    """
      simple example of saddle point problem
      """
    def __init__(self, domain):
        super(SlippingFault, self).__init__(self)
        self.domain = domain
        self.__pde_u = LinearPDE(domain,
                                 numEquations=self.domain.getDim(),
                                 numSolutions=self.domain.getDim())
        self.__pde_u.setSymmetryOn()

    def initialize(self,
                   density=1.,
                   lmbd=1.,
                   mu=1.,
                   traction=Data(),
                   fixed_u_mask=Data(),
                   slip=0.):
        d = self.domain.getDim()
        self.slip = slip
        A = self.__pde_u.createCoefficientOfGeneralPDE("A")
        for i in range(self.domain.getDim()):
            for j in range(self.domain.getDim()):
                A[i, j, j, i] += mu
                A[i, j, i, j] += mu
                A[i, i, j, j] += lmbd
        self.__pde_u.setValue(A=A,
                              q=fixed_u_mask,
                              Y=-kronecker(Function(self.domain))[d - 1] * g *
                              density,
                              y=traction)

    def inner(self, p0, p1):
        return integrate(inner(p0, p1), FunctionOnContactZero(self.domain))

    def solve_f(self, u, p, tol=1.e-8):
        self.__pde_u.setTolerance(tol)
        self.__pde_u.setValue(y_contact=-p)
        # print "p:",inf(p),sup(p)
        # print "u:",inf(u),sup(u)
        self.__pde_u.setValue(y_contact=-p)
        return self.__pde_u.getSolution()

    def solve_g(self, u, tol=1.e-8):
        dp = Vector(0., FunctionOnContactZero(self.domain))
        h = FunctionOnContactZero(self.domain).getSize()
        # print jump(u)-self.slip
        dp[0] = (self.slip[0] - jump(u[0])) * lam_mu / h
        dp[1] = (self.slip[1] - jump(u[1])) * lam_mu / h
        dp[2] = (self.slip[2] - jump(u[2])) * lam_mu / h
        return dp
Ejemplo n.º 2
0
class StokesProblem(SaddlePointProblem):
    """
      simple example of saddle point problem
      """
    def __init__(self, domain, debug=False):
        super(StokesProblem, self).__init__(self, debug)
        self.domain = domain
        self.__pde_u = LinearPDE(domain,
                                 numEquations=self.domain.getDim(),
                                 numSolutions=self.domain.getDim())
        self.__pde_u.setSymmetryOn()

        self.__pde_p = LinearPDE(domain)
        self.__pde_p.setReducedOrderOn()
        self.__pde_p.setSymmetryOn()

    def initialize(self, f=Data(), fixed_u_mask=Data(), eta=1):
        self.eta = eta
        A = self.__pde_u.createCoefficientOfGeneralPDE("A")
        for i in range(self.domain.getDim()):
            for j in range(self.domain.getDim()):
                A[i, j, j, i] += self.eta
                A[i, j, i, j] += self.eta
        self.__pde_p.setValue(D=1 / self.eta)
        self.__pde_u.setValue(A=A, q=fixed_u_mask, Y=f)

    def inner(self, p0, p1):
        return integrate(p0 * p1, Function(self.__pde_p.getDomain()))

    def solve_f(self, u, p, tol=1.e-8):
        self.__pde_u.setTolerance(tol)
        g = grad(u)
        self.__pde_u.setValue(X=self.eta * symmetric(g) +
                              p * kronecker(self.__pde_u.getDomain()))
        return self.__pde_u.getSolution()

    def solve_g(self, u, tol=1.e-8):
        self.__pde_p.setTolerance(tol)
        self.__pde_p.setValue(X=-u)
        dp = self.__pde_p.getSolution()
        return dp
Ejemplo n.º 3
0
class SlippingFault(SaddlePointProblem):
      """
      simple example of saddle point problem
      """
      def __init__(self,domain):
         super(SlippingFault, self).__init__(self)
         self.domain=domain
         self.__pde_u=LinearPDE(domain,numEquations=self.domain.getDim(),numSolutions=self.domain.getDim())
         self.__pde_u.setSymmetryOn()

      def initialize(self,density=1.,lmbd=1., mu=1., traction=Data(),fixed_u_mask=Data(), slip=0.):
         d=self.domain.getDim()
         self.slip=slip
         A =self.__pde_u.createCoefficientOfGeneralPDE("A")
         for i in range(self.domain.getDim()):
           for j in range(self.domain.getDim()):
             A[i,j,j,i] += mu
             A[i,j,i,j] += mu
             A[i,i,j,j] += lmbd
         self.__pde_u.setValue(A=A,q=fixed_u_mask,Y=-kronecker(Function(self.domain))[d-1]*g*density,y=traction)

      def inner(self,p0,p1):
         return integrate(inner(p0,p1),FunctionOnContactZero(self.domain))

      def solve_f(self,u,p,tol=1.e-8):
         self.__pde_u.setTolerance(tol)
         self.__pde_u.setValue(y_contact=-p)
         # print "p:",inf(p),sup(p)
         # print "u:",inf(u),sup(u)
         self.__pde_u.setValue(y_contact=-p)
         return  self.__pde_u.getSolution()

      def solve_g(self,u,tol=1.e-8):
         dp=Vector(0.,FunctionOnContactZero(self.domain))
         h=FunctionOnContactZero(self.domain).getSize()
         # print jump(u)-self.slip
         dp[0]=(self.slip[0]-jump(u[0]))*lam_mu/h
         dp[1]=(self.slip[1]-jump(u[1]))*lam_mu/h
         dp[2]=(self.slip[2]-jump(u[2]))*lam_mu/h
         return  dp
class StokesProblem(SaddlePointProblem):
      """
      simple example of saddle point problem
      """
      def __init__(self,domain,debug=False):
         super(StokesProblem, self).__init__(self,debug)
         self.domain=domain
         self.__pde_u=LinearPDE(domain,numEquations=self.domain.getDim(),numSolutions=self.domain.getDim())
         self.__pde_u.setSymmetryOn()

         self.__pde_p=LinearPDE(domain)
         self.__pde_p.setReducedOrderOn()
         self.__pde_p.setSymmetryOn()

      def initialize(self,f=Data(),fixed_u_mask=Data(),eta=1):
         self.eta=eta
         A =self.__pde_u.createCoefficientOfGeneralPDE("A")
         for i in range(self.domain.getDim()):
           for j in range(self.domain.getDim()):
             A[i,j,j,i] += self.eta
             A[i,j,i,j] += self.eta
         self.__pde_p.setValue(D=1/self.eta)
         self.__pde_u.setValue(A=A,q=fixed_u_mask,Y=f)

      def inner(self,p0,p1):
         return integrate(p0*p1,Function(self.__pde_p.getDomain()))

      def solve_f(self,u,p,tol=1.e-8):
         self.__pde_u.setTolerance(tol)
         g=grad(u)
         self.__pde_u.setValue(X=self.eta*symmetric(g)+p*kronecker(self.__pde_u.getDomain()))
         return  self.__pde_u.getSolution()

      def solve_g(self,u,tol=1.e-8):
         self.__pde_p.setTolerance(tol)
         self.__pde_p.setValue(X=-u) 
         dp=self.__pde_p.getSolution()
         return  dp