<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Distributed and parallel version of the FDTD simulation algorithm</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Giuseppe Amenta</string-name>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Grazia Lo Sciuto</string-name>
          <email>glosciuto@dii.unict.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Department of Electrical, Electronic and Informatics Engineering University of Catania Catania</institution>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <fpage>74</fpage>
      <lpage>79</lpage>
      <abstract>
        <p>-This paper proposes an innovative algorithm for running in a distributed and parallel fashion the well-known Finite-Difference Time-Domain method. Given the dependence among data, for the proposed distributed version, care has been taken in the approach splitting the involved data. This is to avoid a great deal of data exchange among different hosts, so as to minimize the communication overhead. Performance comparisons between the proposed solution and the sequential one has shown that improvements can be achieved using the proposed version running on several hosts. Moreover, the distributed version let overcome the problem of central memory exhaustion, typical of this method, due to the large matrices to be handled. Index Terms-FDTD, parallelization, distribution, algorithms, data dependence</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>
        The FDTD Finite-Difference Time-Domain method [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ],
[
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] provides, in its initial formulation, the discretization
of fields on two interlaced orthogonal Cartesian grids. This
method is expressed as an integral formulation describing the
electromagnetic field by means of state variables, which are
defined as integral quantities associated to well-defined
geometric elements of the dual grids (closed path integral along
the lines and flows through the corresponding surfaces) [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ],
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>
        The original formulation consists of a sequential algorithm
executing a possibly huge number of iterations on a single core
of a host. Distribution is highly desirable for solving the typical
problems on the domain under investigations, i.e.
electromagnetic fields, etc., due to the high amount of memory used and
computation necessary. However, a distributed version of the
algorithm has to minimize communication overhead due to
data exchange among hosts. When the distributed version is
available, then an underlying platform can be put to use for
achieving real parallelism and distribution [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ], [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>
        A proper analysis of the data dependencies among the
several parts of the initial sequential algorithms is therefore
needed to achieve a distributed version minimising data
exchanges. In this field, several automatic or semi-automatic
techniques can assist in finding structural and data
dependencies [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ], [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ], [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. In order to find our
proposed solution, we have put to use such techniques as well
as manually devising our distribution approach.
      </p>
      <p>Copyright c 2017 held by the authors.</p>
      <p>This paper analyses the most important aspect of
distributing the typical FDTD algorithm and shows the performance
improvements when the distributed version is used. The
following sections of the paper describe, firstly the mathematical
background, secondly the sequential version of the algorithm,
thirdly an initial optimization for the algorithm, fourthly the
distributed and parallel version. Finally, conclusions are drawn.</p>
    </sec>
    <sec id="sec-2">
      <title>II. BACKGROUND</title>
      <p>
        The technique called FIT (Finite Integration Theory [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ])
represents a numerical method which is implemented by
electromagnetic simulation software systems (such as CST studio
suite [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ]). Such a technique has been applied to arbitrary
grids and corresponds to the FDTD on orthogonal hexagonal
grids, when the time derivative is discretized by the leap-frog
algorithm. The resulting algorithm can be further developed
for taking advantage of parallelization. We have explored the
equations of the FDTD algorithm with the integral variables.
We take for simplicity the one-dimensional case (this can be
obviously extended) of a linearly polarized electromagnetic
wave in x-direction, propagating along the z direction. The
equations relevant to the discussion here are Maxwell’s curl
equations, as:
      </p>
      <p>These equations can be integrated on dual meshes at
interlaced time intervals, based on the leap-frog scheme as shown
in Fig. 1.</p>
      <p>This method leads to the following equations, representing
an iterative scheme.</p>
      <p>D~ xn+ 21 (k)
B~yn+1(k +
) =
~
E</p>
      <p>D~ xn 21 (k)
1 ~</p>
      <p>D
"r
B~yn(k +
1 ~</p>
      <p>B
r
t c0 [Hyn(k + 1
z 2
)</p>
      <p>Hyn(k
)]
t c0 [E~xn+ 21 (k + 1)
z</p>
      <p>E~xn+ 12 (k)]
Fig. 1.
x</p>
      <p>Discretization in one-dimension with the dual grids scheme. S =
z, S~ = y z, where x and y are the discretization steps.</p>
      <p>The above iterative equations are updated (time marching)
as shown in the leap-frog scheme of Fig. 2. The steps marked
in Fig. 2 with 2 and 4 are relative to the costitutive relations of
the fields and are punctual operations. While the steps marked
with 1 and 3 are relative to the Maxwell’s curl equations (the
data used for these updates are located in adjacent cells).</p>
      <p>Of course, an electromagnetic wave can not propagate at a
speed higher than the light velocity. Therefore, the time step
must not exceed the time that the wave would take to propagate
between 2 points on the grid. In 2D the wave propagation
direction changing the traveling distance must be taken into
account (see Fig. 3 and 4).</p>
      <p>In 3D in order to implement the iterative scheme we use
the Yee cell that is shown in the Fig. 4.</p>
      <p>A. The Gaussian Pulse</p>
    </sec>
    <sec id="sec-3">
      <title>A continuous Gaussian pulse is defined as:</title>
      <p>fg(t) = e ( twdgg )2</p>
      <p>Where the dg component represents the time delay, while
the wg parameter generically is the width of the pulse. The
corresponding peak value is obtained for t = dg. If we express
the dg delay and the wg pulse width, depending on the time
step t, we have the discrete version of the previous equation:
(1)</p>
      <p>In the Gaussian pulse equation in the discrete version (2),
the t temporal time is not included explicitly.</p>
      <p>The time-discrete version of the equation is appropriate to
be translated into an algorithm which can be computed for a
given set of data. Finally, it is necessary to take into account
other features of the physical problem, that is the following
three constraints.</p>
      <p>1) The electric boundary condition, since in the internal
points of a perfect conductor the electric field E
vanishes.
2) The magnetic boundary condition, which can ba easily
handled if the computational domain stops at magnetical
nodes.
3) The radiation condition, for the ability to absorb waves
without reflection.
pulse = exp(-0.5*(pow((t0-T)/2.0)));
dz[IC][JC] = pulse;</p>
    </sec>
    <sec id="sec-4">
      <title>III. SEQUENTIAL IMPLEMENTATION</title>
      <p>The study of the physical phenomenon and its mathematical
