SciML / MethodOfLines.jl

Automatic Finite Difference PDE solving with Julia SciML

Home Page:https://docs.sciml.ai/MethodOfLines/stable/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MoL : AssertionError: Boundary condition is not on a boundary of the domain, or is not a valid boundary condition

ruidanielgm opened this issue · comments

I'm trying to use Method of Lines to simulate gas-phase fixed bed experiments. This involves solving PDE's+DAE's+NLAE for the mass, energy and momentum balances in space and time. I started just with the mass balance (P, u0 and T constant in space and time) and I think it was working fine. However, now I have the momentum balance, and a problem is appearing. The mass balance consists of an algebraic equation and a dif. equation in space. The problem is on the BC for the momentum balance. When I discretize, I get this: AssertionError: Boundary condition u0(0, t) ~ 0.011033525276772852 is not on a boundary of the domain, or is not a valid boundary condition or AssertionError: Boundary condition P(0.236, t) ~ 100000.0 is not on a boundary of the domain, or is not a valid boundary condition. I've seen this issue on other people, but no one seemed to have solved it.

eq =[
#Mass balance
    #Equation 1 
    Dt(Cg1(z,t)) ~ (ebed*Dax*(Dzz(Cg1(z,t))) 
        - (Dz(u0(z,t))*Cg1(z,t) + (u0(z,t)*Dz(Cg1(z,t)))) 
        - (1-ebed)*apM*kf*(Cg1(z,t)-Cs1(z,t)) ) / ebed, 
    Dt(Cg2(z,t)) ~ (ebed*Dax*(Dzz(Cg2(z,t))) 
        - (Dz(u0(z,t))*Cg2(z,t) + (u0(z,t)*Dz(Cg2(z,t)))) 
        - (1-ebed)*apM*kf*(Cg2(z,t)-Cs2(z,t)) ) / ebed,   
    #Equation 2 
    Cg1(z,t) ~ y1(z, t) * Cgt(z,t),
    Cg2(z,t) ~ y2(z, t) * Cgt(z,t),
    #Equation 3 
    #Cgt(z,t) ~ Cg1(z,t) + Cg2(z,t),
    y1(z,t) ~ 1 - y2(z,t),
    #Equation 4 
    Dt(q1(z,t)) ~ (apM*kf*(Cg1(z,t)-Cs1(z,t))) / rop, 
    Dt(q2(z,t)) ~ (apM*kf*(Cg2(z,t)-Cs2(z,t))) / rop,
    #Equation 5 
    Dt(q1(z,t)) ~ kldf[1] * (q1star(z,t) - q1(z,t)),
    Dt(q2(z,t)) ~ kldf[2] * (q2star(z,t) - q2(z,t)),
    #Equation 6 
    Pmp1(z,t) ~ Cs1(z,t) * (R*T), #later, T will be T(z,t)
    Pmp2(z,t) ~ Cs2(z,t) * (R*T), #later, T will be T(z,t)
    #Equation 7 
    S1(z,t) ~ S0[1] * exp(DH[1]/(R*T)), #later, T will be T(z,t)  
    S2(z,t) ~ S0[2] * exp(DH[2]/(R*T)), #later, T will be T(z,t)
    #Equation 8 - Isotherm
    q1star(z,t) ~ w[1] * qsat[1] * S1(z,t) * Pmp1(z,t) / (1 + S1(z,t)*Pmp1(z,t) + S2(z,t)*Pmp2(z,t)),
    q2star(z,t) ~ w[2] * qsat[2] * S2(z,t) * Pmp2(z,t) / (1 + S1(z,t)*Pmp1(z,t) + S2(z,t)*Pmp2(z,t)), 

#Momentum Balance
    Mw(z,t) ~ Mwi[1] * y1(z,t) + Mwi[2] * y2(z,t),
    Dz(P(z,t)) ~ (150*visc*(1-ebed)^2/(ebed^3*dp^2)*u0(z,t) + 1.75*(1-ebed)/(ebed^3*dp)*Cgt(z,t)*Mw(z,t)*u0(z,t)*abs(u0(z,t)))   /(-1),
    Cgt(z,t) ~ P(z,t) / (R * T)
]
#BCs
#initial values
P_start = Phigh;
T_start =  40+273.15;

Cg1_start = y_start[1]*P_start/(R*T_start);
Cg2_start = y_start[2]*P_start/(R*T_start);

Cs1_start = Cg1_start;
Cs2_start = Cg2_start;

S1_start = S0[1] * exp(DH[1]/(R*T_start));
S2_start = S0[2] * exp(DH[2]/(R*T_start));


Pmp1_start = Cs1_start * (R*T_start);
Pmp2_start = Cs2_start * (R*T_start);

q1_start = w[1] * qsat[1] * S1_start * Pmp1_start / (1 + S1_start*Pmp1_start + S2_0*Pmp2_start);
q2_start = w[2] * qsat[2] * S2_start * Pmp2_start / (1 + S1_start*Pmp1_start + S2_0*Pmp2_start);

Cgt_start =  P_start / (R*T_start);

u0inlet=(q_feed/bed_area)*(Tinlet/273.15) * (1/60) * (1e5/Phigh); 
Cinlet = P_start/(R*Tinlet); 

u0_start = u0inlet * Cinlet / Cgt_start


bcs = [
    Dz(Cg1(0,t)) ~ (yinfeed[1]*u0inlet*Cinlet - Cg1(0,t)*u0(0,t)) / (-ebed*Dax), 
    Dz(Cg2(0,t)) ~ (yinfeed[2]*u0inlet*Cinlet - Cg1(0,t)*u0(0,t)) / (-ebed*Dax), 
    Dz(Cg1(z_max,t)) ~ 0, 
    Dz(Cg2(z_max,t)) ~ 0,     

    y1(z,0) ~ y_start[1], 
    y2(z,0) ~ y_start[2], 
    Pmp1(z,0) ~ Pmp1_start, #later, T will be T(z,0)
    Pmp2(z,0) ~ Pmp2_start, #later, T will be T(z,0)
    
    Cg1(z,0) ~ Cg1_start, 
    Cg2(z,0) ~ Cg2_start, 
    S1(z,0) ~ S1_start,
    S2(z,0) ~ S2_start,
    q1(z,0) ~ q1_start,
    q2(z,0) ~ q2_start,
    Cgt(z,0) ~  Cgt_start,

    u0(0,t) ~ u0_start, 
    P(z_max,t) ~ Phigh
] 

let me know if you need more information