⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 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 + -