Plantilla de Programas Semana 1

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 3

Código FreeFEM de deflexión estática de la losa:

Nombre sugerido del programa: def-estat-losa-2d.edp

mesh Th=square(80,20,[4*x,y]);
plot(Th,wait=true);
fespace Vh(Th, P1);
func b=1.;
Vh u,v;
real rho=2400;
real E= 32e9;
real nu =.17;
real mu = E/(2.*(1.+nu));
problem Poisson(u, v, solver=LU)
= int2d(Th)(
mu*(dx(u)*dx(v)
+ dy(u)*dy(v))
)
+ int2d(Th)(
rho*b*v
)
+on(1,2,3,4,u=0);
Poisson;
plot(u,fill=1,dim=3);
Código FreeFEM de deflexión dinámica ondulatoria de la losa:
Nombre sugerido del programa: def-onda-losa-2d.edp

include "ffmatlib.idp"
mesh Th=square(80,20,[4*x,y]);
real tmax=.0501, dt=0.0001,idt=1/(2*dt), idt2=1/dt^2;
fespace Vh(Th, P1);
func g=0.;
Vh ut,vt,u0=-x*(x-4)*y*(y-1)*(exp(-9*((x-.5)^2 + (y-.5)^2))
+exp(-9*((x-3.5)^2 + (y-.5)^2))),u1=u0+dt*g;
real rho=2400;
real E= 32e9;
real nu =.17;
real mu = E/(2.*(1.+nu));
real c=sqrt(mu/rho);
macro grad(u) [dx(u), dy(u)]//EOM
problem Wave(ut,vt)=
int2d(Th)(idt2*ut*vt)
-int2d(Th)(2*idt2*u1*vt)
+int2d(Th)(idt2*u0*vt)
+int2d(Th)(.5*c^2*grad(ut)'*grad(vt))
+int2d(Th)(.5*c^2*grad(u0)'*grad(vt))
+on(1,2,3,4,ut=0);
int iter=0,
nplot=1;
verbosity=0;
int save=0;
savemesh(Th,"wave2d.msh");
ffSaveVh(Th,Vh,"wave2d_vh.txt");
for (real t=0;t<=tmax;t+=dt)
{
iter++;
Wave;
if(!(iter%nplot))
{
plot(ut,cmm="Wave t="+t,fill=1,dim=3);
cout <<"t="<<t<<" u min= "<< ut[].min<<" u max="<< ut[].max <<endl;
ffSaveData(ut,"wave2d_"+save+".txt");
save++;
}
u0=u1;
u1=ut;
}
Código Octave de deflexión estática de la losa:
Nombre sugerido del programa: LosaOnda2d.m
Ejemplo de ejecución: >> [p,b,t,xh,W]=LosaOnda2d(501,2);

function [p,b,t,xh,W]=LosaOnda2d(N,samplesize)

addpath('ffmatlib');
[p,b,t,nv,nbe,nt,labels]=ffreadmesh('wave2d.msh');

[xh]=ffreaddata('wave2d_vh.txt');

n=N;
w=[];
W=w;

[xmesh,~,ymesh,~]=prepare_mesh(p,t);
x=linspace(0,4,40);
y=linspace(0,1,10);
[xx,yy]=meshgrid(x,y);
Z=zeros(size(xx));

for j = 0:(n-1)
if (mod(j-1,samplesize-1)==0)
w_name = sprintf('wave2d_%i.txt', j);
[w]=ffreaddata(w_name);
%W=[W,w];
[~,pdeData]=convert_pde_data(p,t,xh,w');
w=fftri2grid(xx,yy,xmesh,ymesh,pdeData{1});
W=[W,w(:)];
h=waitbar(j/n);
end
end
close(h);
[n1,n2]=size(xx);

for k=1:N,
h=waitbar(k/N);
surf(xx,yy,reshape(W(:,k),n1,n2));
axis([0 4 0 1 -.5 .5]);
axis equal;
shading interp;
camlight headlight;
lighting gouraud;
pause(.1);
end
close(h);

También podría gustarte