# Get the weak form help

**URL:** https://community.freefem.org/t/get-the-weak-form-help/2660
**Category:** General Discussion
**Created:** [August 17, 2023, 7:21pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660 "2023-08-17T19:21:19Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 17, 2023, 7:21pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/1 "2023-08-17T19:21:19Z")

</div>

Dear forum,  
Once again I ask for your kindness to guide me through a problem. In the figure attached (I didn’t find a better way to show the equations) there is a set of 4 equations that I am trying to solve, more precisely, the stability equations written in the cylindrical coordinates for an axisymmetric flow. As I don’t get the expected results I guess there is something wrong with my weak formulation or some transcript problem.

As a short nomenclature, what you see there with _u_ \_ _R,theta,Z_ represents the radial, azimuthal and axial coordinates of the eigenmodes/velocities. _h_ \_ _R,theta,Z_ are the test functions for the three directions and _q_ is the test function for mass continuity equation.

So here are my questions:

1. I highlighted with red some terms which are the subject of a reduction in the weak formulation, is this the correct way to bring them to the weak form when we refer to cylindrical coordinates?

2. Do I have to multiply all the terms by _R_, which in FreeFEM++ transcript become _x_?

Thank you in advance,

Robert

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/b/b79cbd96e22caa4198da0295421574df17279783.png)

---

<div class="post-metadata">

### Author: ![aszaboa](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/aszaboa/32/2918_2.png) [@aszaboa](https://community.freefem.org/u/aszaboa)
#### Post date: [August 18, 2023, 8:10am UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/2 "2023-08-18T08:10:50Z")

</div>

I think in the StabFem library, you might be able to find the solution:

> **[SOURCES\_FREEFEM · master · StabFem / StabFem · GitLab](https://gitlab.com/stabfem/StabFem/-/tree/master/SOURCES_FREEFEM?ref_type=heads)**
>
> GitLab.com

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 8:31am UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/3 "2023-08-18T08:31:45Z")

</div>

Your equations look fine from what I can tell. Yes, the integral in cylindrical coordinates introduces a factor of r due to the definition of the differential volume. Please feel free to follow up with any more questions!

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 18, 2023, 12:56pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/4 "2023-08-18T12:56:36Z")

</div>

Thank you @aszaboa for the answer, I am aware of StabFEM librari but unfortunately I didn’t find an example to help me in this case/or I didn’t understand all the script.

@cmd thank you, I added the “r” term which I missed from the _DV=rdxdr_. I attach the new variant of the equations, I am still not sure if this is the way to apply the Green/Gauss method to reduce the order of the laplacian highlighted with red and for the pressure gradient in cylindrical coordinate.

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/1/10e2b1fa0435598d820cea84040faaee91a6d92a.png)

Anyway, I wrote the following code:

