Anda di halaman 1dari 14

Penyelesaian persamaan momentum dan persamaan kontinuitas secara

numerik

Abreviasi
𝑎 = percepatan (m/s2)

𝑉̂ = kecepatan dalam bentuk vektor (m/s) = 𝑢𝑖̂ + 𝑣𝑗̂ + 𝑤𝑧̂

𝑢 = kecepatan dalam sumbu x (m/s)

𝑣 = kecepatan dalam sumbu y (m/s)

𝑤 = kecepatan dalam sumbu z (m/s)

𝑋, 𝑌, 𝑍 = gaya berat sendiri (body force) (kg/m3 m/s2)

𝜗 = volume fluida (m3)

Referensi:

Dean, R.G., & Dalrymple, R.A., (1991) Water wave mechanics for engineers and scientists. World Scientific Publishing Co. Re.
Ltd.

Lemos, C.M. (1993) FDFLOW: a Fortran-77 solver for 2-d incompressible fluid flow. Computers & Geosciences Vol. 20, No. 3,
pp. 265-291.

Newman, J. N. (2018). Marine hydrodynamics (p. 448). The MIT press.

Munson, B. R., Okiishi, T. H., Huebsch, W. W., & Rothmayer, A. P. (2013). Fluid mechanics . Singapore: Wiley.

Ghia, U. K. N. G., Ghia, K. N., & Shin, C. T. (1982). High-Re solutions for incompressible flow using the Navier-Stokes
equations and a multigrid method. Journal of computational physics, 48(3), 387-411.

Pengantar.

Lecture note ini berisi ringkasan pengantar hidrodinamika yang mengkhususkan pada pembahasan persamaan kontinuitas dan
persamaan momentum. Kedua persamaan tersebut memegang posisi penting dalam memahami gerakan fluida yang merupakan
bekal utama bagi siapapun yang ingin menguasai subjek hidrodinamika. Selain itu, catatan kuliah ini juga menyajikan
penyelesaian kedua persamaan tersebut pada sebuh permasalahan nilai batas sederhana secara numerik.

Buklet ini juga merupakan bagian dari ikhtiar al-faqir dalam meningkatkan kualitas pengajaran mata kuliah Komputasi
Hidrodinamika (KL 3252) di Teknik Kelautan Institut Teknologi Sumatera (ITERA). Selamat menikmati.

April 2021. Penulis.

1
Pendahuluan
Dalam memahami gerakan fluida, umumnya melibatkan hukum-hukum fisika sederhana yang sudah kita
pelajari semasa sekolah menengah. Hukum fisika yang dilibatkan adalah
1. Kekekalan massa
2. Kekekalan momentum
Kekekalan massa berarti bahwa suatu air pada suatu ‘wadah’ tidak bisa habis dan tidak bisa bertambah
tanpa sebab tertentu. Wadah tersebut bisa berarti bejana, kolam, bahkan bisa juga laut. Kita juga bisa
menetapkan volume imajiner dengan batas-batas ‘gaib’ dimana volume tersebut adalah sebuah sistem
yang sedang kita tinjau. Volume tersebut dapat kita andaikan tetap pada kuantitas yang sama. Jika dari
satu sisi terdapat kehilangan, maka akan diisi dari sisi lain.
Sedangkan kekekalan momentum berarti bahwa ketika fluida berpindah dari satu titik ke titik lain, fluida
akan mengalami percepatan atau perlambatan. Menurut hukum kedua Newton, gaya bersih (net force)
yang bekerja pada partikel fluida adalah sama dengan massa dikali dengan percepatannya. Kedua prinsip
tersebut akan diterjemahkan menjadi persamaan diferensial yang kemudian dicari solusinya.

Persamaan Kontinuitas

Gambar 1. Kubus referensi dalam fluida (Dean, 1991)

