@@ -2105,21 +2105,17 @@ end
2105
2105
nothing
2106
2106
2107
2107
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2108
- # outlet
2109
- # d/dni(dV/dt) = dflow/dni*R*T/P = inter.Vout(t)/V*R*T/P = inter.Vout(t)/N
2110
- # d/dV(dV/dt) = dflow/dV *R*T/P = -inter.Vout(t)*sum(ns)/V^2 *R*T/P = -inter.Vout(t)/V*sum(ns)/N
2111
- # d/dV(dni/dt) = dflow_i/dV
2112
- # flow = inter.Vout(t)/V*sum(ns)
2113
- # dflow/dni = inter.Vout(t)/V
2114
- # dflow/dV = -inter.Vout(t)*sum(ns)/V^2
2115
- # flow_i = inter.Vout(t)/V*ns[i]
2116
- # dflow_i/dV = -inter.Vout(t)*ns[i]/V^2
2108
+ # dn/dt .-= inter.Vout(t)*ns/V
2109
+ # dV/dt -= inter.Vout(t)
2110
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2111
+ # d/dV(dn/dt) -= -inter.Vout(t)*ns/(V*V)
2112
+ # d/dni(dV/dt) -= 0
2113
+ # d/dV(dV/dt) -= 0
2114
+
2117
2115
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2118
2116
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2119
2117
end
2120
- @inbounds @fastmath jac[domain. indexes[3 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = inter. Vout (t)/ N
2121
2118
@views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[3 ]] .- = - inter. Vout (t)* ns/ (V* V)
2122
- @inbounds @fastmath jac[domain. indexes[3 ],domain. indexes[3 ]] -= - inter. Vout (t)/ V* sum (ns)/ N
2123
2119
end
2124
2120
end
2125
2121
end
@@ -2243,19 +2239,23 @@ end
2243
2239
end
2244
2240
2245
2241
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2246
- # outlet
2247
- # flow = inter.Vout(t)*sum(ns)/V
2248
- # dflowdni = inter.Vout(t)/V
2249
- # dTdt = flow*(P*V/N)/(N*Cvave)
2250
- # ddnidTdt = ( dflowdni *P*V/N)/(N*Cvave)-dTdt*(dCvavedni/Cvave) = (inter.Vout(t)/V*P*V/N)/(N*Cvave) -dTdt*(dCvavedni/Cvave)
2251
- # d/dni (dP/dt) = dflowdni *R*T/V + P/T * d/dni(dT/dt) = inter.Vout(t)/V*R*T/V + P/T * d/dni(dT/dt) =
2242
+ # dn/dt .-= inter.Vout(t)*ns/V
2243
+ # dT/dt -= (P*inter.Vout(t))/(N*Cvave)
2244
+ # dP/dt -= inter.Vout(t)*P/V + P/T*dTdt
2245
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2246
+ # d/dni(dT/dt) -= dT/dt * (-1/(N*Cvave)) * d/dni(N*Cvave)
2247
+ # -= dT/dt * (-1/(Cvave)) * d/dni(Cvave)
2248
+ # Note: Cvave = dot(cpdivR,ns)*R/N-R
2249
+ # Note: d/dni(Cvave) = cpdivR[i]*R/N
2250
+ # -= -dT/dt * (dCvavedni/Cvave)
2251
+ # d/dni(dP/dt) -= P/T * d/dni(dT/dt)
2252
2252
@fastmath dTdt = (P* inter. Vout (t))/ (N* Cvave)
2253
2253
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2254
2254
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2255
2255
@inbounds @fastmath dCvavedni = cpdivR[i]* R/ N
2256
- @fastmath ddnidTdt = (inter . Vout * P / N) / (N * Cvave) - dTdt* (dCvavedni/ Cvave)
2256
+ @fastmath ddnidTdt = - dTdt* (dCvavedni/ Cvave)
2257
2257
@inbounds jac[domain. indexes[3 ],i] -= ddnidTdt
2258
- @inbounds @fastmath jac[domain. indexes[4 ],i] -= inter . Vout (t) / V * R * T / V + P/ T* ddnidTdt
2258
+ @inbounds @fastmath jac[domain. indexes[4 ],i] -= P/ T* ddnidTdt
2259
2259
end
2260
2260
end
2261
2261
end
@@ -2305,18 +2305,22 @@ end
2305
2305
2306
2306
@simd for inter in interfaces
2307
2307
if isa (inter,Inlet) && domain == inter. domain
2308
- # inlet
2309
- # dTdt = flow*(inter.H - dot(Hs,ns)/N)/(N*Cpave)
2310
- # ddnidTdt = flow*(-Hs[i]/N)/(N*Cpave)-dTdt*(dCpavedni/Cpave)
2311
- # d/dni (dV/dt) = V/T * d/dni(dT/dt)
2312
- # d/dV (dT/dt) = flow*(dot(Hs, ns)/N)/V/(N*Cpave)
2313
- # d/dV (dV/dt) = dflow/dV*R*T/P + dT/dt/T + V/T * d/dV(dT/dt) = dT/dt/T + V/T * d/dV(dT/dt)
2314
- # d/dV(dni/dt) = dflow_i/dV = -flow*ns[i]/N/V
2315
- # dflow/dV = 0
2316
- # flow_i = flow*ns[i]/N
2317
- # N = P*V/(R*T)
2318
- # dN/dV = P/(R*T)
2319
- # dflow_i/dV = -flow*ns[i]/N^2 P/(R*T) = -flow*ns[i]/N/V
2308
+ # dn/dt .+= inter.y.*inter.F(t)
2309
+ # dT/dt += inter.F(t)*(inter.H - dot(Hs,ns)/N)/(N*Cpave)
2310
+ # dV/dt += inter.F(t)*R*T/P + dT/dt*V/T
2311
+ # d/dni(dn/dt) += 0
2312
+ # d/dV(dn/dt) += 0
2313
+ # d/dni(dT/dt) += inter.F(t)*(-Hs[i]/N)/(N*Cpave) - dTdt/(N*Cpave) * d/dni(N*Cpave)
2314
+ # += inter.F(t)*(-Hs[i]/N)/(N*Cpave) - dTdt/(Cpave) * d/dni(Cpave)
2315
+ # Note: Cpave = dot(cpdivR,ns)*R/N-R
2316
+ # Note: d/dni(Cpave) = cpdivR[i]*R/N
2317
+ # += inter.F(t)*(-Hs[i]/N)/(N*Cpave) - dTdt * (dCpavedni/Cpave)
2318
+ # d/dV(dT/dt) += inter.F(t)*(dot(Hs,ns)/N^2*dN/dV)/(N*Cpave) + dT/dt * (-1/(N*Cpave)) * d/dV(N*Cpave)
2319
+ # += inter.F(t)*(dot(Hs,ns)/N^2*P/RT)/(N*Cpave) + 0
2320
+ # += inter.F(t)*(dot(Hs,ns)/N^2*P/RT)/(N*Cpave)
2321
+ # += inter.F(t)*(dot(Hs,ns)/N/V)/(N*Cpave)
2322
+ # d/dni(dV/dt) += d/dni(dT/dt)*V/T
2323
+ # d/dV(dV/dt) += d/dV(dT/dt)*V/T
2320
2324
flow = inter. F (t)
2321
2325
@fastmath H = dot (Hs,ns)/ N
2322
2326
@fastmath dTdt = flow* (inter. H - H)/ (N* Cpave)
@@ -2328,8 +2332,7 @@ end
2328
2332
end
2329
2333
@fastmath ddVdTdt = flow* H/ V/ (N* Cpave)
2330
2334
@inbounds jac[domain. indexes[3 ],domain. indexes[4 ]] += ddVdTdt
2331
- @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[4 ]] += dTdt/ T + V/ T* ddVdTdt
2332
- @views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[4 ]] .+ = flow* ns/ N/ V
2335
+ @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[4 ]] += V/ T* ddVdTdt
2333
2336
elseif isa (inter,Outlet) && domain == inter. domain
2334
2337
# dn/dt .-= inter.F(t).*ns./N
2335
2338
# dT/dt -= 0
@@ -2408,22 +2411,19 @@ end
2408
2411
@inbounds jac[domain. indexes[3 ],i] += inter. Vin (t)* (- Hs[i]/ N)/ (N* Cpave) - dTdt* (dCpavedni/ Cpave)
2409
2412
end
2410
2413
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2411
- # outlet
2412
- # dTdt = 0
2413
- # d/dni (dV/dt) = dflow/dni *R*T/P = inter.Vout/V*R*T/P = inter.Vout/N
2414
- # d/dV(dV/dt) = dflowdV *R*T/P = -inter.Vout*sum(ns)/V^2*R*T/P = -inter.Vout/V*sum(ns)/N
2415
- # d/dV(dni/dt) = dflow_i/dV = -inter.Vout*ns[i]/V^2
2416
- # dflow/dni = inter.Vout/V
2417
- # dflowdV = -inter.Vout*sum(ns)/V^2
2418
- # dflow/dV = 0
2419
- # flow_i = inter.Vout*ns[i]/V
2420
- # dflow_i/dV = -inter.Vout*ns[i]/V^2
2414
+ # dn/dt .-= inter.Vout(t)*ns/V
2415
+ # dT/dt -= 0
2416
+ # dV/dt -= inter.Vout(t)
2417
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2418
+ # d/dV(dn/dt) -= -inter.Vout(t)*ns/(V^2)
2419
+ # d/dni(dT/dt) -= 0
2420
+ # d/dV(dT/dt) -= 0
2421
+ # d/dni(dV/dt) -= 0
2422
+ # d/dV(dV/dt) -= 0
2421
2423
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2422
2424
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2423
2425
end
2424
- @views @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = inter. Vout (t)/ N
2425
2426
@views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[4 ]] .- = - inter. Vout (t)/ (V* V)* ns
2426
- @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[4 ]] -= - inter. Vout (t)/ V* sum (ns)/ N
2427
2427
end
2428
2428
end
2429
2429
@@ -2506,21 +2506,16 @@ end
2506
2506
# dV/dt += inter.Vin(t)
2507
2507
nothing
2508
2508
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2509
- # outlet
2510
- # d/dni(dV/dt) = dflow/dni*R*T/P = inter.Vout(t)/V*R*T/P = inter.Vout(t)/N
2511
- # d/dV(dV/dt) = dflow/dV *R*T/P = -inter.Vout*sum(ns)/V^2*R*T/P = -inter.Vout/V*sum(ns)/N
2512
- # d/dV(dni/dt) = dflow_i/dV = -inter.Vout(t)*ns[i]/V^2
2513
- # flow = inter.Vout(t)/V*sum(ns)
2514
- # dflowdni = inter.Vout(t)/V
2515
- # dflowdV = -inter.Vout*sum(ns)/V^2
2516
- # dflow_i/dV = -inter.Vout(t)*ns[i]/V^2
2509
+ # dn/dt .-= inter.Vout(t)*ns/V
2510
+ # dV/dt -= inter.Vout(t)
2511
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2512
+ # d/dV(dni/dt) -= -inter.Vout(t)*ns/(V*V)
2513
+ # d/dni(dV/dt) -= 0
2514
+ # d/dV(dV/dt) -= 0
2517
2515
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2518
2516
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2519
2517
end
2520
2518
@views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[3 ]] .- = - inter. Vout (t)* ns/ (V* V)
2521
- @views @inbounds @fastmath jac[domain. indexes[3 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = inter. Vout (t)/ N
2522
- @inbounds @fastmath jac[domain. indexes[3 ],domain. indexes[3 ]] -= - inter. Vout/ V* sum (ns)/ N
2523
-
2524
2519
end
2525
2520
end
2526
2521
@@ -2646,19 +2641,21 @@ end
2646
2641
@inbounds @fastmath jac[domain. indexes[4 ],i] += ddnidTdt* P/ T
2647
2642
end
2648
2643
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2649
- # outlet
2650
- # flow = inter.Vout(t)*sum(ns)/V
2651
- # dflowdni = inter.Vout(t)/V
2652
- # dTdt = flow*(P*V/N)/(N*Cvave)
2653
- # ddnidTdt = ( dflowdni *P*V/N)/(N*Cvave)-dTdt*(dCvavedni/Cvave) = (inter.Vout(t)/V*P*V/N)/(N*Cvave) -dTdt*(dCvavedni/Cvave)
2654
- # d/dni (dP/dt) = dflowdni *R*T/V + P/T * d/dni(dT/dt) = inter.Vout(t)/V*R*T/V + P/T * d/dni(dT/dt) =
2644
+ # dn/dt .-= inter.Vout(t)*ns/V
2645
+ # dT/dt -= (P*inter.Vout(t))/(N*Cvave)
2646
+ # dP/dt -= inter.Vout(t)*P/V + dT/dt*P/T
2647
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2648
+ # d/dni(dT/dt) -= dT/dt *(-1/(N*Cvave)) d/dni(N*Cvave)
2649
+ # -= dT/dt *(-1/(Cvave)) d/dni(Cvave)
2650
+ # -= - dT/dt * (dCvavedni/Cvave)
2651
+ # d/dni(dP/dt) -= P/T * d/dni(dT/dt)
2655
2652
@fastmath dTdt = (P* inter. Vout (t))/ (N* Cvave)
2656
2653
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2657
2654
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2658
2655
@inbounds @fastmath dCvavedni = cpdivR[i]* R/ N
2659
- @fastmath ddnidTdt = (inter . Vout * P / N) / (N * Cvave) - dTdt* (dCvavedni/ Cvave)
2656
+ @fastmath ddnidTdt = - dTdt* (dCvavedni/ Cvave)
2660
2657
@inbounds jac[domain. indexes[3 ],i] -= ddnidTdt
2661
- @inbounds @fastmath jac[domain. indexes[4 ],i] -= inter . Vout (t) / V * R * T / V + P/ T* ddnidTdt
2658
+ @inbounds @fastmath jac[domain. indexes[4 ],i] -= P/ T* ddnidTdt
2662
2659
end
2663
2660
end
2664
2661
end
@@ -2702,18 +2699,21 @@ end
2702
2699
2703
2700
@simd for inter in interfaces
2704
2701
if isa (inter,Inlet) && domain == inter. domain
2705
- # inlet
2706
- # dTdt = flow*(inter.H - dot(Hs,ns)/N)/(N*Cpave)
2707
- # ddnidTdt = flow*(-Hs[i]/N)/(N*Cpave)-dTdt*(dCpavedni/Cpave)
2708
- # d/dni (dV/dt) = V/T * d/dni(dT/dt)
2709
- # d/dV (dT/dt) = flow*(dot(Hs, ns)/N)/V/(N*Cpave)
2710
- # d/dV (dV/dt) = dflow/dV*R*T/P + dT/dt/T + V/T * d/dV(dT/dt) = dT/dt/T + V/T * d/dV(dT/dt)
2711
- # d/dV(dni/dt) = dflow_i/dV = -flow*ns[i]/N/V
2712
- # dflow/dV = 0
2713
- # flow_i = flow*ns[i]/N
2714
- # N = P*V/(R*T)
2715
- # dN/dV = P/(R*T)
2716
- # dflow_i/dV = -flow*ns[i]/N^2 P/(R*T) = -flow*ns[i]/N/V
2702
+ # dn/dt .+= inter.y.*inter.F(t)
2703
+ # dT/dt += inter.F(t)*(inter.H - dot(Hs,ns)/N)/(N*Cpave)
2704
+ # dV/dt += inter.F(t)*R*T/P + dT/dt*V/T
2705
+ # d/dni(dni/dt) += 0
2706
+ # d/dV(dni/dt) += 0
2707
+ # d/dni(dT/dt) += inter.F(t)*(-Hs[i]/N)/(N*Cpave) + dTdt * (-1/(N*Cpave)) * d/dni(N*Cpave)
2708
+ # += inter.F(t)*(-Hs[i]/N)/(N*Cpave) + dTdt * (-1/(Cpave)) * d/dni(Cpave)
2709
+ # Note: Cpave = = dot(cpdivR,ns)*R/N
2710
+ # Note: dCpavedni = cpdivR[i]*R/N
2711
+ # d/dV(dT/dt) += inter.F(t)*(dot(Hs,ns)/N^2*dN/dV)/(N*Cpave) + dTdt * (-1/(N*Cpave)) * d/dV(N*Cpave)
2712
+ # Note: dN/dV = d(PV/RT)/dV = P/RT
2713
+ # Note: d(N*Cpave)/dV = (dN/dV*Cpave + N*dCpave/dV) = P/RT*Cpave - Cpave * P/RT = 0
2714
+ # += inter.F(t)*(dot(Hs,ns)/N/V)/(N*Cpave)
2715
+ # d/dni(dV/dt) += V/T*d/dni(dT/dt)
2716
+ # d/dV(dV/dt) += d/dV(dT/dt)*V/T + dT/dt/T
2717
2717
flow = inter. F (t)
2718
2718
@fastmath H = dot (Hs,ns)/ N
2719
2719
@fastmath dTdt = flow* (inter. H - H)/ (N* Cpave)
@@ -2726,7 +2726,6 @@ end
2726
2726
@fastmath ddVdTdt = flow* H/ V/ (N* Cpave)
2727
2727
@inbounds jac[domain. indexes[3 ],domain. indexes[4 ]] += ddVdTdt
2728
2728
@inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[4 ]] += dTdt/ T + V/ T* ddVdTdt
2729
- @views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[4 ]] .+ = flow* ns/ N/ V
2730
2729
elseif isa (inter,Outlet) && domain == inter. domain
2731
2730
# dn/dt .-= inter.F(t).*ns./N
2732
2731
# dT/dt -= 0
@@ -2810,22 +2809,19 @@ end
2810
2809
@inbounds @fastmath jac[domain. indexes[3 ],i] += inter. Vin (t)* (- Hs[i]/ V)/ (N* Cpave) - dTdt* (dCpavedni/ Cpave)
2811
2810
end
2812
2811
elseif isa (inter,VolumetricFlowRateOutlet) && domain == inter. domain
2813
- # outlet
2814
- # dTdt = 0
2815
- # d/dni (dV/dt) = dflow/dni *R*T/P = inter.Vout/V*R*T/P = inter.Vout/N
2816
- # d/dV(dV/dt) = dflowdV *R*T/P = -inter.Vout*sum(ns)/V^2*R*T/P = -inter.Vout/V*sum(ns)/N
2817
- # d/dV(dni/dt) = dflow_i/dV = -inter.Vout*ns[i]/V^2
2818
- # dflow/dni = inter.Vout/V
2819
- # dflowdV = -inter.Vout*sum(ns)/V^2
2820
- # dflow/dV = 0
2821
- # flow_i = inter.Vout*ns[i]/V
2822
- # dflow_i/dV = -inter.Vout*ns[i]/V^2
2812
+ # dn/dt .-= inter.Vout(t)*ns/V
2813
+ # dT/dt -= 0
2814
+ # dV/dt -= inter.Vout(t)
2815
+ # d/dni(dni/dt) -= inter.Vout(t)/V
2816
+ # d/dV(dni/dt) -= -inter.Vout(t)*ns/V^2
2817
+ # d/dni(dT/dt) -= 0
2818
+ # d/dV(dT/dt) -= 0
2819
+ # d/dni(dV/dt) -= 0
2820
+ # d/dV(dV/dt) -= 0
2823
2821
@simd for i in domain. indexes[1 ]: domain. indexes[2 ]
2824
2822
@inbounds @fastmath jac[i,i] -= inter. Vout (t)/ V
2825
2823
end
2826
- @views @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[1 ]: domain. indexes[2 ]] .- = inter. Vout (t)/ N
2827
2824
@views @inbounds @fastmath jac[domain. indexes[1 ]: domain. indexes[2 ],domain. indexes[4 ]] .- = - inter. Vout (t)/ (V* V)* ns
2828
- @inbounds @fastmath jac[domain. indexes[4 ],domain. indexes[4 ]] -= - inter. Vout (t)/ V* sum (ns)/ N
2829
2825
end
2830
2826
end
2831
2827
0 commit comments