Update Tutorials 0.2 (#490)

This commit is contained in:
Dario Coscia
2025-03-13 20:15:48 +01:00
committed by FilippoOlivo
parent 03be447e02
commit 86222b3ac6
30 changed files with 1526 additions and 5227 deletions

View File

@@ -63,11 +63,11 @@
"import torch\n",
"\n",
"#useful imports\n",
"from pina import Condition\n",
"from pina.problem import SpatialProblem, TimeDependentProblem\n",
"from pina.equation import Equation, FixedValue\n",
"from pina.domain import CartesianDomain\n",
"from pina.operator import grad, laplacian\n",
"from pina import Condition"
"from pina.operator import grad, laplacian"
]
},
{
@@ -76,34 +76,50 @@
"metadata": {},
"outputs": [],
"source": [
"# define the burger equation\n",
"def burger_equation(input_, output_):\n",
" du = grad(output_, input_)\n",
" ddu = grad(du, input_, components=[\"dudx\"])\n",
" return (\n",
" du.extract([\"dudt\"])\n",
" + output_.extract([\"u\"]) * du.extract([\"dudx\"])\n",
" - (0.01 / torch.pi) * ddu.extract([\"ddudxdx\"])\n",
" )\n",
"\n",
"\n",
"# define initial condition\n",
"def initial_condition(input_, output_):\n",
" u_expected = -torch.sin(torch.pi * input_.extract([\"x\"]))\n",
" return output_.extract([\"u\"]) - u_expected\n",
"\n",
"\n",
"class Burgers1D(TimeDependentProblem, SpatialProblem):\n",
"\n",
" # define the burger equation\n",
" def burger_equation(input_, output_):\n",
" du = grad(output_, input_)\n",
" ddu = grad(du, input_, components=['dudx'])\n",
" return (\n",
" du.extract(['dudt']) +\n",
" output_.extract(['u'])*du.extract(['dudx']) -\n",
" (0.01/torch.pi)*ddu.extract(['ddudxdx'])\n",
" )\n",
"\n",
" # define initial condition\n",
" def initial_condition(input_, output_):\n",
" u_expected = -torch.sin(torch.pi*input_.extract(['x']))\n",
" return output_.extract(['u']) - u_expected\n",
"\n",
" # assign output/ spatial and temporal variables\n",
" output_variables = ['u']\n",
" spatial_domain = CartesianDomain({'x': [-1, 1]})\n",
" temporal_domain = CartesianDomain({'t': [0, 1]})\n",
" output_variables = [\"u\"]\n",
" spatial_domain = CartesianDomain({\"x\": [-1, 1]})\n",
" temporal_domain = CartesianDomain({\"t\": [0, 1]})\n",
"\n",
" domains = {\n",
" \"bound_cond1\": CartesianDomain({\"x\": -1, \"t\": [0, 1]}),\n",
" \"bound_cond2\": CartesianDomain({\"x\": 1, \"t\": [0, 1]}),\n",
" \"time_cond\": CartesianDomain({\"x\": [-1, 1], \"t\": 0}),\n",
" \"phys_cond\": CartesianDomain({\"x\": [-1, 1], \"t\": [0, 1]}),\n",
" }\n",
" # problem condition statement\n",
" conditions = {\n",
" 'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
" 'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
" 'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
" 'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Equation(burger_equation)),\n",
" \"bound_cond1\": Condition(\n",
" domain=\"bound_cond1\", equation=FixedValue(0.0)\n",
" ),\n",
" \"bound_cond2\": Condition(\n",
" domain=\"bound_cond2\", equation=FixedValue(0.0)\n",
" ),\n",
" \"time_cond\": Condition(\n",
" domain=\"time_cond\", equation=Equation(initial_condition)\n",
" ),\n",
" \"phys_cond\": Condition(\n",
" domain=\"phys_cond\", equation=Equation(burger_equation)\n",
" ),\n",
" }"
]
},
@@ -186,20 +202,34 @@
"\n",
" # define initial condition\n",
" def initial_condition(input_, output_):\n",
" u_expected = -torch.sin(torch.pi*input_.extract(['x']))\n",
" return output_.extract(['u']) - u_expected\n",
" u_expected = -torch.sin(torch.pi * input_.extract([\"x\"]))\n",
" return output_.extract([\"u\"]) - u_expected\n",
"\n",
" # assign output/ spatial and temporal variables\n",
" output_variables = ['u']\n",
" spatial_domain = CartesianDomain({'x': [-1, 1]})\n",
" temporal_domain = CartesianDomain({'t': [0, 1]})\n",
" output_variables = [\"u\"]\n",
" spatial_domain = CartesianDomain({\"x\": [-1, 1]})\n",
" temporal_domain = CartesianDomain({\"t\": [0, 1]})\n",
"\n",
" domains = {\n",
" \"bound_cond1\": CartesianDomain({\"x\": -1, \"t\": [0, 1]}),\n",
" \"bound_cond2\": CartesianDomain({\"x\": 1, \"t\": [0, 1]}),\n",
" \"time_cond\": CartesianDomain({\"x\": [-1, 1], \"t\": 0}),\n",
" \"phys_cond\": CartesianDomain({\"x\": [-1, 1], \"t\": [0, 1]}),\n",
" }\n",
" # problem condition statement\n",
" conditions = {\n",
" 'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
" 'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
" 'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
" 'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Burgers1DEquation(0.01/torch.pi)),\n",
" \"bound_cond1\": Condition(\n",
" domain=\"bound_cond1\", equation=FixedValue(0.0)\n",
" ),\n",
" \"bound_cond2\": Condition(\n",
" domain=\"bound_cond2\", equation=FixedValue(0.0)\n",
" ),\n",
" \"time_cond\": Condition(\n",
" domain=\"time_cond\", equation=Equation(initial_condition)\n",
" ),\n",
" \"phys_cond\": Condition(\n",
" domain=\"phys_cond\", equation=Burgers1DEquation(nu=0.01 / torch.pi)\n",
" ),\n",
" }"
]
},
@@ -223,7 +253,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"display_name": "pina",
"language": "python",
"name": "python3"
},
@@ -237,7 +267,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.3"
"version": "3.9.21"
},
"orig_nbformat": 4
},