Programa de computadora

PROCEDURE Analisis;

{DEBUG}
     LABEL

     1;

     VAR

     w:ARRAY[0..50] OF REAL;

     rx:ARRAY[0..50] OF REAL;

     rz:ARRAY[0..50] OF REAL;

     r:ARRAY[0..50] OF REAL;

     h:ARRAY[0..50] OF REAL;

     Vx:ARRAY[0..50] OF REAL;

     Vz:ARRAY[0..50] OF REAL;

     V:ARRAY[0..50] OF REAL;

     Vu:ARRAY[0..50] OF REAL;

     Mtu:ARRAY[0..50] OF REAL;

     Mtx:ARRAY[0..50] OF REAL;

     Mtz:ARRAY[0..50] OF REAL;

     Mt:ARRAY[0..50] OF REAL;

     cota:ARRAY[0..50] OF REAL;

valor:ARRAY[1..100,1..100] OF STRING;

yy:ARRAY[1..20000] OF REAL;   {Coordenada Y}

     Fn:ARRAY[0..50] OF REAL;

     Altura:ARRAY[0..50] OF REAL;

     Qx,Qz,Q,alt,coef,Ta,Tb,rrr,ww,Qp,sr,profun,rango,campo,sum:REAL;

     i,j,k,nn,m,KCode,col,ren,lon,nudos:INTEGER;

     proyecto,nombre,comentario,region,zona,grupo,regularidad,renglon,carga,salida:STRING;

     alfa,tex,Direccion:STRING;

     ObjectHd:HANDLE;



Procedure Lee(carga:STRING);
     VAR
     dummy:STRING;
     loc:INTEGER;
BEGIN
dummy:='';
loc:=0;
WHILE (loc=0) DO BEGIN
StdReadLn(dummy);
{WriteLn(dummy);}
loc:=POS(carga,dummy);
END;
END;

Procedure Actualizar(carga:STRING);
LABEL
1;
VAR
i,j,kk,referencia,nc,lon,signo:INTEGER;
parte1,parte2,texto:STRING;
BEGIN
Lee(carga);
Lee('JOINT LOAD');
WriteLn('');
WriteLn(carga);
StdReadLn(texto);
WriteLn(texto);
nc:=Str2Num(texto);

FOR i:=1 TO nc DO BEGIN

StdReadLn(texto);
referencia:=Str2Num(Copy(texto,7,6));   {Número del nudo con la carga}

signo:=Str2Num(Copy(texto,campo,12));                          {Signo de la carga}

signo:=ABS(signo)/signo;
FOR j:=1 TO nn DO BEGIN
IF ((yy[referencia]<(Altura[j]+rango)) AND (yy[referencia]>(Altura[j]-rango))) THEN BEGIN
parte1:=Copy(texto,1,12);   {Parte 1}

parte2:=Num2Str(3,signo*Fn[j]);      {Parte 2}
lon:=LEN(parte2);
FOR kk:=1 TO 12-lon DO BEGIN
parte2:=Concat(' ',parte2);
END;
texto:=Concat(parte1,parte2);
WriteLn(texto);
GOTO 1;
END;
END;
1:
END;
END;

Procedure FechaGenesis(lugar,opcion:STRING);

VAR

Fecha,letra,dd,mm,aa,dds,dia:STRING;

NombreMes:ARRAY[1..12] OF STRING;

i:INTEGER;



BEGIN



NombreMes[1]:='Enero';

NombreMes[2]:='Febrero';

NombreMes[3]:='Marzo';

NombreMes[4]:='Abril';

NombreMes[5]:='Mayo';

NombreMes[6]:='Junio';

NombreMes[7]:='Julio';

NombreMes[8]:='Agosto';

NombreMes[9]:='Septiembre';

NombreMes[10]:='Octubre';

NombreMes[11]:='Noviembre';

NombreMes[12]:='Diciembre';



dia:=Copy(Date(0,0),1,3);

IF ((dia ='Mon') OR (dia ='Lun') OR (dia ='mon') OR (dia ='lun')) THEN dds:='Lunes';

IF ((dia ='Tue') OR (dia ='Mar') OR (dia ='tue') OR (dia ='mar')) THEN dds:='Martes';

IF ((dia ='Wed') OR (dia ='Mié') OR (dia ='wed') OR (dia ='mié')) THEN dds:='Miércoles';

