Module Normas

use Variaveis
use Coef

contains 

!===========================================================================

subroutine Norma1(Nx,Ny,Nxy,AS,AW,AP,AE,AN,BP,TNum,norma)

    implicit none

    integer                             :: i,j,np,Nxy   ! nó
    real*8                              :: R            ! resíduo do sistema de equações
    integer,intent(in)                  :: Nx,Ny        ! número de nós nas direções x e y
	real*8,intent(in),dimension(Nxy)    :: AS,AW,AP     ! coeficientes 
	real*8,intent(in),dimension(Nxy)    :: AE,AN,BP     ! coeficientes
	real*8,intent(in),dimension(Nxy)    :: TNum         ! incógnita
    real*8,intent(out)                  :: norma

    norma = 0.0d0

    do i = 2,Nx-1

		do j = 2,Ny-1

			np = (j-1)*Nx+i
		
			R = BP(np)-AS(np)*TNum(np-Nx)-AW(np)*TNum(np-1)- &
			AE(np)*TNum(np+1)-AN(np)*TNum(np+Nx)-AP(np)*TNum(np)

			norma = norma + dabs(R)
			
		end do
			   
	end do 
 
end subroutine Norma1

!*********************************************************************
subroutine norma2(Nx,Ny,Nxy,AS,AW,AP,AE,AN,BP,TNum,norma) 
 
implicit none

	integer                             :: i,j,np,Nxy   ! nó
	real*8                              :: R            ! resíduo do sistema de equações
	integer,intent(in)                  :: Nx,Ny        ! número de nós nas direções x e y
	real*8,intent(in),dimension(Nxy)    :: AS,AW,AP     ! coeficientes 
	real*8,intent(in),dimension(Nxy)    :: AE,AN,BP     ! coeficientes
	real*8,intent(in),dimension(Nxy)    :: TNum         ! incógnita
    real*8,intent(out)                  :: norma

!Calculo da média da variável do campo de Temperaturas

	
!Parte 1 do teste de coerência
	
norma=0.0d0
	
	do i=1,Nx
	
		do j=1,Ny

			np = (j-1)*Nx + i
			norma=dabs(TNum(np))+norma

		end do
				
	end do

norma=norma/Nxy

end subroutine Norma2


!*******************************************************************************

subroutine norma3(Nx,Ny,Nxy,TNum,T_inf,norma) 

implicit none

    integer                             :: i,j,np   ! nó
	character*70						:: exata 
    integer,intent(in)                  :: Nx,Ny,Nxy        ! número de nós nas direções x e y
	real*8,intent(in),dimension(Nxy)    :: TNum,T_inf         ! incógnita
    real*8,intent(out)                  :: norma

! Parte 2 do teste de coerência

! Determinação do erro de maquina

! Norma l1 média sobre o erro de iteração

	
	! Calculo da norma l1 media

	norma=0.0d0
	
	do i=1,Nx
	
		do j=1,Ny

			np = (j-1)*Nx + i

			norma = dabs(T_inf(np)-TNum(np))+norma

		end do
				
	end do

norma=norma/Nxy


end subroutine norma3


!*******************************************************

end module normas