mObject patternsToJSON(void) { LoadPatternIter &thePatterns = theDomain.getLoadPatterns(); LoadPattern *thePattern; TimeSeries *theSeries; NodalLoadIter *nli; NodalLoad *nload; const Vector *load_vec; // TODO: // ElementalLoadIter *eli; // SP_ConstraintIter *spci; mObject patterns, pattern, nloads; mArray arr; mValue tmp, tmp2, tmp3; char tag_str[15]; int i, size; patterns.clear(); while ((thePattern = thePatterns()) != 0) { pattern.clear(); // TODO: tmp = thePattern->getClassType(); pattern["type"] = tmp; theSeries = thePattern->getTimeSeries(); tmp2 = theSeries->getTag(); sprintf(tag_str, "%d", tmp2.get_int()); pattern["tsTag"] = tag_str; nli = &(thePattern->getNodalLoads()); nloads.clear(); while((nload = (*nli)()) != 0) { tmp2 = nload->getNodeTag(); sprintf(tag_str, "%d", tmp2.get_int()); load_vec = nload->getLoadValue(); size = load_vec->Size(); arr.clear(); for (i = 0; i < size; i++) { tmp3 = (*load_vec)(i); arr.push_back(tmp3); } nloads[tag_str] = arr; } pattern["nodalLoads"] = nloads; tmp2 = thePattern->getTag(); sprintf(tag_str, "%d", tmp2.get_int()); patterns[tag_str] = pattern; } return patterns; }
int PFEMIntegrator::formSensitivityRHS(int passedGradNumber) { sensitivityFlag = 1; // Set a couple of data members gradNumber = passedGradNumber; // Get pointer to the SOE LinearSOE *theSOE = this->getLinearSOE(); // Get the analysis model AnalysisModel *theModel = this->getAnalysisModel(); // Randomness in external load (including randomness in time series) // Get domain Domain *theDomain = theModel->getDomainPtr(); // Loop through nodes to zero the unbalaced load Node *nodePtr; NodeIter &theNodeIter = theDomain->getNodes(); while ((nodePtr = theNodeIter()) != 0) nodePtr->zeroUnbalancedLoad(); // Loop through load patterns to add external load sensitivity LoadPattern *loadPatternPtr; LoadPatternIter &thePatterns = theDomain->getLoadPatterns(); double time; while((loadPatternPtr = thePatterns()) != 0) { time = theDomain->getCurrentTime(); loadPatternPtr->applyLoadSensitivity(time); } // Randomness in element/material contributions // Loop through FE elements FE_Element *elePtr; FE_EleIter &theEles = theModel->getFEs(); while((elePtr = theEles()) != 0) { theSOE->addB( elePtr->getResidual(this), elePtr->getID() ); } // Loop through DOF groups (IT IS IMPORTANT THAT THIS IS DONE LAST!) DOF_Group *dofPtr; DOF_GrpIter &theDOFs = theModel->getDOFs(); while((dofPtr = theDOFs()) != 0) { theSOE->addB( dofPtr->getUnbalance(this), dofPtr->getID() ); } // Reset the sensitivity flag sensitivityFlag = 0; return 0; }