Dari kubus tersebut, dapat kita asumsikan, bahwa massa yang masuk dari sisi kiri adalah 𝜌𝑢. Satuan 𝜌𝑢
adalah kg/m2s, yang dapat kita anggap bahwa terdapat suatu massa (kg) yang masuk dalam suatu area
(m2) tiap detik. Menurut Gambar 1, 𝜌𝑢 mengarah ke positif x. Jika 𝜌𝑢 dikali dengan area sisi kiri (∆𝑦∆𝑧),
maka akan didapat 𝜌𝑢∆𝑦∆𝑧 dengan satuan kg/s.

Dengan ekspansi Taylor, massa yang keluar lewat sisi kanan (pada 𝑥 + ∆𝑥/2) dikurangi massa yang
masuk dari sisi kiri (pada 𝑥 − ∆𝑥/2) adalah
∆𝑥 ∆𝑥 𝜕
[𝜌𝑢 (𝑥 + )− 𝜌𝑢 (𝑥 − )] ∆𝑦∆𝑧 =− 𝜌𝑢 ∆𝑥∆𝑦∆𝑧 + 𝑂(∆𝑥)4 (1)
2 2 𝜕𝑥

dimana 𝑂(∆𝑥)4 adalah ‘residu’ yang merupakan ekspansi Taylor pada orde yang lebih tinggi yang tidak
ditampilkan untuk alasan simplisitas. Persamaan (1) adalah laju akumulasi massa bersih (net rate of mass
accumulation) pada sumbu x.

2
Prosedur yang sama dilakukan pada sumbu y dan sumbu z. Sehingga laju akumulasi massa bersih yang
memperhitungkan ketiga sumbu selama waktu ∆𝑡 didapat
𝜕 𝜕 𝜕
− 𝜌𝑢 ∆𝑥∆𝑦∆𝑧∆𝑡 − 𝜌𝑣 ∆𝑥∆𝑦∆𝑧∆𝑡 − 𝜌𝑤 ∆𝑥∆𝑦∆𝑧∆𝑡 ,
𝜕𝑥 𝜕𝑦 𝜕𝑧

yang harus sama dengan ‘pertambahan massa’ dalam waktu ∆𝑡. Pertambahan tersebut adalah 𝜌(𝑡 + ∆𝑡)
dikurangi 𝜌(𝑡) untuk volume ∆𝑥∆𝑦∆𝑧. Dengan ekspansi Taylor, pertambahan tersebut adalah
𝜕𝜌
∆𝑡 ∆𝑥∆𝑦∆𝑧 + 𝑂(∆𝑥)2 .
𝜕𝑡

Dengan hubungan di atas, laju akumulasi massa bersih adalah


𝜕𝜌 𝜕 𝜕 𝜕
∆𝑡 ∆𝑥∆𝑦∆𝑧 = − 𝜌𝑢 ∆𝑥∆𝑦∆𝑧∆𝑡 − 𝜌𝑢 ∆𝑥∆𝑦∆𝑧∆𝑡 − 𝜌𝑢 ∆𝑥∆𝑦∆𝑧∆𝑡 (2)
𝜕𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑧

Persamaan (2) dapat disederhanakan dengan mengeliminir terma ∆𝑥∆𝑦∆𝑧∆𝑡, sehingga didapat
𝜕𝜌 𝜕𝜌𝑢 𝜕𝜌𝑣 𝜕𝜌𝑢
+ + + =0 (3)
𝜕𝑡 𝜕𝑥 𝜕𝑦 𝜕𝑥

Untuk fluida inkompresibel, dimana tidak ada perubahan 𝜌 secara waktu dan secara spasial, persamaan
(3) dapat disederhanakan menjadi
𝜕𝑢 𝜕𝑣 𝜕𝑢
+ + =0 (4)
𝜕𝑥 𝜕𝑦 𝜕𝑥

Persamaan Momentum
Persamaan momentum diperoleh dengan statika sederhana pada sebuah balok kontinuum dari sebuah
volume fluida (Gambar 2). Pada gambar tersebut tekanan normal adalah

