Я знаю, что мы можем установить параметр underRelaxation, если мы используем «sweep» для решения уравнения. например:
xVelocity_eq.sweep(dt=dt, underRelaxation = 0.5)
Но как установить этот параметр для связанного уравнения. например:
coupled_eq = xVelocity_eq & yVelocity_eq & zVelocity
coupled_eq.sweep(dt=dt,underRelaxation = ?)
Я пробовал установить underRelaxtion = 0.5 и установить underRelaxation как массив, как в следующем коде:
relaxation = np.zeros(len(self.yVelocity) + len(self.zVelocity) + len(self.xVelocity))
relaxation[:] = velocityRelaxation
coupled_eq.sweep(dt=dt,underRelaxation = relaxation)
Однако он не работает правильно с IndexError (индексы вне допустимого диапазона) .Если я не установил значение underRelaxation, ошибка не появится и коды могут работать.
File "C:\Program Files\Itasca\PFC500\exe64\python27\lib\site-packages\fipy\terms\term.py", line 237, in sweep
solver._applyUnderRelaxation(underRelaxation=underRelaxation)
File "C:\Program Files\Itasca\PFC500\exe64\python27\lib\site-packages\fipy\solvers\solver.py", line 133, in _applyUnderRelaxation
self.matrix.putDiagonal(self.matrix.takeDiagonal() / underRelaxation)
File "C:\Program Files\Itasca\PFC500\exe64\python27\lib\site-packages\fipy\matrices\pysparseMatrix.py", line 223, in putDiagonal
self.put(vector, ids, ids)
File "C:\Program Files\Itasca\PFC500\exe64\python27\lib\site-packages\fipy\matrices\offsetSparseMatrix.py", line 55, in put SparseMatrix.put(self, vector, id1 + self.mesh.numberOfCells * self.equationIndex, id2 + self.mesh.numberOfCells * self.varIndex)
File "C:\Program Files\Itasca\PFC500\exe64\python27\lib\site-packages\fipy\matrices\pysparseMatrix.py", line 198, in put self.matrix.put(vector, id1, id2)
IndexError: indices out of range