Oscilador.c

Oscilador.c
The MIT License (MIT)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/* 
   Autor: Ismael Felipe Ferreira dos Santos
          Instituto de Fisica,
          Universidade Federal de Alagoas
   E-mail: ismaellxd@gmail.com
   Copyright © 2019 MIT LICENCE
   GIT: https://ismaeldamiao.blogspot.com/fisicacomputacional
   Objetivo: Resolver o oscilador hamonico simples pelo metodo de Euler (cf. 
             Moyses Vol2 p42)
   Escrito em: 02 de agosto de 2019
*/
#include<stdio.h>

int main(){
   /* Condicoes de contorno */
   double k = 1.; // Constante da mola
   double massa = 1.; // Massa oscilante
   double velocidade[2];
   velocidade[0] = 0.; // Velocidade inicial
   double posicao[2];
   posicao[0] = 5.;// Deslocamento do ponto de equilibrio da mola
   
   double omega2 = k/massa;
   double tempo = 1.e-6;/* Discretizacao dos pontos */
   double iTempo, TempoFinal = 30.e6;//Graficar ate 30 segundos
   int ponto, TotalPontos = 400;//Quantidade de pontos que estarao no grafico
   double SaltoTempo = TempoFinal/(double)TotalPontos, TempoMem = 1.;
   FILE *DadosOscilador;

   DadosOscilador = fopen("DadosOscilador.dat", "w"); 

   for(ponto = 1; ponto <= TotalPontos; ponto++){
      for(iTempo = TempoMem; iTempo <= SaltoTempo*(double)ponto; iTempo++){
         /* Calculo para  a posicao em funcao do tempo */
         posicao[1] = posicao[0] + tempo * velocidade[0];
         /* Calculo para a velocidade em funcao do tempo */
         velocidade[1] = velocidade[0] - omega2 * posicao[0] * tempo;
         /* Recursao */
         posicao[0] = posicao[1];
         velocidade[0] = velocidade[1];
      }
      TempoMem = iTempo;
      fprintf(DadosOscilador, "%f %f %f\n", (iTempo-1.)*tempo, velocidade[1], 
         posicao[1]);
   }
   return 0;
}