Skip to content

Commit

Permalink
Added specific regtest for mklib
Browse files Browse the repository at this point in the history
  • Loading branch information
GiovanniBussi committed Oct 13, 2023
1 parent db70ebf commit d32b6f4
Show file tree
Hide file tree
Showing 8 changed files with 247 additions and 0 deletions.
3 changes: 3 additions & 0 deletions regtest/basic/rt15-mklib/COLVAR.reference
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#! FIELDS time d2
0.000000 1.000000
0.050000 9.000000
75 changes: 75 additions & 0 deletions regtest/basic/rt15-mklib/Distance2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 2013 The plumed team
(see the PEOPLE file at the root of the distribution for a list of names)
See http://www.plumed-code.org for more information.
This file is part of plumed, version 2.0.
plumed is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
plumed is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with plumed. If not, see <http://www.gnu.org/licenses/>.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
#include "../Distance2.h"
#include "colvar/Colvar.h"
#include "core/ActionRegister.h"

#include <string>
#include <cmath>

using namespace std;

namespace PLMD{

PLUMED_REGISTER_ACTION(Distance,"DISTANCE2")

void Distance::registerKeywords( Keywords& keys ){
Colvar::registerKeywords( keys );
keys.add("atoms","ATOMS","the pair of atom that we are calculating the distance between");
keys.addFlag("COMPONENTS",false,"calculate the x, y and z components of the distance separately and store them as label.x, label.y and label.z");
}

Distance::Distance(const ActionOptions&ao):
PLUMED_COLVAR_INIT(ao),
components(false),
pbc(true)
{
vector<AtomNumber> atoms;
parseAtomList("ATOMS",atoms);
if(atoms.size()!=2)
error("Number of specified atoms should be 2");
parseFlag("COMPONENTS",components);
bool nopbc=!pbc;
parseFlag("NOPBC",nopbc);
pbc=!nopbc;
checkRead();

log.printf(" between atoms %d %d\n",atoms[0].serial(),atoms[1].serial());
if(pbc) log.printf(" using periodic boundary conditions\n");
else log.printf(" without periodic boundary conditions\n");


if(!components){

addValueWithDerivatives(); setNotPeriodic();

} else{
addComponentWithDerivatives("x"); componentIsNotPeriodic("x");
addComponentWithDerivatives("y"); componentIsNotPeriodic("y");
addComponentWithDerivatives("z"); componentIsNotPeriodic("z");
}

requestAtoms(atoms);
}


}
37 changes: 37 additions & 0 deletions regtest/basic/rt15-mklib/Distance2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 2013 The plumed team
(see the PEOPLE file at the root of the distribution for a list of names)
See http://www.plumed-code.org for more information.
This file is part of plumed, version 2.0.
plumed is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
plumed is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with plumed. If not, see <http://www.gnu.org/licenses/>.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
#include "colvar/Colvar.h"

namespace PLMD{

class Distance : public colvar::Colvar {
bool components;
bool pbc;

public:
static void registerKeywords( Keywords& keys );
Distance(const ActionOptions&);
// active methods:
virtual void calculate();
};

}
78 changes: 78 additions & 0 deletions regtest/basic/rt15-mklib/Distance2b.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Copyright (c) 2013 The plumed team
(see the PEOPLE file at the root of the distribution for a list of names)
See http://www.plumed-code.org for more information.
This file is part of plumed, version 2.0.
plumed is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
plumed is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with plumed. If not, see <http://www.gnu.org/licenses/>.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
#include "../Distance2.h"
#include "colvar/Colvar.h"
#include "core/ActionRegister.h"

#include <string>
#include <cmath>

using namespace std;

namespace PLMD{

// calculator
void Distance::calculate(){

Vector distance;
if(pbc){
distance=pbcDistance(getPosition(0),getPosition(1));
} else {
distance=delta(getPosition(0),getPosition(1));
}
const double value=distance.modulo();
const double invvalue=1.0/value;

if(!components){

setAtomsDerivatives(0,-invvalue*distance);
setAtomsDerivatives(1,invvalue*distance);
setBoxDerivatives (-invvalue*Tensor(distance,distance));
setValue (value);

}else{

Value* valuex=getPntrToComponent("x");
Value* valuey=getPntrToComponent("y");
Value* valuez=getPntrToComponent("z");

setAtomsDerivatives (valuex,0,Vector(-1,0,0));
setAtomsDerivatives (valuex,1,Vector(+1,0,0));
setBoxDerivatives (valuex,Tensor(distance,Vector(-1,0,0)));
valuex->set(distance[0]);

setAtomsDerivatives (valuey,0,Vector(0,-1,0));
setAtomsDerivatives (valuey,1,Vector(0,+1,0));
setBoxDerivatives (valuey,Tensor(distance,Vector(0,-1,0)));
valuey->set(distance[1]);

setAtomsDerivatives (valuez,0,Vector(0,0,-1));
setAtomsDerivatives (valuez,1,Vector(0,0,+1));
setBoxDerivatives (valuez,Tensor(distance,Vector(0,0,-1)));
valuez->set(distance[2]);
};
}

}



1 change: 1 addition & 0 deletions regtest/basic/rt15-mklib/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
include ../../scripts/test.make
25 changes: 25 additions & 0 deletions regtest/basic/rt15-mklib/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
type=driver
plumed_needs="dlopen"
arg="--plumed plumed.dat --trajectory-stride 10 --timestep 0.005 --ixyz trajectory.xyz"

function plumed_regtest_before(){
# find the name of the main executable
plumed="${PLUMED_PROGRAM_NAME:-plumed} --no-mpi"

# find soext
root=$(eval $plumed info --root)
source "$root"/src/config/compile_options.sh

# replace soext in the plumed.dat file
sed "s/__SOEXT__/$soext/g" plumed.dat.template > plumed.dat

# testing mklib with multiple arguments
eval $plumed mklib Distance2.cpp Distance2b.cpp
# notice that the library gets its name from the name of the first cpp file
# (Distance2.cpp)

# move library to make sure plumed does not compile it again from cpp
mv Distance2.$soext Distance3.$soext

# at this point Distance3.$soext is ready to be LOADed
}
8 changes: 8 additions & 0 deletions regtest/basic/rt15-mklib/plumed.dat.template
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This is loading a collective variable on the fly:
LOAD FILE=./Distance3.__SOEXT__

d2: DISTANCE2 ATOMS=1,2

PRINT FILE=COLVAR ARG=d2

ENDPLUMED
20 changes: 20 additions & 0 deletions regtest/basic/rt15-mklib/trajectory.xyz
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
8
10 0 0 0 10 0 0 0 10
X 0.5 0.5 0.5
X 0.5 0.5 9.5
X 0.5 9.5 0.5
X 0.5 9.5 9.5
X 9.5 0.5 0.5
X 9.5 0.5 9.5
X 9.5 9.5 0.5
X 9.5 9.5 9.5
8
10 10 0 0 10 10 10 0 10
X 0.5 0.5 0.5
X 0.5 0.5 9.5
X 0.5 9.5 0.5
X 0.5 9.5 9.5
X 9.5 0.5 0.5
X 9.5 0.5 9.5
X 9.5 9.5 0.5
X 9.5 9.4 9.5

0 comments on commit d32b6f4

Please sign in to comment.