```auto
load "UMFPACK64"
include "macro_ddm.idp"		
load "gmsh"					
load "iovtk"

mesh Th=gmshload("Test.msh");
// plot(Th, wait=true);

fespace XFES(Th, P1);
fespace XMFES(Th, P2);
fespace XXXXXFES(Th,[P1,P1,P1,P1]); 	

		XFES Axial, Radial, Tangential, Pressure;
		XXXXXFES[u,v,w,p];
		XXXXXFES<complex>[ue,ve,we,pe]; //Eigenmodes: uaxial, uradial, utheta
		XXXXXFES<complex>[hy,hx,hz,q]; //Test functions, axial, radial, tangential directions

		XFES EMur, EMui;
func E = [P1, P1, P1, P1];				

// u = Axial Velocity;
// v = Radial velocity;
// w = Tangential Velocity;
// p = Static Pressure;

{
ifstream file("Axial.txt");
file >> Axial[];
}
{
ifstream file("Radial.txt");
file >> Radial[];
}
{
ifstream file("Tangential.txt");
file >> Tangential[];
}
{
ifstream file("Pressure.txt");
file >> Pressure[];
}

// Combine the files above in one finite element space - XXXXXFES instead of using XFES for each of them
[u,v,w,p] = [Axial, Radial, Tangential, Pressure]; //Time and azimuthal averaged flow components
// plot(u, wait=true);
// plot(v, wait=true);
// plot(w, wait=true);

// plot(u, wait=true);
// plot(v, wait=true);
// plot(w, wait=true);
// plot(p, wait=true);

real Re = 500; // Reynolds number                       
int alpha = 1; // Wave number
real shiftr = 0; // Real part of the shift value
real shifti = 0.2; // Imaginary part of the shift value

complex shift = shiftr+shifti*1i; // Shift value (eigenvalue)     
real eps=1e-6; // Convergence criteria 
int nev=3; // Number of wanted eigenvalues
int ncv=10*nev; // Number of eigenvectors
						   
int[int] Order = [1,1];
string DataName = "DEMu DEMv ";

varf LNSE ([ue,ve,we,pe],[hy,hx,hz,q])								
=int2d(Th)
		  (
		  -(v*dx(ve)+ve*dx(v)+u*dy(ve)+ue*dy(v)-2*w*we/x+w*ve*1i*alpha/x)*hx*x
		  +pe*dx(hx)*x
		  +(1/Re)*((1/x)*dx(ve)-ve/(x^2)-2*we*1i*alpha/(x^2)-ve*(alpha^2)/(x^2))*hx*x
		  -(1/Re)*(dx(ve)*dx(hx)+dy(ve)*dy(hx))*x
		  -(v*dx(we)+ve*dx(w)+u*dy(we)+ue*dy(w)+v*we/x+ve*w/x+w*we*1i*alpha/x)*hz*x
		  -pe/x*1i*alpha*hz*x
		  +(1/Re)*((1/x)*dx(we)-we/(x^2)+2*ve*1i*alpha/(x^2)-we*(alpha^2)/(x^2))*hz*x
		  -(1/Re)*(dx(we)*dx(hz)+dy(we)*dy(hz))*x
		  -(v*dx(ue)+ve*dx(u)+u*dy(ue)+ue*dy(u)+w*ue*1i*alpha/x)*hy*x
		  +pe*dx(hy)*x
		  +(1/Re)*((1/x)*dx(ue)-ue*(alpha^2)/(x^2))*hy*x
		  -(1/Re)*(dx(ue)*dx(hy)+dy(ue)*dy(hy))*x
		  +(dx(ve)+we*1i*alpha/x+ve/x+dy(ue))*q*x
		  -shift*(ue*hy+ve*hx+we*hz)*x
		  	  		  )
 	  	  
		+on(7,12,11, ue=0., ve=0., we=0.) //7, 12, 11 -- inlet and walls
		+on(10, ue=0.); //symmetry axis, pressure needed?? pe=0.
			
varf b([ue,ve,we,pe],[hy,hx,hz,q])
=int2d(Th)((ue*hy+ve*hx+we*hz)*x);

matrix<complex> OP = LNSE(XXXXXFES,XXXXXFES, solver=sparsesolver);
matrix<complex> B = b(XXXXXFES,XXXXXFES, solver=CG);
complex[int] EigenVal(nev); 		
XXXXXFES<complex>[int] [EigenVecu,EigenVecv,EigenVecw,EigenVecp](nev);

int k;
int i;
k = EigenValue(OP,B,sigma=shift,value=EigenVal,nev=nev,vector=EigenVecu,ncv=ncv,tol=eps);
//PLOTS//
for (i=0; i<nev; i++)
{
 EMur=real(EigenVecu[i]); //Real part of the streamwise component direct eigenmode
 EMui=imag(EigenVecu[i]); //Imaginary part of the streamwise component direct eigenmode
savevtk("EigenModes"+i+".vtu", Th, [EMur,EMui], dataname = DataName, order = Order);
}

```

I also attach the mesh, pressure and velocity files. As you can see the real part of the direct eigenmodes (x component of EMur if you open it in paraview) is quite strange/blurry and I was expecting to get something like in the following picture:  
 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/c/c2214bcb395d352f4806110d33825a771a4eb009.png)

