วันพุธที่ 21 พฤษภาคม พ.ศ. 2557

แบบจำลองเพื่อสร้างแผนที่น้ำท่วม

ในประเทศไทย หลังๆมีปัญหาน้ำท่วมค่อนข้างบ่อย และด้วยเทคโนโลยีปัจจุบัน เรามีแบบจำลอง
ข้อมูล และเครื่องมือต่างๆที่ช่วยให้การจำลองแผนที่น้ำท่วมได้ดีมากขึ้น
ต่อไปนี้เป็นตัวอย่างการสร้างแผนที่น้ำท่วมด้วยแบบจำลองของ MIKE by DHI แบบต่างๆ
ต้องบอกก่อนว่า แผนที่น้ำท่วม สามารถสร้างได้จากแบบจำลองหลายๆแบบ
และต่างก็มีข้อจำกัดที่แตกต่างกันไป ขึ้นกับชนิดของแบบจำลอง


MFlood (M11 + M21FM with block out river)           MFlood (M11 + M21FM Run river flow in M21FM)


ตัวอย่างแผนที่น้ำท่วมจากการใช้แบบจำลองแบบต่างๆ


ต่อไปนี้เป็นวีดีโอแสดงตัวอย่างแผนที่น้ำท่วมที่ได้จากแบบจำลองแบบต่างๆกัน


1) MIKE11 HD + MIKE11GIS (Version <= 2005)

2) MIKE11 HD แบบใช้แต่ Cross-section (Version >= 2005)

3) MIKE11 HD แบบใช้ Help Grid (Version >= 2005)

4) MIKE FLOOD (MIKE11+MIKE21)

5) M21

6) MIKE11 HD+MIKE SHE

7) MFlood (M11 + M21FM with block out river)

8) MFlood (M11 + M21FM Run river flow in M21FM)


วันจันทร์ที่ 19 พฤษภาคม พ.ศ. 2557

Error: fail to open timeseries for boundary "xxx"

เป็นปัญหา Error ที่พบหลังจากการถอนและลงโปรแกรมใหม่
ทำให้ค่า Registry บางตัวมีการค้าง และไม่มีการลงทะเบียนใหม่ให้ถูกต้อง
กรณีนี้เกิดกับ

MIKE by DHI Version 2012 SP3

โดยจะพบว่าเมื่อสั่งรันแบบจำลองจะมี Error ฟ้องว่า
fail to open timeseries for boundary no.1 name "xxx"exception: the specified module could not be found, classID: 8D914F4D-2A67-477D-B31C-7DD572CE2B97"

แต่เมื่อเปิดไฟล์ dfs0 ดังกล่าวด้วยตนเอง กลับเปิดได้ปกติ
กรณีนี้ให้
re registry dll สองตัว
ด้วย command prompt โดยพิมพ์คำสั่งดังนี้

regsvr32 "C:\Program Files (x86)\DHI\2012\bin\x64\timeseries.dll"
regsvr32 "C:\Program Files (x86)\DHI\2012\bin\x64\dfstsbridge.dll"


วันศุกร์ที่ 4 เมษายน พ.ศ. 2557

การสร้างรูปแผนที่น้ำท่วม และนำไปวางซ้อนไว้บนแผนที่ Google Earth

ในบทความนี้จะแนะนำเทคนิคการสร้างแผนที่น้ำท่วมจากผลคำนวณ
เพื่อนำไปวางซ้อนและแสดงบนแผนที่ Google Earth

เบื้องต้น จะต้องมีโปรแกรม Google Earth ติดตั้งไว้ในเครื่องที่จะใช้งานก่อน
และจะต้องมีไฟล์ผลคำนวณจากโปรแกรม MIKE แบบ 2 มิติก่อน โดยจะมีนามสกุล dfs2
จากนั้นจะใช้โปรแกรม
"C:\Program Files (x86)\DHI\2012\bin\ExportDfs2GE.exe"
ซึ่งจะมาพร้อมการติดตั้งโปรแกรม MIKEbyDHI อยู่แล้ว
ในการแปลงผลคำนวณเป็นรูปภาพพร้อมสร้างไฟล์ KML สำหรับเปิดด้วยโปรแกรม Google Earth

