Академический Документы
Профессиональный Документы
Культура Документы
Физико-механический институт
Высшая школа прикладной математики и вычислительной физики
Выполнил
студент гр. 5040301/10201 Ле Мань Дат ___________
Санкт-Петербург
2022
Оглавление
2
1. Постановка задачи. Расчёт полей течения несущей фазы.
Исследование сеточной сходимости решения.
3
Рис. 2. Расчетная сетка
4
Рис 4. Полученные поля модуля скорости (слева) и давления (справа)
5
Рис 5. Проверка сеточной сходимости
6
2. Формулировка математической модели для задачи о движении
пробной частицы в поле течения вязкой несжимаемой жидкости.
d⃗vp
mp =⃗
F (1)
dt
Левая часть этого уравнения представляет силу инерции частиц, правая часть
отражает влияние различных силовых факторов.
Движение частицы в общем случае определяется действием силы
тяжести и гидродинамических сил, обусловленных взаимодействием частицы
с газом. Учет силы тяжести необходим, если скорость витания частицы и
скорость потока являются величинами одного порядка. В высокоскоростных
потоках силой веса обычно пренебрегается. В рамках данной работы
рассматриваются действия гидродинамических сил, таких как, силы Стокса,
силы плавучести, силы Магнуса, Сэффмена, присоединённых масс и силы
Бассе. И так, правую часть уравнения (1) можно записать в виде:
⃗
F =⃗
FD+ ⃗
F bouyancy + ⃗
F Mag ,i + ⃗
F Saff ,i + ⃗
F add + ⃗
F Basset ,i ,
mass (2)
где:
7
⃗ 1
F D = C D ρg S m|⃗ v p| ( ⃗v g−⃗v p ) – cила Стокса, действующая со стороны
v g− ⃗
2
( )
2 3 d ⃗v p
⃗F add =− 3 π r p ρg dt
mass
– сила присоединённых масс, учитывающая
d r⃗p
=⃗v p (3)
dt
8
Уравнение изменения угловой скорости вращения частицы
записывается в виде:
d⃗
ωp
M =I , (4)
dt
1
I= π d 5p ρ p , (5)
60
64 μ
где С L = R , Rω=d p|ω ω P| g
2
⃗ g −⃗
ω ρ g
v y ' =V τ τ y −V n n y
ω ' =0
( )
M p2
Для скорости ⃗
v 1 '=⃗ ⃗ ) n⃗ + 2 |⃗
v 1 − ( 1+e ) ( ⃗n ∙ U U ct|⃗t , где ⃗
v 1 ' - скорость
7 M p1+ M p2
после столкновения, а ⃗
v1 – до столкновения; e=0.7 – коэффициент
5 ⃗ M p2
Для вращения ⃗
ω1 '=⃗
ω1−
7 r1
|U ct|( n⃗ × t⃗ )
M p1+ M p2
. При моделировании
10
3. Основные алгоритмы, обеспечивающие связь расчета поля
течения несущей фазы с расчетом движения частицы.
p2
p1 (I, J)
11
3.2 Алгоритм определения пересечения траектории движения частицы
с границами.
r⃗ =⃗r I + ( ⃗r I +1−⃗r I ) ∙u
(7)
⃗p '
r⃗ I r⃗ I+1
⃗p2
p1 (I, J)
⃗p1
13
4. Численные методы для решения системы уравнений движения
частицы.
d⃗
X ⃗
=F , (9)
dt
где:
() ( )
x u
y v
⃗
X= u и ⃗
F = F x /m p ,
v F y /m p
ω M z/ I
⃗
X n+1=⃗ ( 3 ⃗ 1⃗
X n+ ∆ t ∙ F − F
2 n 2 n−1),
(10)
14
4.2 Численные методы для расчета силового взаимодействия.
d
' ( p
t ⃗v −⃗v g )
3 2 dt
F Basset ,i= d p √ π ρ g μ g∫
⃗ '
dt
2 0 √t−t '
i i−1
3 2
n
( ⃗v p−⃗v g ) −( ⃗v p −⃗v g )
F Basset ,i= d p √ π ρ g μ g ∑
⃗ (11)
n
,
2 i=1 √n ∆t−(i−1)∆ t
15
5. Описание реализованной программы и ее блок схема.
16
6. Результат исследований.
2
ρp d pV 0
Sk= ≈ 0.833 ,
18 μ g L0
кг
где: ρ p =2000 3 – плотность частицы; μ=2∙ 10−5 Па. с - вязкость несущей среды;
м
V 0=0.04 м /c – скорость потока на входе канала; L0 ≈ 0.6 м – длина канала.
∆ t=0.1с ∆ t =0.05 с
17
∆ t=0.01с ∆ t=5 ∙10−3 с
−3 −4
∆ t=1 ∙10 с ∆t=5 ∙ 10 с
Рисунок 8. Результат исследования сходимости решения по величине
временного шага
18
−3 −2
Sk=3.7 ∙ 10 Sk =9.3 ∙10
Sk=0.833 Sk=5.925
Рисунок 9. Траектории движения частицы при разных режимах
Sk=0.833 Sk=5.925
Рисунок 10. Действующие на частицу силы (по модулю) как функции
времени
20
рециркуляции). Для этого были выбраны два разных начальных состояния
частицы:
1. x0 = 0 м, y0 = 0.0395 м, u = 0 м/c, v = 0 м/c.
2. x0 = 0.12 м, y0 = 0.15 м, u = 0 м/c, v = 0 м/c.
Результаты исследования для варианта 1 изображаются на рисунке 11,
графики изменения действующих на частицу сил для данных случаев
представлены на рисунке 12.
Sk=0.833 Sk=5.925
Рисунок 11. Траектория движения частицы для варианта 1
21
−3 −2
Sk=3.7 ∙ 10 Sk =9.3 ∙10
Sk=0.833 Sk=5.925
Рисунок 12. Действующие на частицу силы (по модулю) как функции
времени
22
более, с увеличением числа Стокса эта сила повышается и заставляет частице
летать вниз и ударяться к нижней стенке канала.
Для исследования движения частицы в зоне рециркуляции начальные
условия были заданы в соответствии с вариантом 2. Результаты исследования
приведены на рисунках. При движении в зоне рециркуляции частица с
меньшим числом Стокса двигается вдоль линий тока и вращается вокруг
центра зоны рециркуляции. При большем числе Стокса частица обладает
большей инерцией и за счёт этого быстрее выходит из зоны рециркуляции.
Важно подчеркнуть, что в замороженным режиме наблюдено заметные
действия сил Магнуса и Сеффмана (графики зависимость сил по времени на
рисунке 14).
Sk=0.833 Sk=5.925
Рисунок 13. Траектория движения частицы для варианта 2
23
Sk=3.7 ∙ 10−3 Sk =9.3 ∙10−2
Sk=0.833 Sk=5.925
Рисунок 14. Действующие на частицу силы (по модулю) как функции
времени
24
отражения и модель с коэффициентом восстановления 0.7 и учетом
вращения. На рисунках 15 и 16 приведены результаты исследования для
случаев с начальными условиями: x0 = 0 м, y0 = 0.02 м, u = 0.01 м/c, v = 0.05
м/c (при Sk = 0.833 и Sk = 5.925). Заметим, что в случаях с учетом
коэффициента восстановления и вращения количество столкновений заметно
уменьшается. Траектории движения становятся более искривленными, так
как вращение частицы после столкновения порождает силу Магнуса,
действующую поперечно относительно направления движения самой
частицы.
Sk=0.833 Sk=5.925
Модель жесткого упругого отражения
Sk=0.833 Sk=5.925
Модель с коэффициентом восстановления 0.7 и учетом вращения
25
Рисунок 15. Исследование влияния модели отражения в случаях с большим
числом столкновений
Sk=0.833 Sk=5.925
Модель жесткого упругого отражения
26
Sk=0.833 Sk=5.925
Модель с коэффициентом восстановления 0.7 и учетом вращения
Рисунок 16. Действующие на частицу силы (по модулю) как функции
времени
27
6. Заключение
28
7. Приложения
Коды из Фортрана:
MAIN
Program Main
!=== READ NODES NUMBER (NI,NJ) FROM FILE WITH MESH ===
WRITE(*,*) 'Read nodes number from file: ', MeshFile
OPEN(1,FILE = MeshFile)
READ(1,*) NI,NJ,rtmp
WRITE(*,*) 'NI, NJ = ',NI,NJ
29
CLOSE(1)
!===NUMBER STOKES
Vref=0.04
30
Lref=0.6
Sk=ro2*dp**2*Vref/(18*mu*Lref)
OPEN(1,FILE='output_particle.txt')
WRITE(1,*) 'it,t,x,y,u,v,w,Fx,Fy,Mz'
!FORCES
OPEN(2,FILE='force.txt')
WRITE(2,*) 'it,t,fd,fa,fm,fc,fad,fb,mz'
DO IT=0,NT
! LOCATION
CALL C_Location(x_m,y_m,NI,NJ,X,Y,CellVolume,IP,JP)
FX0=FX
FY0=FY
MZ0=MZ
! FOR BASSE FORCE
V_P(IT,1)=U_M
V_P(IT,2)=V_M
V_G(IT,:)=V(IP,JP,:)
! CALCULATE FORCES AND MOMENTS ===
CALL
C_FORCE(RO1,RO2,MU,DP,U_M,V_M,W_M,V_P,V_G,FX,FY,MZ,DT,IT,NI,NJ,IP,JP,V,GR
ADP,ROTV,NT)
WRITE(1,*) it, it*dt, x_m, y_m, u_m, v_m, w_m, Fx, Fy, Mz
WRITE(*,*)
'it=',it,'x=',x_m,'y=',y_m,'IP=',IP,'JP=',JP,'u=',u_m,'v=',v_m,'w=',w_m,'Fx=',Fx,'Fy=',Fy,'Mz=',Mz
31
! CHECK BOUNDARY
! CORRECT x_m1,y_m1,u_m1,v_m1,w_m1
CALL C_Location(x_m1,y_m1,NI,NJ,X,Y,CellVolume,IP1,JP1)
IF(IP1.EQ.-1.AND.JP1.EQ.-1) THEN
CALL
C_BOUNDARY(X,Y,JFACEVECTOR,NI,NJ,X_M,Y_M,U_M,V_M,W_M,X_M1,Y_M1,U_M
1,V_M1,W_M1,IP1,JP1,ST,MO,DP,RO2)
IF ((ST.EQ.3).OR.(ST.EQ.4)) THEN
WRITE(*,*)'PARTICLE LEFT CHANNEL THROUGH', ST
EXIT
ENDIF
ENDIF
X_M = X_M1
Y_M = Y_M1
U0 = U_M
V0 = V_M
U_M = U_M1
V_M = V_M1
W_M = W_M1
ENDDO
CLOSE(1)
CLOSE(2)
GEOMETRY
SUBROUTINE
B_CalcMetric(NI,NJ,X,Y,CellCenter,CellVolume,IFaceCenter,IFaceVector,JFaceCenter,JFaceV
ector)
REAL X(NI,NJ),Y(NI,NJ),& ! input: nodes coordinates
CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),& ! output: cell centers and volumes
IFaceCenter( NI,NJ-1,2),IFaceVector(NI,NJ-1,2),& ! ace centers and vectors for I-faces
JFaceCenter( NI-1,NJ,2),JFaceVector(NI-1,NJ,2) ! face centers and vectors for J-faces
REAL r(2)
!=== FACE CENTERS AND FACE VECTORS ===
! I-DIRECTION
DO J = 1,NJ-1
DO I = 1,NI
r(1) = X(I,J+1) - X(I,J) ! r = vector from one node to another
r(2) = Y(I,J+1) - Y(I,J)
IFaceVector(I,J,1) = r(2) ! IFaceVector = r rotated on 90 degree
IFaceVector(I,J,2) =-r(1) ! IFaceVector directed to increasing I-index
IFaceCenter(I,J,1) = 0.5*(X(i,j)+x(i,j+1))
32
IFaceCenter(I,J,2) = 0.5*(Y(i,j)+Y(i,j+1))
ENDDO
ENDDO
! J-DIRECTION
DO J = 1,NJ
DO I = 1,NI-1
r(1) = X(I+1,J) - X(I,J) ! r = vector from one node to another
r(2) = Y(I+1,J) - Y(I,J)
JFaceVector(I,J,1) =-r(2) ! JFaceVector = r rotated on -90 degree
JFaceVector(I,J,2) = r(1) ! JFaceVector directed to increasing J-index
JFaceCenter(I,J,1) = 0.5*(X(i,j)+x(i+1,j))
JFaceCenter(I,J,2) = 0.5*(Y(i,j)+Y(i+1,j))
ENDDO
ENDDO
33
ENDDO
ENDDO
! J-BOUNDARIES -----------------------------------------------------
DO NBOUND = 1,2
IF (NBOUND.EQ.1) THEN
JBOUND = 1; JOUT = 0
ELSE
JBOUND = NJ; JOUT = NJ
ENDIF
DO I = 1,NI-1
CellCenter(I,JOUT,:) = JFaceCenter(I,JBOUND,:)
ENDDO
ENDDO
END SUBROUTINE
CALCULATION GRADIENT
Subroutine
B_CalcGradient(NI,NJ,P,GradP,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JF
aceVector)
INTEGER NI,NJ
REAL P(0:NI,0:NJ), GradP(0:NI,0:NJ,2)
REAL CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),&
IFaceCenter(NI,NJ-1,2),IFaceVector(NI,NJ-1,2),&
JFaceCenter(NI-1,NJ,2),JFaceVector(NI-1,NJ,2)
! local
INTEGER I,J,I1,J1
REAL VOL,RC(2),RF(4,2),SF(4,2),NCELL(4,2),PFace, GP(2), RN(2),PE,GPE(2),RE(2)
! Cell Centers
Do I=1,NI-1
Do J=1,NJ-1
!Coordinates of the cell Centers, which surround the Cell Cennter under consideration
NCEll(1,:)=[I-1,J]
NCELL(2,:)=[I,J-1]
NCELL(3,:)=[I+1,J]
NCELL(4,:)=[I,J+1]
! Coordinates of the centers of the surroungding facecs
RF(1,:)=IFaceCenter(I,J,:)
RF(2,:)=JFaceCenter(I,J,:)
RF(3,:)=IFaceCenter(I+1,J,:)
RF(4,:)=JFaceCenter(I,J+1,:)
! Vectors at Face Centers
SF(1,:)=-IFaceVector(I,J,:)
SF(2,:)=-JFaceVector(I,J,:)
SF(3,:)=IFaceVector(I+1,J,:)
SF(4,:)=JFaceVector(I,J+1,:)
! Vollume & Coordinate of Centers
VOL=CellVolume(I,J)
RC(:)=CellCenter(I,J,:)
34
! Pressure at Face Centers
GP(:)=0
Do IFace=1,4
I1=NCELL(IFace,1)
J1=NCELL(IFace,2)
RN(:)=Cellcenter(I1,J1,:)
PE=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-RF(IFace,:)),P(I,J),P(I1,J1))
RE(1)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),RC(1),RN(1))
RE(2)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),RC(2),RN(2))
GPE(1)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),GRadP(I,J,1),GradP(I1,J1,1))
GPE(2)=RLinearInterp(norm2(RC(:)-RF(IFace,:)),norm2(RN(:)-
RF(IFace,:)),GRadP(I,J,2),GradP(I1,J1,2))
PFace=PE+Dot_product(RF(IFace,:)-RE(:),GPE(:))
GP(:)=GP(:)+PFace*SF(IFace,:)
ENDDO
CALCULATION ROTOR
Subroutine
B_CalcRotor(NI,NJ,V,rotV,Cellvolume,Cellcenter,IFaceCenter,JFaceCenter,IFaceVector,JFace
Vector)
INTEGER NI,NJ
REAL RotV(0:NI,0:NJ), V(0:NI,0:NJ,2)
REAL CellCenter(0:NI,0:NJ,2),CellVolume(NI-1,NJ-1),&
IFaceCenter(NI,NJ-1,2),IFaceVector(NI,NJ-1,2),&
JFaceCenter(NI-1,NJ,2),JFaceVector(NI-1,NJ,2)
! local
INTEGER I,J
REAL VOL,RC(2),RF(4,2),SF(4,2),NCELL(4,2),VFace(4,2)
! Cell Centers
Do I=1,NI-1
Do J=1,NJ-1
!Coordinates of the cell Centers, which surround the Cell Cennter under consideration
NCEll(1,:)=CellCenter(I-1,J,:)
NCELL(2,:)=CellCenter(I,J-1,:)
NCELL(3,:)=CellCenter(I+1,J,:)
NCELL(4,:)=CellCenter(I,J+1,:)
! Coordinates of the centers of the surroungding facecs
RF(1,:)=IFaceCenter(I,J,:)
35
RF(2,:)=JFaceCenter(I,J,:)
RF(3,:)=IFaceCenter(I+1,J,:)
RF(4,:)=JFaceCenter(I,J+1,:)
! Vectors at Face Centers
SF(1,:)=-IFaceVector(I,J,:)
SF(2,:)=-JFaceVector(I,J,:)
SF(3,:)=IFaceVector(I+1,J,:)
SF(4,:)=JFaceVector(I,J+1,:)
! Vollume & Coordinate of Centers
VOL=CellVolume(I,J)
RC(:)=CellCenter(I,J,:)
! Velocity at Face Centers
VFace(1,1)=RLinearInterp(norm2(RC(:)-RF(1,:)),norm2(NCELL(1,:)-
RF(1,:)),V(I,J,1),V(I-1,J,1))
VFace(1,2)=RLinearInterp(norm2(RC(:)-RF(1,:)),norm2(NCELL(1,:)-
RF(1,:)),V(I,J,2),V(I-1,J,2))
VFace(2,1)=RLinearInterp(norm2(RC(:)-RF(2,:)),norm2(NCELL(2,:)-
RF(2,:)),V(I,J,1),V(I,J-1,1))
VFace(2,2)=RLinearInterp(norm2(RC(:)-RF(2,:)),norm2(NCELL(2,:)-
RF(2,:)),V(I,J,2),V(I,J-1,2))
VFace(3,1)=RLinearInterp(norm2(RC(:)-RF(3,:)),norm2(NCELL(3,:)-
RF(3,:)),V(I,J,1),V(I+1,J,1))
VFace(3,2)=RLinearInterp(norm2(RC(:)-RF(3,:)),norm2(NCELL(3,:)-
RF(3,:)),V(I,J,2),V(I+1,J,2))
VFace(4,1)=RLinearInterp(norm2(RC(:)-RF(4,:)),norm2(NCELL(4,:)-
RF(4,:)),V(I,J,1),V(I,J+1,1))
VFace(4,2)=RLinearInterp(norm2(RC(:)-RF(4,:)),norm2(NCELL(4,:)-
RF(4,:)),V(I,J,2),V(I,J+1,2))
! Count Rotor at Cell Centers
RotV(I,J)=0
Do IFace=1,4
RotV(I,J)=RotV(I,J)+(VFace(IFace,2)*SF(IFace,1)-VFace(IFace,1)*SF(IFace,2))/VOL
ENDDO
ENDDO
ENDDO
End Subroutine
Subroutine C_Location(x_m1,y_m1,NI,NJ,X,Y,CellVolume,IP,JP)
INTEGER NI, NJ, IP, JP, I, J
REAL x_m1, y_m1, X(NI,NJ), Y(NI,NJ), CellVolume(NI-1,NJ-1), S ,eps
JP=-1
IP=-1
eps=1.0e-15
DO J=1,NJ-1
DO I=1, NI-1
S=
TS(X(I,J),Y(I,J),X(I,J+1),Y(I,J+1),X_m1,Y_m1)+TS(X(I,J),Y(I,J),X(I+1,J),Y(I+1,J),X_m1,Y_
m1)+ &
36
TS(X(I+1,J+1),Y(I+1,J+1),X(I,J+1),Y(I,J+1),X_m1,Y_m1)+TS(X(I+1,J+1),Y(I+1,J+1),X(I+1,J)
,Y(I+1,J),X_m1,Y_m1)
IF (ABS(S-CELLVOLUME(I,J)).LE.eps) THEN
IP=I
JP=J
RETURN
ENDIF
ENDDO
ENDDO
End Subroutine
Function TS(x1,y1,x2,y2,x3,y3) ! Triangular Square
REAL x1,y1,x2,y2,x3,y3,a,b,c,p
a=sqrt((x1-x2)**2+(y1-y2)**2)
b=sqrt((x3-x2)**2+(y3-y2)**2)
c=sqrt((x1-x3)**2+(y1-y3)**2)
p=(a+b+c)/2
TS=sqrt((p-a)*(p-b)*(p-c)*p)
END Function
CHECK BOUNDARY
Subroutine
C_BOUNDARY(X,Y,JFACEVECTOR,NI,NJ,X_M,Y_M,U_M,V_M,W_M,X_M1,Y_M1,U_M
1,V_M1,W_M1,IP1,JP1,ST,MO,DP,RO2)
INTEGER NI,NJ,JP1,IP1,ST,I,J,ICR,MO
REAL X(NI,NJ),Y(NI,NJ)
REAL JFACEVECTOR(NI-1,NJ,2)
REAL X_M1,Y_M1,U_M1,V_M1,W_M1,X_M,Y_M,W_M,U_M,V_M,DP,RO2
REAL XCROS,YCROS
ST=0
!J=1 - WALL ST=1
DO I=1,NI-1
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(I,1),Y(I,1),X(I+1,1),Y(I+1,1),XCROS,YCROS,IC
R)
IF (ICR.EQ.1) THEN
ST=1
CALL
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,J
FACEVECTOR(I,1,:),MO,DP,RO2)
WRITE(*,*) 'PARTICLE CROSS BOUNDARY', ST,'IN
COORDINATES',XCROS,YCROS
RETURN
ENDIF
!J=NJ - WALL ST=2
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(I,NJ),Y(I,NJ),X(I+1,NJ),Y(I+1,NJ),XCROS,YCR
OS,ICR)
IF (ICR.EQ.1) THEN
ST=2
37
CALL
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,J
FACEVECTOR(I,NJ,:),MO,DP,RO2)
WRITE(*,*) 'PARTICLE CROSS BOUNDARY', ST,'IN
COORDINATES',XCROS,YCROS
RETURN
ENDIF
ENDDO
!I=1 - INLET ST=3
DO J=1,NJ-1
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(1,J),Y(1,J),X(1,J+1),Y(1,J+1),XCROS,YCROS,I
CR)
IF (ICR.EQ.1) THEN
ST=3
RETURN
ENDIF
!I=NI - OUTLET ST=4
CALL
CROSS_EDGES(X_M,Y_M,X_M1,Y_M1,X(NI,J),Y(NI,J),X(NI,J+1),Y(NI,J+1),XCROS,YCR
OS,ICR)
IF (ICR.EQ.1) THEN
ST=4
RETURN
ENDIF
ENDDO
End Subroutine
SUBROUTINE CROSS_EDGES(AX,AY,BX,BY,CX,CY,DX,DY,XCROS,YCROS,ICR)
REAL AX,AY,BX,BY,CX,CY,DX,DY,YCROS,XCROS
INTEGER ICR
!LOCAL
REAL T,U,EPS,DENOM,NUM_T,NUM_U
REAL P(2),R(2),Q(2),S(2)
EPS=1.0e-15
! LINE AB
P(1)=AX
P(2)=AY
R(1)=BX-AX
R(2)=BY-AY
! LINE BC
Q(1)=CX
Q(2)=CY
S(1)=DX-CX
S(2)=DY-CY
DENOM=R(1)*S(2)-R(2)*S(1)
NUM_T=(Q(1)-P(1))*S(2)-(Q(2)-P(2))*S(1)
NUM_U=(P(1)-Q(1))*R(2)-(P(2)-Q(2))*R(1)
IF (ABS(DENOM).LT.EPS) THEN
IF (ABS(NUM_U).GT.EPS) THEN
RETURN !PARALLEL LINES
ELSE
38
ICR=1
XCROS=BX
YCROS=BY
RETURN
ENDIF
ENDIF
! FIND INTERSECTION
T=NUM_T/DENOM
U=NUM_U/(-DENOM)
IF ((T.LE.(1+EPS).AND.T.GE.-EPS).AND.(U.LE.(1+EPS).AND.U.GT.-EPS)) THEN
ICR=1
XCROS=(P(1)+T*R(1))
YCROS=(P(2)+T*R(2))
ENDIF
END SUBROUTINE
!SUBROUTINE
REFLECT(AX,AY,BX,BY,CX,CY,DX,DY,U_M,V_M,W_M,U_M1,V_M1,W_M1,FACEVEC
TOR)
SUBROUTINE
REFLECT(XCROS,YCROS,X_M,Y_M,X_M1,Y_M1,U_M,V_M,W_M,U_M1,V_M1,W_M1,F
ACEVECTOR,MO,DP,RO2)
REAL XCROS,YCROS,X_M1,Y_M1,DP,RO2,X_M,Y_M
REAL U_M,V_M,W_M,U_M1,V_M1,W_M1,FACEVECTOR(2),F(2)
REAL NV(2),TV(2),D,VN,VTAU,MP,I,PI
INTEGER MO
D=SQRT(FACEVECTOR(1)**2+FACEVECTOR(2)**2)
NV(1)=-FACEVECTOR(1)/D !UNIT NORMAL (INNER) VECTOR
NV(2)=-FACEVECTOR(2)/D
TV(1)=-NV(2)
TV(2)=NV(1)
!COORDINATES
XYN=(X_M1-XCROS)*NV(1)+(Y_M1-YCROS)*NV(2)
XYTAU=(X_M1-XCROS)*TV(1)+(Y_M1-YCROS)*TV(2)
X_M1=XYTAU*TV(1)-XYN*NV(1)+XCROS
Y_M1=XYTAU*TV(2)-XYN*NV(2)+YCROS
!VELOCITY
VN=U_M*NV(1)+V_M*NV(2)
VTAU=U_M*TV(1)+V_M*TV(2)
IF (MO.EQ.1) THEN
U_M1=(VTAU*TV(1)-VN*NV(1))
V_M1=(VTAU*TV(2)-VN*NV(2))
W_M1=0.0
ELSE
PI = 3.141592
!MASS
MP = 4.0/3.0*PI*(0.5*DP)**3*RO2
!MOMENT OF INERTIA
I = PI*DP**5*RO2
U_M1 = (VTAU*TV(1)-VN*NV(1))*0.7
V_M1 = (VTAU*TV(2)-VN*NV(2))*0.7
39
F(1) = (U_M1-U_M)*MP
F(2) = (V_M1-UVM)*MP
W_M1 = W_M + ((XCROS-X_M)*F(2)-(YCROS-Y_M)*F(1))/I
ENDIF
END
CALCULATION FORCES
Subroutine
C_FORCE(RO1,RO2,MU,DP,U_M,V_M,W_M,V_P,V_G,FX,FY,MZ,DT,IT,NI,NJ,IP,JP,V,GR
ADP,ROTV,NT)
INTEGER IP,JP,NI,NJ,IT,NT,IB
REAL RO1,RO2,MU,DP,U_M,V_M,W_M,FX,FY,MZ,DT,EPS
REAL GRADP(0:NI,0:NJ,2),V(0:NI,0:NJ,2),ROTV(0:NI,0:NJ),V_P(0:NT,2),V_G(0:NT,2)
REAL VR,REP,PI,F,MP,I,FA(2),FD(2),FG(2),FM(2),FAD(2),FB(2),FC(2)
EPS = 1E-4
PI = 3.141592
!MASS
MP = 4*PI*(0.5*DP)**3*RO2/3
!MOMENT OF INERTIA
I = PI*DP**5*RO2/60
!STOKES FORCE
VR = sqrt((U_M-V(IP,JP,1))**2+(V_M-V(IP,JP,2))**2)
REP = DP*RO1*VR/MU
F = 1+0.179*sqrt(REP)+0.013*REP
FD(1) = F*MU*18*(V(IP,JP,1)-U_M)/((DP**2)*RO2)
FD(2) = F*MU*18*(V(IP,JP,2)-V_M)/((DP**2)*RO2)
!ARCHIMEDES FORCE
FA(1) = -4*PI*(0.5*DP)**3*GRADP(IP,JP,1)/(3*MP)
FA(2) = -4*PI*(0.5*DP)**3*GRADP(IP,JP,2)/(3*MP)
!MAGNUS FORCE
FM(1)=-PI*DP**3*RO1*(V(IP,JP,2)-V_M)*(0.5*ROTV(IP,JP)-W_M)/(8*MP)
FM(2)= PI*DP**3*RO1*(V(IP,JP,1)-U_M)*(0.5*ROTV(IP,JP)-W_M)/(8*MP)
!SEFFMAN FORCE
IF (ABS(ROTV(IP,JP)).GT.EPS) THEN
FC(1)=(1.61*DP**2*SQRT(MU*RO1/ABS(ROTV(IP,JP)))*( (V(IP,JP,2)-V_M)*W_M))/MP
FC(2)=(1.61*DP**2*SQRT(MU*RO1/ABS(ROTV(IP,JP)))*(-(V(IP,JP,1)-U_M)*W_M))/MP
ELSE
FC(:)=0.0
ENDIF
!FORCE OF THE ADDED MASSES
FAD(1)=-(2*PI*(0.5*DP)**3*RO1)*FX/(3*MP)
FAD(1)=-(2*PI*(0.5*DP)**3*RO1)*FY/(3*MP)
!BASSE FORCE
FB(:)=0.0
IF (IT.GT.0) THEN
DO IB=1,IT
FB(:)= FB(:)+3*DP**2*SQRT(PI*RO1*MU)*((V_P(IB,:)-V_G(IB,:))-(V_P(IB-1,:)-V_G(IB-
1,:)))/(2*MP*SQRT(IT*DT-(IB-1)*DT))
ENDDO
40
ENDIF
!MOMENTUM
MZ=8*PI*MU*(DP*0.5)**3*(0.5*ROTV(IP,JP)-W_M)/I
!GRAVITY
FG(1)=0.0
FG(2)=0.0
! SUM
FX=FD(1)+FG(1)+FA(1)+FM(1)+FAD(1)+FC(1)+FB(1)
FY=FD(2)+FG(2)+FA(2)+FM(2)+FAD(2)+FC(2)+FB(2)
WRITE(2,*)
IT,IT*DT,SQRT(FD(1)**2+FD(2)**2),SQRT(FA(1)**2+FA(2)**2),SQRT(FM(1)**2+FM(2)*
*2),&
SQRT(FC(1)**2+FC(2)**2),SQRT(FAD(1)**2+FAD(2)**2),SQRT(FB(1)**2+FB(2)**2),MZ
End Subroutine
OUTPUT
Subroutine B_OutputFields(NI,NJ,X,Y,P,V,GradP,rotV)
REAL,Dimension(NI,NJ):: X,Y
REAL,Dimension(0:NI,0:NJ)::P,rotV
REAL,Dimension(0:NI,0:NJ,2)::GradP, V
Write(1,*) 'VARIABLES ="X","Y","P","GradPx","GradPy","Vx","Vy","rotV"'
Write(1,*) 'ZONE I=',NI,', J=',NJ,', DATAPACKING=BLOCK, VARLOCATION=([3-
8]=CELLCENTERED)'
Write(1,'(100F14.7)') X(1:NI,1:NJ)
Write(1,'(100F14.7)') Y(1:NI,1:NJ)
Write(1,'(100F14.7)') P(1:NI-1,1:NJ-1)
Write(1,'(100F14.7)') GradP(1:NI-1,1:NJ-1,1)
Write(1,'(100F14.7)') GradP(1:NI-1,1:NJ-1,2)
Write(1,'(100F14.7)') V(1:NI-1,1:NJ-1,1)
Write(1,'(100F14.7)') V(1:NI-1,1:NJ-1,2)
Write(1,'(100F14.7)') RotV(1:NI-1,1:NJ-1)
End Subroutine
INPUT
block1.msh
solution.plt
41
Список литературы
42