Exemplo n.º 1
0
 def __init__(self, file):
     self.value = 0.0
     self.count = 0.0
     self.contrib = 0.0
     self.mesh = Mesh.UnstructuredMesh()
     self.field = None
     # generate a simple mesh here
     self.xl = 10.0 # domain (0..xl)(0..yl)
     self.yl = 10.0
     self.nx = 50 # number of elements in x direction
     self.ny = 50 # number of elements in y direction 
     self.dx = self.xl/self.nx;
     self.dy = self.yl/self.ny;
     self.mesh = meshgen.meshgen((0.,0.), (self.xl, self.yl), self.nx, self.ny) 
Exemplo n.º 2
0
import sys
sys.path.append('../..')
import demoapp
import meshgen
from mupif import FieldID
from mupif import Field
from mupif import ValueType
from mupif import TimeStep
from mupif import PropertyID

app = demoapp.demoapp(None)
print app.getApplicationSignature()

f = app.getField(FieldID.FID_Temperature, 0.0)

#simple field mapping    
#mesh2 = meshgen.meshgen((0.0, 4.5), (10.0, 1.5), 50, 10);
mesh2 = meshgen.meshgen((0.0, 4.5), (10.0, 1.5), 40, 3);

values=[];
for i in mesh2.vertices():
    val = f.evaluate(i.getCoordinates())
    values.append(val)
f.field2VTKData().tofile('example2Orig')

#create new field on target mesh
f2=Field.Field(mesh2, FieldID.FID_Temperature, ValueType.Scalar, None, 0.0, values);
f2.field2VTKData().tofile('example2')
Exemplo n.º 3
0
    def readInput(self):

        dirichletModelEdges=[]
        loadModelEdges=[]
        try:
            f = open(self.workDir+os.path.sep+self.file, 'r')
            line = getline(f)
            size = line.split()
            self.xl=float(size[0])
            self.yl=float(size[1])

            line = getline(f)
            ne = line.split()
            self.nx=int(ne[0])
            self.ny=int(ne[1])

            mupif.log.info("Mechanical problem's dimensions: (%g, %g)" % (self.xl,self.yl) )

            for iedge in range(4):
                line = getline(f)
                rec = line.split()
                edge = int(rec[0])
                code = rec[1]
                if (code == 'D'):
                    dirichletModelEdges.append(edge)
                elif (code == 'C'):
                    loadModelEdges.append(edge)

            f.close()

        except  Exception as e:
            mupif.log.exception(e)
            exit(1)


        self.mesh = Mesh.UnstructuredMesh()
        # generate a simple mesh here
        #self.xl = 0.5 # domain (0..xl)(0..yl)
        #self.yl = 0.3
        #self.nx = 10 # number of elements in x direction
        #self.ny = 10 # number of elements in y direction 
        self.dx = self.xl/self.nx;
        self.dy = self.yl/self.ny;
        self.mesh = meshgen.meshgen((0.,0.), (self.xl, self.yl), self.nx, self.ny) 

        k = 1
