Skip to content

Commit d9738f3

Browse files
MatteB03ndem0
authored andcommitted
Update Condition notation & domains import in tutorials
1 parent f3dab12 commit d9738f3

File tree

18 files changed

+220
-252
lines changed

18 files changed

+220
-252
lines changed

tutorials/tutorial11/tutorial.ipynb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"from pina.model import FeedForward\n",
4040
"from pina.problem import SpatialProblem\n",
4141
"from pina.operators import grad\n",
42-
"from pina.geometry import CartesianDomain\n",
42+
"from pina.domain import CartesianDomain\n",
4343
"from pina.equation import Equation, FixedValue\n",
4444
"\n",
4545
"class SimpleODE(SpatialProblem):\n",
@@ -55,8 +55,8 @@
5555
"\n",
5656
" # conditions to hold\n",
5757
" conditions = {\n",
58-
" 'x0': Condition(location=CartesianDomain({'x': 0.}), equation=FixedValue(1)), # We fix initial condition to value 1\n",
59-
" 'D': Condition(location=CartesianDomain({'x': [0, 1]}), equation=Equation(ode_equation)), # We wrap the python equation using Equation\n",
58+
" 'bound_cond': Condition(domain=CartesianDomain({'x': 0.}), equation=FixedValue(1)), # We fix initial condition to value 1\n",
59+
" 'phys_cond': Condition(domain=CartesianDomain({'x': [0, 1]}), equation=Equation(ode_equation)), # We wrap the python equation using Equation\n",
6060
" }\n",
6161
"\n",
6262
" # defining the true solution\n",
@@ -66,8 +66,8 @@
6666
"\n",
6767
"# sampling for training\n",
6868
"problem = SimpleODE()\n",
69-
"problem.discretise_domain(1, 'random', locations=['x0'])\n",
70-
"problem.discretise_domain(20, 'lh', locations=['D'])\n",
69+
"problem.discretise_domain(1, 'random', domains=['bound_cond'])\n",
70+
"problem.discretise_domain(20, 'lh', domains=['phys_cond'])\n",
7171
"\n",
7272
"# build the model\n",
7373
"model = FeedForward(\n",
@@ -809,7 +809,7 @@
809809
],
810810
"metadata": {
811811
"kernelspec": {
812-
"display_name": "pina",
812+
"display_name": "Python 3",
813813
"language": "python",
814814
"name": "python3"
815815
},
@@ -823,7 +823,7 @@
823823
"name": "python",
824824
"nbconvert_exporter": "python",
825825
"pygments_lexer": "ipython3",
826-
"version": "3.9.16"
826+
"version": "3.12.3"
827827
}
828828
},
829829
"nbformat": 4,

tutorials/tutorial11/tutorial.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def ode_equation(input_, output_):
4848

4949
# conditions to hold
5050
conditions = {
51-
'x0': Condition(location=CartesianDomain({'x': 0.}), equation=FixedValue(1)), # We fix initial condition to value 1
52-
'D': Condition(location=CartesianDomain({'x': [0, 1]}), equation=Equation(ode_equation)), # We wrap the python equation using Equation
51+
'bound_cond': Condition(domain=CartesianDomain({'x': 0.}), equation=FixedValue(1)), # We fix initial condition to value 1
52+
'phys_cond': Condition(domain=CartesianDomain({'x': [0, 1]}), equation=Equation(ode_equation)), # We wrap the python equation using Equation
5353
}
5454

5555
# defining the true solution
@@ -59,8 +59,8 @@ def truth_solution(self, pts):
5959

6060
# sampling for training
6161
problem = SimpleODE()
62-
problem.discretise_domain(1, 'random', locations=['x0'])
63-
problem.discretise_domain(20, 'lh', locations=['D'])
62+
problem.discretise_domain(1, 'random', domains=['bound_cond'])
63+
problem.discretise_domain(20, 'lh', domains=['phys_cond'])
6464

6565
# build the model
6666
model = FeedForward(

tutorials/tutorial12/tutorial.ipynb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@
100100
"\n",
101101
" # problem condition statement\n",
102102
" conditions = {\n",
103-
" 'gamma1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
104-
" 'gamma2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
105-
" 't0': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
106-
" 'D': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Equation(burger_equation)),\n",
103+
" 'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
104+
" 'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
105+
" 'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
106+
" 'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Equation(burger_equation)),\n",
107107
" }"
108108
]
109109
},
@@ -196,10 +196,10 @@
196196
"\n",
197197
" # problem condition statement\n",
198198
" conditions = {\n",
199-
" 'gamma1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
200-
" 'gamma2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
201-
" 't0': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
202-
" 'D': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Burgers1DEquation(0.01/torch.pi)),\n",
199+
" 'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
200+
" 'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),\n",
201+
" 'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),\n",
202+
" 'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Burgers1DEquation(0.01/torch.pi)),\n",
203203
" }"
204204
]
205205
},