functions lead us to outline its implementation. The algorithm
takes as input several fundamental values for the study of this
phenomenon, including 5 matrices, initialized to the needed
values for the computation, and initialized in an optimized way
(see the following). Once values are received, the algorithm
executes some checks and then reaches the 4 fundamental for
loops, and the pulse variable calculation.</p>
      <p>The inputs for the algorithm are:
1) the initial matrices ga[][], dz[][], ez[][],
hx[][] and hy[][], containing the necessary
values required to perform the calculation;
2) the number of steps nsteps to be performed,
expressing the number of times that the algorithm has to be
executed;
3) T the absolute time, from which the study of the physical
phenomenon starts;
4) the source parameter t0, essential for calculating the
pulse variable (usually set to 20.0);
5) the spread of the source, needed for calculating the pulse
variable (set to 6.0).</p>
      <p>There are two control loops, an external while and an inner
for. The first external loop checks whether or not the condition
that ends the execution of the algorithm (value 0 or a negative
number) has been reached. It is a condition taken as an input.</p>
      <p>The second loop checks the number of nsteps that have to
be executed by the algorithm. It also responsible for increasing
the T absolute time variable, which measures the time from
the zero instant of the beginning of the experiment until to
the instant n where the experiment ends, and also is used to
compute the electromagnetic values. The time variable is a
float, since time flows with steps of 0.5.</p>
      <p>The subsequent 4 for loops compute 4 of the 5 starting
matrices (ga[][] is constant). The first loop computes dz[][]
matrix, using hy[][] and hx[][] matrices, multiplied by
the constant 0.5. With respect to the elements of matrix
hy[][] to be computed, the previous row of matrix hy[][]
and the next column of hx[][] have to be made available.
The dependence from such data has great implications for the
transformation of the algorithm into its distributed version.</p>
      <p>Then, element by element there will be some additions to
compute the dz[][] matrix, as in the following:
dz[i][j] = dz[i][j] + 0.5*(hy[i][j]
hy[i-1][j] - hx[i][j] + hx[i][j-1]);</p>
      <p>Before the second for loop, a block of instructions sets the
pulse variable according to time T. After that, the resulting
value is assigned to a given portion of dz[][], previously
calculated. This is said the Gaussian impulse of the source.
The corresponding code is as follows:</p>
      <p>The second for loop calculates matrix ez[][], by means
