Skip to content

Commit

Permalink
Add getNodeLoadData output command
Browse files Browse the repository at this point in the history
  • Loading branch information
sewkokot committed Oct 29, 2021
1 parent e68925b commit 9ba82f1
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 2 deletions.
2 changes: 0 additions & 2 deletions SRC/domain/node/NodalLoad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,8 +334,6 @@ NodalLoad::applyLoad(Vector& loadFactors) {

const Vector&
NodalLoad::getData(int& type) {
// Vector* Empty = new Vector();
// return *Empty;
return *load;
}

Expand Down
1 change: 1 addition & 0 deletions SRC/interpreter/OpenSeesCommands.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ int OPS_getEleLoadClassTags();
int OPS_getEleLoadTags();
int OPS_getEleLoadData();
int OPS_getNodeLoadTags();
int OPS_getNodeLoadData();
// Sensitivity:END /////////////////////////////////////////////

/* OpenSeesMiscCommands.cpp */
Expand Down
72 changes: 72 additions & 0 deletions SRC/interpreter/OpenSeesOutputCommands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3575,6 +3575,78 @@ int OPS_getNodeLoadTags()
return 0;
}

int OPS_getNodeLoadData()
{
Domain* theDomain = OPS_GetDomain();
if (theDomain == 0) return -1;

int numdata = OPS_GetNumRemainingInputArgs();

std::vector <double> data;

if (numdata < 1) {
LoadPattern *thePattern;
LoadPatternIter &thePatterns = theDomain->getLoadPatterns();

int typeEL;

while ((thePattern = thePatterns()) != 0) {
NodalLoadIter &theNodLoads = thePattern->getNodalLoads();
NodalLoad* theNodLoad;

while ((theNodLoad = theNodLoads()) != 0) {
const Vector &nodeLoadData = theNodLoad->getData(typeEL);

int nodeLoadDataSize = nodeLoadData.Size();
for (int i = 0; i < nodeLoadDataSize; i++) {
data.push_back(nodeLoadData(i));
}
}
}

} else if (numdata == 1) {

int patternTag;
if (OPS_GetIntInput(&numdata, &patternTag) < 0) {
opserr << "could not read patternTag\n";
return -1;
}

LoadPattern* thePattern = theDomain->getLoadPattern(patternTag);
if (thePattern == nullptr) {
opserr << "ERROR load pattern with tag " << patternTag << " not found in domain -- getNodeLoadData\n";
return -1;
}
NodalLoadIter& theNodLoads = thePattern->getNodalLoads();
NodalLoad* theNodLoad;

int typeEL;

while ((theNodLoad = theNodLoads()) != 0) {
const Vector &nodeLoadData = theNodLoad->getData(typeEL);

int nodeLoadDataSize = nodeLoadData.Size();
for (int i = 0; i < nodeLoadDataSize; i++) {
data.push_back(nodeLoadData(i));
}
}

} else {
opserr << "WARNING want - getNodeLoadData <patternTag?>\n";
return -1;
}

int size = data.size();

if (OPS_SetDoubleOutput(&size, data.data(), false) < 0) {
opserr << "WARNING failed to set output\n";
return -1;
}

return 0;
}


int OPS_getNumElements()
{
Domain* theDomain = OPS_GetDomain();
Expand Down
13 changes: 13 additions & 0 deletions SRC/interpreter/PythonWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2100,6 +2100,18 @@ static PyObject *Py_ops_getNodeLoadTags(PyObject *self, PyObject *args)
return wrapper->getResults();
}

static PyObject *Py_ops_getNodeLoadData(PyObject *self, PyObject *args)
{
wrapper->resetCommandLine(PyTuple_Size(args), 1, args);

if (OPS_getNodeLoadData() < 0) {
opserr<<(void*)0;
return NULL;
}

return wrapper->getResults();
}