#
# Model edges
#     ----------3----------
#     |                   |
#     4                   2
#     |                   | 
#     ----------1---------
#

        #dirichletModelEdges=(3,4,1)#
        self.dirichletBCs = {}# key is node number, value is prescribed temperature (zero supported only now)
        for ide in dirichletModelEdges:
            if ide == 1:
                for i in range(self.nx+1):
                    self.dirichletBCs[i*(self.ny+1)]= (0.0, 0.0, 0.0)
            elif ide ==2:
                for i in range(self.ny+1):
                    self.dirichletBCs[self.ny*(self.nx+1)+i]=(0.0,0.0, 0.0)
            elif ide ==3:
                for i in range(self.nx+1):
                    self.dirichletBCs[self.ny+i*(self.nx+1)]=(0.0, 0.0, 0.0)
            elif ide ==4:
                for i in range(self.ny+1):
                    self.dirichletBCs[i]=(0.0, 0.0, 0.0)

        #convectionModelEdges=(2,)
        self.loadBC = []
        fx = self.fx
        fy = self.fy
        for ice in loadModelEdges:
            if ice ==1:
                for i in range(self.nx):
                    self.loadBC.append((self.ny*i,0, fx, fy))
            elif ice ==2:
                for i in range(self.ny):
                    self.loadBC.append(((self.nx-1)*self.ny+i, 1, fx, fy))
            elif ice ==3:
                for i in range(self.nx):
                    self.loadBC.append((self.ny*(i+1)-1, 2, fx, fy))
            elif ice ==4:
                for i in range(self.ny):
                    self.loadBC.append((i, 3, fx, fy))

        self.loc=np.zeros((self.mesh.getNumberOfVertices(),2), dtype=np.int32) # Du, Dv dofs per node
        for i in self.dirichletBCs:
            self.loc[i,0]=-1;
            self.loc[i,1]=-1;
        self.neq = 0;
        for i in range(self.mesh.getNumberOfVertices()):
            for j in range (2): #loop over nodal DOFs
                if (self.loc[i,j] >= 0):
                    self.loc[i,j]=self.neq;
                    self.neq=self.neq+1
Exemplo n.º 4
0
    def readInput(self, tria=False):
        self.tria = tria
        dirichletModelEdges=[]
        convectionModelEdges=[]
        try:
            lines = open(self.workDir+os.path.sep+self.file, 'r')
        except  Exception as e:
            mupif.log.exception(e)
            exit(1)

        #filter out comments wstarting with #
        lines = (l for l in lines if (l.startswith('#')==False) )
        # more filters and mappings you might want
        #print (lines.next())
        line = lines.next()
        size = line.split()
        self.xl=float(size[0])
        self.yl=float(size[1])
        mupif.log.info ("Thermal problem's dimensions: (%g, %g)" % (self.xl,self.yl) )
        line = lines.next()
        ne = line.split()
        self.nx=int(ne[0])
        self.ny=int(ne[1])

        for iedge in range(4):
            line = lines.next()
            #print (line)
            rec = line.split()
            edge = int(rec[0])
            code = rec[1]
            temperature = float(rec[2])
            if (code == 'D'):
                dirichletModelEdges.append((edge,temperature))
            elif (code == 'C'):
                h = float(rec[3])
                convectionModelEdges.append((edge,temperature, h))

        #print (convectionModelEdges)

        line = lines.next()
        rec = line.split()
        if len(rec)>0:
            if rec[0] =='Inclusion':
                self.morphologyType='Inclusion'
                self.scaleInclusion=float(rec[1])

        self.mesh = Mesh.UnstructuredMesh()
        # generate a simple mesh here, either triangles or rectangles
        #self.xl = 0.5 # domain (0..xl)(0..yl)
        #self.yl = 0.3
        #self.nx = 10 # number of elements in x direction
        #self.ny = 10 # number of elements in y direction 
        self.dx = self.xl/self.nx;
        self.dy = self.yl/self.ny;
        self.mesh = meshgen.meshgen((0.,0.), (self.xl, self.yl), self.nx, self.ny, tria) 

