Program APOGEU_1p1

! Carlos H. Marchi
! DEMEC/UFPR, Curitiba, PR
! versão original 1.0: 29 Out 08
! versão atual    1.1:  1 Nov 08
! última alteração:     1 Nov 08

! -----------------------------------------------------------------------------

! *** DEFINE AS VARIÁVEIS DO PROGRAMA ***

use portlib ! inserção da biblioteca básica do Fortran

implicit none

! Dados

character*50 :: caso   ! nome do arquivo de saída
character*50 :: nome   ! nome do arquivo de dados
character*90 :: titulo ! título de identificação da análise

! PONTOS ESPECIAIS:
!   N = direção norte da bússola
!   L = ponto de lançamento do espaçomodelo
!   I = ponto de impacto do espaçomodelo com o solo
!   O = ponto do observador com altímetro manual
!   H = apogeu do espaçomodelo (altura atingida)

real*8 :: g      ! aceleração gravitacional do local do lançamento (m/s2)
real*8 :: tH     ! tempo de vôo entre a decolagem e o apogeu (s)
real*8 :: tI     ! tempo de vôo entre a decolagem e o impacto (s)
real*8 :: LO     ! distância entre os pontos L e O (m)
real*8 :: alfa   ! ângulo de elevação entre OL e OH (graus)
real*8 :: LI     ! distância entre os pontos L e I (m)
real*8 :: gama   ! ângulo de azimute entre LN e LO (graus)
real*8 :: lambda ! ângulo de azimute entre LN e LI (graus)

! Resultados

real*8 :: Hi1  ! apogeu pelo método ideal 1 (m)
real*8 :: Hi2  ! apogeu pelo método ideal 2 (m)
real*8 :: HA   ! apogeu pelo método A (m)
real*8 :: HB   ! apogeu pelo método B (m)
real*8 :: HC   ! apogeu pelo método C (m)

! Variáveis auxiliares

real*8 :: beta ! ângulo de azimute entre OL e LI (graus)
real*8 :: x    ! deslocamento de H, em relação a L, no sentido paralelo a OL (m)
real*8 :: y    ! deslocamento de H, em relação a L, no sentido perpendicular a OL (m)
real*8 :: OH2  ! distância entre os pontos O e H no plano do solo (m)
real*8 :: pi   ! constante matemática

integer :: ver

! -----------------------------------------------

! *** DEFINE O VALOR DA CONSTANTE pi
	
pi = dacos(-1.0d0)

! -----------------------------------------------------------------------------

! *** LÊ OS DADOS ***

! Mostra o conteúdo do arquivo de dados do programa
ver = system("Notepad Apogeu_1p1_dados.txt")

! Lê o nome do arquivo com os dados numéricos
open(8,file="Apogeu_1p1_dados.txt")
read(8,*) nome
close(8)

