ccitonline.com

CCIT – Cara Cerdas Ingat Tuhan

| DAI5 eBook Free Download | CFDSOF | VisualFOAM | PT CCIT Group Indonesia : Indonesia leading CFD services company with Inhouse CFD Technology |

Penerapan Framework DAI5 dalam Menganalisis Permasalahan Mekanika Fluida – Gandi Pramudya Pramadhani Herlambang (2306218036) Metode Numerik 01

Assalamuโ€™alaikum Warahmatullahi Wabarakatuh, salam sehat bagi kita semua. Pada blog kali ini, saya akan membahas penerapan Framework DAI5 dalam menganalisis permasalahan Mekanika Fluida. Sebelumnya, saya akan membahas secara singkat mengenai Framework DAI5.

Sebelum saya melanjutkan pembahasan blog ini, berikut adalah link video tugas Simulasi Konduksi Panas pada Plat Rata 2D menggunakan CFDSOF (dapat ditemukan juga setelah pembahasan blog di bagian bawah):

DAI5 merupakan salah satu framework berpikir yang mengintegrasikan pemahaman sains dengan kesadaran iman. Framework ini mengajak kita untuk selalu berada di fase consious, manusia memiliki anugrah dari Allah SWT sehingga dalam menyelesaikan suatu masalah dalam sains harus selalu mengingat bahwa semua fenomena yang kita amati sejatinya adalah ciptaan dan milik Allah SWT.

DAI5 terdiri dari lima langkah kronologis:

  1. Deep Awareness of I (Kesadaran Diri yang Mendalam). Kita harus menyadari hakikat dalam mencari ilmu, dimana semua hal memiliki keteraturan yang telah ditentukan oleh Allah SWT.
  2. Intention (Niat). Ketika kita ingin mendalami suatu ilmu pengetahuan harus diawali dengan niat untuk mengambil manfaat dari ilmu tersebut. Bukan sekadar prestasi semata, tapi harus ditujukan untuk kebermanfaatan umat manusia.
  3. Initial Thinking (Pemikiran Awal). Sebelum melangkah lebih jauh dalam melakukan proses analisa masalah, kita harus mampu memahami fundamental dari masalah tersebut dengan mengindentifikasi prinsip-prinsip dasarnya. Oleh karena itu, proses penyelesaian masalah dapat dilakukan tanpa menyimpang dari hukum-hukum alam yang telah ditetapkan oleh Allah SWT.
  4. Idealization (Idealisasi). Dalam menyesaikan suatu masalah sains, simplifikasi harus dilakukan dengan efektif sehingga kita dapat melihat gambaran besar dari masalah yang ada. Selain itu, sebagai akibat dari proses initial thinking, kita dapat menetapkan boundary condition dari simplifikasi yang telah dibuat.
  5. Instruction Set (Set Instruksi). Eksekusi dari model yang telah dibuat harus disusun secara runut dan dapat dipertaggungjawabkan.

