1 |
< |
#include <cstdlib> |
2 |
< |
#include <cstdio> |
3 |
< |
#include <cstring> |
1 |
> |
#include <stdlib.h> |
2 |
> |
#include <stdio.h> |
3 |
> |
#include <string.h> |
4 |
|
|
5 |
|
#include <iostream> |
6 |
|
using namespace std; |
15 |
|
#include "mpiForceField.h" |
16 |
|
#endif // is_mpi |
17 |
|
|
18 |
– |
namespace TPE { // restrict the access of the folowing to this file only. |
18 |
|
|
19 |
+ |
// define some bond Types |
20 |
|
|
21 |
+ |
#define FIXED_BOND 0 |
22 |
+ |
#define HARMONIC_BOND 1 |
23 |
+ |
|
24 |
+ |
|
25 |
+ |
namespace DUFF_NS { // restrict the access of the folowing to this file only. |
26 |
+ |
|
27 |
+ |
|
28 |
|
// Declare the structures that will be passed by MPI |
29 |
|
|
30 |
|
typedef struct{ |
32 |
|
double mass; |
33 |
|
double epslon; |
34 |
|
double sigma; |
35 |
+ |
double charge; |
36 |
|
double dipole; |
37 |
|
double w0; |
38 |
|
double v0; |
39 |
+ |
double v0p; |
40 |
+ |
double rl; |
41 |
+ |
double ru; |
42 |
+ |
double rlp; |
43 |
+ |
double rup; |
44 |
|
int isSSD; |
45 |
+ |
int isCharge; |
46 |
|
int isDipole; |
47 |
|
int ident; |
48 |
|
int last; // 0 -> default |
53 |
|
typedef struct{ |
54 |
|
char nameA[15]; |
55 |
|
char nameB[15]; |
42 |
– |
char type[30]; |
56 |
|
double d0; |
57 |
+ |
double k0; |
58 |
|
int last; // 0 -> default |
59 |
|
// 1 -> tells nodes to stop listening |
60 |
+ |
int type; |
61 |
|
} bondStruct; |
62 |
|
|
63 |
|
|
116 |
|
void printMe( void ){ |
117 |
|
|
118 |
|
std::cerr << "LinkedAtype " << name << ": ident = " << ident << "\n"; |
119 |
< |
if( next != NULL ) next->printMe(); |
119 |
> |
// if( next != NULL ) next->printMe(); |
120 |
|
|
121 |
|
} |
122 |
|
|
126 |
|
|
127 |
|
if( !strcmp( info.name, name ) ){ |
128 |
|
sprintf( painCave.errMsg, |
129 |
< |
"Duplicate TraPPE_Ex atom type \"%s\" found in " |
130 |
< |
"the TraPPE_ExFF param file./n", |
129 |
> |
"Duplicate DUFF atom type \"%s\" found in " |
130 |
> |
"the DUFF param file./n", |
131 |
|
name ); |
132 |
|
painCave.isFatal = 1; |
133 |
|
simError(); |
145 |
|
next->dipole = info.dipole; |
146 |
|
next->w0 = info.w0; |
147 |
|
next->v0 = info.v0; |
148 |
+ |
next->v0p = info.v0p; |
149 |
+ |
next->rl = info.rl; |
150 |
+ |
next->ru = info.ru; |
151 |
+ |
next->rlp = info.rlp; |
152 |
+ |
next->rup = info.rup; |
153 |
|
next->ident = info.ident; |
154 |
|
} |
155 |
|
} |
166 |
|
info.dipole = dipole; |
167 |
|
info.w0 = w0; |
168 |
|
info.v0 = v0; |
169 |
+ |
info.v0p = v0p; |
170 |
+ |
info.rl = rl; |
171 |
+ |
info.ru = ru; |
172 |
+ |
info.rlp = rlp; |
173 |
+ |
info.rup = rup; |
174 |
|
info.ident = ident; |
175 |
|
info.last = 0; |
176 |
|
} |
187 |
|
double dipole; |
188 |
|
double w0; |
189 |
|
double v0; |
190 |
+ |
double v0p; |
191 |
+ |
double rl; |
192 |
+ |
double ru; |
193 |
+ |
double rlp; |
194 |
+ |
double rup; |
195 |
|
int ident; |
196 |
|
LinkedAtomType* next; |
197 |
|
}; |
202 |
|
next = NULL; |
203 |
|
nameA[0] = '\0'; |
204 |
|
nameB[0] = '\0'; |
175 |
– |
type[0] = '\0'; |
205 |
|
} |
206 |
|
~LinkedBondType(){ if( next != NULL ) delete next; } |
207 |
|
|
223 |
|
|
224 |
|
if(dup){ |
225 |
|
sprintf( painCave.errMsg, |
226 |
< |
"Duplicate TraPPE_Ex bond type \"%s - %s\" found in " |
227 |
< |
"the TraPPE_ExFF param file./n", |
226 |
> |
"Duplicate DUFF bond type \"%s - %s\" found in " |
227 |
> |
"the DUFF param file./n", |
228 |
|
nameA, nameB ); |
229 |
|
painCave.isFatal = 1; |
230 |
|
simError(); |
236 |
|
next = new LinkedBondType(); |
237 |
|
strcpy(next->nameA, info.nameA); |
238 |
|
strcpy(next->nameB, info.nameB); |
239 |
< |
strcpy(next->type, info.type); |
239 |
> |
next->type = info.type; |
240 |
|
next->d0 = info.d0; |
241 |
+ |
next->k0 = info.k0; |
242 |
|
} |
243 |
|
} |
244 |
|
|
246 |
|
void duplicate( bondStruct &info ){ |
247 |
|
strcpy(info.nameA, nameA); |
248 |
|
strcpy(info.nameB, nameB); |
249 |
< |
strcpy(info.type, type); |
249 |
> |
info.type = type; |
250 |
|
info.d0 = d0; |
251 |
+ |
info.k0 = k0; |
252 |
|
info.last = 0; |
253 |
|
} |
254 |
|
|
257 |
|
|
258 |
|
char nameA[15]; |
259 |
|
char nameB[15]; |
260 |
< |
char type[30]; |
260 |
> |
int type; |
261 |
|
double d0; |
262 |
+ |
double k0; |
263 |
|
|
264 |
|
LinkedBondType* next; |
265 |
|
}; |
296 |
|
|
297 |
|
if(dup){ |
298 |
|
sprintf( painCave.errMsg, |
299 |
< |
"Duplicate TraPPE_Ex bend type \"%s - %s - %s\" found in " |
300 |
< |
"the TraPPE_ExFF param file./n", |
299 |
> |
"Duplicate DUFF bend type \"%s - %s - %s\" found in " |
300 |
> |
"the DUFF param file./n", |
301 |
|
nameA, nameB, nameC ); |
302 |
|
painCave.isFatal = 1; |
303 |
|
simError(); |
381 |
|
|
382 |
|
if(dup){ |
383 |
|
sprintf( painCave.errMsg, |
384 |
< |
"Duplicate TraPPE_Ex torsion type \"%s - %s - %s - %s\" found in " |
385 |
< |
"the TraPPE_ExFF param file./n", nameA, nameB, nameC, nameD ); |
384 |
> |
"Duplicate DUFF torsion type \"%s - %s - %s - %s\" found in " |
385 |
> |
"the DUFF param file./n", nameA, nameB, nameC, nameD ); |
386 |
|
painCave.isFatal = 1; |
387 |
|
simError(); |
388 |
|
} |
442 |
|
|
443 |
|
} // namespace |
444 |
|
|
445 |
< |
using namespace TPE; |
445 |
> |
using namespace DUFF_NS; |
446 |
|
|
447 |
|
|
448 |
|
//**************************************************************** |
450 |
|
//**************************************************************** |
451 |
|
|
452 |
|
|
453 |
< |
TraPPE_ExFF::TraPPE_ExFF(){ |
453 |
> |
DUFF::DUFF(){ |
454 |
|
|
455 |
|
char fileName[200]; |
456 |
|
char* ffPath_env = "FORCE_PARAM_PATH"; |
457 |
|
char* ffPath; |
458 |
|
char temp[200]; |
427 |
– |
char errMsg[1000]; |
459 |
|
|
460 |
|
headAtomType = NULL; |
461 |
|
currentAtomType = NULL; |
477 |
|
// Init the atomStruct mpi type |
478 |
|
|
479 |
|
atomStruct atomProto; // mpiPrototype |
480 |
< |
int atomBC[3] = {15,6,4}; // block counts |
480 |
> |
int atomBC[3] = {15,12,5}; // block counts |
481 |
|
MPI_Aint atomDspls[3]; // displacements |
482 |
|
MPI_Datatype atomMbrTypes[3]; // member mpi types |
483 |
|
|
499 |
|
// Init the bondStruct mpi type |
500 |
|
|
501 |
|
bondStruct bondProto; // mpiPrototype |
502 |
< |
int bondBC[3] = {60,1,1}; // block counts |
502 |
> |
int bondBC[3] = {30,2,2}; // block counts |
503 |
|
MPI_Aint bondDspls[3]; // displacements |
504 |
|
MPI_Datatype bondMbrTypes[3]; // member mpi types |
505 |
|
|
568 |
|
|
569 |
|
// generate the force file name |
570 |
|
|
571 |
< |
strcpy( fileName, "TraPPE_Ex.frc" ); |
571 |
> |
strcpy( fileName, "DUFF.frc" ); |
572 |
|
// fprintf( stderr,"Trying to open %s\n", fileName ); |
573 |
|
|
574 |
|
// attempt to open the file in the current directory first. |
595 |
|
if( frcFile == NULL ){ |
596 |
|
|
597 |
|
sprintf( painCave.errMsg, |
598 |
< |
"Error opening the force field parameter file: %s\n" |
599 |
< |
"Have you tried setting the FORCE_PARAM_PATH environment " |
600 |
< |
"vairable?\n", |
598 |
> |
"Error opening the force field parameter file:\n" |
599 |
> |
"\t%s\n" |
600 |
> |
"\tHave you tried setting the FORCE_PARAM_PATH environment " |
601 |
> |
"variable?\n", |
602 |
|
fileName ); |
603 |
+ |
painCave.severity = OOPSE_ERROR; |
604 |
|
painCave.isFatal = 1; |
605 |
|
simError(); |
606 |
|
} |
609 |
|
#ifdef IS_MPI |
610 |
|
} |
611 |
|
|
612 |
< |
sprintf( checkPointMsg, "TraPPE_ExFF file opened sucessfully." ); |
612 |
> |
sprintf( checkPointMsg, "DUFF file opened sucessfully." ); |
613 |
|
MPIcheckPoint(); |
614 |
|
|
615 |
|
#endif // is_mpi |
616 |
|
} |
617 |
|
|
618 |
|
|
619 |
< |
TraPPE_ExFF::~TraPPE_ExFF(){ |
619 |
> |
DUFF::~DUFF(){ |
620 |
|
|
621 |
|
if( headAtomType != NULL ) delete headAtomType; |
622 |
|
if( headBondType != NULL ) delete headBondType; |
634 |
|
#endif // is_mpi |
635 |
|
} |
636 |
|
|
637 |
< |
void TraPPE_ExFF::cleanMe( void ){ |
637 |
> |
void DUFF::cleanMe( void ){ |
638 |
|
|
639 |
|
#ifdef IS_MPI |
640 |
|
|
653 |
|
} |
654 |
|
|
655 |
|
|
656 |
< |
void TraPPE_ExFF::initForceField( int ljMixRule ){ |
656 |
> |
void DUFF::initForceField( int ljMixRule ){ |
657 |
|
|
658 |
|
initFortran( ljMixRule, entry_plug->useReactionField ); |
659 |
|
} |
660 |
|
|
661 |
|
|
662 |
< |
void TraPPE_ExFF::readParams( void ){ |
662 |
> |
void DUFF::readParams( void ){ |
663 |
|
|
631 |
– |
int i, a, b, c, d; |
664 |
|
int identNum; |
633 |
– |
char* atomA; |
634 |
– |
char* atomB; |
635 |
– |
char* atomC; |
636 |
– |
char* atomD; |
665 |
|
|
666 |
|
atomStruct atomInfo; |
667 |
|
bondStruct bondInfo; |
726 |
|
// send out the linked list to all the other processes |
727 |
|
|
728 |
|
sprintf( checkPointMsg, |
729 |
< |
"TraPPE_ExFF atom structures read successfully." ); |
729 |
> |
"DUFF atom structures read successfully." ); |
730 |
|
MPIcheckPoint(); |
731 |
|
|
732 |
|
currentAtomType = headAtomType->next; //skip the first element who is a place holder. |
733 |
|
while( currentAtomType != NULL ){ |
734 |
|
currentAtomType->duplicate( atomInfo ); |
735 |
|
|
708 |
– |
|
709 |
– |
|
736 |
|
sendFrcStruct( &atomInfo, mpiAtomStructType ); |
737 |
|
|
738 |
|
sprintf( checkPointMsg, |
739 |
< |
"successfully sent TraPPE_Ex force type: \"%s\"\n", |
739 |
> |
"successfully sent DUFF force type: \"%s\"\n", |
740 |
|
atomInfo.name ); |
741 |
|
MPIcheckPoint(); |
742 |
|
|
750 |
|
else{ |
751 |
|
|
752 |
|
// listen for node 0 to send out the force params |
753 |
< |
|
753 |
> |
|
754 |
|
MPIcheckPoint(); |
755 |
|
|
756 |
|
headAtomType = new LinkedAtomType; |
757 |
< |
recieveFrcStruct( &atomInfo, mpiAtomStructType ); |
757 |
> |
receiveFrcStruct( &atomInfo, mpiAtomStructType ); |
758 |
|
|
759 |
|
while( !atomInfo.last ){ |
760 |
|
|
735 |
– |
|
736 |
– |
|
761 |
|
headAtomType->add( atomInfo ); |
762 |
|
|
763 |
|
MPIcheckPoint(); |
764 |
|
|
765 |
< |
recieveFrcStruct( &atomInfo, mpiAtomStructType ); |
765 |
> |
receiveFrcStruct( &atomInfo, mpiAtomStructType ); |
766 |
|
} |
767 |
|
} |
768 |
|
|
778 |
|
|
779 |
|
int isGB = 0; |
780 |
|
int isLJ = 1; |
781 |
< |
double GB_dummy = 0.0; |
782 |
< |
|
783 |
< |
|
781 |
> |
int isEAM =0; |
782 |
> |
int isCharge = 0; |
783 |
> |
double charge=0.0; |
784 |
> |
|
785 |
|
currentAtomType = headAtomType->next;; |
786 |
|
while( currentAtomType != NULL ){ |
787 |
|
|
788 |
< |
if(currentAtomType->isDipole) entry_plug->useDipole = 1; |
788 |
> |
if(currentAtomType->isDipole) entry_plug->useDipoles = 1; |
789 |
|
if(currentAtomType->isSSD) { |
790 |
|
entry_plug->useSticky = 1; |
791 |
< |
set_sticky_params( &(currentAtomType->w0), &(currentAtomType->v0)); |
791 |
> |
set_sticky_params( &(currentAtomType->w0), &(currentAtomType->v0), |
792 |
> |
&(currentAtomType->v0p), |
793 |
> |
&(currentAtomType->rl), &(currentAtomType->ru), |
794 |
> |
&(currentAtomType->rlp), &(currentAtomType->rup)); |
795 |
|
} |
796 |
|
|
797 |
|
if( currentAtomType->name[0] != '\0' ){ |
801 |
|
&(currentAtomType->isSSD), |
802 |
|
&(currentAtomType->isDipole), |
803 |
|
&isGB, |
804 |
+ |
&isEAM, |
805 |
+ |
&isCharge, |
806 |
|
&(currentAtomType->epslon), |
807 |
|
&(currentAtomType->sigma), |
808 |
+ |
&charge, |
809 |
|
&(currentAtomType->dipole), |
810 |
|
&isError ); |
811 |
|
if( isError ){ |
821 |
|
|
822 |
|
#ifdef IS_MPI |
823 |
|
sprintf( checkPointMsg, |
824 |
< |
"TraPPE_ExFF atom structures successfully sent to fortran\n" ); |
824 |
> |
"DUFF atom structures successfully sent to fortran\n" ); |
825 |
|
MPIcheckPoint(); |
826 |
|
#endif // is_mpi |
827 |
|
|
875 |
|
// send out the linked list to all the other processes |
876 |
|
|
877 |
|
sprintf( checkPointMsg, |
878 |
< |
"TraPPE_Ex bond structures read successfully." ); |
878 |
> |
"DUFF bond structures read successfully." ); |
879 |
|
MPIcheckPoint(); |
880 |
|
|
881 |
|
currentBondType = headBondType->next; |
896 |
|
MPIcheckPoint(); |
897 |
|
|
898 |
|
headBondType = new LinkedBondType; |
899 |
< |
recieveFrcStruct( &bondInfo, mpiBondStructType ); |
899 |
> |
receiveFrcStruct( &bondInfo, mpiBondStructType ); |
900 |
|
while( !bondInfo.last ){ |
901 |
|
|
902 |
|
headBondType->add( bondInfo ); |
903 |
< |
recieveFrcStruct( &bondInfo, mpiBondStructType ); |
903 |
> |
receiveFrcStruct( &bondInfo, mpiBondStructType ); |
904 |
|
} |
905 |
|
} |
906 |
|
|
907 |
|
sprintf( checkPointMsg, |
908 |
< |
"TraPPE_ExFF bond structures broadcast successfully." ); |
908 |
> |
"DUFF bond structures broadcast successfully." ); |
909 |
|
MPIcheckPoint(); |
910 |
|
|
911 |
|
#endif // is_mpi |
924 |
|
fastForward( "BendTypes", "initializeBends" ); |
925 |
|
|
926 |
|
// we are now at the bendTypes section |
927 |
< |
|
927 |
> |
|
928 |
|
eof_test = fgets( readLine, sizeof(readLine), frcFile ); |
929 |
|
lineNum++; |
930 |
|
|
958 |
|
// send out the linked list to all the other processes |
959 |
|
|
960 |
|
sprintf( checkPointMsg, |
961 |
< |
"TraPPE_Ex bend structures read successfully." ); |
961 |
> |
"DUFF bend structures read successfully." ); |
962 |
|
MPIcheckPoint(); |
963 |
|
|
964 |
|
currentBendType = headBendType->next; |
979 |
|
MPIcheckPoint(); |
980 |
|
|
981 |
|
headBendType = new LinkedBendType; |
982 |
< |
recieveFrcStruct( &bendInfo, mpiBendStructType ); |
982 |
> |
receiveFrcStruct( &bendInfo, mpiBendStructType ); |
983 |
|
while( !bendInfo.last ){ |
984 |
|
|
985 |
|
headBendType->add( bendInfo ); |
986 |
< |
recieveFrcStruct( &bendInfo, mpiBendStructType ); |
986 |
> |
receiveFrcStruct( &bendInfo, mpiBendStructType ); |
987 |
|
} |
988 |
|
} |
989 |
|
|
990 |
|
sprintf( checkPointMsg, |
991 |
< |
"TraPPE_ExFF bend structures broadcast successfully." ); |
991 |
> |
"DUFF bend structures broadcast successfully." ); |
992 |
|
MPIcheckPoint(); |
993 |
|
|
994 |
|
#endif // is_mpi |
1043 |
|
// send out the linked list to all the other processes |
1044 |
|
|
1045 |
|
sprintf( checkPointMsg, |
1046 |
< |
"TraPPE_Ex torsion structures read successfully." ); |
1046 |
> |
"DUFF torsion structures read successfully." ); |
1047 |
|
MPIcheckPoint(); |
1048 |
|
|
1049 |
|
currentTorsionType = headTorsionType->next; |
1064 |
|
MPIcheckPoint(); |
1065 |
|
|
1066 |
|
headTorsionType = new LinkedTorsionType; |
1067 |
< |
recieveFrcStruct( &torsionInfo, mpiTorsionStructType ); |
1067 |
> |
receiveFrcStruct( &torsionInfo, mpiTorsionStructType ); |
1068 |
|
while( !torsionInfo.last ){ |
1069 |
|
|
1070 |
|
headTorsionType->add( torsionInfo ); |
1071 |
< |
recieveFrcStruct( &torsionInfo, mpiTorsionStructType ); |
1071 |
> |
receiveFrcStruct( &torsionInfo, mpiTorsionStructType ); |
1072 |
|
} |
1073 |
|
} |
1074 |
|
|
1075 |
|
sprintf( checkPointMsg, |
1076 |
< |
"TraPPE_ExFF torsion structures broadcast successfully." ); |
1076 |
> |
"DUFF torsion structures broadcast successfully." ); |
1077 |
|
MPIcheckPoint(); |
1078 |
|
|
1079 |
|
#endif // is_mpi |
1083 |
|
|
1084 |
|
|
1085 |
|
|
1086 |
< |
void TraPPE_ExFF::initializeAtoms( int nAtoms, Atom** the_atoms ){ |
1086 |
> |
void DUFF::initializeAtoms( int nAtoms, Atom** the_atoms ){ |
1087 |
|
|
1088 |
|
|
1089 |
|
////////////////////////////////////////////////// |
1122 |
|
// initialize the atoms |
1123 |
|
|
1124 |
|
DirectionalAtom* dAtom; |
1125 |
+ |
double ji[3]; |
1126 |
|
|
1127 |
|
for(int i=0; i<nAtoms; i++ ){ |
1128 |
|
|
1136 |
|
} |
1137 |
|
|
1138 |
|
the_atoms[i]->setMass( currentAtomType->mass ); |
1107 |
– |
the_atoms[i]->setEpslon( currentAtomType->epslon ); |
1108 |
– |
the_atoms[i]->setSigma( currentAtomType->sigma ); |
1139 |
|
the_atoms[i]->setIdent( currentAtomType->ident ); |
1110 |
– |
the_atoms[i]->setLJ(); |
1140 |
|
|
1141 |
|
if( bigSigma < currentAtomType->sigma ) bigSigma = currentAtomType->sigma; |
1142 |
|
|
1144 |
|
if( the_atoms[i]->isDirectional() ){ |
1145 |
|
|
1146 |
|
dAtom = (DirectionalAtom *) the_atoms[i]; |
1118 |
– |
dAtom->setMu( currentAtomType->dipole ); |
1147 |
|
dAtom->setHasDipole( 1 ); |
1148 |
< |
dAtom->setJx( 0.0 ); |
1149 |
< |
dAtom->setJy( 0.0 ); |
1150 |
< |
dAtom->setJz( 0.0 ); |
1148 |
> |
|
1149 |
> |
ji[0] = 0.0; |
1150 |
> |
ji[1] = 0.0; |
1151 |
> |
ji[2] = 0.0; |
1152 |
> |
|
1153 |
> |
dAtom->setJ( ji ); |
1154 |
|
|
1155 |
|
if(!strcmp("SSD",the_atoms[i]->getType())){ |
1156 |
|
dAtom->setI( waterI ); |
1126 |
– |
dAtom->setSSD( 1 ); |
1157 |
|
} |
1158 |
|
else if(!strcmp("HEAD",the_atoms[i]->getType())){ |
1159 |
|
dAtom->setI( headI ); |
1130 |
– |
dAtom->setSSD( 0 ); |
1160 |
|
} |
1161 |
|
else{ |
1162 |
|
sprintf(painCave.errMsg, |
1170 |
|
else{ |
1171 |
|
|
1172 |
|
sprintf( painCave.errMsg, |
1173 |
< |
"TraPPE_ExFF error: Atom \"%s\" is a dipole, yet no standard" |
1173 |
> |
"DUFF error: Atom \"%s\" is a dipole, yet no standard" |
1174 |
|
" orientation was specifed in the BASS file.\n", |
1175 |
|
currentAtomType->name ); |
1176 |
|
painCave.isFatal = 1; |
1180 |
|
else{ |
1181 |
|
if( the_atoms[i]->isDirectional() ){ |
1182 |
|
sprintf( painCave.errMsg, |
1183 |
< |
"TraPPE_ExFF error: Atom \"%s\" was given a standard" |
1183 |
> |
"DUFF error: Atom \"%s\" was given a standard " |
1184 |
|
"orientation in the BASS file, yet it is not a dipole.\n", |
1185 |
|
currentAtomType->name); |
1186 |
|
painCave.isFatal = 1; |
1190 |
|
} |
1191 |
|
} |
1192 |
|
|
1193 |
< |
void TraPPE_ExFF::initializeBonds( int nBonds, Bond** bondArray, |
1193 |
> |
void DUFF::initializeBonds( int nBonds, Bond** bondArray, |
1194 |
|
bond_pair* the_bonds ){ |
1195 |
|
int i,a,b; |
1196 |
|
char* atomA; |
1218 |
|
simError(); |
1219 |
|
} |
1220 |
|
|
1221 |
< |
if( !strcmp( currentBondType->type, "fixed" ) ){ |
1222 |
< |
|
1221 |
> |
switch( currentBondType->type ){ |
1222 |
> |
|
1223 |
> |
case FIXED_BOND: |
1224 |
> |
|
1225 |
|
bondArray[i] = new ConstrainedBond( *the_atoms[a], |
1226 |
|
*the_atoms[b], |
1227 |
|
currentBondType->d0 ); |
1228 |
|
entry_plug->n_constraints++; |
1229 |
+ |
break; |
1230 |
+ |
|
1231 |
+ |
case HARMONIC_BOND: |
1232 |
+ |
|
1233 |
+ |
bondArray[i] = new HarmonicBond( *the_atoms[a], |
1234 |
+ |
*the_atoms[b], |
1235 |
+ |
currentBondType->d0, |
1236 |
+ |
currentBondType->k0 ); |
1237 |
+ |
break; |
1238 |
+ |
|
1239 |
+ |
default: |
1240 |
+ |
|
1241 |
+ |
break; |
1242 |
+ |
// do nothing |
1243 |
|
} |
1244 |
|
} |
1245 |
|
} |
1246 |
|
|
1247 |
< |
void TraPPE_ExFF::initializeBends( int nBends, Bend** bendArray, |
1247 |
> |
void DUFF::initializeBends( int nBends, Bend** bendArray, |
1248 |
|
bend_set* the_bends ){ |
1249 |
|
|
1250 |
|
QuadraticBend* qBend; |
1304 |
|
} |
1305 |
|
|
1306 |
|
gBend = new GhostBend( *the_atoms[a], |
1307 |
< |
*the_atoms[b] ); |
1307 |
> |
*the_atoms[b]); |
1308 |
> |
|
1309 |
|
gBend->setConstants( currentBendType->k1, |
1310 |
|
currentBendType->k2, |
1311 |
|
currentBendType->k3, |
1321 |
|
currentBendType->k3, |
1322 |
|
currentBendType->t0 ); |
1323 |
|
bendArray[i] = qBend; |
1324 |
< |
} |
1324 |
> |
} |
1325 |
|
} |
1326 |
|
} |
1327 |
|
} |
1328 |
|
|
1329 |
< |
void TraPPE_ExFF::initializeTorsions( int nTorsions, Torsion** torsionArray, |
1329 |
> |
void DUFF::initializeTorsions( int nTorsions, Torsion** torsionArray, |
1330 |
|
torsion_set* the_torsions ){ |
1331 |
|
|
1332 |
|
int i, a, b, c, d; |
1373 |
|
} |
1374 |
|
} |
1375 |
|
|
1376 |
< |
void TraPPE_ExFF::fastForward( char* stopText, char* searchOwner ){ |
1376 |
> |
void DUFF::fastForward( char* stopText, char* searchOwner ){ |
1377 |
|
|
1378 |
|
int foundText = 0; |
1379 |
|
char* the_token; |
1428 |
|
} |
1429 |
|
|
1430 |
|
|
1431 |
< |
int TPE::parseAtom( char *lineBuffer, int lineNum, atomStruct &info ){ |
1431 |
> |
int DUFF_NS::parseAtom( char *lineBuffer, int lineNum, atomStruct &info ){ |
1432 |
|
|
1433 |
|
char* the_token; |
1434 |
|
|
1514 |
|
} |
1515 |
|
|
1516 |
|
info.v0 = atof( the_token ); |
1517 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1518 |
+ |
sprintf( painCave.errMsg, |
1519 |
+ |
"Error parseing AtomTypes: line %d\n", lineNum ); |
1520 |
+ |
painCave.isFatal = 1; |
1521 |
+ |
simError(); |
1522 |
+ |
} |
1523 |
+ |
|
1524 |
+ |
info.v0p = atof( the_token ); |
1525 |
+ |
|
1526 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1527 |
+ |
sprintf( painCave.errMsg, |
1528 |
+ |
"Error parseing AtomTypes: line %d\n", lineNum ); |
1529 |
+ |
painCave.isFatal = 1; |
1530 |
+ |
simError(); |
1531 |
+ |
} |
1532 |
+ |
|
1533 |
+ |
info.rl = atof( the_token ); |
1534 |
+ |
|
1535 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1536 |
+ |
sprintf( painCave.errMsg, |
1537 |
+ |
"Error parseing AtomTypes: line %d\n", lineNum ); |
1538 |
+ |
painCave.isFatal = 1; |
1539 |
+ |
simError(); |
1540 |
+ |
} |
1541 |
+ |
|
1542 |
+ |
info.ru = atof( the_token ); |
1543 |
+ |
|
1544 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1545 |
+ |
sprintf( painCave.errMsg, |
1546 |
+ |
"Error parseing AtomTypes: line %d\n", lineNum ); |
1547 |
+ |
painCave.isFatal = 1; |
1548 |
+ |
simError(); |
1549 |
+ |
} |
1550 |
+ |
|
1551 |
+ |
info.rlp = atof( the_token ); |
1552 |
+ |
|
1553 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1554 |
+ |
sprintf( painCave.errMsg, |
1555 |
+ |
"Error parseing AtomTypes: line %d\n", lineNum ); |
1556 |
+ |
painCave.isFatal = 1; |
1557 |
+ |
simError(); |
1558 |
+ |
} |
1559 |
+ |
|
1560 |
+ |
info.rup = atof( the_token ); |
1561 |
|
} |
1562 |
< |
else info.v0 = info.w0 = 0.0; |
1562 |
> |
else info.v0 = info.w0 = info.v0p = info.rl = info.ru = info.rlp = info.rup = 0.0; |
1563 |
|
|
1564 |
|
return 1; |
1565 |
|
} |
1566 |
|
else return 0; |
1567 |
|
} |
1568 |
|
|
1569 |
< |
int TPE::parseBond( char *lineBuffer, int lineNum, bondStruct &info ){ |
1569 |
> |
int DUFF_NS::parseBond( char *lineBuffer, int lineNum, bondStruct &info ){ |
1570 |
|
|
1571 |
|
char* the_token; |
1572 |
+ |
char bondType[30]; |
1573 |
|
|
1574 |
|
the_token = strtok( lineBuffer, " \n\t,;" ); |
1575 |
|
if( the_token != NULL ){ |
1592 |
|
simError(); |
1593 |
|
} |
1594 |
|
|
1595 |
< |
strcpy( info.type, the_token ); |
1595 |
> |
strcpy( bondType, the_token ); |
1596 |
|
|
1597 |
< |
if( !strcmp( info.type, "fixed" ) ){ |
1597 |
> |
if( !strcmp( bondType, "fixed" ) ){ |
1598 |
> |
info.type = FIXED_BOND; |
1599 |
> |
|
1600 |
|
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1601 |
|
sprintf( painCave.errMsg, |
1602 |
|
"Error parseing BondTypes: line %d\n", lineNum ); |
1605 |
|
} |
1606 |
|
|
1607 |
|
info.d0 = atof( the_token ); |
1608 |
+ |
|
1609 |
+ |
info.k0=0.0; |
1610 |
|
} |
1611 |
+ |
else if( !strcmp( bondType, "harmonic" ) ){ |
1612 |
+ |
info.type = HARMONIC_BOND; |
1613 |
+ |
|
1614 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1615 |
+ |
sprintf( painCave.errMsg, |
1616 |
+ |
"Error parseing BondTypes: line %d\n", lineNum ); |
1617 |
+ |
painCave.isFatal = 1; |
1618 |
+ |
simError(); |
1619 |
+ |
} |
1620 |
+ |
|
1621 |
+ |
info.d0 = atof( the_token ); |
1622 |
+ |
|
1623 |
+ |
if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){ |
1624 |
+ |
sprintf( painCave.errMsg, |
1625 |
+ |
"Error parseing BondTypes: line %d\n", lineNum ); |
1626 |
+ |
painCave.isFatal = 1; |
1627 |
+ |
simError(); |
1628 |
+ |
} |
1629 |
+ |
|
1630 |
+ |
info.k0 = atof( the_token ); |
1631 |
+ |
} |
1632 |
+ |
|
1633 |
|
else{ |
1634 |
|
sprintf( painCave.errMsg, |
1635 |
< |
"Unknown TraPPE_Ex bond type \"%s\" at line %d\n", |
1636 |
< |
info.type, |
1635 |
> |
"Unknown DUFF bond type \"%s\" at line %d\n", |
1636 |
> |
bondType, |
1637 |
|
lineNum ); |
1638 |
|
painCave.isFatal = 1; |
1639 |
|
simError(); |
1645 |
|
} |
1646 |
|
|
1647 |
|
|
1648 |
< |
int TPE::parseBend( char *lineBuffer, int lineNum, bendStruct &info ){ |
1648 |
> |
int DUFF_NS::parseBend( char *lineBuffer, int lineNum, bendStruct &info ){ |
1649 |
|
|
1650 |
|
char* the_token; |
1651 |
|
|
1721 |
|
|
1722 |
|
else{ |
1723 |
|
sprintf( painCave.errMsg, |
1724 |
< |
"Unknown TraPPE_Ex bend type \"%s\" at line %d\n", |
1724 |
> |
"Unknown DUFF bend type \"%s\" at line %d\n", |
1725 |
|
info.type, |
1726 |
|
lineNum ); |
1727 |
|
painCave.isFatal = 1; |
1733 |
|
else return 0; |
1734 |
|
} |
1735 |
|
|
1736 |
< |
int TPE::parseTorsion( char *lineBuffer, int lineNum, torsionStruct &info ){ |
1736 |
> |
int DUFF_NS::parseTorsion( char *lineBuffer, int lineNum, torsionStruct &info ){ |
1737 |
|
|
1738 |
|
char* the_token; |
1739 |
|
|
1819 |
|
|
1820 |
|
else{ |
1821 |
|
sprintf( painCave.errMsg, |
1822 |
< |
"Unknown TraPPE_Ex torsion type \"%s\" at line %d\n", |
1822 |
> |
"Unknown DUFF torsion type \"%s\" at line %d\n", |
1823 |
|
info.type, |
1824 |
|
lineNum ); |
1825 |
|
painCave.isFatal = 1; |