#
# Model edges
#     ----------3----------
#     |                   |
#     4                   2
#     |                   | 
#     ----------1---------
#

        #dirichletModelEdges=(3,4,1)#
        self.dirichletBCs = {}# key is node number, value is prescribed temperature
        for (ide,value) in dirichletModelEdges:
            #print ("Dirichlet", ide)
            if ide == 1:
                for i in range(self.nx+1):
                    self.dirichletBCs[i*(self.ny+1)]=value
            elif ide == 2:
                for i in range(self.ny+1):
                    self.dirichletBCs[(self.ny+1)*(self.nx)+i]=value
            elif ide == 3:
                for i in range(self.nx+1):
                    self.dirichletBCs[self.ny + (self.ny+1)*(i)]=value
            elif ide == 4:
                for i in range(self.ny+1):
                    self.dirichletBCs[i]=value

        #convectionModelEdges=(2,)
        self.convectionBC = []
        for (ice, value, h) in convectionModelEdges:
            #print ("Convection", ice)
            if ice == 1:
                for i in range(self.nx):
                    if self.tria:
                        self.convectionBC.append((2*self.ny*i,0 , h, value))
                    else:
                        self.convectionBC.append((self.ny*i,0 , h, value))
            elif ice == 2:
                for i in range(self.ny):
                    if self.tria:
                        self.convectionBC.append(((self.nx-1)*2*self.ny+2*i, 1, h, value))
                    else:
                        self.convectionBC.append(((self.nx-1)*self.ny+i, 1, h, value))
            elif ice == 3:
                for i in range(self.nx):
                    if self.tria:
                        self.convectionBC.append((2*self.ny*(i+1)-1, 1, h, value))
                    else:
                        self.convectionBC.append((self.ny*(i+1)-1, 2, h, value))
            elif ice == 4:
                for i in range(self.ny):
                    if self.tria:
                        self.convectionBC.append((2*i+1, 2, h, value))
                    else:
                        self.convectionBC.append((i, 3, h, value))
        
        self.loc=np.zeros(self.mesh.getNumberOfVertices(), dtype=np.int32)
        self.neq = 0;#number of unknowns
        self.pneq = 0;#number of prescribed equations (Dirichlet b.c.)
        #print (self.mesh.getNumberOfVertices())
        for i in range(self.mesh.getNumberOfVertices()):
            #print(i)
            if i in self.dirichletBCs:
                self.pneq += 1
            else:
                self.neq += 1
        #print ("Neq", self.neq, "Pneq", self.pneq)
        #print(self.loc)
        ineq = 0 # unknowns numbering starts from 0..neq-1
        ipneq = self.neq #prescribed unknowns numbering starts neq..neq+pneq-1

        for i in range(self.mesh.getNumberOfVertices()):
            if i in self.dirichletBCs:
                self.loc[i] = ipneq
                ipneq += 1
            else:
                self.loc[i] = ineq
                ineq += 1