ให้ทำการเตรียมไฟล์แผนที่น้ำท่วม พร้อมกับปรับแต่ง pallet ที่แสดงสีของระดับน้ำท่วม
ให้เรียบร้อยก่อน และจัดเก็บ pallet ที่ปรับแต่งเรียบร้อยแล้วเก็บไว้
โดยจะได้เป็นไฟล์นามสกุล pal
รูปด้านล่างเป็นตัวอย่างการปรับแต่งสีที่แสดงระดับน้ำท่วม โดยการเปิดไฟล์ผลคำนวณ
และเลือกเมนู View/Pallets ซึ่งจะมีให้เลือกสร้างใหม่ แก้ไข หรือจะจัดเก็บ

เมื่อเตรียมไฟล์พร้อมแล้ว ให้เปิดโปรแกรม ExportDfs2GE.exe โดยเปิดโปรแกรมได้ที่
Start/All Programs/MIKE by DHI 2012/MIKE Zero/Tools/MIKE to Google Earth
แล้วทำการเลือกไฟล์ผลคำนวณ dfs2 และปรับแต่งให้ใช้ pallet ที่เราจัดทำไว้
พร้อมทั้งเลือก folder ที่จะเก็บรูปภาพและไฟล์ KML

เราสามารถเซฟการตั้งค่าไว้โดยเก็บเป็นไฟล์นามสกุล mge
และสามารถสั่งให้โปรแกรม ExportDfs2GE.exe รันด้วย Batch file ได้เช่นกัน
เมื่อกรอกข้อมูลพร้อมแล้วให้กดปุ่ม Export images and create KML-file
โปรแกรมจะทำการสร้างรูปตามจำนวนที่เรากำหนด พร้อมกับสร้างไฟล์ KML

เมื่อสร้างไฟล์เสร็จแล้ว ตรวจสอบไฟล์ที่สร้างไว้ใน Folder ที่ตั้งค่าไว้

 ให้เปิดไฟล์ KML ด้วยโปรแกรม Google Earth 

จะพบว่า โปรแกรม Google Earth จะนำภาพที่สร้างไว้ทั้งหมด มาวางซ้อนไว้ในตำแหน่งที่ถูกต้อง
และเราสามารถ Play แผนที่น้ำท่วมนี้ หรือจะปรับแต่โปรแกรม ให้ซ้อนทับกับแผนที่อื่นๆได้ด้วย

และหากต้องการนำไฟล์ไปใช้งานกับแผนที่ Google Earth ที่เปิดผ่านหน้า web browser
ให้ทำการ save place as ไฟล์ออกไปเป็นนามสกุล KMZ 
โดยไฟล์ KMZ เป็นการเก็บเอาไฟล์รูปทั้งหมดและ KML เข้าไว้ด้วยกัน

เมื่อได้ไฟล์ KMZ แล้วให้นำไปฝากไว้กับ url ที่สามารถเข้าถึงได้โดยตรงจาก web browser
ในกรณีตัวอย่าง ได้ฝากไฟล์ไว้กับ Dropbox ซึ่งให้บริการฟรีแต่ต้องสมัครใช้บริการก่อน
โดยวางไว้ใน Public ซึ่งจะสามารถเปิดดูโดยใครก็ได้โดยไม่ต้อง login ก่อน
ทำให้เราสามารถเปิด หรือโหลดไฟล์นี้จาก link ที่กำหนดไว้ได้ทันที

หากใช้ Dropbox ในการฝากไฟล์ KMZ จะสามารถ Copy public link ได้ทันที
และเมื่อนำ link ที่ได้มา ไปเปิดใน maps.google.com
โดยการวาง link ในช่อง search ก็จะสามารถเปิดแสดงแผนที่ KMZ ซ้อนในแผนที่ได้ทันที

**********************************
และหากต้องการนำแผนที่ดังกล่าวไปเผยแพร่ต่อให้ผู้อื่น เราสามารถสร้าง html link ได้ง่ายๆ
โดยเริ่มต้นด้วย

https://maps.google.com/?q=

แล้วต่อท้ายด้วย link ของไฟล์ KMZ ดังตัวอย่างด้านล่าง

*************************************

