This package contains wave equation solved with the Method of Lines.
Release Notes:
| Name | Description |
|---|---|
| WaveEquation | |
Implements the wave equation
where c is a constant value. The initial conditions are
and boundary conditions are
Because the integrator block cannot accept the equation in this form, we transform the PDE above into two first-order PDEs:
The first equation is implemented in u block, the second in v block.
The analytical solution of this problem is implemented in WaveAnalytic block.Release Notes:
model WaveEquation
inner PDE.World.worldModel worldModel1(qss=1,
u_xx=1,
n=10);
Modelica.Blocks.Sources.RealExpression BCLu;
Modelica.Blocks.Sources.RealExpression BCLv;
Modelica.Blocks.Sources.RealExpression ICv[worldModel1.n];
WaveIC waveIC;
Modelica.Blocks.Math.Product product[worldModel1.n];
Modelica.Blocks.Sources.RealExpression Friction[worldModel1.n](y=0.0);
Modelica.Blocks.Math.Add add[worldModel1.n];
WaveAnalytic waveAnalytic;
Modelica.Blocks.Math.Product product1[worldModel1.n];
Modelica.Blocks.Sources.RealExpression alpha2[worldModel1.n](y=1.0);
PDE.MOL.SpaceDerivative.Derivatives.u_xx u_xx(
bcr=-1);
Integrator.UniversalIntegrator u(
vb=2,
icb=2,
bcl=1);
Integrator.UniversalIntegrator v(
vb=2,
icb=2,
bcl=1);
equation
connect(product.y, add.u2);
connect(Friction.y, product.u1);
connect(alpha2.y, product1.u1);
connect(product1.y, add.u1);
connect(u_xx.y, product1.u2);
connect(u.y, u_xx.u);
connect(v.y, product.u2);
connect(add.y, v.u);
connect(v.y, u.u);
connect(waveIC.y, u.u1);
connect(BCLu.y, u.u2);
connect(ICv.y, v.u1);
connect(BCLv.y, v.u2);
end WaveEquation;
PDE.MOL.Examples.Wave.WaveIC
Implements the initial condition for the first equation of the wave equation system
Release Notes:
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | n | worldModel1.n |
| Type | Name | Description |
|---|---|---|
| output RealOutput | y[worldModel1.n] |
block WaveIC
extends PDE.Icons.BlockIcon;
outer PDE.World.worldModel worldModel1;
inner parameter Integer n = worldModel1.n;
Modelica.Blocks.Interfaces.RealOutput y[worldModel1.n];
Modelica.Blocks.Math.Add add[worldModel1.n](k2=-1);
Modelica.Blocks.Sources.IntegerExpression integerExpression[worldModel1.n](y=1);
Modelica.Blocks.Math.Product product[worldModel1.n];
Modelica.Blocks.Sources.RealExpression realExpression[worldModel1.n](y=3.14);
Modelica.Blocks.Sources.RealExpression realExpression1[worldModel1.n](y=2*(
worldModel1.n - 1));
Modelica.Blocks.Math.Division division[worldModel1.n];
Modelica.Blocks.Sources.Constant index_i[worldModel1.n](k=1:worldModel1.
n);
Modelica.Blocks.Math.Sin sin[worldModel1.n];
equation
connect(realExpression.y, product.u2);
connect(add.y, product.u1);
connect(product.y, division.u1);
connect(index_i.y, add.u1);
connect(realExpression1.y, division.u2);
connect(integerExpression.y, add.u2);
connect(division.y, sin.u);
connect(sin.y, y);
end WaveIC;
PDE.MOL.Examples.Wave.WaveAnalytic
Implements the analytical solution of the wave equation
Release Notes:
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | n | worldModel1.n |
| Type | Name | Description |
|---|---|---|
| output RealOutput | y[worldModel1.n] |
block WaveAnalytic
extends Icons.BlockIcon4;
outer PDE.World.worldModel worldModel1;
parameter Integer n = worldModel1.n;
Modelica.Blocks.Interfaces.RealOutput y[worldModel1.n];
equation
for i in 1:n loop
y[i] = 0.5*sin((3.14/2)*(((i-1)/(n-1)) - time)) + 0.5*sin((3.14/2)*(((i-1)/(n-1)) + time));
end for;
end WaveAnalytic;