Exemplo n.º 1
0
 def test_hex_contact_2D_order2_onFace(self):
    file="hex_contact_2D_order2_onFace.msh"
    ms1=Rectangle(1,1,2,l1=0.5,useElementsOnFace=True)
    ms2=Rectangle(1,1,2,l1=0.5,useElementsOnFace=True)
    ms2.setX(ms2.getX()+[0,0.5])
    my_dom=JoinFaces([ms1,ms2],optimize=False)
    self.checker(my_dom,file)
Exemplo n.º 2
0
 def test_setXError(self):
     domain=Rectangle(NE,NE)
     x=domain.getX()
     z=interpolate(x, Function(domain))
     self.assertRaises(ValueError, domain.setX, z)
     del x
     del z
     del domain
Exemplo n.º 3
0
 def test_setXError(self):
     domain = Rectangle(NE, NE)
     x = domain.getX()
     z = interpolate(x, Function(domain))
     self.assertRaises(ValueError, domain.setX, z)
     del x
     del z
     del domain
Exemplo n.º 4
0
 def setUp(self):
     self.domain = Rectangle(NE, NE + 1)
     self.domain_with_different_number_of_samples = Rectangle(
         2 * NE, NE + 1)
     self.domain_with_different_number_of_data_points_per_sample = Rectangle(
         2 * NE, NE + 1, integrationOrder=2)
     self.domain_with_different_sample_ordering = Rectangle(NE,
                                                            NE + 1,
                                                            optimize=True)
     self.filename_base = DUDLEY_WORKDIR
Exemplo n.º 5
0
 def test_mesh_dump_to_NetCDF_rectangle(self):
     mydomain1 = Rectangle(n0=NE0,
                           n1=NE1,
                           order=1,
                           l0=1.,
                           l1=1.,
                           optimize=False)
     dumpfile = os.path.join(DUDLEY_WORKDIR, "tempfile.mesh.nc")
     mydomain1.dump(dumpfile)
     mydomain2 = LoadMesh(dumpfile)
     self.domainsEqual(mydomain1, mydomain2)
Exemplo n.º 6
0
 def test_data_dump_to_NetCDF_rectangle(self):
     mydomain1 = Rectangle(n0=NE0,
                           n1=NE1,
                           order=1,
                           l0=1.,
                           l1=1.,
                           optimize=False)
     d1 = Data(mydomain1.getMPIRank(), Function(mydomain1))
     d1.expand()
     dumpfile = os.path.join(DUDLEY_WORKDIR, "tempfile.dump.nc")
     d1.dump(dumpfile)
     d2 = load(dumpfile, mydomain1)
     self.assertTrue(Lsup(abs(d1 - d2)) <= REL_TOL, "data objects differ")
Exemplo n.º 7
0
 def test_connectivity_info(self):
     if hasFeature("boostnumpy"):
         domain = Rectangle(n0=3, n1=4)
         testvalues = domain.getConnectivityInfo()
         correctvalues = [[0., 1., 5., 4.], [1., 2., 6., 5.],
                          [2., 3., 7., 6.], [4., 5., 9., 8.],
                          [5., 6., 10., 9.], [6., 7., 11., 10.],
                          [8., 9., 13., 12.], [9., 10., 14., 13.],
                          [10., 11., 15., 14.], [12., 13., 17., 16.],
                          [13., 14., 18., 17.], [14., 15., 19., 18.]]
         for i in range(0, testvalues.shape[0]):
             for j in range(0, 4):
                 self.assertEqual(testvalues[i][j], correctvalues[i][j])
Exemplo n.º 8
0
 def test_Rectangle_optimize_order1(self):
     mydomain1 = Rectangle(n0=NE0,
                           n1=NE1,
                           order=1,
                           l0=1.,
                           l1=1.,
                           optimize=False)
     mydomain2 = Rectangle(n0=NE0,
                           n1=NE1,
                           order=1,
                           l0=1.,
                           l1=1.,
                           optimize=True)
     self.domainsEqual(mydomain1, mydomain2)
