Helmholtz Decomposition of Vector Fields Using an Optimal Preconditioned Conjugate Gradient Algorithm
Jorge Lopez
UJAT, Tabasco, México.
DOI: 10.4236/jamp.2023.115086   PDF    HTML   XML   56 Downloads   389 Views  

Abstract

In this article, we study numerically a Helmholtz decomposition methodology, based on a formulation of the mathematical model as a saddle-point problem. We use a preconditioned conjugate gradient algorithm, applied to an associated operator equation of elliptic type, to solve the problem. To solve the elliptic partial differential equations, we use a second order mixed finite element approximation for discretization. We show, using 2-D synthetic vector fields, that this approach, yields very accurate solutions at a low computational cost compared to traditional methods with the same order of approximation.

Share and Cite:

Lopez, J. (2023) Helmholtz Decomposition of Vector Fields Using an Optimal Preconditioned Conjugate Gradient Algorithm. Journal of Applied Mathematics and Physics, 11, 1337-1348. doi: 10.4236/jamp.2023.115086.

1. Introduction

Several problems and applications require a deep knowledge of a vector field over a region. An important tool in this context is the Helmholtz decomposition theorem (HDT) that guarantees, under certain hipothesis [1] [2] , a unique decomposition of a vector field u defined in a domain Ω into its solenoidal u s and irrotational u p components. This is,

u = u s + u p , in Ω . (1)

This decomposition is important, for example, because the properties like incompressibility and vorticity can be studied directly by studying these components.

The application areas of the HD include (but are not restricted to) electromagnetism, linear elasticity, fluid mechanic [3] , astrophysics [4] , geophysics [5] , computer vision and robotic [6] [7] [8] , image processesing [9] . The HDT also establishes that the Helmoltz decomposition components can be obtained in terms of a vector potential (the solenoidal) and a scalar potential (the irrotational), solution of certain Poisson equations with different kinds of boundary conditions, one of them being u s n = 0 , on Γ = Ω . These elliptic equations cannot be solved explicitly, so it is necessary to apply numerical methods to solve it. The most common mesh dependant methods are the finite element methods (FEM) [6] [10] [11] , Finite difference methods (FDM) [9] [12] , Galerkin Formulation Using Finite Differences [13] , Fourier and Wavelets Domains [14] [15] [16] . Among the meshsless methods, we can mention the Smoothed Particle Hydrodynamics (SPH) [17] [18] [19] and the Statistical Learning Using Matrix-Valued Kernels [20] [21] [22] .

The problem we are considering in this work is the numerical decomposition, in a given domain Ω , of a vector field u into its solenoidal and irrotational components with the more general boundary condition: u s n = 0 is satisfied only in Γ N , a section of Γ where the solenoidal vector field is tangential to the boundary. This kind of boundary conditions appears, for example when we want to adjust vector fields from experimental or incomplete data. Let u be given and defined in the Lipschitz bounded domain Ω , with boundary Γ = Γ N Γ D . We want to solve numerically the following model:

u = u s + u p , in Ω , (2)

u s = 0, in Ω , (3)

u p = p in Ω , (4)

u s n = 0, on Γ N , (5)

where p is a scalar potential, n is the unitary outer vector, normal to the boundary Γ and Γ D = Γ Γ N .

We apply a methodology based on the solution of saddle point problems to find simultaneously the pair ( u s , p ) (and consequently u p = u u s ) by using an optimal preconditioned conjugate gradient algorithm combined with a mixed finite element method to solve elliptic problems. The associated stiffness matrix components are aproximated by a trapesoidal rule that produce a diagonal matrix so that the solution of the stiffness system is easy. This property together with the use of an optimal preconditioned resulted in a very fast algorithm.

The structure of this article is as follows: In Section 2, we consider the mathematical formulation of the problem and we describe the classical elliptic problems for scalar potentials allowing the decomposition. In Section 3, we describe the variational version of the problem. After reformulating the problem, we describe a preconditioned conjugate gradient (PCG-algorithm), where a mixed finite element method is used to solve the elliptic subproblems at each iteration. In Section 4, we present and discuss the numerical results, and finally, in Section 5, we give some concluding remarks.

2. Mathematical Formulation of the Helmholtz Decomposition

