| 157 | } |
| 158 | |
| 159 | int |
| 160 | ResponseSpectrumAnalysis::check() |
| 161 | { |
| 162 | // get the domain |
| 163 | Domain* domain = m_domain; |
| 164 | |
| 165 | |
| 166 | // number of eigen-modes |
| 167 | int num_eigen = domain->getEigenvalues().Size(); |
| 168 | if (num_eigen < 1) { |
| 169 | opserr << "ResponseSpectrumAnalysis::check() - No Eigenvalue provided.\n"; |
| 170 | return -1; |
| 171 | } |
| 172 | |
| 173 | // check consistency |
| 174 | { |
| 175 | const Vector& ev = domain->getEigenvalues(); |
| 176 | if (ev.Size() != mp.eigenvalues().Size()) |
| 177 | return -2; |
| 178 | double tol = std::max(1.0e-15, 1.0e-12 * ev.Norm()); |
| 179 | for (int i = 0; i < ev.Size(); ++i) { |
| 180 | double a = ev(i); |
| 181 | double b = mp.eigenvalues()(i); |
| 182 | if (std::abs(a - b) > tol) |
| 183 | return -2; |
| 184 | } |
| 185 | return 0; |
| 186 | }; |
| 187 | |
| 188 | return 0; |
| 189 | } |
| 190 | |
| 191 | int |
| 192 | ResponseSpectrumAnalysis::beginMode() |