static void OPS_InvokeMaterialObject(struct matObject *theMat, modelState *theModel,double *strain, double *tang, double *stress, int *isw, int *result) { int matType = theMat->theParam[0]; if (matType == 1) { // UniaxialMaterial *theMaterial = theUniaxialMaterials[matCount]; UniaxialMaterial *theMaterial = (UniaxialMaterial *)theMat->matObjectPtr; if (theMaterial == 0) { *result = -1; return; } if (*isw == ISW_COMMIT) { *result = theMaterial->commitState(); return; } else if (*isw == ISW_REVERT) { *result = theMaterial->revertToLastCommit(); return; } else if (*isw == ISW_REVERT_TO_START) { *result = theMaterial->revertToStart(); return; } else if (*isw == ISW_FORM_TANG_AND_RESID) { double matStress = 0.0; double matTangent = 0.0; int res = theMaterial->setTrial(strain[0], matStress, matTangent); stress[0] = matStress; tang[0] = matTangent; *result = res; return; } } return; }
int OPS_setStrain() { if (OPS_GetNumRemainingInputArgs() != 1) { opserr<<"testUniaxialMaterial - You must provide a strain value.\n"; return -1; } UniaxialMaterial* material = theTestingUniaxialMaterial; if (material == 0) { opserr<<"setStrain WARNING no active UniaxialMaterial - use testUniaxialMaterial command.\n"; return -1; } double strain; int numData = 1; if (OPS_GetDoubleInput(&numData, &strain) < 0) { opserr<<"invalid double value\n"; return -1; } material->setTrialStrain(strain); material->commitState(); return 0; }