The Helmholtz decomposition theorem [2] , establishes that if Ω d ( d 2 ) is a bounded Lipschitz domain with boundary Γ , then, each u L 2 ( Ω ) have a unique Helmholtz decomposition

u = u s + u p , (6)

if we know that the solenoidal component satisfies u s n = 0 in Γ , i.e. u s H d i v ( Ω ) and u p G ( Ω ) , where

H d i v ( Ω ) = { w H ( d i v ; Ω ) : w = 0 & w n = 0 in Γ } , (7)

H ( d i v ; Ω ) = { v L 2 ( Ω ) : v L 2 ( Ω ) } (8)

and

G ( Ω ) = { v L 2 ( Ω ) : p L 2 ( Ω ) such that v = p } . (9)

Spaces H d i v ( Ω ) and G ( Ω ) are orthogonal in L 2 ( Ω ) .

If u H ( d i v ; Ω ) and the boundary condition u s n = 0 in Γ is given, the irrotational vector field u p = p can be calculated by obtaining the scalar field p ( x ) H 1 ( Ω ) / , as solution of the Poisson problem with Neumann boundary condition

Δ p = u , in Ω , p n = u n , on Γ , (10)

where H 1 ( Ω ) / = { v H 1 ( Ω ) : Ω v ( x ) d x = 0 } .

If we first solve the elliptic problem (10) to find p ( x ) then we calculate u p = p and finally we calculate u s = u u p .

In order to describe our methodology for finding the Helmholtz decomposition, we consider a given vector field u H ( d i v ; Ω ) satisfying (2)-(5). From (2), we have

u u s = u p ,

or

u u s = p , for some p L 2 ( Ω ) ,

From this,

Ω ( u u s ) v d x = Ω p v d x , v H ( d i v ; Ω ) .

Since

Ω λ v d x = Γ λ v n d γ Ω λ v d x , v H ( d i v ; Ω ) , λ L 2 ( Ω ) ,

we can write (if p = 0 in Γ D and v n = 0 on Γ N )

Ω ( u u s ) v d x = Ω p v d x , v V N ,

where V N is the space of vector fields defined as

V N = { v H ( d i v ; Ω ) : v n = 0 on Γ N } . (11)

Considering condition (3) we conclude that the pair ( u s , p ) V N × L 2 ( Ω ) , satisfies

{ Ω ( u u s ) v d x = Ω p v d x , v V N , Ω q u s d x = 0, q L 2 ( Ω ) . (12)

Next section is devoted to find the pair ( u s , p ) V N × L 2 ( Ω ) , satisfying (12).

3. A Preconditioned Conjugate Gradient Algorithm

Following [23] , assume that ( u s , p ) is solution of problem (12) with

u u s = u p . (13)

Considering that u s = 0 , it follows that u p = u , so we have that p satisfies the following operational equation

A p = u , (14)

where A : L 2 ( Ω ) L 2 ( Ω ) is the operator defined by

A μ = u μ , (15)

with u μ the solution of

{ u μ H ( d i v ; Ω ) , Ω u μ v d x = Ω μ v d x , v V N . (16)

Note that subscript s in (13) have not the same meaning as p and μ in (16). The properties of operator A (linear, self-adjoint and strongly elliptic, [23] ), allow us to solve equation (14) by using a conjugate gradient algorithm operating in L 2 ( Ω ) . Also, we can use the optimal preconditioner B 1 : L 2 ( Ω ) L 2 ( Ω ) defined by

B q = ϕ q , (17)

where ϕ q solves the problem

Ω ϕ q ψ d x = Ω q ψ d x , ψ H D 1 ( Ω ) , (18)

ϕ q = 0 on Γ D , (19)

ϕ q n = 0 on Γ N , (20)

with

H D 1 ( Ω ) = { ψ H 1 ( Ω ) : ψ = 0 on Γ D } . (21)

Next we enumerate the three stages of the preconditioned conjugate gradient algorithm to solve the equation A p = b :

1) Initialization: p 0 given, g 0 = A p 0 b , g ^ 0 = B g 0 , d 0 = g ^ 0 .

2) Descent: For m 0 , assuming we know p m , g m , g ^ m , d m , find p m + 1 , g m + 1 , g ^ m + 1 , d m + 1 by

p m + 1 = p m + α m d m where α m = g m , g ^ m / d m , A d m .

g m + 1 = g m + α m A d m ,