IF ((dia ='Thu') OR (dia ='Jue') OR (dia ='thu') OR (dia ='jue')) THEN dds:='Jueves';

IF ((dia ='Fri') OR (dia ='Vie') OR (dia ='fri') OR (dia ='vie')) THEN dds:='Viernes';

IF ((dia ='Sat') OR (dia ='Sáb') OR (dia ='sat') OR (dia ='sáb')) THEN dds:='Sábado';

IF ((dia ='Sun') OR (dia ='Dom') OR (dia ='sun') OR (dia ='dom')) THEN dds:='Domingo';



dd:='';

mm:='';

aa:='';

i:=1;



Fecha:=Date(2,0);

letra:=Copy(Fecha,1,1);



IF ((dia='Mon') OR (dia='Tue') OR (dia='Wed') OR (dia='Thu') OR (dia='Fri') OR (dia='Sat') OR (dia='Sun')) THEN BEGIN



WHILE letra<>'/' DO BEGIN

mm:=Concat(mm,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;



i:=i+1;

letra:=Copy(Fecha,i,1);

WHILE letra<>'/' DO BEGIN

dd:=Concat(dd,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;



i:=i+1;

letra:=Copy(Fecha,i,1);

WHILE letra<>'' DO BEGIN

aa:=Concat(aa,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;

END



ELSE BEGIN

WHILE letra<>'/' DO BEGIN

dd:=Concat(dd,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;



i:=i+1;

letra:=Copy(Fecha,i,1);

WHILE letra<>'/' DO BEGIN

mm:=Concat(mm,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;



i:=i+1;

letra:=Copy(Fecha,i,1);

WHILE letra<>'' DO BEGIN

aa:=Concat(aa,letra);

i:=i+1;

letra:=Copy(Fecha,i,1);

END;

END;





IF opcion='FT' THEN

Fecha:=Concat(dds,', ',dd,' de ',NombreMes[Str2Num(mm)],' de ',Num2Str(0,2000+Str2Num(aa)),', ',Date(0,2))

ELSE

Fecha:=Concat(dds,', ',dd,' de ',NombreMes[Str2Num(mm)],' de ',Num2Str(0,2000+Str2Num(aa)));



SetText(GetObject(lugar),Fecha);



END;







Procedure Texto(nombre:STRING;VAR dato:STRING);

     VAR

     ObjectHd:HANDLE;

BEGIN

ObjectHd:=GetObject(nombre);

dato:=GetText(ObjectHd);

END;



Procedure NumeroR(nombre:STRING;VAR dato:REAL);

     VAR

     ObjectHd:HANDLE;

BEGIN

ObjectHd:=GetObject(nombre);

dato:=Str2Num(GetText(ObjectHd));

END;



Procedure NumeroI(nombre:STRING;VAR dato:INTEGER);

     VAR

     ObjectHd:HANDLE;

BEGIN

ObjectHd:=GetObject(nombre);

dato:=Str2Num(GetText(ObjectHd));

END;



Procedure Acel(grupo:STRING;per,Q,c,Ta,Tb,r:REAL;VAR Qp,a:REAL);

BEGIN

IF (per<=Ta) THEN a:=(1+3*per/Ta)*c/4;

IF ((per>Ta) AND (per<=Tb)) THEN a:=c;

IF (per>Tb) THEN a:=c*(Tb/per)^r;

IF per=100 THEN a:=c;

IF grupo='A' THEN a:=1.5*a;

IF per>=Ta THEN

Qp:=Q

ELSE

Qp:=1+(per/Ta)*(Q-1);

END;



Procedure Tabla(titulo:STRING;x,y:REAL;Columnas,Renglones:INTEGER;Ancho,Alto:REAL;valor:ARRAY[1..100,1..100] OF STRING);

VAR

Tama,Esc: REAL;

i,j:INTEGER;

texto:STRING;

h:Handle;



BEGIN

PushAttrs;

DSelectAll;



h:=ActLayer;

Esc:=GetLScale(h);

Tama:=TRUNC(Alto*14);



BeginGroup;

PenSize(20);

PenPat(2);

FillPat(7);

PenFore(0,61166,0);

PenBack(65535,65535,65535);

FillFore(61166,0,0);

FillBack(65535,65535,65535);

Rect(0-x,0-y,Esc*Columnas*Ancho-x,Esc*1*Alto-y);



TextFont(GetFontID('Times'));

TextSize(Tama+4);

TextFace([]);

TextFlip(0);

TextRotate(0);

TextSpace(2);

TextJust(1);

PenFore(0,0,0);

TextVerticalAlign(1);

TextOrigin(Esc*1-x,Esc*(0.85*Alto)-y);

BeginText;

titulo

EndText;





PenSize(14);

PenPat(2);

FillPat(0);

PenFore(61166,0,0);

PenBack(65535,65535,65535);

FillFore(61166,0,0);

FillBack(65535,65535,65535);

Rect(0-x,0-y,Esc*Columnas*Ancho-x,-Esc*Renglones*Alto-y);

PenFore(0,0,52428);



PenSize(10);

Marker(0,1.930542,15);

FOR i:=1 TO Columnas-1 DO BEGIN

MoveTo(Esc*i*Ancho-x,0-y);

LineTo(Esc*i*Ancho-x,-Esc*Renglones*Alto-y);

END;



FOR i:=1 TO Renglones-1 DO BEGIN

MoveTo(0-x,-Esc*i*Alto-y);

LineTo(Esc*Columnas*Ancho-x,-Esc*i*Alto-y);

END;





TextFont(GetFontID('Times'));

TextSize(Tama+2);

TextFace([]);

TextFlip(0);

TextRotate(0);

TextSpace(2);

TextJust(2);

TextVerticalAlign(1);



FOR i:=1 TO Columnas DO BEGIN

FOR j:=1 TO Renglones DO BEGIN

TextOrigin(Esc*(Ancho/2+(i-1)*Ancho)-x,-Esc*(0.35*Alto+(j-1)*Alto)-y);

BeginText;

valor[j,i]

EndText;

END;

END;



EndGroup;



PopAttrs;



END;



Procedure Calcula;

    LABEL

    3,80,90,100;

    VAR

    P:ARRAY[0..50] OF REAL;   

    ra:ARRAY[0..50] OF REAL;   

    z:ARRAY[0..50,0..50] OF REAL;

    t:ARRAY[0..50] OF REAL;   

    c:ARRAY[0..50] OF REAL;   

    Vo:ARRAY[0..50] OF REAL;   

    ht:ARRAY[0..50] OF REAL;   

    cc:ARRAY[0..50] OF REAL;   

    X:ARRAY[0..50] OF REAL;   

    Xp:ARRAY[0..50] OF REAL;   

    Y:ARRAY[0..50] OF REAL;

    a:ARRAY[0..50,0..50] OF REAL;

    b:ARRAY[0..50,0..50] OF REAL;

    aa:ARRAY[0..50,0..51] OF REAL;

    nr,raiz:INTEGER;

    ran,mu,error,om2,ron,rod,ro,om,w0,cero,pivot,ace,ce,aaa,d1,d2,sv,def:REAL;

    dr,dt,del,SWh,SWh2,fs,fi,TT,qq,k1,k2:REAL;

   

BEGIN

m:=nn+1;

FOR i:=1 TO nn DO BEGIN

FOR j:=1 TO nn DO BEGIN

a[i,j]:=0;

END;

END;

FOR i:=1 TO nn DO BEGIN

a[i,i]:=r[i];

IF i<nn THEN a[i,i]:=a[i,i]+r[i+1];

IF i>1 THEN a[i,i-1]:=-r[i];

IF i<nn THEN a[i,i+1]:=-r[i+1];

END;

FOR i:=1 TO nn DO BEGIN

X[i]:=i;

END;



IF nn>4 THEN

nr:=4

ELSE

nr:=nn;

raiz:=1;

ran:=0;

mu:=0;

error:=0.001;

90:

om2:=0;

80:

FOR i:=1 TO nn DO BEGIN

FOR j:=1 TO nn DO BEGIN

IF i=j THEN

aa[i,j]:=a[i,j]-mu*w[i]/981

ELSE

aa[i,j]:=a[i,j];

END;

END;

FOR i:=1 TO nn DO BEGIN

Xp[i]:=w[i]/981*X[i];

END;



FOR i:=1 TO nn DO BEGIN

aa[i,m]:=Xp[i];

END;





{********************************************}

{Sistema de ecuaciones lineales}

FOR i:=1 TO nn DO BEGIN

pivot:=aa[i,i];

FOR j:=1 TO m DO BEGIN

aa[i,j]:=aa[i,j]/pivot;

END;

FOR k:=1 TO nn DO BEGIN

IF k<>i THEN BEGIN

cero:=aa[k,i];

FOR j:=1 TO m DO BEGIN

aa[k,j]:=aa[k,j]-cero*aa[i,j];

END;

END;

END;

END;

{********************************************}



X[1]:=1;

FOR i:=2 TO nn DO BEGIN

X[i]:=aa[i,m]/aa[1,m];

END;



ron:=0;

rod:=0;

FOR i:=1 TO nn DO BEGIN

ron:=ron+aa[i,m]*Xp[i];

rod:=rod+w[i]/981*aa[i,m]^2;

END;

ro:=ron/rod;

om:=ro+mu;



IF abs(om2-om)>error THEN BEGIN

om2:=om;

GOTO 80;

END

ELSE BEGIN

IF abs(ran-om)>error THEN BEGIN

ran:=om;

ra[raiz]:=om;

error:=om/100;

FOR i:=1 TO nn DO BEGIN

z[i,raiz]:=X[i];

END;

raiz:=raiz+1;



Message('Raíz ' ,Direccion,': ',raiz-1,' = ',6.28/sqrt(om));

SysBeep;

{GetKeyDown(KCode);}



IF raiz>nr THEN GOTO 100;

END;

mu:=mu+1;

GOTO 90;

END;

100:

w0:=0;

FOR i:=1 TO nn DO BEGIN

w0:=w0+w[i];

END;



tex:=Concat('Periodos ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 4 DO BEGIN

LoadCell(i,j,'');

END;

END;



valor[1,1]:='Número';

valor[1,2]:='Periodo';

valor[1,3]:='Frecuencia';

valor[1,4]:='Frecuencia';



valor[2,1]:='del modo';

valor[2,2]:='Natural (seg)';

valor[2,3]:='(Hz)';

valor[2,4]:='Circular (2π/seg)';





FOR i:=1 TO nr DO BEGIN

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

ww:=sqrt(ra[i]);

t[i]:=6.2832/ww;

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,t[i]));valor[2+i,2]:=Num2Str(3,t[i]);

LoadCell(3+i,3,Num2Str(3,1/t[i]));valor[2+i,3]:=Num2Str(3,1/t[i]);

LoadCell(3+i,4,Num2Str(3,ww));valor[2+i,4]:=Num2Str(3,ww);

END;

CloseSS(ObjectHd);



profun:=-0.5-24.73;

Col:=4;

Ren:=nr+2;

Tabla('Periodos y frecuencias.',9.22,profun,Col,Ren,2.8,0.5,valor);





tex:=Concat('Modos ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 5 DO BEGIN

LoadCell(i,j,'');

END;

END;



valor[1,1]:='Número';



valor[2,1]:='del nivel';

valor[2,2]:='Modo 1';

valor[2,3]:='Modo 2';

valor[2,4]:='Modo 3';

valor[2,5]:='Modo 4';



FOR i:=1 TO nn DO BEGIN

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,z[i,1]));valor[2+i,2]:=Num2Str(3,z[i,1]);

LoadCell(3+i,3,Num2Str(3,z[i,2]));valor[2+i,3]:=Num2Str(3,z[i,2]);

LoadCell(3+i,4,Num2Str(3,z[i,3]));valor[2+i,4]:=Num2Str(3,z[i,3]);

LoadCell(3+i,5,Num2Str(3,z[i,4]));valor[2+i,5]:=Num2Str(3,z[i,4]);

END;

CloseSS(ObjectHd);



profun:=profun+0.5*(nn+3);

Col:=5;

Ren:=nr+3;

Tabla('Modos de vibrar de la estructura.',9.22,profun,Col,Ren,2.8,0.5,valor);





tex:=Concat('Espectros ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 2 DO BEGIN

LoadCell(i,j,'');

END;

END;

FOR i:=1 TO nr DO BEGIN



Acel(grupo,t[i],Q,coef,Ta,Tb,rrr,Qp,aaa);





IF i=1 THEN ace:=aaa;

IF regularidad='Irregular' THEN Qp:=0.8*Qp;

c[i]:=aaa;

t[i]:=c[i]*981/Qp;



SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,aaa));valor[2+i,2]:=Num2Str(3,aaa);

END;

CloseSS(ObjectHd);



valor[1,1]:='Número';



valor[2,1]:='del nivel';

valor[2,2]:='Aceleración (g)';



Col:=2;

Ren:=nr+2;

Tabla('Ordenada de los espectros de diseño.',-2.6,-0.50-24.73,Col,Ren,3.5,0.5,valor);





FOR i:=1 TO nr DO BEGIN

d1:=0;

d2:=0;

FOR j:=1 TO nn DO BEGIN

d1:=d1+w[j]/981*z[j,i];

d2:=d2+w[j]/981*z[j,i]^2;

END;

c[i]:=d1/d2;

END;

FOR i:=1 TO nr DO BEGIN

FOR j:=1 TO nn DO BEGIN

z[j,i]:=t[i]*c[i]/ra[i]*z[j,i];

a[j,i]:=z[j,i];

END;

END;

FOR i:=1 TO nr DO BEGIN

FOR j:=nn DOWNTO 2 DO BEGIN

z[j,i]:=z[j,i]-z[j-1,i];

END;

END;

FOR i:=1 TO nn DO BEGIN

FOR j:=1 TO nr DO BEGIN

b[i,j]:=z[i,j];

END;

END;

FOR i:=1 TO nr DO BEGIN

FOR j:=1 TO nn DO BEGIN

z[j,i]:=r[j]*z[j,i];

END;

END;

tex:=Concat('Cortantes ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 5 DO BEGIN

LoadCell(i,j,'');

valor[i,j]:='';

END;

END;



valor[1,1]:='Número';



valor[2,1]:='del modo';

valor[2,2]:='Fuerza 1';

valor[2,3]:='Fuerza 2';

valor[2,4]:='Fuerza 3';

valor[2,5]:='Fuerza 4';



FOR i:=1 TO nn DO BEGIN

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,z[i,1]));valor[2+i,2]:=Num2Str(3,z[i,1]);

LoadCell(3+i,3,Num2Str(3,z[i,2]));valor[2+i,3]:=Num2Str(3,z[i,2]);

LoadCell(3+i,4,Num2Str(3,z[i,3]));valor[2+i,4]:=Num2Str(3,z[i,3]);

LoadCell(3+i,5,Num2Str(3,z[i,4]));valor[2+i,5]:=Num2Str(3,z[i,4]);

END;



FOR i:=1 TO nn DO BEGIN

sv:=0;

FOR j:=1 TO nr DO BEGIN

sv:=sv+z[i,j]^2;

END;

Vo[i]:=sqrt(sv);

END;



Ren:=nn+3;



SprdAlign(1);

IF (Vo[1]<=0.8*ace*w0/Qp) THEN BEGIN

LoadCell(4+nn,1,'Se aumentan las fuerzas cortantes por 0.8*a*Wo/Q’/Vo.');

valor[Ren,2]:='Se aumentan las fuerzas cortantes por 0.8*a*Wo/Q’/Vo.';

FOR j:=1 TO nn DO BEGIN

ra[i]:=Vo[i]*0.8*ace*w0/Qp/Vo[1];

END;

END

ELSE BEGIN

LoadCell(4+nn,1,'No se aumentan las fuerzas cortantes.');

valor[Ren,2]:='No se aumentan las fuerzas cortantes.';

END;

CloseSS(ObjectHd);



profun:=profun+0.5*(nn+3);

Col:=5;

Tabla('Matriz de cortantes (Ton).',9.22,profun,Col,Ren,2.8,0.5,valor);





FOR i:=1 TO nn-1 DO BEGIN

P[i]:=Vo[i]-Vo[i+1];

END;

P[nn]:=Vo[nn];

tex:=Concat('Totales ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 5 DO BEGIN

LoadCell(i,j,'');

valor[i,j]:='';

END;

END;



valor[1,1]:='Número';

valor[1,2]:='Cortante';

valor[1,3]:='Fuerza';

valor[1,4]:='Vn';

valor[1,5]:='Mtn';





valor[2,1]:='del nivel';

valor[2,2]:='Ton';

valor[2,3]:='Ton';

valor[2,4]:='kg';

valor[2,5]:='kg-m';



FOR i:=1 TO nn DO BEGIN

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,Vo[i]));valor[2+i,2]:=Num2Str(3,Vo[i]);

