program malha

use portlib

implicit none

integer :: nivel      ! nível de malha desejado
integer :: pontos     ! total de nós da malha (reais + fictícios)
integer :: p_reais    ! total de nós reais da malha
integer :: p_fict     ! total de nós fictícios da malha
integer :: tot_vol    ! total de volumes da malha (reais + fictícios)
integer :: vol_reais  ! total de volumes reais da malha
integer :: vol_fict   ! total de volumes fictícios da malha

integer :: aux1       ! auxiliar para contagem dos nós (reais)
integer :: aux2       ! auxiliar para contagem dos nós (fictícios)
integer :: aux3       ! auxiliar para contagem dos vértices (volumes)
integer :: aux_fict   ! auxiliar para contagem dos vértices (volumes fictícios)

integer :: i          ! contador
integer :: j          ! contador
integer :: k          ! contador (conectividades)
integer :: lim1       ! limitador 1 (nós)
integer :: lim2       ! limitador 2	(nós)
integer :: lim3       ! limitador 3	(nós) - montagem dos volumes fictícios

integer :: graf       ! mostra gráficos: 0 - não; 1 - sim

integer :: aux_conec  ! contador (conectividades)

integer :: vert1      ! vértice 1 do volume
integer :: vert2      ! vértice 2 do volume
integer :: vert3      ! vértice 3 do volume

real*8 :: dim_x       ! dimensão x do domínio
real*8 :: dim_y       ! dimensão y do domínio

real*8 :: dx1         ! distância entre dois nós consecutivos (direção x, malha ímpar)
real*8 :: dx2         ! distância entre dois nós consecutivos (direção x, auxiliar, malha par)
real*8 :: dx3         ! distância entre dois nós consecutivos (direção x, auxiliar, fictícios)

real*8 :: dy1         ! distância entre dois nós consecutivos (direção y, malha ímpar)
real*8 :: dy2         ! distância entre dois nós consecutivos (direção y, auxiliar, malha par)
real*8 :: dy3         ! distância entre dois nós consecutivos (direção y, auxiliar, fictícios)

real*8 :: tcpu        ! tempo de cpu

real*8,dimension(:,:), allocatable :: posicao     ! coordenadas dos nós

real*8,dimension(:,:), allocatable :: baricentro  ! coordenadas dos baricentros

integer,dimension(:,:),allocatable :: volume      ! vértices dos volumes

integer,dimension(:,:),allocatable :: conect      ! matriz de conectividade (reduzida)


logical :: dos


! *******************************************************************
! Entrada de dados **************************************************
! *******************************************************************

write (*,*) " Informe o nivel da malha "
read(*,*) nivel

write(*,*) " Informe a dimensao x "
read(*,*) dim_x

write(*,*) " Informe a dimensao y "
read(*,*) dim_y

write(*,*) " Mostrar graficos? 0: nao; 1: sim "
read(*,*) graf


! *******************************************************************
! Processamento *****************************************************
! *******************************************************************

! início de contagem do tempo de processamento
tcpu = timef()

! número de volumes reais -------------------------------------------
vol_reais = 2**nivel

! número de volumes fictícios
vol_fict = 2**(ceiling(nivel/2.0d0) + 1)

! número total de volumes
tot_vol = vol_reais + vol_fict

! número de nós reais e fictícios para malha 1
if (nivel == 1) then
	p_reais = 4
	p_fict  = 4
	pontos = p_reais + p_fict
	dx1 = dim_x
	dy1 = dim_y
end if

! número de nós reais e fictícios para malha 2
if (nivel == 2) then
	p_reais = 5
	p_fict  = 4
	pontos = p_reais + p_fict
	dx1 = dim_x
	dy1 = dim_y
	dx2 = dx1/2.0d0
	dy2 = dy1/2.0d0
end if

! número de nós reais e fictícios para outras malhas
if ( (nivel >= 3).and.(mod(nivel,2) /= 0) ) then
	! malhas ímpares ------------------------------------------------
	lim1 = 	(2**floor(nivel/2.0d0) + 1)
	p_reais = lim1**2
	p_fict  = 2**(floor(nivel/2.0d0) + 1)
	aux2 = p_fict/4
	pontos = p_reais + p_fict
	dx1 = dim_x / (lim1-1)
	dy1 = dim_y / (lim1-1)
	dx3 = 2.0d0*dx1
	dy3 = 2.0d0*dy1
