/[escript]/temp_trunk_copy/modellib/py_src/flow.py
ViewVC logotype

Diff of /temp_trunk_copy/modellib/py_src/flow.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/esys2/modellib/py_src/flow.py revision 148 by jgs, Tue Aug 23 01:24:31 2005 UTC trunk/modellib/py_src/flow.py revision 1312 by ksteube, Mon Sep 24 06:18:44 2007 UTC
# Line 1  Line 1 
1    #
2  # $Id$  # $Id$
3    #
4  from escript.escript import *  #######################################################
5  from escript.modelframe import Model,IterationDivergenceError  #
6  from escript.linearPDEs import LameEquation  #           Copyright 2003-2007 by ACceSS MNRF
7    #       Copyright 2007 by University of Queensland
8    #
9    #                http://esscc.uq.edu.au
10    #        Primary Business: Queensland, Australia
11    #  Licensed under the Open Software License version 3.0
12    #     http://www.opensource.org/licenses/osl-3.0.php
13    #
14    #######################################################
15    #
16    
17    
18    __copyright__="""  Copyright (c) 2006 by ACcESS MNRF
19                        http://www.access.edu.au
20                    Primary Business: Queensland, Australia"""
21    __license__="""Licensed under the Open Software License version 3.0
22                 http://www.opensource.org/licenses/osl-3.0.php"""
23    
24    from esys.escript import *
25    from esys.escript.modelframe import Model,IterationDivergenceError
26    from esys.escript.linearPDEs import LameEquation
27    
28  class SteadyIncompressibleFlow(Model):  class SteadyIncompressibleFlow(Model):
29         """         """
30    
31                     \f[         M{-\left(\eta\left(v_{i,j}+v_{j,i}\right)\right)_{,j}+p_{,i}=F_i}
32                     -\left(\eta\left(v_{i,j}+v_{j,i}\right)\right)_{,j}+p_{,i}=F_i        
33                     \f]         M{\sigma_{ij}=2\eta D_{ij}-p\,\delta_{ij}}
34    
35                     \f[         M{D_{ij}=\frac{1}{2}\left( v_{j,i} + v_{i,j }\right)}
36                     \sigma_{ij}=2\eta D_{ij}-p\,\delta_{ij}        
37                     \f[         M{v_{k,k} = 0}
                    D_{ij}=\frac{1}{2}\left( v_{j,i} + v_{i,j }\right) \; .  
                    \f]  
   
                    \f[  
                    -v_{k,k} = 0 \; .  
                    \f]  
38    
39         """         """
40    
41         def __init__(self,debug=False):         def __init__(self,**kwargs):
42             """set up model"""             """
43             Model.__init__(self,debug=debug)             set up model
44               """
45               Model.__init__(self,**kwargs)
46             self.declareParameter(domain=None, \             self.declareParameter(domain=None, \
47                                   velocity=0., \                                   velocity=0., \
48                                   pressure=0., \                                   pressure=0., \
49                                   viscosity=1., \                                   viscosity=1., \
50                                   internal_force=0., \                                   internal_force=0., \
51                                   location_prescribed_velocity=Data(), \                                   location_prescribed_velocity=None, \
52                                   prescribed_velocity=Data(), \                                   prescribed_velocity=None, \
53                                   rel_tol=1.e-3,abs_tol=0.,max_iter=10,relaxation=0.001)                                   rel_tol=1.e-3,abs_tol=0.,max_iter=10,relaxation=0.0001)
54             self.__iter=0             self.__iter=0
55    
56         def doInitialization(self):         def doInitialization(self):
57             """initialize model"""             """
58               initialize model
59               """
60             self.__p_old=None             self.__p_old=None
61             self.__p_very_old=None             self.__p_very_old=None
62             self.__dt_old=None             self.__dt_old=None
63             self.__pde=LameEquation(self.domain)             self.__pde=LameEquation(self.domain)
64               self.__pde.setSolverMethod(LameEquation.DIRECT)
65               if self.location_prescribed_velocity == None: self.location_prescribed_velocit=Data()
66               if self.prescribed_velocity == None: self.prescribed_velocity=Data()
67    
68         def stress(self):         def stress(self):
69             """returns current stress"""             """
70               returns current stress"""
71             return 2*self.viscosity*self.stretching-self.pressure*kronecker(self.domain)             return 2*self.viscosity*self.stretching-self.pressure*kronecker(self.domain)
72    
73         def stretching(self):         def stretching(self):
74             """returns stertching tensor"""             """
75               returns stertching tensor
76               """
77             g=grad(self.velocity)             g=grad(self.velocity)
78             return (g+transpose(g))/2             return (g+transpose(g))/2
79    
80         def doStepPreprocessing(self,dt):         def doStepPreprocessing(self,dt):
81              """              """
82                 step up pressure iteration              step up pressure iteration
83    
84                 if run within a time dependend problem extrapolation of pressure from previous time steps is used to              if run within a time dependend problem extrapolation of pressure from previous time steps is used to
85                 get an initial guess (that needs some work!!!!!!!)              get an initial guess (that needs some work!!!!!!!)
86              """              """
87              self.__iter=0              self.__iter=0
88              self.__diff=1.e40              self.__diff=1.e40
# Line 70  class SteadyIncompressibleFlow(Model): Line 95  class SteadyIncompressibleFlow(Model):
95         def doStep(self,dt):         def doStep(self,dt):
96            """            """
97    
98               performs an iteration step of the penalty method.            performs an iteration step of the penalty method.
99               IterationDivergenceError is raised if pressure error cannot be reduced or max_iter is reached.            IterationDivergenceError is raised if pressure error cannot be reduced or max_iter is reached.
100    
101            """            """
102            penalty=self.viscosity/self.relaxation            penalty=self.viscosity/self.relaxation

Legend:
Removed from v.148  
changed lines
  Added in v.1312

  ViewVC Help
Powered by ViewVC 1.1.26