LoadCell(3+i,3,Num2Str(3,P[i]));valor[2+i,3]:=Num2Str(3,P[i]);

LoadCell(3+i,4,Num2Str(3,P[i]*Vu[i]*1000));valor[2+i,4]:=Num2Str(3,P[i]*Vu[i]*1000);Fn[i]:=P[i]*Vu[i]*1000;

LoadCell(3+i,5,Num2Str(3,P[i]*Mtu[i]*1000));valor[2+i,5]:=Num2Str(3,P[i]*Mtu[i]*1000);

END;

CloseSS(ObjectHd);


{******************************************************************}

Actualizar (carga);

{******************************************************************}


profun:=profun+0.5*(nn+4);

Col:=5;

Ren:=nn+2;

Tabla('Cortante, fuerzas totales y fuerzas en cada nudo..',9.22,profun,Col,Ren,2.8,0.5,valor);





FOR i:=1 TO nn DO BEGIN

sv:=0;

FOR j:=1 TO nr DO BEGIN

sv:=sv+b[i,j]^2;

END;

ra[i]:=sqrt(sv);

END;

tex:=Concat('Desplazamientos ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=4 TO 23 DO BEGIN

FOR j:=1 TO 5 DO BEGIN

LoadCell(i,j,'');

END;

END;



valor[1,1]:='Número';

valor[1,2]:='Relativos';

valor[1,3]:='Totales';

valor[1,4]:='De requisito';

valor[1,5]:='De entrepiso';



valor[2,1]:='del nivel';

valor[2,2]:='cm';

valor[2,3]:='cm';

valor[2,4]:='cm';

valor[2,5]:='∆x/h';



def:=0;

FOR i:=1 TO nn DO BEGIN

sv:=0;

FOR j:=1 TO nr DO BEGIN

sv:=sv+a[i,j]^2;

END;

dr:=sqrt(sv);

dt:=dr*Q;

def:=dt-def;

del:=def/h[i];

def:=dt;

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(3+i,1,Num2Str(0,i));valor[2+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(3+i,2,Num2Str(3,ra[i]));valor[2+i,2]:=Num2Str(3,ra[i]);

LoadCell(3+i,3,Num2Str(3,dr));valor[2+i,3]:=Num2Str(3,dr);

LoadCell(3+i,4,Num2Str(3,dt));valor[2+i,4]:=Num2Str(3,dt);

LoadCell(3+i,5,Num2Str(4,del));valor[2+i,5]:=Num2Str(4,del);

END;

CloseSS(ObjectHd);



profun:=profun+0.5*(nn+3);

Col:=5;

Ren:=nn+2;

Tabla('Desplazamientos.',9.22,profun,Col,Ren,2.8,0.5,valor);



Acel(grupo,100,Q,coef,Ta,Tb,rrr,Qp,aaa);



ht[1]:=h[1];

FOR i:=2 TO nn DO BEGIN

ht[i]:=ht[i-1]+h[i];

END;

SWh:=0;

SWh2:=0;

FOR i:=1 TO nn DO BEGIN

SWh:=SWh+w[i]*ht[i];

SWh2:=SWh2+w[i]*ht[i]^2;

END;

FOR i:=1 TO nn DO BEGIN

P[i]:=aaa/Qp*w[i]*ht[i]*w0/SWh;

END;

Vo[nn]:=P[nn];

FOR i:=nn DOWNTO 2 DO BEGIN

Vo[i-1]:=Vo[i]+P[i-1];

END;

X[1]:=Vo[1]/r[1];

FOR i:=2 TO nn DO BEGIN

X[i]:=X[i-1]+Vo[i]/r[i];

END;

fs:=0;

fi:=0;

FOR i:=1 TO nn DO BEGIN

fs:=fs+w[i]*X[i]^2;

fi:=fi+P[i]*X[i];

END;

TT:=6.3*sqrt(fs/fi/981);



tex:=Concat('Estático ',Direccion);

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

SprdWidth(10);

FOR i:=8 TO 26 DO BEGIN

FOR j:=1 TO 3 DO BEGIN

LoadCell(i,j,'');

END;

END;

LoadCell(3,1,'');

LoadCell(4,1,'');

LoadCell(5,1,'');



FOR i:=1 TO nn+3 DO BEGIN

FOR j:=1 TO 3 DO BEGIN

valor[i,j]:= '';

END;

END;





SprdAlign(2);

tex:=Concat('Periodo fundamental de vibración: ',Num2Str(3,TT),' seg.');

LoadCell(2,1,tex);

valor[1,2]:= tex;





Acel(grupo,TT,Q,coef,Ta,Tb,rrr,Qp,aaa);



tex:=Concat('Aceleración de diseño “a”: ',Num2Str(3,aaa));

LoadCell(3,1,tex);

valor[2,2]:= tex;



IF TT<=Tb THEN BEGIN

tex:=Concat('Se reducen las fuerzas cortantes. Se multiplican por “a”.');

LoadCell(4,1,tex);

valor[3,2]:= tex;



FOR i:=1 TO nn DO BEGIN

P[i]:=aaa/Qp*w[i]*ht[i]*w0/SWh;

END;

Vo[nn]:=P[nn];

FOR i:=nn DOWNTO 2 DO BEGIN

Vo[i-1]:=Vo[i]+P[i-1];

END;

END

ELSE BEGIN

tex:=Concat('Se reducen las fuerzas cortantes. Se multiplican por k1hi+k2hi^2.');

LoadCell(4,1,tex);

valor[4,2]:= tex;



valor[5,1]:='Número';

valor[5,2]:='Cortante';

valor[5,3]:='Fuerza';



valor[6,1]:='del nivel';

valor[6,2]:='Ton';

valor[6,3]:='Ton';



qq:=(Tb/TT)^rrr;

k1:=qq*(1-rrr*(1-qq))*w0/SWh;

k2:=1.5*rrr*qq*(1-qq)*w0/SWh2;

FOR i:=1 TO nn DO BEGIN

P[i]:=k1*aaa/Qp*w[i]*ht[i]+k2*aaa/Qp*w[i]*ht[i]^2;

END;

Vo[nn]:=P[nn];

FOR i:=nn DOWNTO 2 DO BEGIN

Vo[i-1]:=Vo[i]+P[i-1];

END;

END;



FOR i:=1 TO nn DO BEGIN

SprdAlign(4);

SprdFormat(0,0,'','');

LoadCell(7+i,1,Num2Str(0,i));valor[3+i,1]:=Num2Str(0,i);

SprdAlign(3);

SprdFormat(1,3,'','');

LoadCell(7+i,2,Num2Str(3,Vo[i]));valor[3+i,2]:=Num2Str(3,Vo[i]);

LoadCell(7+i,3,Num2Str(3,P[i]));valor[3+i,3]:=Num2Str(3,P[i]);

END;

CloseSS(ObjectHd);



profun:=profun+0.5*(nn+3);

Col:=3;

Ren:=nn+3;

Tabla('RESULTADOS DEL ANALISIS ESTATICO.',9.22,profun,Col,Ren,2.8,0.5,valor);





END;


{PROGRAMA PRINCIPAL}

BEGIN

SetCursor(WatchC);

TextFont(20);

TextSize(10);

TextFace([]);

TextSpace(2);

TextJust(2);



SetTool(2);

NumeroI('pisos',nn);

Texto('proyecto',proyecto);

Texto('nombre',nombre);

Texto('comentario',comentario);

Texto('region',region);

Texto('zona',zona);

Texto('grupo',grupo);

Texto('regularidad',regularidad);

NumeroR('Qx',Qx);

NumeroR('Qz',Qz);

Texto('nombre',nombre);
NumeroR('rango',rango);

{*************** Generación de fuerzas cortantes para Multiframe y lectura de coordenadas *************** }

Open(nombre);

ReadLn(renglon);

ReadLn(renglon);

ReadLn(renglon);

ReadLn(nudos);

FOR i:=1 TO nudos DO BEGIN

StdReadLn(renglon);

yy[i]:=Str2Num(Copy(renglon,31,12));   {Coordenada Y}

END;



lon:=LEN(nombre);
salida:=nombre;
Insert('-sismo',salida,lon-3);
Rewrite (salida);


WriteLn(salida);
WriteLn(Date(2,0));


tex:='Rigideces';

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

sum:=0;
FOR i:=1 TO nn DO BEGIN

w[i]:=GetCellNum(ObjectHd,i+3,2);

rx[i]:=GetCellNum(ObjectHd,i+3,3);

rz[i]:=GetCellNum(ObjectHd,i+3,4);

h[i]:=GetCellNum(ObjectHd,i+3,5);

sum:=sum+h[i];
Altura[i]:=sum;
END;



FOR i:=1 TO nn+2 DO BEGIN

FOR j:=1 TO 5 DO BEGIN

valor[i,j]:=GetCellStr(ObjectHd,i+1,j);

END;

END;

CloseSS(ObjectHd);



Layer('Parámetros');

DSelectAll;

SelectObj((N='PRH'));

DeleteObjs;

Tabla('Pesos, rigideces y alturas de entrepiso.',8.9,0.5-24.73,5,nn+2,2.8,0.5,valor);

SetName(LNewObj,'PRH');



tex:='Fuerzas';

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

FOR i:=1 TO nn DO BEGIN

Vx[i]:=GetCellNum(ObjectHd,i+3,2);

Vz[i]:=GetCellNum(ObjectHd,i+3,3);

Mtx[i]:=GetCellNum(ObjectHd,i+3,4);

Mtz[i]:=GetCellNum(ObjectHd,i+3,5);

END;

CloseSS(ObjectHd);



tex:='Espectros';

ObjectHd:=GetObject(tex);

SelectSS(ObjectHd);

tex:=GetCellStr(ObjectHd,1,1);

i:=1;

WHILE tex<>region DO BEGIN

i:=i+1;

tex:=GetCellStr(ObjectHd,i,1);

END;

WHILE tex<>zona DO BEGIN

i:=i+1;

tex:=GetCellStr(ObjectHd,i,1);

END;

coef:=GetCellNum(ObjectHd,i,2);

Ta:=GetCellNum(ObjectHd,i,3);

Tb:=GetCellNum(ObjectHd,i,4);

rrr:=GetCellNum(ObjectHd,i,5);

CloseSS(ObjectHd);



Message('DIRECCION X');

Direccion:='X';
carga:='F. Sismica en X';campo:=49;

ObjectHd:=GetObject('Fuerzas');

SelectSS(ObjectHd);

FOR i:=1 TO nn DO BEGIN

Vu[i]:=GetCellNum(ObjectHd,i+3,2);

Mtu[i]:=GetCellNum(ObjectHd,i+3,4);

END;

CloseSS(ObjectHd);

Q:=Qx;

FOR i:=1 TO nn DO BEGIN

r[i]:=rx[i];

V[i]:=Vx[i];

Mt[i]:=Mtx[i];

END;



Layer('Resultados X');

SelectAll;

DeleteObjs;

Calcula;





Message('DIRECCION Z');

Direccion:='Z';
carga:='F. Sismica en Z';campo:=74;

ObjectHd:=GetObject('Fuerzas');

SelectSS(ObjectHd);

FOR i:=1 TO nn DO BEGIN

Vu[i]:=GetCellNum(ObjectHd,i+3,3);

Mtu[i]:=GetCellNum(ObjectHd,i+3,5);

END;

CloseSS(ObjectHd);

Q:=Qz;

FOR i:=1 TO nn DO BEGIN

r[i]:=rz[i];

V[i]:=Vz[i];

Mt[i]:=Mtz[i];

END;

DSelectAll;



Layer('Resultados Z');

SelectAll;

DeleteObjs;

Calcula;

DSelectAll;



FechaGenesis('Fecha2','FT');



Layer('Resultados X');

DoMenuTextByName('Fit to Window',0);

SysBeep;

1:

ClrMessage;

END;

RUN(Analisis);

© Copyright Proyectos Atomo 26, S.A. de C.V. All rights reserved Ing. Juan Aladasoro Robles
www.atomo26.com  Contacto: proyectos@atomo26.com



Ir Arriba

Procedimiento para calcular las fuerzas sísmicas para edificio por el método dinámico modal

© Copyright Proyectos Atomo 26, S.A. de C.V.
www.atomo26.com  Contacto: proyectos@atomo26.com


Ir a página principa