elseif ( (nivel >= 3).and.(mod(nivel,2) == 0) ) then
	! malhas pares --------------------------------------------------
	lim1 = 	(2**(floor(nivel/2.0d0)-1)+1)
	lim2 = 	(2**(floor(nivel/2.0d0)-1))
	p_reais = lim1**2 + lim2**2
	p_fict  = 2**(floor(nivel/2.0d0) + 1)
	aux2 = p_fict/4
	pontos = p_reais + p_fict
	dx1 = dim_x / (lim1-1)
	dy1 = dim_y / (lim1-1)
	dx2 = dx1/2.0d0
	dy2 = dy1/2.0d0
end if

! alocação da matriz de posições
allocate( posicao(pontos,2) )

! alocação da matriz de vértices (volumes)
allocate( volume(tot_vol,3) )

! alocação da matriz reduzida de conectividade
allocate( conect(tot_vol,3) )

! alocação da matriz de baricentros
allocate( baricentro(tot_vol,2) )

!********************************************************************
! POSIÇÃO DOS PONTOS ************************************************
!********************************************************************

! Níveis 1 e 2 ------------------------------------------------------
! Pontos comuns aos níveis 1 e 2
if ((nivel == 1).or.(nivel == 2)) then
	! Ponto 1
	posicao(1,1) =  0.0d0
	posicao(1,2) =  0.0d0

	! Ponto 2
	posicao(2,1) =  1.0d0
	posicao(2,2) =  0.0d0

	! Ponto 3
	posicao(3,1) =  0.0d0
	posicao(3,2) =  1.0d0

	! Ponto 4
	posicao(4,1) =  1.0d0
	posicao(4,2) =  1.0d0
end if

! Pontos específicos do nível 1
if (nivel == 1) then
	! Ponto 5
	posicao(5,1) =  0.0d0
	posicao(5,2) = -1.0d0

	! Ponto 6
	posicao(6,1) =  2.0d0
	posicao(6,2) =  1.0d0

	! Ponto 7
	posicao(7,1) =  1.0d0
	posicao(7,2) =  2.0d0

	! Ponto 8
	posicao(8,1) = -1.0d0
	posicao(8,2) =  0.0d0
end if

! Pontos específicos do nível 2
if (nivel == 2) then
	! Ponto 5
	posicao(5,1) =  0.5d0
	posicao(5,2) =  0.5d0

	! Ponto 6
	posicao(6,1) =  0.5d0
	posicao(6,2) = -0.5d0

	! Ponto 7
	posicao(7,1) =  1.5d0
	posicao(7,2) =  0.5d0

	! Ponto 8
	posicao(8,1) =  0.5d0
	posicao(8,2) =  1.5d0

	! Ponto 9
	posicao(9,1) = -0.5d0
	posicao(9,2) =  0.5d0
end if

! Demais níveis -----------------------------------------------------
if ( (nivel >= 3).and.(mod(nivel,2) /= 0) ) then
	! malhas ímpares ------------------------------------------------
	! nós reais
	aux1 = 0
	do j = 1, lim1
		do i = 1, lim1
			aux1 = aux1 + 1
			posicao(aux1,1) = (i-1)*dx1
			posicao(aux1,2) = (j-1)*dy1
		end do
	end do
	! nós fictícios
	! contorno sul
	do i = 1, aux2
		aux1 = aux1 + 1
		posicao(aux1,1) = (i-1)*dx3 + dx1
		posicao(aux1,2) = -dy1
	end do
	! contorno leste
	do i = 1, aux2
		aux1 = aux1 + 1
		posicao(aux1,1) = dim_x + dx1
		posicao(aux1,2) = (i-1)*dy3 + dy1
	end do
	! contorno norte
	do i = aux2, 1, -1
		aux1 = aux1 + 1
		posicao(aux1,1) = (i-1)*dx3 + dx1
		posicao(aux1,2) = dim_y + dy1
	end do
	! contorno oeste
	do i = aux2, 1, -1
		aux1 = aux1 + 1
		posicao(aux1,1) = -dx1
		posicao(aux1,2) = (i-1)*dy3	+ dy1
	end do
