1. Introduction
Parabolic integro-differential equations (PIDEs) arise in various physical contexts, such as heat conduction in materials with memory [
1,
2,
3], the compression of poro-viscoelastic media [
4], nuclear reactor dynamics [
5], epidemic phenomena in biology [
6] and drug absorption/release [
7,
8]. Existing and unique results from such kinds of problems can be found in [
9,
10,
11,
12].
Inevitably, such equations have to be solved numerically and various approaches have been developed for this, such as spectral methods, spline and collocation, the method of lines and finite-element methods [
13,
14,
15,
16,
17,
18,
19,
20,
21]. Amongst these, one of the most attractive is arguably the finite-element method (FEM), since it can be applied to irregularly-shaped domains in higher dimensions; moreover, convergence (both a priori and a posteriori) analysis for such problems is already well-established, and for this one may refer to [
9,
10,
12,
22,
23,
24,
25,
26,
27,
28]. As regards existing software platforms which could be used for a finite-element implementation without having to resort to lengthy programming from first principles, the main choices are freefem++ [
29], deal.II [
30], iFEM [
31], FEniCS [
32], DUNE [
33], FEATool [
34], MATLAB’s Partial Differential Equation Toolbox [
35] and COMSOL Multiphysics [
36]; however, it is not immediately obvious how to solve PIDEs with any of these. This is perhaps surprising in the case of MATLAB, which has become increasingly popular in recent years for the numerical solutions of various partial differential equations (PDEs) in structural mechanics and heat transfer [
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47], and has proven to be an excellent tool for academic education in general [
40].
Against that background, the purpose of this article is to provide a compact formulation for solving PIDEs in two spatial dimensions (2D) using FEM on unstructured grids (we made the resulting software, which we programmed in MATLAB, openly available). This is done by extending the already available FEM formulations for PDEs [
40,
43,
44,
48,
49] to PIDEs. In particular, we:
Use piecewise linear finite element spaces on triangles for the space discretization;
Vase the time discretizations on the backward-Euler and the Crank–Nicolson methods;
Choose the quadrature rules for discretizing the Volterra integral term so as to be consistent with the time-stepping schemes.
In addition, we demonstrate that for PDEs, vectorization techniques can be used to speed up the sets of code for PIDEs. Importantly, these sets of code can be easily extended to more complex geometries, and to PIDEs with different kernels in the Volterra integral term. A comparison with results obtained using COMSOL Multiphysics for a test example shows that our method is competitive. Moreover, further consideration indicates that COMSOL Multiphysics cannot be directly applied to 2D PIDEs containing more complex kernels in the Volterra integral term, whereas our method can.
The rest of the paper is organized as follows. The model problem and its weak formulation are described in
Section 2. The discretization is sketched in
Section 3. The data representation of the triangulation is described in
Section 4, together with the discrete space. The assembly of the stiffness matrix, mass matrix and load vector are presented in
Section 5. Improved pseudo-codes using vectorization is presented in
Section 6, and an implementation in MATLAB is discussed in
Section 7. In
Section 8, a comparison of the results obtained using the different sets of code is presented; results obtained using COMSOL Multiphysics are also compared. Conclusions are drawn in
Section 9.
2. Model Problem and Weak Formulation
Given a Lebesgue measurable set , we denote by the Lebesgue spaces. When , the space is equipped with an inner product . For an integer , we use the standard notation for Sobolev spaces with . When , we denote by . The function space consists of elements from that vanish on the boundary of , where the boundary values are to be interpreted in the sense of a trace.
Consider the following initial-boundary value problem for a linear PIDE of the form
Here,
and
is a bounded Lipschitz domain with boundary
. Further,
and
where
denotes the Laplacian and ∇ denotes the spatial gradient. We assume that the coefficient matrix
is
in
. If we assume the initial function
to be in
, the source term
to be in
and
then the problem (
1) admits a unique solution
The existence results are discussed in detail in Chapter 2 of [
9]. For regularity and stability results of such problems, please refer to [
10,
28].
Let
be the bilinear form corresponding to the operator
defined by
Similarly, let
be the bilinear form corresponding to the operator
defined on
by
Then, the weak formulation of the problem (
1) may be stated as follows: find
such that, for all
,
3. Galerkin Discretizations
Let denote a regular partition of the domain into disjoint triangles K of diameter such that:
, and any pair of triangles intersect along a complete edge, at a vertex, or not at all;
No vertex of any triangle lies on the interior of a side of another triangle.
Let
be the finite element space defined by
where
is the space of polynomials in
d variables of degree at most 1.
With as the set of nodes of , we consider the nodal basis , where the hat function is characterized by , where is the Kronecker delta.
Let
be a partition of
with
. Set
for
. Now, for
, we define
In this article, we consider uniform time steps, i.e.,
.
3.1. Backward-Euler Scheme
Let
be the Lagrange interpolant corresponding to
. Then, the fully discrete backward-Euler scheme may be stated as follows: given
, where
, find
such that
where
if the left rectangular rule is used to discretize the integral term, or
if the right rectangular rule is used. In any case, both are consistent with the backward-Euler scheme and the order of accuracy is same.
The discrete problem (
6) becomes: find
such that
where the mass matrix
, the stiffness matrix
and the load vector
are given by
respectively.
3.2. Crank–Nicolson Scheme
We now state the Crank–Nicolson scheme as follows: given
, where
, find
such that
where
Here, the trapezoidal rule is used to discretize the integral term in order to be consistent with the Crank–Nicolson scheme.
Using (
13), we obtain the following matrix equation for the Crank–Nicolson scheme:
for
and where
is the mass matrix,
is the stiffness matrix and
is the load vector:
3.3. Remark on More General Boundary Conditions
Problems involving more general boundary conditions can also be addressed in a similar manner. Suppose that the domain boundary is split into two components
and
such that
and
, assuming that
is closed and has a nonzero measure. For sufficiently regular Neumann boundary data
, consider a problem posed with mixed-type boundary conditions:
We assume there is a function
such that
Then, the weak form of this problem reads: find
such that
where
and
4. Data Representation
To fix ideas ahead of benchmark computations, consider the L-shaped domain
with a closed polygonal boundary
, as shown in
Figure 1, where nodes are represented as blue squares and the exterior continuous line represents the boundary with Dirichlet boundary condition
; this domain was chosen as it is often used for benchmarking FEM computations [
41,
44,
50,
51].
In order to represent the relationship between node and spatial coordinates, and between elements and nodes, it is necessary to define arrays that store this information. Thus, we define the array
c4n, which represents the node-coordinate relation, and the array
n4e, which represents the element-node relation to generate the domain; these are given in
Table 1. In addition, the Dirichlet boundary conditions are represented by a data structure
dir which contains nodal information; this is also given in
Table 1. The first columns of the arrays
c4n,
n4e and
dir represent the node number, element number and edge number, respectively.
5. Assembly
In this section, we assemble the stiffness matrix, the mass matrix, the load vector and the initial and boundary conditions. The assembly is standard and builds on the ideas for PDEs presented in [
40,
44]; however, we include it here for completeness, ensuring that the standard routines and the non-standard ones related to PIDEs are available in one location. In what follows, we take
and let
and
be the vertices of an element
K and
and
the corresponding local basis functions in
. The sets of code which make use of the subroutines presented in this section are given in
Appendix A.
For the sets of pseudocode that follow, we first need to establish a common notation; this is given in
Table 2.
5.1. Assembling the Stiffness Matrix
Since
a simple calculation reveals
Hence, we obtain
Here, the indices are to be understood modulo 3, and
is the area of triangle
K. Thus, using (11), the entries of the stiffness matrix can be computed as
with indices modulo 3. This can be written as
The pseudocode given in Algorithm 1 computes the local stiffness matrix contributions, based on Equations (
17)–(
21).
Algorithm 1 Computation of local stiffness matrix contributions. |
- 1:
procedurestima() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
return S - 9:
end procedure
|
Using the local contributions, one can compute the global contributions using the pseudocode given in Algorithm 2.
Algorithm 2 Computation of the global contributions. |
- 1:
procedureStiffAssemb() - 2:
- 3:
- 4:
for to r, do - 5:
- 6:
end for - 7:
return A - 8:
end procedure
|
5.2. Assembling the Mass Matrix
The entries of the mass matrix
M can be computed as
For triangular, piecewise affine elements, we obtain
the pseudocode for
M, based on Equations (
22) and (
23), is given in Algorithm 3.
Algorithm 3 Assembling the mass matrix. |
- 1:
procedureMassAssemb() - 2:
- 3:
- 4:
for to r do - 5:
- 6:
- 7:
- 8:
end for - 9:
return M - 10:
end procedure
|
5.3. Assembling the Load Vector
The volume forces, which are calculated using Algorithm 4, are used for assembling the load vector. Using the value of
f at the center of gravity
of
K, the integral
is approximated by
In addition, the load vector contains a contribution from the integral terms containing the kernel
B; this is given in Algorithm 5.
Algorithm 4 Source function. |
- 1:
proceduref() - 2:
- 3:
return - 4:
end procedure
|
Algorithm 5 Coefficient function in the kernel. |
- 1:
procedureintgral() - 2:
- 3:
return - 4:
end procedure
|
5.4. Boundary and Initial Conditions
The sets of pseudocode for the boundary and initial conditions given by Equations (2) and (3), respectively, are given in Algorithms 6 and 7, respectively.
Algorithm 6 Boundary conditions. |
- 1:
procedureUd() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
return - 9:
end procedure
|
Algorithm 7 Initial conditions. |
- 1:
procedureU0() - 2:
- 3:
- 4:
- 5:
return - 6:
end procedure
|
6. Improved Assembly
To improve the implementation, we present in this section an optimization of the algorithm that switches away from a looping approach towards the utilization of vector tools, available in software such as MATLAB. A brief description of these improvements follows. Similar approaches can be found in [
40,
43], and the sets of code supplied are modified versions of those given in [
52]; they are included for completeness. The sets of pseudocode which make use of the subroutines presented in this section are given in
Appendix B.
6.1. Assembling the Stiffness Matrix
The vectorization of the code for the stiffness matrix is done by using the commands SPARSE and RESHAPE, which allow us to store in the vectors
I and
J the indices related to the contributions of each node of each element for building the stiffness matrix
A. This provides the possibility to evaluate the stiffness matrix
A in one line, i.e., without a loop, as shown in Algorithm 8.
Algorithm 8 Assembling the stiffness matrix with vectorization. |
- 1:
procedureStiffAssemb() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
return A - 10:
end procedure
|
6.2. Assembling the Mass Matrix
Similarly to the previous paragraph, we can build the mass matrix
M by using the SPARSE command. We remark that, in this case, the evaluation of the matrix is reduced to the calculation of only two vectors, as shown in Algorithm 9.
Algorithm 9 Assembling the mass matrix with vectorization. |
- 1:
procedureMassAssemb() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
return M - 9:
end procedure
|
6.3. Assembling the Load Vector
In order to assemble the right-hand side, we refer to what we have done in
Section 5.3 considering the volume forces and the center of gravity. Here, however, the improvement consists of neglecting the loop by inserting the MATLAB command ACCUMARRAY, which creates an array of given size, where the values are collected through the REPMAT command, which in this case returns a
array containing copies of the corresponding evaluation of the element.
6.4. Boundary and Initial Conditions
For the vectorized version also, the sets of pseudocode for the boundary and initial conditions are given in Algorithms 6 and 7, respectively.
7. Overview of an Implementation in Matlab
A minimal MATLAB implementation of the presented algorithm is available from
Supplementary Materials. There are six zipfiles which contain the necessary MATLAB files therein:
BE_LRR_unvectorized.zip (backward-Euler, left rectangular rule, unvectorized);
BE_LRR_vectorized.zip (backward-Euler, left rectangular rule, vectorized);
BE_RRR_unvectorized.zip (backward-Euler, right rectangular rule, unvectorized);
BE_RRR_vectorized.zip (backward-Euler, right rectangular rule, vectorized);
CN_unvectorized.zip (Crank–Nicolson, unvectorized);
CN_vectorized.zip (Crank–Nicolson, vectorized).
To run the demo program, uncompress the desired zip file and run the Main.m file; this:
Specifies the geometry;
Computes the solution;
Plots the solution.
In particular, the computation of the solution is carried out by
SCHEME_NAME_PIDE.m, which sets the initial conditions via
U0.m, and assembles the stiffness matrix and the mass matrix via
StiffAssemb.m and
MassAssemb.m, respectively; thereafter,
solve_SCHEME_NAME.mupdates the boundary conditions via
Ud.m, assembles the load vector via
f.m and obtains the solution at the current time step. Furthermore, note that whilst most of the subroutines are the same in both the vectorized and unvectorized versions of the code, those for
StiffAssemb.m and
MassAssemb.m are necessarily slightly different, in line with the discussion in
Section 5 and
Section 6.
8. Numerical Results
In this section, we study a numerical example and compare the results obtained using different versions of the MATLAB-based sets of code; in addition, solutions were obtained using COMSOL Multiphysics. For the example, we consider the L-shaped domain
mentioned earlier; take
and
which is a kernel that occurs in different settings in many of the references given earlier, and others [
2,
3,
4,
7,
14,
53,
54]; this leads to the following exact solution for
u:
Figure 2a shows the exact solution to the problem, whereas
Figure 2b corresponds to the backward-Euler approximation, where the left rectangular rule is applied to treat the Volterra integral term.
Figure 2c,d show the solutions obtained using the backward-Euler approximation with the right rectangular rule and the Crank–Nicolson approximation with the trapezoidal rule, respectively, to treat the Volterra integral term. In addition,
Figure 3 shows a comparison of the analytical solution with the solution computed by COMSOL Multiphysics with 66142 P1 elements for
, where
; as expected, the agreement is very good.
To illustrate the advantage of the vectorized code for each numerical scheme over the unvectorized one, which uses
for loops for the assembly process, we have presented a comparison of the runtimes with respect to the number of elements,
N. This is given in
Table 3, which also shows the runtimes for COMSOL Multiphysics. Note that all sets of code were run on an Intel Core i7 Notebook with a 1.7 GHz processor and 8 GB of RAM. We can note from
Table 3 that vectorized versions of the MATLAB sets of code presented in this article on the finest mesh get close to COMSOL’s performance. Nevertheless, there are several factors behind the results. On the one hand, in the developed MATLAB sets of code, we discretize the Volterra integral term; as a result, one has to store the memory term values at all of the time discretization points. On the other hand, because of the particular form of the kernel in (
26), and as explained in
Appendix C, COMSOL Multiphysics does not need to evaluate the integral at all; even so, the difference in computational time is not decisive. However, and as also explained in
Appendix C, we would not have been able to use COMSOL Multiphysics at all in this way if the kernel had not had a separable form, whereas the sets of code presented in this article do not have this limitation.
In addition, we define an efficiency factor,
, given by
/
, where
is the runtime of the unvectorized code and
is the runtime of the vectorized code; the results for this are shown in
Table 4. From the latter, we observe that refining the mesh increases the efficiency factor
. This shows that the relative performance of the vectorized code improves significantly as the number of elements is increased.
9. Conclusions
In this paper, we have presented a compact implementation using the finite-element method for solving linear PIDEs in arbitrary 2D geometries, both in terms of sets of pseudocode and in terms of a MATLAB code, which we have made openly available; we note that such a code is not available in other competing FEM software, such as freefem++ or deal.II. In addition, it was found that a vectorized version of the MATLAB code solves the model problem considered around three times more quickly than the unvectorized code on finer meshes. Furthermore, because of the particular form of the kernel in the Volterra integral term, the model problem could be represented in a form that was amenable to solution using the commercial finite-element software COMSOL Multiphysics. For this particular problem, in which the kernel has a separable form, COMSOL Multiphysics slightly outperforms even our vectorized code when using a mesh of around 66,000 elements.
Future development of this work would involve extending the sets of code to handle non-linear integral terms [
55] and to three dimensions.
Author Contributions
Conceptualization, G.M.M.R.; methodology, G.M.M.R.; software, G.M.M.R., A.B.S., D.d.O.M. and L.M.; validation, M.A. and M.V.; formal analysis, G.M.M.R.; investigation, all; writing—original draft preparation, G.M.M.R. and M.V.; writing—review and editing, G.M.M.R. and M.V.; supervision, G.M.M.R. and M.V.; project administration, G.M.M.R. and M.V.; funding acquisition, G.M.M.R. and M.V. All authors have read and agreed to the published version of the manuscript.
Funding
This research was funded by FAPESP (Fundação de Amparo à Pesquisa do Estado de São Paulo) grant numbers 2016/19648-9, 2017/11428-2 and 2018/07643-8 and the Programa de Excelência Académica (Proex)—Coordenação de Aperfeiçoamento de Pessoal de Nível Superior—Brazil (CAPES)—Finance Code PROEX-9740044/D. The APC was funded by KTH Royal Institute of Technology.
Acknowledgments
The sixth author acknowledges the award of a visiting researcher grant from the University of São Paulo.
Conflicts of Interest
The authors declare no conflict of interest. The funders had no role in the design of the study; in the collection, analyses or interpretation of data; in the writing of the manuscript, or in the decision to publish the results.
Appendix A. Unvectorized Pseudocode
In this section, the unvectorized sets of pseudocode are presented.
Pseudo-code for Algorithms A1–A6 the backward-Euler scheme with the left rectangular rule, corresponding to Equation (9) and employing (7):
Algorithm A1 Backward-Euler scheme with left rectangular rule. |
Main function |
- 1:
procedureBELRFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
for to , do - 9:
- 10:
end for - 11:
return U - 12:
end procedure
|
Auxiliary function |
- 13:
proceduresolveBELRR() - 14:
- 15:
- 16:
for to , do - 17:
- 18:
- 19:
- 20:
end for - 21:
- 22:
if , then - 23:
for to , do - 24:
- 25:
end for - 26:
end if - 27:
- 28:
- 29:
- 30:
- 31:
- 32:
- 33:
- 34:
return - 35:
end procedure
|
Code for the backward-Euler scheme with the right rectangular rule, corresponding to Equation (9) and employing (8):
Algorithm A2 Backward-Euler scheme with right rectangular rule. |
Main function |
- 1:
procedureBERRFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
for to , do - 9:
- 10:
end for - 11:
return U - 12:
end procedure
|
Auxiliary function |
- 13:
procedureSOLVEBERRR() - 14:
- 15:
- 16:
for to , do - 17:
- 18:
- 19:
- 20:
end for - 21:
- 22:
if , then - 23:
- 24:
for to , do - 25:
- 26:
end for - 27:
end if - 28:
- 29:
- 30:
- 31:
- 32:
- 33:
- 34:
- 35:
- 36:
return - 37:
end procedure
|
Code for Crank–Nicolson scheme with trapezoidal rule, corresponding to Equation (14):
Algorithm A3 Crank–Nicolson scheme with the trapezoidal rule. |
Main function |
- 1:
procedureCNFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
for to , do - 9:
- 10:
end for - 11:
return U - 12:
end procedure
|
Auxiliary function |
- 13:
procedureSOLVECN() - 14:
- 15:
- 16:
for to , do - 17:
- 18:
- 19:
- 20:
- 21:
end for - 22:
- 23:
if , then - 24:
- 24:
- 24:
- 25:
for to , do - 26:
- 27:
end for - 28:
end if - 29:
- 30:
- 31:
- 32:
- 33:
- 34:
- 35:
- 36:
- 37:
return - 38:
end procedure
|
Appendix B. Vectorized Pseudocode
In this section, the vectorized sets of pseudocode are presented.
Code for the backward-Euler scheme with the left rectangular rule, corresponding to Equation (9) and employing (7):
Algorithm A4 Vectorized version of backward-Euler scheme with the left rectangular rule. |
Main function |
- 1:
procedureBELRFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
- 10:
- 11:
- 12:
- 13:
for to , do - 14:
- 15:
end for - 16:
return U - 17:
end procedure
|
Auxiliary function |
- 18:
proceduresolveBELRR() - 19:
- 20:
- 21:
- 22:
- 23:
- 24:
if , then - 25:
for to , do - 26:
- 27:
end for - 28:
end if - 29:
- 30:
- 31:
- 32:
- 33:
- 34:
- 35:
- 36:
- 37:
return - 38:
end procedure
|
Code for the backward-Euler scheme with the right rectangular rule, corresponding to Equation (9) and employing (8):
Algorithm A5 Vectorized version of backward-Euler scheme with the left rectangular rule. |
Main function |
- 1:
procedureBERRFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
- 10:
- 11:
- 12:
- 13:
for to , do - 14:
- 15:
end for - 16:
return U - 17:
end procedure
|
Auxiliary function |
- 18:
proceduresolveBERRR() - 19:
- 20:
- 21:
- 22:
- 23:
- 24:
if , then - 25:
- 26:
for to , do - 27:
- 28:
end for - 29:
end if - 30:
- 31:
- 32:
- 33:
- 34:
- 35:
- 36:
- 37:
- 38:
return - 39:
end procedure
|
Code for Crank–Nicolson scheme with trapezoidal rule, corresponding to Equation (14):
Algorithm A6 Crank–Nicolson scheme with the trapezoidal rule. |
Main function |
- 1:
procedureCNFEMPIDE() - 2:
- 3:
- 4:
- 5:
- 6:
- 7:
- 8:
- 9:
- 10:
- 11:
- 12:
- 13:
for to , do - 14:
- 15:
end for - 16:
return U - 17:
end procedure
|
Auxiliary function |
- 18:
procedureSOLVECN() - 19:
- 20:
- 21:
- 22:
- 23:
- 24:
- 25:
- 25:
- 26:
if , then - 27:
- 27:
- 27:
- 28:
for to , do - 29:
- 30:
end for - 31:
end if - 32:
- 33:
- 34:
- 35:
- 36:
- 37:
- 38:
- 39:
- 40:
return - 41:
end procedure
|
Appendix C. Solution Using COMSOL Multiphysics
The fact that (
26) is separable in
t and
s implies that the problem can be reformulated as a hyperbolic initial boundary value problem defined by the so-called telegraph equation [
53]. In particular, on using (
4) and setting
Equation (
1) becomes
where
which differentiates with respect to
t and using (
A1) gives
Thus, the system to solve is (
A1) and (
A3), subject to
This is then a relatively straightforward task in COMSOL Multiphysics, which can be carried out from the graphical user interface; in particular,
PDE General Form and
Weak Form (subdomain) modules are used for Equations (
A1) and (
A3), respectively. Moreover, we are able to ensure a fair comparison with the results of the other sets of code by importing into COMSOL Multiphysics the same meshes as were used for the earlier computations and using the same time step (0.025); in addition, for the time-stepping, we used the generalized-
method [
56,
57].
On the other hand, if
is not separable, e.g.,
instead of (
26), it is not possible to have a formulation that does not retain an integral sign and we have not, at this point, found a simple way to solve this problem, although it would no doubt require coupling COMSOL Multiphysics to a MATLAB script.
References
- Gurtin, M.E.; Pipkin, A.C. A general theory of heat conduction with finite wave speeds. Arch. Ration. Mech. Anal. 1968, 31, 113–126. [Google Scholar] [CrossRef]
- Joseph, D.D.; Preziosi, L. Heat waves. Rev. Mod. Phys. 1989, 61, 41–73. [Google Scholar] [CrossRef]
- Araújo, A.; Ferreira, J.A.; Oliveira, P. The effect of memory terms in diffusion phenomena. J. Comput. Math. 2006, 24, 91–102. [Google Scholar]
- Habetler, G.J.; Schiffman, R.L. A finite difference method for analyzing the compression of poro-viscoelastic media. Computing 1970, 6, 342–348. [Google Scholar] [CrossRef]
- Pao, C.V. Solution of a nonlinear integrodifferential system arising in nuclear reactor dynamics. J. Math. Anal. Appl. 1974, 48, 470–492. [Google Scholar] [CrossRef] [Green Version]
- Capasso, V. Asymptotic stability for an integro-differential reaction-diffusion system. J. Math. Anal. Appl. 1984, 103, 575–588. [Google Scholar] [CrossRef] [Green Version]
- Barbeiro, S.; Ferreira, J.A. Integro-differential models for percutaneous drug absorption. Int. J. Comput. Maths 2007, 84, 451–467. [Google Scholar] [CrossRef] [Green Version]
- Barbeiro, S.; Ferreira, J.A. Coupled vehicle-skin models for drug release. Comput. Methods Appl. Mech. Eng. 2009, 198, 2078–2086. [Google Scholar] [CrossRef] [Green Version]
- Chuanmiao, C.; Tsimin, S. Finite Element Methods for Integrodifferential Equations; World Scientific Publishing Co. Inc.: River Edge, NJ, USA, 1998. [Google Scholar]
- Yanik, E.G.; Fairweather, G. Finite element methods for parabolic and hyperbolic partial integro-differential equations. Nonlinear Anal. 1988, 12, 785–809. [Google Scholar] [CrossRef]
- Engler, H. On some parabolic integro-differential equations—Existence and asymptotics of solutions. Lect. Notes Math. 1983, 1017, 161–167. [Google Scholar]
- Reddy, G.M.M.; Sinha, R.K.; Cuminato, J.A. A posteriori error analysis of the Crank-Nicolson finite element method for parabolic integro-differential equations. J. Sci. Comput. 2019, 79, 414–441. [Google Scholar] [CrossRef]
- Sameeh, M.; Elsaid, A. Chebyshev collocation method for parabolic partial integrodifferential equations. Adv. Math. Phys. 2016, 2016, 7854806. [Google Scholar] [CrossRef] [Green Version]
- Filiz, A. Numerical solution of parabolic Volterra integro-differential equations via backward-Euler scheme. J. Comput. Appl. Math. 2013, 3, 277–282. [Google Scholar]
- Soliman, A.F.; El-asyed, A.M.; El-Azab, M.S. On the numerical solution of partial integro-differential equations. Math. Sci. Lett. 2012, 1, 71–80. [Google Scholar] [CrossRef]
- Avazzadeh, Z.; Rizi, Z.B.; Ghaini, F.M.M.; Loghmani, G.B. A numerical solution of nonlinear parabolic-type Volterra partial integro-differential equations using radial basis functions. Eng. Anal. Bound. Elem. 2012, 36, 881–893. [Google Scholar] [CrossRef]
- Ma, J. Finite element methods for partial Volterra integro-differential equations on two-dimensional unbounded spatial domains. Appl. Math. Comput. 2007, 186, 598–609. [Google Scholar] [CrossRef]
- Fakhar-Izadi, F.; Dehghan, M. The spectral methods for parabolic Volterra integro-differential equations. J. Comput. Appl. Math. 2011, 235, 4032–4046. [Google Scholar] [CrossRef] [Green Version]
- Kauthen, J.P. The method of lines for parabolic partial integro-differential equations. J. Integr. Equa. Appl. 1992, 4, 69–81. [Google Scholar] [CrossRef]
- Larsson, S.; Thomee, V.; Wahlbin, L.B. Numerical solution of parabolic integro-differential equations by the discontinuous Galerkin method. Math. Comput. 1998, 67, 45–71. [Google Scholar] [CrossRef] [Green Version]
- Greenwell-Yanik, C.E.; Fairweather, G. Analyses of spline collocation methods for parabolic and hyperbolic problems in 2 space variables. SIAM J. Numer. Anal. 1986, 23, 282–296. [Google Scholar] [CrossRef]
- Lin, Y.P.; Thomée, V.; Wahlbin, L.B. Ritz-Volterra projections to finite-element spaces and applications to integrodifferential and related equations. SIAM J. Numer. Anal. 1991, 28, 1047–1070. [Google Scholar] [CrossRef]
- Pani, A.K.; Sinha, R.K. Error estimates for semidiscrete Galerkin approximation to a time dependent parabolic integro-differential equation with nonsmooth data. Calcolo 2000, 37, 181–205. [Google Scholar] [CrossRef]
- Reddy, G.M.M.; Sinha, R.K. Ritz-Volterra reconstructions and A Posteriori Error Anal. Finite Elem. Method Parabol. Integro-Differ. Equations. IMA J. Numer. Anal. 2015, 35, 341–371. [Google Scholar] [CrossRef]
- Reddy, G.M.M.; Sinha, R.K. On the Crank-Nicolson anisotropic a posteriori error analysis for parabolic integro-differential equations. Math. Comp. 2016, 85, 2365–2390. [Google Scholar] [CrossRef]
- Reddy, G.M.M.; Sinha, R.K. The backward Euler anisotropic a posteriori error analysis for parabolic integro-differential equations. Numer. Methods Partial. Differ. Equ. 2016, 32, 1309–1330. [Google Scholar] [CrossRef]
- Shaw, S.; Whiteman, J.R. Numerical solution of linear quasistatic hereditary viscoelasticity problems. SIAM J. Numer. Anal. 2000, 38, 80–97. [Google Scholar] [CrossRef] [Green Version]
- Thomée, V.; Zhang, N.Y. Error estimates for semidiscrete finite element methods for parabolic integro-differential equations. Math. Comput. 1989, 53, 121–139. [Google Scholar] [CrossRef]
- Hecht, F. New development in freefem++. J. Numer. Math. 2012, 20, 251–265. [Google Scholar] [CrossRef]
- deal.II—An Open Source Finite Element Library. Available online: https://www.dealii.org/ (accessed on 21 September 2020).
- iFEM—Mathematical Software. Available online: http://swmath.org/software/7766 (accessed on 21 September 2020).
- FEniCS Project. Available online: https://fenicsproject.org/ (accessed on 21 September 2020).
- DUNE Numerics. Available online: https://www.dune-project.org/ (accessed on 21 September 2020).
- Physics Simulation Made Easy. Available online: https://www.featool.com/ (accessed on 21 September 2020).
- MathWorks. Available online: http://www.mathworks.com (accessed on 21 September 2020).
- COMSOL. Available online: http://www.comsol.com (accessed on 21 September 2020).
- Acosta, G.; Bersetche, F.M.; Borthagaray, J.P. A short FE implementation for a 2d homogeneous Dirichlet problem of a fractional Laplacian. Comput. Math. Appl. 2017, 74, 784–816. [Google Scholar] [CrossRef] [Green Version]
- Alberty, J.; Carstensen, C.; Funken, S.A.; Klose, R. Matlab implementation of the finite element method in elasticity. Computing 2002, 69, 239–263. [Google Scholar] [CrossRef]
- Abdulle, A.; Nonnenmacher, A. A short and versatile finite element multiscale code for homogenization problems. Comput. Methods Appl. Mech. Eng. 2009, 198, 2839–2859. [Google Scholar] [CrossRef]
- Alberty, J.; Carstensen, C.; Funken, S.A. Remarks around 50 lines of Matlab: Short finite element implementation. Numer. Algorithms 1999, 20, 117–137. [Google Scholar] [CrossRef]
- Bahriawati, C.; Carstensen, C. Three MATLAB implementations of the lowest-order Raviart-Thomas MFEM with a posteriori error control. Comput. Methods Appl. Math. 2005, 5, 333–361. [Google Scholar] [CrossRef]
- Carstensen, C.; Klose, R. Elastoviscoplastic finite element analysis in 100 lines of Matlab. J. Numer. Math. 2002, 10, 157–192. [Google Scholar] [CrossRef]
- Cuvelier, F.; Japhet, C.; Scarella, G. An efficient way to assemble finite element matrices in vector languages. BIT Numer. Math. 2016, 56, 833–864. [Google Scholar] [CrossRef] [Green Version]
- Funken, S.; Praetorius, D.; Wissgott, P. Efficient implementation of adaptive P1-FEM in Matlab. Comput. Methods Appl. Math. 2011, 11, 460–490. [Google Scholar] [CrossRef]
- Korzec, M.; Ahnert, T. Time-stepping methods for the simulation of the self-assembly of nano-crystals in Matlab on a GPU. J. Comput. Phys. 2013, 251, 396–413. [Google Scholar] [CrossRef]
- Sutton, O.J. The virtual element method in 50 lines of MATLAB. Numer. Algorithms 2017, 75, 1141–1159. [Google Scholar] [CrossRef] [Green Version]
- Wang, H.; Tian, H. A fast Galerkin method with efficient matrix assembly and storage for a peridynamic model. J. Comput. Phys. 2012, 231, 7730–7738. [Google Scholar] [CrossRef]
- Rahman, T.; Valdman, J. Fast MATLAB assembly of FEM matrices in 2D and 3D: Nodal elements. Appl. Math. Comput. 2013, 219, 7151–7158. [Google Scholar] [CrossRef]
- Frank, F.; Reuter, B.; Aizinger, V.; Knabner, P. FESTUNG: A MATLAB/GNU Octave toolbox for the discontinuous Galerkin method, Part I: Diffusion operator. Comput. Math. Appl. 2015, 70, 11–46. [Google Scholar] [CrossRef]
- Kim, S.; Lee, H.C. Finite element method to control the domain singularities of poisson equation using the stress intensity factor: Mixed boundary condition. Int. J. Numer. Anal. Model. 2017, 14, 500–510. [Google Scholar]
- Schiff, B. Finite-element eigenvalues for the Laplacian over an L-shaped domain. J. Comput. Phys. 1988, 76, 233–242. [Google Scholar] [CrossRef]
- Cuvelier, F.; Japhet, C.; Scarella, G. An Efficient Way to Perform the Assembly of Finite Element Matrices in Matlab and Octave; Technical Report; INRIA: Rocquencourt, France, 2013. [Google Scholar]
- Araújo, A.; Branco, J.R.; Ferreira, J.A. On the stability of a class of splitting methods for integro-differential equations. Appl. Numer. Math. 2009, 59, 436–453. [Google Scholar] [CrossRef] [Green Version]
- Khuri, S.A.; Sayfy, A. A numerical approach for solving an extended Fisher-Kolomogrov-Petrovskii-Piskunov equation. J. Comp. Appl. Math. 2010, 233, 2081–2089. [Google Scholar] [CrossRef] [Green Version]
- Chu, K.T. A direct matrix method for computing analytical Jacobians of discretized nonlinear integro-differential equations. J. Comput. Phys. 2009, 228, 5526–5538. [Google Scholar] [CrossRef] [Green Version]
- Chung, J.; Hulbert, G.M. A time integration algorithm for structural dynamics with improved numerical dissipation—The generalized-α method. J. Appl. Mech.—Trans. ASME 1993, 60, 371–375. [Google Scholar] [CrossRef]
- Jansen, K.E.; Whiting, C.H.; Hulbert, G.M. A generalized-alpha method for integrating the filtered Navier-Stokes equations with a stabilized finite element method. Comput. Methods Appl. Mech. Eng. 2000, 190, 305–319. [Google Scholar] [CrossRef]
© 2020 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (http://creativecommons.org/licenses/by/4.0/).