Could you tell me if there is a typo error in the code or just a mathematical issue? As for the boundary conditions I should impose the following:  
 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/1/130bbad8d68f2925473d4f91f0629212ebf11ec5.png)  
where _cZ_ and _p_ are the _ue_ and _pe_ terms in my code.

Thank you again,

Regards,  
Robert

[Test.rar](https://community.freefem.org/uploads/short-url/kZ1YWwF7MhUtcciyfhNgPzlAsBR.rar) (2.2 MB)

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 1:13pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/5 "2023-08-18T13:13:26Z")

</div>

One thing I can definitely tell you off the bat is that your mixed finite element space is not inf-sup stable. You have to use an inf-sup stable FEspace – something like Taylor–Hood (`[P2,P2,P2,P1]`) or MINI (`[P1b,P1b,P1b,P1]`) elements. You may also have to algebraically simplify your weak form (i.e. enforce that `x*(1/x)=1`) so that you dont divide everything by zero along the coordinate axis.

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 1:17pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/6 "2023-08-18T13:17:45Z")

</div>

Also, it does not look like you integrated the viscous term by parts correctly. Note that you are integrating by parts using vectorial test and trial functions – you cannot treat the x, r, and theta momentum equations separately when integrating by parts.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 18, 2023, 2:40pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/7 "2023-08-18T14:40:58Z")

</div>

Thank you, I changed to P2 elements type and enforced the term x\*(1/x)=1, huge differences indeed. As with the mathematical part, I surely miss something. Do you refer to the viscous terms of second order partial derivative, highlighted in red?

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/6/6e88dbe8a243c79a1a76a89fa63b968e91c7b92c.png)  
Regards,  
Robert

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 2:59pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/8 "2023-08-18T14:59:28Z")

</div>

Not just the parts highlighted in red – the entire viscous term. For example, see slide 9 [here](https://www.ljll.math.upmc.fr/~frey/cours/UPMC/NM491/P.%20Frey,%20chap3.pdf). Note that in your case, the gradient and divergence operators must be the correct ones for a cylindrical coordinate system.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 18, 2023, 4:22pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/9 "2023-08-18T16:22:25Z")

</div>

Thank you, Chris for your patience. So I took separately only the viscous term and this is what I’ve got.

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/d/d80714e927e3f8f9a73fbc37be417aa711cbc395.png)  
I guess there is still something misunderstood in the equations or a typo in the code

Regards,  
Robert

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 4:41pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/10 "2023-08-18T16:41:02Z")

</div>

I think the main issue is that you are still integrating by parts incorrectly. You have to integrate the VECTOR Laplacian by parts. What you are doing doesn’t make sense since you are treating the viscous term as three separate instances of a scalar Laplacian.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 18, 2023, 5:51pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/11 "2023-08-18T17:51:51Z")

</div>

Wouldn’t that be simply  
 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/8/8f0d1ef56b38d5040a4fb6aedcac4b34cdb7f5a3.png)  
where the term involving the partial derivative in respect to azimuthal direction is null?

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 18, 2023, 6:03pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/12 "2023-08-18T18:03:35Z")

</div>

No, you are integrating a vector-valued function by parts with respect to a vector-valued test function.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 18, 2023, 6:17pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/13 "2023-08-18T18:17:15Z")

</div>

Thank you for your guidance, but I still miss something to get the correct weak formulation. Is it possible to show me the solution?

Regards,  
Robert

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 19, 2023, 9:38am UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/14 "2023-08-19T09:38:21Z")

</div>

Here is one way to write it for the axisymnmetric case. Here, x and y are along the axial and radial directions, respectively. [vax,vra,vth] is the velocity test function and [uax, ura, uth] is the velocity trial function.

