Skip to content

Commit

Permalink
resultant of the gradient of fields
Browse files Browse the repository at this point in the history
  • Loading branch information
perebalazs committed Feb 10, 2025
1 parent c26f20e commit 90ea3bc
Show file tree
Hide file tree
Showing 5 changed files with 258 additions and 136 deletions.
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "LowLevelFEM"
uuid = "6171b9fb-adbf-4751-adb9-5faded75de07"
authors = ["Balázs Pere"]
version = "1.7.1"
version = "1.8.0"

[deps]
Arpack = "7d9fca2a-8960-54d3-9f78-7d1dccf2cb97"
Expand Down
2 changes: 1 addition & 1 deletion examples/Buckling/buckling-3.geo
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Transfinite Volume{2};
//+
Recombine Surface {7, 1, 11, 6, 9, 4, 3, 8, 10, 2, 5};

//Mesh.ElementOrder = 1;
Mesh.ElementOrder = 2;
//Mesh.SecondOrderIncomplete = 1;
//+
Mesh 3;
Expand Down
226 changes: 180 additions & 46 deletions examples/Buckling/buckling-4.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -14,7 +14,7 @@
},
{
"cell_type": "code",
"execution_count": 34,
"execution_count": 23,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -43,7 +43,7 @@
"Info : [ 90%] Meshing curve 18 (Line)\n",
"Info : [100%] Meshing curve 19 (Line)\n",
"Info : [100%] Meshing curve 20 (Line)\n",
"Info : Done meshing 1D (Wall 0.00358145s, CPU 0.001982s)\n",
"Info : Done meshing 1D (Wall 0.00336547s, CPU 0.001726s)\n",
"Info : Meshing 2D...\n",
"Info : [ 0%] Meshing surface 1 (Transfinite)\n",
"Info : [ 10%] Meshing surface 2 (Transfinite)\n",
Expand All @@ -56,14 +56,49 @@
"Info : [ 80%] Meshing surface 9 (Transfinite)\n",
"Info : [ 90%] Meshing surface 10 (Transfinite)\n",
"Info : [100%] Meshing surface 11 (Transfinite)\n",
"Info : Done meshing 2D (Wall 0.00141354s, CPU 0.001263s)\n",
"Info : Done meshing 2D (Wall 0.00177322s, CPU 0.001226s)\n",
"Info : Meshing 3D...\n",
"Info : Meshing volume 1 (Transfinite)\n",
"Info : Meshing volume 2 (Transfinite)\n",
"Info : Done meshing 3D (Wall 0.0105143s, CPU 0.003822s)\n",
"Info : Done meshing 3D (Wall 0.0041574s, CPU 0.003658s)\n",
"Info : Optimizing mesh...\n",
"Info : Done optimizing mesh (Wall 0.000106112s, CPU 0.000106s)\n",
"Info : 775 nodes 1344 elements\n",
"Info : Done optimizing mesh (Wall 0.000135884s, CPU 8.4e-05s)\n",
"Info : Meshing order 2 (curvilinear on)...\n",
"Info : [ 0%] Meshing curve 1 order 2\n",
"Info : [ 10%] Meshing curve 2 order 2\n",
"Info : [ 10%] Meshing curve 3 order 2\n",
"Info : [ 10%] Meshing curve 4 order 2\n",
"Info : [ 20%] Meshing curve 5 order 2\n",
"Info : [ 20%] Meshing curve 6 order 2\n",
"Info : [ 20%] Meshing curve 7 order 2\n",
"Info : [ 30%] Meshing curve 8 order 2\n",
"Info : [ 30%] Meshing curve 9 order 2\n",
"Info : [ 30%] Meshing curve 10 order 2\n",
"Info : [ 40%] Meshing curve 11 order 2\n",
"Info : [ 40%] Meshing curve 12 order 2\n",
"Info : [ 40%] Meshing curve 13 order 2\n",
"Info : [ 40%] Meshing curve 14 order 2\n",
"Info : [ 50%] Meshing curve 15 order 2\n",
"Info : [ 50%] Meshing curve 16 order 2\n",
"Info : [ 50%] Meshing curve 17 order 2\n",
"Info : [ 60%] Meshing curve 18 order 2\n",
"Info : [ 60%] Meshing curve 19 order 2\n",
"Info : [ 60%] Meshing curve 20 order 2\n",
"Info : [ 70%] Meshing surface 1 order 2\n",
"Info : [ 70%] Meshing surface 2 order 2\n",
"Info : [ 70%] Meshing surface 3 order 2\n",
"Info : [ 70%] Meshing surface 4 order 2\n",
"Info : [ 80%] Meshing surface 5 order 2\n",
"Info : [ 80%] Meshing surface 6 order 2\n",
"Info : [ 80%] Meshing surface 7 order 2\n",
"Info : [ 90%] Meshing surface 8 order 2\n",
"Info : [ 90%] Meshing surface 9 order 2\n",
"Info : [ 90%] Meshing surface 10 order 2\n",
"Info : [100%] Meshing surface 11 order 2\n",
"Info : [100%] Meshing volume 1 order 2\n",
"Info : [100%] Meshing volume 2 order 2\n",
"Info : Done meshing order 2 (Wall 0.0359411s, CPU 0.027594s)\n",
"Info : 4941 nodes 1344 elements\n",
"Info : Done reading 'buckling-3.geo'\n"
]
}
Expand All @@ -74,7 +109,7 @@
},
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 24,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -83,15 +118,15 @@
},
{
"cell_type": "code",
"execution_count": 36,
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Info : RCMK renumbering...\n",
"Info : Done RCMK renumbering (bandwidth is now 61)\n"
"Info : Done RCMK renumbering (bandwidth is now 386)\n"
]
}
],
Expand All @@ -102,7 +137,7 @@
},
{
"cell_type": "code",
"execution_count": 37,
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -112,7 +147,7 @@
},
{
"cell_type": "code",
"execution_count": 38,
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -121,7 +156,7 @@
},
{
"cell_type": "code",
"execution_count": 39,
"execution_count": 28,
"metadata": {},
"outputs": [
{
Expand All @@ -140,7 +175,7 @@
},
{
"cell_type": "code",
"execution_count": 40,
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -149,7 +184,7 @@
},
{
"cell_type": "code",
"execution_count": 41,
"execution_count": 30,
"metadata": {},
"outputs": [
{
Expand All @@ -168,7 +203,7 @@
},
{
"cell_type": "code",
"execution_count": 42,
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
Expand All @@ -178,25 +213,34 @@
},
{
"cell_type": "code",
"execution_count": 43,
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"q = FEM.solveDisplacement(problem, [load], [supp]);"
"load2 = FEM.load(\"right\", fy=-200);"
]
},
{
"cell_type": "code",
"execution_count": 44,
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"S = FEM.solveStress(problem, q);"
"q = FEM.solveDisplacement(problem, [load, load2], [supp]);"
]
},
{
"cell_type": "code",
"execution_count": 45,
"execution_count": 34,
"metadata": {},
"outputs": [],
"source": [
"S = FEM.solveStress(problem, q, DoFResults=false);"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
Expand All @@ -219,38 +263,128 @@
],
"source": [
"qq = FEM.showDoFResults(problem, q, \"uvec\")\n",
"SS = FEM.showStressResults(problem, S, \"s\")"
"SS = FEM.showStressResults(problem, S, \"s\")\n",
"#SS = FEM.showDoFResults(problem, S, \"s\")"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Info : Running Plugin(Smooth)...\n",
"Info : Done running Plugin(Smooth)\n",
"Info : Running Plugin(Smooth)...\n",
"Info : Done running Plugin(Smooth)\n"
]
},
{
"data": {
"text/plain": [
"5"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"Sx = FEM.showStressResults(problem, S, \"sx\")\n",
"Sxy = FEM.showStressResults(problem, S, \"sxy\")\n",
"#Sx = FEM.showDoFResults(problem, S, \"sx\")\n",
"#Sxy = FEM.showDoFResults(problem, S, \"sxy\")"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"26155.996820546334"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"FEM.resultant(problem, Sx, \"left\", grad=true, component=:x)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"299911.466309165"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"FEM.resultant(problem, Sx, \"left\", grad=true, component=:y)"
]
},
{
"cell_type": "code",
"execution_count": 46,
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2325×2325 SparseArrays.SparseMatrixCSC{Float64, Int64} with 136771 stored entries:\n",
"⎡⣿⣿⡀⡇⠨⠀⡇⢸⡆⠐⠀⣿⡀⠀⠀⢸⠀⠀⠀⠀⣇⢸⠀⡗⠀⠀⠀⠸⠀⡇⢸⡀⡆⢸⠀⡇⢰⠀⡇⢐⎤\n",
"⎢⠤⠬⠻⣦⡀⠀⠀⠀⠀⠀⠀⠤⣭⣙⡓⠦⠀⠀⠀⠀⠉⠳⣄⠀⠀⠀⠀⠀⠀⠀⠀⠙⠆⠠⣄⠀⠀⠀⠀⠀⎥\n",
"⎢⠂⠂⠀⠈⠻⣦⡀⠐⠀⠀⠀⠂⠀⠈⠉⠛⠲⠦⣄⣀⠲⣄⠙⠃⠀⠀⠀⠐⢦⡀⠐⢦⡀⠀⠈⠳⣄⠀⠀⠀⎥\n",
"⎢⣉⣉⠀⠀⢀⠈⡻⣮⡁⢀⠀⡁⠀⠀⠀⢈⠙⠓⠶⢬⡅⠈⠳⣅⠀⠀⠀⢀⠀⡙⢦⠀⠁⠈⠳⡄⢈⠀⡙⢦⎥\n",
"⎢⢈⠉⠀⠀⠀⠀⠁⢈⡻⣮⡀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⣉⣙⡲⠦⣬⠳⣅⠈⠀⠀⠀⠀⠙⢮⠀⣁⠈⎥\n",
"⎢⣤⣤⠀⡄⠠⠀⠄⠠⠄⠈⠻⣦⡀⠀⠀⠠⠀⠀⠀⠀⣄⢠⠀⠄⠈⠉⠛⠲⠀⠈⢳⡀⣄⢠⡀⠄⠀⠀⠈⠳⎥\n",
"⎢⠀⠈⣇⢻⡀⠀⠀⠀⠀⠀⠀⠈⠻⣦⡀⠀⠀⠀⠀⠀⢹⡈⣇⠀⠀⠀⠀⠀⠀⠀⠀⢧⠸⡄⢧⠀⠀⠀⠀⠀⎥\n",
"⎢⣀⣀⠹⡌⣧⠀⡀⢀⠀⠀⠀⡀⠀⠈⠻⣦⡀⠀⠀⠀⡀⢧⠸⡄⠀⠀⠀⢀⡀⣀⢀⡘⣆⢷⠸⡆⢀⠀⡀⠀⎥\n",
"⎢⠀⠀⠀⠀⠸⡆⢷⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣦⡀⠀⢻⡘⡆⠀⠀⠀⠀⠈⣧⢹⡌⣧⢹⡌⣇⢹⡘⣇⢻⡀⎥\n",
"⎢⠀⠀⠀⠀⠀⢹⡘⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣦⡈⣧⢹⡀⠀⠀⠀⠀⠸⡆⢷⠸⡄⢧⠸⡌⢧⢹⡌⣧⎥\n",
"⎢⣉⣙⢧⡀⠘⢦⡁⠉⠁⠀⠀⣙⡓⠲⠤⣌⣛⠲⠦⣬⡻⣮⡀⠁⠀⠀⠀⠀⠀⠁⠈⠳⡅⢈⡀⠁⠈⠀⠁⠈⎥\n",
"⎢⢤⠤⠀⠙⠷⠀⠝⢦⡄⢠⠀⠄⠉⠙⠒⠦⠈⠉⠓⠲⠄⠈⠻⣦⡀⠀⠀⢠⡀⣄⠠⠀⠀⠀⠙⣆⢠⡀⡄⠠⎥\n",
"⎢⠀⠀⠀⠀⠀⠀⠀⠀⢳⡸⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣦⡀⠀⢧⠸⡄⠀⠀⠀⠀⢹⡌⣧⢹⡀⎥\n",
"⎢⣀⡀⠀⠀⢀⠀⠀⢀⡈⣧⢻⡀⠀⠀⠀⢀⡀⠀⠀⠀⠀⠀⠀⣀⠀⠈⠻⣦⡘⡆⢷⠀⠀⠀⠀⡀⢷⠸⡆⢧⎥\n",
"⎢⠤⠤⠀⠀⠈⠳⣄⠠⠝⢦⡀⠀⠀⠀⠀⢨⣍⣛⠲⠦⠄⠀⠀⢬⣉⡓⠲⠬⠻⣦⡀⠀⠀⠀⠀⠙⠦⠀⣄⠀⎥\n",
"⎢⠒⠲⣄⠀⠰⣄⠈⠓⠂⠀⠙⠲⠤⣄⣀⠰⠦⣭⣙⡓⢦⡀⠀⠂⠀⠉⠙⠓⠀⠈⠻⣦⣶⣄⠀⠀⠀⠀⠈⠓⎥\n",
"⎢⣈⣉⠈⡁⠀⠈⡁⠀⠀⠀⠀⣙⠒⠦⢬⣝⡓⠶⠤⣍⡁⢉⠀⠀⠀⠀⠀⠀⠀⠀⠘⢿⣿⣿⣷⡄⠀⠀⠀⠀⎥\n",
"⎢⠤⠤⠀⠙⢦⡀⠙⠦⣄⠀⠀⠌⠉⠓⠲⠦⣍⣙⡒⠦⠄⠈⠳⢤⣄⣀⠀⠠⣄⠀⠀⠀⠙⠿⠻⣦⣠⣄⠀⠀⎥\n",
"⎢⠐⠒⠀⠀⠀⠙⠂⠐⠊⠓⠀⠀⠀⠀⠀⠐⠶⢬⣍⣓⠂⠀⠀⠲⠦⣭⣙⡓⠈⠃⠀⠀⠀⠀⠀⢾⣿⣿⣷⣄⎥\n",
"⎣⢉⢉⠀⠀⠀⠀⠳⣌⡁⠘⢦⡀⠀⠀⠀⠈⠛⠲⠦⣭⡁⠀⠀⡉⠓⠲⠬⣍⠀⠙⢦⠀⠀⠀⠀⠀⠙⢿⡿⣯⎦"
"-20776.378982419657"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"FEM.resultant(problem, Sxy, \"right\")"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"14823×14823 SparseArrays.SparseMatrixCSC{Float64, Int64} with 2360239 stored entries:\n",
"⎡⣿⣿⣛⢹⣿⠶⣶⣇⣃⣀⣸⣾⣿⣛⠉⠀⠈⣃⡛⢛⣿⣶⣇⡃⠘⠸⢤⡏⢧⣟⣛⣀⡃⠁⠐⠈⠀⠃⠁⠋⎤\n",
"⎢⣟⣘⣻⣾⣃⠀⠀⡛⡋⠉⢛⢉⣛⣿⣶⣶⣶⡿⢿⣷⣙⠈⡉⡁⢀⢈⠉⣋⡋⣻⣿⠾⠷⠆⠐⢸⣽⣧⣯⣷⎥\n",
"⎢⢻⡟⠉⠘⡿⣯⡛⠃⠁⠀⢸⡗⣿⠁⠀⠀⠀⠀⠀⠸⣿⣝⠂⢯⡛⠸⣟⠃⢿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥\n",
"⎢⠼⢿⣤⠠⠿⠈⠻⣦⣤⣀⣸⣷⣿⡤⠀⠀⠀⣤⣠⣠⣿⣝⣦⣬⣳⣤⣜⣧⣬⣧⣤⣀⡀⣤⣀⠠⣄⡀⣤⡀⎥\n",
"⎢⠉⢸⡏⠈⠁⠀⠀⢻⠻⣦⣹⣿⣿⡏⠀⠀⠀⣿⢹⡟⣿⢧⢻⡻⣌⣏⢧⣹⣽⣻⡟⣦⠁⢳⡌⠘⢧⡁⢻⡁⎥\n",
"⎢⣲⣾⡟⢐⢶⠶⢶⣾⣷⣾⣿⣿⡟⠓⠀⠀⠀⠛⠛⢳⣿⣾⣿⡇⠙⠘⠀⠃⠃⠛⠛⠈⠃⠀⠙⠀⠈⠃⠀⠃⎥\n",
"⎢⣿⢻⣿⣼⠟⠛⠛⡿⡿⠿⢿⠉⠿⣧⣠⡀⢀⣄⣤⣄⠿⠀⠁⠁⠀⠨⠿⠿⠿⢿⣤⡀⡄⣄⢠⣠⡀⣄⣄⣄⎥\n",
"⎢⠃⠀⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠺⡿⣯⡙⣯⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⣍⢯⢿⡹⡿⣏⢻⢿⣟⎥\n",
"⎢⠦⢠⣼⡿⠀⠀⠀⣤⣤⣤⣤⠀⠀⢴⡷⣬⣿⣿⡿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⢨⣷⣽⣾⡆⠳⠻⠘⠏⠏⠿⎥\n",
"⎢⣿⢈⢿⣷⣀⡀⠀⣺⣷⠶⢿⣀⠀⢿⣿⣿⣿⡏⢻⣶⣀⡀⣀⣀⢀⡀⠀⠀⠀⠈⣿⠉⠋⠃⠀⢰⣶⣶⣶⣶⎥\n",
"⎢⢻⣿⡓⠘⣟⢿⣟⢿⠿⣟⣻⣿⠛⠃⠀⠀⠀⠀⠀⠸⡿⣯⣿⡻⣟⣟⠛⠛⠛⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥\n",
"⎢⠭⠹⠇⠨⡬⣄⡈⣿⣿⡲⠿⠿⠅⠀⠀⠀⠀⠀⠀⢸⣿⡻⣿⣿⡾⡿⣄⢤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥\n",
"⎢⣒⡀⡀⢐⣛⡈⠙⣾⡦⢽⣓⠀⡀⡀⠀⠀⠀⠀⠀⠰⣿⢽⣾⡯⣿⣿⣮⣻⣇⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥\n",
"⎢⡤⠷⡧⢠⠿⠙⠶⣽⣍⣳⠤⠀⣿⡇⠀⠀⠀⠀⠀⠀⣿⠀⠀⣝⣮⣻⣻⣾⣟⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⎥\n",
"⎢⣭⢷⣯⣨⡿⠓⠦⣿⣷⣻⣭⠀⣿⣇⣀⣀⡀⣀⡀⠀⣿⠀⠀⠀⠉⠹⣿⣽⣿⣿⣀⣀⣀⣀⣀⡀⠀⠀⠀⠀⎥\n",
"⎢⠛⢸⣻⡟⠀⠀⠀⢻⠻⣭⡛⠀⠀⠻⡟⢯⣝⣿⡟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡿⣯⣯⡻⣟⣟⠉⠋⠋⠛⎥\n",
"⎢⠍⠈⠹⠇⠀⠀⠀⣬⢥⣀⠉⠀⠀⢭⣯⣗⠺⠿⠯⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣯⡻⣿⣿⣺⡿⣄⢤⠀⠀⎥\n",
"⎢⡐⠀⣐⣀⠀⠀⠀⡘⣂⠉⠓⠀⠀⣲⣷⡮⣽⡂⢀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⢽⣾⡾⣿⣿⣮⣿⣇⡀⎥\n",
"⎢⠤⠀⠷⣿⠀⠀⠀⠹⠍⠳⠦⠀⠀⢬⣯⣙⡶⠄⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡧⠀⠀⣝⣮⣿⣿⣿⣟⣿⎥\n",
"⎣⡥⠀⢯⣿⠀⠀⠀⠻⠟⠲⠤⠀⠀⢽⣿⢷⣯⡅⢸⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣯⠀⠀⠀⠉⠹⣿⣽⣿⣿⎦"
]
},
"metadata": {},
Expand All @@ -263,7 +397,7 @@
},
{
"cell_type": "code",
"execution_count": 47,
"execution_count": 41,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -299,7 +433,7 @@
},
{
"cell_type": "code",
"execution_count": 48,
"execution_count": 42,
"metadata": {
"slideshow": {
"slide_type": ""
Expand Down
Loading

2 comments on commit 90ea3bc

@perebalazs
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator register

Release notes:

New release: 1.8.0

Bug fixes

  • Some corrections in the documentation.

New features

  • Buckling,
  • Modal analysis of prestressed structures,
  • Latent heat matrix (to solve heat generation due to deformations),
  • Shorter scripts for simple problems,
  • Resultant of force, stress or heat flux fields on an arbitrary physical group (nodal forces are summed up, distributed quantities are integrated).

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/124748

Tagging

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v1.8.0 -m "<description of version>" 90ea3bc2ada59e9a8e2c6e99fa3e62435efba030
git push origin v1.8.0

Please sign in to comment.