Exemplo n.º 9
0
    def setUp(self):
        self.workdir = DUDLEY_WORKDIR
        NE0 = NE
        NE1 = NE + 1
        self.domain = Rectangle(NE0, NE1)
        self.functionspaces = [ContinuousFunction]
        # number of total data points for each function space
        self.linecounts = [(NE0 + 1) * (NE1 + 1) + 1]
        # number of masked points, i.e. where X[0] is non-zero
        self.linecounts_masked = [NE0 * (NE1 + 1) + 1]
        # expected values in first line of masked data = [ X[:], X[0] ]
        self.firstline = [[1. / NE0, 0., 1. / NE0]]

        if getMPISizeWorld() == 1:
            self.functionspaces += [
                Function, ReducedFunction, FunctionOnBoundary,
                ReducedFunctionOnBoundary
            ]
            self.linecounts += [121, 41, 37, 19]
            self.linecounts_masked += [116, 41, 27, 14]
            self.firstline += [[.125, 0., .125],
                               [
                                   .16666666666666667, .0666666666666667,
                                   .166666666666667
                               ], [.05283121635129676, 0., .05283121635129676],
                               [.125, 0., .125]]
Exemplo n.º 10
0
 def fixme_test_mesh_read_rectangle_from_dudley_file(self):
     mydomain1 = Rectangle(n0=8,
                           n1=10,
                           order=1,
                           l0=1.,
                           l1=1.,
                           optimize=False)
     mydomain2 = ReadMesh(
         os.path.join(DUDLEY_TEST_MESH_PATH, "rectangle_8x10.fly"))
     self.domainsEqual(mydomain1, mydomain2)
Exemplo n.º 11
0
 def test_connectivity_info(self):
     if hasFeature("boostnumpy"):
         domain = Rectangle(n0=3, n1=4)
         testvalues = domain.getConnectivityInfo()
         if (domain.getDescription() == 'FinleyMesh'):
             correctvalues = [[0., 1., 5., 4.], [1., 2., 6., 5.],
                              [2., 3., 7., 6.], [4., 5., 9., 8.],
                              [5., 6., 10., 9.], [6., 7., 11., 10.],
                              [8., 9., 13., 12.], [9., 10., 14., 13.],
                              [10., 11., 15., 14.], [12., 13., 17., 16.],
                              [13., 14., 18., 17.], [14., 15., 19., 18.]]
             jlim = 4
         elif (domain.getDescription() == 'DudleyMesh'):
             correctvalues = [[0., 1., 5.], [0., 5., 4.], [1., 2., 5.],
                              [2., 6., 5.], [2., 3., 7.], [2., 7., 6.],
                              [4., 5., 9.], [4., 9., 8.], [5., 6., 9.],
                              [6., 10., 9.], [6., 7., 11.], [6., 11., 10.],
                              [8., 9., 13.], [8., 13., 12.], [9., 10., 13.],
                              [10., 14., 13.], [10., 11., 15.],
                              [10., 15., 14.], [12., 13., 17.],
                              [12., 17., 16.], [13., 14., 17.],
                              [14., 18., 17.], [14., 15., 19.],
                              [14., 19., 18.]]
             jlim = 3
         else:
             msg = "Unrecognised domain type %s" % domain.getDescription()
             self.assertEqual(1, -1, msg)
         for i in range(0, testvalues.shape[0]):
             for j in range(0, jlim):
                 self.assertEqual(testvalues[i][j], correctvalues[i][j])
Exemplo n.º 12
0
 def setUp(self):
     self.domain = Rectangle(NE0, NE1, optimize=OPTIMIZE)
     self.package = SolverOptions.TRILINOS
     self.method = SolverOptions.TFQMR
     self.preconditioner = SolverOptions.GAUSS_SEIDEL
 # dimensions:
 L0 = 1.
 L1 = 1.
 # height of k interface:
 H = L1 * 0.75
 # bottom temperature:
 T_bot = 100
 # location, size and value of heat source
 xc = [0.3, 0.4]
 r = 0.1
 Qc = 3000
 # two values for k
 k0 = 1
 k1 = 10
 # create domain:
 mydomain = Rectangle(l0=L0, l1=L1, n0=20, n1=20)
 x = mydomain.getX()
 # set variable k
 k = k0 + (k1 - k0) * wherePositive(x[1] - H)
 # boundary temperature
 T_D = T_bot / L1 * (L1 - x[1])
 # heat source
 Q = Qc * whereNegative(length(x - xc) - r)
 # create PDE and set coefficients:
 mypde = LinearPDE(mydomain)
 mypde.setSymmetryOn()
 # set PDE coefficients:
 mypde.setValue(A=k*kronecker(mydomain),Y=Q, r=T_D, \
                 q=whereZero(x[1])+whereZero(x[1]-L1))
 # get temperature:
 T = mypde.getSolution()
