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)
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')
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
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
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
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
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
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)