forked from decaluwe/2D-porous-flux-model
-
Notifications
You must be signed in to change notification settings - Fork 1
/
DGM_func.py
102 lines (60 loc) · 2.92 KB
/
DGM_func.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
"""
Author:
Corey R. Randall (08 June 2018)
Description:
This is an external function that calculates fluxes with the Dusty Gas
Model approach. It was written to be used in 2D_NRSupport_FluxModel.
"""
def Flux_Calc(SV,Nx,dX,Ny,dY,Nspecies,BC_in,inlet_BC,gas,phi_g,tau_g,d_p):
import numpy as np
Fluxes_X = np.zeros((Nx+1)*Ny*Nspecies) # Fluxes in x-direction w/ 0's BC
Fluxes_X_int = np.zeros((Nx-1)*Ny*Nspecies) # Interior x-direction fluxes
Fluxes_Y = np.zeros(Nx*(Ny+1)*Nspecies) # Fluxes in y-direction
# Get molecular weights for mol -> mass conversions:
MWs = gas.molecular_weights
# Set constant temperature from main function:
T = gas.T
# Initialize counters for flux loops:
cnt_x = 0
cnt_y = Nx*Nspecies
# Calculate each x-direction flux:
for j in range(Ny):
ind1 = j*Nx*Nspecies # First -> last index of cell on left
ind2 = ind1 + Nspecies
for i in range(Nx-1):
ind3 = ind2 # First -> last index of cell on right
ind4 = ind3 + Nspecies
D1 = sum(SV[ind1:ind2])
D2 = sum(SV[ind3:ind4])
Y1 = SV[ind1:ind2] / D1
Y2 = SV[ind3:ind4] / D2
molar_fluxes = gas.molar_fluxes(T,T,D1,D2,Y1,Y2,dX)
Fluxes_X_int[cnt_x:cnt_x+Nspecies] = molar_fluxes*MWs
ind1 = ind3 # Index of right cell becomes index of left
ind2 = ind1 + Nspecies
cnt_x = cnt_x + Nspecies
x1 = j*(Nx+1)*Nspecies + Nspecies # First non-zero x-flux of each row
x2 = x1 + (Nx-1)*Nspecies # Last non-zero x-flux of each row
Fluxes_X[x1:x2] = Fluxes_X_int[j*(Nx-1)*Nspecies:(j+1)*(Nx-1)*Nspecies]
# Calculate each y-direction flux:
for i in range(BC_in):
D1 = sum(inlet_BC)
D2 = sum(SV[i*Nspecies:(i+1)*Nspecies])
Y1 = inlet_BC / D1
Y2 = SV[i*Nspecies:(i+1)*Nspecies] / D2
molar_fluxes = gas.molar_fluxes(T,T,D1,D2,Y1,Y2,dY)
Fluxes_Y[i*Nspecies:(i+1)*Nspecies] = molar_fluxes*MWs
for j in range(Ny-1):
ind1 = j*Nx*Nspecies # First -> last index of cell on top
ind2 = ind1 + Nspecies
for i in range(Nx):
D1 = sum(SV[ind1:ind2])
D2 = sum(SV[ind1+Nx*Nspecies:ind2+Nx*Nspecies])
Y1 = SV[ind1:ind2] / D1
Y2 = SV[ind1+Nx*Nspecies:ind2+Nx*Nspecies] / D2
molar_fluxes = gas.molar_fluxes(T,T,D1,D2,Y1,Y2,dY)
Fluxes_Y[cnt_y:cnt_y+Nspecies] = molar_fluxes*MWs
ind1 = ind2
ind2 = ind1 + Nspecies
cnt_y = cnt_y + Nspecies
return Fluxes_X, Fluxes_Y