Exemplo n.º 14
0
#solver settings
dt = 0.001
t_step = 0
t_step_end = 2000
TOL = 1.0e-5
max_iter=400
verbose=True
useUzawa=True

#define mesh
l0=0.9142
l1=1.0
n0=200      
n1=200

mesh=Rectangle(l0=l0, l1=l1, order=2, n0=n0, n1=n1)
#get mesh dimensions
numDim = mesh.getDim()
#get element size
h = Lsup(mesh.getSize())

#level set parameters
tolerance = 1.0e-6
reinit_max = 30
reinit_each = 3
alpha = 1
smooth = alpha*h 

#boundary conditions
x = mesh.getX()
#left + bottom + right + top
alpha_w   =   1.00
alpha    =   1.00*1000000.
Pen=0.
B=100.

nstep    =   3000
dt       =   1.
small    =   EPSILON
w_step=max(int(nstep/50),1)*0+1
toler    =   0.001
teta1    =    0.5
teta2    =    0.5
teta3    =    1  # =0 split A; =1 split B

# create domain:
dom=Rectangle(int(nel*L/min(L,H)),int(nel*H/min(L,H)),order=1, l0=L, l1=H)
x=dom.getX()


momentumStep1=LinearPDESystem(dom) 
momentumStep1.setValue(q=whereZero(x[0])*[1.,0.]+whereZero(x[1])*[0.,1.]) # fix x0=0 and x1=0
face_mask=whereZero(FunctionOnBoundary(dom).getX()[1])

pressureStep2=LinearSinglePDE(dom) 
pressureStep2.setReducedOrderOn() 
pressureStep2.setValue(q=whereZero(x[0]-L)+whereZero(x[1]-H))

momentumStep3=LinearPDESystem(dom)
momentumStep3.setValue(q=whereZero(x[0])*[1.,0.]+whereZero(x[1])*[0.,1.])
#
#   initial values:
Exemplo n.º 16
0
__license__="""Licensed under the Apache License, version 2.0
http://www.apache.org/licenses/LICENSE-2.0"""
__url__="https://launchpad.net/escript-finley"

import sys

# get the tools we want to use
from esys.escript import *
from esys.weipa import saveVTK
try:
    from esys.dudley import Rectangle
    # some parameters
    L0=1.
    L1=1. 
    T_bot=100
    # generate n0 x n1 elements over [0,l0] x [0,l1]
    mydomain=Rectangle(l0=L0,l1=L1,n0=20,n1=20)
    # print spatial dimension:
    print("dimension = ",mydomain.getDim())
    # get coordinates of points in domain:
    x=mydomain.getX()
    print(x) 
    # set a function 
    T_D=T_bot/L1*(L1-x[1])
    # save T_D for visualisation
    saveVTK("u.vtu",T=T_D)
except ImportError:
    print("Dudley module not available")


Exemplo n.º 17
0
__license__="""Licensed under the Apache License, version 2.0
http://www.apache.org/licenses/LICENSE-2.0"""
__url__="https://launchpad.net/escript-finley"

import sys

# get the tools we want to use
from esys.escript import *
from esys.weipa import saveVTK
try:
    from esys.dudley import Rectangle
    # some parameters
    L0=1.
    L1=1. 
    T_bot=100
    # generate n0 x n1 elements over [0,l0] x [0,l1]
    mydomain=Rectangle(l0=L0,l1=L1,n0=20,n1=20)
    # print spatial dimension:
    print("dimension = ",mydomain.getDim())
    # get coordinates of points in domain:
    x=mydomain.getX()
    print(x) 
    # set a function 
    T_D=T_bot/L1*(L1-x[1])
    # save T_D for visualisation
    saveVTK("u.vtu",T=T_D)
except ImportError:
    print("Dudley module not available")


Exemplo n.º 18
0
alpha_w   =   1.00
alpha    =   1.00*1000000.
Pen=0.
B=100.

