Микро-хэмжээст сүвэрхэг орчинг дурын түгэлтээр байгуулах тухай (Generation of pore scale porous media by random distribution)
Шинжлэх ухаан, судалгааны ажилтай холбоотой нийтлэл бичилгүй зэвэрсэн нэг жилийг ардаа өнгөрөөжээ. Шинэ юм нэг ч хийгээгүй, шинэ зүйл нэг ч сураагүй юм байна. Гэхдээ хийсэн зүйл их байв ч сэтгэлд аз жаргал мэдрэгдэхгүй нь тун харамсалтай. Алдсан нэг жилээ нөхөхийн тулд хийж байсан бүх зүйлээ, хатуу дискнийхээ хавтас бүрийг шалгаж юу хийж байснаа эргэн харлаа. Гэтэл 2015 оны 10 сард нэг сонирхолтой програм бичсэн байж. Тэр үед сүвэрхэг орчин дотуурх шүүрэлтийн урсгалыг сүлжээний Больцманны арга ашиглан загварчлах гэж оролдож байсан ба тооцооны үндсэн өгөгдөл болох сүвэрхэг орчны геометрийн шинж чанарыг бий болгох програм бичсэн юм байна. Нээх хэрэгтэй програм биш ч дурын/санамсаргүй түгэлт (random distribution), дурын/санамсаргүй тоо үүсгэгчийг (random number generation) ашиглах нэг жишээ юм болов уу гэж бодоод хуваалцая.
Сүвэрхэг орчны хамгийн энгийн жишээ бол хөрс юм. Өөр энгийн жишээ гэвэл аяга, шил угаадаг бамбалзуур, хувцас хунар, янз бүрийн барилгын материал, цаас гэх мэт ус уудаг, нордог зүйлсийг л хэлнэ дээ. Инженерчлэлд бол сүвэрхэг орчинг, түүний дотор урсах шингэн, түүгээр дамжих дулаан зэргийг тооцон бодох загварчлах олон шаардлага гардаг. Математик болон тоон загвар зохиосоны дараагаар түүнийг турших шаардлага гарна. Янз бүрийн зохиомол бодлого бодох шаардлага гарна. Өгөгдлүүдээ өөрчлөх шаардлага гарна. Тухайлбал хөрсөн дотуур шүүрэх шүүрэлтэнд хөрсний ширхэглэл, барьцалдах чанар, ус шингээх чанар, ус нэвтрүүлэх чанар, сүвэрхэгшилт гээд олон зүйл нөлөөлнө. Эдгээр бүх зүйлийн янз бүрийн өөрчлөлтөнд загвар түйртэлгүй ажиллаж байвал амьдрал дээрх аливаа асуудлыг шийдэх боломжтой гэсэн үг л дээ.
Асуудал юу байсан бэ гэвэл загвараа туршихад надад олон төрлийн сүвэрхэгшилттэй, янз бүрийн хэлбэртэй хоосон орон зайтай сүвэрхэг орчин хэрэг болж л дээ. Түүнийг богино хугацаанд бий болгохын тулд санамсаргүй тоо үүсгэгч функцыг ашиглах санаа гарч. Тэгээд бичсэн программ нь энэ байна.
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 | program geogen parameter(nx=100, ny=50, m=300) ! m -ийн оронд дурын тооны хэмжээг өгнө. real x(m), y(m) ! m тооны дурын х, у координат integer s_in(nx,ny) integer c open(1,file='geodat.dat') open(2,file='geodat1.dat') call system_clock(count=c) call random_seed(put=(/c/)) nn=0 do n=1,m call random_number(xx) call random_number(yy) nn=nn+1 x(n)=xx*100 y(n)=yy*50 enddo do n=1,m write(2,*) x(n), y(n) enddo do i=1,nx do j=1,ny s_in(i,j)=0 enddo enddo do n=1,m xp=int(x(n)) yp=int(y(n)) s_in(xp,yp)=1 enddo do j=ny,1,-1 write(1,100) (s_in(i,j), i=1,nx) 100 format (500I1) enddo open(11,file='geo_out.dat') do j=ny,1,-1 write(11,'(500e12.4)') (real(s_in(i,j)), i=1,nx) enddo close (11) end program |
Жишээ нь бидний НӨӨӨТ-ийн татвар дээр байдаг QR код дахин давтагдашгүй хэв зүйтэй байдаг бөгөөд түүнийг мөн энэхүү дурын тоо үүсгэгчийн тусламжтайгаар гүйцэтгэх боломжтой. Дээрх кодны 8-р мөрөнд байгаа call system_clock нь фортран хэлний нэг функц бөгөөд процессорын тухайн цагнаас хамааралтай тоог авч байгаа юм. Тэгэхээр одоо явж байгаа цаг хугацаа бол давтагдашгүй учир уг тоо дахин давтагдах боломжгүй гэсэн үг. Харин дараагийн мөрний call random_seed нь уг цагнаас авсан тоог дурын бүхэл тоо болгоно. Кодны 12, 13-р мөрөнд байх функцууд нь дурын 0-1 хоорондох тоог дээрх цагний дурын тооноос хамааруулан гаргана. Өөрөөр хэлбэл цагийн дурын тоо байхгүй бол уг мөрнүүд ижил төрлийн тоонууд гаргах магадлалтай гэсэн үг. Ингээд кодны 15, 16-д байх мөрнүүд нь 50х100 гэсэн хүрээнд уг дурын тоонуудыг масштаблаж байгаа болно. Үүнээс дооших мөрнүүд нь 1 гэсэн дурын тоог 50х100 хэмжээтэй талбайд дурын координатаар байрлуулж байгаа юм.
Үр дүнд нь 1, 2, 11 гэсэн файлууд хэвлэгдэн гарна.
Тухайлбал 300 цэгийг (1 гэсэн цифрийг) өөр өөр профессорын цаг хугацаанд гаргавал:
Дээрх хоёр сүвэрхэг орчинг гаргах хугацааны ялгаа 10 сек орчим л байсан. Гэтэл цэгийн тоо адил 300 байхад тэдгээрийн талбай дахь хуваарилалт буюу координатууд нь өөр өөр байгааг харж болно.
Дээрх сүвэрхэг орчинг гаргасаны дараа түүний сүвэрхэгшилт хэр байгааг бодож олох шаардлага гарна. Үүнийг бодох програмыг бас бичсэн байна л даа.
Үр дүнд нь 1, 2, 11 гэсэн файлууд хэвлэгдэн гарна.
Тухайлбал 300 цэгийг (1 гэсэн цифрийг) өөр өөр профессорын цаг хугацаанд гаргавал:
Хэдэн секундын өмнөх түгэлт |
Хэдэн секунтын дараах түгэлт |
Дээрх сүвэрхэг орчинг гаргасаны дараа түүний сүвэрхэгшилт хэр байгааг бодож олох шаардлага гарна. Үүнийг бодох програмыг бас бичсэн байна л даа.
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 | program porosity parameter n=99, m=49 real por integer is(n,m), i_am0, i_am1 ! мэдээний файлыг уншиж, мэдээллээ авах open(200,file='geodat3.dat') do j=m,1,-1 read(200,'(800i1)') (is(i,j), i=1,n) enddo i_am0=0 ! void i_am1=0 ! solid izero=0 ione=0 do i=1,n do j=1,m if(is(i,j).eq.1) then ione=ione+1 else izero=izero+1 endif enddo enddo i_am0=izero ! void i_am1=ione ! solid por=float(i_am0)/(float(i_am1)+float(i_am0)) print*, 'por', por, 'void', i_am0, 'solid', i_am1 write(300,'(800i1)') stop end |
Дээрх 300 цэгийг байрлуулсан 50х100 хавтгайн сүвэрхэгшилт нь дээрх програмаар бодуулахад 0.94 гарч байна. Өөрөөр хэлбэл талбайн 94 хувь нь хоосон орон зай байна гэсэн үг. Сүвэрхэгшилтийг тооцох олон жишээ байж болно. Ихэвчлэн сүвэрхэг орчны хоосон орон зайг тодорхойлоход ашиглах бол том хэмжээгээр газрын зураг дээр ойгүй газрын хэмжээ, хот дотор зам талбайн эзлэх хувь, томографийн зурагнаас тархины эзлэх хэмжээ гэх мэт олон зүйлийг тодорхойлж болно. Харин өгөгдөл нь хар цагаан эсвэл 0 ба 1 гэсэн зураг л байх ёстой.
Гэхдээ дээрх хоёр програм бол микро-хэмжээст (хэдэн мм -ээс хэдэн нано метр хүртэл гэсэн үг) нүх сүвийн хэмжээнд шүүрэлтийн усны гидродинамикийг тооцоход л зориулан сүвэрхэг орчинг үйлдэж байгаа юм. Мэдээж сүвэрхэг орчинг макро хэмжээстэд авч үзвэл өөр хэрэг л дээ.
No comments:
Post a Comment