static PyObject *Py_ops_randomVariable(PyObject *self, PyObject *args)
{
wrapper->resetCommandLine(PyTuple_Size(args), 1, args);
Expand Down Expand Up @@ -2519,6 +2531,7 @@ PythonWrapper::addOpenSeesCommands()
addCommand("getEleLoadTags", &Py_ops_getEleLoadTags);
addCommand("getEleLoadData", &Py_ops_getEleLoadData);
addCommand("getNodeLoadTags", &Py_ops_getNodeLoadTags);
addCommand("getNodeLoadData", &Py_ops_getNodeLoadData);
addCommand("randomVariable", &Py_ops_randomVariable);
addCommand("getRVTags", &Py_ops_getRVTags);
addCommand("getMean", &Py_ops_getRVMean);
Expand Down
10 changes: 10 additions & 0 deletions SRC/interpreter/TclWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1370,6 +1370,15 @@ static int Tcl_ops_getNodeLoadTags(ClientData clientData, Tcl_Interp *interp, in
return TCL_OK;
}

static int Tcl_ops_getNodeLoadData(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv)
{
wrapper->resetCommandLine(argc, 1, argv);

if (OPS_getNodeLoadData() < 0) return TCL_ERROR;

return TCL_OK;
}

static int Tcl_ops_randomVariable(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv)
{
wrapper->resetCommandLine(argc, 1, argv);
Expand Down Expand Up @@ -1721,6 +1730,7 @@ TclWrapper::addOpenSeesCommands(Tcl_Interp* interp)
addCommand(interp,"getEleLoadTags", &Tcl_ops_getEleLoadTags);
addCommand(interp,"getEleLoadData", &Tcl_ops_getEleLoadData);
addCommand(interp,"getNodeLoadTags", &Tcl_ops_getNodeLoadTags);
addCommand(interp,"getNodeLoadData", &Tcl_ops_getNodeLoadData);
addCommand(interp,"randomVariable", &Tcl_ops_randomVariable);
addCommand(interp,"getRVTags", &Tcl_ops_getRVTags);
addCommand(interp,"getMean", &Tcl_ops_getRVMean);
Expand Down
68 changes: 68 additions & 0 deletions SRC/tcl/commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1038,6 +1038,8 @@ int OpenSeesAppInit(Tcl_Interp *interp) {
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Tcl_CreateCommand(interp, "getNodeLoadTags", &getNodeLoadTags,
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Tcl_CreateCommand(interp, "getNodeLoadData", &getNodeLoadData,
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);

Tcl_CreateCommand(interp, "sdfResponse", &sdfResponse,
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
Expand Down Expand Up @@ -9197,6 +9199,72 @@ getNodeLoadTags(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **
return TCL_OK;
}

int
getNodeLoadData(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv)
{

if (argc == 1) {
LoadPattern *thePattern;
LoadPatternIter &thePatterns = theDomain.getLoadPatterns();

char buffer[40];
int typeEL;

while ((thePattern = thePatterns()) != 0) {
NodalLoadIter &theNodeLoads = thePattern->getNodalLoads();
NodalLoad *theNodLoad;

while ((theNodLoad = theNodeLoads()) != 0) {
const Vector &eleLoadData = theNodLoad->getData(typeEL);

int eleLoadDataSize = eleLoadData.Size();
opserr << "eleLoadDataSize: "<< eleLoadDataSize << "\n";
for (int i = 0; i < eleLoadDataSize; i++) {
sprintf(buffer, "%35.20f ", eleLoadData(i));
Tcl_AppendResult(interp, buffer, NULL);
}
}
}

} else if (argc == 2) {
int patternTag;

if (Tcl_GetInt(interp, argv[1], &patternTag) != TCL_OK) {
opserr << "WARNING getNodeLoadData -- could not read patternTag \n";
return TCL_ERROR;
}

LoadPattern *thePattern = theDomain.getLoadPattern(patternTag);
if (thePattern == nullptr) {
opserr << "ERROR load pattern with tag " << patternTag << " not found in domain -- getNodeLoadData\n";
return TCL_ERROR;
}

NodalLoadIter theNodeLoads = thePattern->getNodalLoads();
NodalLoad* theNodLoad;

int typeEL;
char buffer[40];

while ((theNodLoad = theNodeLoads()) != 0) {
const Vector &eleLoadData = theNodLoad->getData(typeEL);

int eleLoadDataSize = eleLoadData.Size();
for (int i = 0; i < eleLoadDataSize; i++) {
sprintf(buffer, "%35.20f ", eleLoadData(i));
Tcl_AppendResult(interp, buffer, NULL);
}

}

} else {
opserr << "WARNING want - getNodeLoadTags <patternTag?>\n" << endln;
return TCL_ERROR;
}

return TCL_OK;
}

int
getEleTags(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv)
{
Expand Down
3 changes: 3 additions & 0 deletions SRC/tcl/commands.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,9 @@ getEleLoadData(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **a
int
getNodeLoadTags(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv);

int
getNodeLoadData(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv);

int
startTimer(ClientData clientData, Tcl_Interp *interp, int argc, TCL_Char **argv);

Expand Down

0 comments on commit 9ba82f1

Please sign in to comment.