อัพเดท นับจากวันที่ 1 กพ.  2558 เป็นต้นไป ทาง Google ได้ปิดระบบการเปิดแผนที่ kml/kmz

ผ่านการแชร์ไฟล์แบบด้านบนแล้วนะครับ ตามประกาศใน link ด้านล่างนี้

https://developers.google.com/maps/support/kmlmaps

โดย Google แจ้งว่าแผนที่ kml/kmz ที่แชร์ไว้จะเปิดผ่าน maps.google.com ไม่ได้แล้ว
นับตั้งแต่วันที่ 1 กพ.  2558 เป็นต้นไป

แต่ เขาให้ใช้แผนที่แบบนี้ได้ผ่าน My map ซึ่งก็คือต้องใช้ Google Account ของเราเองในการ
สร้างแผนที่ที่ใช้ไฟล์ Kml/Kmz ของเราขึ้นมาเอง เป็นแผนที่ใน My Map ของเราเอง
แล้วค่อย Share แผนที่ตัวที่สร้างไว้แล้วอีกที


และสำหรับไฟล์ mge ที่เป็นไฟล์ตั้งค่าการแปลงผลคำนวณเป็นแผนที่บน Google Earth นั้น
เราสามารถสั่งรันด้วย batch file ด้วยคำสั่งดังนี้

"C:\Program Files (x86)\DHI\2012\bin\ExportDfs2GE.exe" -export "C:\Project\Flood.mge"

โดยไฟล์ Flood.mge เป็นไฟล์ที่เราต้องตั้งค่าการสร้างแผนที่แบบ KML ไว้เรียบร้อยแล้ว

วันจันทร์ที่ 31 มีนาคม พ.ศ. 2557

การเพิ่มความจุของฝายทดน้ำ ในแบบจำลอง MIKE Hydro Basin

สำหรับบทความนี้ จะแนะนำการเพิ่มฝายทดน้ำเพื่อการชลประทาน
หรือ ฝายที่มีความจุน้ำไม่มาก และมีจุดประสงค์เพื่อการทดน้ำสำหรับการชลประทานเท่านั้น
โดยไม่ได้ใช้เพื่อการบรรเทาน้ำท่วม

โดยทั่วไป ในแบบจำลอง MIKE Hydro Basin จะมีเพียงโครงสร้างแบบเขื่อนเท่านั้น
ทำให้ไม่สามารถใส่โครงสร้างแบบ ฝาย ลงไปได้
ดังนั้น ในการเพิ่มโครงสร้างฝายเพื่อการทดน้ำ จึงต้องทำผ่านการเพิ่ม เขื่อน ในแบบจำลอง

ตัวอย่างนี้ เป็นการทดลองสร้างลำน้ำแบบง่าย
มี River Node N5 เป็นต้นน้ำ
ใช้ Water User W3 เป็นตัวป้อนน้ำเข้าระบบ
มี Water User W4 เป็นผู้ใช้น้ำ โดยดึงน้ำโดยตรงจากฝาย
มี ฝายที่แทนด้วยเขื่อนคือ R2 ที่มีความจุสูงสุด 16 ล้าน ลบ.ม.
โครงข่ายลำน้ำดังกล่าวสร้างแบบง่ายๆได้ดังรูปนี้


น้ำไหลเข้าทางต้นทาง W3  กำหนดค่าสำหรับทดสอบดังนี้


น้ำที่ดึงออกไปสำหรับการชลประทาน W4 กำหนดค่าคงที่เท่ากับ 8 m3/s


แบบจำลองยังต้องเพิ่มข้อมูลสำหรับเขื่อน ที่ทำหน้าที่แทนฝายทดน้ำ
ประกอบไปด้วย LevelAreaVolume โดยทั่วไปกรณีฝายทดน้ำขนาดเล็ก อาจมีแต่ข้อมูลความจุสูงสุด
สามารถสร้างตารางได้อย่างง่าย โดยสมมุติค่าพื้นที่ผิวน้ำขึ้นมาเองได้เลย เนื่องจากไม่ได้ใช้ 
ระดับน้ำต่ำสุด  : ความจุ = 0
ระดับน้ำสูงสุด : ความจุ = ความจุสูงสุด (16 MCM)

