
    _-Ph[&                        d Z ddlZddlZddlmc mZ ddlm	Z	m
Z
 ej                            e          d         Zej                            e          d         Zej                            ed          Z G d dej        j                  Z G d dej        j                  Z G d	 d
ej        j                  Z G d dej        j                  Zd ZdS )z	Test fem.    N)femregular_triangle_mesh	mesh_datac                       e Zd ZdZd ZdS )TestDiameterzTesting for diameter.c           	      H   d}t          d          D ]}t          j        ddg|dgd|g||gg          }t          j        g dg dg          }t          j                            t          j        ||          t          j        |dz  |dz  z                        |dz  }dS )z.Test the longest edge for a two triangle mesh.      ?   r   r         r      r   r   N)rangenparraytestingassert_almost_equalr   diametersqrt)selfh_VEs        \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/gallery/tests/test_fem.pytest_diameterzTestDiameter.test_diameter   s    q 	 	AQQQQ A
  A J**3<1+=+=rwq!taQRd{?S?STTTAAA	 	    N)__name__
__module____qualname____doc__r    r   r   r   r      s)            r   r   c                       e Zd ZdZd ZdS )TestQuadraticzTesting for generate_quadratic.c                    t          j        ddgddgddgddgg          }t          j        g dg dg          }t          j        ddgddgddgddgddgddgddgddgddgg	          }t          j        g dg dg          }t          j        ||          \  }}t           j                            ||           t           j                            ||           dS )	zTest order 2.        r	   r   r   g      ?)r   r   r      r
      )r   r   r         r
   N)r   r   r   generate_quadraticr   r   )r   r   r   V2E2V2genE2gens          r   test_quadraticzTestQuadratic.test_quadratic%   s(   H"X"X"X"X 
 HYYYY  XBxBxBxBxRySzCyRyCy" # # X))))))+ , , -a33u

&&ub111

&&ub11111r   N)r   r    r!   r"   r1   r#   r   r   r%   r%   "   s)        ))2 2 2 2 2r   r%   c                       e Zd ZdZd ZdS )
TestL2NormzTest for L2-norm.

    Notes
    -----
        - testing formed with sympy
          from sympy import *
          x, y = symbols("x y")
    c                    t          j        t          j                            t
          d                    }|d         }|d         }t          j        ||          }|dddf         |dddf         }}t           j        	                    t          j
        t          j        |dz             |          dd           t           j        	                    t          j
        t          j        ||z  dz             |          dd           t          j
        t          j        |          t          j        |          z  |          }t           j        	                    |d	d           d}t          j        ddg|dgd|gg          }t          j        g d
g          }t          j        ||          }|                                 |j        |j        }
}	|	dddf         |	dddf         }}t           j        	                    t          j
        ||          dd           |d         }|d         }t          j        ||          }|                                 |j        |j        }
}	|	dddf         |	dddf         }}t          j
        t          j        |          t          j        |          z  |          }t           j        	                    |d	d           dS )zTest L2-norm.zsquare_mesh.npzverticeselementsNr   r   r   )decimalgHzG?r   g	h"lx?r(   )r   loadospathjoinmesh_dirr   Meshr   r   l2normr   sinr   r,   r-   r.   )r   datar   r   meshXYnorm1r   r-   r   s              r   test_l2normzTestL2Norm.test_l2normL   s   wrw||H.?@@AAx1~~Aw!!!Q$1 	
&&sz"'!A#,,'E'EqRS&TTT 	
&&sz"'!A#a%..$'G'GTU&VVV 
26!99RVAYY.55

&&udA&>>> HVVV  HYYK x1~~!!!A!!!Q$xAAAqD1

&&sz!T':':FA&NNN x1~~!!!A!!!Q$xAAAqD1
26!99RVAYY.55

&&udA&>>>>>r   N)r   r    r!   r"   rE   r#   r   r   r3   r3   B   s-         ,? ,? ,? ,? ,?r   r3   c                       e Zd ZdZd ZdS )TestGradGradFEMzTest (grad u, grad v) form.c                 H
   d}t          j        ddg|dgd|g||gg          }t          j        g dg dg          }t          j        ||          }t          j        |          \  }}t          j        g dg dg dg dg          }t           j                            |                                |           d}t          j        ddg|dgd	|z  dgd|g||gd	|z  |gdd	|z  g|d	|z  gd	|z  d	|z  gg	          }t          j        g d
g dg dg dg dg dg dg dg          }t          j        ||          }t          j        |          \  }}t          j        g dg dg dg dg dg dg dg dg dg	          }t           j                            |                                |           d }d }	d}
|dddf         |dddf         }}t          j        t          |          |
k               d         }t          j        t          |d	|z  z
            |
k               d         }t          j        t          |          |
k               d         }t          j        t          |d	|z  z
            |
