@@ -31,8 +31,21 @@ int OPS_sdfResponse()
3131
3232 int numOptionalArgs = 0 ;
3333 int numArgs = OPS_GetNumRemainingInputArgs ();
34+ double t_end = 0.0 ; bool t_end_specified = false ;
3435 while (OPS_GetNumRemainingInputArgs () > 0 ) {
3536 std::string type = OPS_GetString ();
37+ if (type == " -tend" ) {
38+ numOptionalArgs++;
39+ if (OPS_GetNumRemainingInputArgs () > 0 ) {
40+ numData = 1 ;
41+ if (OPS_GetDoubleInput (&numData, &t_end) < 0 ) {
42+ opserr << " ERROR sdfResponse - failed to read tend" << endln;
43+ return 0 ;
44+ }
45+ numOptionalArgs++;
46+ t_end_specified = true ;
47+ }
48+ }
3649 if (type == " -uresid" || type == " -uresidual" ) {
3750 numOptionalArgs++;
3851 if (OPS_GetNumRemainingInputArgs () > 0 ) {
@@ -64,8 +77,8 @@ int OPS_sdfResponse()
6477
6578 if (numArgs < 7 || numArgs > 8 ) {
6679 opserr << " Incorrect number of arguments to sdfResponse --" ;
67- opserr << " m, zeta, k, Fy, alpha, dtF, filename, dt, <-uresidual, uresid, -umaxprev, umaxp>" << endln;
68- opserr << " m, zeta, k, Fy, alpha, tsTag, dt, <-uresidual, uresid, -umaxprev, umaxp>" << endln;
80+ opserr << " m, zeta, k, Fy, alpha, dtF, filename, dt, <-uresidual, uresid, -umaxprev, umaxp, -tend, tend >" << endln;
81+ opserr << " m, zeta, k, Fy, alpha, tsTag, dt, <-uresidual, uresid, -umaxprev, umaxp, -tend, tend >" << endln;
6982 return -1 ;
7083 }
7184
@@ -171,7 +184,7 @@ int OPS_sdfResponse()
171184 int i = 0 ;
172185 double ft, u=0 , du, v, a, fs, zs, ftrial, kT , kTeff , dg, phat, R, R0 , accel;
173186 double time = accelSeries->getStartTime ();
174- double Tend = accelSeries->getDuration ();
187+ double Tend = t_end_specified ? t_end : accelSeries->getDuration ();
175188 while (time < Tend) {
176189
177190 ft = accelSeries->getFactor (time);
0 commit comments