elseif ( (nivel >= 3).and.(mod(nivel,2) == 0) ) then
	! malhas pares --------------------------------------------------
	! nós reais (malha principal)
	aux1 = 0
	do j = 1, lim1
		do i = 1, lim1
			aux1 = aux1 + 1
			posicao(aux1,1) = (i-1)*dx1
			posicao(aux1,2) = (j-1)*dy1
		end do
	end do
	! nós reais (malha intercalada)
	do j = 1, lim2
		do i = 1, lim2
			aux1 = aux1 + 1
			posicao(aux1,1) = (i-1)*dx1 + dx2
			posicao(aux1,2) = (j-1)*dy1	+ dy2
		end do
	end do
	! nós fictícios
	! contorno sul
	do i = 1, aux2
		aux1 = aux1 + 1
		posicao(aux1,1) = (i-1)*dx1 + dx2
		posicao(aux1,2) = -dy2
	end do
	! contorno leste
	do i = 1, aux2
		aux1 = aux1 + 1
		posicao(aux1,1) = dim_x + dx2
		posicao(aux1,2) = (i-1)*dy1	+ dy2
	end do
	! contorno norte
	do i = aux2, 1, -1
		aux1 = aux1 + 1
		posicao(aux1,1) = (i-1)*dx1 + dx2
		posicao(aux1,2) = dim_y + dy2
	end do
	! contorno oeste
	do i = aux2, 1, -1
		aux1 = aux1 + 1
		posicao(aux1,1) = -dx2
		posicao(aux1,2) = (i-1)*dy1	+ dy2
	end do
end if

!********************************************************************
! Formação da malha *************************************************
!********************************************************************
! Malha 1 -----------------------------------------------------------
if (nivel == 1) then
	! Volume 1 (real) -----------------------------------------------
	volume(1,1) = 1
	volume(1,2) = 2
	volume(1,3) = 3
	! Volume 2 (real) -----------------------------------------------
	volume(2,1) = 2
	volume(2,2) = 4
	volume(2,3) = 3
	! Volume 3 (contorno sul) ---------------------------------------
	volume(3,1) = 5
	volume(3,2) = 2
	volume(3,3) = 1
	! Volume 4 (contorno leste) -------------------------------------
	volume(4,1) = 6
	volume(4,2) = 4
	volume(4,3) = 2
	! Volume 5 (contorno norte) -------------------------------------
	volume(5,1) = 7
	volume(5,2) = 3
	volume(5,3) = 4
	! Volume 6 (contorno oeste) -------------------------------------
	volume(6,1) = 8
	volume(6,2) = 1
	volume(6,3) = 3
end if

! Malha 2 -----------------------------------------------------------
if (nivel == 2) then
	! Volumes reais -------------------------------------------------
	volume(:,1) = 5
	! Volume 1
	volume(1,2) = 1
	volume(1,3) = 2
	! Volume 2
	volume(2,2) = 2
	volume(2,3) = 4
	! Volume 3
	volume(3,2) = 4
	volume(3,3) = 3
	! Volume 4
	volume(4,2) = 3
	volume(4,3) = 1
	! Contorno sul --------------------------------------------------
	volume(5,1) = 6
	volume(5,2) = 2
	volume(5,3) = 1
	! Contorno leste ------------------------------------------------
	volume(6,1) = 7
	volume(6,2) = 4
	volume(6,3) = 2
	! Contorno norte ------------------------------------------------
	volume(7,1) = 8
	volume(7,2) = 3
	volume(7,3) = 4
	! Contorno oeste ------------------------------------------------
	volume(8,1) = 9
	volume(8,2) = 1
	volume(8,3) = 3
end if

