def on_create_Ke(self, elx, ely, element_type): Ke = None if self.mesh.shape.element_type == 2: Ke = cfc.flw2te(elx, ely, self.mesh.shape.ep, self.mesh.shape.D) else: Ke = cfc.flw2i4e(elx, ely, self.mesh.shape.ep, self.mesh.shape.D) return Ke
def executeFem(self): q = self.inputData.q B = self.inputData.B b = self.inputData.b hvec = self.inputData.hvec Mvec = self.inputData.Mvec kmat = self.inputData.kmat rhow = self.inputData.rhow hn = self.inputData.hn coords = self.outputData.coords edof = self.outputData.edof bdofs = self.outputData.bdofs elementmarkers = self.outputData.elementmarkers ex = self.outputData.ex ey = self.outputData.ey ndof=edof.max() # --- Definera randvillkor bc = np.array([],int) bcVal = np.array([],int) bc,bcVal = cfu.applybc(bdofs, bc, bcVal, 3, 0) bc,bcVal = cfu.applybc(bdofs, bc, bcVal, 2, 0) if self.inputData.perm == True: bc,bcVal = cfu.applybc(bdofs, bc, bcVal, (599+hn), 0) # --- Definiera materialmatris ep=[(1)] D=np.zeros([2,2]) # --- Skapa tom K-matris och f-vektor K = np.zeros([ndof,ndof]) C = np.zeros([ndof,ndof]) for eltopo, elx, ely, elMarker in zip(edof, ex, ey, elementmarkers): Dn = elMarker - 100 D[0,0] = kmat[Dn,0]*60*60*24*365.25 D[1,1] = kmat[Dn,1]*60*60*24*365.25 M = Mvec[Dn] Ke = cfc.flw2te(elx, ely, ep, D) Ce = tg.flwtec(elx,ely,rhow,M) cfc.assem(eltopo, K, Ke) cfc.assem(eltopo,C,Ce) a0 = tg.strdist(coords, ndof, q, B, b, hvec) a0 = np.asmatrix(a0) self.outputData.K = K self.outputData.C = C self.outputData.a0 = a0 self.outputData.bc = bc self.outputData.bcVal = bcVal
maxArea=20.0, dofsPerNode=1) print(coords[0:8, :]) # ---- Assemble system matrix print("Assemblig system matrix...") nDofs = np.size(dofs) ex, ey = cfc.coordxtr(edof, coords, dofs) K = np.zeros([nDofs, nDofs]) for eltopo, elx, ely in zip(edof, ex, ey): Ke = cfc.flw2te(elx, ely, ep, D) cfc.assem(eltopo, K, Ke) # ---- Solving equation system print("Solving equation system...") f = np.zeros([nDofs, 1]) bc = np.array([], 'i') bcVal = np.array([], 'i') bc, bcVal = cfu.applybc(bdofs, bc, bcVal, 2, 30.0) bc, bcVal = cfu.applybc(bdofs, bc, bcVal, 3, 0.0) a, r = cfc.solveq(K, f, bc, bcVal)