g ^ m + 1 = g ^ m + α m B ( A d m ) .

3) Test of convergence and new conjugate direction:

If g m + 1 , g ^ m + 1 ε g 0 , g ^ 0 , take p = p m + 1 and stop.

Else d m + 1 = g ^ m + 1 + β m d m with β m = g m + 1 , g ^ m + 1 g m , g ^ m

Do m = m + 1 and return to 2.

Using Equations (15)-(16), which define operator A, and Equations (17)-(18) which define operator B, the detailed preconditioned conjugate gradient algorithm (PCG) to obtain p and u s (and u p ) is as follows:

Initialization

1) Given p 0 L 2 ( Ω ) , solve

{ u p 0 H ( d i v ; Ω ) , Ω ( u p 0 ) v d x = Ω p 0 v d x , v V N .

2) Let g 0 = u 0 , where u 0 = ( u p 0 u ) .

3) Solve

{ ϕ 0 H D 1 ( Ω ) , Ω ( ϕ 0 ) ψ d x = Ω g 0 ψ d x , ψ H D 1 ( Ω ) .

4) Let g ^ 0 = ϕ 0 , d 0 = g ^ 0 .

Descent

For m 0 , assuming p m , g m , g ^ m , d m , u m are known, compute p m + 1 , g m + 1 , g ^ m + 1 , d m + 1 and u m + 1 , using the following steps:

5) Solve

{ u m H ( d i v ; Ω ) , Ω ( u m ) v d x = Ω d m v d x , v V N .

6) Let g ¯ m = u m .

7) Let α m = Ω g m g ^ m d x / Ω g ¯ m d m d x .

8) Solve

{ ϕ ¯ m H D 1 ( Ω ) , Ω ( ϕ ¯ m ) ψ d x = Ω g ¯ m ψ d x , ψ H D 1 ( Ω ) .

9) Set

p m + 1 = p m + α m d m ,

u m + 1 = u m α m u m ,

g m + 1 = g m + α m g ¯ m ,

g ^ m + 1 = g ^ m + α m ϕ ¯ m .

Test of convergence and new descent direction

If Ω g m + 1 g ^ m + 1 d x / Ω g 0 g ^ 0 d x < ε , then do p = p m + 1 , u s = u m + 1 and stop. Otherwise, do the following:

10) Compute β m = Ω g m + 1 g ^ m + 1 d x / Ω g m g ^ m d x

11) Set d m + 1 = g ^ m + 1 + β m d m .

12) Do m = m + 1 and return to 5.

Note that in this algorithm, u s and p are computed simultaneously.

To approximate the functions belonging to the spaces V N and L 2 ( Ω ) , we make use of the Bercovier-Pironneau finite element approximation using two triangulation of Ω , the coarse mesh T 2 h and the fine mesh T h obtained from the coarse triangulation through a regular subdivision of each triangle T T 2 h , as shown in Figure 1.

The vector-valued functions such as u s are approximated in the fine mesh and the scalar functions, such as p are approximated in the coarse mesh. Since u s is obtained on the fine mesh, its resolution is the same as that obtained when solving the elliptics problems (10) in T h .

To measure the global difference between the exact solenoidal field u s and the computed solenoidal field u s h we take the relative error

e s r = u s u s h 2 u s 2 . (22)

Also, we computed the L 2 -norm of the divergence of u s h , u s h L 2 ( Ω ) , which we denote by ndiv in the next section.

4. Numerical Results

To show the performance of the PCG-algorithm we chose two synthetic vector fields. In Example 1 we consider a vector field satisfying the boundary condition

u s n = 0 , on Γ . (23)

In Example 2 we consider a vector field satisfying the boundary condition

u s n = 0, (24)

but only in Γ N , a section of Γ .

Figure 1. Element in T 2 h : triangle ABC. Elements in T h : triangles AQP, PRC, PQR and QBR.

All numerical calculations were done in a Toshiba PC: Portege R705, Windows 7, 64 Bits, Intel Processor CORE i3, 2.27 GHz, 3 GB Ram.

Example 1. We consider the 2D vector field

u ( x , y ) = u s ( x , y ) + u c ( x , y ) , Ω = ( 1,1 ) × ( 1,1 ) , (25)

for which the solenoidal and irrotational components are