CharacteristicLevel
Bottom Level = ระดับน้ำต่ำสุด
Dead Zone Level = ระดับน้ำต่ำสุด
Crest Level = ระดับน้ำสูงสุด

นอกจากนี้ยังต้องเพิ่มข้อมูล การบริหารเขื่อน
โดยตั้งค่าระดับน้ำเพื่อควบคุมน้ำท่วม ไว้เท่ากับค่าระดับน้ำสูงสุด
อัตราการระบายน้ำต่ำสุด เท่ากับ 0

และสุดท้ายต้องเพิ่มข้อมูลการจัดการน้ำสำหรับผู้ใช้น้ำที่ดึงน้ำจากเขื่อนโดยตรง
โดยเพิ่ม No. of Reduction Level เป็น 1
จะมีช่องกรอกข้อมูล แล้วตั้งค่า Reduction ดังนี้
Reduction Level = ระดับน้ำต่ำสุด (คงที่)
Reduction Factor = 0 (คงที่)
การตั้งค่าดังนี้มีผลให้ ไม่มีการลดปริมาณน้ำในกรณีที่ระดับน้ำลดต่ำกว่าเกณฑ์ (Reduction Level)



เมื่อสร้างแบบจำลองอย่างง่ายเสร็จแล้ว ก็ทดสอบรันแบบจำลอง
โดยในกรณีนี้ เตรียมข้อมูลครบ 1 ปี และหลายๆข้อมูลใช้ค่าคงที่
จึงสามารถรันแบบจำลองได้ หลายปี เพราะโปรแกรมจะเวียนใช้ข้อมูลในปีต่อๆไปได้เอง

ตั้งค่า Simulation Description เป็น WithStorage แล้วสั่งรัน
หลังรันแบบจำลองกรณีมีความจุของฝาย (WithStorage)
หลังจากนั้น
ให้เปลี่ยนแปลงค่า LevelAreaVolume โดยแก้ค่า ความจุสูงสุดให้เหลือ 0 MCM
แล้วแก้ค่า Simulation Description เป็น WithOutStorage เพื่อเป็นกรณีไม่มีฝาย

และสุดท้าย ให้เปลี่ยนแปลงค่า LevelAreaVolume โดยแก้ค่า ความจุสูงสุดให้เป็น 160 MCM 
แล้วแก้ค่า Simulation Description เป็น WithBigStorage เพื่อเป็นกรณีมีฝายความจุสูง

เมื่อรันครบ 3 กรณีแล้ว จะสามารถตรวจสอบผลคำนวณการขาดน้ำของ W4 ได้ดังรูป


โดยมีปริมาณน้ำในฝายดังนี้


จากตัวอย่างนี้ อธิบายได้ดังนี้

กรณีที่มีฝายที่มีความจุเดิม พบว่า ความจุของฝายมีขนาดเล็ก และไม่เพียงพอต่อการเก็บน้ำให้พอใช้ตลอดทั้งปี แต่จะพบว่า การขาดน้ำ จะน้อยกว่ากรณีที่ไม่มีฝาย และในกรณีที่ฝายมีความจุมากเพียงพอ จะพบว่าพื้นที่นี้จะมีน้ำใช้อย่างเพียงพอ และไม่เกิดการขาดน้ำเลย

ในกรณีนี้ ได้สมมุติให้ปริมาณน้ำน้ำไหลเข้าสะสมทั้งปี มีค่าเท่ากับปริมาณความต้องการใช้น้ำสะสมทั้งปี
แต่น้ำไหลเข้ามีปริมาณที่ไม่เท่ากัน มากบ้าง น้อยบ้างในแต่ละช่วงเวลาของปี ทำให้มีความจำเป็นต้องการฝายที่มีความจุน้ำระดับหนึ่ง ช่วยกักน้ำในช่วงน้ำมาก เก็บไว้ใช้ในช่วงน้ำน้อย

ใครสนใจตัวอย่างนี้ สามารถโหลด Setup ที่ผมทำเสร็จแล้วได้จาก




วันศุกร์ที่ 7 กุมภาพันธ์ พ.ศ. 2557

การกระจายน้ำท่าจากลุ่มน้ำขนาดใหญ่ไปยังตำแหน่งต่างๆ ในแบบจำลอง MIKE Hydro Basin