Dengan menggunakan DAI5, saya akan menyelesaikan permasalahan Mekanik Fluida mengeai tekanan berikut:

  1. Awareness
    Fluida merupakan suatu zat cair yang sering kita temui di kehidupan sehari-hari. Di alam ini, fluida memiliki ketetapan dan keteraturan yang telah ditentukan sejak dunia ini diciptakan oleh Allah SWT. Selain itu, kita harus menyadari bahwa umunya fluida terdiri dari dua jenis yaitu cair dan gas. Masing-masing fluida memiliki properties unik yang beragam tergantung dari kondisi sistemnya. Maka dari itu, kita harus menyadari bahwa perubahan properties fluida juga merupakan ketetapan dan keteraturan dari Allah SWT.
  2. Intention
    Permasalahan Mekanika Fluida di atas menunjukkan ada 3 tabung berisi fluida H2O dengan perbedaan ketinggian hA = 0.3 m, hB = 0,5 m, dan hC = 1 m, dimana tabung C terbuka ke atmosfer. Kemudian tabung A dan B tertutup, sekaligus dilengkapi dengan pressure gauge pada bagian atas tabung. Dengan menyelesaikan masalah ini, kita dapat mengetahui tekanan pada masing-masing tabung.
  3. Initial Thinking
    Pada tahap ini, kita akan menganalisis prinsip fundamental yang diaplikasikan ke kasus di atas.
    1. Tekanan atmosfer, gauge, dan absolut

    2. Tekanan Hidrostatis


    Kedua konsep dasar tersebut sudah cukup untuk menjadi landasan menyelesaikan masalah di atas. Selain itu, masih terdapat beberapa informasi pada soal yang dapat kita jadikan acuan untuk menyelesaikan masalah tersebut, yaitu:
    Patm= 100 kPa
    g = 9.79 m/s^2
    p = 1000 kg/m^3

    Yang terakhir, kita dapat mengindentifikasi pertanyaan yang diajukan, yaitu:
    1. Gauge pressure pada tabung A dan B?
    2. Absolut pressure pada tabung A dan B?
  4. Idelatization
    Simplifikasi pada penyelesaian kasus di atas adalah dengan melihat manometer menjadi 2 control volume yang berbeda. Control volume 1 adalah manometer kanan dengan tengah. Control volume 2 adalah manometer kanan dan kiri. Boundary condition juga ditetapkan yaitu fluida di dalam manometer homogen.
  5.   Instruction Set
    Berdasarkan keempat tahapan tersebut, kita dapat mulai melakukan penyelesaian masalah :

Video Simulasi Konduksi Panas pada Pelat Rata 2D dengan CFDSOF

Pengolahan data Curve Fitting menggunakan Javascript:

// Impor library yang dibutuhkan
import { evaluate, polynomialRegression } from 'mathjs';
import Chart from 'chart.js/auto';

// Template data (gantilah dengan data yang diinginkan)
const dataPoints = [
    // { x: 0.0, y: 303.000 },
    // Tambahkan atau ubah data di sini
];

// Ekstrak nilai X dan Y
const xValues = dataPoints.map(p => p.x);
const yValues = dataPoints.map(p => p.y);

// Pastikan ada cukup data sebelum melakukan regresi
if (xValues.length > 2) {
    // Lakukan regresi polinomial orde 2
    const regression = polynomialRegression(xValues, yValues, 2);

    // Buat titik-titik untuk curve fitting
    const xFit = Array.from({ length: 100 }, (_, i) => i / 100);
    const yFit = xFit.map(x => evaluate(regression, { x }));

    // Buat chart menggunakan Chart.js
    document.addEventListener("DOMContentLoaded", function () {
        const ctx = document.getElementById('curveChart').getContext('2d');
        new Chart(ctx, {
            type: 'scatter',
            data: {
                datasets: [
                    {
                        label: 'Data Asli',
                        data: dataPoints,
                        backgroundColor: 'blue',
                        showLine: false
                    },
                    {
                        label: 'Curve Fitting',
                        data: xFit.map((x, i) => ({ x, y: yFit[i] })),
                        borderColor: 'red',
                        borderWidth: 2,
                        showLine: true,
                        fill: false
                    }
                ]
            },
            options: {
                scales: {
                    x: { type: 'linear', position: 'bottom' },
                    y: { type: 'linear' }
                }
            }
        });
    });
}

// Tambahkan elemen canvas ke dalam HTML
document.body.innerHTML += '<canvas id="curveChart"></canvas>';

Koding di atas merupakan proses curve fitting menggunakan metode least square regression. Saya cukup menginput data-data XY Plot yang didapatkan pada proses simulasi ke baris
// Template data (gantilah dengan data yang diinginkan)
const dataPoints = [
// { x: 0.0, y: 303.000 },
// Tambahkan atau ubah data di sini
];
menggunakan data baris J2-J11.