Exemplo n.º 5
0
    def readInput(self):

        dirichletModelEdges = []
        loadModelEdges = []
        try:
            f = open(self.workDir + os.path.sep + self.file, 'r')
            #size
            line = getline(f)
            size = line.split()
            self.xl = float(size[0])
            self.yl = float(size[1])
            #mesh
            line = getline(f)
            ne = line.split()
            self.nx = int(ne[0])
            self.ny = int(ne[1])
            #Thickness
            rec = getline(f).split()
            self.thick = float(rec[0])
            #Young's modulus and Poissons' ratio
            rec = getline(f).split()
            self.E = float(rec[0])
            self.nu = float(rec[1])
            #thermal dilation
            rec = getline(f).split()
            self.alpha = float(rec[0])

            log.info("Mechanical problem's dimensions: (%g, %g)" %
                     (self.xl, self.yl))

            for iedge in range(4):
                line = getline(f)
                rec = line.split()
                edge = int(rec[0])
                code = rec[1]
                if (code == 'D'):
                    dirichletModelEdges.append(edge)
                elif (code == 'C'):
                    loadModelEdges.append(edge)
                    self.fx[iedge] = float(rec[2])
                    self.fy[iedge] = float(rec[3])

            #print(self.fx, self.fy)
            f.close()

        except Exception as e:
            log.exception(e)
            exit(1)

        self.mesh = Mesh.UnstructuredMesh()
        # generate a simple mesh here
        #self.xl = 0.5 # domain (0..xl)(0..yl)
        #self.yl = 0.3
        #self.nx = 10 # number of elements in x direction
        #self.ny = 10 # number of elements in y direction
        self.dx = self.xl / self.nx
        self.dy = self.yl / self.ny
        self.mesh = meshgen.meshgen((0., 0.), (self.xl, self.yl), self.nx,
                                    self.ny)

        k = 1
        #
        # Model edges
        #     ----------3----------
        #     |                   |
        #     4                   2
        #     |                   |
        #     ----------1---------
        #

        #dirichletModelEdges=(3,4,1)#
        self.dirichletBCs = {
        }  # key is node number, value is prescribed temperature (zero supported only now)
        for ide in dirichletModelEdges:
            if ide == 1:
                for i in range(self.nx + 1):
                    self.dirichletBCs[i * (self.ny + 1)] = (0.0, 0.0, 0.0)
            elif ide == 2:
                for i in range(self.ny + 1):
                    self.dirichletBCs[self.nx * (self.ny + 1) + i] = (0.0, 0.0,
                                                                      0.0)
            elif ide == 3:
                for i in range(self.nx + 1):
                    self.dirichletBCs[self.ny + i * (self.ny + 1)] = (0.0, 0.0,
                                                                      0.0)
            elif ide == 4:
                for i in range(self.ny + 1):
                    self.dirichletBCs[i] = (0.0, 0.0, 0.0)

        #convectionModelEdges=(2,)
        self.loadBC = []
        for ice in loadModelEdges:
            if ice == 1:
                for i in range(self.nx):
                    self.loadBC.append(
                        (self.ny * i, 0, self.fx[ice - 1], self.fy[ice - 1]))
            elif ice == 2:
                for i in range(self.ny):
                    self.loadBC.append(((self.nx - 1) * self.ny + i, 1,
                                        self.fx[ice - 1], self.fy[ice - 1]))
            elif ice == 3:
                for i in range(self.nx):
                    self.loadBC.append((self.ny * (i + 1) - 1, 2,
                                        self.fx[ice - 1], self.fy[ice - 1]))
            elif ice == 4:
                for i in range(self.ny):
                    self.loadBC.append(
                        (i, 3, self.fx[ice - 1], self.fy[ice - 1]))

        self.loc = np.zeros((self.mesh.getNumberOfVertices(), 2),
                            dtype=np.int32)  # Du, Dv dofs per node
        for i in self.dirichletBCs:
            self.loc[i, 0] = -1
            self.loc[i, 1] = -1
        self.neq = 0
        for i in range(self.mesh.getNumberOfVertices()):
            for j in range(2):  #loop over nodal DOFs
                if (self.loc[i, j] >= 0):
                    self.loc[i, j] = self.neq
                    self.neq = self.neq + 1
