Programa baseado no método de Leapfrog para a simulação de uma corda ideal

De Física Computacional
Revisão de 16h16min de 26 de janeiro de 2018 por Lucasdoria (discussão | contribs) (Criou página com '<source lang = "c"> #include<stdio.h> #include<stdlib.h> #include<math.h> #include"gauss.h"//Biblioteca para pulso gaussiano inicial. #define dx 0.1 //Tamanho do passo espac...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

<source lang = "c">

  1. include<stdio.h>
  2. include<stdlib.h>
  3. include<math.h>
  4. include"gauss.h"//Biblioteca para pulso gaussiano inicial.
  1. define dx 0.1 //Tamanho do passo espacial.
  2. define v 1.0 //Velocidade do pulso.
  3. define L 100 //Tamanho da corda.
  4. define t_max 300 //Duração da simulação.

void propagate();

void main() { propagate(); }

void propagate() { int i, n; double u[t_max][L], dt, alpha; // u[][] é o deslocamento u(x,t) da corda na posição x e no instante t.

dt = dx/v;

for(i = 0 ; i < t_max; i++) //Condições de contorno fixas. Corda presa nas extremidades. { u[i][0] = 0.0; u[i][L-1] = 0.0; }

for(n = 0 ; n < 2 ; n++) //Condição inicial da corda. É dado um pulso gaussiano inicial a partir da função "gaussiana()". { for(i = 1 ; i < L-1 ; i++) { u[n][i] = gaussiana(i); } }

alpha = v * dt/dx;


for(n = 1; n < t_max ; n++) //Iterações principais do programa baseadas no método Staggered-Leapfrog. { for(i = 1 ; i < L-1 ; i++) { u[n+1][i] = alpha*alpha*u[n][i+1] + 2.0*u[n][i]*(1.0 - alpha*alpha) + alpha*alpha*u[n][i-1] - u[n-1][i]; }

printf("set title 'Tempo = %d'\nset xrange [%d:%d]\nset yrange [%lf:%lf]\npl \'-' w lp pt 7 ps 0.8 \n", n,0,L,-1.0,1.0); for(i = 0; i<L; i++) printf("%d\t%lf\n",i,u[n+1][i]); printf("e\npause 0.05\n"); } /* As últimas 4 linhas do programa (linhas acima) são comandos para o gnuplot. A partir do comando "pl \'-'" o programa manda um conjunto de dados para o gnuplot. Este, no final da iteração, espera por 0.05 segundos e depois plota o próximo conjunto de dados.

O objetivo é simular o problema em tempo real e de uma maneira dinâmica, como feita nos .gif's apresentados no trabalho.

  • /

}

<\source>