สำหรับหลายๆท่านที่ใช้งานแบบจำลอง MIKE Basin มักจะพบปัญหาว่า
เมื่อมีข้อมูลน้ำท่าของลุ่มน้ำย่อย ที่ไม่ได้จัดแบ่งไว้สำหรับการศึกษา
ด้วยแบบจำลอง MIKE Basin ตั้งแต่แรก จะมีตำแหน่งของขอบเขตลุ่มน้ำที่ไม่เหมาะสม
ทำให้ น้ำท่าที่คำนวนได้ จะไหลไปลงที่ตำแหน่งปลายเส้นลำน้ำที่ตัดกับขอบเขตของลุ่มน้ำย่อยเท่านั้น


ในกรณีที่มีโครงการชลประทาน หรือ การใช้น้ำจากจุดที่อยู่ทางต้นน้ำของจุดรับน้ำของลุ่มน้ำในแบบจำลอง จะทำให้จุดนั้นไม่ได้ข้อมูลน้ำเข้า และผลคำนวนก็จะผิดพลาด

ทั้งๆที่เราอาจแค่ต้องการ กระจายปริมาณน้ำ จากน้ำท่าที่เราคำนวนไว้แล้วไปลงที่ตำแหน่งต่างๆของเส้นลำน้ำ ตามอัตราส่วนที่ต้องการ แต่แบบจำลอง ไม่มีตัวเลือกให้แบ่งน้ำท่าของลุ่มน้ำไปลงยังตำแหน่งต่างๆในอัตราส่วนที่ต้องการได้

ดังนั้น ในบทความนี้ ได้แนะนำ เทคนิคที่จะสามารถแบ่งน้ำท่า จากลุ่มน้ำหนึ่งๆ ไปลงยังตำแหน่งต่างๆ ตามอัตราส่วนที่ต้องการได้

เทคนิคนี้คือการใช้ Water User เข้ามาช่วยในการกระจายน้ำ

ด้วยการเพิ่ม Water User เข้าไปยังตำแหน่งที่ต้องการกระจายน้ำท่าไปลง แล้วลากเส้นเชื่อมกับลำน้ำ โดยเป็นทิศทางจาก Water User กลับมาลงที่ลำน้ำเท่านั้น จะทำให้เป็นการบังคับให้เกิด Return Flow กลับเข้ามาที่ลำน้ำที่จุดนั้น

จากนั้น กำหนดค่าให้ Water User นั้น มีข้อมูล Demand เท่ากับ น้ำท่าของลุ่มน้ำ และกำหนด Return Flow ให้เป็นอัตราส่วนของ Demand โดยกำหนดค่าอัตราส่วน เท่ากับอัตราส่วนของน้ำท่าที่ต้องการให้ไหลลง ณ ตำแหน่งนี้

ทำเช่นนี้กับจุดอื่นๆที่ต้องการกระจายน้ำท่าลงไป ก็จะสามารถกระจายน้ำท่าไปลงยังตำแหน่งต่างๆได้ทั้งหมด

และเมื่อทำครบแล้ว อย่าลืม ทำเพิ่มที่จุดปลายของลุ่มน้ำด้วย โดยการกำหนดค่า Return Flow ให้เท่ากับอัตราส่วนของน้ำท่าที่จะเหลือทั้งหมด ลงไปยังจุดท้ายสุดในลุ่มน้ำ พร้อมทั้งแก้ไขให้ Runoff ของลุ่มน้ำเท่ากับ 0

เท่านี้ ปริมาณน้ำในลุ่มน้ำนี้ทั้งหมด ก็จะเท่ากับ อัตราส่วนของน้ำท่า ที่มาจากจุดต่างๆในลุ่มน้ำ โดยแนะนำให้ตรวจสอบด้วยว่า ผลรวมน้ำท่า ของทั้งลุ่มควรจะเท่ากับ 100% ของน้ำท่าทั้งลุ่ม

ข้อสังเกตุ กรณีมีค่าน้ำท่าอยู่แล้ว แล้วต้องการให้เลือกใช้งานเป็น Demand  ของ Water User ได้นั้น จะต้องเปลี่ยน Type ของข้อมูลให้เป็น Water Flow เสียก่อน