Line data Source code
1 : /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 : Copyright (c) 2016-2018 The VES code team
3 : (see the PEOPLE-VES file at the root of this folder for a list of names)
4 :
5 : See http://www.ves-code.org for more information.
6 :
7 : This file is part of VES code module.
8 :
9 : The VES code module is free software: you can redistribute it and/or modify
10 : it under the terms of the GNU Lesser General Public License as published by
11 : the Free Software Foundation, either version 3 of the License, or
12 : (at your option) any later version.
13 :
14 : The VES code module is distributed in the hope that it will be useful,
15 : but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : GNU Lesser General Public License for more details.
18 :
19 : You should have received a copy of the GNU Lesser General Public License
20 : along with the VES code module. If not, see <http://www.gnu.org/licenses/>.
21 : +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
22 :
23 : #include "VesTools.h"
24 :
25 : #include "tools/Grid.h"
26 : #include "tools/IFile.h"
27 : #include "tools/Exception.h"
28 :
29 :
30 : namespace PLMD {
31 : namespace ves {
32 :
33 :
34 8 : void VesTools::copyGridValues(Grid* grid_pntr_orig, Grid* grid_pntr_copy) {
35 : // plumed_massert(grid_pntr_orig!=NULL,"grid not defined");
36 : // plumed_massert(grid_pntr_copy!=NULL,"grid not defined");
37 8 : plumed_massert(grid_pntr_orig->getSize()==grid_pntr_copy->getSize(),"the two grids are not of the same size");
38 8 : plumed_massert(grid_pntr_orig->getDimension()==grid_pntr_copy->getDimension(),"the two grids are not of the same dimension");
39 : //
40 1608 : for(Grid::index_t i=0; i<grid_pntr_orig->getSize(); i++) {
41 800 : double value = grid_pntr_orig->getValue(i);
42 800 : grid_pntr_copy->setValue(i,value);
43 : }
44 8 : }
45 :
46 :
47 9 : unsigned int VesTools::getGridFileInfo(const std::string& filepath, std::string& grid_label, std::vector<std::string>& arg_labels, std::vector<std::string>& arg_min, std::vector<std::string>& arg_max, std::vector<bool>& arg_periodic, std::vector<unsigned int>& arg_nbins, bool& derivatives) {
48 :
49 18 : IFile ifile; ifile.open(filepath);
50 9 : std::vector<std::string> fields;
51 9 : ifile.scanFieldList(fields);
52 9 : ifile.allowIgnoredFields();
53 9 : ifile.scanField();
54 :
55 : unsigned int nargs=0;
56 84 : for(unsigned int i=0; i<fields.size(); i++) {
57 93 : if(fields[i]=="min_"+fields[0]) {
58 9 : derivatives = false;
59 9 : nargs = i-1;
60 9 : break;
61 : }
62 66 : else if(fields[i]=="der_"+fields[0]) {
63 0 : derivatives = true;
64 0 : nargs = i-1;
65 0 : break;
66 : }
67 : }
68 :
69 9 : grid_label = fields[nargs];
70 :
71 18 : arg_labels.assign(nargs,"");
72 18 : arg_min.assign(nargs,"");
73 18 : arg_max.assign(nargs,"");
74 : arg_periodic.assign(nargs,false);
75 18 : arg_nbins.assign(nargs,0);
76 35 : for(unsigned int i=0; i<nargs; i++) {
77 13 : arg_labels[i] = fields[i];
78 26 : ifile.scanField("min_"+arg_labels[i],arg_min[i]);
79 26 : ifile.scanField("max_"+arg_labels[i],arg_max[i]);
80 : std::string str_periodic;
81 26 : ifile.scanField("periodic_"+arg_labels[i],str_periodic);
82 13 : if(str_periodic=="true") {arg_periodic[i]=true;}
83 : int nbins;
84 26 : ifile.scanField("nbins_"+arg_labels[i],nbins);
85 26 : arg_nbins[i] = static_cast<unsigned int>(nbins);
86 : }
87 9 : ifile.scanField();
88 9 : ifile.close();
89 9 : return nargs;
90 : }
91 :
92 :
93 : }
94 : }
|