int BasicGFunEvaluator::setTclRandomVariables(const Vector &x) { char theIndex[80]; double xval; RandomVariable *theRV; // Set values of random variables in the Tcl intepreter int nrv = theReliabilityDomain->getNumberOfRandomVariables(); int lsf = theReliabilityDomain->getTagOfActiveLimitStateFunction(); for (int i = 0; i < nrv; i++) { theRV = theReliabilityDomain->getRandomVariablePtrFromIndex(i); int rvTag = theRV->getTag(); xval = x(i); // put in x(1) format sprintf(theIndex,"%d",rvTag); if (Tcl_SetVar2Ex(theTclInterp,"xrv",theIndex,Tcl_NewDoubleObj(xval),TCL_LEAVE_ERR_MSG) == NULL) { opserr << "ERROR GFunEvaluator -- error in setTclRandomVariables xrv" << endln; opserr << theTclInterp->result << endln; return -1; } // put in x(1,lsfTag) format (useful for reporting design point) sprintf(theIndex,"%d,%d",rvTag,lsf); if (Tcl_SetVar2Ex(theTclInterp,"xrv",theIndex,Tcl_NewDoubleObj(xval),TCL_LEAVE_ERR_MSG) == NULL) { opserr << "ERROR GFunEvaluator -- error in setTclRandomVariables xrv" << endln; opserr << theTclInterp->result << endln; return -1; } // for legacy reasons, also put random variables in x_1 format sprintf(theIndex,"x_%d",rvTag); if (Tcl_SetVar2Ex(theTclInterp,theIndex,NULL,Tcl_NewDoubleObj(xval),TCL_LEAVE_ERR_MSG) == NULL) { opserr << "ERROR GFunEvaluator -- error in setTclRandomVariables x" << endln; opserr << theTclInterp->result << endln; return -1; } } return 0; }
int FirstPrincipalCurvature::computeCurvatures() { // "Download" limit-state function from reliability domain int lsfTag = theReliabilityDomain->getTagOfActiveLimitStateFunction(); LimitStateFunction *theLimitStateFunction = theReliabilityDomain->getLimitStateFunctionPtr(lsfTag); int nrv = theReliabilityDomain->getNumberOfRandomVariables(); // Get hold of first principal curvature from functionEvaluator curvatures(0) = theFunctionEvaluator->getResponseVariable("curvatureFORM", lsfTag); // get alpha (can get from FORMAnalysis directly in the future) Vector alpha(nrv); for (int j = 0; j < nrv; j++) { RandomVariable *theRV = theReliabilityDomain->getRandomVariablePtrFromIndex(j); int rvTag = theRV->getTag(); alpha(j) = theFunctionEvaluator->getResponseVariable("alphaFORM", lsfTag, rvTag); } return 0; }