```auto
1/Re*(y*(dx(vax)*dx(uax) + dy(vax)*dy(uax) + dx(vra)*dx(ura) + dy(vra)*dy(ura) + dx(vth)*dx(uth) + dy(vth)*dy(uth)) + (vth*uth + vra*ura)/y)

```

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 19, 2023, 2:07pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/15 "2023-08-19T14:07:47Z")

</div>

Thank you for your time!

So, basically the problem is the following:

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/0/0d05f431ebd4d08e5bcbf9f3972879e599a0be49.png)

And I wrote the following script:

```auto
load "UMFPACK64"
include "macro_ddm.idp"		
load "gmsh"					
load "iovtk"

mesh Th=gmshload("Test.msh");
// plot(Th, wait=true);

fespace XFES(Th, P1);
fespace XMFES(Th, P2);
fespace XXXXXFES(Th,[P2,P2,P2,P1]); 	

		XFES Axial, Radial, Tangential, Pressure;
		XXXXXFES[u,v,w,p];
		XXXXXFES<complex>[ue,ve,we,pe]; //Eigenmodes: uaxial, uradial, utheta
		XXXXXFES<complex>[hy,hx,hz,q]; //Test functions, axial, radial, tangential directions

		XFES EMur, EMui;
func E = [P2, P2, P2, P1];				

// u = Axial Velocity;
// v = Radial velocity;
// w = Tangential Velocity;
// p = Static Pressure;

{
ifstream file("Axial.txt");
file >> Axial[];
}
{
ifstream file("Radial.txt");
file >> Radial[];
}
{
ifstream file("Tangential.txt");
file >> Tangential[];
}
{
ifstream file("Pressure.txt");
file >> Pressure[];
}

// Combine the files above in one finite element space - XXXXXFES instead of using XFES for each of them
[u,v,w,p] = [Axial, Radial, Tangential, Pressure]; //Time and azimuthal averaged flow components
// plot(u, wait=true);
// plot(v, wait=true);
// plot(w, wait=true);

// plot(u, wait=true);
// plot(v, wait=true);
// plot(w, wait=true);
// plot(p, wait=true);

real Re = 500; // Reynolds number                       
int alpha = 1; // Wave number
real shiftr = 0; // Real part of the shift value
real shifti = 0.2; // Imaginary part of the shift value

complex shift = shiftr+shifti*1i; // Shift value (eigenvalue)     
real eps=1e-6; // Convergence criteria 
int nev=3; // Number of wanted eigenvalues
int ncv=10*nev; // Number of eigenvectors
						   
int[int] Order = [1,1];
string DataName = "DEMu DEMv ";

varf LNSE ([ue,ve,we,pe],[hy,hx,hz,q])								
=int2d(Th)
		  (
		  -((v*dx(ve)+ve*dx(v)+u*dy(ve)+ue*dy(v))*hx*x+(w*ve*1i*alpha-2*w*we)*hx)
		  -((v*dx(we)+ve*dx(w)+u*dy(we)+ue*dy(w))*hz*x+(v*we+ve*w+w*we*1i*alpha)*hz)
		  -((v*dx(ue)+ve*dx(u)+u*dy(ue)+ue*dy(u))*hy*x+(w*ue*1i*alpha)*hy)
		  +pe*dx(hx)*x+pe*dx(hy)*x-pe/x*1i*alpha*hz*x
		  -(1/Re)*(x*(dx(ve)*dx(hx)+dy(ve)*dy(hx)+dx(we)*dx(hz)+dy(we)*dy(hz)+dx(ue)*dx(hy)+dy(ue)*dy(hy)))
		  -(1/Re)*(we*hz+ve*hx)/x 
		  -shift*(ue*hy+ve*hx+we*hz)*x
		  )  	  
		+on(7,12,11, ue=0., ve=0., we=0.) //7, 12, 11 -- inlet and walls
		+on(10, ue=0., pe=0.); //symmetry axis, pressure needed?? pe=0.
			
varf b([ue,ve,we,pe],[hy,hx,hz,q])
=int2d(Th)((ue*hy+ve*hx+we*hz)*x);

matrix<complex> OP = LNSE(XXXXXFES,XXXXXFES, solver=sparsesolver);
matrix<complex> B = b(XXXXXFES,XXXXXFES, solver=CG);
complex[int] EigenVal(nev); 		
XXXXXFES<complex>[int] [EigenVecu,EigenVecv,EigenVecw,EigenVecp](nev);

int k;
int i;
k = EigenValue(OP,B,sigma=shift,value=EigenVal,nev=nev,vector=EigenVecu,ncv=ncv,tol=eps);
//PLOTS//
for (i=0; i<nev; i++)
{
 EMur=real(EigenVecu[i]); //Real part of the streamwise component direct eigenmode
 EMui=imag(EigenVecu[i]); //Imaginary part of the streamwise component direct eigenmode
savevtk("EigenModes"+i+".vtu", Th, [EMur,EMui], dataname = DataName, order = Order);
}

```

