<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://e6.ijs.si/medusa/wiki/api.php?action=feedcontributions&amp;user=JMocnik&amp;feedformat=atom</id>
		<title>Medusa: Coordinate Free Mehless Method implementation - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://e6.ijs.si/medusa/wiki/api.php?action=feedcontributions&amp;user=JMocnik&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php/Special:Contributions/JMocnik"/>
		<updated>2026-05-12T05:13:33Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.1</generator>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2458</id>
		<title>Wave equation</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2458"/>
				<updated>2019-05-08T11:14:28Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: Terminology corrected.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2D wave equation with Dirichlet boundary conditions ==&lt;br /&gt;
We are solving a problem analogous to a clamped circular membrane being forced to oscillate by fixing its centre to a rigid oscillating rod.  The domain of calculation is for this reason an annulus bounded by the point of contact with the circular source in the centre and the clamped edge of the circular membrane.&lt;br /&gt;
&lt;br /&gt;
[[File:wave_2d_domain_geo.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Consider the time dependent solution to 2D wave equation on annulus shaped domain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
    	\frac{ \partial^2 u}{\partial t^2} &amp;amp;= c^2 \nabla^2 u  &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
         u(r,t=0)&amp;amp;=0 &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
    	  u &amp;amp;= 0           &amp;amp;&amp;amp;\text{on } \partial \Omega_O,\\&lt;br /&gt;
          u &amp;amp;= f(t)           &amp;amp;&amp;amp;\text{on } \partial \Omega_I,&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where $\partial\Omega_I$ denotes the inner and $\partial\Omega_O$ the outer boundary of the domain. Through the  boundary condition on the inner boundary the source is introduced to the problem as a function of time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
f(t)= u_o \sin \omega_o t.&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First the domain is constructed by subtracting a smaller circle domain from a larger one. Boundaries of the domain are populated in the same step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// // identifier to be added to nodes on the inner boundary&lt;br /&gt;
int CENTRE = -10;&lt;br /&gt;
&lt;br /&gt;
 // build circle domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; domain({0, 0}, outer_radius);&lt;br /&gt;
auto discretization = domain.discretizeBoundaryWithStep(dx);&lt;br /&gt;
&lt;br /&gt;
// build source domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; empty({0, 0}, inner_radius);&lt;br /&gt;
auto discretization_empty = empty.discretizeBoundaryWithStep(dx, CENTRE);  &lt;br /&gt;
    &lt;br /&gt;
// substract the source domain&lt;br /&gt;
discretization -= discretization_empty;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next the domain is populated with nodes in accordance with the desired density function. Once the domain is constructed and discretized, the support (neighborhood) of $n$ nodes is found  for each node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GeneralFill&amp;lt;Vec2d&amp;gt; fill;&lt;br /&gt;
fill.seed(fill_seed);&lt;br /&gt;
discretization.fill(fill, fill_density);&lt;br /&gt;
&lt;br /&gt;
 // find support&lt;br /&gt;
FindClosest find_support(n);&lt;br /&gt;
discretization.findSupport(find_support);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The density function &amp;quot;fill_density&amp;quot; takes as argument the coordinates inside the domain and returns the desired distance between neighboring nodes for that location.&lt;br /&gt;
Now the domain preparation is complete, as domain is constructed and populated with nodes with support relations established. We continue by constructing the approximation engine.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
WLS&amp;lt;Monomials&amp;lt;Vec2d&amp;gt;, GaussianWeight&amp;lt;Vec2d&amp;gt;, ScaleToClosest&amp;gt; approx(m - 1 , sigma);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are solving a time propagation problem implicitly, we will have to solve a system of equations for every time step. This is equivalent to solving a matrix equation. For this reason a space matrix is constructed. Next the wave equation is turned into code. Medusa encodes this information inside the just constructed matrix $M$. $E1$ and $E0$ represent the known solutions on previous two time steps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
SparseMatrix&amp;lt;double&amp;gt; M(domain_size, domain_size);&lt;br /&gt;
// Set equation on interior&lt;br /&gt;
for (int i : interior) {&lt;br /&gt;
    -(v*v*dt*dt) * op.lap(i) + op.value(i)= 2*E1(i)-E0(i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Same is done also for the boundary nodes. Since dirichlet boundary conditions are employed the values of the Right Hand Side ($rhs$) of matrix equation are just set to prescribed values ($0$ on the outer boundary and $f(t)$ on inner boundary).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// Set boundary conditions&lt;br /&gt;
for (int i : boundary) {&lt;br /&gt;
    if (discretization.types()[i] == CENTRE) {&lt;br /&gt;
        op.value(i) = A * std::sin(omega*dt*2);  // step&lt;br /&gt;
    } else {&lt;br /&gt;
        op.value(i) = 0.0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At each time step the matrix equation is solved  using an Eigen linear equation solver, in this case, the BiCGStab algorithm. $E0$ and $E1$ are updated and the source is set to new value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
 // Solve matrix system&lt;br /&gt;
VectorXd E2 = solver.solve(rhs);&lt;br /&gt;
&lt;br /&gt;
// Update previous states&lt;br /&gt;
E0 = E1;&lt;br /&gt;
E1 = E2;&lt;br /&gt;
&lt;br /&gt;
 // Update rhs on interior&lt;br /&gt;
for (int i : interior) {&lt;br /&gt;
    rhs(i) = 2*E1(i)-E0(i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Update rhs on boundary&lt;br /&gt;
for (int i : (discretization.types() == CENTRE)) {&lt;br /&gt;
    rhs(i) = A * std::sin(omega*dt*tt);  // step&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The animation of solution is presented below. The complete exampe is avalible at  [https://gitlab.com/e62Lab/medusa/tree/dev/examples/wave_equation wave_equation_2D.cpp].  This example is covered in more detail in linked document [[:File:Meshless solution to wave equation.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[File:EM_wave_2d_dt_e-6_dens40_omega128_v8 2X speed.mp4|400px]]&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2457</id>
		<title>Wave equation</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2457"/>
				<updated>2019-05-08T11:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: Example desctripction completed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2D wave equation with Dirichlet boundary conditions ==&lt;br /&gt;
We are solving a problem analogous to a clamped circular membrane being forced to oscillate by fixing its centre to a rigid oscillating rod.  The domain of calculation is for this reason an annulus bounded by the point of contact with the circular source in the centre and the clamped edge of the circular membrane.&lt;br /&gt;
&lt;br /&gt;
[[File:wave_2d_domain_geo.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Consider the time dependent solution to 2D wave equation on annulus shaped domain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
    	\frac{ \partial^2 u}{\partial t^2} &amp;amp;= c^2 \nabla^2 u  &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
         u(r,t=0)&amp;amp;=0 &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
    	  u &amp;amp;= 0           &amp;amp;&amp;amp;\text{on } \partial \Omega_O,\\&lt;br /&gt;
          u &amp;amp;= f(t)           &amp;amp;&amp;amp;\text{on } \partial \Omega_I,&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where $\partial\Omega_I$ denotes the inner and $\partial\Omega_O$ the outer boundary of the domain. Through the  boundary condition on the inner boundary the source is introduced to the problem as a function of time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
f(t)= u_o \sin \omega_o t.&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First the domain is constructed by subtracting a smaller circle domain from a larger one. Boundaries of the domain are populated in the same step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// // identifier to be added to nodes on the inner boundary&lt;br /&gt;
int CENTRE = -10;&lt;br /&gt;
&lt;br /&gt;
 // build circle domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; domain({0, 0}, outer_radius);&lt;br /&gt;
auto discretization = domain.discretizeBoundaryWithStep(dx);&lt;br /&gt;
&lt;br /&gt;
// build source domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; empty({0, 0}, inner_radius);&lt;br /&gt;
auto discretization_empty = empty.discretizeBoundaryWithStep(dx, CENTRE);  &lt;br /&gt;
    &lt;br /&gt;
// substract the source domain&lt;br /&gt;
discretization -= discretization_empty;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next the domain is populated with nodes in accordance with the desired density function. Once the domain is constructed and discretized, the support (neighborhood) of $n$ nodes is found  for each node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GeneralFill&amp;lt;Vec2d&amp;gt; fill;&lt;br /&gt;
fill.seed(fill_seed);&lt;br /&gt;
discretization.fill(fill, fill_density);&lt;br /&gt;
&lt;br /&gt;
 // find support&lt;br /&gt;
FindClosest find_support(n);&lt;br /&gt;
discretization.findSupport(find_support);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The density function &amp;quot;fill_density&amp;quot; takes as argument the coordinates inside the domain and returns the desired distance between neighboring nodes for that location.&lt;br /&gt;
Now the domain preparation is complete, as domain is constructed and populated with nodes with support relations established. We continue by constructing the approximation engine.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
WLS&amp;lt;Monomials&amp;lt;Vec2d&amp;gt;, GaussianWeight&amp;lt;Vec2d&amp;gt;, ScaleToClosest&amp;gt; approx(m - 1 , sigma);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are solving a time propagation problem implicitly, we will have to solve a system of equations for every time step. This is equivalent to solving a matrix equation. For this reason a space matrix is constructed. Next the wave equation is turned into code. Medusa encodes this information inside the just constructed matrix $M$. $E1$ and $E0$ represent the known solutions on previous two time steps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
SparseMatrix&amp;lt;double&amp;gt; M(domain_size, domain_size);&lt;br /&gt;
// Set equation on interior&lt;br /&gt;
for (int i : interior) {&lt;br /&gt;
    -(v*v*dt*dt) * op.lap(i) + op.value(i)= 2*E1(i)-E0(i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Same is done also for the boundary nodes. Since dirichlet boundary conditions are employed the values of the Right Hand Side ($rhs$) of matrix equation are just set to prescribed values ($0$ on the exterior and $f(t)$ on interior).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// Set boundary conditions&lt;br /&gt;
for (int i : boundary) {&lt;br /&gt;
    if (discretization.types()[i] == CENTRE) {&lt;br /&gt;
        op.value(i) = A * std::sin(omega*dt*2);  // step&lt;br /&gt;
    } else {&lt;br /&gt;
        op.value(i) = 0.0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At each time step the matrix equation is solved  using an Eigen linear equation solver, in this case, the BiCGStab algorithm. $E0$ and $E1$ are updated and the source is set to new value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
 // Solve matrix system&lt;br /&gt;
VectorXd E2 = solver.solve(rhs);&lt;br /&gt;
&lt;br /&gt;
// Update previous states&lt;br /&gt;
E0 = E1;&lt;br /&gt;
E1 = E2;&lt;br /&gt;
&lt;br /&gt;
 // Update rhs on interior&lt;br /&gt;
for (int i : interior) {&lt;br /&gt;
    rhs(i) = 2*E1(i)-E0(i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Update rhs on boundary&lt;br /&gt;
for (int i : (discretization.types() == CENTRE)) {&lt;br /&gt;
    rhs(i) = A * std::sin(omega*dt*tt);  // step&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The animation of solution is presented below. The complete exampe is avalible at  [https://gitlab.com/e62Lab/medusa/tree/dev/examples/wave_equation wave_equation_2D.cpp].  This example is covered in more detail in linked document [[:File:Meshless solution to wave equation.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[File:EM_wave_2d_dt_e-6_dens40_omega128_v8 2X speed.mp4|400px]]&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2456</id>
		<title>Wave equation</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2456"/>
				<updated>2019-05-08T09:17:34Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2D wave equation with Dirichlet boundary conditions ==&lt;br /&gt;
We are solving a problem analogous to a clamped circular membrane being forced to oscillate by fixing its centre to a rigid oscillating rod.  The domain of calculation is for this reason an annulus bounded by the point of contact with the circular source in the centre and the clamped edge of the circular membrane.&lt;br /&gt;
&lt;br /&gt;
[[File:wave_2d_domain_geo.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Consider the time dependent solution to 2D wave equation on annulus shaped domain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
    	\frac{ \partial^2 u}{\partial t^2} &amp;amp;= c^2 \nabla^2 u  &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
         u(r,t=0)&amp;amp;=0 &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
    	  u &amp;amp;= 0           &amp;amp;&amp;amp;\text{on } \partial \Omega_O,\\&lt;br /&gt;
          u &amp;amp;= f(t)           &amp;amp;&amp;amp;\text{on } \partial \Omega_I,&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where $\partial\Omega_I$ denotes the inner and $\partial\Omega_O$ the outer boundary of the domain. Through the  boundary condition on the inner boundary the source is introduced to the problem as a function of time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
f(t)= u_o \sin \omega_o t.&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First the domain is constructed by subtracting a smaller circle domain from a larger one. Boundaries of the domain are populated in the same step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// // identifier to be added to nodes on the inner boundary&lt;br /&gt;
int CENTRE = -10;&lt;br /&gt;
&lt;br /&gt;
 // build circle domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; domain({0, 0}, outer_radius);&lt;br /&gt;
auto discretization = domain.discretizeBoundaryWithStep(dx);&lt;br /&gt;
&lt;br /&gt;
// build source domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; empty({0, 0}, inner_radius);&lt;br /&gt;
auto discretization_empty = empty.discretizeBoundaryWithStep(dx, CENTRE);  &lt;br /&gt;
    &lt;br /&gt;
// substract the source domain&lt;br /&gt;
discretization -= discretization_empty;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next the domain is populated with nodes in accordance with the desired density function. Once the domain is constructed and discretized, the support (neighborhood) of $n$ nodes is found  for each node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GeneralFill&amp;lt;Vec2d&amp;gt; fill;&lt;br /&gt;
fill.seed(fill_seed);&lt;br /&gt;
discretization.fill(fill, fill_density);&lt;br /&gt;
&lt;br /&gt;
 // find support&lt;br /&gt;
FindClosest find_support(n);&lt;br /&gt;
discretization.findSupport(find_support);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The density function &amp;quot;fill_density&amp;quot; takes as argument the coordinates inside the domain and returns the desired distance between neighboring nodes for that location.&lt;br /&gt;
Now the domain preparation is complete, as domain is constructed and populated with nodes with support relations established. We continue by constructing the approximation engine.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
WLS&amp;lt;Monomials&amp;lt;Vec2d&amp;gt;, GaussianWeight&amp;lt;Vec2d&amp;gt;, ScaleToClosest&amp;gt; approx(m - 1 , sigma);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are solving a time propagation problem implicitly, we will have to solve a system of equations for every time step. This is equivalent to solving a matrix equation. For this reason a space matrix is constructed. Next the wave equation is turned into code. Medusa encodes this information inside the just constructed matrix $M$. $E1$ and $E0$ represent the known solutions on previous two time steps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
SparseMatrix&amp;lt;double&amp;gt; M(domain_size, domain_size);&lt;br /&gt;
// Set equation on interior&lt;br /&gt;
    for (int i : interior) {&lt;br /&gt;
        M.coeffRef(i, i) = 1;&lt;br /&gt;
        -(v*v*dt*dt) * op.lap(i) = 2*E1(i)-E0(i);  // laplace in interior&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Same is done also for the boundary nodes. Since dirichlet boundary conditions are employed the values of the Right Hand Side ($rhs$) of matrix equation are just set to prescribed values ($0$ on the exterior and $f(t)$ on interior).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// Set boundary conditions&lt;br /&gt;
for (int i : boundary) {&lt;br /&gt;
    M.coeffRef(i, i) = 1;  // fixed&lt;br /&gt;
    if (discretization.types()[i] == CENTRE) {&lt;br /&gt;
        rhs(i) = A * std::sin(omega*dt*2);  // step&lt;br /&gt;
    } else {&lt;br /&gt;
        rhs(i) = 0.0;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
At each time step the matrix equation is solved  using an Eigen linear equation solver, in this case, the BiCGStab algorithm. $E0$ and $E1$ are updated and the source is set to new value.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
 // Solve matrix system&lt;br /&gt;
VectorXd E2 = solver.solve(rhs);&lt;br /&gt;
&lt;br /&gt;
// Update previous states&lt;br /&gt;
E0 = E1;&lt;br /&gt;
E1 = E2;&lt;br /&gt;
&lt;br /&gt;
 // Update rhs on interior&lt;br /&gt;
for (int j = 0; j &amp;lt; interior.size(); ++j) {&lt;br /&gt;
    int i = interior[j];&lt;br /&gt;
    rhs(i) = 2*E1(i)-E0(i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Update rhs on boundary&lt;br /&gt;
for (int i : (discretization.types() == CENTRE)) {&lt;br /&gt;
    rhs(i) = A * std::sin(omega*dt*tt);  // step&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The animation of solution is presented below. The complete exampe is avalible at  [https://gitlab.com/e62Lab/medusa/tree/dev/examples/wave_equation wave_equation_2D.cpp].  This example is covered in more detail in linked document: [[:File:Meshless solution to wave equation.pdf]].&lt;br /&gt;
&lt;br /&gt;
[[File:EM_wave_2d_dt_e-6_dens40_omega128_v8 2X speed.mp4|400px]].&lt;br /&gt;
&lt;br /&gt;
.&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2455</id>
		<title>Wave equation</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2455"/>
				<updated>2019-05-08T07:13:01Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2D wave equation with Dirichlet boundary conditions ==&lt;br /&gt;
We are solving a problem analogous to a clamped circular membrane being forced to oscillate by fixing its centre to a rigid oscillating rod.  The domain of calculation is for this reason an annulus bounded by the point of contact with the circular source in the centre and the clamped edge of the circular membrane.&lt;br /&gt;
&lt;br /&gt;
[[File:wave_2d_domain_geo.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Consider the time dependent solution to 2D wave equation on annulus shaped domain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
    	\frac{ \partial^2 u}{\partial t^2} &amp;amp;= c^2 \nabla^2 u  &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
         u(r,t=0)&amp;amp;=0 &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
    	  u &amp;amp;= 0           &amp;amp;&amp;amp;\text{on } \partial \Omega_O,\\&lt;br /&gt;
          u &amp;amp;= f(t)           &amp;amp;&amp;amp;\text{on } \partial \Omega_I,&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where $\partial\Omega_I$ denotes the inner and $\partial\Omega_O$ the outer boundary of the domain. Through the  boundary condition on the inner boundary the source is introduced to the problem as a function of time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
f(t)= u_o \sin \omega_o t.&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First the domain is constructed by subtracting a smaller circle domain from a larger one. Boundaries of the domain are populated in the same step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// // identifier to be added to nodes on the inner boundary&lt;br /&gt;
int CENTRE = -10;&lt;br /&gt;
&lt;br /&gt;
 // build circle domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; domain({0, 0}, outer_radius);&lt;br /&gt;
auto discretization = domain.discretizeBoundaryWithStep(dx);&lt;br /&gt;
&lt;br /&gt;
// build source domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; empty({0, 0}, inner_radius);&lt;br /&gt;
auto discretization_empty = empty.discretizeBoundaryWithStep(dx, CENTRE);  &lt;br /&gt;
    &lt;br /&gt;
// substract the source domain&lt;br /&gt;
discretization -= discretization_empty;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next the domain is populated with nodes in accordance with the desired density function. Once the domain is constructed and discretized, the support (neighborhood) of $n$ nodes is found  for each node.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
&lt;br /&gt;
GeneralFill&amp;lt;Vec2d&amp;gt; fill;&lt;br /&gt;
fill.seed(fill_seed);&lt;br /&gt;
discretization.fill(fill, fill_density);&lt;br /&gt;
&lt;br /&gt;
 // find support&lt;br /&gt;
FindClosest find_support(n);&lt;br /&gt;
discretization.findSupport(find_support);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The density function &amp;quot;fill_density&amp;quot; takes as argument the coordinates inside the domain and returns the desired distance between neighboring nodes for that location.&lt;br /&gt;
Now the domain preparation is complete, as domain is constructed and populated with nodes with support relations established. We continue by constructing the approximation engine.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
WLS&amp;lt;Monomials&amp;lt;Vec2d&amp;gt;, GaussianWeight&amp;lt;Vec2d&amp;gt;, ScaleToClosest&amp;gt; approx(m - 1 , sigma);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As we are solving a time propagation problem implicitly, we will have to solve a system of equations for every time step. This is equivalent to solving a matrix equation. For this reason a space matrix is constructed. Next the wave equation is turned into code. Medusa encodes this information inside the just constructed matrix M. $E1$ and $E0$ represent the known solutions on previous two time steps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
SparseMatrix&amp;lt;double&amp;gt; M(domain_size, domain_size);&lt;br /&gt;
// Set equation on interior&lt;br /&gt;
    for (int i : interior) {&lt;br /&gt;
        M.coeffRef(i, i) = 1;&lt;br /&gt;
        -(v*v*dt*dt) * op.lap(i) = 2*E1(i)-E0(i);  // laplace in interior&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2453</id>
		<title>Wave equation</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Wave_equation&amp;diff=2453"/>
				<updated>2019-05-07T17:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==2D wave equation with dirtchlet boundary conditions ==&lt;br /&gt;
&lt;br /&gt;
Consider the time dependent solution to 2D wave equation on annulus shaped domain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
    	\frac{ \partial^2 u}{\partial t^2} &amp;amp;= c^2 \nabla^2 u  &amp;amp;&amp;amp;\text{in } \Omega, \\&lt;br /&gt;
    	  u &amp;amp;= 0           &amp;amp;&amp;amp;\text{on } \partial \Omega_O,\\&lt;br /&gt;
          u &amp;amp;= f(t)           &amp;amp;&amp;amp;\text{on } \partial \Omega_I,&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where $\partial\Omega_I$ denotes the inner and $\partial\Omega_O$ the outer boundary of the domain. Through the  boundary condition on the inner boundary the source is introduced to the problem as a function of time&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align*}&lt;br /&gt;
f(t)= u_o \sin \omega_o t.&lt;br /&gt;
\end{align*}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First the domain is constructed by subtracting a smaller circle domain from a larger one. Boundaries of the domain are populated in the same step.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// // identifier to be added to nodes on the inner boundary&lt;br /&gt;
int CENTRE = -10;&lt;br /&gt;
&lt;br /&gt;
 // build circle domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; domain({0, 0}, outer_radius);&lt;br /&gt;
auto discretization = domain.discretizeBoundaryWithStep(dx);&lt;br /&gt;
&lt;br /&gt;
// build source domain&lt;br /&gt;
BallShape&amp;lt;Vec2d&amp;gt; empty({0, 0}, inner_radius);&lt;br /&gt;
auto discretization_empty = empty.discretizeBoundaryWithStep(dx, CENTRE);  &lt;br /&gt;
    &lt;br /&gt;
// substract the source domain&lt;br /&gt;
discretization -= discretization_empty;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next the domain is populated with nodes in acordance with the desired density function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line&amp;gt;&lt;br /&gt;
// Lambda function for setting the density of nodes&lt;br /&gt;
auto fill_density = [=](const Vec2d&amp;amp; p) {&lt;br /&gt;
    double r = p.norm();&lt;br /&gt;
    double default_value = dx;&lt;br /&gt;
    double dens = default_value;&lt;br /&gt;
     double r1 = 15*inner_radius;&lt;br /&gt;
     double r2 = 0.8*outer_radius;&lt;br /&gt;
     if (r &amp;lt; r1) dens = linear(inner_radius, 0.8*default_value, r1, default_value, r );&lt;br /&gt;
     if (r &amp;gt; r2) dens = linear(r2, default_value, outer_radius, 0.8* default_value, r);&lt;br /&gt;
     return dens;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
GeneralFill&amp;lt;Vec2d&amp;gt; fill;&lt;br /&gt;
fill.seed(fill_seed);&lt;br /&gt;
discretization.fill(fill, fill_density);&lt;br /&gt;
&lt;br /&gt;
 // find support&lt;br /&gt;
FindClosest find_support(n);&lt;br /&gt;
discretization.findSupport(find_support);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Medusa&amp;diff=2254</id>
		<title>Medusa</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Medusa&amp;diff=2254"/>
				<updated>2018-08-29T18:31:46Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: Fixes tipo in Meshless&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--__NOTITLE__--&amp;gt;&lt;br /&gt;
In [http://e6.ijs.si/ParallelAndDistributedSystems/ Parallel and Distributed Systems Laboratory] we are working on a C++ library that is first and foremost focused on tools for solving Partial Differential Equations by meshless methods. The basic idea is to create generic codes for tools that are needed for solving not only PDEs but many other problems, e.g. Moving Least Squares approximation, $k$-d tree, domain generation engines, etc. We call this open source meshless project '''Medusa: Coordinate Free Meshless Method implementation (MM).&lt;br /&gt;
&lt;br /&gt;
Technical details about code, examples, and  can be found on our [http://e6.ijs.si/medusa/docs/ documentation page] and [https://gitlab.com/e62Lab/medusa the code]. [[File:C.png|100px||link=https://gitlab.com/e62Lab/medusa|alt=Alt text|code]] [[File:doxygen.png|100px|link=http://e6.ijs.si/medusa/docs/|alt=Alt text|Documentation page]]&lt;br /&gt;
&lt;br /&gt;
This wiki site is meant for more relaxed discussions about general principles, possible and already implemented applications, preliminary analyses, etc.&lt;br /&gt;
Note, that there are many grammatical mistakes, typos, stupid sentences, etc. This wiki is meant for quick information exchange and therefore we do not invest a lot of energy into styling :).  &lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [https://gitlab.com/e62Lab/medusa Code on Gitlab]&lt;br /&gt;
* [[How to build | Installation and building]]&lt;br /&gt;
* [[Testing | Running unit tests]]&lt;br /&gt;
* [http://e6.ijs.si/medusa/docs/ Technical documentation]&lt;br /&gt;
* [[Coding style | Coding style]]&lt;br /&gt;
* [[Including this library in your project | Including this library in your project]]&lt;br /&gt;
* [[Wiki editing guide | Wiki editing and backup guide]]&lt;br /&gt;
&lt;br /&gt;
== Examples (work in progress) ==&lt;br /&gt;
* [[Philosophy of examples and how to run them]]&lt;br /&gt;
* [[Poisson's equation]]&lt;br /&gt;
* [[Linear elasticity]]&lt;br /&gt;
* [[Fluid mechanics]]&lt;br /&gt;
* [[Wave equation]]&lt;br /&gt;
&lt;br /&gt;
== Building blocks ==&lt;br /&gt;
* [[Moving Least Squares (MLS)]]&lt;br /&gt;
* [[k-d tree|''k''-d tree]] TODO: UPDATE&lt;br /&gt;
* [[Positioning of computational nodes]] &lt;br /&gt;
* [[Meshless Local Strong Form Method (MLSM)]]&lt;br /&gt;
* [[Computation of shape functions]]&lt;br /&gt;
* [[Integrators for time stepping]]&lt;br /&gt;
&lt;br /&gt;
== Applications / Examples ==&lt;br /&gt;
* Basic PDE solutions&lt;br /&gt;
** [[Heat Poisson's equation | Convection Diffusion equation]]&lt;br /&gt;
** [[Quantum Mechanics | Schrödinger equation]]&lt;br /&gt;
**[[Wave equation application]] &lt;br /&gt;
* [[Solid Mechanics]]&lt;br /&gt;
** [[Point contact]]&lt;br /&gt;
** [[Hertzian contact]]&lt;br /&gt;
** [[Cantilever beam]]&lt;br /&gt;
** [[FWO case]]&lt;br /&gt;
* [[Fluid Mechanics]]&lt;br /&gt;
** [[Lid driven cavity]]&lt;br /&gt;
** [[de Vahl Davis natural convection test]]&lt;br /&gt;
** [[Natural convection from heated cylinder]]&lt;br /&gt;
** [[Natural convection between concentric cylinders]]&lt;br /&gt;
* Other applications&lt;br /&gt;
** [[Attenuation due to liquid water content in the atmosphere|Attenuation of a satellite communication]]&lt;br /&gt;
** [[Heart rate variability detection]]&lt;br /&gt;
&lt;br /&gt;
== Performance analyses ==&lt;br /&gt;
* [[Execution on Intel® Xeon Phi™ co-processor]]&lt;br /&gt;
* [[1D MLSM and FDM comparison]]&lt;br /&gt;
* [[:File:tech_report.pdf|Execution overheads due to clumsy types::technical report]] [[File:pdf-file.gif]]&lt;br /&gt;
* [[Solving sparse systems]]&lt;br /&gt;
* [[Eigen paralelization]]&lt;br /&gt;
&lt;br /&gt;
== Last changes ==&lt;br /&gt;
&amp;lt;news unique=1 limit = 5&amp;gt;&lt;br /&gt;
*{{{timeanddate}}} :: {{{title}}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/news&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISC ==&lt;br /&gt;
* Also see FAQ  -[[Frequently asked questions]]. &lt;br /&gt;
* [[List of contributors]]&lt;br /&gt;
&lt;br /&gt;
== Contributors ==&lt;br /&gt;
* TODO&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Slak J., Kosec G.; Refined meshless local strong form solution of Cauchy-Navier equation on an irregular domain. Engineering analysis with boundary elements. 2018;11 ; [http://comms.ijs.si/~gkosec/data/papers/31107623.pdf manuscript]&lt;br /&gt;
* Depolli, M., Kosec, G., Assessment of differential evolution for multi-objective optimization in a natural convection problem solved by a local meshless method. Engineering optimization, 2017, vol. 49, no. 4, pp. 675-692 ;[http://comms.ijs.si/~gkosec/data/papers/29639719.pdf manuscript]&lt;br /&gt;
* Kosec G., A local numerical solution of a fluid-flow problem on an irregular domain. Advances in engineering software. 2016;7 ; [29512743] ; [http://comms.ijs.si/~gkosec/data/papers/29512743.pdf manuscript]&lt;br /&gt;
* Kosec G., Trobec R., Simulation of semiconductor devices with a local numerical approach. Engineering analysis with boundary elements. 2015;69-75; [27912487] ; [http://comms.ijs.si/~gkosec/data/papers/27912487.pdf manuscript]&lt;br /&gt;
* Kosec G., Šarler B., Simulation of macrosegregation with mesosegregates in binary metallic casts by a meshless method. Engineering analysis with boundary elements. 2014;36-44; [http://comms.ijs.si/~gkosec/data/papers/3218939.pdf manuscript]&lt;br /&gt;
* Kosec G., Depolli M., Rashkovska A., Trobec R., Super linear speedup in a local parallel meshless solution of thermo-fluid problem. Computers &amp;amp; Structures. 2014;133:30-38; [http://comms.ijs.si/~gkosec/data/papers/27339815.pdf manuscript]&lt;br /&gt;
* Kosec G., Zinterhof P., Local strong form meshless method on multiple Graphics Processing Units. Computer modeling in engineering &amp;amp; sciences. 2013;91:377-396; [http://comms.ijs.si/~gkosec/data/papers/26785063.pdf manuscript]&lt;br /&gt;
* Kosec G., Šarler B., H-adaptive local radial basis function collocation meshless method. Computers, materials &amp;amp; continua. 2011;26:227-253; [http://comms.ijs.si/~gkosec/data/papers/KosecSarlerBurgers.pdf manuscript]&lt;br /&gt;
* Trobec R., Kosec G., Šterk M., Šarler B., Comparison of local weak and strong form meshless methods for 2-D diffusion equation. Engineering analysis with boundary elements. 2012;36:310-321; [http://comms.ijs.si/~gkosec/data/papers/EABE2499.pdf manuscript]&lt;br /&gt;
* Kosec G, Zaloznik M, Sarler B, Combeau H. A Meshless Approach Towards Solution of Macrosegregation Phenomena. CMC: Computers, Materials, &amp;amp; Continua. 2011;580:1-27 [http://comms.ijs.si/~gkosec/data/papers/KosecZaloznikSarlerCombeauSegregation.pdf manuscript]&lt;br /&gt;
* Kosec G, Sarler B. Solution of thermo-fluid problems by collocation with local pressure correction. International Journal of Numerical Methods for Heat &amp;amp; Fluid Flow. 2008;18:868-82 [http://comms.ijs.si/~gkosec/data/papers/KosecSarlerNS2008.pdf manuscript]&lt;br /&gt;
*  Trobec R., Kosec G., Parallel Scientific Computing, ISBN: 978-3-319-17072-5 (Print) 978-3-319-17073-2.&lt;br /&gt;
*  Slak, J., Kosec, G.. Detection of heart rate variability from a wearable differential ECG device., MIPRO 2016, 39th International Convention, 2016, Opatija, Croatia, ISSN 1847-3938, pp 450-455.&lt;br /&gt;
*  Kolman, M., Kosec, G. Correlation between attenuation of 20 GHz satellite communication link and liquid water content in the atmosphere. MIPRO 2016, 39th International Convention, 2016, Opatija, Croatia, ISSN 1847-3938. pp. 308-313.&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!NumericalMethods&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!utils&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!NUMA&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:EM_wave_2d_dt_e-6_dens40_omega128_v8_2X_speed.mp4&amp;diff=2060</id>
		<title>File:EM wave 2d dt e-6 dens40 omega128 v8 2X speed.mp4</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:EM_wave_2d_dt_e-6_dens40_omega128_v8_2X_speed.mp4&amp;diff=2060"/>
				<updated>2018-04-20T09:13:30Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2Derror(n)v10_o_10.png&amp;diff=2054</id>
		<title>File:Wave 2Derror(n)v10 o 10.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2Derror(n)v10_o_10.png&amp;diff=2054"/>
				<updated>2018-04-16T07:49:23Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2Derror(n)v1_o_1.png&amp;diff=2053</id>
		<title>File:Wave 2Derror(n)v1 o 1.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2Derror(n)v1_o_1.png&amp;diff=2053"/>
				<updated>2018-04-16T07:49:15Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_error(t)dt1e-6dx1e-3o10v1_5.png&amp;diff=2052</id>
		<title>File:Wave error(t)dt1e-6dx1e-3o10v1 5.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_error(t)dt1e-6dx1e-3o10v1_5.png&amp;diff=2052"/>
				<updated>2018-04-16T07:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_1d_w_v.png&amp;diff=2051</id>
		<title>File:Wave 1d w v.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_1d_w_v.png&amp;diff=2051"/>
				<updated>2018-04-16T07:47:49Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_converg_1d_v50_omega50.png&amp;diff=2050</id>
		<title>File:Wave converg 1d v50 omega50.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_converg_1d_v50_omega50.png&amp;diff=2050"/>
				<updated>2018-04-16T07:45:18Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_converg_1d_v1_omega10.png&amp;diff=2049</id>
		<title>File:Wave converg 1d v1 omega10.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_converg_1d_v1_omega10.png&amp;diff=2049"/>
				<updated>2018-04-16T07:45:10Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2d_solution.jpg&amp;diff=2047</id>
		<title>File:Wave 2d solution.jpg</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2d_solution.jpg&amp;diff=2047"/>
				<updated>2018-04-10T06:21:49Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_solution_1D.png&amp;diff=2046</id>
		<title>File:Wave solution 1D.png</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_solution_1D.png&amp;diff=2046"/>
				<updated>2018-04-10T06:21:41Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2d_domain_geo.jpg&amp;diff=2044</id>
		<title>File:Wave 2d domain geo.jpg</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_2d_domain_geo.jpg&amp;diff=2044"/>
				<updated>2018-04-09T09:08:46Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_1D_domain.jpg&amp;diff=2043</id>
		<title>File:Wave 1D domain.jpg</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=File:Wave_1D_domain.jpg&amp;diff=2043"/>
				<updated>2018-04-09T08:58:41Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	<entry>
		<id>http://e6.ijs.si/medusa/wiki/index.php?title=Medusa&amp;diff=2039</id>
		<title>Medusa</title>
		<link rel="alternate" type="text/html" href="http://e6.ijs.si/medusa/wiki/index.php?title=Medusa&amp;diff=2039"/>
				<updated>2018-04-09T08:15:19Z</updated>
		
		<summary type="html">&lt;p&gt;JMocnik: /* Applications / Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--__NOTITLE__--&amp;gt;&lt;br /&gt;
In [http://www-e6.ijs.si/ParallelAndDistributedSystems/ '''Parallel and Distributed Systems Laboratory'''] we are working on a C++ library that is first and foremost focused on tools for solving Partial Differential Equations by meshless methods. The basic idea is to create generic codes for tools that are needed for solving not only PDEs but many other problems, e.g. Moving Least Squares approximation, kD-tree, domain generation engines, etc. We call this open source meshless project a Meshless Machine (MM).&lt;br /&gt;
&lt;br /&gt;
Technical details about code, examples, and  can be found on our [http://www-e6.ijs.si/ParallelAndDistributedSystems/MeshlessMachine/technical_docs/html/ '''documentation page''' ] and [https://gitlab.com/e62Lab/e62numcodes '''the code''']. [[File:C.png|100px||link=https://gitlab.com/e62Lab/e62numcodes|alt=Alt text|code]] [[File:doxygen.png|100px|link=http://www-e6.ijs.si/ParallelAndDistributedSystems/MeshlessMachine/technical_docs/html/ |alt=Alt text|Documentation page]]&lt;br /&gt;
&lt;br /&gt;
This wiki site is meant for more relaxed discussions about general principles, possible and already implemented applications, preliminary analyses, etc.&lt;br /&gt;
Note, that there are many grammatical mistakes, typos, stupid sentences, etc. This wiki is meant for quick information exchange and therefore we do not invest a lot of energy into styling :).  &lt;br /&gt;
&lt;br /&gt;
== Building blocks ==&lt;br /&gt;
* [[Moving Least Squares (MLS)]]&lt;br /&gt;
* [[Kd Tree]]&lt;br /&gt;
* [[Positioning of computational nodes]] &lt;br /&gt;
* [[Meshless Local Strong Form Method (MLSM)]]&lt;br /&gt;
* [[Computation of shape functions]]&lt;br /&gt;
* [[Integrators for time stepping]]&lt;br /&gt;
&lt;br /&gt;
== Applications / Examples ==&lt;br /&gt;
* Basic PDE solutions&lt;br /&gt;
** [[Heat Poisson's equation | Convection Diffusion equation]]&lt;br /&gt;
** [[Quantum Mechanics | Schrödinger equation]]&lt;br /&gt;
**[[Wave equation]] &lt;br /&gt;
* [[Solid Mechanics]]&lt;br /&gt;
** [[Point contact]]&lt;br /&gt;
** [[Hertzian contact]]&lt;br /&gt;
** [[Cantilever beam]]&lt;br /&gt;
** [[FWO case]]&lt;br /&gt;
* [[Fluid Mechanics]]&lt;br /&gt;
** [[Lid driven cavity]]&lt;br /&gt;
** [[de Vahl Davis natural convection test]]&lt;br /&gt;
** [[Natural convection between concentric cylinders]]&lt;br /&gt;
* Other applications&lt;br /&gt;
** [[Attenuation due to liquid water content in the atmosphere|Attenuation of a satellite communication]]&lt;br /&gt;
** [[Heart rate variability detection]]&lt;br /&gt;
&lt;br /&gt;
== Performance analyses ==&lt;br /&gt;
* [[Execution on Intel® Xeon Phi™ co-processor]]&lt;br /&gt;
* [[1D MLSM and FDM comparison]]&lt;br /&gt;
* [[:File:tech_report.pdf|Execution overheads due to clumsy types::technical report]] [[File:pdf-file.gif]]&lt;br /&gt;
* [[Solving sparse systems]]&lt;br /&gt;
* [[Eigen paralelization]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [https://gitlab.com/e62Lab/e62numcodes Code and README on Gitlab]&lt;br /&gt;
* [[How to build | Installation and building]]&lt;br /&gt;
* [[Testing | Running unit tests]]&lt;br /&gt;
* [http://www-e6.ijs.si/ParallelAndDistributedSystems/MeshlessMachine/technical_docs/ Technical documentation]&lt;br /&gt;
* [[Coding style | Coding style]]&lt;br /&gt;
* [[Including this library in your project | Including this library in your project]]&lt;br /&gt;
* [[Wiki editing guide | Wiki editing and backup guide]]&lt;br /&gt;
&lt;br /&gt;
== Last changes ==&lt;br /&gt;
&amp;lt;news unique=1 limit = 5&amp;gt;&lt;br /&gt;
*{{{timeanddate}}} :: {{{title}}} &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/news&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== MISC ==&lt;br /&gt;
* Also see FAQ  -[[Frequently asked questions]]. &lt;br /&gt;
* [[List of contributors]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Slak J., Kosec G.; Refined meshless local strong form solution of Cauchy-Navier equation on an irregular domain. Engineering analysis with boundary elements. 2018;11 ; [http://comms.ijs.si/~gkosec/data/papers/31107623.pdf manuscript]&lt;br /&gt;
* Depolli, M., Kosec, G., Assessment of differential evolution for multi-objective optimization in a natural convection problem solved by a local meshless method. Engineering optimization, 2017, vol. 49, no. 4, pp. 675-692 ;[http://comms.ijs.si/~gkosec/data/papers/29639719.pdf manuscript]&lt;br /&gt;
* Kosec G., A local numerical solution of a fluid-flow problem on an irregular domain. Advances in engineering software. 2016;7 ; [29512743] ; [http://comms.ijs.si/~gkosec/data/papers/29512743.pdf manuscript]&lt;br /&gt;
* Kosec G., Trobec R., Simulation of semiconductor devices with a local numerical approach. Engineering analysis with boundary elements. 2015;69-75; [27912487] ; [http://comms.ijs.si/~gkosec/data/papers/27912487.pdf manuscript]&lt;br /&gt;
* Kosec G., Šarler B., Simulation of macrosegregation with mesosegregates in binary metallic casts by a meshless method. Engineering analysis with boundary elements. 2014;36-44; [http://comms.ijs.si/~gkosec/data/papers/3218939.pdf manuscript]&lt;br /&gt;
* Kosec G., Depolli M., Rashkovska A., Trobec R., Super linear speedup in a local parallel meshless solution of thermo-fluid problem. Computers &amp;amp; Structures. 2014;133:30-38; [http://comms.ijs.si/~gkosec/data/papers/27339815.pdf manuscript]&lt;br /&gt;
* Kosec G., Zinterhof P., Local strong form meshless method on multiple Graphics Processing Units. Computer modeling in engineering &amp;amp; sciences. 2013;91:377-396; [http://comms.ijs.si/~gkosec/data/papers/26785063.pdf manuscript]&lt;br /&gt;
* Kosec G., Šarler B., H-adaptive local radial basis function collocation meshless method. Computers, materials &amp;amp; continua. 2011;26:227-253; [http://comms.ijs.si/~gkosec/data/papers/KosecSarlerBurgers.pdf manuscript]&lt;br /&gt;
* Trobec R., Kosec G., Šterk M., Šarler B., Comparison of local weak and strong form meshless methods for 2-D diffusion equation. Engineering analysis with boundary elements. 2012;36:310-321; [http://comms.ijs.si/~gkosec/data/papers/EABE2499.pdf manuscript]&lt;br /&gt;
* Kosec G, Zaloznik M, Sarler B, Combeau H. A Meshless Approach Towards Solution of Macrosegregation Phenomena. CMC: Computers, Materials, &amp;amp; Continua. 2011;580:1-27 [http://comms.ijs.si/~gkosec/data/papers/KosecZaloznikSarlerCombeauSegregation.pdf manuscript]&lt;br /&gt;
* Kosec G, Sarler B. Solution of thermo-fluid problems by collocation with local pressure correction. International Journal of Numerical Methods for Heat &amp;amp; Fluid Flow. 2008;18:868-82 [http://comms.ijs.si/~gkosec/data/papers/KosecSarlerNS2008.pdf manuscript]&lt;br /&gt;
*  Trobec R., Kosec G., Parallel Scientific Computing, ISBN: 978-3-319-17072-5 (Print) 978-3-319-17073-2.&lt;br /&gt;
*  Slak, J., Kosec, G.. Detection of heart rate variability from a wearable differential ECG device., MIPRO 2016, 39th International Convention, 2016, Opatija, Croatia, ISSN 1847-3938, pp 450-455.&lt;br /&gt;
*  Kolman, M., Kosec, G. Correlation between attenuation of 20 GHz satellite communication link and liquid water content in the atmosphere. MIPRO 2016, 39th International Convention, 2016, Opatija, Croatia, ISSN 1847-3938. pp. 308-313.&lt;br /&gt;
&lt;br /&gt;
==Related pages==&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!NumericalMethods&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!utils&lt;br /&gt;
* http://www-e6.ijs.si/ParallelAndDistributedSystems/#!NUMA&lt;/div&gt;</summary>
		<author><name>JMocnik</name></author>	</entry>

	</feed>