function [coord,conect,coordint,ccontag]=lee_msuite(Nombre) % ------------------------------------------------------------------------- % Lee archivos de salida de msuite y lo convierte en un modelo de BEM % En esta version de asignan condiciones de contorno tipo Robin a los % agujeros en el dominio. Estos se identifican como los contornos con % numeros mayores que uno por el msuite. % ------------------------------------------------------------------------- % --------------------------------- Datos --------------------------------- % Nombre: nombre del ejemplo % paso: paso de optimizacion % conect[]: conectividad de los elementos % coord[]: coordenadas de los nodos % coordint[]: coordenadas de los puntos internos % Los archivos de salida del msuite son nombrados de acuerdo a la siguiente % convencion % red_0.dat Contorno externo % red_1.dat, red_2.dat, red_n.dat Contorno de los n agujeros en el dominio % ----------------------- Lee datos del contorno externo ------------------ % Abre archivo de datos archivo=[Nombre,'_bdry.dat']; fid = fopen(archivo,'r'); nnodos=fscanf(fid,'%i'); % Numero de nodos nada=fscanf(fid,'%s',4); % Lee coordenadas de los nodos for i=1:nnodos nada=fscanf(fid,'%i',1); % Numero de nodo coord(i,1)=fscanf(fid,'%f',1); % Coordenada x coord(i,2)=fscanf(fid,'%f',1); % Coordenada y % nada=fscanf(fid,'%f',1); % Parametro h end % Lee conectividad nelem=fscanf(fid,'%i'); % Numero de elementos nada=fscanf(fid,'%s',3); % Lee conectividad for i=1:nelem nada=fscanf(fid,'%i',1); % Numero de elemento conect(i,1)=fscanf(fid,'%i',1)+1; % Primer nodo conect(i,2)=fscanf(fid,'%i',1)+1; % Segundo nodo nada=fscanf(fid,'%f',1); % Info auxiliar end status=fclose(fid) % ------------------------- Lee datos de los agujeros --------------------- % Lee la informacion de tantos contornos como archivos con el nombre % red_n.dat se encuentren en el directorio fid=0; agujeros=0; ccontag=[]; ncontag=0; while fid~=-1 agujeros=agujeros+1; archivo=[Nombre,'_',num2str(agujeros),'.dat']; fid=fopen(archivo); if fid==-1 continue end nnodos_agujero=fscanf(fid,'%i'); % Numero de nodos nada=fscanf(fid,'%c',13); % Lee coordenadas de los nodos for i=1:nnodos_agujero nada=fscanf(fid,'%i',1); % Numero de nodo coord(nnodos+i,1)=fscanf(fid,'%f',1); % Coordenada x coord(nnodos+i,2)=fscanf(fid,'%f',1); % Coordenada y nada=fscanf(fid,'%f',1); % Parametro h end % Lee conectividad nelem_agujero=fscanf(fid,'%i'); % Numero de elementos nada=fscanf(fid,'%c',10); % Lee conectividad y asigna condiciones de contorno for i=1:nelem_agujero nada=fscanf(fid,'%i',1); % Numero de elemento conect(nelem+i,1)=nnodos+fscanf(fid,'%i',1)+1; % Primer nodo conect(nelem+i,2)=nnodos+fscanf(fid,'%i',1)+1; % Segundo nodo end nelem=nelem+nelem_agujero; nnodos=nnodos+nnodos_agujero; status=fclose(fid); end % ---------------------- Lee datos de puntos internos --------------------- % Lee puntos en el interior del dominio archivo=[Nombre,'.xy']; fid=fopen(archivo,'r'); eofstat = feof(fid); ninternos=0; while eofstat~=1 aux1=fscanf(fid,'%f',1); % Coordenada x aux2=fscanf(fid,'%f',1); % Coordenada y flag=fscanf(fid,'%i',1); % Flag 0:interior 268435456:contorno if flag==0 ninternos=ninternos+1; coordint(ninternos,1)=aux1; coordint(ninternos,2)=aux2; end eofstat = feof(fid); end status=fclose(fid); % ----------------------------- Grafica BEM mesh -------------------------- figure(3); hold off %plot(coord(:,1),coord(:,2),'o','MarkerSize',1.5); % Nodos plot(coord(:,1),coord(:,2),'o',1.5); % Nodos %axis equal; xmax=max(coord(:,1)); xmin=min(coord(:,1)); ymax=max(coord(:,2)); ymin=min(coord(:,2)); axis([xmin-0.1*(xmax-xmin) xmax+0.1*(xmax-xmin) ymin-0.1*(ymax-ymin) ... ymax+0.1*(ymax-ymin)]); %axis off; title('BEM mesh'); hold on; for i=1:nelem % Elementos plot([coord(conect(i,1),1) coord(conect(i,2),1)] ,[coord(conect(i,1),2) ... coord(conect(i,2),2)],'b') end % Grafica normales externas de los elementos % for i=1:nelem % tx=coord(conect(i,2),1)- coord(conect(i,1),1); % Componentes del vector tangente % ty=coord(conect(i,2),2)- coord(conect(i,1),2); % nx=ty; % Componentes del vector normal % ny=-tx; % modn=sqrt(nx^2+ny^2); % Modulo del vector normal % lx=xmax-xmin; % nx=0.03*lx*nx/modn; % Escala modulo para graficar % ny=0.03*lx*ny/modn; % xm=coord(conect(i,1),1)+(coord(conect(i,2),1)- coord(conect(i,1),1))/2; % Punto medio del elemento % ym=coord(conect(i,1),2)+(coord(conect(i,2),2)- coord(conect(i,1),2))/2; % plot([xm xm+nx],[ym ym+ny],'Color','red'); % end % Grafica puntos internos plot(coordint(:,1),coordint(:,2),'o'); drawnow; jjj=8787