And I get the following error:

 ![image](https://canada1.discourse-cdn.com/flex030/uploads/freefem/original/2X/7/742b0a632a74afa9644ae31a798e643f166c4311.png)

I also attach the files that I used. Is it possible to tell me where the error might come from?

Regards,  
Robert  
[Test.rar](https://community.freefem.org/uploads/short-url/3NLSQhk4iCnPFn4Ia8yuXmXVplO.rar) (488.5 KB)

---

<div class="post-metadata">

### Author: ![marchywka](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@marchywka](https://community.freefem.org/u/marchywka)
#### Post date: [August 19, 2023, 2:55pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/16 "2023-08-19T14:55:32Z")

</div>

Did you put the edp in the rar file? The copy from screen seems to drop asterisks  
and make other problems on my Chrome.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 19, 2023, 3:02pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/17 "2023-08-19T15:02:49Z")

</div>

Hello,

No, I attach a new .rar with the .edp file too

Regards,  
Robert  
[Test.rar](https://community.freefem.org/uploads/short-url/3NLSQhk4iCnPFn4Ia8yuXmXVplO.rar) (488.5 KB)

---

<div class="post-metadata">

### Author: ![cmd](https://yyz2.discourse-cdn.com/flex030/user_avatar/community.freefem.org/cmd/32/67_2.png) [@cmd](https://community.freefem.org/u/cmd)
#### Post date: [August 19, 2023, 9:44pm UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/18 "2023-08-19T21:44:39Z")

</div>

I wonder if there is an issue with your varf and the singularity at r=0. Try replacing the `1/y` with `1/(y+(y==0))`.

Note that one could probably find a better way to avoid dividing by zero.

---

<div class="post-metadata">

### Author: ![Robert](https://avatars.discourse-cdn.com/v4/letter/r/e95f7d/32.png) [@Robert](https://community.freefem.org/u/Robert)
#### Post date: [August 22, 2023, 8:36am UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/19 "2023-08-22T08:36:23Z")

</div>

Thank you very much, Chris. It seems that did the trick, it is working now. The results are however different than what I expected, I will keep looking to the equations/boundary conditions/perform some mesh sensitivity analysis to find the problem.

Regards,  
Robert

---

<div class="post-metadata">

### Author: ![marchywka](https://avatars.discourse-cdn.com/v4/letter/m/ee59a6/32.png) [@marchywka](https://community.freefem.org/u/marchywka)
#### Post date: [August 22, 2023, 10:49am UTC](https://community.freefem.org/t/get-the-weak-form-help/2660/20 "2023-08-22T10:49:27Z")

</div>

What results did you expect "? Do you have a paper to cite?  
AFAICT that change was just intended to determine if the divide by  
zero was causing the immediate problem. It may require some reformulation  
to get a useful result. On a quick look of the literature this seems  
to be a bit of an open topic. Apparently there are some frequency  
domain approaches. These may help with some singularities  
but are still difficult with non-linear terms.

[Next page](https://community.freefem.org/t/get-the-weak-form-help/2660.md?page=2)
