void J2Mat :: computeKGradientVector(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, FloatArray &fullStressVector, const FloatArray &strainSpaceHardeningVariables) { int i, kcount = 0, size = this->giveSizeOfReducedHardeningVarsVector(gp); FloatArray reducedKinematicGrad; if ( !hasHardening() ) { answer.resize(0); return; } answer.resize(size); /* kinematic hardening variables first */ if ( this->kinematicHardeningFlag ) { this->computeReducedStressGradientVector(reducedKinematicGrad, ftype, isurf, gp, fullStressVector, strainSpaceHardeningVariables); kcount = reducedKinematicGrad.giveSize(); for ( i = 1; i <= kcount; i++ ) { answer.at(i) = ( -1.0 ) * this->kinematicModuli * reducedKinematicGrad.at(i); } } if ( this->isotropicHardeningFlag ) { answer.at(size) = ( -1.0 ) * this->isotropicModuli; } }
void J2MPlasticMaterial :: computeHardeningReducedModuli(FloatMatrix &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables, TimeStep *tStep) { /* computes hardening moduli in reduced stress strain space (for kinematic back-stress)*/ int size = this->giveSizeOfReducedHardeningVarsVector(gp); if ( !hasHardening() ) { answer.clear(); return; } answer.resize(size, size); answer.zero(); /* kinematic hardening variables are first */ if ( this->kinematicHardeningFlag ) { int ksize = StructuralMaterial :: giveSizeOfVoigtSymVector( gp->giveMaterialMode() ); for ( int i = 1; i <= ksize; i++ ) { answer.at(i, i) = this->kinematicModuli; } } if ( this->isotropicHardeningFlag ) { answer.at(size, size) = this->isotropicModuli; } }
FloatArray * J2plasticMaterial :: ComputeStressSpaceHardeningVarsReducedGradient(GaussPoint *gp, FloatArray *stressVector, FloatArray *stressSpaceHardeningVars) { /* computes stress space hardening gradient in reduced stress-strain space */ int i, kcount = 0, size = this->giveSizeOfReducedHardeningVarsVector(gp); //double f,ax,ay,az,sx,sy,sz; FloatArray *answer; FloatArray *fullKinematicGradient, reducedKinematicGrad; StructuralCrossSection *crossSection = ( StructuralCrossSection * ) ( gp->giveElement()->giveCrossSection() ); if ( !hasHardening() ) { return NULL; } answer = new FloatArray(size); /* kinematic hardening variables first */ if ( this->kinematicHardeningFlag ) { fullKinematicGradient = this->ComputeStressGradient(gp, stressVector, stressSpaceHardeningVars); crossSection->giveReducedCharacteristicVector(reducedKinematicGrad, gp, * fullKinematicGradient); delete fullKinematicGradient; kcount = reducedKinematicGrad.giveSize(); } if ( this->kinematicHardeningFlag ) { for ( i = 1; i <= kcount; i++ ) { answer->at(i) = reducedKinematicGrad.at(i); } } if ( this->isotropicHardeningFlag ) { answer->at(size) = sqrt(1. / 3.); } return answer; }
FloatArray * J2plasticMaterial :: ComputeStressSpaceHardeningVars(GaussPoint *gp, FloatArray *strainSpaceHardeningVariables) { // in full stress strain space int i; int count = 0, size = this->giveSizeOfFullHardeningVarsVector(), isize, rSize; IntArray mask; if ( !hasHardening() ) { return NULL; } FloatArray *answer = new FloatArray(size); this->giveStressStrainMask( mask, ReducedForm, gp->giveMaterialMode() ); isize = mask.giveSize(); rSize = this->giveSizeOfReducedHardeningVarsVector(gp); /* kinematic hardening variables are first */ if ( this->kinematicHardeningFlag ) { for ( i = 1; i <= isize; i++ ) { // to be consistent with equivalent plastic strain formulation // we multiply by (sqrt(2.)*2./3.) answer->at( mask.at(i) ) = ( sqrt(2.) * 2. / 3. ) * this->kinematicModuli * strainSpaceHardeningVariables->at(i); } count = 6; } if ( this->isotropicHardeningFlag ) { answer->at(count + 1) = this->isotropicModuli * strainSpaceHardeningVariables->at(rSize); } answer->negated(); return answer; }
void J2MPlasticMaterial :: computeStressSpaceHardeningVarsReducedGradient(FloatArray &answer, functType ftype, int isurf, GaussPoint *gp, const FloatArray &stressVector, const FloatArray &stressSpaceHardeningVars) { /* computes stress space hardening gradient in reduced stress-strain space */ int kcount = 0, size = this->giveSizeOfReducedHardeningVarsVector(gp); //double f,ax,ay,az,sx,sy,sz; FloatArray fullKinematicGradient, reducedKinematicGrad; if ( !hasHardening() ) { answer.clear(); return; } answer.resize(size); /* kinematic hardening variables first */ if ( this->kinematicHardeningFlag ) { this->computeStressGradientVector(fullKinematicGradient, ftype, isurf, gp, stressVector, stressSpaceHardeningVars); StructuralMaterial :: giveReducedSymVectorForm( reducedKinematicGrad, fullKinematicGradient, gp->giveMaterialMode() ); kcount = reducedKinematicGrad.giveSize(); } if ( this->kinematicHardeningFlag ) { for ( int i = 1; i <= kcount; i++ ) { answer.at(i) = reducedKinematicGrad.at(i); } } if ( this->isotropicHardeningFlag ) { answer.at(size) = sqrt(1. / 3.); } }
void J2MPlasticMaterial :: computeStressSpaceHardeningVars(FloatArray &answer, GaussPoint *gp, const FloatArray &strainSpaceHardeningVariables) { // in full stress strain space int count = 0, size = this->giveSizeOfFullHardeningVarsVector(), isize, rSize; IntArray mask; if ( !hasHardening() ) { answer.clear(); return; } answer.resize(size); StructuralMaterial :: giveVoigtSymVectorMask( mask, gp->giveMaterialMode() ); isize = mask.giveSize(); rSize = this->giveSizeOfReducedHardeningVarsVector(gp); /* kinematic hardening variables are first */ if ( this->kinematicHardeningFlag ) { for ( int i = 1; i <= isize; i++ ) { // to be consistent with equivalent plastic strain formulation // we multiply by (sqrt(2.)*2./3.) answer.at( mask.at(i) ) = ( sqrt(2.) * 2. / 3. ) * this->kinematicModuli * strainSpaceHardeningVariables.at(i); } count = 6; } if ( this->isotropicHardeningFlag ) { answer.at(count + 1) = this->isotropicModuli * strainSpaceHardeningVariables.at(rSize); } answer.negated(); }