224 lines
95 KiB
Plaintext
224 lines
95 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Description\n",
|
||
|
"\n",
|
||
|
"This notebook intends to gather all the functionalities you'll have to implement for assignment 2.2.\n",
|
||
|
"\n",
|
||
|
"# Load libraries"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 1,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"import numpy as np\n",
|
||
|
"import igl\n",
|
||
|
"import meshplot as mp\n",
|
||
|
"import time\n",
|
||
|
"\n",
|
||
|
"import sys as _sys\n",
|
||
|
"_sys.path.append(\"../src\")\n",
|
||
|
"from elasticsolid import *\n",
|
||
|
"from elasticenergy import *\n",
|
||
|
"from matplotlib import gridspec\n",
|
||
|
"import matplotlib.pyplot as plt\n",
|
||
|
"\n",
|
||
|
"shadingOptions = {\n",
|
||
|
" \"flat\":True,\n",
|
||
|
" \"wireframe\":False, \n",
|
||
|
"}\n",
|
||
|
"\n",
|
||
|
"rot = np.array(\n",
|
||
|
" [[1, 0, 0 ],\n",
|
||
|
" [0, 0, 1],\n",
|
||
|
" [0, -1, 0 ]]\n",
|
||
|
")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Load mesh\n",
|
||
|
"\n",
|
||
|
"Several meshes are available for you to play with under `data/`: `ball.obj`, `dinosaur.obj`, and `beam.obj`. You can also uncomment the few commented lines below to manipulate a simple mesh made out of 2 tetrahedra."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 2,
|
||
|
"metadata": {
|
||
|
"scrolled": false
|
||
|
},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"v, _, _, t, _, _ = igl.read_obj(\"../data/beam.obj\")\n",
|
||
|
"aabb = np.max(v, axis=0) - np.min(v, axis=0)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Linear/Non-Linear Elastic Solid\n",
|
||
|
"\n",
|
||
|
"## Instantiation\n",
|
||
|
"\n",
|
||
|
"We first specify the elasticity model to use for the elastic solid, as well as pinned vertices, and volumetric forces."
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 6,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"rho = 131 # [kg.m-3]\n",
|
||
|
"young = 10e6 # [Pa] \n",
|
||
|
"poisson = 0.2\n",
|
||
|
"force_mass = np.zeros(shape = (3,))\n",
|
||
|
"force_mass[2] = - rho * 9.81\n",
|
||
|
"\n",
|
||
|
"minX = np.min(v[:, 0])\n",
|
||
|
"pin_idx = np.arange(v.shape[0])[v[:, 0] < minX + 0.2*aabb[0]]\n",
|
||
|
"\n",
|
||
|
"ee = LinearElasticEnergy(young, poisson)\n",
|
||
|
"neo_ee = NeoHookeanElasticEnergy(young, poisson)\n",
|
||
|
"solid = ElasticSolid(v, t, ee, rho=rho, pin_idx=pin_idx, f_mass=force_mass)\n",
|
||
|
"neo_solid = ElasticSolid(v, t, neo_ee, rho=rho, pin_idx=pin_idx, f_mass=force_mass)\n"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Validate Elastic Energy Gradient (Elastic Forces) using Finite Differences on Elastic Energy"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 8,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"fd_validation_elastic(solid)\n",
|
||
|
"fd_validation_elastic(neo_solid)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"# Validate External Energy Gradient (External Forces) using Finite Differences on External Energy"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 9,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
},
|
||
|
{
|
||
|
"data": {
|
||
|
"image/png": "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
|
||
|
"text/plain": [
|
||
|
"<Figure size 432x288 with 1 Axes>"
|
||
|
]
|
||
|
},
|
||
|
"metadata": {
|
||
|
"needs_background": "light"
|
||
|
},
|
||
|
"output_type": "display_data"
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"fd_validation_ext(solid)\n",
|
||
|
"fd_validation_ext(neo_solid)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": []
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "Python 3 (ipykernel)",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 3
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython3",
|
||
|
"version": "3.9.7"
|
||
|
},
|
||
|
"toc": {
|
||
|
"base_numbering": 1,
|
||
|
"nav_menu": {},
|
||
|
"number_sections": true,
|
||
|
"sideBar": true,
|
||
|
"skip_h1_title": false,
|
||
|
"title_cell": "Table of Contents",
|
||
|
"title_sidebar": "Contents",
|
||
|
"toc_cell": false,
|
||
|
"toc_position": {},
|
||
|
"toc_section_display": true,
|
||
|
"toc_window_display": false
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 4
|
||
|
}
|