| 1147 | } |
| 1148 | |
| 1149 | PyObject *ops_eigenAnalysis(PyObject *self, PyObject *args) |
| 1150 | { |
| 1151 | OPS_ResetCommandLine(PyTuple_Size(args), 0, args); |
| 1152 | |
| 1153 | // check inputs |
| 1154 | int numArgs = OPS_GetNumRemainingInputArgs(); |
| 1155 | if(numArgs < 1) { |
| 1156 | PyErr_SetString(PyExc_RuntimeError,"ERROR eigen('type',numModes) or eigen('PythonSparse',numModes,dict)"); |
| 1157 | return NULL; |
| 1158 | } |
| 1159 | |
| 1160 | // get parameters |
| 1161 | bool generalizedAlgo = true;// 0 - frequency/generalized (default),1 - standard, 2 - buckling |
| 1162 | int typeSolver = EigenSOE_TAGS_ArpackSOE; |
| 1163 | double shift = 0.0; |
| 1164 | bool findSmallest = true; |
| 1165 | int numEigen = 0; |
| 1166 | EigenSOE *providedEigenSOE = nullptr; |
| 1167 | |
| 1168 | // Check if first argument is "PythonSparse" - if so, expect numModes and dict |
| 1169 | std::string firstArg = OPS_GetString(); |
| 1170 | if (firstArg == "PythonSparse" || firstArg == "PythonCompressedSparseEigen") { |
| 1171 | // PythonSparse eigen solver - requires numModes as second argument, dict as third |
| 1172 | // First get numModes |
| 1173 | int numData = 1; |
| 1174 | if(OPS_GetIntInput(&numData,&numEigen) < 0) { |
| 1175 | PyErr_SetString(PyExc_RuntimeError,"ERROR eigen('PythonSparse',numModes,dict) - invalid numModes"); |
| 1176 | return NULL; |
| 1177 | } |
| 1178 | |
| 1179 | // Then get dict argument |
| 1180 | extern void *OPS_SparsePythonEigenSolver(); |
| 1181 | void *eigenSOEPtr = OPS_SparsePythonEigenSolver(); |
| 1182 | if (eigenSOEPtr == NULL) { |
| 1183 | return NULL; |
| 1184 | } |
| 1185 | providedEigenSOE = static_cast<EigenSOE *>(eigenSOEPtr); |
| 1186 | typeSolver = providedEigenSOE->getClassTag(); |
| 1187 | } else { |
| 1188 | // Traditional eigen analysis - parse type and numModes |
| 1189 | // check type of eigenvalue analysis |
| 1190 | if(numArgs > 1) { |
| 1191 | if(firstArg=="frequency"||firstArg=="-frequency"||firstArg=="generalized"||firstArg=="-generalized") { |
| 1192 | generalizedAlgo = true; |
| 1193 | } else if(firstArg=="standard"||firstArg=="-standard") { |
| 1194 | generalizedAlgo = false; |
| 1195 | } else if(firstArg=="-findLargest") { |
| 1196 | findSmallest = false; |
| 1197 | } else if(firstArg=="genBandArpack"||firstArg=="--genBandArpack"|| |
| 1198 | firstArg=="genBandArpackEigen"||firstArg=="-genBandArpackEigen") { |
| 1199 | typeSolver = EigenSOE_TAGS_ArpackSOE; |
| 1200 | } else if(firstArg=="symmBandLapack"||firstArg=="-symmBandLapack"|| |
| 1201 | firstArg=="symmBandLapackEigen"||firstArg=="-symmBandLapackEigen") { |
| 1202 | typeSolver = EigenSOE_TAGS_SymBandEigenSOE; |
| 1203 | } else if(firstArg=="fullGenLapack"||firstArg=="-fullGenLapack"|| |
| 1204 | firstArg=="fullGenLapackEigen"||firstArg=="-fullGenLapackEigen") { |
| 1205 | typeSolver = EigenSOE_TAGS_FullGenEigenSOE; |
| 1206 | } else { |
nothing calls this directly
no test coverage detected