Я новичок в Фипи. Мне не терпится узнать, как судить о значении на указанной границе, а затем назначать новое значение указанным граничным условиям? "
Я создал CellVariable" psi "и указанную границу" BSCfaces ". Я хотел бы применить новое значение к "BSCfaces" в соответствии с "psi" faceValue. Теперь я использовал код frist, но означает (B1) временное решение. Поэтому я тестирую второй код, но это не работаетхорошо, особенно когда сетка немного большая (т.е. 10 * 10 не работает).
# First code I used now
from fipy import CellVariable, Grid2D, Viewer, TransientTerm, DiffusionTerm
nx = 100
ny = 100
Lx=0.20
Ly=0.15
dx = Lx/nx
dy = Ly/ny
mesh = Grid2D(dx=dx, dy=dy, nx=nx, ny=ny)
# create a CellVariable and initialize it
psi = CellVariable(name="pressure head (m)",
mesh=mesh,
value=-0.513949,
hasOld=1)
BSC=[Lx / 4,3*Lx / 4]
BSCfaces= (mesh.facesTop & (X >= BSC[0]) & (X <= BSC[1]))
B1=psi.faceValue[BSCfaces.value].value
psi_min=-1000
import numpy as np
if (np.mean(B1)<psi_min):
psi.constrain(psi_min,BSCfaces)
# Second code I want to modify.
from fipy import CellVariable, Grid2D, Viewer, TransientTerm, DiffusionTerm
nx = 100
ny = 100
Lx=0.20
Ly=0.15
dx = Lx/nx
dy = Ly/ny
mesh = Grid2D(dx=dx, dy=dy, nx=nx, ny=ny)
# create a CellVariable and initialize it
psi = CellVariable(name="pressure head (m)",
mesh=mesh,
value=-0.513949,
hasOld=1)
BSC=[Lx / 4,3*Lx / 4]
BSCfaces= (mesh.facesTop & (X >= BSC[0]) & (X <= BSC[1]))
B=psi.faceValue.value
psi_min=-1000
import numpy as np
x1=mesh.faceCenters.value[0][np.where(B>psi_min)]
y1=mesh.faceCenters.value[1][np.where(B>psi_min)]
if (x1.size!=0):
BSC1=BSCfaces & (x1,y1) #I think probably here is the problem!!!!
psi.constrain(psi_min,BSC1)
Первый код работает, но это временное решение. Второй код работает не очень хорошо, и показалчто "TypeError: ufunc 'bitwise_and' не поддерживается для типов ввода, и входные данные нельзя безопасно принудительно привести к каким-либо поддерживаемым типам в соответствии с правилом приведения типов '' safe ''"