http://fiscomp.if.ufrgs.br/index.php?title=Programa_baseado_no_m%C3%A9todo_de_Leapfrog_para_a_simula%C3%A7%C3%A3o_de_uma_corda_real&feed=atom&action=history
Programa baseado no método de Leapfrog para a simulação de uma corda real - Histórico de revisão
2024-03-28T21:12:36Z
Histórico de revisões para esta página neste wiki
MediaWiki 1.39.4
http://fiscomp.if.ufrgs.br/index.php?title=Programa_baseado_no_m%C3%A9todo_de_Leapfrog_para_a_simula%C3%A7%C3%A3o_de_uma_corda_real&diff=2306&oldid=prev
Lucasdoria: Criou página com '<source lang = "c"> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> void main() { int i, n, j; // Corda C2 //double l = 1.90, T = 750, M = 35...'
2018-01-26T19:29:38Z
<p>Criou página com '<source lang = "c"> #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> void main() { int i, n, j; // Corda C2 //double l = 1.90, T = 750, M = 35...'</p>
<p><b>Página nova</b></p><div><source lang = "c"><br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <math.h><br />
#include <string.h><br />
<br />
void main()<br />
{<br />
int i, n, j;<br />
<br />
// Corda C2<br />
//double l = 1.90, T = 750, M = 35e-3, s = M/l, L = 100, f = 16.0e3, e = 7.5e-6;<br />
<br />
// Corda C4<br />
//double l = 0.62, T = 670, M = 3.93e-3, s = M/l, L = 50, f = 32.0e3, e = 3.82e-5;<br />
<br />
// Corda C7<br />
//double l = 0.09, T = 750, M = 0.467e-3, s = M/l, L = 16, f = 96.0e3, e = 8.67e-4;<br />
<br />
//double *u, *g, *h, t, c = sqrt(T/s), dx = l/L, dt = 1.0/f, r = c*dt/dx;<br />
<br />
// Geral<br />
double l = 2;<br />
double *u, *g, *h, t, r, c = 300, dx = 0.01, dt = dx/(4*c), e = 7.5e-6, L = l/dx;<br />
char choice[20], file[20];<br />
FILE *arq;<br />
<br />
double N = L, tmax = 0.04;<br />
// Alocação de memória dinâmica dos ponteiros em forma de vetor<br />
<br />
u = malloc(L * sizeof(double));<br />
g = malloc(L * sizeof(double));<br />
h = malloc(L * sizeof(double));<br />
<br />
if(l != 1.9 && l != 0.62 && l != 0.09)<br />
if(e == 0)<br />
r = 1.0;<br />
else<br />
r = 1.0/4.0;<br />
<br />
<br />
///////////////////////////////////////<br />
// Condição de inicial: Estacionária //<br />
///////////////////////////////////////<br />
/*for(i = 0; i < L; i++)<br />
{<br />
u[i] = sin(M_PI*i/10.0);<br />
g[i] = sin(M_PI*i/10.0);<br />
h[i] = sin(M_PI*i/10.0);<br />
}<br />
<br />
u[0] = 0;<br />
g[0] = 0;<br />
u[L-1] = 0;<br />
g[L-1] = 0;*/<br />
<br />
<br />
///////////////////////////////////////////<br />
// Condição de inicial: Pacote gaussiano //<br />
///////////////////////////////////////////<br />
<br />
if(L == 16)<br />
for(i = 0; i < L; i++)<br />
{<br />
u[i] = exp(-pow(i-L/2,2)*0.5);<br />
g[i] = exp(-pow(i-L/2,2)*0.5);<br />
h[i] = exp(-pow(i-L/2,2)*0.5);<br />
}<br />
else<br />
for(i = 0; i < L; i++)<br />
{<br />
u[i] = exp(-pow(i-L/2,2)/(5*5));<br />
g[i] = exp(-pow(i-L/2,2)/(5*5));<br />
h[i] = exp(-pow(i-L/2,2)/(5*5));<br />
}<br />
<br />
//for(i=1;i<L-1;i++)<br />
// {<br />
// h[i] = r*r*u[i+1] + 2*u[i]*(1-r*r) + r*r*u[i-1] - h[i];<br />
// }<br />
<br />
<br />
// Rotina onda em corda ideal<br />
/*for(t = 0; t <= tmax; t+=dt)<br />
{<br />
for(i=1;i<L-1;i++)<br />
{<br />
g[i] = r*r*u[i+1] + 2*u[i]*(1-r*r) + r*r*u[i-1] - h[i];<br />
}<br />
<br />
for(i=0;i<L;i++)<br />
{<br />
h[i] = u[i];<br />
u[i] = g[i];<br />
}<br />
printf("\nset grid\nset title 'Tempo = %.5lf'\nset yrange [-1:1]\npl \'-' w lp pt 7 ps 0.7\n", t);<br />
for (i = 0; i < L; i++)<br />
{<br />
printf("%lf\t%lf\n", i*dx, u[i]);<br />
}<br />
printf("e\npause 0.1\n");<br />
}*/<br />
printf("set term gif animate\nset o 'Giordano.gif'\n");<br />
// Rotina onda em corda real<br />
for(t = 0; t <= tmax; t+=dt)<br />
{<br />
for(i=1;i<L-1;i++)<br />
{<br />
if(i == 1)<br />
g[i] = (2-2*r*r-6*e*r*r*N*N)*u[i] - h[i] + r*r*(1+4*e*N*N)*(u[i+1]+u[i-1]) - e*r*r*N*N*(u[i+2]+(-u[i]));<br />
else if (i == L-2)<br />
g[i] = (2-2*r*r-6*e*r*r*N*N)*u[i] - h[i] + r*r*(1+4*e*N*N)*(u[i+1]+u[i-1]) - e*r*r*N*N*((-u[i])+u[i-2]);<br />
else<br />
g[i] = (2-2*r*r-6*e*r*r*N*N)*u[i] - h[i] + r*r*(1+4*e*N*N)*(u[i+1]+u[i-1]) - e*r*r*N*N*(u[i+2]+u[i-2]);<br />
}<br />
<br />
for(i=0;i<L;i++)<br />
{<br />
h[i] = u[i];<br />
u[i] = g[i];<br />
}<br />
<br />
if(t > tmax/10.0)<br />
{<br />
printf("\nset grid\nset title 'Tempo = %.5lf'\nset xrange [0:%lf]\nset yrange [-1:1]\npl \'-' t 'Giordano' w l lw 2 \n", t, l-dx);<br />
for (i = 0; i < L; i++)<br />
{<br />
printf("%lf\t%lf\n", i*dx, u[i]);<br />
}<br />
printf("e\npause 0.000001\n");<br />
}<br />
}<br />
<br />
}<br />
</source></div>
Lucasdoria