tutorials/tutorial12/tutorial.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#
2727
# In the class that models this problem we will see in action the `Equation` class and one of its inherited classes, the `FixedValue` class.
2828

29-
# In[7]:
29+
# In[1]:
3030

3131

3232
## routine needed to run the notebook on Google Colab
@@ -40,14 +40,15 @@
4040

4141
#useful imports
4242
from pina.problem import SpatialProblem, TimeDependentProblem
43-
from pina.equation import Equation, FixedValue, FixedGradient, FixedFlux
43+
from pina.equation import Equation, FixedValue
4444
from pina.domain import CartesianDomain
4545
import torch
4646
from pina.operators import grad, laplacian
4747
from pina import Condition
4848

4949

50-
# In[6]:
50+
51+
# In[2]:
5152

5253

5354
class Burgers1D(TimeDependentProblem, SpatialProblem):
@@ -74,17 +75,17 @@ def initial_condition(input_, output_):
7475

7576
# problem condition statement
7677
conditions = {
77-
'gamma1': Condition(location=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),
78-
'gamma2': Condition(location=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),
79-
't0': Condition(location=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),
80-
'D': Condition(location=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Equation(burger_equation)),
78+
'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),
79+
'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),
80+
'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),
81+
'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Equation(burger_equation)),
8182
}
8283

8384

8485
#
8586
# The `Equation` class takes as input a function (in this case it happens twice, with `initial_condition` and `burger_equation`) which computes a residual of an equation, such as a PDE. In a problem class such as the one above, the `Equation` class with such a given input is passed as a parameter in the specified `Condition`.
8687
#
87-
# The `FixedValue` class takes as input a value of same dimensions of the output functions; this class can be used to enforced a fixed value for a specific condition, e.g. Dirichlet boundary conditions, as it happens for instance in our example.
88+
# The `FixedValue` class takes as input a value of same dimensions of the output functions; this class can be used to enforce a fixed value for a specific condition, e.g. Dirichlet boundary conditions, as it happens for instance in our example.
8889
#
8990
# Once the equations are set as above in the problem conditions, the PINN solver will aim to minimize the residuals described in each equation in the training phase.
9091

@@ -98,7 +99,7 @@ def initial_condition(input_, output_):
9899

99100
# `Equation` classes can be also inherited to define a new class. As example, we can see how to rewrite the above problem introducing a new class `Burgers1D`; during the class call, we can pass the viscosity parameter $\nu$:
100101

101-
# In[13]:
102+
# In[3]:
102103

103104

104105
class Burgers1DEquation(Equation):
@@ -113,15 +114,17 @@ def __init__(self, nu = 0.):
113114
self.nu = nu
114115

115116
def equation(input_, output_):
116-
return grad(output_, input_, d='t') + output_*grad(output_, input_, d='x') - self.nu*laplacian(output_, input_, d='x')
117+
return grad(output_, input_, d='t') +\
118+
output_*grad(output_, input_, d='x') -\
119+
self.nu*laplacian(output_, input_, d='x')
117120

118121

119122
super().__init__(equation)
120123

121124

122125
# Now we can just pass the above class as input for the last condition, setting $\nu= \frac{0.01}{\pi}$:
123126

124-
# In[14]:
127+
# In[4]:
125128

126129

127130
class Burgers1D(TimeDependentProblem, SpatialProblem):
@@ -138,16 +141,16 @@ def initial_condition(input_, output_):
138141

139142
# problem condition statement
140143
conditions = {
141-
'gamma1': Condition(location=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),
142-
'gamma2': Condition(location=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),
143-
't0': Condition(location=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),
144-
'D': Condition(location=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Burgers1DEquation(0.01/torch.pi)),
144+
'bound_cond1': Condition(domain=CartesianDomain({'x': -1, 't': [0, 1]}), equation=FixedValue(0.)),
145+
'bound_cond2': Condition(domain=CartesianDomain({'x': 1, 't': [0, 1]}), equation=FixedValue(0.)),
146+
'time_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': 0}), equation=Equation(initial_condition)),
147+
'phys_cond': Condition(domain=CartesianDomain({'x': [-1, 1], 't': [0, 1]}), equation=Burgers1DEquation(0.01/torch.pi)),
145148
}
146149

147150

148151
# # What's next?
149152

