Update Tutorials 0.2 (#490)

This commit is contained in:
Dario Coscia
2025-03-13 20:15:48 +01:00
committed by Nicola Demo
parent beee4cdc0b
commit 6ce0bafc2b
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
},