of the matrices ga[][] and dz[][], (the second matrix is
updated by the first for loop and the gaussian impulse). The
code is as follows:
ez[i][j] = ga[i][j] * dz[i][j];</p>
      <p>The third for loop calculates the matrix hx[][], adding it
to the multiplication between the constant value 0.5 and the
updated ez[][] matrix. The next column of the matrix is
required (with further implications, as in the previous cases).
The relative code is:
hx[i][j] = hx[i][j] + 0.5 * (ez[i][j]
ez[i][j+1]);</p>
      <p>Finally, the fourth for loop calculates the matrix hy[][],
like in the third loop, by using matrix hy[][], the constant
value 0.5 and the updated matrix ez[][]. The corresponding
code is:
hy[i][j] = hy[i][j] + 0.5 * (ez[i+1][j]
- ez[i][j]);</p>
      <p>The said algorithm has been developed in C++, and even
the sequential version has better performances than some
corresponding commercial software systems. The simulation
times for our developed tool were significantly lower than
those required by simulations–using the same hardware. This
reduction is extremely advantageous when complex
electromagnetic structures are studied.</p>
    </sec>
    <sec id="sec-5">
      <title>IV. DYNAMIC VS STATIC INITIALIZATION</title>
      <p>Firstly, it is required to initialize the 5 matrices that
represent the electromagnetic magnitudes under study. They
are: ga[][], dz[][], ez[][], hx[][], hy[][].
Both the size of the matrices and the values they have to
have, will be given as input to the algorithm. In particular,
the size of all matrices must be identical between them, while
the values can be different. This derives from the mathematical
function used to study the physical phenomenon. Such values
can be given in a configuration file, in order to make the
program more versatile and suitable for the investigation of
the phenomenon from different starting conditions.</p>
      <p>The dynamic initialization of the 5 starting matrices is
provided through the initMatrix function, which has as input
the matrix to initialize, its size, and the initial value that the
matrix elements must take. These elements are float types.
initMatrix function consists of 2 for loops, one for loop scans
the rows and one for loop scans the columns. Within the 2 for
loops, it is performed an indexed assignment of the matrices
to the desired value. It can be expected that a small part of the
array will be set to a starting value other than the rest (which
is usually 0 or 1.0).</p>
      <p>A performance comparison between the proposed dynamic
initialization and a static initialization of the matrices is shown
in table II. Compilation and execution average times are given
for both versions.</p>
      <p>If the matrix size increases, a slight improvement in
performances of the static initialized matrices has been observed.
This result is apparently positive, considering the big size
typical of the matrices, however it only affects about 0.7% of
the initialization time, and would depend on the matrix size.
In addition, this approach has several limits, some of which
are really considerable. A brief list of such limits is reported
below:
1) The compilation time, which must be actually added to
the runtime program for each run, is in percentage really
high compared to the run time (due to the huge amount
of data needed for pre-storage). This consideration,
combined with the fact that data are not constant, but
taken as input, will be such that this time has to be
considered whenever the program is executed.
2) The limit on the number of elements that can be
compiled, which causes a virtual memory consumption error
(depending on the host, and for a standard host being
around 853 elements).
3) The dependence on a c++ compiler (or g++) that each
host must have installed on itself to let the program
work.
4) The inability to create an executable version of the
software system, which in fact reduces the user-friendliness
for less experienced users.</p>
      <p>To further improve the dynamic initialization performance,
we have used pointers to access matrix elements, since the
arithmetic pointer is faster than array indexing.
k = rows * columns;
for (i = 0; i &lt;k; i++)
*(matrix + i) = value;</p>
      <p>The matrix variable (a float pointer) holds the
onedimensional array representing the matrix; the integers i and
j are used to scan the matrix; the row and column are int
variables holding the total number of rows and columns; and
finally the value contains the float value of the cells in the
array, given to initMatrix function. Further tests indicated an
improvement in performance, hence reducing the slight gap
between the two approaches.</p>
    </sec>
    <sec id="sec-6">
      <title>V. PARALLEL AND DISTRIBUTED VERSION</title>
      <p>
        By distributing the 5 starting matrices on multiple hosts it is