u s ( x , y ) = ( sin ( π x ) cos ( π y ) , cos ( π x ) sin ( π y ) ) , (26)

u c ( x , y ) = ( π cos ( π ( x + y ) ) , π cos ( π ( x + y ) ) ) = ( sin ( π ( x + y ) ) ) . (27)

In this case,

u s n = 0 in Γ N = Γ . (28)

Consequently, Γ D = . To solve the elliptic problems in the PCG algorithm we use simultaneously a coarse triangular mesh T 2 h (blue in Figure 2) to approximate the scalar potential p and a fine triangular mesh T 2 h (red in Figure 2) to approximate the solenoidal component.

In Figure 3, we show the exact vector fields u ( x , y ) , u s ( x , y ) and u c ( x , y ) .

We want to see how well we can approximate the solenoidal component and the scalar potential p applying the PCG algorithm. A summary of the numerical results is shown in Table 1, where we show the relative error e s r of the solenoidal component, the L 2 -norm of the divergence ndiv of the solenoidal component, as well as the number of iterations to get convergence, up to the given tolerance ( ε = 10 4 ), for several mesh sizes.

Figure 2. An example of a 5 × 5 coarse mesh and a 9 × 9 refined mesh. The scalar potential p is approximated in the coarse mesh T 2 h (blue). The solenoidal component u s is approximated in the fine mesh T h (red). On each blue triangle there are four red triangles.

Figure 3. Exact vector fields for Example 1. Left: u . Middle: solenoidal component u s . Right: irrotational component u c .

Table 1. Numerical results for Example 1. ε = 10 4 .

In Figure 4, we show the stream lines for the exact (left) and aproximated (right) solenoidal vector fields. In Figure 5, we show the exact (left) and approximated (right) p.

It is important to mention that the error bounds in Table 1 were obtained using in the stop criterion of the conjugate gradient algorithm the relaxed value ε = 10 4 and the results can be improved if we use a more restrictive ε , as is shown in the next example.

Example 2. Here we consider the 2D vector field u ( x , y ) = ( x ,0 )

u ( x , y ) = u s ( x , y ) + u c ( x , y ) = ( x ,0 ) , Ω = ( 1,2 ) × ( 0,1 ) , (29)

for which the solenoidal and irrotational components are

u s ( x , y ) = ( x , y ) , (30)

u c ( x , y ) = ( 0, y ) = p ( x , y ) = ( y 2 / 2 + c ) , c any constant . (31)

In this example,

u s n = 0 on Γ N = { ( x , y ) Ω : y = 0 } , (32)

so that, Γ D is the top and vertical boundary of Ω . Our formulation implies that p = 0 in Γ D , but this is only possible in the top part of Γ D , and we do not want (and we are not able) to impose additional boundary conditions in p, so we impose exact boundary conditions in u s in the vertical boundary. Table 2 shows the numerical results obtained for this test problem.

For comparison reasons we have repeated the calculations in example 2 but using a more restrictive stop tolerance of ε = 10 12 for the conjugate gradient

Figure 4. Stream lines for the exact (left) and aproximated (right) solenoidal vector fields for Example 1, in a velocity mesh of 65 × 65 (a coarse mesh of 33 × 33).

Figure 5. Exact (left) and approximated (right) p for Example 1, in a coarse mesh of 33 × 33 (a velocity mesh of 65 × 65).

Table 2. Numerical results for Example 2. ε = 10 4 .

method with and without preconditioning. We also solved a problem equivalent to (10) but with exact (not diagonal) stiffness matrix. A summary of the numerical results with the three algorithms is shown in Table 3, where we show the relative solenoidal error e r , average of divergence mdiv, as well as the number of iterations to get convergence, up to the given tolerance ( ε = 10 12 , in the CG

Table 3. Numerical results for Example 3. ε = 10 12 .

and PCG algorithms) for different mesh sizes. This table also contains the CPU time (sec) spent in each numerical experiment, and, in particular, in the last column the CPU time spent by solving the elliptic problem equivalent to (10). For this elliptic problem the results for e r and mdiv were not as good as those of the CG algorithms.

