00001
00013 #include "pmsmDS.h"
00014 #include <uibuilder.h>
00015
00016 class UIpmsmIM: public UIbuilder {
00017 protected:
00018 static void tmp_set ( Setting &S, IMpmsm* IM ) {
00019
00020 IM->set_parameters ( S["Rs"], S["Ls"], 125e-6, S["Fmag"], S["kp"], S["p"], \
00021 S["J"], 0.0 );
00022 };
00023 public:
00024 UIpmsmIM():UIbuilder("pmsmIM"){};
00025 bdmroot* build ( Setting &S ) const {
00026 IMpmsm* tmp;
00027
00028 if (S.exists("variant")){
00029 string var=S["variant"];
00030 if (var=="Stat"){tmp=new IMpmsmStat;}
00031 if (var=="2o"){tmp=new IMpmsm2o;}
00032 if (var=="Mz"){tmp=new IMpmsmMz;}
00033 if (var=="StatMz"){tmp=new IMpmsmStatMz;}
00034 } else {
00035 tmp= new IMpmsm;
00036 }
00037
00038 UIcall<IMpmsm*> ( S["params"], &tmp_set , tmp );
00039 return tmp;
00040 }
00041 };
00042 UIREGISTER ( UIpmsmIM );
00043
00045 class UIpmsmOM: public UIbuilder {
00046 public:
00047 UIpmsmOM():UIbuilder("pmsmOM"){};
00048 bdmroot* build ( Setting &S ) const {
00049 return new OMpmsm;
00050 }
00051 };
00052 UIREGISTER ( UIpmsmOM );
00053
00054
00055 class UIpmsmOM4: public UIbuilder {
00056 public:
00057 UIpmsmOM4():UIbuilder("pmsmOM4"){};
00058 bdmroot* build ( Setting &S ) const {
00059 return new OMpmsm4;
00060 }
00061 };
00062 UIREGISTER ( UIpmsmOM4 );
00063
00064
00066 class UIpmsmDS: public UIbuilder {
00067 static void tmp_set ( Setting &S, pmsmDS* DS ) {
00068
00069 DS->set_parameters ( S["Rs"], S["Ls"], S["Fmag"], S["Bf"], S["p"], S["kp"], \
00070 S["J"], S["Uc"], S["DT"], 1.0e-6 );
00071 };
00072 public:
00073 UIpmsmDS() :UIbuilder ( "pmsmDS" ) {};
00074 bdmroot* build ( Setting &S ) const {
00075 pmsmDS* tmp = new pmsmDS ( );
00076
00077 UIcall<pmsmDS*> ( S["params"], &tmp_set , tmp );
00078
00079
00080 vec profW=vec("1.0");
00081 vec profM=vec("0.0");
00082 double tstep=1.0;
00083
00084 if ( S.exists ( "tstep" ) ) {tstep=S["tstep"];}
00085 if ( S.exists ( "profileW" ) ) {profW=getvec ( S["profileW"] ) ;}
00086 if ( S.exists ( "profileM" ) ) {profM=getvec ( S["profileM"] ) ;}
00087
00088 tmp->set_profile (tstep , profW, profM);
00089
00090 string opts="";
00091 if ( S.exists ( "options" ) ) {opts=(const char*)S["options"];}
00092 tmp->set_options(opts);
00093
00094 return tmp;
00095 };
00096
00097 };
00098 UIREGISTER ( UIpmsmDS );
00099
00100 class UIpmsmCRB: public UIbuilder {
00101 public:
00102 UIpmsmCRB():UIbuilder("pmsmCRB"){};
00103 bdmroot* build ( Setting &S ) const {
00104 diffbifn* IM; UIbuild(S["IM"],IM);
00105 diffbifn* OM; UIbuild(S["OM"],OM);
00106
00107
00108 pmsmCRB* E; E=new pmsmCRB;
00109
00110
00111 int dim=IM->dimension();
00112 vec mu0;
00113 mat P0;
00114 if (S.exists("mu0")){mu0=getvec(S["mu0"]);}else{mu0=zeros(dim);};
00115 if (S.exists("dP0")){P0=diag(getvec(S["dP0"]));}else{
00116 if (S.exists("P0")){mu0=getmat(S["P0"],dim);}else{P0=eye(dim);};
00117 }
00118 E->set_statistics(mu0,P0);
00119
00120 E->set_parameters(IM, OM, diag(getvec(S["dQ"])), diag(getvec(S["dR"])));
00121
00122
00123 RV* drv; UIbuild(S["drv"],drv);
00124 E->set_drv(*drv);
00125 RV* rv; UIbuild(S["rv"],rv);
00126 E->set_rv(*rv);
00127 return E;
00128 }
00129 };
00130 UIREGISTER ( UIpmsmCRB );
00131
00132 class UIpmsmCRBMz: public UIbuilder {
00133 public:
00134 UIpmsmCRBMz():UIbuilder("pmsmCRBMz"){};
00135 bdmroot* build ( Setting &S ) const {
00136 diffbifn* IM; UIbuild(S["IM"],IM);
00137 diffbifn* OM; UIbuild(S["OM"],OM);
00138
00139
00140 pmsmCRBMz* E; E=new pmsmCRBMz;
00141
00142
00143 int dim=IM->dimension();
00144 vec mu0;
00145 mat P0;
00146 if (S.exists("mu0")){mu0=getvec(S["mu0"]);}else{mu0=zeros(dim);};
00147 if (S.exists("dP0")){P0=diag(getvec(S["dP0"]));}else{
00148 if (S.exists("P0")){mu0=getmat(S["P0"],dim);}else{P0=eye(dim);};
00149 }
00150 E->set_statistics(mu0,P0);
00151
00152 E->set_parameters(IM, OM, diag(getvec(S["dQ"])), diag(getvec(S["dR"])));
00153
00154
00155 RV* drv; UIbuild(S["drv"],drv);
00156 E->set_drv(*drv);
00157 RV* rv; UIbuild(S["rv"],rv);
00158 E->set_rv(*rv);
00159 return E;
00160 }
00161 };
00162 UIREGISTER ( UIpmsmCRBMz );