00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00032
00033
00034 #ifndef VM_PF_CPP
00035 #define VM_PF_CPP
00036
00037 #include "VM_PF.h"
00038
00039 straintensor VM_PF::VMm;
00040 stresstensor VM_PF::VMb;
00041
00042
00043 VM_PF::VM_PF(int alpha_which_in, int index_alpha_in)
00044 : alpha_which(alpha_which_in), index_alpha(index_alpha_in)
00045 {
00046
00047 }
00048
00049
00050 VM_PF::~VM_PF()
00051 {
00052
00053 }
00054
00055
00056 PlasticFlow* VM_PF::newObj()
00057 {
00058 PlasticFlow *new_PF = new VM_PF(alpha_which, index_alpha);
00059
00060 return new_PF;
00061 }
00062
00063
00064 const straintensor& VM_PF::PlasticFlowTensor(const stresstensor &Stre,
00065 const straintensor &Stra,
00066 const MaterialParameter &MaterialParameter_in) const
00067 {
00068 if (alpha_which == -1) {
00069 VMm = Stre.deviator() *3.0;
00070 return VMm;
00071 }
00072 if (alpha_which == 2) {
00073 stresstensor s_back = getalpha(MaterialParameter_in);
00074 stresstensor s_bar = Stre.deviator() - s_back;
00075 VMm = s_bar *3.0;
00076 return VMm;
00077 }
00078 else {
00079 opserr << "Warning!! VM_PF: Invalid Input Parameter. " << endln;
00080 exit (1);
00081 }
00082 }
00083
00084
00085 const stresstensor& VM_PF::getalpha(const MaterialParameter &MaterialParameter_in) const
00086 {
00087
00088 if ( alpha_which == 2 && index_alpha <= MaterialParameter_in.getNum_Internal_Tensor() && index_alpha > 0) {
00089 VMb = MaterialParameter_in.getInternal_Tensor(index_alpha-1);
00090 return VMb;
00091 }
00092
00093 opserr << "Warning!! VM_PF: Invalid Input. " << endln;
00094 exit (1);
00095 }
00096
00097 #endif
00098