It is clear that the PCG-algorithm performs much better than the other algorithms. Another nice feature of the performance of the PCG-algorithm in this example is that the number of iterations is independent of the mesh size (7 iterations in each case). Also, the relative error between the computed and the exact solenoidal vector field is of the same order for the CG and PCG algorithms, with the largest difference occurring on the top boundary. For this example, we observe a loss of accuracy on the mean divergence when the PCG-algorithm is employed. Anyway, the mean divergence obtained with the PCG-algorithm is still very accurate, from a practical point of view, since we are using polynomial of degree 1 to approximate the unknowns.

5. Conclusions

We have applied an optimal preconditioner for the conjugate gradient algorithm, to solve the operator equation associated with the saddle-point formulation of the Helmholtz decomposition problem. Numerical results show that the new preconditioned conjugate gradient algorithm, and its stable approximation by a mixed finite element discretization, preserve the good properties of the non-preconditioned conjugate gradient algorithm, but it is much faster, and produces much better results than the methods based on the elliptic problem (10). Some additional nice properties of this algorithm are:

● It enforces very accurately mass conservation in the computed vector fields, considering that the approximation is second order.

● The number of iterations is reduced from several hundreds to less than 7 in the examples considered in this article. Also, the number of iterations of the PCG-algorithm is almost independent with respect to mesh refinement, while the number of iterations in the non-preconditioned algorithm doubles at each mesh refinement in most cases. Therefore, there is a substantial reduction in the computational time in both examples. However, this behavior must be corroborated in 3-D problems with adaptive meshes in complex domains, and with millions of degrees of freedom, in order to have a better idea of the performance of the method with realistic scenarios.

● It is not necessary to impose boundary conditions on the multiplier p, as it is done with the elliptic approaches. Furthermore, post-processing the scalar potential to find the vectorial field from the multiplier is not required, since the multiplier and the solenoidal vector field are found simultaneously by the algorithm.

The application of the methodology presented here to the more realistic three-dimensional case is an extension of the present work.

Acknowledgements

Sincere thanks to the members of JAMP for their professional attitude of high quality.

Conflicts of Interest

The author declares no conflicts of interest regarding the publication of this paper.

References