k               d         }||	d||	d||	d||	dg}t          j        ||          }t          j        ||           \  }}t          j
        ||||          \  }}t          j        g d!g d"g d#g d$g d%g d&g d'g d(g d)g	          }t          j        g d*          }t           j                            |                                |           t           j                            ||           d+ }d, }	d- }d}
|dddf         |dddf         }}t          j        t          |          |
k               d         }t          j        t          |d	|z  z
            |
k               d         }t          j        t          |          |
k               d         }t          j        t          |d	|z  z
            |
k               d         }||	d||	d||d||	dg}t          j        ||          }t          j        ||           \  }}t          j
        ||||.          \  }}|                                }t          j        ||          }t           j                            ||         t          j        ||         j                             dS )/zTest fem assembly.r   r   r   )r   r   r   )r	         rI   r'   )rI   r	   r'   rI   )rI   r'   r	   rI   )r'   rI   rI   r	   r   )r   r   r   )r   r   r(   )r   r(   r   )r   r
   r(   )r   r(   r)   )r(   r
   r*   )r(   r*   r)   )r
   r+   r*   )	r	   rI   r'   rI   r'   r'   r'   r'   r'   )	rI          @rI   r'         r'   r'   r'   r'   )	r'   rI   r	   r'   r'   rI   r'   r'   r'   )	rI   r'   r'   rJ   rK   r'   rI   r'   r'   )	r'   rK   r'   rK         @rK   r'   rK   r'   )	r'   r'   rI   r'   rK   rJ   r'   r'   rI   )	r'   r'   r'   rI   r'   r'   r	   rI   r'   )	r'   r'   r'   r'   rK   r'   rI   rJ   rI   )	r'   r'   r'   r'   r'   rI   r'   rI   r	   c                     d| z  d|z  z   dz   S Nr   r	   r#   xys     r   fz+TestGradGradFEM.test_gradgradfem.<locals>.f       Q319s?"r   c                     d| z  d|z  z   dz   S Nr   r'   r#   rO   s     r   gz+TestGradGradFEM.test_gradgradfem.<locals>.g   rS   r   -q=NidrV   )rR   )	r	   r'   r'   r'   r'   r'   r'   r'   r'   )	r'   r	   r'   r'   r'   r'   r'   r'   r'   )	r'   r'   r	   r'   r'   r'   r'   r'   r'   )	r'   r'   r'   r	   r'   r'   r'   r'   r'   )	r'   r'   r'   r'   rL   r'   r'   r'   r'   )	r'   r'   r'   r'   r'   r	   r'   r'   r'   )	r'   r'   r'   r'   r'   r'   r	   r'   r'   )	r'   r'   r'   r'   r'   r'   r'   r	   r'   )	r'   r'   r'   r'   r'   r'   r'   r'   r	   )	r'   r'   r'   r'   r	   r'   r'   r'   r'   c                     d| z  d|z  z   dz   S rN   r#   rO   s     r   rR   z+TestGradGradFEM.test_gradgradfem.<locals>.f   rS   r   c                     d| z  d|z  z   dz   S rU   r#   rO   s     r   rV   z+TestGradGradFEM.test_gradgradfem.<locals>.g   rS   r   c                     d| z  d|z  z   dz   S rN   r#   rO   s     r   g1z,TestGradGradFEM.test_gradgradfem.<locals>.g1   rS   r   )bc)r   r   r   r=   gradgradformr   assert_array_almost_equaltoarraywhereabsapplybctocsrslaspsolveonesshape)r   r   r   r   rA   AbAArR   rV   tolrB   rC   id1id2id3id4r^   bbr]   us                        r   test_gradgradfemz TestGradGradFEM.test_gradgradfem~   s    HVVVV 
 HYYYY  x1~~%%1X////////////1 2 2
 	
