OrientationSphere::OrientationSphere(const ActionOptions&ao): Action(ao), MultiColvarFunction(ao) { // Resize everything that stores a vector now that we know the // number of components unsigned ncomponents=getBaseMultiColvar(0)->getNumberOfQuantities() - 5; catom_orient.resize( ncomponents ); catom_der.resize( ncomponents ); this_orient.resize( ncomponents ); // Weight of this does not have derivatives weightHasDerivatives=false; // Read in the switching function std::string sw, errors; parse("SWITCH",sw); if(sw.length()>0){ switchingFunction.set(sw,errors); } else { double r_0=-1.0, d_0; int nn, mm; parse("NN",nn); parse("MM",mm); parse("R_0",r_0); parse("D_0",d_0); if( r_0<0.0 ) error("you must set a value for R_0"); switchingFunction.set(nn,mm,r_0,d_0); } log.printf(" degree of overlap in orientation between central molecule and those within %s\n",( switchingFunction.description() ).c_str() ); // Set the link cell cutoff setLinkCellCutoff( 2.*switchingFunction.inverse( getTolerance() ) ); // Finish the setup of the object buildSymmetryFunctionLists(); // And check everything has been read in correctly checkRead(); }
Steinhardt::Steinhardt( const ActionOptions& ao ): Action(ao), VectorMultiColvar(ao), tmom(0) { // Read in the switching function std::string sw, errors; parse("SWITCH",sw); if(sw.length()>0){ switchingFunction.set(sw,errors); } else { double r_0=-1.0, d_0; int nn, mm; parse("NN",nn); parse("MM",mm); parse("R_0",r_0); parse("D_0",d_0); if( r_0<0.0 ) error("you must set a value for R_0"); switchingFunction.set(nn,mm,r_0,d_0); } log.printf(" Steinhardt parameter of central atom and those within %s\n",( switchingFunction.description() ).c_str() ); // Set the link cell cutoff setLinkCellCutoff( switchingFunction.get_dmax() ); rcut = switchingFunction.get_dmax(); rcut2 = rcut*rcut; }
OrientationSphere::OrientationSphere(const ActionOptions&ao): Action(ao), MultiColvarFunction(ao) { if( getNumberOfBaseMultiColvars()>1 ) warning("not sure if orientation sphere works with more than one base multicolvar - check numerical derivatives"); // Read in the switching function std::string sw, errors; parse("SWITCH",sw); if(sw.length()>0){ switchingFunction.set(sw,errors); } else { double r_0=-1.0, d_0; int nn, mm; parse("NN",nn); parse("MM",mm); parse("R_0",r_0); parse("D_0",d_0); if( r_0<0.0 ) error("you must set a value for R_0"); switchingFunction.set(nn,mm,r_0,d_0); } log.printf(" degree of overlap in orientation between central molecule and those within %s\n",( switchingFunction.description() ).c_str() ); // Set the link cell cutoff rcut2 = switchingFunction.get_dmax()*switchingFunction.get_dmax(); setLinkCellCutoff( switchingFunction.get_dmax() ); // Finish the setup of the object buildSymmetryFunctionLists(); }