nstep    =   3000
dt       =   1.
small    =   EPSILON
w_step=max(int(nstep/50),1)*0+1
toler    =   0.001
teta1    =    0.5
teta2    =    0.5
teta3    =    1  # =0 split A; =1 split B

# create domain:
dom=Rectangle(int(nel*L/min(L,H)),int(nel*H/min(L,H)),order=1, l0=L, l1=H)
x=dom.getX()


momentumStep1=LinearPDESystem(dom) 
momentumStep1.setValue(q=whereZero(x[0])*[1.,0.]+whereZero(x[1])*[0.,1.]) # fix x0=0 and x1=0
face_mask=whereZero(FunctionOnBoundary(dom).getX()[1])

pressureStep2=LinearSinglePDE(dom) 
pressureStep2.setReducedOrderOn() 
pressureStep2.setValue(q=whereZero(x[0]-L)+whereZero(x[1]-H))

momentumStep3=LinearPDESystem(dom)
momentumStep3.setValue(q=whereZero(x[0])*[1.,0.]+whereZero(x[1])*[0.,1.])
#
#   initial values:
Exemplo n.º 19
0
 def setUp(self):
     self.domain = Rectangle(NE, NE)
     self.tol = 0.001
 def setUp(self):
     self.order = 1
     self.domain = Rectangle(n0=NE, n1=NE)
Exemplo n.º 21
0
 def setUp(self):
      self.domain = Rectangle(l0=1.,l1=1.,n0=10, n1=10) 
 def setUp(self):
     self.domain = Rectangle(NE, NE)
     self.order = 1
Exemplo n.º 23
0
    a = inf(u_h)
    b = sup(u_h) * (4 * pi * E * t)**(DIM / 2.) - 1.
    c = integrate(u_h, Function(dom)) - 1.
    x0 = getCenter(t)
    x0h = integrate(x * u_h, Function(dom))
    d = length(x0 - x0h)
    sigma_h2 = sqrt(integrate(length(x - x0h)**2 * u_h, Function(dom)))
    if DIM == 3: sigma_h2 *= sqrt(2. / 3.)
    e = sigma_h2 / sqrt(4 * E * t) - 1
    # return a,b,c,e,1./(4*pi*E*t)**(DIM/2.)
    return d, e
    # return a,b,c,d,e


if DIM == 2:
    dom = Rectangle(NE, NE)
else:
    dom = Brick(NE, NE, NE)
dom.setX(2 * dom.getX() - 1)

# set initial value
x = dom.getX()
u0 = 1 / (4. * pi * E * T0)**(DIM / 2.) * exp(
    -length(dom.getX() - getCenter(T0))**2 / (4. * E * T0))

print("QUALITY ", QUALITY(T0, u0))

x = Function(dom).getX()
if DIM == 2:
    V = OMEGA0 * (x[0] * [0, -1] + x[1] * [1, 0])
else:
Exemplo n.º 24
0
     c=integrate(u_h,Function(dom))-1.
     x0=getCenter(t)
     x0h=integrate(x*u_h,Function(dom))
     d=length(x0-x0h)
     sigma_h2=sqrt(integrate(length(x-x0h)**2 * u_h, Function(dom)))
     if DIM == 3: sigma_h2*=sqrt(2./3.)
     e=sigma_h2/sqrt(4*E*t)-1             
     # return a,b,c,e,1./(4*pi*E*t)**(DIM/2.)
     return d,e
     # return a,b,c,d,e
      



if DIM==2:
  dom=Rectangle(NE,NE)
else:
  dom=Brick(NE,NE,NE)
dom.setX(2*dom.getX()-1)

# set initial value 
x=dom.getX()
u0=1/(4.*pi*E*T0)**(DIM/2.)*exp(-length(dom.getX()-getCenter(T0))**2/(4.*E*T0)) 

print("QUALITY ",QUALITY(T0,u0))

x=Function(dom).getX()
if DIM == 2:
   V=OMEGA0*(x[0]*[0,-1]+x[1]*[1,0])
else:
   V=OMEGA0*(x[0]*[0,cos(ALPHA),0]+x[1]*[-cos(ALPHA),0,sin(ALPHA)]+x[2]*[0.,-sin(ALPHA),0.])