Gambar 2. Tekanan pada permukaan kubus fluida (gaya normal (Dean, 1991)

Gaya-gaya yang bekerja pada balok adalah:

1. Gaya berat sendiri


2. Gaya pada permukaan, yang terdiri dari:
i. gaya arah normal (akibat tekanan normal) dan
ii. gaya arah tangen (akibat tekanan geser)

3
Gaya berat sendiri (body force) pada sumbu x, y, dan z dapat ditulis dengan 𝜌∆𝜗𝑋, 𝜌∆𝜗𝑌, dan 𝜌∆𝜗𝑍.
Dimana ∆𝜗 adalah ∆𝑥∆𝑦∆𝑧. Seperti yang kita ketahui ketika sekolah menengah, bahwa gaya adalah
massa dikali dengan percepatan (𝑚𝑎̂ atau 𝜌𝑉𝑎̂), dengan satuan newton atau kg.m/s2. Terkadang, untuk
simplisitas, suku volume dihilangkan dari gaya, sehingga menjadi 𝜌𝑎̂. Sehingga 𝑋, 𝑌, dan 𝑍 adalah dalam
satuan m/s2. Pada kasus sederhana misalnya, 𝑍 dapat dianggap sebagai percepatan akibat medan grafitasi.

Sedangkan gaya pada permukaan terdiri dari gaya normal dan gaya geser. Gaya pada permukaan pada
arah normal (dalam sumbu x) adalah 𝜎𝑥𝑥 = −𝑝 + 𝜏𝑥𝑥 . Dimana 𝑝 adalah gaya hidrostatis pada arah
normal dan 𝜏𝑥𝑥 gaya geser pada arah normal. Gaya 𝜎𝑥𝑥 bekerja pada bidang ∆𝑦∆𝑧.

Dengan statika sederhana dan prinsip ekspansi Taylor, pada arah x, gaya normal adalah
𝜕𝜎𝑥𝑥 ∆𝑥 𝜕𝜎𝑥𝑥 ∆𝑥
𝜎𝑥𝑥 + ∆𝑦∆𝑧 − (𝜎𝑥𝑥 − ∆𝑦∆𝑧)
𝜕𝑥 2 𝜕𝑥 2

dan gaya geser 𝜏𝑦𝑥 dan 𝜏𝑧𝑥 adalah


𝜕𝜏𝑦𝑥 ∆𝑦 𝜕𝜏𝑦𝑥 ∆𝑦 𝜕𝜏𝑧𝑥 ∆𝑧 𝜕𝜏𝑧𝑥 ∆𝑦
(𝜏𝑦𝑥 + ) ∆𝑥∆𝑧 − (𝜏𝑦𝑥 − ) ∆𝑥∆𝑧 + (𝜏𝑧𝑥 + ) ∆𝑥∆𝑦 − (𝜏𝑧𝑥 − ) ∆𝑥∆𝑦
𝜕𝑦 2 𝜕𝑦 2 𝜕𝑧 2 𝜕𝑧 2

Ketiga unsur gaya di atas, lalu dijumlahkan dan mengeliminasi ∆𝑥∆𝑦∆𝑧, lalu menjadi
𝜕𝜎𝑥𝑥 𝜕𝜏𝑦𝑥 𝜕𝜏𝑧𝑥
+ + + 𝜌𝑋 = ∑ 𝐹𝑥 (5)
𝜕𝑥 𝜕𝑦 𝜕𝑧

Keempat suku sisi kiri di atas adalah unsur penggerak dari gaya yang bekerja pada bidang dan gaya berat
sendiri. Penjumlahan gaya-gaya di atas adalah sama dengan percepatan fluida dikali dengan massa
𝐷𝑢
∑ 𝐹𝑥 = 𝑚
𝐷𝑡

𝐷𝑢
Dimana 𝑚 dapat direpresentasikan dengan 𝜌∆𝑉. Sedangkan adalah percepatan dalam sumbu x.
𝐷𝑡
Percepatan teresebut adalah turunan pertama kecepatan terhadap waktu 𝑑𝑉̂/𝑑𝑡. Pada sumbu y adalah
𝐷𝑣/𝐷𝑡, dan z adalah 𝐷𝑤/𝐷𝑡. Karena kecepatan adalah berubah terhadap waktu dan berubah terhadap
posisi x, y, dan z, maka turunan pertama kecepatan terhadap waktu digunakan derifatif total, yakni misal
dalam sumbu x:
𝑑𝑢 𝜕𝑢 𝜕𝑢 𝜕𝑥 𝜕𝑢 𝜕𝑦 𝜕𝑢 𝜕𝑧
= + + + (6)
𝑑𝑡 𝜕𝑡 𝜕𝑥 𝜕𝑡 𝜕𝑦 𝜕𝑡 𝜕𝑧 𝜕𝑡

Dapat dilihat, bahwa suku kedua, ketiga, dan keempat pada sisi kanan persamaan (1) mengikuti aturan
𝜕𝑥 𝜕𝑦 𝜕𝑧
turunan berantai. Turunan posisi terhadap waktu , , dan dapat ditulis juga dengan kecepatan 𝑢, 𝑣,
𝜕𝑡 𝜕𝑡 𝜕𝑡
dan 𝑤.

Dengan perlakuan yang sama, pada sumbu y dan sumbu z, percepatannya adalah
𝐷𝑣 𝜕𝑣 𝜕𝑣 𝜕𝑥 𝜕𝑣 𝜕𝑦 𝜕𝑣 𝜕𝑧
= + + + (7)
𝐷𝑡 𝜕𝑡 𝜕𝑥 𝜕𝑡 𝜕𝑦 𝜕𝑡 𝜕𝑧 𝜕𝑡

𝐷𝑤 𝜕𝑤 𝜕𝑤 𝜕𝑥 𝜕𝑤 𝜕𝑦 𝜕𝑤 𝜕𝑧
= + + + (8)
𝐷𝑡 𝜕𝑡 𝜕𝑥 𝜕𝑡 𝜕𝑦 𝜕𝑡 𝜕𝑧 𝜕𝑡

4
Persamaan (7), (6), dan (8) adalah sebuah sistem persamaan yang dipakai untuk menjelaskan fenomena
percepatan fluida. Ketiga persamaan tersebut saling terkait sehingga penyelesainnya harus melibatkan dua
(untuk kasus 2D) atau tiga (untuk kasus 3D) dari persamaan tersebut. Dalam bentuk matematis ringkas,
ketiga dapat disederhanakan menjadi
̂
𝑑𝑉 ̂
𝜕𝑉
= + 𝑉̂∇ ∙ 𝑉̂ (9)
𝑑𝑡 𝜕𝑡

dimana ∇ menunjukkan operator “divergen”, yang menunjukkan bahwa turunan parsial pertama suatu
variabel terhadap ruang, atau gradien terhadap ruang.

Persamaan gerak fluida dalam sumbu x didapat dengan menggabungkan persamaan (6) dan persamaan
(5), dengan dikerjakan untuk kasus dua dimensi (menghilangkan suku z) sehingga:
𝜕𝜎𝑥𝑥 𝜕𝜏𝑦𝑥 𝐷𝑢
+ + 𝜌𝑋 = 𝜌
𝜕𝑥 𝜕𝑦 𝐷𝑡

atau
1 𝜕𝑝 1 𝜕𝜏 𝜕𝜏𝑦𝑥 𝐷𝑢
− + ( 𝑥𝑥 + )+𝑋 =
𝜌 𝜕𝑥 𝜌 𝜕𝑥 𝜕𝑦 𝐷𝑡

Pada sumbu y
1 𝜕𝑝 1 𝜕𝜏𝑦𝑦 𝜕𝜏𝑥𝑦 𝐷𝑣
− + ( + )+𝑌 =
𝜌 𝜕𝑦 𝜌 𝜕𝑦 𝜕𝑥 𝐷𝑡

Berdasarkan Dean & Dalrymple (1991), suku tegangan geser dapat direpresentasikan dengan
1 𝜕𝜏𝑥𝑥 𝜇 𝜕2 𝑢
=
𝜌 𝜕𝑥 𝜌 𝜕𝑥 2

Sehingga didapat
𝐷𝑢 1 𝜕𝑝 𝜇 𝜕2 𝑢 𝜕2 𝑢
=− + ( + )+𝑋 (10)
𝐷𝑡 𝜌 𝜕𝑥 𝜌 𝜕𝑥 2 𝜕𝑦 2

𝐷𝑣 1 𝜕𝑝 𝜇 𝜕2𝑢 𝜕2 𝑢
=− + ( + )+𝑌 (11)
𝐷𝑡 𝜌 𝜕𝑥 𝜌 𝜕𝑥 2 𝜕𝑦 2

Persamaan gerak fluida (10) dan (11) dapat disebut sebgai persamaan Navier-Stoke, yang akan
dikombinasikan dengan persamaan kontinuitas (4) untuk menyelesaikan kasus sederhana alian fluida.

5
Contoh kasus
Kasus sederhana diterapkan pada kolam dengan aliran dari celah (lid-driven cavity flow) yang telah
dikerjakan oleh banyak insinyur dan ilmuwan. Ghia et. al. (1982) menyelesaikan kasus tersebut dengan
metode formulasi fungsi vorticity-stream dengan diskritisasi coupled strongly implicit multigrid (CSI-
MG), yang dikerjakan pada angka Reynold tinggi. Kasus yang sama juga diselesaikan oleh Lemos, C.M.
(1993) yang menggunakan skema eksplisit dan implisit, yang pada modul ini akan diadopsi.

Permasalahan nilai batas (BVP) aliran celah ditampilkan sebagai berikut:

𝑢 = 1, 𝑣 = 0

𝑉̂ . 𝑛̂ = 0 𝑉̂ . 𝑛̂ = 0

𝑉̂ . 𝑛̂ = 0

Gerak fluida diatur dengan persamaan Navier-Stoke


𝐷𝑢 1 𝜕𝑝 𝜇 𝜕2 𝑢 𝜕2 𝑢
=− + ( 2 + 2) +𝑋
𝐷𝑡 𝜌 𝜕𝑥 𝜌 𝜕𝑥 𝜕𝑦

𝐷𝑣 1 𝜕𝑝 𝜇 𝜕2𝑢 𝜕2 𝑢
=− + ( 2 + )+ 𝑌
𝐷𝑡 𝜌 𝜕𝑥 𝜌 𝜕𝑥 𝜕𝑦 2

𝜕𝑢 𝜕𝑣
yang memenuhi kondisi kontinuitas +
𝜕𝑥 𝜕𝑦

Kasus di atas diselesaikan dengan kode Fortran yang diadopsi ari Lemos, C.M. (1993) yang ditampilkan
pada Lampiran.

Kode tersebut telah dimodifikasi dan disederhakan dalam rangka pembelajaran Komputasi
Hidrodinamika. Kode Fortran terdiri dari dua file, yakni FDFLOW.FOR dan FDFLOW.INC. Keduanya
di-run pada sebuah platform compiler Fortran Powerstation 4.0. Compiler Fortran lain, yang gratis dapat
diunduh misalnya pada laman cs.yorku.ca/~roumani/fortran/ftn.htm.

6
Hasil medan kecepatan u pada t=3.0 untuk diskritisasi 20x20 misalnya, ditampilkan pada Gambar 3

Gambar 3

Perbandingan hasil perhitungan dalam pekerjaan ini dibanding dengan Ghia et.al. (1982) untuk posisi
x=10 pada seluruh y ditampilkan pada Gambar 4. Pada Gambar tersebut, tampak ada beberapa error pada
beberapa posisi j. Hal tersebut disebabkan skema diskritisasi yang sederhana yang dapat diperbaiki
dengan cara, diantaranya: memperhalus diskritisasi, merubah skema diferensiasi, atau merubah metode
secara keseluruhan.

Gambar 4.

7
Lampiran

1. FDFLOW.FOR

C =========================== Program "FDFLOW-02.FOR" ==================================


C ============== A Fortran program for computing incompressible fluid flows =========
C ===================================================================================
C adopted from Lemos, C.M. (1993)
C FDFLOW 02 - edit in momentum eq., no quadratic terms

PROGRAM FDFLOW
INCLUDE 'FDFLOW.INC'
!dimension aw(3,3)
C
C ** INITIALIZE VARIABLES AND PRINT INITIAL DATA
C
!print*, 'FB=',FB

CALL SETUP
CALL PRINTF

C
C ** START MAIN CYCLE
C
10 CONTINUE
C
C ** ADVANCE TIME
C
CALL ADVANCE

C
C ** COMPUTE TEMPORARY VELOCITIES
C
CALL STEP1

C
C ** COMPUTE ADVANCE-TIME VELOCITIES AND PRESSURE
C
CALL STEP2

C
C ** PRINT CYCLE INFORMATION & FIELD VARIABLES
C

CALL PRINTF

IF (T.GT.TWFIN) STOP 'End of Program'


GOTO 10
END

C --------------------------------------

SUBROUTINE ADVANCE
INCLUDE 'FDFLOW.INC'

C
C ** ADVANCE TIME
C
DO 10 I=1,IMAX

8
DO 10 J=1,JMAX
UN(I,J)=U(I,J)
VN(I,J)=V(I,J)
10 CONTINUE

T=T+DELT
CYCLE=CYCLE+1

!print*, 't+delt',t,' cycle+1',cycle

RETURN
END

C --------------------------------------

SUBROUTINE BCEXP
INCLUDE 'FDFLOW.INC'
C
C ** SET BOUNDARY CONDITIONS WHEN VELOCITY IS CALCULATED EXPLICITLY
C ** BC'S MUST BE CODED BY HAND FOR EACH SPECIFIC PROBLEM
C
DO 200 J=1,JMAX
U(1,J)=0.0
V(1,J)=-V(2,J)
U(IM1,J)=0.0
V(IMAX,J)=-V(IM1,J)

200 CONTINUE
C
DO 500 I=1,IMAX
V(I,JM1)=0.0
U(I,JMAX)=2.0-U(I,JM1)
V(I,1)=0.0
U(I,1)=-U(I,2)

500 CONTINUE

RETURN
END

C --------------------------------------

C BCIMP (deleted)

C --------------------------------------

SUBROUTINE PRINTF
INCLUDE 'FDFLOW.INC'
CHARACTER*11 FILENAME,fd

fd='fdf02.int'
open(45,file=fd,status='unknown')

C
C ** PRINT CYCLE INFORMATION AND FIELD VARIABLES
C

!WRITE(*,50) ITER,T,CYCLE

IF (CYCLE.LE.0.OR.T+1.E-06.GE.TWPRT) THEN

9
write(*,51) T,CYCLE

FILENAME=' '
FILENAME(1:4)='FLOW'
WRITE(FILENAME(5:7),46) PRCOUNT+100
FILENAME(8:11)='.OUT'
OPEN(IO,FILE=FILENAME,STATUS='UNKNOWN')

!write(io,*) iter
WRITE (IO,40) ITER
WRITE (IO,41) T
WRITE (IO,42) CYCLE
WRITE (IO,47)

DO 20 I=1,IMAX
DO 20 J=1,JMAX
WRITE(IO,48) I,J,U(I,J),V(I,J),P(I,J)

C write INT File for Matlab plot


if (cycle.eq.400) then
write(45,101) i,j,u(i,j),v(i,j),p(i,j); endif
101 format(2(1x,i3),3(1x,1f12.5))

20 CONTINUE

CLOSE(IO)

TWPRT=TWPRT+PRTDT
PRCOUNT=PRCOUNT+1

ENDIF

RETURN

40 FORMAT(I8,' ITER')
41 FORMAT(F8.3,' T')
42 FORMAT(I8,' CYCLE')
46 FORMAT(I3)
47 FORMAT(3X,'I',3X,'J',7X,'U',12X,'V',13X,'P')
48 FORMAT(2(1X,I3),3(1X,1PE12.5))
50 FORMAT(10X,'ITER=',I5,10X,'TIME=',1PE12.5,10X,'CYCLE=',I6)
51 FORMAT(10X,'Print: time=',f5.1,10X,'cycle=',I6)

END

C-----------------------------------------------

SUBROUTINE SETUP
INCLUDE 'FDFLOW.INC'
C
C ** READ INPUT PARAMETERS
C
OPEN(IO,FILE='fdf02.dat',STATUS='OLD')
READ (IO,*) IBAR
READ (IO,*) JBAR
READ (IO,*) DELX
READ (IO,*) DELY
READ (IO,*) DELT
READ (IO,*) UI
READ (IO,*) VI
READ (IO,*) TWFIN
READ (IO,*) PRTDT

10
READ (IO,*) OMG
READ (IO,*) NU
READ (IO,*) GX
READ (IO,*) GY
READ (IO,*) EPSI
READ (IO,*) METHOD
CLOSE(IO)

C
C ** COMPUTE MODEL PARAMETERS AND INITIALISE CONTROL VARIABLES
C
IMAX=IBAR+2
JMAX=JBAR+2
IM1=IMAX-1
JM1=JMAX-1
RDX=1.0/DELX
RDY=1.0/DELY
T=0.0
ITER=0
CYCLE=0
TWPRT=0.0
BETA=OMG/(2.0*DELT*(RDX*RDX+RDY*RDY))
PRCOUNT=0
SX=NU*DELT*RDX**2
ST=NU*DELT*RDY**2
DTDX=DELT*RDX
DTDY=DELT*RDY
C
C ** SET INITIAL U,V, AND P FIELDS
C
DO 10 I=2,IM1
DO 10 J=2,JM1
U(I,J)=UI
V(I,J)=VI
P(I,J)=0.0
10 CONTINUE

CALL BCEXP

RETURN
END

C--------------------------------------------

SUBROUTINE STEP1
INCLUDE 'FDFLOW.INC'

character*11 mut

C
C ** COMPUTES TEMPORARY VELOCITIES USING THE OLD PRESSURE GRADIENT
C
C GOTO (1000,2000) METHOD
1000 CONTINUE
C
C ** EXPLICIT METHOD (METHOD = 1)
C
DO 10 J=1,JM1
DO 10 I=1,IM1
XFLUX(I+1,J)= P(I+1,J)+0.5*UN(I,J)*UN(I+1,J)
& -NU*RDX*(UN(I+1,J)-UN(I,J))
YFLUX(I,J+1)= VN(I,J)*UN(I,J)

11
& -NU*RDY*(UN(I,J+1)-UN(I,J))

10 CONTINUE

DO 20 J=2,JM1
DO 20 I=2,IM1-1
U(I,J)= UN(I,J)+DELT*(-RDX*(XFLUX(I+1,J)-XFLUX(I,J))
& -RDY*(YFLUX(I,J+1)-YFLUX(I,J))+GX)
20 CONTINUE

DO 30 J=1,JM1
DO 30 I=1,IM1

XFLUX(I+1,J)= VN(I,J)*UN(I,J)
& -NU*RDX*(VN(I+1,J)-VN(I,J))
YFLUX(I,J+1)= P(I,J+1)+0.5*VN(I,J)*VN(I+1,J)
& -NU*RDY*(VN(I,J+1)-VN(I,J))

30 CONTINUE

DO 40 J=2,JM1-1
DO 40 I=2,IM1
V(I,J)=VN(I,J)+DELT*(-RDX*(XFLUX(I+1,J)-XFLUX(I,J))
& -RDY*(YFLUX(I,J+1)-YFLUX(I,J))+GY)
40 CONTINUE

CALL BCEXP

! print matrix temporary u

mut='utemp.mat'
open(46,file=mut,status='unknown')

write(46,*) 'u step 1, time=',t,'cycle=',cycle,' iter=',iter


write(46,*) 'im1=',im1,' jm1=',jm1
do 41 i=2,im1-1
write(46,99) (u(i,j),j=2,jm1)
99 format(25f12.5/)
41 continue

RETURN

!RETURN

END

C-----------------------------------------------------------

SUBROUTINE STEP2
INCLUDE 'FDFLOW.INC'

character*11 muf
C
C ** ITERATIVELY ADJUSTS PRESSURE AND VELOCITIES
C
ITER=0
FLAG=1.0

5 IF(FLAG.EQ.0.0) GOTO 30

12
ITER=ITER+1

IF(ITER.GT.5000) STOP 'Pressure failed to converge'

10 FLAG=0.0
C
C ** COMPUTE UPDATED CELL PRESSURE AND VELOCITIES
C
DO 20 J=2,JM1
DO 20 I=2,IM1
D=RDX*(U(I,J)-U(I-1,J))+RDY*(V(I,J)-V(I,J-1))
IF(ABS(D).GE.EPSI) FLAG=1.0
DELP=-BETA*D
P(I,J)=P(I,J)+DELP
U(I,J)=U(I,J)+DELT*RDX*DELP
U(I-1,J)=U(I-1,J)-DELT*RDX*DELP
V(I,J)=V(I,J)+DELT*RDY*DELP
V(I,J-1)=V(I,J-1)-DELT*RDY*DELP
20 CONTiNUE
C
C ** SET BOUNDARY CONDITIONS
C
CALL BCEXP

! print matrix final u

muf='ufin.mat'
open(47,file=muf,status='unknown')

write(47,*) 'u step 2, time=',t,'cycle=',cycle,' iter=',iter


write(47,*) 'im1=',im1,' jm1=',jm1
do 42 i=2,im1
write(47,98) (u(i,j),j=2,jm1)
98 format(25f12.5/)
42 continue

GOTO 5

30 RETURN
END

C----------------------------------------------------------

C TRIDAG (deleted)

2. CONFIG.FOR
C ================= FDFLOW.INC ======================
C INCLUDE file containing global variables for FDFLOW.FOR and FPLOT.FOR
C ===================================================

PARAMETER (IBAR2=102,JBAR2=102,FB=101)
PARAMETER (IO=0)
REAL NU
REAL*8 T
INTEGER*4 CYCLE,PRCOUNT
COMMON UN(IBAR2,JBAR2), VN(IBAR2,JBAR2), U(IBAR2,JBAR2),
& V(IBAR2,JBAR2), P(IBAR2,JBAR2), XFLUX(IBAR2,JBAR2),
& YFLUX(IBAR2,JBAR2), IBAR, JBAR, IMAX, JMAX,
& IM1, JM1, DELX, DELY, RDX, RDY, DELT, UI, VI, TWFIN, TWPRT,

13
& PRTDT, OMG, BETA, T, ITER, CYCLE, NU, GX, GY, EPSI, METHOD,
& PRCOUNT, BBX(IBAR2), DDX(IBAR2), AAX(IBAR2), RHSX(IBAR2),
& BBY(JBAR2), DDY(JBAR2), AAY(JBAR2), RHSY(JBAR2),
& SX, SY, DTDX, DTDY

C ---------------
C
C INPUT PARAMETERS (READ FROM FILE "FDFLOW.DAT"):
C
C IBAR : NUMBER OF CELLS IN THE X-DIRECTION
C JBAR : NUMBER OF CELLS IN THE Y-DIRECTION
C DELX : MESH SPACING ALONG THE X-DIECTION
C DELY : MESH SPACING ALONG THE Y-DIRECTION
C DELT : TIME STEP
C UI : X-COMPONENT OF VELOCITY USED FOR INITIALIZING MESH
C VI : Y-COMPONENT OF VELOCITY USED FOR INITIALIZING MESH
C TWFIN : PROBLEM TIME TO END CALCULATION
C PRTDT : TIME INCREMENT BETWEEN SUCCESSIVE OUTPUTS
c OMG : OVER-RELAXATION FACTOR USED IN THE PRESSURE ITERATION
C NU : KINEMATIC VISCOSITY
C GX : BODY ACCELERATION ALONG POSITIVE X-DIRECTION
C GY : BODY ACCELERATION ALONG POSITIVE Y-DIRECTION
C EPSI : PRESSURE ITERATION CONVERGENCE CRITERION

14

Anda mungkin juga menyukai