| 15 |
|
#include "mpiForceField.h" |
| 16 |
|
#endif // is_mpi |
| 17 |
|
|
| 18 |
+ |
|
| 19 |
+ |
// define some bond Types |
| 20 |
+ |
|
| 21 |
+ |
#define FIXED_BOND 0 |
| 22 |
+ |
#define HARMONIC_BOND 1 |
| 23 |
+ |
|
| 24 |
+ |
|
| 25 |
|
namespace TPE { // restrict the access of the folowing to this file only. |
| 26 |
|
|
| 27 |
|
|
| 46 |
|
typedef struct{ |
| 47 |
|
char nameA[15]; |
| 48 |
|
char nameB[15]; |
| 42 |
– |
char type[30]; |
| 49 |
|
double d0; |
| 50 |
+ |
double k0; |
| 51 |
|
int last; // 0 -> default |
| 52 |
|
// 1 -> tells nodes to stop listening |
| 53 |
+ |
int type; |
| 54 |
|
} bondStruct; |
| 55 |
|
|
| 56 |
|
|
| 180 |
|
next = NULL; |
| 181 |
|
nameA[0] = '\0'; |
| 182 |
|
nameB[0] = '\0'; |
| 175 |
– |
type[0] = '\0'; |
| 183 |
|
} |
| 184 |
|
~LinkedBondType(){ if( next != NULL ) delete next; } |
| 185 |
|
|
| 214 |
|
next = new LinkedBondType(); |
| 215 |
|
strcpy(next->nameA, info.nameA); |
| 216 |
|
strcpy(next->nameB, info.nameB); |
| 217 |
< |
strcpy(next->type, info.type); |
| 217 |
> |
next->type = info.type; |
| 218 |
|
next->d0 = info.d0; |
| 219 |
+ |
next->k0 = info.k0; |
| 220 |
|
} |
| 221 |
|
} |
| 222 |
|
|
| 224 |
|
void duplicate( bondStruct &info ){ |
| 225 |
|
strcpy(info.nameA, nameA); |
| 226 |
|
strcpy(info.nameB, nameB); |
| 227 |
< |
strcpy(info.type, type); |
| 227 |
> |
info.type = type; |
| 228 |
|
info.d0 = d0; |
| 229 |
+ |
info.k0 = k0; |
| 230 |
|
info.last = 0; |
| 231 |
|
} |
| 232 |
|
|
| 235 |
|
|
| 236 |
|
char nameA[15]; |
| 237 |
|
char nameB[15]; |
| 238 |
< |
char type[30]; |
| 238 |
> |
int type; |
| 239 |
|
double d0; |
| 240 |
+ |
double k0; |
| 241 |
|
|
| 242 |
|
LinkedBondType* next; |
| 243 |
|
}; |
| 478 |
|
// Init the bondStruct mpi type |
| 479 |
|
|
| 480 |
|
bondStruct bondProto; // mpiPrototype |
| 481 |
< |
int bondBC[3] = {60,1,1}; // block counts |
| 481 |
> |
int bondBC[3] = {30,2,2}; // block counts |
| 482 |
|
MPI_Aint bondDspls[3]; // displacements |
| 483 |
|
MPI_Datatype bondMbrTypes[3]; // member mpi types |
| 484 |
|
|
| 1199 |
|
simError(); |
| 1200 |
|
} |
| 1201 |
|
|
| 1202 |
< |
if( !strcmp( currentBondType->type, "fixed" ) ){ |
| 1203 |
< |
|
| 1202 |
> |
switch( currentBondType->type ){ |
| 1203 |
> |
|
| 1204 |
> |
case FIXED_BOND: |
| 1205 |
> |
|
| 1206 |
|
bondArray[i] = new ConstrainedBond( *the_atoms[a], |
| 1207 |
|
*the_atoms[b], |
| 1208 |
|
currentBondType->d0 ); |
| 1209 |
|
entry_plug->n_constraints++; |
| 1210 |
+ |
break; |
| 1211 |
+ |
|
| 1212 |
+ |
case HARMONIC_BOND: |
| 1213 |
+ |
|
| 1214 |
+ |
bondArray[i] = new HarmonicBond( *the_atoms[a], |
| 1215 |
+ |
*the_atoms[b], |
| 1216 |
+ |
currentBondType->d0, |
| 1217 |
+ |
currentBondType->k0 ); |
| 1218 |
+ |
break; |
| 1219 |
+ |
|
| 1220 |
+ |
default: |
| 1221 |
+ |
|
| 1222 |
+ |
break; |
| 1223 |
+ |
// do nothing |
| 1224 |
|
} |
| 1225 |
|
} |
| 1226 |
|
} |
| 1505 |
|
int TPE::parseBond( char *lineBuffer, int lineNum, bondStruct &info ){ |
| 1506 |
|
|
| 1507 |
|
char* the_token; |
| 1508 |
+ |
char bondType[30]; |
| 1509 |
|
|
| 1510 |
|
the_token = strtok( lineBuffer, " \n\t,;" ); |
| 1511 |
|
if( the_token != NULL ){ |
| 1528 |
|
simError(); |
| 1529 |
|
} |
| 1530 |
|
|
| 1531 |
< |
strcpy( info.type, the_token ); |
| 1531 |
> |
strcpy( bondType, the_token ); |
| 1532 |
|
|
| 1533 |
< |
if( !strcmp( info.type, "fixed" ) ){ |
| 1533 |
> |
if( !strcmp( bondType, "fixed" ) ){ |
| 1534 |
> |
info.type = FIXED_BOND; |
| 1535 |
> |
|
| 1536 |
> |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
| 1537 |
> |
sprintf( painCave.errMsg, |
| 1538 |
> |
"Error parseing BondTypes: line %d\n", lineNum ); |
| 1539 |
> |
painCave.isFatal = 1; |
| 1540 |
> |
simError(); |
| 1541 |
> |
} |
| 1542 |
> |
|
| 1543 |
> |
info.d0 = atof( the_token ); |
| 1544 |
> |
} |
| 1545 |
> |
else if( !strcmp( bondType, "harmonic" ) ){ |
| 1546 |
> |
info.type = HARMONIC_BOND; |
| 1547 |
> |
|
| 1548 |
|
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
| 1549 |
|
sprintf( painCave.errMsg, |
| 1550 |
|
"Error parseing BondTypes: line %d\n", lineNum ); |
| 1553 |
|
} |
| 1554 |
|
|
| 1555 |
|
info.d0 = atof( the_token ); |
| 1556 |
+ |
|
| 1557 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
| 1558 |
+ |
sprintf( painCave.errMsg, |
| 1559 |
+ |
"Error parseing BondTypes: line %d\n", lineNum ); |
| 1560 |
+ |
painCave.isFatal = 1; |
| 1561 |
+ |
simError(); |
| 1562 |
+ |
} |
| 1563 |
+ |
|
| 1564 |
+ |
info.k0 = atof( the_token ); |
| 1565 |
|
} |
| 1566 |
+ |
|
| 1567 |
|
else{ |
| 1568 |
|
sprintf( painCave.errMsg, |
| 1569 |
|
"Unknown DUFF bond type \"%s\" at line %d\n", |