Exemplo n.º 25
0
#solver settings
dt = 0.001
t_step = 0
t_step_end = 2000
TOL = 1.0e-5
max_iter = 400
verbose = True
useUzawa = True

#define mesh
l0 = 0.9142
l1 = 1.0
n0 = 200
n1 = 200

mesh = Rectangle(l0=l0, l1=l1, order=2, n0=n0, n1=n1)
#get mesh dimensions
numDim = mesh.getDim()
#get element size
h = Lsup(mesh.getSize())

#level set parameters
tolerance = 1.0e-6
reinit_max = 30
reinit_each = 3
alpha = 1
smooth = alpha * h

#boundary conditions
x = mesh.getX()
#left + bottom + right + top
Exemplo n.º 26
0
 def setUp(self):
     self.boundary_tag_list = [1, 2, 10, 20]
     self.domain = Rectangle(NE, NE + 1)
     self.rdomain = self.domain
 def setUp(self):
     self.domain = Rectangle(NE, NE + 1)
     self.functionspace = FunctionOnBoundary(self.domain)
     self.workdir = DUDLEY_WORKDIR
Exemplo n.º 28
0
def XXX(dim, tend, dt, s, h, b, c, d, c_dir="x", d_dir="x", a=1., CN=True):
    """
     dim - sparial dimension 
     s - width of initial profile
     h - mesh size
    """
    v_c = c / a * getDirection(dim, c_dir)
    v_d = d / a * getDirection(dim, d_dir)
    v = (v_c + v_d)
    E = b / a
    if VERBOSITY:
        print("=" * 100)
        print(
            "XX Start test dim  = %d , h=%e, b=%e, c=%e, d=%e, c_dir=%s, d_dir=%s, a=%e, s=%e"
            % (dim, h, b, c, d, c_dir, d_dir, a, s))
        print("=" * 100)
        print("initial width s = ", s)
        print("diffusion = ", E)
        print("total velocity = ", v)
        print("tend = ", tend)
        print("tolerance = ", TOL)
        print("number of elements over s =", s / h)
    b0 = sqrt(-log(TAU) * 4 * (s**2 + E * tend))
    b1 = sqrt(-log(TAU)) * 2 * s
    X0_0 = max(b1, -v[0] * tend + b0)
    X0_1 = max(b1, -v[1] * tend + b0)
    l_0 = X0_0 + max(v[0] * tend + b0, b1)
    l_1 = X0_1 + max(v[1] * tend + b0, b1)
    NE_0 = max(int(l_0 / h + 0.5), 1)
    NE_1 = max(int(l_1 / h + 0.5), 1)
    if dim == 2:
        if VERBOSITY:
            print("%d x %d grid over %e  x %e with element size %e." %
                  (NE_0, NE_1, l_0, l_1, h))
        if NE_0 * NE_1 > NE_MAX:
            raise ValueError("too many elements %s." % (NE_0 * NE_1, ))
        dom = Rectangle(n0=NE_0, n1=NE_1, l0=l_0, l1=l_1)
        x0 = [X0_0, X0_1]
    else:
        X0_2 = max(b1, -v[2] * tend + b0)
        l_2 = X0_2 + max(v[2] * tend + b0, b1)
        NE_2 = max(int(l_2 / h + 0.5), 1)
        if VERBOSITY:
            print(
                "%d x %d x %d grid over %e  x %e x %e with element size %e." %
                (NE_0, NE_1, NE_2, l_0, l_1, l_2, h))
        if NE_0 * NE_1 * NE_2 > NE_MAX:
            raise ValueError("too many elements %s." % (NE_0 * NE_1 * NE_2, ))
        dom = Brick(n0=NE_0, n1=NE_1, ne2=NE_2, l0=l_0, l1=l_1, l2=l_2)
        x0 = [X0_0, X0_1, X0_2]
    if VERBOSITY:
        print("initial location = ", x0)
    print("XX", interpolate(uRef(dom, 0., E, s, v, x0),
                            FunctionOnBoundary(dom)))

    fc_BE = TransportPDE(dom, numEquations=1, useBackwardEuler=True)
    fc_BE.setValue(M=a, A=-b * kronecker(dom), B=-v_d * a, C=-v_c * a)
    fc_BE.getSolverOptions().setVerbosity(VERBOSITY)
    fc_BE.getSolverOptions().setTolerance(TOL)
    #
    fc_BE.getSolverOptions().setPreconditioner(
        fc_BE.getSolverOptions().GAUSS_SEIDEL)
    fc_BE.getSolverOptions().setNumSweeps(5)
    if VERBOSITY: print("Backward Euler Transport created")

    fc_CN = TransportPDE(dom, numEquations=1, useBackwardEuler=False)
    fc_CN.setValue(M=a, A=-b * kronecker(dom), B=-v_d * a, C=-v_c * a)
    fc_CN.getSolverOptions().setVerbosity(VERBOSITY)
    fc_CN.getSolverOptions().setTolerance(TOL)

    #fc_CN.getSolverOptions().setPreconditioner(fc_CN.getSolverOptions().GAUSS_SEIDEL)
    fc_CN.getSolverOptions().setNumSweeps(2)
    if VERBOSITY: print("Crank Nicolson Transport created")
    dt_CN = fc_CN.getSafeTimeStepSize()
    if VERBOSITY: print("time step size by Crank Nicolson=", dt_CN)

    U0 = uRef(dom, 0, E, s, v, x0)
    U0_e = uRef(dom, 0, E, s, v, x0, True)
    fc_CN.setInitialSolution(U0)
    fc_BE.setInitialSolution(U0)
    initial_error_L2 = sqrt(integrate((U0 - U0_e)**2))
    if VERBOSITY:
        print("initial Lsup = ", Lsup(U0), Lsup(U0_e))
        print("initial integral = ", integrate(U0_e))
        print("initial error = ", initial_error_L2)
        print("used time step size =", dt)

    if not CN:
        n = int(ceil(tend / dt))
        if VERBOSITY:
            print("Solve Backward Euler:")
            print("substeps : ", n)
        t0 = clock()
        for i in range(n):
            u = fc_BE.getSolution(dt)
        t0 = clock() - t0
    else:
        if VERBOSITY: print("Solve Crank Nicolson:")
        dt = dt_CN
        t0 = clock()
        u = fc_CN.getSolution(tend)
        t0 = clock() - t0
    out = QUALITY(u, uRef(dom, tend, E, s, v, x0, True))
    print("XX",
          interpolate(uRef(dom, tend, E, s, v, x0), FunctionOnBoundary(dom)))
    out['time'] = t0
    out['tend'] = tend
    out['dt'] = dt
    out['dx'] = h
    if abs(b) > 0:
        out["peclet"] = length(v) * s / b
    else:
        out["peclet"] = 9999999.
    # saveVTK("bb.vtu",u0=U0,u_CN=u_CN, uRef=uRef(dom,dt2,E,s,v,X0) )
    return out