possible to parallelize and distribute execution, overcome the
physical limits of a single host (large amount of data in volatile
memory, etc.), and speed up the processing [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ], [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. The
conceived solution splits the matrices into x submatrices, and
distributes them into the x hosts available for the processing.
The results on each host should then be sent to a server
collecting and showing them.
      </p>
      <p>The intrinsic structure of the implementation (see the
above description of the sequential version), limits the
distribution approach. In order to compute matrices (i.e.
dz[][], hx[][] and hy[][]) some rows or columns are
needed from, previous or successive, other matrices (hy[][],
hx[][] and ez[][]). The parallelism of the problem at
hand can be seen according to the producer-consumer model.
Once the row or column values have been calculated, which
are needed by another host to calculate other sub-matrices,
these are sent by means of sockets. The underlying idea for
distribution is to have either a chain of n hosts, or a number
of hosts organised as a grid. Moreover, each host running a
part of the processing manages the communication with the
nearest hosts.</p>
      <p>The first part of the execution is handled by server.cpp
program that chooses the number of hosts that will be used
(among the available n), according to the size of the 5
starting matrices: ga[][], dz[][], ez[][], hx[][]
and hy[][]. Once the x hosts have been chosen, the above
matrices are split into x sub-matrices, and sent to the x hosts.
The sub-matrices are spread depending on the position of the
host.</p>
      <p>The criteria for splitting the 5 matrices (ga[][],
dz[][], ez[][], hx[][] and hy[][]) into x
submatrices are mainly two: the first concerns the x quantity of
the submatrices to be created, the second the arrangement of
them.</p>
      <p>The quantity x of the sub-matrices, which is equal to the
x number of the n computers to be available, depends on
two factors: the size of the starting matrices, and a function
that determines the accurate “multiple” of computers and their
logical interconnection.</p>
      <p>According to some size ranges of the matrices, memory
occupation and execution times on a sample host are observer,
and then a number y is advised as a possible way to handle
the data. The size split will provide an exact multiple of hosts
(see Fig. 6, in which each box represents both a submatrix
and a host).</p>
      <p>This number of hosts and parts is described by the following
two mathematical equations</p>
      <p>y + 1 y + 1 y2 + 2y + 1
x1 = =</p>
      <p>2 2 4
where y is the number suggested according to the initial
occupancy test on a sample host. Moreover, the following
equation will be used.</p>
      <p>y y + 2 y2 + 2y
x2 = =</p>
      <p>2 2 4</p>
      <p>The equation pair gets the y value and returns the number
of the sub-matrices in which the starting matrices have to be
split. The number given by the first equation x1 represents the
number of rows where submatrices will be arranged, whereas
the second equation, giving x2 defines the number of columns.
To make the system more efficient and increase parallelism,
it is necessary to reduce drastically the waiting times of
all computers. By arranging submatrices in this way, each
host that finishes its calculations, will provide inputs to, and
activate, both the host to its right (right), and the underlying
host (lower), according to the scheme shown in Fig. 7.</p>
      <p>This system significantly reduces the times for the global
calculation of starting matrices compared to the chain method,
as shown in the following example reported in Fig. 8.</p>
      <p>At the time t1 (for instance equal to 10 minutes), the first
host finishes its calculations, and passes the results to the right</p>
      <p>Fig. 8. Execution times using the chain system and using the grid approach.
Although the first, calculating the same amount of data and using the same
number of hosts it takes 40 minutes total, the second 30.
and the bottom host, ending their processing at the instant t2
(20 minutes). Both of them finally relocate their results to the
last host, which ends up to calculate their data at t3 time (equal
to 30 minutes).</p>
      <p>Increasing the number of sub-matrices in which the starting
matrices are divided, the times for the grid version of the
algorithm improve, in contrast with the time for the chain
version.</p>
    </sec>
    <sec id="sec-7">
      <title>VI. CONCLUSIONS</title>
      <p>This paper described the development of a distributed
system for calculating 5 electromagnetic magnitudes ((ga[][],
dz[][], ez[][], hx[][] and hy[][]). It was
necessary to initialize the matrices to well-defined values, through
the dynamic initialization. It was then through the server.cpp
program that the 5 starting matrices have been split into as
many sub-matrices as the selected x hosts among the available
n. Then data are transferred to the client.cpp program, and then
are synchronized. The sockets offered extreme flexibility and
ease of use for handling communication. At this point, the
necessary computation has been spread among several hosts,
each having a components performing the needed task.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Armbrust</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Fox</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Griffith</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. D.</given-names>
            <surname>Joseph</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Katz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Konwinski</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Lee</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Patterson</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rabkin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Stoica</surname>
          </string-name>
          , et al.
          <article-title>A view of cloud computing</article-title>
          .
          <source>Communications of the ACM</source>
          ,
          <volume>53</volume>
          (
          <issue>4</issue>
          ):
          <fpage>50</fpage>
          -
          <lpage>58</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>G.</given-names>
            <surname>Borowik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Wozniak</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Fornaia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Giunta</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Napoli</surname>
          </string-name>
          , G. Pappalardo, and
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          .
          <article-title>A software architecture assisting workflow executions on cloud resources</article-title>
          .
          <source>International Journal of Electronics and Telecommunications</source>
          ,
          <volume>61</volume>
          :
          <fpage>17</fpage>
          -
          <lpage>23</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>S.</given-names>
            <surname>Brenner</surname>
          </string-name>
          and
          <string-name>
            <given-names>R.</given-names>
            <surname>Scott</surname>
          </string-name>
          .
          <article-title>The mathematical theory of finite element methods</article-title>
          , volume
          <volume>15</volume>
          . Springer Science &amp; Business
          <string-name>
            <surname>Media</surname>
          </string-name>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.</given-names>
            <surname>Calvagna</surname>
          </string-name>
          and
          <string-name>
            <surname>E. Tramontana.</surname>
          </string-name>
          <article-title>Automated conformance testing of Java virtual machines</article-title>
          .
          <source>In Proceedings of Complex, Intelligent and Software Intensive Systems (CISIS)</source>
          . IEEE,
          <year>July 2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Calvagna</surname>
          </string-name>
          and
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          .
          <article-title>Delivering dependable reusable components by expressing and enforcing design decisions</article-title>
          .
          <source>In Proceedings Of Compsac</source>
          , pages
          <fpage>493</fpage>
          -
          <lpage>498</lpage>
          , Kyoto, Japan,
          <year>2013</year>
          . IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>G.</given-names>
            <surname>Capizzi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G. L.</given-names>
            <surname>Sciuto</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Napoli</surname>
          </string-name>
          , E. Tramontana, and
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Woz´niak. Automatic classification of fruit defects based on co-occurrence matrix and neural networks</article-title>
          .
          <source>In Federated Conference on Computer Science and Information Systems (FedCSIS)</source>
          , pages
          <fpage>861</fpage>
          -
          <lpage>867</lpage>
          . IEEE,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>R.</given-names>
            <surname>Damasˇevicˇius</surname>
          </string-name>
          , C. Napoli, T. Sidekerskiene˙, and
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Woz´niak. Imf remixing for mode demixing in emd and application for jitter analysis</article-title>
          .
          <source>In IEEE Symposium on Computers and Communication (ISCC)</source>
          , pages
          <fpage>50</fpage>
          -
          <lpage>55</lpage>
          . IEEE,
          <year>2016</year>
          . DOI:
          <volume>10</volume>
          .1109/ISCC.
          <year>2016</year>
          .
          <volume>7543713</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>R.</given-names>
            <surname>Damasˇevicˇius</surname>
          </string-name>
          , C. Napoli, T. Sidekerskiene˙, and
          <string-name>
            <surname>M.</surname>
          </string-name>
          <article-title>Woz´niak. Imf mode demixing in emd for jitter analysis</article-title>
          .
          <source>Journal of Computational Science</source>
          , page in press,
          <year>2017</year>
          . DOI:
          <volume>10</volume>
          .1016/j.jocs.
          <year>2017</year>
          .
          <volume>04</volume>
          .008.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>R.</given-names>
            <surname>Giunta</surname>
          </string-name>
          , G. Pappalardo, and
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          .
          <article-title>Using Aspects and Annotations to Separate Application Code from Design Patterns</article-title>
          .
          <source>In Proceedings of ACM Symposium on Applied Computing (SAC)</source>
          ,
          <year>March 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>R.</given-names>
            <surname>Giunta</surname>
          </string-name>
          , G. Pappalardo, and
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          .
          <article-title>Superimposing roles for design patterns into application classes by means of aspects</article-title>
          .
          <source>In Proceedings Of ACM Symposium on Applied Computing (SAC)</source>
          , pages
          <fpage>1866</fpage>
          -
          <lpage>1868</lpage>
          ,
          <string-name>
            <given-names>Riva</given-names>
            <surname>Del Garda</surname>
          </string-name>
          (Trento),
          <source>Italy, March</source>
          <volume>26</volume>
          -30
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kapus</surname>
          </string-name>
          <article-title>´cin´ski</article-title>
          ,
          <string-name>
            <given-names>R. K.</given-names>
            <surname>Nowicki</surname>
          </string-name>
          , and
          <string-name>
            <given-names>C.</given-names>
            <surname>Napoli</surname>
          </string-name>
          .
          <article-title>Application of genetic algorithms in the construction of invertible substitution boxes</article-title>
          .
          <source>In International Conference on Artificial Intelligence and Soft Computing</source>
          , pages
          <fpage>380</fpage>
          -
          <lpage>391</lpage>
          . Springer,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>V. W.</given-names>
            <surname>Lee</surname>
          </string-name>
          et al.
          <article-title>Debunking the 100x gpu vs. cpu myth: an evaluation of throughput computing on cpu and gpu</article-title>
          .
          <source>In Proceedings of International Symposium on Computer Architecture (ISCA)</source>
          .
          <source>ACM</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>R. J.</given-names>
            <surname>Luebbers</surname>
          </string-name>
          and
          <string-name>
            <given-names>F.</given-names>
            <surname>Hunsberger</surname>
          </string-name>
          .
          <article-title>Fdtd for nth-order dispersive media</article-title>
          .
          <source>IEEE transactions on Antennas and Propagation</source>
          ,
          <volume>40</volume>
          (
          <issue>11</issue>
          ):
          <fpage>1297</fpage>
          -
          <lpage>1301</lpage>
          ,
          <year>1992</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Mongiov</surname>
          </string-name>
          `ı, G. Giannone,
          <string-name>
            <given-names>A.</given-names>
            <surname>Fornaia</surname>
          </string-name>
          , G. Pappalardo, and
          <string-name>
            <surname>E. Tramontana.</surname>
          </string-name>
          <article-title>Combining static and dynamic data flow analysis: a hybrid approach for detecting data leaks in java applications</article-title>
          .
          <source>In Proc. of Symposium on Applied Computing (SAC)</source>
          , pages
          <fpage>1573</fpage>
          -
          <lpage>1579</lpage>
          . ACM,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>T.</given-names>
            <surname>Namiki</surname>
          </string-name>
          .
          <article-title>A new fdtd algorithm based on alternating-direction implicit method</article-title>
          .
          <source>IEEE Transactions on Microwave Theory and Techniques</source>
          ,
          <volume>47</volume>
          (
          <issue>10</issue>
          ):
          <fpage>2003</fpage>
          -
          <lpage>2007</lpage>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>C.</given-names>
            <surname>Napoli</surname>
          </string-name>
          , G. Pappalardo, and
          <string-name>
            <given-names>E.</given-names>
            <surname>Tramontana</surname>
          </string-name>
          .
          <article-title>A mathematical model for file fragment diffusion and a neural predictor to manage priority queues over bittorrent</article-title>
          .
          <source>International Journal of Applied Mathematics and Computer Science</source>
          ,
          <volume>26</volume>
          (
          <issue>1</issue>
          ):
          <fpage>147</fpage>
          -
          <lpage>160</lpage>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>D.</given-names>
            <surname>Połap</surname>
          </string-name>
          , M. Woz´niak,
          <string-name>
            <given-names>C.</given-names>
            <surname>Napoli</surname>
          </string-name>
          , E. Tramontana, and
          <string-name>
            <given-names>R.</given-names>
            <surname>Damasˇevicˇius</surname>
          </string-name>
          .
          <article-title>Is the colony of ants able to recognize graphic objects?</article-title>
          <source>In International Conference on Information and Software Technologies</source>
          , pages
          <fpage>376</fpage>
          -
          <lpage>387</lpage>
          . Springer,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Dassault</given-names>
            <surname>Systems</surname>
          </string-name>
          . CST - computer simulation technology.
          <source>www.cst.com.</source>
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>D. M.</given-names>
            <surname>Sullivan</surname>
          </string-name>
          .
          <article-title>Electromagnetic simulation using the FDTD method</article-title>
          . John Wiley &amp; Sons,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>