This repository contains the work I completed during my research scholarship at the University of Newcastle in 2023-2024. The project focused on implementing and exploring numerical methods, specifically the Virtual Element Method (VEM), and contributions in both Julia and MATLAB.
This project solves the possion equation: $ \begin{cases} -\Delta{u} & = f \quad \text{in} \ \Omega \ u & = g \quad \text{on}\ \delta\Omega \end{cases} $
Where
The primary goal of this research project was to explore and implement numerical methods, specifically focusing on the Virtual Element Method (VEM). This repository includes:
- A Julia reimplementation of the VEM as described by Oliver J. Sutton.
- Supporting MATLAB files for additional analysis and comparison.
- A paper discussing the project's objectives, methodology, and results.
Here’s a complete list of the files in this repository:
File | Description |
---|---|
.gitignore |
Specifies files ignored by Git. |
Project.toml |
Julia project dependencies. |
README.md |
This README file describing the repository structure. |
File | Description |
---|---|
LaTeX/README.md |
Documentation related to the LaTeX report. |
LaTeX/appendix.tex |
Appendix with MATLAB and Julia code listings. |
LaTeX/diagram.tex |
Diagrams used in the LaTeX report. |
LaTeX/jlcode.sty |
Custom Julia syntax highlighting for LaTeX. |
LaTeX/main.tex |
Main LaTeX document for the report. |
LaTeX/sources.bib |
Bibliography file for references. |
LaTeX/vem-preamble.sty |
Preamble for the LaTeX report including packages and settings. |
File | Description |
---|---|
MATLAB/PolygonTests.m |
MATLAB file containing tests for polygon meshes in the VEM context. |
File | Description |
---|---|
src/L_domain.jl |
Julia code for handling the L-shaped domain problem. |
src/plot_solution.jl |
Julia script to plot the solution to the VEM problem. |
src/read_mat.jl |
Julia script for reading .mat files. |
src/square_domain.jl |
Julia code for handling a square domain. |
src/vem_method.jl |
Julia implementation of the VEM method. |
src/vem_problem.jl |
Julia code defining the VEM problem struct. |
src/vem_solver.jl |
Julia code to solve the VEM problem. |
File | Description |
---|---|
check/debugging/output.txt |
Debug output for tracking VEM computations. |
check/debugging/r.md |
Markdown report for debugging information. |
check/debugging/vem_debug_output.md |
General debug output in Markdown format. |
check/debugging/vem_debug_output_julia.md |
Julia-specific debug output. |
check/debugging/vem_debug_output_matlab.md |
MATLAB-specific debug output. |
check/meshes/*.mat |
.mat files for different mesh configurations, including L-domain, Voronoi, etc. |
File | Description |
---|---|
docs/build/index.html |
HTML documentation generated with Documenter.jl . |
docs/build/notebook.ipynb |
Example Jupyter notebook. |
docs/build/plot_solution/index.html |
Plot solution documentation in HTML format. |
docs/src/*.md |
Markdown source files for the project documentation. |
docs/make.jl |
Julia script to build the documentation using Documenter.jl . |
File | Description |
---|---|
nb/vem_demo.ipynb |
Example Jupyter notebook demonstrating the VEM solver. |
File | Description |
---|---|
res/plots/something.pdf |
Example plot in PDF format. |
res/plots/something.png |
Example plot in PNG format. |
res/plots/something.svg |
Example plot in SVG format. |
The following Julia packages are required to run the Virtual Element Method solver and related scripts in this project:
Plots
: For generating visualizations, such as heatmaps and wireframe plots.Colors
: Provides color manipulation and schemes for plotting.Statistics
: Used for basic statistical calculations.MAT
: For reading and writing MATLAB.mat
files, which are used for storing VEM problem data.LinearAlgebra
: Provides linear algebra functions, necessary for matrix operations.SparseArrays
: Supports sparse matrix representations, essential for efficiently handling large systems.
To install these dependencies, run the following command in the Julia REPL:
using Pkg
Pkg.add(["Plots", "Colors", "Statistics", "MAT", "LinearAlgebra", "SparseArrays"])
### Command Line Options
| Option | Description | Required | Default Value |
|---------------------|-----------------------------------------------------------------------------|----------|---------------------------|
| `--file, -f` | Path to the `.mat` file containing the VEM problem. | Yes | N/A |
| `--plot, -p` | Plot type: choose either `"heatmap"` or `"wireframe"`. | No | N/A |
| `--ptitle, -t` | Title for the plot. | No | None |
| `--colourscheme, -c`| Color scheme for the plot. Default: `"blues"` for heatmap, `"viridis"` for wireframe. | No | `"blues"` for heatmap |
| `--azimuth, -a` | Azimuth angle for the wireframe plot. Default: `30`. | No | `30.0` |
| `--elevation, -e` | Elevation angle for the wireframe plot. Default: `30`. | No | `30.0` |
| `--solidcolour, -s` | Solid color for the wireframe plot. | No | N/A |
| `--savepath, -o` | File path to save the generated plot (e.g., `output.png`). | No | N/A |
| `--debug, -d` | Enable debug mode and output detailed information. | No | Disabled |
| `--debug_file, -D` | Path to store debug output. Default: `vem_debug_output.md`. | No | `"vem_debug_output.md"` |
### Examplse
```julia
julia vem_solver.jl --file /path/to/mesh.mat --plot heatmap --colourscheme plasma --savepath output.svg
julia vem_solver.jl --file /path/to/mesh.mat --plot wireframe --azimuth 45 --elevation 60 --solidcolour red --savepath wireframe.png
julia vem_solver.jl --file /path/to/mesh.mat --debug --debug_file debug_output.md
For detailed instructions on running the code and generating documentation, refer to the docs section.
The documentation is built using Documenter.jl
. To generate the HTML documentation locally, run the following:
julia> include("docs/make.jl")