Exemplo n.º 6
0
    def readInput(self, tria=False):
        self.tria = tria
        dirichletModelEdges = []
        convectionModelEdges = []
        try:
            lines = []
            for line in open(self.workDir + os.path.sep + self.file, 'r'):
                if not line.startswith('#'):
                    lines.append(line)
        except Exception as e:
            log.info('Current working directory is %s, file is %s' %
                     (self.workDir, self.file))
            log.exception(e)
            exit(1)

        line = lines.pop(0)
        size = line.split()
        self.xl = float(size[0])
        self.yl = float(size[1])
        log.info("Thermal problem's dimensions: (%g, %g)" % (self.xl, self.yl))
        line = lines.pop(0)
        ne = line.split()
        self.nx = int(ne[0])
        self.ny = int(ne[1])

        for iedge in range(4):
            line = lines.pop(0)
            #print (line)
            rec = line.split()
            edge = int(rec[0])
            code = rec[1]
            temperature = float(rec[2])
            if (code == 'D'):
                dirichletModelEdges.append((edge, temperature))
            elif (code == 'C'):
                h = float(rec[3])
                convectionModelEdges.append((edge, temperature, h))

        #print (convectionModelEdges)

        line = lines.pop(0)
        rec = line.split()
        if len(rec) > 0:
            if rec[0] == 'Inclusion':
                self.morphologyType = 'Inclusion'
                self.scaleInclusion = float(rec[1])

        self.mesh = Mesh.UnstructuredMesh()
        # generate a simple mesh here, either triangles or rectangles
        #self.xl = 0.5 # domain (0..xl)(0..yl)
        #self.yl = 0.3
        #self.nx = 10 # number of elements in x direction
        #self.ny = 10 # number of elements in y direction
        self.dx = self.xl / self.nx
        self.dy = self.yl / self.ny
        self.mesh = meshgen.meshgen((0., 0.), (self.xl, self.yl), self.nx,
                                    self.ny, tria)

        #
        # Model edges
        #     ----------3----------
        #     |                   |
        #     4                   2
        #     |                   |
        #     ----------1---------
        #

        #dirichletModelEdges=(3,4,1)#
        self.dirichletBCs = {
        }  # key is node number, value is prescribed temperature
        for (ide, value) in dirichletModelEdges:
            #print ("Dirichlet", ide)
            if ide == 1:
                for i in range(self.nx + 1):
                    self.dirichletBCs[i * (self.ny + 1)] = value
            elif ide == 2:
                for i in range(self.ny + 1):
                    self.dirichletBCs[(self.ny + 1) * (self.nx) + i] = value
            elif ide == 3:
                for i in range(self.nx + 1):
                    self.dirichletBCs[self.ny + (self.ny + 1) * (i)] = value
            elif ide == 4:
                for i in range(self.ny + 1):
                    self.dirichletBCs[i] = value

        #convectionModelEdges=(2,)
        self.convectionBC = []
        for (ice, value, h) in convectionModelEdges:
            #print ("Convection", ice)
            if ice == 1:
                for i in range(self.nx):
                    if self.tria:
                        self.convectionBC.append(
                            (2 * self.ny * i, 0, h, value))
                    else:
                        self.convectionBC.append((self.ny * i, 0, h, value))
            elif ice == 2:
                for i in range(self.ny):
                    if self.tria:
                        self.convectionBC.append(
                            ((self.nx - 1) * 2 * self.ny + 2 * i, 1, h, value))
                    else:
                        self.convectionBC.append(
                            ((self.nx - 1) * self.ny + i, 1, h, value))
            elif ice == 3:
                for i in range(self.nx):
                    if self.tria:
                        self.convectionBC.append(
                            (2 * self.ny * (i + 1) - 1, 1, h, value))
                    else:
                        self.convectionBC.append(
                            (self.ny * (i + 1) - 1, 2, h, value))
            elif ice == 4:
                for i in range(self.ny):
                    if self.tria:
                        self.convectionBC.append((2 * i + 1, 2, h, value))
                    else:
                        self.convectionBC.append((i, 3, h, value))

        self.loc = np.zeros(self.mesh.getNumberOfVertices(), dtype=np.int32)
        self.neq = 0
        #number of unknowns
        self.pneq = 0
        #number of prescribed equations (Dirichlet b.c.)
        #print (self.mesh.getNumberOfVertices())
        for i in range(self.mesh.getNumberOfVertices()):
            #print(i)
            if i in self.dirichletBCs:
                self.pneq += 1
            else:
                self.neq += 1
        #print ("Neq", self.neq, "Pneq", self.pneq)
        #print(self.loc)
        ineq = 0  # unknowns numbering starts from 0..neq-1
        ipneq = self.neq  #prescribed unknowns numbering starts neq..neq+pneq-1

        for i in range(self.mesh.getNumberOfVertices()):
            if i in self.dirichletBCs:
                self.loc[i] = ipneq
                ipneq += 1
            else:
                self.loc[i] = ineq
                ineq += 1
