@@ -157,7 +157,7 @@ std::vector<unsigned> FunctionOfMatrix<T>::getValueShapeFromArguments() {
157
157
158
158
template <class T >
159
159
unsigned FunctionOfMatrix<T>::getNumberOfDerivatives() {
160
- unsigned nder=0 , argstart = myfunc.getArgStart ();
160
+ unsigned nder=0 , argstart = myfunc.getArgStart ();
161
161
unsigned nargs = getNumberOfArguments (); if ( getNumberOfMasks ()>0 ) nargs = nargs - getNumberOfMasks ();
162
162
for (unsigned i=argstart; i<nargs; ++i) nder += getPntrToArgument (i)->getNumberOfStoredValues ();
163
163
return nder;
@@ -175,7 +175,7 @@ void FunctionOfMatrix<T>::prepare() {
175
175
}
176
176
for (unsigned i=0 ; i<getNumberOfComponents (); ++i) {
177
177
Value* myval = getPntrToComponent (i);
178
- if ( myval->getRank ()==2 && (myval->getShape ()[0 ]!=shape[0 ] || myval->getShape ()[1 ]!=shape[1 ]) ) myval->setShape (shape);
178
+ if ( myval->getRank ()==2 && (myval->getShape ()[0 ]!=shape[0 ] || myval->getShape ()[1 ]!=shape[1 ]) ) myval->setShape (shape);
179
179
}
180
180
ActionWithVector::prepare (); active_tasks.resize (0 );
181
181
}
@@ -184,7 +184,7 @@ template <class T>
184
184
Value* FunctionOfMatrix<T>::getPntrToFirstMatrixArgument() const {
185
185
unsigned argstart=myfunc.getArgStart ();
186
186
for (unsigned i=argstart; i<getNumberOfArguments (); ++i) {
187
- if ( getPntrToArgument (i)->getRank ()==2 ) return getPntrToArgument (i);
187
+ if ( getPntrToArgument (i)->getRank ()==2 ) return getPntrToArgument (i);
188
188
}
189
189
plumed_merror (" could not find matrix argument" );
190
190
return NULL ;
@@ -195,29 +195,29 @@ std::vector<unsigned>& FunctionOfMatrix<T>::getListOfActiveTasks( ActionWithVect
195
195
if ( active_tasks.size ()>0 ) return active_tasks;
196
196
197
197
Value* myarg = NULL ;
198
- if ( getNumberOfMasks ()>0 ) myarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
198
+ if ( getNumberOfMasks ()>0 ) myarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
199
199
else myarg = getPntrToFirstMatrixArgument ();
200
200
201
201
unsigned base=0 ; unsigned nrows = myarg->getShape ()[0 ];
202
202
for (unsigned i=0 ; i<nrows; ++i) {
203
- unsigned ncols = myarg->getRowLength (i);
204
- for (unsigned j=0 ; j<ncols; ++j) active_tasks.push_back (base+j);
205
- base += myarg->getNumberOfColumns ();
203
+ unsigned ncols = myarg->getRowLength (i);
204
+ for (unsigned j=0 ; j<ncols; ++j) active_tasks.push_back (base+j);
205
+ base += myarg->getNumberOfColumns ();
206
206
}
207
207
if ( getNumberOfMasks ()>0 && doNotCalculateDerivatives () ) return active_tasks;
208
208
// All the matrices input have to have the same sparsity pattern.
209
- // I can do everything I want to do with this limitation. If
209
+ // I can do everything I want to do with this limitation. If
210
210
// anyone wants to make this smarter in the future they can
211
211
#ifndef DNDEBUG
212
212
unsigned argstart=myfunc.getArgStart ();
213
213
for (unsigned k=argstart; k<getNumberOfArguments (); ++k) {
214
- if ( getPntrToArgument (k)->getRank ()!=2 ) continue ;
215
- for (unsigned i=0 ; i<nrows; ++i) {
216
- unsigned ncols = myarg->getRowLength (i);
217
- if ( getNumberOfMasks ()>0 && ncols==0 ) continue ;
218
- plumed_massert ( ncols==getPntrToArgument (k)->getRowLength (i), " failing in " + getLabel () );
219
- for (unsigned j=0 ; j<ncols; ++j) plumed_assert ( myarg->getRowIndex (i,j)==getPntrToArgument (k)->getRowIndex (i,j) );
220
- }
214
+ if ( getPntrToArgument (k)->getRank ()!=2 ) continue ;
215
+ for (unsigned i=0 ; i<nrows; ++i) {
216
+ unsigned ncols = myarg->getRowLength (i);
217
+ if ( getNumberOfMasks ()>0 && ncols==0 ) continue ;
218
+ plumed_massert ( ncols==getPntrToArgument (k)->getRowLength (i), " failing in " + getLabel () );
219
+ for (unsigned j=0 ; j<ncols; ++j) plumed_assert ( myarg->getRowIndex (i,j)==getPntrToArgument (k)->getRowIndex (i,j) );
220
+ }
221
221
}
222
222
#endif
223
223
return active_tasks;
@@ -230,23 +230,23 @@ void FunctionOfMatrix<T>::performTask( const unsigned& taskno, MultiValue& myval
230
230
231
231
// Retrieve the arguments
232
232
if ( getNumberOfMasks ()>0 ) {
233
- Value* maskarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
234
- unsigned index1 = std::floor ( taskno / maskarg->getNumberOfColumns () );
235
- unsigned index2 = taskno - index1*maskarg->getNumberOfColumns ();
236
- unsigned tind2 = maskarg->getRowIndex ( index1, index2 );
237
- unsigned maskncol = maskarg->getRowLength (index1);
238
- for (unsigned i=argstart; i<nargs; ++i) {
239
- if ( getPntrToArgument (i)->getRank ()==2 && getPntrToArgument (i)->getRowLength (index1)>maskncol ) args[i-argstart]=getPntrToArgument (i)->get ( index1*getPntrToArgument (i)->getShape ()[1 ] + tind2 );
240
- else if ( getPntrToArgument (i)->getRank ()==2 ) {
241
- plumed_dbg_assert ( maskncol==getPntrToArgument (i)->getRowLength (index1) );
242
- args[i-argstart]=getPntrToArgument (i)->get ( taskno, false );
243
- } else args[i-argstart] = getPntrToArgument (i)->get ();
244
- }
233
+ Value* maskarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
234
+ unsigned index1 = std::floor ( taskno / maskarg->getNumberOfColumns () );
235
+ unsigned index2 = taskno - index1*maskarg->getNumberOfColumns ();
236
+ unsigned tind2 = maskarg->getRowIndex ( index1, index2 );
237
+ unsigned maskncol = maskarg->getRowLength (index1);
238
+ for (unsigned i=argstart; i<nargs; ++i) {
239
+ if ( getPntrToArgument (i)->getRank ()==2 && getPntrToArgument (i)->getRowLength (index1)>maskncol ) args[i-argstart]=getPntrToArgument (i)->get ( index1*getPntrToArgument (i)->getShape ()[1 ] + tind2 );
240
+ else if ( getPntrToArgument (i)->getRank ()==2 ) {
241
+ plumed_dbg_assert ( maskncol==getPntrToArgument (i)->getRowLength (index1) );
242
+ args[i-argstart]=getPntrToArgument (i)->get ( taskno, false );
243
+ } else args[i-argstart] = getPntrToArgument (i)->get ();
244
+ }
245
245
} else {
246
- for (unsigned i=argstart; i<nargs; ++i) {
247
- if ( getPntrToArgument (i)->getRank ()==2 ) args[i-argstart]=getPntrToArgument (i)->get ( taskno, false );
248
- else args[i-argstart] = getPntrToArgument (i)->get ();
249
- }
246
+ for (unsigned i=argstart; i<nargs; ++i) {
247
+ if ( getPntrToArgument (i)->getRank ()==2 ) args[i-argstart]=getPntrToArgument (i)->get ( taskno, false );
248
+ else args[i-argstart] = getPntrToArgument (i)->get ();
249
+ }
250
250
}
251
251
// Calculate the function and its derivatives
252
252
std::vector<double > vals ( getNumberOfComponents () ); Matrix<double > derivatives ( getNumberOfComponents (), nargs-argstart );
@@ -276,13 +276,13 @@ void FunctionOfMatrix<T>::performTask( const unsigned& taskno, MultiValue& myval
276
276
277
277
template <class T >
278
278
void FunctionOfMatrix<T>::calculate() {
279
- Value* myarg = NULL ;
280
- if ( getNumberOfMasks ()>0 ) myarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
281
- else myarg = getPntrToFirstMatrixArgument ();
279
+ Value* myarg = NULL ;
280
+ if ( getNumberOfMasks ()>0 ) myarg = getPntrToArgument (getNumberOfArguments ()-getNumberOfMasks ());
281
+ else myarg = getPntrToFirstMatrixArgument ();
282
282
// Copy bookeeping arrays from input matrices to output matrices
283
283
for (unsigned i=0 ; i<getNumberOfComponents (); ++i) {
284
- if ( getPntrToComponent (i)->getRank ()==2 ) getPntrToComponent (i)->copyBookeepingArrayFromArgument ( myarg );
285
- else getPntrToComponent (i)->resizeDerivatives ( getNumberOfDerivatives () );
284
+ if ( getPntrToComponent (i)->getRank ()==2 ) getPntrToComponent (i)->copyBookeepingArrayFromArgument ( myarg );
285
+ else getPntrToComponent (i)->resizeDerivatives ( getNumberOfDerivatives () );
286
286
}
287
287
runAllTasks ();
288
288
}
0 commit comments