int SectionAggregator::commitSensitivity(const Vector& defSens, int gradIndex, int numGrads) { int ret = 0; int i = 0; dedh = defSens; int theSectionOrder = 0; if (theSection) { theSectionOrder = theSection->getOrder(); Vector dedh(workArea, theSectionOrder); for (i = 0; i < theSectionOrder; i++) dedh(i) = defSens(i); ret = theSection->commitSensitivity(dedh, gradIndex, numGrads); } int order = theSectionOrder + numMats; for ( ; i < order; i++) ret += theAdditions[i-theSectionOrder]->commitSensitivity(defSens(i), gradIndex, numGrads); return ret; }
int DispBeamColumn2d::getResponseSensitivity(int responseID, int gradNumber, Information &eleInfo) { // Basic deformation sensitivity if (responseID == 3) { const Vector &dvdh = crdTransf->getBasicDisplSensitivity(gradNumber); return eleInfo.setVector(dvdh); } // Basic force sensitivity else if (responseID == 9) { static Vector dqdh(3); dqdh.Zero(); return eleInfo.setVector(dqdh); } // dsdh else if (responseID == 76) { int sectionNum = eleInfo.theInt; int order = theSections[sectionNum-1]->getOrder(); const ID &code = theSections[sectionNum-1]->getType(); Vector dsdh(order); dsdh = theSections[sectionNum-1]->getStressResultantSensitivity(gradNumber, true); const Vector &v = crdTransf->getBasicTrialDisp(); const Vector &dvdh = crdTransf->getBasicDisplSensitivity(gradNumber); double L = crdTransf->getInitialLength(); double oneOverL = 1.0/L; const Matrix &ks = theSections[sectionNum-1]->getSectionTangent(); Vector dedh(order); //const Matrix &pts = quadRule.getIntegrPointCoords(numSections); double xi[maxNumSections]; beamInt->getSectionLocations(numSections, L, xi); double x = xi[sectionNum-1]; //double xi6 = 6.0*pts(i,0); double xi6 = 6.0*x; int j; for (j = 0; j < order; j++) { switch(code(j)) { case SECTION_RESPONSE_P: dedh(j) = oneOverL*dvdh(0); break; case SECTION_RESPONSE_MZ: dedh(j) = oneOverL*((xi6-4.0)*dvdh(1) + (xi6-2.0)*dvdh(2)); break; default: dedh(j) = 0.0; break; } } dsdh.addMatrixVector(1.0, ks, dedh, 1.0); return eleInfo.setVector(dsdh); } else return -1; }