Akan tetapi, untuk mempermudah visualisasi, saya akan menyertakan proses curve fitting menggunakan least square regression dalam HTML untuk data J2.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Curve Fitting</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/11.3.1/math.min.js"></script>
</head>
<body>
    <h1>Curve Fitting for CSV 10 and 11</h1>
    <div id="chartsContainer"></div>

    <script>
        const datasets = [
            [
                { x: 0.0, y: 285 },
                { x: 0.1, y: 315 },
                { x: 0.2, y: 335 },
                { x: 0.3, y: 350 },
                { x: 0.4, y: 360 },
                { x: 0.5, y: 365 },
                { x: 0.6, y: 360 },
                { x: 0.7, y: 350 },
                { x: 0.8, y: 335 },
                { x: 0.9, y: 315 },
                { x: 1.0, y: 285 }
            ],
            [
                { x: 0.0, y: 280 },
                { x: 0.1, y: 310 },
                { x: 0.2, y: 330 },
                { x: 0.3, y: 345 },
                { x: 0.4, y: 355 },
                { x: 0.5, y: 360 },
                { x: 0.6, y: 355 },
                { x: 0.7, y: 345 },
                { x: 0.8, y: 330 },
                { x: 0.9, y: 310 },
                { x: 1.0, y: 280 }
            ]
        ];

        function polynomialRegression(x, y, order = 2) {
            const matrixX = x.map(val => Array.from({ length: order + 1 }, (_, j) => Math.pow(val, j)));
            const matrixY = y.map(value => [value]);
            const X = math.matrix(matrixX);
            const Y = math.matrix(matrixY);
            const XT = math.transpose(X);
            const XTX = math.multiply(XT, X);
            const XTY = math.multiply(XT, Y);
            const coefficients = math.lusolve(XTX, XTY).valueOf().flat();
            return coefficients;
        }

        function plotData(dataPoints, datasetIndex) {
            const xValues = dataPoints.map(p => p.x);
            const yValues = dataPoints.map(p => p.y);
            const coeffs = polynomialRegression(xValues, yValues);
            const equation = `y = ${coeffs.map((c, i) => `${c.toFixed(2)}x^${i}`).join(' + ')}`;

            const container = document.getElementById('chartsContainer');
            const title = document.createElement('h2');
            title.innerText = `Dataset ${datasetIndex}: ${equation}`;
            container.appendChild(title);

            const table = document.createElement('table');
            table.border = "1";
            let tableContent = `<tr><th>X</th><th>Y</th></tr>`;
            dataPoints.forEach(p => tableContent += `<tr><td>${p.x}</td><td>${p.y}</td></tr>`);
            table.innerHTML = tableContent;
            container.appendChild(table);

            const canvas = document.createElement('canvas');
            container.appendChild(canvas);

            new Chart(canvas.getContext('2d'), {
                type: 'scatter',
                data: {
                    datasets: [
                        { label: `Data ${datasetIndex}`, data: dataPoints, backgroundColor: 'blue', showLine: false },
                        { label: `Fit ${datasetIndex}`, data: Array.from({ length: 100 }, (_, i) => {
                            const x = i / 100;
                            return { x, y: coeffs.reduce((sum, c, j) => sum + c * Math.pow(x, j), 0) };
                        }), borderColor: 'red', borderWidth: 2, showLine: true, fill: false }
                    ]
                },
                options: {
                    scales: { x: { type: 'linear', position: 'bottom' }, y: { type: 'linear' } }
                }
            });
        }

        datasets.forEach((data, index) => plotData(data, index + 10));
    </script>
</body>
</html>

1. Curve Fitting Plot untuk baris J2

2. Curve Fitting Plot untuk baris J3

3. Curve Fitting Plot J4

4. Curve Fitting Plot J5

5. Curve Fitting Plot J6

6. Curve Fitting Plot J7

7. Curve Fitting Plot J8

8. Curve Fitting Plot J9

9. Curve Fitting Plot J10

10. Curve Fitting Plot J11

Berikut merupakan hasil perhitungan numerik dengan output visualisasi kurva distribusi temperatur pada masing-masing baris cell. Wassalamualaikum warahmatullahi wabarakatuh.


Leave a Reply

Your email address will not be published. Required fields are marked *