Exemplo n.º 29
0
    t=dataMgr.getValue('t')
    t_vis=dataMgr.getValue('t_vis')
    n=dataMgr.getValue('n')
    dt=dataMgr.getValue('dt')
    stress=dataMgr.getValue('stress')
    v=dataMgr.getValue('v')
    p=dataMgr.getValue('p')
    T=dataMgr.getValue('T')
    if CREATE_TOPO:
        topography=dataMgr.getValue('topography')
   
    #diagnostics_file=FileWriter(DIAGNOSTICS_FN,append=True)
    print(("<%s> Restart at time step %d (t=%e) completed."%(time.asctime(),n,t)))
else:
    if DIM==2:
        dom=Rectangle(int(ceil(L*NE/H)),NE,l0=L/H,l1=1,order=-1,optimize=True)
    else:
        dom=Brick(int(ceil(L*NE/H)),int(ceil(L*NE/H)),NE,l0=L/H,l1=L/H,l2=1,order=-1,optimize=True)
    x=dom.getX()
    T=Scalar(1,Solution(dom))
    for d in range(DIM):
        if d == DIM-1: 
            T*=sin(x[d]/H*pi)
        else:
            T*=cos(x[d]/L*pi)

    T=(1.-x[DIM-1])+PERT*T
    v=Vector(0,Solution(dom))
    stress=Tensor(0,Function(dom))
    x2=ReducedSolution(dom).getX()
    p=Ra*(x2[DIM-1]-0.5*x2[DIM-1]**2-0.5)
