Как оценить значение на указанной границе, а затем назначить новое значение для указанной границы? - PullRequest
0 голосов
/ 22 октября 2019

Я новичок в Фипи. Мне не терпится узнать, как судить о значении на указанной границе, а затем назначать новое значение указанным граничным условиям? "

Я создал 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 ''"

...