,,QYY[["=== HQZQZcQZQZQZcQZ1Q3Z1Q3Zc1Q3Z	 	 HYYYYYYYYYYYYYYYY  x1~~%%1XMMMMMMMMMMMMMMMMMMMMMMMMMMMO P P 	
,,QYY[["===	# 	# 	#	# 	# 	# Aw!!!Q$1hs1vv|$$Q'hs1QqS5zzC'((+hs1vv|$$Q'hs1QqS5zzC'((+q!!q!!q!!q!!# x1~~***1{1ar**1X;;;;;;;;;;;;;;;;;;;;;;;;;;;= > > X:::;;

,,QYY[["===

,,Q333	# 	# 	#	# 	# 	#	# 	# 	# Aw!!!Q$1hs1vv|$$Q'hs1QqS5zzC'((+hs1vv|$$Q'hs1QqS5zzC'((+q!!q!!r""q!!# x1~~***1{1a"---1GGIIK1

,,QsVRWQsV\5J5JKKKKKr   N)r   r    r!   r"   rt   r#   r   r   rG   rG   {   s3        %%{L {L {L {L {Lr   rG   c                     t          dd          \  } }t          j        | |          }t          j        |          \  }}d }d }d }d }d}	| dddf         | ddd	f         }}
t	          j        t          |          |	k               d         }t	          j        t          |d	z
            |	k               d         }t	          j        t          |
          |	k               d         }t	          j        t          |
d	z
            |	k               d         }||d
||d
||d
||d
g}t          j        | |          }t          j        |||          \  }}t          j        ||||          \  }}|                                }t          j
        ||          } ||j        |j                  }t          j        ||z
  |          dk     sJ t	          j        ||z
                                            dk     sJ dS )a  Test sympy example.

    This test is generated from:
    from sympy import pi, symbols, diff, Matrix, sin, cos
    x, y = symbols("x,y")
    u = sin(2 * pi * x) * sin(2 * pi * y)
    K = Matrix([[1 + 2*x**2, x * y], [x * y, 2 + 3 * x**2 * y]])
    gradu = Matrix([[diff(u, x)], [diff(u, y)]])
    q = K * gradu
    f = -(diff(q[0], x) + diff(q[1], y))
    print(f)

    Output:
    -6*pi*x**2*sin(2*pi*x)*cos(2*pi*y)
    - 8*pi**2*x*y*cos(2*pi*x)*cos(2*pi*y)
    - 10*pi*x*sin(2*pi*y)*cos(2*pi*x)
    - 2*pi*y*sin(2*pi*x)*cos(2*pi*y)
    + 4*pi**2*(2*x**2 + 1)*sin(2*pi*x)*sin(2*pi*y)
    + 4*pi**2*(3*x**2*y + 2)*sin(2*pi*x)*sin(2*pi*y)
    (   c                    t           j        }t           j        }t           j        }d|z  | dz  z   |d|z  | z            z   |d|z  |z            z  d|dz  z  | z  |z   |d|z  | z            z   |d|z  |z            z  z
  d|z  | z   |d|z  |z            z   |d|z  | z            z  z
  d|z  |z   |d|z  | z            z   |d|z  |z            z  z
  d|dz  z  d| dz  z  dz   z   |d|z  | z            z   |d|z  |z            z  z   d|dz  z  d| dz  z  |z  dz   z   |d|z  | z            z   |d|z  |z            z  z   S )Nir   r+   
   r(   r   r   )r   pir?   cos)rP   rQ   ry   r?   rz   s        r   rR   ztest_gradgrad_kappa.<locals>.f  s   Uff"uQTz##ad1f++%cc!B$q&kk1Agaik##ad1f++%cc!B$q&kk12eAgcc!B$q&kk!##ad1f++-. d1fSS2a[[ QrT!V,- AgqAvz"33qtAv;;.ss1R46{{:	;
 AgqAvax!|$SS2a[[0QrT!V<= 	=r   c                     d| z  d|z  z   dz   S rU   r#   rO   s     r   rV   ztest_gradgrad_kappa.<locals>.g   s    sQqSy3r   c                 l    t          j        dd| dz  z  z   | |z  g| |z  dd| dz  z  |z  z   gg          S )Nr   r   r   )r   r   rO   s     r   kappaz"test_gradgrad_kappa.<locals>.kappa#  sF    x!a1f*a!e,q1ua!ad(Q,6F.GHIIIr   c                 x    t           j        }t           j        } |d|z  | z             |d|z  |z            z  S )Nr   )r   ry   r?   )rP   rQ   ry   r?   s       r   uexactz#test_gradgrad_kappa.<locals>.uexact&  s;    Ufs1r6A:QVaZ00r   rW   Nr   r   rX   )rR   r}   g{Gz?)r   r   r=   r_   r   rb   rc   rd   re   rf   rg   rB   rC   r>   max)r   r   rA   rj   rk   rR   rV   r}   r   rm   rB   rC   rn   ro   rp   rq   r^   rs   uexs                      r   test_gradgrad_kappar      s   * !R((DAq8Aq>>DD!!DAq	= 	= 	=  J J J1 1 1
 CQQQT7AaaadGqA
(3q66C<
 
 
#C
(3qs88c>
"
"1
%C
(3q66C<
 
 
#C
(3qs88c>
"
"1
%C1

1

1

1


B 8Aq>>DDAU333DAq;q!T2&&DAq			AAqA
&
 
 C:a#gt$$t++++6!c'??  4''''''r   )r"   r9   numpyr   scipy.sparse.linalgsparselinalgrf   pyamg.galleryr   r   r:   split__file__test_dirbase_dirr;   r<   r   TestCaser   r%   r3   rG   r   r#   r   r   <module>r      s    				     ! ! ! ! ! ! ! ! ! 4 4 4 4 4 4 4 47==""1%7==""1%7<<+..    2:&   ,2 2 2 2 2BJ' 2 2 2@6? 6? 6? 6? 6?$ 6? 6? 6?r~L ~L ~L ~L ~Lbj) ~L ~L ~LBB( B( B( B( B(r   