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); }