This command creates a scope where the following commands behave differently: - load - sp
| 82 | // - load |
| 83 | // - sp |
| 84 | int |
| 85 | TclCommand_addPattern(ClientData clientData, Tcl_Interp *interp, int argc, |
| 86 | TCL_Char ** const argv) |
| 87 | { |
| 88 | assert(clientData != nullptr); |
| 89 | BasicModelBuilder *builder = static_cast<BasicModelBuilder*>(clientData); |
| 90 | Domain* domain = builder->getDomain(); |
| 91 | LoadPattern *thePattern = nullptr; |
| 92 | |
| 93 | // make sure at least one other argument to contain integrator |
| 94 | if (argc < 3) { |
| 95 | opserr << OpenSees::PromptValueError << "invalid command - want: pattern type "; |
| 96 | opserr << " <type args> {list of load and sp constraints commands}\n"; |
| 97 | opserr << " valid types: Plain, UniformExcitation, MultiSupport\n"; |
| 98 | return TCL_ERROR; |
| 99 | } |
| 100 | |
| 101 | int commandEndMarker = 3; |
| 102 | |
| 103 | TimeSeries *theSeries = nullptr; |
| 104 | |
| 105 | int patternID; |
| 106 | if (Tcl_GetInt(interp, argv[2], &patternID) != TCL_OK) { |
| 107 | opserr << OpenSees::PromptValueError << "invalid patternID: " << argv[2] << "\n"; |
| 108 | return TCL_ERROR; |
| 109 | } |
| 110 | |
| 111 | if (strcmp(argv[1], "Plain") == 0) { |
| 112 | if (argc < 4) { |
| 113 | opserr << OpenSees::PromptValueError << "Invalid command for Plain pattern.\n"; |
| 114 | return TCL_ERROR; |
| 115 | } |
| 116 | |
| 117 | double fact = 1.0; |
| 118 | const char* series_arg = nullptr; |
| 119 | |
| 120 | while (commandEndMarker < argc) { |
| 121 | if ((strcmp(argv[commandEndMarker], "-fact") == 0) || |
| 122 | (strcmp(argv[commandEndMarker], "-factor") == 0)) { |
| 123 | |
| 124 | if (Tcl_GetDouble(interp, argv[++commandEndMarker], &fact) != TCL_OK) { |
| 125 | opserr << OpenSees::PromptValueError |
| 126 | << "invalid factor: " << argv[commandEndMarker] << "\n"; |
| 127 | return TCL_ERROR; |
| 128 | } |
| 129 | commandEndMarker++; |
| 130 | |
| 131 | } else if (series_arg == nullptr) { |
| 132 | series_arg = argv[commandEndMarker]; |
| 133 | commandEndMarker++; |
| 134 | |
| 135 | } else { |
| 136 | break; |
| 137 | } |
| 138 | } |
| 139 | |
| 140 | thePattern = new LoadPattern(patternID, fact); |
| 141 | theSeries = TclSeriesCommand(clientData, interp, series_arg); |
nothing calls this directly
no test coverage detected