
    _-Ph                     f    d Z ddlZddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZ  G d de          ZdS )	zTest classical AMG.    N)TestCaseassert_array_almost_equal)
bsr_matrixdiags)
air_solver)poissonc                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestAIRc           	         g }|                     d           |                     d           |D ]>}t          t          j        |f          dt          j        |dz
  f          z  gddg                                          }dddddf}t          ||d	          }g }t          j                            |j        d                   }|t          j                            |j        d                   z  }|	                    ||dd
|          }	~	|d         d
k     sJ |
                                 t          j        g d          }
d|
z  }t          j        |
|f          }t          j        t          j        ||dz
            |
f                              d|z  dz
  ddf          }|j        }|j        }t#          |||fddg          }dddddf}t          ||d	          }g }t          j                            |j        d                   }|t          j                            |j        d                   z  }|	                    ||dd
|          }	~	|d         d
k     sJ @d S )Nd   i     r   	fc_jacobi)
iterationsf_iterationsc_iterations   )postsmoother
max_levels-q=x0maxitertol	residuals)r   r   r   r   )	blocksizefc_block_jacobi)appendr   nponestocsrr   randomrandshapesolvesort_indicesarrayconcatenatetilereshapeindptrindicesr   )selfsizesnAf_relaxmlresxbx_solb1b2bbdatarowptrcolindsAbxbs                     ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyamg/classical/tests/test_air.pytest_upwind_advectionzTestAIR.test_upwind_advection   sh   SS  	$  	$Arwt}}b!A#&89Ar7CCIIKKA"1a'(%* %* +GAGBBBBC	qwqz**A")..,,,AHHQ1aUcHJJEFUNNNN NN---((BBBR))B>272qs#3#3R"899AA1Q3q5!Q-PPDXFiGT7F31vFFFB(A'(+* +* +GBWCCCBC,,BBINN28A;///BHHRBuHLLEFUNNNNNA 	$  	$    c           
      ~   g }|                     d           |                     d           |D ]\  }}t          |d          }ddddd	d
ifdd	diffD ]}ddddfddddffD ]}t          j                            d           t          j                            |j        d                   }|t          j                            |j        d                   z  }t          |||d          }	g }
|	                    ||dd|
          }~|
d         |
d         z  dt          |
          z  z  }||k     sJ Ռd S )N))i  gMbP?))2   rC   gffffff?csrformatdirectinject	one_point	classicalmodifiedFTairg?r   )thetadegreer   r   rC   )interpolationrestrict
max_coarse   r   r   r         ?)
r   r   r   r"   seedr#   r$   r   r%   len)r-   casescaseexpected_speedr0   interprestrr4   r5   r2   r3   r6   avg_convergence_ratios                r?   test_poissonzTestAIR.test_poisson4   s   _%%%_%%%$) 	D 	D D.U+++A#X{'*e)<='*d);<> D D  %&B&BC$&B&BCE D DE INN1%%%	qwqz22A")..444A#AVeXZ[[[BCHHQ1be/2 % 4 4E-0WSV^s3s88|,L)1NBBBBBDD	D 	DrA   c                    ddl m} t          dd          }t          j        g dd          } |||          }t          j        g d	g d
g dg d
g dg          }t          |                                |           d S )Nr   )injection_interpolation   rD   rE   r   r   r   r   r   intcdtyperS           rf   )rf   rf   rf   rf   rS   rf   rf   rf   rS   )pyamg.classical.interpolater^   r   r   r'   r   toarray)r-   r^   r0   	splittingPP_exacts         r?   test_injection_interpolationz$TestAIR.test_injection_interpolationP   s    GGGGGGD'''H___F;;;	##Ay11(LLL(LL(LL(LL(LL	* + +
 	"!))++w77777rA   c                    ddl m} t          dd          }t          j        g dd          } ||||          }t          j        g d	g d	g d
g d
g dg          }t          |                                |           d S )Nr   )one_point_interpolationr_   rD   rE   ra   rb   rc   re   rg   rh   )ri   rp   r   r   r'   r   rj   )r-   rp   r0   rk   rl   rm   s         r?   test_one_point_interpolationz$TestAIR.test_one_point_interpolation\   s    GGGGGGD'''H___F;;;	##Aq)44(LLL(LL(LL(LL(LL	* + +
 	"!))++w77777rA   c                    ddl m} t          dd          }t          j        g dd          } |||          }t          j        g d	g d
g dg          }t          |                                |           t          dd          }t          j        g dd          } |||          }t          j        g dg dg dg dg dg          }t          |                                |           d S )Nr   )	local_airr_   rD   rE   ra   rb   rc   )rS         ?rf   rf   rf   )rf   rt   rS   rt   rf   )rf   rf   rf   rt   rS   )   ru   )	r   r   r   r   r   r   r   r   r   )	rS         ?rf   rv   rf   rf   rf   rf   rf   )	rf   rv   rS   rf   rf   rv   rf   rf   rf   )	rf   rv   rf   rv   rS   rv   rf   rv   rf   )	rf   rf   rf   rv   rf   rf   rS   rv   rf   )	rf   rf   rf   rf   rf   rv   rf   rv   rS   )ri   rs   r   r   r'   r   rj   )r-   rs   r0   rk   RR_exacts         r?   test_air_restrictzTestAIR.test_air_restricth   s>   999999D'''H___F;;;	Ia##(4444444446 7 7 	"!))++w777F5)))H888GGG	Ia##(HHHHHHHHHHHHHHH	J K K
 	"!))++w77777rA   N)__name__
__module____qualname__r@   r\   rn   rq   ry    rA   r?   r
   r
      sc        %$ %$ %$ND D D8
8 
8 
8
8 
8 
88 8 8 8 8rA   r
   )__doc__numpyr   numpy.testingr   r   scipy.sparser   r   pyamg.classical.airr   pyamg.galleryr   r
   r}   rA   r?   <module>r      s          = = = = = = = = * * * * * * * * * * * * * * ! ! ! ! ! !
n8 n8 n8 n8 n8h n8 n8 n8 n8 n8rA   