📄 input-modal-analysis
字号:
/*
* ================================================================
* Input file for Modal Analysis
* ================================================================
*/
/*
* [a] : Setup Matrix for Piece-wise linear approximation to earthquake
* acceleration Spectra
*
* Column 1 : Natural Period (sec)
* Column 2 : Spectral Acceleration (at 2% damping)
*/
print "*** ACCELERATION SPECTRA FOR MODAL ANALYSIS \n";
print "*** ======================================= \n";
npoints = 18;
spectra = Matrix( [ npoints , 2] );
spectra = ColumnUnits( spectra, [sec], [1]);
spectra = ColumnUnits( spectra, [cm/sec^2], [2]);
spectra [ 1][1] = 0.0 sec; spectra [ 1][2] = 981.0*0.15 cm/sec/sec;
spectra [ 2][1] = 0.1 sec; spectra [ 2][2] = 981.0*0.18 cm/sec/sec;
spectra [ 3][1] = 0.2 sec; spectra [ 3][2] = 981.0*0.25 cm/sec/sec;
spectra [ 4][1] = 0.3 sec; spectra [ 4][2] = 981.0*0.35 cm/sec/sec;
spectra [ 5][1] = 0.4 sec; spectra [ 5][2] = 981.0*0.45 cm/sec/sec;
spectra [ 6][1] = 0.5 sec; spectra [ 6][2] = 981.0*0.45 cm/sec/sec;
spectra [ 7][1] = 0.6 sec; spectra [ 7][2] = 981.0*0.35 cm/sec/sec;
spectra [ 8][1] = 0.8 sec; spectra [ 8][2] = 981.0*0.30 cm/sec/sec;
spectra [ 9][1] = 1.0 sec; spectra [ 9][2] = 981.0*0.25 cm/sec/sec;
spectra [10][1] = 1.2 sec; spectra [10][2] = 981.0*0.15 cm/sec/sec;
spectra [11][1] = 1.4 sec; spectra [11][2] = 981.0*0.14 cm/sec/sec;
spectra [12][1] = 1.6 sec; spectra [12][2] = 981.0*0.13 cm/sec/sec;
spectra [13][1] = 1.8 sec; spectra [13][2] = 981.0*0.12 cm/sec/sec;
spectra [14][1] = 2.0 sec; spectra [14][2] = 981.0*0.10 cm/sec/sec;
spectra [15][1] = 2.4 sec; spectra [15][2] = 981.0*0.08 cm/sec/sec;
spectra [16][1] = 2.8 sec; spectra [16][2] = 981.0*0.06 cm/sec/sec;
spectra [17][1] = 3.2 sec; spectra [17][2] = 981.0*0.05 cm/sec/sec;
spectra [18][1] = 3.4 sec; spectra [18][2] = 981.0*0.04 cm/sec/sec;
PrintMatrix( spectra );
/* [b] : Setup mass and stiffness matrices */
k1 = 20 kN/cm; k2 = 20 kN/cm; k3 = 20 kN/cm;
stiff = ColumnUnits( Matrix([3,3]), [ N/m ] );
stiff[1][1] = k1 + k2; stiff[1][2] = - k2; stiff[1][3] = 0.0 N/m;
stiff[2][1] = - k2; stiff[2][2] = k2 + k3; stiff[2][3] = - k3;
stiff[3][1] = 0.0 N/m; stiff[3][2] = - k3; stiff[3][3] = k3;
mass = ColumnUnits( Matrix([3,3]), [ kg ] );
mass[1][1] = 2000 kg;
mass[2][2] = 2000 kg;
mass[3][3] = 2000 kg;
PrintMatrix( stiff, mass );
/* [c] : Calculate natural periods of vibration and mode shapes */
no_eigen = 3;
eigen = Eigen( stiff, mass, [ no_eigen ] );
eigenvalue = Eigenvalue( eigen );
eigenvector = Eigenvector ( eigen );
period = ColumnUnits( Matrix( [ no_eigen,1 ] ), [ sec ] );
for( ii = 1; ii <= no_eigen; ii = ii + 1 ) {
period [ii][1] = 2*PI/sqrt(eigenvalue[ii][1]);
}
print "\n";
for( ii = 1; ii <= no_eigen; ii = ii + 1 ) {
print "Mode", ii, " : w^2 = ", eigenvalue[ii][1];
print " T = ", period [ii][1], "\n";
}
PrintMatrix( period );
PrintMatrix( eigenvector );
/* [d] : Find Spectral Accelerations at Modal Periods */
SpectralAccn = ColumnUnits( Matrix( [ no_eigen,1 ] ), [ m/sec^2 ] );
for( ii = 1; ii <= no_eigen; ii = ii + 1 ) {
for( ij = 1; ij < npoints; ij = ij + 1 ) {
period1 = spectra [ ij][1];
period2 = spectra [ij+1][1];
if(period [ii][1] >= period1 && period [ii][1] < period2 ) {
dAccn = spectra [ij+1][2] - spectra [ij][2];
dPeriod = (period [ii][1] - period1)/(period2 - period1);
SpectralAccn[ii][1] = spectra [ij][2] + dPeriod*dAccn;
}
}
}
PrintMatrix( SpectralAccn );
/* [e] : Generalised mass, stiffness, and loading matrices */
eigenTrans = Trans (eigenvector);
gmass = eigenTrans*mass*eigenvector;
gstiff = eigenTrans*stiff*eigenvector;
gload = eigenTrans*mass*[ 1; 1; 1 ];
PrintMatrix( gmass, gstiff, gload );
/* [f] : Compute and print floor level displacements */
Y = ColumnUnits( Matrix([no_eigen,no_eigen]), [ m ] );
for( ii = 1; ii <= no_eigen; ii = ii + 1 ) {
Y [ii][ii] = (gload[ii][1]/gmass[ii][ii]) *
(SpectralAccn[ii][1]/eigenvalue[ii][1]);
}
modaldispl = ColumnUnits ( eigenvector*Y, [cm]);
PrintMatrix( Y , modaldispl );
print "\n";
print "Maximum Likely Floor Displacements (using SRSS) \n";
print "=============================================== \n\n";
print " Floor Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 m^2;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
sum = sum + modaldispl [ii][ik] * modaldispl [ii][ik];
}
print sqrt(sum) (cm);
}
print "\n";
}
print "\n";
print "Maximum Possible Floor Displacements (absolute values) \n";
print "====================================================== \n\n";
print " Floor Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 cm;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
sum = sum + abs( modaldispl [ii][ik] );
}
print sum (cm);
}
print "\n";
}
/* [g] : Compute and print story drifts */
print "\n";
print "Maximum Likely Story Drifts (using SRSS) \n";
print "======================================== \n\n";
print " Story Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 cm^2;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
if (ii == 1) then {
sum = sum + modaldispl[1][ik]^2;
} else {
sum = sum + (modaldispl [ii][ik] - modaldispl [ii-1][ik])^2;
}
}
print sqrt(sum) (cm);
}
print "\n";
}
print "\n";
print "Maximum Possible Story Drifts (absolute values) \n";
print "=============================================== \n\n";
print " Story Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 cm;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
if (ii == 1) then {
sum = sum + abs (modaldispl[1][ik]);
} else {
sum = sum + abs((modaldispl [ii][ik] - modaldispl [ii-1][ik]));
}
}
print sum (cm);
}
print "\n";
}
/* [h] : Compute and print maximum (absolute) floor accelerations */
print "\n";
print "Maximum Likely Absolute Floor Accelerations (using SRSS) \n";
print "========================================================\n\n";
print " Floor Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 m^2/sec^4;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
sum = sum + (modaldispl [ii][ik] * eigenvalue [ik][1])^2;
}
sum = sum + ( spectra[1][2] )^2;
print sqrt(sum) (cm/sec/sec);
}
print "\n";
}
print "\n";
print "Maximum Possible Absolute Floor Accelerations (absolute values) \n";
print "===============================================================\n\n";
print " Floor Mode Modes Modes\n";
print " No 1 1 & 2 1, 2 and 3\n";
for( ii = 1; ii <= 3; ii = ii + 1 ) {
print ii;
for( ij = 1; ij <= no_eigen; ij = ij + 1 ) {
sum = 0.0 m/sec^2;
for( ik = 1; ik <= ij; ik = ik + 1 ) {
sum = sum + abs((modaldispl [ii][ik] * eigenvalue [ik][1]));
}
sum = sum + spectra[1][2];
print sum (cm/sec/sec);
}
print "\n";
}
/* [i] : Compute and print equivalent d.o.f. forces in each mode */
print "\n";
print "Inertia Forces for each mode \n";
print "============================ \n\n";
inertia_forces = stiff*modaldispl;
PrintMatrix( inertia_forces );
/* [j] : Compute and print base shear force */
print "\n";
print "Shear Forces (at base of the structure) \n";
print "======================================= \n\n";
base_shear_forces = [1,1,1] * inertia_forces;
PrintMatrix( base_shear_forces );
shear1 = 0.0 N^2; shear2 = 0.0 N;
for ( ii = 1; ii <= 3; ii = ii + 1 ) {
shear1 = shear1 + base_shear_forces[ 1 ][ ii ]^2;
shear2 = shear2 + abs( base_shear_forces[ 1 ][ ii ] );
}
print "\n";
print "Base Shear Force : Maximum Likely = ", sqrt(shear1) ,"\n";
print " : Maximum Possible = ", shear2 ,"\n";
/* [k] : Compute and print overturning moments */
print "\n";
print "Overturning Moments (at base of the structure) \n";
print "============================================== \n\n";
floor_heights = [3 m, 6 m, 9 m];
base_overturning_moments = floor_heights * inertia_forces;
PrintMatrix( base_overturning_moments );
mom1 = 0.0 (N*m)^2; mom2 = 0.0 N*m;
for ( ii = 1; ii <= 3; ii = ii + 1 ) {
mom1 = mom1 + base_overturning_moments[ 1 ][ ii ]^2;
mom2 = mom2 + abs( base_overturning_moments[ 1 ][ ii ] );
}
print "\n";
print "Overturning Moments : Maximum Likely = ", sqrt(mom1) ,"\n";
print " : Maximum Possible = ", mom2 ,"\n";
quit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -