/
femgrid.py
86 lines (65 loc) · 2.32 KB
/
femgrid.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
from result import Result
class FemGrid(object):
def __init__(self, elements, nodes):
self.__elements=elements
self.__nodes=nodes
self.__kg=[[]]
self.__fg=[]
self.__result=Result()
self.__dTau=0
self.__tauArray=[]
def getElement(self, i):
return self.__elements[i]
def getNode(self, i):
return self.__nodes[i]
def getKg(self):
return self.__kg
def getFg(self):
return self.__fg
def getNodesR(self):
r=[]
for node in self.__nodes:
r.append(node.getR())
return r
def setTemperatures(self, temperatures):
for n in self.__nodes:
n.setTemp(temperatures.pop(0))
def getTauArray(self):
return self.__tauArray
def setLocalMatrixAndVectors(self, globalData):
for element in self.__elements:
element.setLocalMatrixAndVector(globalData, self.__dTau)
element.printLocalMatrixAndVector()
def setGlobalMatrixAndVector(self, nh):
self.__kg=[[0]* nh for i in range(0,nh)]
self.__fg=[0 for i in range(0,nh)]
for i in range(0, nh-1):
ke=self.__elements[i].getKe()
self.__kg[i][i] += ke[0][0]
self.__kg[i][i+1] += ke[0][1]
self.__kg[i+1][i] += ke[1][0]
self.__kg[i+1][i+1] += ke[1][1]
fe=self.__elements[i].getFe()
self.__fg[i] += fe[0]
self.__fg[i+1] += fe[1]
def solveSystemOfEquatios(self):
temperatures = self.__result.solveSystemOfEquation(self.__kg, self.__fg)
return temperatures
def simulateProcess(self, globalData):
self.__dTau = globalData.getTauMax() / globalData.getNTime()
tau = self.__dTau;
while tau <= globalData.getTauMax():
self.setLocalMatrixAndVectors(globalData)
self.setGlobalMatrixAndVector(globalData.getNh())
temperatures = self.solveSystemOfEquatios()
self.setTemperatures(temperatures)
self.__tauArray.append(tau)
tau += self.__dTau
return self.__result
def printGlobalMatrixAndVector(self):
print("Macierz globalna [K]: \n")
for x in self.__kg:
print(x)
print("wektor globalny [F]: \n")
for x in self.__fg:
print(x)