График дүрслэлийн Нюфлот програмыг Фортранаас дуудаж ажиллуулах нь
"Тавдугаар хэсэг"
Нюфлот буюу Gnuplot гээд програмыг эрдэмтэд, судлаачид мэдээлэл, өгөгдөл, үр дүнгүүдээ дүрсжүүлэх, график зурахад өргөн ашигладаг. Нюфлотын тухай хэд хэдэн нийтлэл байгаагаас (Gnuplot posts) яг яаж ажиллуулах, яаж график зурах талаар энд нарийн дурьдсан байгаа.
Сүүлийн үеийн дэвшилтэт програмчлалын хэлнүүд C++, Python, R, Java, C# болон бусад хэрэгсэлүүд болох Mathlab, Matematica, LabVIEW гэх мэт өөрсдөө мэдээллийг дүрсжүүлэх боломжуудтай байдаг. Гэтэл зорилгоосоо хамаараад зарим хэлнүүдэд мэдээллийг дүрсжүүлэх боломжгүй байдаг (Коммандын мөр дээр тоогоор зурахыг эс тооцвол шүү дээ). Ийм хэлнүүдийг ашиглаж мэдээ шинжлэх, тооцоолол үйлдэх зэрэг ажлууд хийж байгаа бол үр дүнгүүдийг өөр нэг програмын буюу дээр дурьдсан хэрэгслүүдийн тусламжтайгаар зураглах шаардлага гарна. Мэдээж мэдээг дүрсжүүлэх Нюфлоттой ижил маш олон нээлттэй, лицензтэй програмууд (жагсаалтын эндээс хар) байгаа гэдгийг мэдэж байх хэрэгтэй. Нюфлот бол нээлттэй, маш хүчирхэг, энгийн, олон програмтай хамтарч ажиллах боломжтой, сэтгүүлийн стандартад нийцсэн зураглал үйлдэх боломжтой гэх мэт давуу талуудаараа хэрэглэгчдийг их татдаг байх. Энэ ч утгаа анх Нюфлотыг сурж ашиглаж ирсэн юм. Гэхдээ Фортран дээр тооцоо хийж үр дүнгүүдээ хэвлэж файл болгоод уг файлуудаа дуудаж Нюфлот дээр график зурдаг байсан юм. Өөрөөр хэлбэл доорхи зурган дээрх шиг 2 консоль нээчихээд л үзэж дардаг байсан гэсэн үг.
![]() |
Фортран болон Нюфлотын консолиуд. |
Үнэндээ бол Нюфлотын кодыг фортранд шигтгэж өгөх, эсвэл Нюфлотыг фортранаас дуудах боломжтой гэдгийг мэддэг ч зүгээр л зориглож хийдэггүй байлаа л даа. Энэ удаад яаж Нюфлотыг фортранаас дуудаж ажиллуулах талаар тайлбарлана. Үнэндээ маш амархан эд байсан байна лээ.
Боомтын шүүрэлтийн тооцоогоор шүүрэлтийн усны бууралтын муруйг Дюпигийн тэгшитгэлээр (Dupuit equation) бодож, шүүрэлтийн усны хэмжээ болон бат бэхийг тус тус шалгана.
Тооцоо хийх фортран кодыг оруулбал:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
! Шүүрэлтийн тооцоо хийх фортран програм | |
! Кодолсон Б.Аюурзана 2018 он | |
! Лекцийн бодлого 1 | |
! Ус үл нэвтрүүлэх буурьтай, нэгэн төрлийн шороон боомт | |
program Shuurelt | |
parameter (m=1000000, alh=0.0001) | |
real Hb, Ht, bb, m1, m2, deltl, btaw, ntaw | |
real kq, lsh, vgar, vzuw | |
real h1, h(m), l(m), ho | |
real qsh | |
print*, "Boomtiin undur, Hb [m]" | |
read(*,*) Hb | |
print*, "Boomtiin turelt, Ht [m]" | |
read(*,*) Ht | |
print*, "Boomtiin hyriin urgun, bb [m]" | |
read(*,*) bb | |
print*, "Boomtiin deed dood naluu, m1, m2" | |
read(*,*) m1, m2 | |
print*, "Tawtsangiin urgun, too- bt, nt" | |
read(*,*) btaw, ntaw | |
print*, "Ikh biye shuureltiin coef, kq [m/s]" | |
read(*,*) kq | |
print*, "Dood hashits dahi usnii gun, ho [m]" | |
read(*,*) ho | |
open(33,file='xy.dat') | |
open(32,file='damsize.dat') | |
! Бодолт | |
! Босоо шугамын байрлал | |
deltl=(m1/(2.*m1+1.))*Ht | |
print*, "Tenhlegiin bairlal d_L", deltl, "[m]" | |
! тооцооны хэсгийн урт | |
lsh=deltl+m1*(Hb-Ht)+bb+btaw*ntaw+Hb*m2 | |
print*, "Tootsoonii hesgiin urt", lsh, "[m]" | |
h1=lsh/m2-sqrt((lsh/m2)**2-(Ht-ho)**2) | |
print*, "Shuureltiin usnii garah undur, h1", h1 | |
! шүүрэлтийн усны зарцуулга | |
qsh=kq*(Ht**2-h1**2)/(2.*(lsh-m2*h1)) | |
print*, "Huwiin zartsuulga q=", qsh, "[m3/s.m]" | |
l=0. | |
h(1)=0. | |
do i=1,m | |
h(i)=sqrt(Ht**2-2.*qsh*l(i)/kq) | |
write(33,*) l(i)+ht*m1-deltl, h(i) | |
if(l(i).ge.lsh-m2*h1) then | |
i_gar=i | |
go to 22 | |
else | |
l(i+1)=l(i)+100.*alh | |
end if | |
end do | |
! 22 vgar=kq*(h(i_gar-10)-h(i_gar-20))/(l(i_gar-20)-l(i_gar-10)) | |
22 vgar= | |
& kq*(h(i_gar)-h(i_gar-i_gar/100))/(l(i_gar-i_gar/100)-l(i_gar)) | |
print*, "Iteration number", i_gar | |
vzuw=sqrt(kq/15./m2) | |
if(vgar.gt.vzuw) then | |
print*, "Siiregjilt uusne. Garaltiin hurd=", vgar, "[m/day]" | |
print*, " Zuwshuurugduh hurd=", vzuw, "[m/day]" | |
else | |
print*, "Siiregjilt uusehgui. Garaltiin hurd=", vgar, "[m/day]" | |
print*, " Zuwshuurugduh hurd=", vzuw, "[m/day]" | |
end if | |
write(33,*) lsh+ht*m1-deltl, ho | |
! Геометр бичилт | |
write(32,*) ht*m1, ht | |
write(32,*) 0, ht | |
write(32,*) 0, 0 | |
write(32,*) hb*m1, hb | |
write(32,*) hb*m1+bb, hb | |
write(32,*) hb*m1+bb+hb*m2, 0 | |
call system("gnuplot -plot xy.plt") | |
close (33) | |
close (32) | |
end program Shuurelt |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # Шүүрэлтийн муруйн ординат тодорхойлох график зурах reset set term pngcairo set output 'xy.png' m="./xy.dat" n="./damsize.dat" set ylabel "Шүүрэлтийн муруйн ординат, м" set xlabel "Тооцооны хэсгийн урт, м" set size ratio -1 set grid set title 'Шүүрэлтийн усны бууралтын муруй' set key right plot n u 1:2 with linespoints ls 2 lw 2 title "Боомт", \ m u 1:2 with linespoints ls 1 lc 3 title "h=f(l)" set term win unset output |
Фортран ажиллаж байхдаа дээрх кодыг дуудна. Дуудсаны дагуу Нюфлот ажиллаж график зурж харуулна. Зурсан график нь xy.png гэсэн файл бөгөөд түүнийг харвал:
![]() |
Нэгэн төрлийн шороон боомтын дотуурх шүүрэлтийн усны бууралтын муруй |
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
DeleteСайн уу. ФБ-ээр холбогдож програмаа асуусан хүн мөн үү. Би тун завгүй байгаа учир сайн зөвлөгөө өгч чадахгүй байхаа. Ямар ч байсан тасралтгүй оролдоод байвал хосолсон хөтөлбөрөө дуусгаж чадна шүү.
Delete