| 77 | } |
| 78 | |
| 79 | int |
| 80 | ResponseSpectrumAnalysis::analyze() |
| 81 | { |
| 82 | // get the domain |
| 83 | Domain* domain = m_domain; |
| 84 | |
| 85 | // size info |
| 86 | int num_eigen = domain->getEigenvalues().Size(); |
| 87 | |
| 88 | // check consistency |
| 89 | int error_code; |
| 90 | error_code = check(); |
| 91 | if (error_code < 0) |
| 92 | return error_code; |
| 93 | |
| 94 | // loop over all required eigen-modes, compute the modal displacement |
| 95 | // and save the results. |
| 96 | // we just compute modal displacements without doing any (SRSS, CQC, etc..) |
| 97 | // modal combination otherwise derived results cannot be computed. |
| 98 | // for each mode, this analysis produces a new analysis step. |
| 99 | // modal combination of displacements (or any derived results) |
| 100 | // it's up to the user. |
| 101 | for (m_current_mode = 0; m_current_mode < num_eigen; ++m_current_mode) |
| 102 | { |
| 103 | // init the new step |
| 104 | error_code = beginMode(); |
| 105 | if (error_code < 0) return error_code; |
| 106 | |
| 107 | // compute modal acceleration for this mode using the |
| 108 | // provided response spectrum function (time series) |
| 109 | error_code = solveMode(); |
| 110 | if (error_code < 0) return error_code; |
| 111 | |
| 112 | // done with the current step. |
| 113 | // here the modal displacements will be recorded (and all other results |
| 114 | // if requested via recorders...) |
| 115 | error_code = endMode(); |
| 116 | if (error_code < 0) return error_code; |
| 117 | } |
| 118 | |
| 119 | return 0; |
| 120 | } |
| 121 | |
| 122 | int |
| 123 | ResponseSpectrumAnalysis::analyze(int mode_id) |
no test coverage detected