Выражение для PDE, связанное с M1, дается как система PDE. < /P>
Сопутствующие граничные условия для этой системы не имеют типа Robin, а выражение здесь - это то, что я вышеупомянулся, и в этом типе. решить для M2 в этой единственной системе (которая выполняется на следующем шаге). Это означает, что я использую некоторые предварительно вычисленные значения для M2 при решении этой конкретной системы.
Код: Выделить всё
n_mesh = self.local_mesh.faceNormals
betta = (1 - self.alpha) / (self.alpha)
alpha_f = FaceVariable(name="alpha_f", mesh=self.local_mesh, rank=1)
alpha_f.setValue(betta * n_mesh, where=self.bf_mask == True)
c11 = CellVariable(name="c11",mesh=self.local_mesh)
c11_f = FaceVariable(name="c11_f",mesh=self.local_mesh)
c1_d_c2 = CellVariable(name="c1_d_c2",mesh=self.local_mesh)
c1_d_c2_f = FaceVariable(name="c1_d_c2_f",mesh=self.local_mesh)
m2_previous = CellVariable(name="m2_previous",mesh=self.local_mesh)
m1 = CellVariable(name="m1",mesh=self.local_mesh)
C_T_P_1 = CellVariable(name="c_t_p_1",mesh=self.local_mesh,rank=1)
C_T_P_1_f = FaceVariable(name="c_t_p_1",mesh=self.local_mesh,rank=1)
m_1_b = ImplicitSourceTerm(coeff=alpha_f.divergence)
b1_f = FaceVariable(name="b1_f", mesh=self.local_mesh, rank=1)
c11.setValue(c11_val[0:self.N_cells])
c11_f.setValue(c11.arithmeticFaceValue)
c11_f.setValue(0.0,where=self.bf_mask)
c1_d_c2.setValue(c1_d_c2_val[0:self.N_cells])
c1_d_c2_f.setValue(c1_d_c2.arithmeticFaceValue)
c1_d_c2_f.setValue(0.0,where=self.bf_mask)
m2_previous.setValue(self.m2_iter[0:self.N_cells])
C_T_P_1.setValue(np.stack((r11[0:self.N_cells],r12[0:self.N_cells]),axis=0))
C_T_P_1_f.setValue(C_T_P_1.arithmeticFaceValue)
C_T_P_1_f.setValue(0.0,where=self.bf_mask)
b1_f_np = np.zeros(self.bf_mask.shape)
b1_f_np[self.bf_mask == True] = b_array[self.N_cells:, 0, 0]
r1_vec = np.zeros((2,self.bf_mask.shape[0]))
r1_vec[0,self.bf_mask==True] = r11[self.N_cells:]
r1_vec[1,self.bf_mask==True] = r12[self.N_cells:]
b1_f.setValue(betta * b1_f_np * n_mesh , where=self.bf_mask)
##We set the equations -m1
m1_eq = -DiffusionTerm(coeff=c11_f) == -(c1_d_c2_f * m2_previous.faceGrad).divergence + (C_T_P_1_f).divergence - b1_f.divergence + m_1_b
Наконец, b1_f.divergence и m_1_b соответствует исправлениям, которые я добавляю к граничным лицам, но и тем же учету для условий границы Robin. Конечно, изменяя роль между M1 и M2. < /p>
Теперь дело в том, что в принципе я могу решить систему через
Код: Выделить всё
m1_eq.solve(var=m1)Это причина, по которой я присваиваю значения. Стандартное выражение устанавливается на 0 для граничных грани и всех терминов, связанных с граничными условиями, соответственно (в данном случае, только B1_F и M_1_B имеют ненулевые записи, соответствующие граничным лицам. Кроме того, выражение, которое я использую для потока на границах из границ. Термин всегда дается на RHS, однако в моем случае у меня нет другого невысокого термина. (Я заметил, что если я не включаю знак минус перед дифузионным , то решение, которое я получу, переворачивается вдоль x и y по отношению к тому, что я ожидаю)
Может быть, у кого -то есть какое -то представление о том, что могло бы происходить или что я мог бы проверить?>
Подробнее здесь: https://stackoverflow.com/questions/795 ... r-pde-fipy
Мобильная версия