Files
JuliaFEM.jl/docs/getfem_examples/A_step-by-step_basic_example_python.ipynb
T

530 lines
141 KiB
Plaintext
Raw Normal View History

2015-05-21 22:54:28 +03:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#A step-by-step basic example"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## import basic modules"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import getfem as gf\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## creation of a simple cartesian mesh"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"m = gf.Mesh('cartesian', np.arange(0,1.1,0.1), np.arange(0,1.1,0.1))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## create a MeshFem of for a field of dimension 1 (i.e. a scalar field)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mf = gf.MeshFem(m, 1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## assign the Q2 fem to all convexes of the MeshFem"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mf.set_fem(gf.Fem('FEM_QK(2,2)'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## view the expression of its basis functions on the reference convex"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"('1 - 3*x - 3*y + 2*x^2 + 9*x*y + 2*y^2 - 6*x^2*y - 6*x*y^2 + 4*x^2*y^2', '4*x - 4*x^2 - 12*x*y + 12*x^2*y + 8*x*y^2 - 8*x^2*y^2', '-x + 2*x^2 + 3*x*y - 6*x^2*y - 2*x*y^2 + 4*x^2*y^2', '4*y - 12*x*y - 4*y^2 + 8*x^2*y + 12*x*y^2 - 8*x^2*y^2', '16*x*y - 16*x^2*y - 16*x*y^2 + 16*x^2*y^2', '-4*x*y + 8*x^2*y + 4*x*y^2 - 8*x^2*y^2', '-y + 3*x*y + 2*y^2 - 2*x^2*y - 6*x*y^2 + 4*x^2*y^2', '-4*x*y + 4*x^2*y + 8*x*y^2 - 8*x^2*y^2', 'x*y - 2*x^2*y - 2*x*y^2 + 4*x^2*y^2')\n"
]
}
],
"source": [
"print gf.Fem('FEM_QK(2,2)').poly_str()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## an exact integration will be used"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mim = gf.MeshIm(m, gf.Integ('IM_EXACT_PARALLELEPIPED(2)'))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## detect the border of the mesh"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"border = m.outer_faces()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## mark it as boundary #42"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"m.set_region(42, border)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## empty real model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"md = gf.Model('real')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## declare that \"u\" is an unknown of the system on the finite element method `mf`"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"md.add_fem_variable('u', mf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## add generic elliptic brick on \"u\""
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"md.add_Laplacian_brick(mim, 'u');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## add Dirichlet condition"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"1"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = mf.eval('x*(x-1) - y*(y-1)')\n",
"md.add_initialized_fem_data('DirichletData', mf, g)\n",
"md.add_Dirichlet_condition_with_multipliers(mim, 'u', mf, 42, 'DirichletData')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## solve the linear system"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0, 1)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"md.solve()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## extracted solution"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"u = md.variable('u')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## export computed solution"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"mf.export_to_pos('u.pos',u,'Computed solution')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting gscript\n"
]
}
],
"source": [
"%%writefile gscript\n",
"Print \"solution.png\";\n",
"Exit;"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Print \"solution.png\";\r\n",
"Exit;"
]
}
],
"source": [
"!cat gscript"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"!gmsh u.pos gscript"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from IPython.core.display import Image"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nIbau0ZsoKAHhOT2iH3u
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image('solution.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# add source term"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"f = mf.eval('10')\n",
"md.add_initialized_fem_data('VolumicData', mf, f)\n",
"md.add_source_term_brick(mim, 'u', 'VolumicData')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"md.solve()\n",
"u = md.variable('u')\n",
"mf.export_to_pos('u.pos',u,'Computed solution')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting gscript\n"
]
}
],
"source": [
"%%writefile gscript\n",
"Print \"solution_with_source_term.png\";\n",
"Exit;"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"!gmsh u.pos gscript"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nCiGYR1h1cwaQfEOnpbi
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image('solution_with_source_term.png')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}