[1] Agashe, S. (2021) New Formulas and Results for 3-Dimensional Vector Fields. Applied Mathematics, 12, 1058-1096.
https://doi.org/10.4236/am.2021.1211069
[2] Bhatia, H., Norgard, G., Pascucci, V. and Bremer, P. (2012) The Helmholtz-Hodge Decomposition—A Survey. IEEE Transactions on Visualization and Computer Graphics, 19, 1386-1404.
https://doi.org/10.1109/TVCG.2012.316
[3] Ahusborde, E., Azaez, M., Caltagirone, J.P., Gerritsma, M. and Lemoine, A. (2014) Discrete Hodge Helmholtz Decomposition. Monografas Matemáticas Garca de Galdeano, 39, 1-10.
[4] Mansour, N.N., Kosovichev, A., Georgobiani, D., Wray, A. and Miesch, M. (2004) Turbulence Convection and Oscillations in the Sun. Proceedings of the SOHO14/GONG Workshop, New Haven, 12-16 July 2004, 164-171.
[5] Akram, M. and Michel, V. (2010) Regularisation of the Helmholtz Decomposition and its Application to Geomagnetic Field Modelling. GEM—International Journal on Geomathematics, 1, 101-120.
https://doi.org/10.1007/s13137-010-0001-y
[6] Guo, Q., Mandal, M.K., Liu, G. and Kavanagh, K.M. (2006) Cardiac Video Analysis Using Hodge-Helmholtz Field Decomposition. Computers in Biology and Medicine, 36, 1-20.
https://doi.org/10.1016/j.compbiomed.2004.06.011
[7] Gao, H., Mandal, M., Guo, G. and Wan, J. (2010) Singular Point Detection Using Discrete Hodge Helmholtz Decomposition in Fingerprint Images. 2010 IEEE International Conference on Acoustics, Speech and Signal Processing, Dallas, 14-19 March 2010, 1094-1097.
https://doi.org/10.1109/ICASSP.2010.5495348
[8] Guo, Q., Mandal, M.K. and Li, M.Y. (2005) Efficient Hodge-Helmholtz Decomposition of Motion Fields. Pattern Recognition Letters, 26, 493-501.
https://doi.org/10.1016/j.patrec.2004.08.008
[9] Hinkle, J., Fletcher, P.T., Wang, B., Salter, B. and Joshi, S. (2009) 4D MAP Image Reconstruction Incorporating Organ Motion. In: Prince, J.L., Pham, D.L. and Myers, K.J., Eds., Information Processing in Medical Imaging, Springer, Heidelberg, 676-687.
https://doi.org/10.1007/978-3-642-02498-6_56
[10] Polthier, K. and Preu, E. (2003) Identifying Vector Fields Singularities Using a Discrete Hodge Decomposition. In: Hege, H.C. and Polthier, K., Eds., Visualization and Mathematics III, Springer, Heidelberg, 113-134.
https://doi.org/10.1007/978-3-662-05105-4_6
[11] Tong, Y., Lombeyda, S., Hirani, A. and Desbrun, M. (2003) Discrete Multiscale Vector Field Decomposition. ACM Transactions on Graphics, 22, 445-452.
https://doi.org/10.1145/882262.882290
[12] Foster, N. and Metaxas, D. (1997) Modeling the Motion of a Hot, Turbulent Gas. Proceedings of the 24th Annual Conference on Computer Graphics and Interactive Techniques, Los Angeles, 3-8 August 1997, 181-188.
https://doi.org/10.1145/258734.258838
[13] Ingber, M.S. and Kempka, S.N. (2001) A Galerkin Implementation of the Generalized Helmholtz Decomposition for Vorticity Formulations. Journal of Computational Physics, 169, 215-237.
https://doi.org/10.1006/jcph.2001.6724
[14] Deriaz, E. and Perrier, V. (2006) Divergence-Free and Curl-Free Wavelets in 2D and 3D: Application to Turbulent Flows. Journal of Turbulence, 7, 1-37.
https://doi.org/10.1080/14685240500260547
[15] Deriaz, E. and Perrier, V. (2008) Direct Numerical Simulation of Turbulence Using Divergence-Free Wavelets. Multiscale Modeling and Simulation, 7, 1101-1129.
https://doi.org/10.1137/070701017
[16] Deriaz, E. and Perrier, V. (2008) Orthogonal Helmholtz Decomposition in Arbitrary Dimension Using Divergence-Free and Curl-Free Wavelets. Applied and Computational Harmonic Analysis, 26, 249-269.
https://doi.org/10.1016/j.acha.2008.06.001
[17] Colin, F., Egli, R. and Lin, F. (2006) Computing a Null Divergence Velocity Field Using Smoothed Particle Hydrodynamics. Journal of Computational Physics, 217, 680-692.
https://doi.org/10.1016/j.jcp.2006.01.021
[18] Petronetto, F., Paiva, A., Lage, M., Tavares, G., Lopes, H. and Lewiner, T. (2010) Meshless Helmholtz-Hodge Decomposition. IEEE Transactions on Visualization and Computer Graphics, 16, 338-349.
https://doi.org/10.1109/TVCG.2009.61
[19] Stam, J. and Fiume, E. (1995) Depicting Fire and Other Gaseous Phenomena Using Diffusion Processes. Proceedings of the 22nd Annual Conference on Computer Graphics and Interactive Technique, Los Angeles, 6-11 August 1995, 129-136.
https://doi.org/10.1145/218380.218430
[20] Fuselier, E.J. (2006) Refined Error Estimates for Matrix-Valued Radial Basis Functions. Ph.D. Thesis, Texas A&M University, College Station.
[21] Macedo, I. and Castro, R. (2010) Learning Divergence-Free and Curl-Free Vector Fields with Matrix-Valued Kernels. Technical Report, Instituto de Matemática Pura e Aplicada, Rio de Janeiro, Brazil.
[22] Narcowich, F.J. and Ward, J.D. (1994) Generalized Hermite Interpolation via Matrix-Valued Conditionally Positive Definite Functions. Mathematics of Computation, 63, 661-687.
https://doi.org/10.1090/S0025-5718-1994-1254147-6
[23] López-López, J., Juárez, L.H. and Sandoval, M.L. (2016) Improving the Reconstruction of Vector Fields Using Mixed Finite Element Methods and Optimal Preconditioning. Numerical Methods for Partial Differential Equations, 32, 1137-1154.
https://doi.org/10.1002/num.22044

Copyright © 2024 by authors and Scientific Research Publishing Inc.

Creative Commons License

This work and the related PDF file are licensed under a Creative Commons Attribution 4.0 International License.