FiPy Правильная установка условия оттока

Мне нужна помощь с тихой простой проблемой в FiPy. Моя цель - смоделировать протекание жидкости через бетонный блок при изменении фазы. Но прежде всего я попытался провести простое одномерное моделирование, предполагающее массовый расход жидкости и постоянную температуру стенки без каких-либо фазовых переходов.

from fipy import *
from fipy.meshes import CylindricalGrid2D, Grid1D
import matplotlib.pyplot as plt
import numpy as np

#%%


L = 1.5 #length transfer surface
bS = 0.75 #wide
AV = L * bS #transfer surface

tS0 = 350. #tWall

rhoWF = 880. #density fluid
mWF = 0.036 #mass flow
u = 5e-4 #Fluid speed
hWF = mWF / AV / rhoWF / u #height "fluid block"
nx = 50
VWF = hWF * L * bS/nx #fluid volumen
lambdaWF = 0.6 # thermal conductivity
alpha = 500. #heat transfer coefficient 
tWF0 = 371.



mesh = Grid1D(dx=L/nx, nx=nx)


tWF = CellVariable(name="Fluid", 
                   mesh=mesh, 
                   value= tWF0,
                   hasOld=True)

tS = CellVariable(name="storage", 
                  mesh=mesh, 
                  value=tS0, 
                  hasOld=True)


sourceWF=CellVariable(name="source Fluid",  #Variable der Konvektion
                       mesh=mesh,
                       value=0.)

cvrho = CellVariable(name = 'cprho',#Fluid
                     mesh = mesh,
                     value = rhoWF *  4215.2,
                     hasOld = True) 

tWF.constrain(tWF0, mesh.facesLeft()) #constant inlet temperature

t = 6*3600. #time
timeStepDuration = 1e2

#outflow boundary condition
outlet = mesh.facesRight
ConvCoeff = FaceVariable(mesh,value=u,rank=1)
exteriorCoeff = FaceVariable(mesh,value=0.,rank=1)
exteriorCoeff.setValue(value=ConvCoeff, where=outlet)
ConvCoeff.setValue(0., where=outlet)

residual1 = 1.
elapsedTime = 0.

tWFall = np.zeros(nx)[None,:]

while elapsedTime < t:
    tWF.updateOld()   
    it = 0 #iterations
    while residual1> 1e-2:      

        sourceWF.value = - AV / nx * alpha*(tWF - tS)/ cvrho / VWF #this will be a variable convection source

        eq1 = HybridConvectionTerm(coeff=ConvCoeff) +  TransientTerm(coeff=1.) == \
        + sourceWF\
        - ImplicitSourceTerm(exteriorCoeff.divergence) \
        #+ DiffusionTerm(coeff= lambdaWF / cvrho) #not necessary(?)

        residual1 = eq1.sweep(dt = timeStepDuration, var = tWF)
        print('res1: ' + str(residual1) )
        it += 1
        if it > 10:
            raise ValueError (r'MaxIter reached')  
    elapsedTime += timeStepDuration ; print('t= ' + str(round(elapsedTime,2)))
    residual1 = 1.
    tWFall = np.r_[tWFall, tWF.value[None,:]] #value collection

#%% outlet fluid temperature and storage temperature

plt.plot(np.linspace(0,t/3600.,int(t/timeStepDuration)), tWFall[1:,-1], label=r'$\vartheta_{WF}$')

plt.legend()

Я ожидал бы постоянной температуры жидкости на выходе из-за постоянной температуры стенки и постоянной температуры жидкости на входе. Я не определял температуру стенки как граничное условие, потому что когда-нибудь я хотел бы также проанализировать теплопроводность и переменные градиенты температуры. Запустив мой мвэ, можно увидеть, что температура жидкости на выходе снижается. Может ли кто-нибудь помочь в этом случае? Заранее спасибо!


person TThe    schedule 15.06.2018    source источник
comment
Написанный сценарий не работает. Это дает NameError: name 'nx' is not defined.   -  person wd15    schedule 19.06.2018
comment
Да, вы правы, я поменял две строчки для ясности, как мне казалось. Теперь должно работать. Простите за это.   -  person TThe    schedule 21.06.2018


Ответы (1)


Я изменил сценарий, и кажется, что он дает постоянную температуру 371,0. См. эту ссылку.

  • Термин sourceWF был удален. Я не был уверен, для чего это было, но думаю, что потребуется время, чтобы температура стены приспособилась к этому.

  • Объявление уравнения вынесено за пределы цикла. Это правильный способ использования FiPy, но в этом случае он не должен влиять на результаты.

person wd15    schedule 22.06.2018
comment
Спасибо за помощь! Моя проблема в том, что мне нужен исходный термин. Однажды это должно быть моделирование трубы с конвекцией по трубе по всей длине. Кроме того, термин будет меняться на каждом временном шаге, так что объявление должно находиться внутри цикла. Есть ли у вас другие предложения? - person TThe; 25.06.2018
comment
Можете ли вы пояснить, что вы ожидаете увидеть при наличии исходного термина? Ожидаете ли вы, что значение стены tWF будет 371 и не упадет до ~ 350? Что вы ожидаете от сюжета? - person wd15; 25.06.2018