{
"cells": [
{
"cell_type": "markdown",
"id": "2133c064",
"metadata": {},
"source": [
"
\n",
"\n",
"### Programming large-scale parallel systems\n",
"### Lectures on Julia for HPC\n",
"\n",
"\n",
"# Distributed Jacobi (SOR) method\n",
"\n",
"by Francesc Verdugo (VU Amsterdam)\n",
"\n",
"Version fall 2022"
]
},
{
"cell_type": "markdown",
"id": "a7b64d5a",
"metadata": {},
"source": [
"## Contents\n",
"\n",
"- How to parallelize the Jacobi method in Julia"
]
},
{
"cell_type": "markdown",
"id": "8bfa86d6",
"metadata": {},
"source": [
"## Mathematical background\n",
"\n",
"\n",
"### 1D Laplace equation\n",
"\n",
"\n",
"Find a function $u(x)$ such that\n",
"\n",
"\n",
"$u''(x) = 0 $ for $x\\in(0,L)$\n",
"\n",
"$u(0) = -1$\n",
"\n",
"$u(L) = 1$\n",
"\n"
]
},
{
"cell_type": "markdown",
"id": "de45f04c",
"metadata": {},
"source": [
"### Analytical solution\n",
"\n",
"$u(x) = (x-L)/L$"
]
},
{
"attachments": {
"fig_jacobi_00.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"id": "bba2fb43",
"metadata": {},
"source": [
"\n",
"