150-
# Congratulations on completing the `Equation` class tutorial of **PINA**! As we have seen, you can build new classes that inherits `Equation` to store more complex equations, as the Burgers 1D equation, only requiring to pass the characteristic coefficients of the problem.
153+
# Congratulations on completing the `Equation` class tutorial of **PINA**! As we have seen, you can build new classes that inherit `Equation` to store more complex equations, as the Burgers 1D equation, only requiring to pass the characteristic coefficients of the problem.
151154
# From now on, you can:
152155
# - define additional complex equation classes (e.g. `SchrodingerEquation`, `NavierStokeEquation`..)
153156
# - define more `FixedOperator` (e.g. `FixedCurl`)

tutorials/tutorial13/tutorial.ipynb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"from pina.solvers import PINN, SAPINN\n",
4141
"from pina.model.layers import FourierFeatureEmbedding\n",
4242
"from pina.loss import LpLoss\n",
43-
"from pina.geometry import CartesianDomain\n",
43+
"from pina.domain import CartesianDomain\n",
4444
"from pina.equation import Equation, FixedValue\n",
4545
"from pina.model import FeedForward\n"
4646
]
@@ -89,11 +89,11 @@
8989
"\n",
9090
" # here we write the problem conditions\n",
9191
" conditions = {\n",
92-
" 'gamma0' : Condition(location=CartesianDomain({'x': 0}),\n",
92+
" 'bound_cond0' : Condition(domain=CartesianDomain({'x': 0}),\n",
9393
" equation=FixedValue(0)),\n",
94-
" 'gamma1' : Condition(location=CartesianDomain({'x': 1}),\n",
94+
" 'bound_cond1' : Condition(domain=CartesianDomain({'x': 1}),\n",
9595
" equation=FixedValue(0)),\n",
96-
" 'D': Condition(location=spatial_domain,\n",
96+
" 'phys_cond': Condition(domain=spatial_domain,\n",
9797
" equation=Equation(poisson_equation)),\n",
9898
" }\n",
9999
"\n",
@@ -453,7 +453,7 @@
453453
],
454454
"metadata": {
455455
"kernelspec": {
456-
"display_name": "pina",
456+
"display_name": "Python 3",
457457
"language": "python",
458458
"name": "python3"
459459
},
@@ -467,7 +467,7 @@
467467
"name": "python",
468468
"nbconvert_exporter": "python",
469469
"pygments_lexer": "ipython3",
470-
"version": "3.9.16"
470+
"version": "3.12.3"
471471
}
472472
},
473473
"nbformat": 4,

tutorials/tutorial13/tutorial.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from pina.solvers import PINN, SAPINN
3434
from pina.model.layers import FourierFeatureEmbedding
3535
from pina.loss import LpLoss
36-
from pina.geometry import CartesianDomain
36+
from pina.domain import CartesianDomain
3737
from pina.equation import Equation, FixedValue
3838
from pina.model import FeedForward
3939

@@ -74,11 +74,11 @@ def poisson_equation(input_, output_):
7474

