ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/DUFF.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/DUFF.cpp (file contents):
Revision 561 by mmeineke, Fri Jun 20 20:29:36 2003 UTC vs.
Revision 941 by gezelter, Tue Jan 13 23:01:43 2004 UTC

# Line 1 | Line 1
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;
# Line 15 | Line 15 | namespace TPE {  // restrict the access of the folowin
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{
# Line 25 | Line 32 | namespace TPE {  // restrict the access of the folowin
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
# Line 39 | Line 53 | namespace TPE {  // restrict the access of the folowin
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    
# Line 130 | Line 145 | namespace TPE {  // restrict the access of the folowin
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      }
# Line 146 | Line 166 | namespace TPE {  // restrict the access of the folowin
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      }
# Line 162 | Line 187 | namespace TPE {  // restrict the access of the folowin
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    };
# Line 172 | Line 202 | namespace TPE {  // restrict the access of the folowin
202        next = NULL;
203        nameA[0] = '\0';
204        nameB[0] = '\0';
175      type[0] = '\0';
205      }
206      ~LinkedBondType(){ if( next != NULL ) delete next; }
207  
# Line 207 | Line 236 | namespace TPE {  // restrict the access of the folowin
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      
# Line 216 | Line 246 | namespace TPE {  // restrict the access of the folowin
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  
# Line 226 | Line 257 | namespace TPE {  // restrict the access of the folowin
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    };
# Line 410 | Line 442 | using namespace TPE;
442  
443   } // namespace
444  
445 < using namespace TPE;
445 > using namespace DUFF_NS;
446  
447  
448   //****************************************************************
# Line 424 | Line 456 | DUFF::DUFF(){
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;
# Line 446 | Line 477 | DUFF::DUFF(){
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,11,4};  // block counts
481    MPI_Aint atomDspls[3];           // displacements
482    MPI_Datatype atomMbrTypes[3];    // member mpi types
483  
# Line 468 | Line 499 | DUFF::DUFF(){
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    
# Line 628 | Line 659 | void DUFF::readParams( void ){
659  
660   void DUFF::readParams( void ){
661  
631  int i, a, b, c, d;
662    int identNum;
633  char* atomA;
634  char* atomB;
635  char* atomC;
636  char* atomD;
663    
664    atomStruct atomInfo;
665    bondStruct bondInfo;
# Line 754 | Line 780 | void DUFF::readParams( void ){
780    
781    int isGB = 0;
782    int isLJ = 1;
783 <  double GB_dummy = 0.0;
784 <  
785 <  
783 >  int isEAM =0;
784 >  int isCharge = 0;
785 >  double charge=0.0;
786 >    
787    currentAtomType = headAtomType->next;;
788    while( currentAtomType != NULL ){
789      
790 <    if(currentAtomType->isDipole) entry_plug->useDipole = 1;
790 >    if(currentAtomType->isDipole) entry_plug->useDipoles = 1;
791      if(currentAtomType->isSSD) {
792        entry_plug->useSticky = 1;
793 <      set_sticky_params( &(currentAtomType->w0), &(currentAtomType->v0));
793 >      set_sticky_params( &(currentAtomType->w0), &(currentAtomType->v0),
794 >                         &(currentAtomType->v0p),
795 >                         &(currentAtomType->rl), &(currentAtomType->ru),
796 >                         &(currentAtomType->rlp), &(currentAtomType->rup));
797      }
798  
799      if( currentAtomType->name[0] != '\0' ){
# Line 773 | Line 803 | void DUFF::readParams( void ){
803                   &(currentAtomType->isSSD),
804                   &(currentAtomType->isDipole),
805                   &isGB,
806 +                 &isEAM,
807 +                 &isCharge,
808                   &(currentAtomType->epslon),
809                   &(currentAtomType->sigma),
810 +                 &charge,
811                   &(currentAtomType->dipole),
812                   &isError );
813        if( isError ){
# Line 1189 | Line 1222 | void DUFF::initializeBonds( int nBonds, Bond** bondArr
1222        simError();
1223      }
1224      
1225 <    if( !strcmp( currentBondType->type, "fixed" ) ){
1226 <      
1225 >    switch( currentBondType->type ){
1226 >
1227 >    case FIXED_BOND:
1228 >            
1229        bondArray[i] = new ConstrainedBond( *the_atoms[a],
1230                                            *the_atoms[b],
1231                                            currentBondType->d0 );
1232        entry_plug->n_constraints++;
1233 +      break;
1234 +
1235 +    case HARMONIC_BOND:
1236 +      
1237 +      bondArray[i] = new HarmonicBond( *the_atoms[a],
1238 +                                       *the_atoms[b],
1239 +                                       currentBondType->d0,
1240 +                                       currentBondType->k0 );
1241 +      break;
1242 +      
1243 +    default:
1244 +
1245 +      break;
1246 +      // do nothing
1247      }
1248    }
1249   }
# Line 1259 | Line 1308 | void DUFF::initializeBends( int nBends, Bend** bendArr
1308          }
1309          
1310          gBend = new GhostBend( *the_atoms[a],
1311 <                               *the_atoms[b] );                        
1311 >                               *the_atoms[b]);
1312 >                                                                      
1313          gBend->setConstants( currentBendType->k1,
1314                               currentBendType->k2,
1315                               currentBendType->k3,
# Line 1275 | Line 1325 | void DUFF::initializeBends( int nBends, Bend** bendArr
1325                               currentBendType->k3,
1326                               currentBendType->t0 );
1327          bendArray[i] = qBend;
1328 <      }
1328 >      }      
1329      }
1330    }
1331   }
# Line 1382 | Line 1432 | int TPE::parseAtom( char *lineBuffer, int lineNum, ato
1432   }
1433  
1434  
1435 < int TPE::parseAtom( char *lineBuffer, int lineNum, atomStruct &info ){
1435 > int DUFF_NS::parseAtom( char *lineBuffer, int lineNum, atomStruct &info ){
1436  
1437    char* the_token;
1438    
# Line 1468 | Line 1518 | int TPE::parseAtom( char *lineBuffer, int lineNum, ato
1518        }
1519        
1520        info.v0 = atof( the_token );
1521 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1522 +        sprintf( painCave.errMsg,
1523 +                 "Error parseing AtomTypes: line %d\n", lineNum );
1524 +        painCave.isFatal = 1;
1525 +        simError();
1526 +      }
1527 +      
1528 +      info.v0p = atof( the_token );
1529 +
1530 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1531 +        sprintf( painCave.errMsg,
1532 +                 "Error parseing AtomTypes: line %d\n", lineNum );
1533 +        painCave.isFatal = 1;
1534 +        simError();
1535 +      }
1536 +      
1537 +      info.rl = atof( the_token );
1538 +
1539 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1540 +        sprintf( painCave.errMsg,
1541 +                 "Error parseing AtomTypes: line %d\n", lineNum );
1542 +        painCave.isFatal = 1;
1543 +        simError();
1544 +      }
1545 +      
1546 +      info.ru = atof( the_token );
1547 +
1548 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1549 +        sprintf( painCave.errMsg,
1550 +                 "Error parseing AtomTypes: line %d\n", lineNum );
1551 +        painCave.isFatal = 1;
1552 +        simError();
1553 +      }
1554 +      
1555 +      info.rlp = atof( the_token );
1556 +
1557 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1558 +        sprintf( painCave.errMsg,
1559 +                 "Error parseing AtomTypes: line %d\n", lineNum );
1560 +        painCave.isFatal = 1;
1561 +        simError();
1562 +      }
1563 +      
1564 +      info.rup = atof( the_token );
1565      }
1566 <    else info.v0 = info.w0 = 0.0;
1566 >    else info.v0 = info.w0 = info.v0p = info.rl = info.ru = info.rlp = info.rup = 0.0;
1567  
1568      return 1;
1569    }
1570    else return 0;
1571   }
1572  
1573 < int TPE::parseBond( char *lineBuffer, int lineNum, bondStruct &info ){
1573 > int DUFF_NS::parseBond( char *lineBuffer, int lineNum, bondStruct &info ){
1574  
1575    char* the_token;
1576 +  char bondType[30];
1577    
1578    the_token = strtok( lineBuffer, " \n\t,;" );
1579    if( the_token != NULL ){
# Line 1501 | Line 1596 | int TPE::parseBond( char *lineBuffer, int lineNum, bon
1596        simError();
1597      }
1598      
1599 <    strcpy( info.type, the_token );
1599 >    strcpy( bondType, the_token );
1600      
1601 <    if( !strcmp( info.type, "fixed" ) ){
1601 >    if( !strcmp( bondType, "fixed" ) ){
1602 >      info.type = FIXED_BOND;
1603 >      
1604        if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1605          sprintf( painCave.errMsg,
1606                   "Error parseing BondTypes: line %d\n", lineNum );
# Line 1512 | Line 1609 | int TPE::parseBond( char *lineBuffer, int lineNum, bon
1609        }
1610        
1611        info.d0 = atof( the_token );
1612 +      
1613 +      info.k0=0.0;
1614      }
1615 +    else if( !strcmp( bondType, "harmonic" ) ){
1616 +      info.type = HARMONIC_BOND;
1617 +      
1618 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1619 +        sprintf( painCave.errMsg,
1620 +                 "Error parseing BondTypes: line %d\n", lineNum );
1621 +        painCave.isFatal = 1;
1622 +        simError();
1623 +      }
1624 +      
1625 +      info.d0 = atof( the_token );
1626 +
1627 +      if( ( the_token = strtok( NULL, " \n\t,;" ) ) == NULL ){
1628 +        sprintf( painCave.errMsg,
1629 +                 "Error parseing BondTypes: line %d\n", lineNum );
1630 +        painCave.isFatal = 1;
1631 +        simError();
1632 +      }
1633 +      
1634 +      info.k0 = atof( the_token );
1635 +    }
1636 +
1637      else{
1638        sprintf( painCave.errMsg,
1639                 "Unknown DUFF bond type \"%s\" at line %d\n",
1640 <               info.type,
1640 >               bondType,
1641                 lineNum );
1642        painCave.isFatal = 1;
1643        simError();
# Line 1528 | Line 1649 | int TPE::parseBend( char *lineBuffer, int lineNum, ben
1649   }
1650  
1651  
1652 < int TPE::parseBend( char *lineBuffer, int lineNum, bendStruct &info ){
1652 > int DUFF_NS::parseBend( char *lineBuffer, int lineNum, bendStruct &info ){
1653  
1654    char* the_token;
1655    
# Line 1616 | Line 1737 | int TPE::parseTorsion( char *lineBuffer, int lineNum,
1737    else return 0;
1738   }
1739  
1740 < int TPE::parseTorsion( char *lineBuffer, int lineNum, torsionStruct &info ){
1740 > int DUFF_NS::parseTorsion( char *lineBuffer, int lineNum, torsionStruct &info ){
1741    
1742    char*  the_token;
1743  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines