ISOTROPIC example#
Description#
The following code is for an isotropic hardening model which uses a oobject for describing the model.
Code Listing#
class ISO_FUNCTION_DEMO : public ISOTROPIC_HARDENING {
protected:
PTR<FUNCTION> funk;
double pval;
public:
virtual void initialize(ASCII_FILE& file, MATERIAL_PIECE*);
virtual double radius(double evcum, VECTOR rvalue) {
return ISOTROPIC_HARDENING::radius(evcum, rvalue);
}
virtual double radius_no_r0(double evcum, VECTOR rvalue) {
return ISOTROPIC_HARDENING::radius_no_r0(evcum, rvalue);
}
double radius(double evcum, double rvalue);
double radius_no_r0(double evcum, double rvalue);
double potential_term()const;
double dradius_dflow();
};
DECLARE_OBJECT(ISOTROPIC_HARDENING,ISO_FUNCTION_DEMO,function)
void ISO_FUNCTION_DEMO::initialize(ASCII_FILE& file, MATERIAL_PIECE* mp)
{ ISOTROPIC_HARDENING::initialize(file,mp);
funk = FUNCTION::read(file);
if (funk.if_null()) INPUT_ERROR("Unable to read function");
if (!funk->l_var!=1)
INPUT_ERROR("function can only depend on one parameter : plastic deformation");
}
double ISO_FUNCTION_DEMO::radius(double evcum, double)
{
return funk->compute(evcum);
}
double ISO_FUNCTION_DEMO::radius_no_r0(double,double) { return 0.; }
double ISO_FUNCTION_DEMO::potential_term()const { return 0.; }
double ISO_FUNCTION_DEMO::dradius_dflow()
{ int err; return funk->compute_derivative(0,err); }