Exemplo n.º 7
0
    def readInput(self):

        dirichletModelEdges=[]
        conventionModelEdges=[]
        try:
            f = open(self.workDir+os.path.sep+self.file, 'r')
            line = getline(f)
            size = line.split()
            self.xl=float(size[0])
            self.yl=float(size[1])

            line = getline(f)
            ne = line.split()
            self.nx=int(ne[0])
            self.ny=int(ne[1])

            for iedge in range(4):
                line = getline(f)
                rec = line.split()
                edge = int(rec[0])
                code = rec[1]
                if (code == 'D'):
                    dirichletModelEdges.append(edge)
                elif (code == 'C'):
                    conventionModelEdges.append(edge)

            f.close()

        except  Exception as e:
            logger.exception(e)
            exit(1)


        self.mesh = Mesh.UnstructuredMesh()
        # generate a simple mesh here
        #self.xl = 0.5 # domain (0..xl)(0..yl)
        #self.yl = 0.3
        #self.nx = 10 # number of elements in x direction
        #self.ny = 10 # number of elements in y direction 
        self.dx = self.xl/self.nx;
        self.dy = self.yl/self.ny;
        self.mesh = meshgen.meshgen((0.,0.), (self.xl, self.yl), self.nx, self.ny) 

        k = 1
        Te=10;

#
# Model edges
#     ----------3----------
#     |                   |
#     4                   2
#     |                   | 
#     ----------1---------
#

        #dirichletModelEdges=(3,4,1)#
        self.dirichletBCs = {}# key is node number, value is prescribed temperature (zero supported only now)
        for ide in dirichletModelEdges:
            #print ide
            if ide == 1:
                for i in range(self.nx+1):
                    self.dirichletBCs[i*(self.ny+1)]=0.0
            elif ide ==2:
                for i in range(self.ny+1):
                    self.dirichletBCs[(self.ny+1)*(self.nx)+i]=0.0
            elif ide ==3:
                for i in range(self.nx+1):
                    self.dirichletBCs[self.ny + (self.ny+1)*(i)]=0.0
            elif ide ==4:
                for i in range(self.ny+1):
                    self.dirichletBCs[i]=0.0

        #conventionModelEdges=(2,)
        self.convectionBC = []
        for ice in conventionModelEdges:
            if ice ==1:
                for i in range(self.nx):
                    self.convectionBC.append((self.ny*i,0,k,Te))
            elif ice ==2:
                for i in range(self.ny):
                    self.convectionBC.append(((self.nx-1)*self.ny+i, 1, k, Te))
            elif ice ==3:
                for i in range(self.nx):
                    self.convectionBC.append((self.ny*(i+1)-1, 2, k, Te))
            elif ice ==4:
                for i in range(self.ny):
                    self.convectionBC.append((i, 3, k, Te))
                

        self.loc=np.zeros(self.mesh.getNumberOfVertices())
        for i in self.dirichletBCs.keys():
            self.loc[i]=-1;
        self.neq = 0;
        for i in range(self.mesh.getNumberOfVertices()):
            if (self.loc[i] >= 0):
                self.loc[i]=self.neq;
                self.neq=self.neq+1
Exemplo n.º 8
0
import sys, time
sys.path.append('../../..')
import meshgen
from mupif import *
import time
import logging
log = logging.getLogger()

mesh = Mesh.UnstructuredMesh()
mesh = meshgen.meshgen((0., 0.), (3.2, 2.1), 5, 6, tria=False)
vert = mesh.getNumberOfVertices()
values = []
for i in range(vert):
    values.append((i * 0.5, i * 1.5, i * 2.5, i * 0.5, 0, i * 0.5, -i * 0.5,
                   -i * 1.5, -i * 3.5))

#Several units are predefined in PhysicalQuantities, such as Pa and all prefixes
g = Field.Field(mesh, FieldID.FID_Stress, ValueType.Tensor, 'MPa', 0.0, values)

print(g.evaluate((0.8, 2.0, 0)))
log.debug(g.evaluate((0.8, 2.0, 0)))

g.field2VTKData().tofile('Tensors')
g.field2Image2D(title='Tensors', fileName='Tensors.png', fieldComponent=8)
time.sleep(5)