@@ -1682,6 +1682,8 @@ export calcthermo
1682
1682
cond = kLAs.* inter. molefractions* inter. P/ R/ inter. T./ kHs* V
1683
1683
1684
1684
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = (evap .- cond)
1685
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1686
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1685
1687
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1686
1688
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1687
1689
end
@@ -1707,6 +1709,9 @@ end
1707
1709
cond = kLAs.* ns./ kHs
1708
1710
1709
1711
dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = (evap .- cond)
1712
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1713
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1714
+ dydt[d. indexes[3 ]] += inter. Vin (t)
1710
1715
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1711
1716
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1712
1717
dydt[d. indexes[3 ]] -= inter. Vout (t)
@@ -1757,6 +1762,11 @@ end
1757
1762
dTdt = (P* V/ N* flow)/ (N* Cvave)
1758
1763
dydt[d. indexes[3 ]] -= dTdt
1759
1764
dydt[d. indexes[4 ]] -= flow* R* T/ V + P/ T* dTdt
1765
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1766
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1767
+ dTdt = inter. Vin (t)* (inter. Hpervolume - dot (Us,ns)/ V)/ (N* Cvave)
1768
+ dydt[d. indexes[3 ]] += dTdt
1769
+ dydt[d. indexes[4 ]] += inter. Vin (t)* P/ V + P/ T* dTdt
1760
1770
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1761
1771
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1762
1772
dTdt = (P* inter. Vout (t))/ (N* Cvave)
@@ -1798,6 +1808,11 @@ end
1798
1808
1799
1809
flow = sum (cond)
1800
1810
dydt[d. indexes[4 ]] -= flow* R* T/ P
1811
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1812
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1813
+ dTdt = inter. Vin (t)* (inter. Hpervolume - dot (Hs,ns)/ V)/ (N* Cpave)
1814
+ dydt[d. indexes[3 ]] += dTdt
1815
+ dydt[d. indexes[4 ]] += inter. Vin (t)
1801
1816
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1802
1817
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1803
1818
dydt[d. indexes[4 ]] -= inter. Vout (t)
@@ -1839,6 +1854,9 @@ end
1839
1854
1840
1855
flow = sum (cond)
1841
1856
dydt[d. indexes[3 ]] -= flow* R* T/ P
1857
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1858
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1859
+ dydt[d. indexes[3 ]] += inter. Vin (t)
1842
1860
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1843
1861
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1844
1862
dydt[d. indexes[3 ]] -= inter. Vout (t)
@@ -1890,6 +1908,11 @@ end
1890
1908
dTdt = (P* V/ N* flow)/ (N* Cvave)
1891
1909
dydt[d. indexes[3 ]] -= dTdt
1892
1910
dydt[d. indexes[4 ]] -= flow* R* T/ V + dTdt* P/ T
1911
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1912
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1913
+ dTdt = inter. Vin (t)* (inter. Hpervolume - dot (Us,ns)/ V)/ (N* Cvave)
1914
+ dydt[d. indexes[3 ]] += dTdt
1915
+ dydt[d. indexes[4 ]] += inter. Vin (t)* P/ V + dTdt* P/ T
1893
1916
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1894
1917
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1895
1918
dTdt = (P* inter. Vout (t))/ (N* Cvave)
@@ -1933,6 +1956,11 @@ end
1933
1956
flow = sum (cond)
1934
1957
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = flow.* ns./ N
1935
1958
dydt[d. indexes[4 ]] -= flow* R* T/ P
1959
+ elseif isa (inter,VolumetricFlowRateInlet) && d == inter. domain
1960
+ dydt[d. indexes[1 ]: d. indexes[2 ]] .+ = inter. Vin (t)* inter. cs
1961
+ dTdt = inter. Vin (t)* (inter. Hpervolume - dot (Hs,ns)/ V)/ (N* Cpave)
1962
+ dydt[d. indexes[3 ]] += dTdt
1963
+ dydt[d. indexes[4 ]] += inter. Vin (t)
1936
1964
elseif isa (inter,VolumetricFlowRateOutlet) && d == inter. domain
1937
1965
dydt[d. indexes[1 ]: d. indexes[2 ]] .- = inter. Vout (t)* ns/ V
1938
1966
dydt[d. indexes[4 ]] -= inter. Vout (t)
@@ -2092,6 +2120,15 @@ end
2092
2120
@inbounds @fastmath jac[i,i] -= kLAs[i]/ kHs[i]
2093
2121
end
2094
2122
@views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[3 ]] .- = kLAs./ kHs* R* T/ P
2123
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2124
+ # dn/dt += inter.Vin(t)*inter.cs
2125
+ # dV/dt += inter.Vin(t)
2126
+ # d/dn(dn/dt) += 0
2127
+ # d/dV(dn/dt) += 0
2128
+ # d/dn(dV/dt) += 0
2129
+ # d/dV(dV/dt) += 0
2130
+ nothing
2131
+
2095
2132
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2096
2133
# outlet
2097
2134
# d/dni(dV/dt) = dflow/dni*R*T/P = inter.Vout(t)/V*R*T/P = inter.Vout(t)/N
@@ -2274,6 +2311,24 @@ end
2274
2311
@inbounds jac[domain. indexes[3 ],i] -= ddnidTdt
2275
2312
@inbounds @fastmath jac[domain. indexes[4 ],i] -= kLAs[i]/ kHs[i]* R* T/ V + P/ T* ddnidTdt
2276
2313
end
2314
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2315
+ # dn/dt += inter.Vin(t)*inter.cs
2316
+ # dT/dt += inter.Vin(t)*(inter.Hpervolume - dot(Us,ns)/V)/(N*Cvave)
2317
+ # dP/dt += inter.Vin(t)*P/V + P/T*dTdt
2318
+ # d/dni(dT/dt) += inter.Vin(t)*(-Us[i]/N)/(N*Cvave) - inter.Vin(t)*(inter.Hpervolume - dot(Us,ns)/V)/(N*Cvave)^2 * d/dni(N*Cvave)
2319
+ # += inter.Vin(t)*(-Us[i]/N)/(N*Cvave) - dTdt * d/dni(N*Cvave)/(N*Cvave)
2320
+ # += inter.Vin(t)*(-Us[i]/N)/(N*Cvave) - dTdt * d/dni(Cvave)/Cvave
2321
+ # Note: Cvave = sum(ns.*cpdivR)*R/N - R
2322
+ # Note: d/dni(Cvave) = cpdivR[i]*R/N
2323
+ # d/dni(dP/dt) += P/T * d/dni(dT/dt)
2324
+ @fastmath dTdt = (inter. Vin (t)* (inter. Hpervolume - dot (Us,ns)/ V))/ (N* Cvave)
2325
+ @simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2326
+ @inbounds @fastmath dCvavedni = cpdivR[i]* R/ N
2327
+ @inbounds @fastmath ddnidTdt = inter. Vin (t)* (- Us[i]/ N)/ (N* Cvave)- dTdt* (dCvavedni/ Cvave)
2328
+ @inbounds jac[domain. indexes[3 ],i] += ddnidTdt
2329
+ @inbounds @fastmath jac[domain. indexes[4 ],i] += P/ T* ddnidTdt
2330
+ end
2331
+
2277
2332
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2278
2333
# outlet
2279
2334
# flow = inter.Vout(t)*sum(ns)/V
@@ -2503,6 +2558,22 @@ end
2503
2558
@inbounds @fastmath jac[i,i] -= kLAs[i]/ kHs[i]
2504
2559
end
2505
2560
@views @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = kLAs./ kHs* R* T/ P
2561
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2562
+ # dn/dt .+= inter.Vin(t)*inter.cs
2563
+ # dT/dt += inter.Vin(t)*(inter.Hpervolume - dot(Hs,ns)/V)/(N*Cpave)
2564
+ # dV/dt += inter.Vin(t)
2565
+ # d/dn(dn/dt) = 0
2566
+ # d/dV(dn/dt) = 0
2567
+ # d/dni(dT/dt) += inter.Vin(t)*(-Hs[i]/N)/(N*Cpave) - dT/dt*(dCpavedni/Cpave)
2568
+ # d/dV(dT/dt) += inter.Vin(t)*(dot(Hs, ns)/V^2)/(N*Cpave) - (dT/dt)/(N*Cpave) * d/dV((PV/RT)*Cpave)
2569
+ # Note: Cpave = dot(cpdivR,ns)*R/N = dot(cpdivR,ns)*R*(RT/PV)
2570
+ # Note: d/dV(Cpave) = dot(cpdivR,ns)*R*(RT/PV)*(-1/V) = -Cpave/V
2571
+ # = inter.Vin(t)*(dot(Hs, ns)/V^2)/(N*Cpave) - dT/dt/(N*Cpave) * ((P/RT)*Cpave - (PV/RT)*Cpave/V)
2572
+ # = 0
2573
+ @simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2574
+ @inbounds @fastmath dCpavedni = cpdivR[i]* R/ N
2575
+ @inbounds jac[domain. indexes[3 ],i] += inter. Vin (t)* (- Hs[i]/ N)/ (N* Cpave) - dTdt* (dCpavedni/ Cpave)
2576
+ end
2506
2577
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2507
2578
# outlet
2508
2579
# dTdt = 0
@@ -2587,6 +2658,10 @@ end
2587
2658
@inbounds @fastmath jac[i,i] -= kLAs[i]/ kHs[i]
2588
2659
end
2589
2660
@views @inbounds @fastmath jac[domain. indexes[3 ],domain. indexs[1 ]: domain. indexes[2 ]] .- = kLAs./ kHs* R* T/ P
2661
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2662
+ # dn/dt .+= inter.Vin(t)*inter.cs
2663
+ # dV/dt += inter.Vin(t)
2664
+ nothing
2590
2665
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2591
2666
# outlet
2592
2667
# d/dni(dV/dt) = dflow/dni*R*T/P = inter.Vout(t)/V*R*T/P = inter.Vout(t)/N
@@ -2694,6 +2769,24 @@ end
2694
2769
@inbounds jac[domain. indexes[3 ],i] -= ddnidTdt
2695
2770
@inbounds @fastmath jac[domain. indexes[4 ],i] -= kLAs[i]/ kHs[i]* R* T/ V + P/ T* ddnidTdt
2696
2771
end
2772
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2773
+ # dn/dt .+= inter.Vin(t)*inter.cs
2774
+ # dT/dt += inter.Vin(t)*(inter.Hpervolume - dot(Us,ns)/V)/(N*Cvave)
2775
+ # dP/dt += inter.Vin(t)*P/V + dT/dt*P/T
2776
+ # d/dn(dn/dt) += 0
2777
+ # d/dni(dT/dt) += inter.Vin(t)*(-Us[i]/V)/(N*Cvave) - inter.Vin(t)*(inter.Hpervolume - dot(Us,ns)/V)/(N*Cvave)^2 * d/dni(N*Cvave)
2778
+ # = inter.Vin(t)*(-Us[i]/V)/(N*Cvave) - dT/dt * d/dni(N*Cvave) / (N*Cvave)
2779
+ # = inter.Vin(t)*(-Us[i]/V)/(N*Cvave) - dT/dt * dCvave/dni / Cvave
2780
+ # Note: Cvave = sum(ns.*cpdivR)*R/N - R
2781
+ # Note: dCvave/dni = cpdivR[i]*R/N
2782
+ # d/dni(dP/dt) += d/dni(dT/dt)*P/T
2783
+ @simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2784
+ @inbounds @fastmath dCvavedni = cpdivR[i]* R/ N
2785
+ @fastmath ddnidTdt = (inter. Vout* P/ N)/ (N* Cvave)- dTdt* (dCvavedni/ Cvave)
2786
+ ddnidTdt = inter. Vin (t)* (- Us[i]/ V)/ (N* Cvave)- dTdt* (dCvavedni/ Cvave)
2787
+ @inbounds jac[domain. indexes[3 ],i] += ddnidTdt
2788
+ @inbounds @fastmath jac[domain. indexes[4 ],i] += ddnidTdt* P/ T
2789
+ end
2697
2790
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2698
2791
# outlet
2699
2792
# flow = inter.Vout(t)*sum(ns)/V
@@ -2826,6 +2919,27 @@ end
2826
2919
@inbounds @fastmath jac[i,i] -= kLAs[i]/ kHs[i]
2827
2920
end
2828
2921
@views @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = kLAs./ kHs* R* T/ P
2922
+ elseif isa (inter,VolumetricFlowRateInlet) && domain == inter. domain
2923
+ # dn/dt .+= inter.Vin(t)*inter.cs
2924
+ # dT/dt += inter.Vin(t)*(inter.Hpervolume - dot(Hs,ns)/V)/(N*Cpave)
2925
+ # dV/dt += inter.Vin(t)
2926
+ # d/dn(dn/dt) += 0
2927
+ # d/dV(dn/dt) += 0
2928
+ # d/dni(dT/dt) += inter.V(t)*(-Hs[i]/V)/(N*Cpave) - dT/dt/(N*Cpave) * d/dni(N*Cpave)
2929
+ # Note: Cpave = dot(cpdivR,ns)*R/N
2930
+ # Note: d/dni(Cpave) = cpdivR[i]*R/N
2931
+ # = inter.V(t)*(-Hs[i]/V)/(N*Cpave) - dT/dt * (dCpavedni/Cpave)
2932
+ # d/dV(dT/dt) += inter.Vin(t)*(dot(Hs,ns)/V^2)/(N*Cpave) - dT/dt/(N*Cpave) * d/dV(PV/RT*Cpave)
2933
+ # = inter.Vin(t)*(dot(Hs,ns)/V^2)/(N*Cpave) - dT/dt/(N*Cpave) * (P/RT*Cpave + PV/RT*dCpavedV)
2934
+ # Note: Cpave = dot(cpdivR,ns)*R/N = dot(cpdivR,ns)*R*(RT/PV)
2935
+ # Note: d/dV(Cpave) = dot(cpdivR,ns)*R*(RT/PV)*(-1/V) = -Cpave/V
2936
+ # = inter.Vin(t)*(dot(Hs,ns)/V^2)/(N*Cpave) - dT/dt/(N*Cpave) * (P/RT*Cpave + PV/RT(-Cpave/V))
2937
+ # = 0
2938
+ dTdt = inter. Vin (t)* (inter. Hpervolume - dot (Hs,ns)/ V)/ (N* Cpave)
2939
+ @simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2940
+ @inbounds @fastmath dCpavedni = cpdivR[i]* R/ N
2941
+ @inbounds @fastmath jac[domain. indexes[3 ],i] += inter. Vin (t)* (- Hs[i]/ V)/ (N* Cpave) - dTdt* (dCpavedni/ Cpave)
2942
+ end
2829
2943
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2830
2944
# outlet
2831
2945
# dTdt = 0
0 commit comments