{"id":6994,"date":"2025-10-03T17:13:00","date_gmt":"2025-10-03T10:13:00","guid":{"rendered":"https:\/\/istiarto.staff.ugm.ac.id\/?p=6994"},"modified":"2025-10-05T17:36:34","modified_gmt":"2025-10-05T10:36:34","slug":"source-code-kontur-konveksi-difusi","status":"publish","type":"post","link":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/2025\/10\/source-code-kontur-konveksi-difusi\/","title":{"rendered":"Source Code Kontur Konveksi-Difusi"},"content":{"rendered":"<p>Source code di bawah ini memplotkan kontur konsentrasi polutan yang diperoleh dari penyelesaian analitik persamaan transpor konveksi-difusi di sungai. Lihat bahan ajar mata kuliah <a href=\"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/kuliah\/magister-s2\/dinamika-aliran-dan-transfer-massa\/\">Dinamika Aliran dan Transfer Massa<\/a>.\u00a0Program dituliskan dalam bahasa pemrograman Python. Program dibuat sederhana agar mudah dibaca dan dimodifikasi oleh pengguna.<\/p>\n<h2>Konveksi-Difusi Vertikal (di <em>Near-field Zone<\/em>)<\/h2>\n<h3>Exercise 8B<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-7002\" src=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_vertikal-1024x341.png\" alt=\"\" width=\"640\" height=\"213\" srcset=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_vertikal-1024x341.png 1024w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_vertikal-300x100.png 300w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_vertikal-768x256.png 768w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_vertikal.png 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<div>\n<pre>import numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\n# Dinamika Aliran dan Transfer Massa\r\n# Konveksi-difusi vertikal\r\n# Exercise 8B\r\n\r\n# data\r\nQ = 103.7\r\nU = 1.05\r\nB = 90.6\r\nh = 1.09\r\nustar = 0.07\r\nSf = 0.0005\r\nT = 10.\r\nC = 10.\r\nQu = 0.5\r\nTu = 20.\r\nCu = 30.\r\nxsi = 0.4\r\n\r\n# hitungan\r\nA = B * h\r\netz = 0.067 * h * ustar\r\nLz = xsi * U * h * h \/ etz\r\ntz = Lz \/ U\r\nnx = 100\r\nnz = 20\r\n# dx = Ly \/ nx\r\n# dz = h \/ nz\r\nprint(\"Ly \", Lz, \"m\")\r\nprint(\"ty\", tz, \"s\")\r\nx = np.linspace(0.01, Lz, nx)\r\nz = np.linspace(0.0, h, nz)\r\nc = np.zeros((len(x), len(z)), dtype=float)\r\nGu = Cu * Qu\r\ni = 0\r\nfor xc in x:\r\n    j = -1\r\n    for zc in z:\r\n        j = j + 1\r\n        c[i, j] = Gu \/ B \/ np.sqrt(4 * np.pi * etz * xc * U) * np.exp(-1. * zc * zc * U \/ (4. * etz * xc))\r\n        zz = zc - 2 * h\r\n        c[i, j] = c[i, j] + Gu \/ B \/ np.sqrt(4 * np.pi * etz * xc * U) * np.exp(-1. * zz * zz * U \/ (4. * etz * xc))\r\n        zz = zc\r\n        c[i, j] = c[i, j] + Gu \/ B \/ np.sqrt(4 * np.pi * etz * xc * U) * np.exp(-1. * zz * zz * U \/ (4. * etz * xc))\r\n    i = i + 1\r\ntulis_teks = \" \".join(f\"{val:7.4f}\" for val in z)\r\nprint(f\"          {tulis_teks}\")\r\nii = 0\r\nfor row in c:\r\n    tulis_teks = \" \".join(f\"{val:7.4f}\" for val in row)\r\n    print(f\"{x[ii]:9.4f} {tulis_teks}\")\r\n    ii = ii + 1\r\nprint(\"Selesai hitungan konsentrasi\")\r\n\r\n# plot kontur konsentrasi\r\nx = x \/ Lz\r\nz = z \/ h\r\nprint(\"cmin, cmaks \", np.min(c), np.max(c))\r\nzi, xi = np.meshgrid(z, x)\r\nkontur1 = ([0.001])\r\nkontur2 = np.linspace(0.01, 0.20, 20)  # nilai-nilai c yg akan di-kontur-kan\r\nkontur3 = ([0.25, 0.3, 0.4, 0.5, 0.6])  # nilai-nilai c yg akan di-kontur-kan\r\nkontur = np.hstack((kontur1, kontur2, kontur3))\r\n\r\nplt.figure(figsize=(12, 6))\r\nplot = plt.contour(xi, zi, c, levels=kontur, cmap='viridis')\r\nplt.xlabel('x\/Ly', fontsize=14)\r\nplt.ylabel('z\/h', fontsize=14)\r\nplt.clabel(plot, inline=1, fontsize=8)\r\n\r\nplt.savefig('kontur_kondif_vertikal.png')\r\nplt.show()<\/pre>\n<\/div>\n<h2>Konveksi-Difusi Transversal (di <em>Mid-field Zone<\/em>)<\/h2>\n<h3>Exercise 8C<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-7003\" src=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal_tengah-1024x512.png\" alt=\"\" width=\"640\" height=\"320\" srcset=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal_tengah-1024x512.png 1024w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal_tengah-300x150.png 300w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal_tengah-768x384.png 768w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal_tengah.png 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-7004\" src=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal-1024x512.png\" alt=\"\" width=\"640\" height=\"320\" srcset=\"https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal-1024x512.png 1024w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal-300x150.png 300w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal-768x384.png 768w, https:\/\/istiarto.staff.ugm.ac.id\/files\/kontur_kondif_transversal.png 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<div>\n<pre>import numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\n# Dinamika Aliran dan Transfer Massa\r\n# Konveksi-difusi transversal\r\n# Exercise 8C\r\n\r\n# data\r\nQ = 103.7\r\nU = 1.05\r\nB = 90.6\r\nh = 1.09\r\nustar = 0.07\r\nSf = 0.0005\r\nQu = 0.5\r\nCu = 30.\r\n# Posisi source\r\n# y0 = B \/ 2.\r\ny0 = 0.\r\nif y0 == 0.0:\r\n    xsi = 0.5\r\nelse:\r\n    xsi = 0.1\r\nprint(\"xsi\", xsi)\r\n\r\n# hitungan\r\nA = B * h\r\nety = 0.6 * h * ustar\r\nprint(\"ety\", ety)\r\nLy = xsi * U * B * B \/ ety\r\nty = Ly \/ U\r\nLy = np.round(Ly \/ 1000, 0) * 1000.\r\nty = np.round(ty \/ 3600, 0) * 3600.\r\nprint(\"Ly \", Ly, \"m\", Ly \/ 1000, \"km\")\r\nprint(\"ty\", ty, \"s\", ty \/ 3600, \"jam\")\r\nnx = 200\r\nny = 200\r\nx = np.logspace(-4, 0, nx)\r\ny = np.linspace(B, 0., ny)\r\nc = np.zeros((len(y), len(x)), dtype=float)\r\nGu = Cu * Qu\r\nj = 0\r\nfor col in x:\r\n    #    xc = np.power(10, col) * Ly\r\n    xc = col * Ly\r\n    koef = Gu \/ h \/ np.sqrt(4 * np.pi * ety * xc * U)\r\n    i = -1\r\n    for row in y:\r\n        i = i + 1\r\n        yc = row - y0  # original source\r\n        c[i, j] = koef * np.exp(-1. * yc * yc * U \/ (4. * ety * xc))\r\n        yc = row - (2. * B - y0)  # image source kiri\r\n        c[i, j] = c[i, j] + koef * np.exp(-1. * yc * yc * U \/ (4. * ety * xc))\r\n        yc = row - y0  # image source kanan\r\n        c[i, j] = c[i, j] + koef * np.exp(-1. * yc * yc * U \/ (4. * ety * xc))\r\n    j = j + 1\r\ntulis_teks = \" \".join(f\"{val:7.4f}\" for val in x)\r\nprint(f\"          {tulis_teks}\")\r\ntulis_teks = \" \".join(f\"{val * Ly \/ 1000:7.4f}\" for val in x)\r\nprint(f\"          {tulis_teks}\")\r\nii = 0\r\nfor row in c:\r\n    tulis_teks = \" \".join(f\"{val:7.4f}\" for val in row)\r\n    print(f\"{y[ii]:9.4f} {tulis_teks}\")\r\n    ii = ii + 1\r\nprint(\"Selesai hitungan konsentrasi\")\r\n\r\n# plot kontur konsentrasi\r\ny = y \/ B\r\nprint(\"cmin, cmaks \", np.min(c), np.max(c))\r\nxi, yi = np.meshgrid(x, y)\r\n# nilai-nilai kontur yang akan diplotkan\r\nkontur1 = np.linspace(0.001, 0.01, 2)\r\nkontur2 = np.linspace(0.1, 1, 10)\r\nkontur3 = ([2.0, 3.0])\r\nkontur = np.hstack((kontur1, kontur2, kontur3))\r\n\r\nplt.figure(figsize=(12, 6))\r\nplot = plt.contour(xi, yi, c, levels=kontur, cmap='viridis')\r\nplt.xscale('log')\r\nplt.xlabel('x\/Ly', fontsize=14)\r\nplt.ylabel('y\/B', fontsize=14)\r\nplt.clabel(plot, inline=1, fontsize=8)\r\n\r\nplt.savefig('kontur_kondif_transversal.png')\r\nplt.show()<\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Source code di bawah ini memplotkan kontur konsentrasi polutan yang diperoleh dari penyelesaian analitik persamaan transpor konveksi-difusi di sungai. Lihat bahan ajar mata kuliah Dinamika Aliran dan Transfer Massa.\u00a0Program dituliskan dalam bahasa pemrograman Python. Program dibuat sederhana agar mudah dibaca &hellip; <a href=\"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/2025\/10\/source-code-kontur-konveksi-difusi\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":71,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36,34],"tags":[],"class_list":["post-6994","post","type-post","status-publish","format-standard","hentry","category-kuliah-ujian-tugas-praktikum","category-transpor-polutan"],"_links":{"self":[{"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/posts\/6994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/comments?post=6994"}],"version-history":[{"count":3,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/posts\/6994\/revisions"}],"predecessor-version":[{"id":7005,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/posts\/6994\/revisions\/7005"}],"wp:attachment":[{"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/media?parent=6994"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/categories?post=6994"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/istiarto.staff.ugm.ac.id\/index.php\/wp-json\/wp\/v2\/tags?post=6994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}