! Demais malhas -----------------------------------------------------
if ( (nivel >= 3).and.(mod(nivel,2) /= 0) ) then
	! Malhas ímpares ------------------------------------------------
	vert1 = 1
	aux3 = 1
	! Volumes reais -------------------------------------------------
	do j = 2, lim1-1, 2
		do i = 2, lim1-1, 2
			vert1 = (j-1)*lim1 + i
			! Volume 1 ----------------------------------------------
			vert2 = vert1 - lim1 -1
			vert3 = vert1 - lim1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
			! Volume 2 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 - lim1 +1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
			! Volume 3 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 +1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
 			! Volume 4 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 + lim1 +1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
 			! Volume 5 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 + lim1 
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
  			! Volume 6 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 + lim1 -1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
    		! Volume 7 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 -1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
    		! Volume 8 ----------------------------------------------
			vert2 = vert3
			vert3 = vert1 - lim1 -1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
		end do
	end do
	! Volumes fictícios ---------------------------------------------
	lim3 = p_fict/4
	! Contorno sul --------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + i
		! Conjugado 1 -----------------------------------------------
		vert2 = 2*i 
		vert3 = 2*i -1 
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
		! Conjugado 2 -----------------------------------------------
		vert3 = vert2
		vert2 = 2*i +1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno leste ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + lim3 + i
		! Conjugado 1 -----------------------------------------------
		vert2 = 2*i*lim1
		vert3 = (2*i-1)*lim1 
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
		! Conjugado 2 -----------------------------------------------
		vert3 = vert2
		vert2 = (2*i+1)*lim1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno norte ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + 2*lim3 + i
		aux_fict = ceiling(lim1/2.0d0) - i
		! Conjugado 1 -----------------------------------------------
		vert2 = (lim1 - 1)*lim1 + 2*aux_fict
		vert3 = (lim1 - 1)*lim1 + 2*aux_fict +1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
		! Conjugado 2 -----------------------------------------------
		vert3 = vert2
		vert2 = (lim1 - 1)*lim1 + 2*aux_fict -1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno oeste ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + 3*lim3 + i
		aux_fict = ceiling(lim1/2.0d0) - i
		! Conjugado 1 -----------------------------------------------
		vert2 = (2*aux_fict - 1)*lim1 + 1
		vert3 = 2*aux_fict*lim1 + 1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
		! Conjugado 2 -----------------------------------------------
		vert3 = vert2
		vert2 = (2*aux_fict - 2)*lim1 + 1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
elseif ( (nivel >= 3).and.(mod(nivel,2) == 0) ) then
	! Malhas pares --------------------------------------------------
	vert1 = 1
	aux3 = 1
	! Volumes reais -------------------------------------------------
	do j = 1, lim2
		do i = 1, lim2
			vert1 = (j-1)*lim2 + i + lim1**2
			! Volume 1 ----------------------------------------------
			vert2 = (j-1)*lim1 + i
			vert3 = (j-1)*lim1 + i +1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
			! Volume 2 ----------------------------------------------
			vert2 = vert3
			vert3 = j*lim1 + i +1
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
			! Volume 3 ----------------------------------------------
			vert2 = vert3
			vert3 = j*lim1 + i
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
			! Volume 4 ----------------------------------------------
			vert2 = vert3
			vert3 = (j-1)*lim1 + i
			volume(aux3,1) = vert1
			volume(aux3,2) = vert2
			volume(aux3,3) = vert3
			aux3 = aux3 + 1
		end do
	end do
	! Volumes fictícios ---------------------------------------------
	lim3 = p_fict/4
	! Contorno sul --------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + i
		vert2 = i+1 
		vert3 = i 
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno leste ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + lim3 + i
		vert2 = (i+1)*lim1
		vert3 = i*lim1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno norte ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + 2*lim3 + i
		aux_fict = lim1 - i
		vert2 = (lim1-1)*lim1 + aux_fict
		vert3 = (lim1-1)*lim1 + aux_fict +1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
	! Contorno oeste ------------------------------------------------
	do i = 1, lim3
		vert1 = p_reais + 3*lim3 + i
		aux_fict = lim1 - i
		vert2 = (aux_fict-1)*lim1 + 1
		vert3 = aux_fict*lim1 + 1
		volume(aux3,1) = vert1
		volume(aux3,2) = vert2
		volume(aux3,3) = vert3
		aux3 = aux3 + 1
	end do
end if

! *******************************************************************
! Matriz reduzida de convectividades ********************************
! *******************************************************************
! Conectividades: será informado o(s) número(s) do(s) volume(s) ao qual
! um determinado volume está conectado. O total de conexões será de até
! 3 volumes para as malhas geradas.	Os valores nulos respresentam casos
! em que determinado volume possui menos de 3 conexões.
conect = 0
do i = 1, tot_vol
	aux_conec = 1
	do j = 1, tot_vol
		if (i /= j) then
			k = 0
			! Verificação do número de vértices em comum
			if(volume(i,1) == volume(j,1)) k = k + 1
			if(volume(i,1) == volume(j,2)) k = k + 1
			if(volume(i,1) == volume(j,3)) k = k + 1
			if(volume(i,2) == volume(j,1)) k = k + 1
			if(volume(i,2) == volume(j,2)) k = k + 1
			if(volume(i,2) == volume(j,3)) k = k + 1
			if(volume(i,3) == volume(j,1)) k = k + 1
			if(volume(i,3) == volume(j,2)) k = k + 1
			if(volume(i,3) == volume(j,3)) k = k + 1
			if (k == 2) then
				conect(i,aux_conec) = j
				aux_conec = aux_conec + 1
			end if
			if (aux_conec == 4) exit
		end if
	end do