7575
# here we write the problem conditions
7676
conditions = {
77-
'gamma0' : Condition(location=CartesianDomain({'x': 0}),
77+
'bound_cond0' : Condition(domain=CartesianDomain({'x': 0}),
7878
equation=FixedValue(0)),
79-
'gamma1' : Condition(location=CartesianDomain({'x': 1}),
79+
'bound_cond1' : Condition(domain=CartesianDomain({'x': 1}),
8080
equation=FixedValue(0)),
81-
'D': Condition(location=spatial_domain,
81+
'phys_cond': Condition(domain=spatial_domain,
8282
equation=Equation(poisson_equation)),
8383
}
8484

tutorials/tutorial2/tutorial.ipynb

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"from pina.solvers import PINN\n",
4040
"from pina.trainer import Trainer\n",
4141
"from pina.plotter import Plotter\n",
42-
"from pina.geometry import CartesianDomain\n",
42+
"from pina.domain import CartesianDomain\n",
4343
"from pina.equation import Equation, FixedValue\n",
4444
"from pina import Condition, LabelTensor\n",
4545
"from pina.callbacks import MetricTracker"
@@ -90,11 +90,11 @@
9090
"\n",
9191
" # here we write the problem conditions\n",
9292
" conditions = {\n",
93-
" 'gamma1': Condition(location=CartesianDomain({'x': [0, 1], 'y': 1}), equation=FixedValue(0.)),\n",
94-
" 'gamma2': Condition(location=CartesianDomain({'x': [0, 1], 'y': 0}), equation=FixedValue(0.)),\n",
95-
" 'gamma3': Condition(location=CartesianDomain({'x': 1, 'y': [0, 1]}), equation=FixedValue(0.)),\n",
96-
" 'gamma4': Condition(location=CartesianDomain({'x': 0, 'y': [0, 1]}), equation=FixedValue(0.)),\n",
97-
" 'D': Condition(location=CartesianDomain({'x': [0, 1], 'y': [0, 1]}), equation=Equation(laplace_equation)),\n",
93+
" 'bound_cond1': Condition(domain=CartesianDomain({'x': [0, 1], 'y': 1}), equation=FixedValue(0.)),\n",
94+
" 'bound_cond2': Condition(domain=CartesianDomain({'x': [0, 1], 'y': 0}), equation=FixedValue(0.)),\n",
95+
" 'bound_cond3': Condition(domain=CartesianDomain({'x': 1, 'y': [0, 1]}), equation=FixedValue(0.)),\n",
96+
" 'bound_cond4': Condition(domain=CartesianDomain({'x': 0, 'y': [0, 1]}), equation=FixedValue(0.)),\n",
97+
" 'phys_cond': Condition(domain=CartesianDomain({'x': [0, 1], 'y': [0, 1]}), equation=Equation(laplace_equation)),\n",
9898
" }\n",
9999
"\n",
100100
" def poisson_sol(self, pts):\n",
@@ -108,8 +108,8 @@
108108
"problem = Poisson()\n",
109109
"\n",
110110
"# let's discretise the domain\n",
111-
"problem.discretise_domain(25, 'grid', locations=['D'])\n",
112-
"problem.discretise_domain(25, 'grid', locations=['gamma1', 'gamma2', 'gamma3', 'gamma4'])"
111+
"problem.discretise_domain(25, 'grid', domains=['phys_cond'])\n",
112+
"problem.discretise_domain(25, 'grid', domains=['bound_cond1', 'bound_cond2', 'bound_cond3', 'bound_cond4'])"
113113
]
114114
},
115115
{
@@ -585,11 +585,8 @@
585585
}
586586
],
587587
"metadata": {
588-
"interpreter": {
589-
"hash": "56be7540488f3dc66429ddf54a0fa9de50124d45fcfccfaf04c4c3886d735a3a"
590-
},
591588
"kernelspec": {
592-
"display_name": "Python 3 (ipykernel)",
589+
"display_name": "Python 3",
593590
"language": "python",
594591
"name": "python3"
595592
},
@@ -603,7 +600,7 @@
603600
"name": "python",
604601
"nbconvert_exporter": "python",
605602
"pygments_lexer": "ipython3",
606-
"version": "3.9.16"
603+
"version": "3.12.3"
607604
}
608605
},
609606
"nbformat": 4,

tutorials/tutorial2/tutorial.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ def laplace_equation(input_, output_):
6565

6666
# here we write the problem conditions
6767
conditions = {
68-
'gamma1': Condition(location=CartesianDomain({'x': [0, 1], 'y': 1}), equation=FixedValue(0.)),
69-
'gamma2': Condition(location=CartesianDomain({'x': [0, 1], 'y': 0}), equation=FixedValue(0.)),
70-
'gamma3': Condition(location=CartesianDomain({'x': 1, 'y': [0, 1]}), equation=FixedValue(0.)),
71-
'gamma4': Condition(location=CartesianDomain({'x': 0, 'y': [0, 1]}), equation=FixedValue(0.)),
72-
'D': Condition(location=CartesianDomain({'x': [0, 1], 'y': [0, 1]}), equation=Equation(laplace_equation)),
68+
'bound_cond1': Condition(domain=CartesianDomain({'x': [0, 1], 'y': 1}), equation=FixedValue(0.)),
69+
'bound_cond2': Condition(domain=CartesianDomain({'x': [0, 1], 'y': 0}), equation=FixedValue(0.)),
70+
'bound_cond3': Condition(domain=CartesianDomain({'x': 1, 'y': [0, 1]}), equation=FixedValue(0.)),
71+
'bound_cond4': Condition(domain=CartesianDomain({'x': 0, 'y': [0, 1]}), equation=FixedValue(0.)),
72+
'phys_cond': Condition(domain=CartesianDomain({'x': [0, 1], 'y': [0, 1]}), equation=Equation(laplace_equation)),
7373
}
7474

7575
def poisson_sol(self, pts):
@@ -83,8 +83,8 @@ def poisson_sol(self, pts):
8383
problem = Poisson()
8484

8585
# let's discretise the domain
86-
problem.discretise_domain(25, 'grid', locations=['D'])
87-
problem.discretise_domain(25, 'grid', locations=['gamma1', 'gamma2', 'gamma3', 'gamma4'])
86+
problem.discretise_domain(25, 'grid', locations=['phys_cond'])
87+
problem.discretise_domain(25, 'grid', locations=['bound_cond1', 'bound_cond2', 'bound_cond3', 'bound_cond4'])
8888

8989

9090
# ## Solving the problem with standard PINNs

0 commit comments

Comments
 (0)