! Mostra o conteúdo do arquivo com os dados numéricos
ver = system('notepad '//nome)

! Lê os dados numéricos

open(8,file=nome)

read(8,*) caso
read(8,*) g
read(8,*) tH
read(8,*) tI
read(8,*) LO
read(8,*) alfa
read(8,*) LI
read(8,*) gama
read(8,*) lambda
read(8,*) titulo

close(8)

! -----------------------------------------------

! *** CALCULA O VALOR DE beta
	
beta = 180 + gama - lambda

if ( beta >= 3.6d+2 ) beta = beta - 3.6d+2

! -----------------------------------------------------------------------------

! *** CRIA O ARQUIVO DE SAÍDA ***

open(10,file=caso)

! -----------------------------------------------------------------------------

! *** ESCREVE OS DADOS NO ARQUIVO DE SAÍDA ***

write(10,1) trim(adjustl(caso)), trim(adjustl(titulo)), &
            g, tH, tI, LO, alfa, LI, gama, lambda, beta

1 format(/,1x, 'Saída do programa APOGEU 1.1, versão de 1 Nov 2008',//, &
           1x, 'Caso   = ', a, //, &
           1x, 'Título = ', a, //, &
           3x, 'N = direção norte da bússola',/, &
           3x, 'L = ponto de lançamento do espaçomodelo',/, &
           3x, 'I = ponto de impacto do espaçomodelo com o solo',/, &
           3x, 'O = ponto do observador com altímetro manual',/, &
           3x, 'H = apogeu do espaçomodelo (altura atingida)',//, &
        1pe15.6, ' = g      = aceleração gravitacional do local do lançamento&
                            & (m/s2)',/, &
        1pe15.6, ' = tH     = tempo de vôo entre a decolagem e o apogeu (s)',/, &
        1pe15.6, ' = tI     = tempo de vôo entre a decolagem e o impacto (s)',/, &
        1pe15.6, ' = LO     = distância entre os pontos L e O (m)',/, &
        1pe15.6, ' = alfa   = ângulo de elevação entre OL e OH (graus)', /, &
        1pe15.6, ' = LI     = distância entre os pontos L e I (m)',/, &
        1pe15.6, ' = gama   = ângulo de azimute entre LN e LO (graus)',/,&
        1pe15.6, ' = lambda = ângulo de azimute entre LN e LI (graus)',/,&
        1pe15.6, ' = beta   = ângulo de azimute entre OL e LI (graus)')

! -----------------------------------------------------------------------------

! *** MÉTODO IDEAL 1 ***

Hi1 = g * ( (tI/2) ** 2 ) / 2 

write(10,11) Hi1

11 format(//, 1x, '-------------- MÉTODO IDEAL 1: g, tI ----------------&
                  &---------------', //, &
        1pe15.6, ' = Hi1 = apogeu pelo método ideal 1 (m)')

! -----------------------------------------------------------------------------

! *** MÉTODO IDEAL 2 ***

Hi2 = g * ( tH ** 2 ) / 2 

write(10,21) Hi2

21 format(//, 1x, '-------------- MÉTODO IDEAL 2: g, tH ----------------&
                  &---------------', //, &
        1pe15.6, ' = Hi2 = apogeu pelo método ideal 2 (m)')

! -----------------------------------------------------------------------------

! *** MÉTODO A ***

HA = LO * dtan( alfa * pi / 180 ) 

write(10,31) HA

31 format(//, 1x, '-------------- MÉTODO A: LO, alfa --------------------&
                  &---------------', //, &
        1pe15.6, ' = HA = apogeu pelo método A (m)')

! -----------------------------------------------------------------------------

! *** MÉTODO B ***

x = LI * dcos( beta * pi / 180 ) / 2

y = LI * dsin( beta * pi / 180 ) / 2

OH2 = dsqrt( ((LO+x)**2) + (y**2) )

HB = dtan( alfa * pi / 180 ) * OH2

write(10,41) HB, x, y, OH2

41 format(//, 1x, '-------------- MÉTODO B: LO, alfa, LI, beta -----------&
                  &---------------', //, &
        1pe15.6, ' = HB = apogeu pelo método B (m)', //, &
    15x,1pe15.6, ' = x   (m)',/, &
    15x,1pe15.6, ' = y   (m)',/, &
    15x,1pe15.6, ' = OH2 (m)')

! -----------------------------------------------------------------------------

! *** MÉTODO C ***

x = LI * ( tH / tI ) * dcos( beta * pi / 180 )

y = LI * ( tH / tI ) * dsin( beta * pi / 180 )

OH2 = dsqrt( ((LO+x)**2) + (y**2) )

HC = dtan( alfa * pi / 180 ) * OH2

write(10,51) HC, x, y, OH2

51 format(//, 1x, '-------------- MÉTODO C: LO, alfa, LI, beta, tH, tI ---&
                  &---------------', //, &
        1pe15.6, ' = HC = apogeu pelo método C (m)', //, &
    15x,1pe15.6, ' = x   (m)',/, &
    15x,1pe15.6, ' = y   (m)',/, &
    15x,1pe15.6, ' = OH2 (m)')

! -----------------------------------------------

write(10,61)

61 format(//, 1x, '-------------- DEFINIÇÕES ADICIONAIS ------------------&
                  &---------------', //, &
   'x   = deslocamento de H, em relação a L, no sentido paralelo a OL (m)',/,&
   'y   = deslocamento de H, em relação a L, no sentido perpendicular a OL (m)',/,&
   'OH2 = distância entre os pontos O e H no plano do solo (m)')

! -----------------------------------------------

! *** FECHA O ARQUIVO DE SAÍDA ***

close (10)

! -----------------------------------------------

! *** MOSTRA O CONTEÚDO DO ARQUIVO DE SAÍDA ***

ver = system('notepad '//caso)

! -----------------------------------------------

end program Apogeu_1p1
