#ifndef __STRINTERF_H__ #define __STRINTERF_H__ #include #include "stringo.h" #include "xtalutil.h" #include "opti.h" int num_strain_dim(int n); void Array6_to_Matrix3d(rMatrix3d *pm, const Array &x, int dimstrain); void Matrix3d_to_Array6(Array *px, const rMatrix3d &m, int dimstrain); class OptimizedStructure: public FunctionWithGrad { Real val; Array grad; rVector3d sumpos; Real stressscale; Real strainscale; int dimstrain; public: rMatrix3d axes; Structure str; Array atom_label; int sleeptime; public: OptimizedStructure(void); ~OptimizedStructure(void); void init(Array *px, const rMatrix3d &_axes, const Structure &_str, const Array &_atom_label, Real forcefact=1., int _dimstrain=3); void vect_to_str(Structure *pstr, const Array &x); void set_arg(const Array &x); Real get_val(void) const {return val;} void get_grad(Array *pgrad) const {*pgrad=grad;} }; class SmallEpicycle: public FunctionWithGrad { FunctionWithGrad *pfunc; Array c; Array s; Array g0; Array df; Real e; public: SmallEpicycle(FunctionWithGrad *_pfunc): FunctionWithGrad(), c(), s(), g0(), df() {pfunc=_pfunc;} void init(const Array _c); void get_grad_org(Array *pg) {*pg=g0;} void set_arg(const Array &_s); Real get_val(void) const {return e;} void get_grad(Array *pdf) const {*pdf=df;} }; #endif