Exemplo n.º 30
0
from math import pi, ceil
NE=128
NE=4
DIM=2
THETA=0.5
OMEGA0=1.
ALPHA=pi/4
T0=0
T_END=2.*pi
dt=1e-3*10*10
E=1.e-3
TEST_SUPG=False or True


if DIM==2:
  dom=Rectangle(NE,NE)
else:
  dom=Brick(NE,NE,NE)
u0=dom.getX()[0]
# saveVTK("u.%s.vtu"%0,u=u0)
# print "XX"*80
dom.setX(2*dom.getX()-1)

# set initial value 
x=dom.getX()
r=sqrt(x[0]**2+(x[1]-1./3.)**2)
# u0=whereNegative(r-1./3.)*wherePositive(wherePositive(abs(x[0])-0.05)+wherePositive(x[1]-0.5))

x=Function(dom).getX()
if DIM == 2:
   V=OMEGA0*(x[0]*[0,-1]+x[1]*[1,0])
Exemplo n.º 31
0
from esys.dudley import Rectangle, Brick
from math import pi, ceil
NE = 128
NE = 4
DIM = 2
THETA = 0.5
OMEGA0 = 1.
ALPHA = pi / 4
T0 = 0
T_END = 2. * pi
dt = 1e-3 * 10 * 10
E = 1.e-3
TEST_SUPG = False or True

if DIM == 2:
    dom = Rectangle(NE, NE)
else:
    dom = Brick(NE, NE, NE)
u0 = dom.getX()[0]
# saveVTK("u.%s.vtu"%0,u=u0)
# print "XX"*80
dom.setX(2 * dom.getX() - 1)

# set initial value
x = dom.getX()
r = sqrt(x[0]**2 + (x[1] - 1. / 3.)**2)
# u0=whereNegative(r-1./3.)*wherePositive(wherePositive(abs(x[0])-0.05)+wherePositive(x[1]-0.5))

x = Function(dom).getX()
if DIM == 2:
    V = OMEGA0 * (x[0] * [0, -1] + x[1] * [1, 0])
Exemplo n.º 32
0
    print("Dudley module not available")
else:
    # end of simulation time
    t_end=0.1
    # time step size:
    dt=0.01
    # dimensions:
    L0=1.;L1=1.
    # location, size and value of heat source
    xc=[0.3,0.4]; r=0.1; Qc=3000
    # material parameter
    k=1; rhocp=100; 
    # bottom temperature:
    T_bot=100
    # generate domain:
    mydomain=Rectangle(l0=L0,l1=L1,n0=20,n1=20)
    x=mydomain.getX()
    # set boundray temperature:
    T_D=T_bot/L1*(L1-x[1])
    # set heat source:
    Q=Qc*whereNegative(length(x-xc)-r)
    # generate domain:
    mypde=LinearPDE(mydomain)
    mypde.setSymmetryOn()
    # set PDE coefficients:
    mypde.setValue(A=dt*k*kronecker(mydomain), D=dt*rhocp, 
                    r=T_D, q=whereZero(x[1])+whereZero(x[1]-L1))
    # initial temperature
    T=T_D 
    # step counter and time marker:
    N=0; t=0
 def setUp(self):
     self.domain = Rectangle(NE, NE + 1)
     self.functionspace = FunctionOnBoundary(
         self.domain
     )  # due to a bug in escript python needs to hold a reference to the domain
     self.workdir = DUDLEY_WORKDIR
