void proded_perm(argom* arg) { int i,k; int app,proded=1; if(arg->index >= 1) { for(k=arg->index; k >= 0; k--) { app=arg->elementi[k]; arg->elementi[k]=arg->elementi[arg->index]; arg->elementi[arg->index] = app; arg->index--; proded_perm(arg); arg->index++; app=arg->elementi[k]; arg->elementi[k]=arg->elementi[arg->index]; arg->elementi[arg->index] = app; } } else if(2*arg->nperm==fat(arg->dim) && arg->dim!=1) pthread_exit(0); else { arg->nperm++; for(i=0; i < arg->dim; i++) proded=proded*arg->mat[i][arg->elementi[i]-1]; if(classe(arg->elementi , arg->dim)%2!=0) proded=-proded; *arg->det=*arg->det+proded; } }
vpz::BaseModel* ModelFactory::createModelFromClass(Coordinator& coordinator, vpz::CoupledModel* parent, const std::string& classname, const std::string& modelname) { vpz::Class& classe(mClasses.get(classname)); vpz::BaseModel* mdl(classe.model()->clone()); vpz::AtomicModelVector atomicmodellist; vpz::BaseModel::getAtomicModelList(mdl, atomicmodellist); parent->addModel(mdl, modelname); for (vpz::AtomicModelVector::iterator it = atomicmodellist.begin(); it != atomicmodellist.end(); ++it) { createModel(coordinator, *it, (*it)->dynamics(), (*it)->conditions(), (*it)->observables()); } return mdl; }