end do

! *******************************************************************
! Baricentros *******************************************************
! *******************************************************************
do i = 1, tot_vol
	baricentro(i,1) = ( posicao(volume(i,1),1) + posicao(volume(i,2),1) + &
	                    posicao(volume(i,3),1) ) / 3.0d0
	baricentro(i,2) = ( posicao(volume(i,1),2) + posicao(volume(i,2),2) + &
	                    posicao(volume(i,3),2) ) / 3.0d0
end do

! Fim do tempo de processamento
tcpu = timef()

! *******************************************************************
! Saída de dados ****************************************************
! *******************************************************************

open(10,file = "dados_malha.txt")
open(20,file = "nos_malha.txt")
open(30,file = "malha.txt")
open(40,file = "nos_conectividade.txt")
open(50,file = "malha_real.txt")
open(60,file = "vol_conectividades.txt")
open(70,file = "baricentros.txt")
open(80,file = "dados.ent")
open(90,file = "conectividades.ent")
open(100,file = "baricentros.ent")
open(110,file = "dados_gerais.txt")

! Escrita de dados gerais da malha obtida
write(10,10) vol_reais
write(10,20) vol_fict
write(10,30) p_reais
write(10,40) p_fict

! Escrita de dados gerais da malha obtida
write(110,10) vol_reais
write(110,20) vol_fict
write(110,30) p_reais
write(110,40) p_fict

! Pontos (nós) da malha
write(10,50)
do i = 1, pontos
	write(10,60) i, posicao(i,1), posicao(i,2)
	write(20,70) posicao(i,1), posicao(i,2)
end do
do i = 1, tot_vol 
	write(30,70) posicao(volume(i,1),1), posicao(volume(i,1),2)
	write(30,70) posicao(volume(i,2),1), posicao(volume(i,2),2)
	write(30,70) posicao(volume(i,3),1), posicao(volume(i,3),2)
	write(30,70) posicao(volume(i,1),1), posicao(volume(i,1),2)
	write(30,*)
	write(40,80) i, volume(i,1), volume(i,2), volume(i,3)
	write(60,80) i, conect(i,1), conect(i,2), conect(i,3)
	write(90,90) conect(i,1), conect(i,2), conect(i,3)
	write(70,70) baricentro(i,1), baricentro(i,2)
	write(100,70) baricentro(i,1), baricentro(i,2)
end do

do i = 1, vol_reais
	write(50,70) posicao(volume(i,1),1), posicao(volume(i,1),2)
	write(50,70) posicao(volume(i,2),1), posicao(volume(i,2),2)
	write(50,70) posicao(volume(i,3),1), posicao(volume(i,3),2)
	write(50,70) posicao(volume(i,1),1), posicao(volume(i,1),2)
	write(50,*)
end do

write(80,100) pontos
write(80,100) tot_vol
write(80,100) vol_reais
write(80,100) vol_fict

do i = 1, pontos
	write(80,70) posicao(i,1), posicao(i,2)
end do
do i = 1, tot_vol
	write(80,90) volume(i,1), volume(i,2), volume(i,3)
end do

write(110,120) tcpu

10 format (" Número de volumes reais: ", t30, i8)
20 format (" Número de volumes fictícios: ", t30, i8)
30 format (" Número de nós reais: ", t30, i8)
40 format (" Número de nós fictícios: ", t30, i8)
50 format (/, " Posição dos nós", /)
60 format ( i8, <2>(1pe25.15))
70 format ( <2>(1pe25.15))
80 format (<4>(i8))
90 format (<3>(i8))
100 format(i8)
110 format (1pe25.15)
120 format (" tempo de processamento [s]: ", 1pe18.9)

close(10)
close(20)
close(30)
close(40)
close(50)
close(60)
close(70)
close(80)
close(90)
close(100)
close(110)

dos = system("notepad dados_gerais.txt")

dos = system("notepad dados_malha.txt")

if (graf == 1) dos = system("wgnuplot malha_real.gnu")

if (graf == 1) dos = system("wgnuplot malha.gnu")

if (graf == 1) dos = system("wgnuplot malha_baricentros.gnu")

dos = system("notepad vol_conectividades.txt")

end