def getMesh(NE_X, NE_Y, t, d, o, fullOrder, r, l_X):
    if t == "Hex":
        if d == 2:
            dom = Rectangle(n0=NE_X,
                            n1=NE_Y,
                            l0=l_X,
                            order=o,
                            useFullElementOrder=fullOrder,
                            useElementsOnFace=r,
                            optimize=True)
        else:
            Brick()
            dom = Brick(n0=NE_X,
                        n1=NE_Y,
                        n2=NE_Y,
                        l0=l_X,
                        order=o,
                        useFullElementOrder=fullOrder,
                        useElementsOnFace=r,
                        optimize=True)
    else:
        des = Design(dim=d,
                     order=o,
                     element_size=min(l_X / max(3, NE_X), 1. / max(3, NE_Y)),
                     keep_files=True)
        des.setScriptFileName("tester.geo")
        if d == 2:
            p0 = Point(0., 0.)
            p1 = Point(l_X, 0.)
            p2 = Point(l_X, 1.)
            p3 = Point(0., 1.)
            l01 = Line(p0, p1)
            l12 = Line(p1, p2)
            l23 = Line(p2, p3)
            l30 = Line(p3, p0)
            s = PlaneSurface(CurveLoop(l01, l12, l23, l30))
            des.addItems(s, l01, l12, l23, l30)
        else:
            p000 = Point(0., 0., 0.)
            p100 = Point(l_X, 0., 0.)
            p010 = Point(0., 1., 0.)
            p110 = Point(l_X, 1., 0.)
            p001 = Point(0., 0., 1.)
            p101 = Point(l_X, 0., 1.)
            p011 = Point(0., 1., 1.)
            p111 = Point(l_X, 1., 1.)

            l10 = Line(p000, p100)
            l20 = Line(p100, p110)
            l30 = Line(p110, p010)
            l40 = Line(p010, p000)

            l11 = Line(p000, p001)
            l21 = Line(p100, p101)
            l31 = Line(p110, p111)
            l41 = Line(p010, p011)

            l12 = Line(p001, p101)
            l22 = Line(p101, p111)
            l32 = Line(p111, p011)
            l42 = Line(p011, p001)

            bottom = PlaneSurface(-CurveLoop(l10, l20, l30, l40))
            top = PlaneSurface(CurveLoop(l12, l22, l32, l42))

            front = PlaneSurface(CurveLoop(l10, l21, -l12, -l11))
            back = PlaneSurface(CurveLoop(l30, l41, -l32, -l31))

            left = PlaneSurface(CurveLoop(l11, -l42, -l41, l40))
            right = PlaneSurface(CurveLoop(-l21, l20, l31, -l22))

            vol = Volume(SurfaceLoop(bottom, top, front, back, left, right))
            des.addItems(vol)

        dom = MakeDomain(des)
    return dom
Exemplo n.º 35
0
 def setUp(self):
     self.domain = Rectangle(NE, NE + 1)
Exemplo n.º 36
0
    t=dataMgr.getValue('t')
    t_vis=dataMgr.getValue('t_vis')
    n=dataMgr.getValue('n')
    dt=dataMgr.getValue('dt')
    stress=dataMgr.getValue('stress')
    v=dataMgr.getValue('v')
    p=dataMgr.getValue('p')
    T=dataMgr.getValue('T')
    if CREATE_TOPO:
        topography=dataMgr.getValue('topography')
   
    #diagnostics_file=FileWriter(DIAGNOSTICS_FN,append=True)
    print(("<%s> Restart at time step %d (t=%e) completed."%(time.asctime(),n,t)))
else:
    if DIM==2:
        dom=Rectangle(int(ceil(L*NE/H)),NE,l0=L/H,l1=1,order=-1,optimize=True)
    else:
        dom=Brick(int(ceil(L*NE/H)),int(ceil(L*NE/H)),NE,l0=L/H,l1=L/H,l2=1,order=-1,optimize=True)
    x=dom.getX()
    T=Scalar(1,Solution(dom))
    for d in range(DIM):
        if d == DIM-1: 
            T*=sin(x[d]/H*pi)
        else:
            T*=cos(x[d]/L*pi)

    T=(1.-x[DIM-1])+PERT*T
    v=Vector(0,Solution(dom))
    stress=Tensor(0,Function(dom))
    x2=ReducedSolution(dom).getX()
    p=Ra*(x2[DIM-1]-0.5*x2[DIM-1]**2-0.5)
Exemplo n.º 37
0
 def setUp(self):
     self.domain = Rectangle(NE, NE + 1)
     self.mainfs = Function(self.domain)
     self.otherfs = Solution(self.domain)
Exemplo n.º 38
0
 def setUp(self):
     self.domain = Rectangle(NE0, NE1, optimize=OPTIMIZE)
     self.package = SolverOptions.MKL
     self.method = SolverOptions.DIRECT
Exemplo n.º 39
0
 def setUp(self):
     self.domain = Rectangle(NE0, NE1, optimize=OPTIMIZE)
     self.package = SolverOptions.TRILINOS
     self.method = SolverOptions.PCG
     self.preconditioner = SolverOptions.JACOBI