MCPcopy Create free account
hub / github.com/OpenSees/OpenSees / TclCommand_addFiber

Function TclCommand_addFiber

SRC/runtime/commands/modeling/section.cpp:1172–1384  ·  view source on GitHub ↗

Add a fiber to a fiber section

Source from the content-addressed store, hash-verified

1170
1171// Add a fiber to a fiber section
1172int
1173TclCommand_addFiber(ClientData clientData, Tcl_Interp *interp, int argc,
1174 TCL_Char ** const argv)
1175{
1176 enum class Position : int {
1177 Y, Z, Area, Material, End
1178 };
1179 ArgumentTracker<Position> tracker;
1180 std::set<int> positional;
1181
1182 assert(clientData != nullptr);
1183 BasicModelBuilder* builder = static_cast<BasicModelBuilder*>(clientData);
1184
1185 SectionBuilder* fiberSectionRepr = findSectionBuilder(builder, interp, argc, argv);
1186 if (fiberSectionRepr == nullptr) {
1187 opserr << OpenSees::PromptValueError << "cannot retrieve a section builder\n";
1188 return TCL_ERROR;
1189 }
1190
1191 double yLoc, zLoc=0, area;
1192 int matTag;
1193 bool warn_2d_z = false;
1194 static constexpr int WarpModeCount = 3;
1195 double warp[WarpModeCount][3]{};
1196 int warp_arg = -1;
1197 for (int i=1; i<argc; i++) {
1198 if (strcmp(argv[i], "-section") == 0) {
1199 ++i;
1200 }
1201 else if (strcmp(argv[i], "-warp") == 0) {
1202 if (i + 1 >= argc) {
1203 opserr << OpenSees::PromptValueError << "missing warp argument\n";
1204 return TCL_ERROR;
1205 }
1206 warp_arg = i+1;
1207 i++;
1208 }
1209 else if (strcmp(argv[i], "-warn-2d-z") == 0) {
1210 warn_2d_z = true;
1211 i++;
1212 }
1213 else if (strcmp(argv[i], "-material") == 0) {
1214 if (argc == ++i || Tcl_GetInt(interp, argv[i], &matTag) != TCL_OK) {
1215 opserr << OpenSees::PromptValueError << "invalid material tag\n";
1216 return TCL_ERROR;
1217 }
1218 tracker.consume(Position::Material);
1219 }
1220 else if (strcmp(argv[i], "-area") == 0) {
1221 if (argc == ++i || Tcl_GetDouble(interp, argv[i], &area) != TCL_OK) {
1222 opserr << OpenSees::PromptValueError << "invalid area\n";
1223 return TCL_ERROR;
1224 }
1225 tracker.consume(Position::Area);
1226 }
1227 else if (strcmp(argv[i], "-y") == 0) {
1228 if (argc == ++i || Tcl_GetDouble(interp, argv[i], &yLoc) != TCL_OK) {
1229 opserr << OpenSees::PromptValueError << "invalid y coordinate\n";

Callers

nothing calls this directly

Calls 7

findSectionBuilderFunction · 0.85
consumeMethod · 0.80
setWarpingMethod · 0.80
insertMethod · 0.45
currentMethod · 0.45
getNDMMethod · 0.45
addFiberMethod · 0.45

Tested by

no test coverage detected