--- trunk/OOPSE-4/src/io/MetalNonMetalInteractionsSectionParser.cpp 2007/07/06 18:14:35 3152 +++ trunk/OOPSE-4/src/io/MetalNonMetalInteractionsSectionParser.cpp 2008/06/05 15:53:59 3407 @@ -55,7 +55,7 @@ namespace oopse { stringToEnumMap_["MAW"] = MAW; stringToEnumMap_["ShiftedMorse"] = ShiftedMorse; stringToEnumMap_["LennardJones"] = LennardJones; - stringToEnumMap_["RepulsiveMorse"] = LennardJones; + stringToEnumMap_["RepulsiveMorse"] = RepulsiveMorse; } @@ -73,55 +73,71 @@ namespace oopse { std::string at1 = tokenizer.nextToken(); std::string at2 = tokenizer.nextToken(); - MetalNonMetalInteractionTypeEnum nbit = getMetalNonMetalInteractionTypeEnum(tokenizer.nextToken()); + std::string itype = tokenizer.nextToken(); + + MetalNonMetalInteractionTypeEnum nbit = getMetalNonMetalInteractionTypeEnum(itype); nTokens -= 3; - NonBondedInteractionType* interactionType; - + NonBondedInteractionType* interactionType; + //switch is a nightmare to maintain switch(nbit) { case MAW : - if (nTokens < 6) { - sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", - lineNo); - painCave.isFatal = 1; - simError(); - } else { - RealType r0 = tokenizer.nextTokenAsDouble(); - RealType D0 = tokenizer.nextTokenAsDouble(); - RealType beta0 = tokenizer.nextTokenAsDouble(); - RealType betaH = tokenizer.nextTokenAsDouble(); - RealType gamma = tokenizer.nextTokenAsDouble(); - RealType alpha = tokenizer.nextTokenAsDouble(); - interactionType = new MAWInteractionType(D0, beta0, r0, betaH, gamma, alpha); - } - break; - + if (nTokens < 5) { + sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", + lineNo); + painCave.isFatal = 1; + simError(); + } else { + RealType r_e = tokenizer.nextTokenAsDouble(); + RealType D_e = tokenizer.nextTokenAsDouble(); + RealType beta = tokenizer.nextTokenAsDouble(); + RealType ca1 = tokenizer.nextTokenAsDouble(); + RealType cb1 = tokenizer.nextTokenAsDouble(); + interactionType = new MAWInteractionType(D_e, beta, r_e, ca1, cb1); + } + break; + case ShiftedMorse : - if (nTokens < 3) { - sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", - lineNo); - painCave.isFatal = 1; - simError(); - } else { - RealType r0 = tokenizer.nextTokenAsDouble(); - RealType D0 = tokenizer.nextTokenAsDouble(); - RealType beta0 = tokenizer.nextTokenAsDouble(); - interactionType = new ShiftedMorseInteractionType(D0, beta0, r0); - } - break; + if (nTokens < 3) { + sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", + lineNo); + painCave.isFatal = 1; + simError(); + } else { + RealType r0 = tokenizer.nextTokenAsDouble(); + RealType D0 = tokenizer.nextTokenAsDouble(); + RealType beta0 = tokenizer.nextTokenAsDouble(); + interactionType = new ShiftedMorseInteractionType(D0, beta0, r0); + } + break; + case RepulsiveMorse : + if (nTokens < 3) { + sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", + lineNo); + painCave.isFatal = 1; + simError(); + } else { + RealType r0 = tokenizer.nextTokenAsDouble(); + RealType D0 = tokenizer.nextTokenAsDouble(); + RealType beta0 = tokenizer.nextTokenAsDouble(); + interactionType = new RepulsiveMorseInteractionType(D0, beta0, r0); + } + break; + case LennardJones : - if (nTokens < 2) { - sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", - lineNo); - painCave.isFatal = 1; - simError(); - } else { - RealType sigma = tokenizer.nextTokenAsDouble(); - RealType epsilon = tokenizer.nextTokenAsDouble(); - interactionType = new LennardJonesInteractionType(sigma, epsilon); - } - break; + if (nTokens < 2) { + sprintf(painCave.errMsg, "MetalNonMetalInteractionsSectionParser Error: Not enough tokens at line %d\n", + lineNo); + painCave.isFatal = 1; + simError(); + } else { + RealType sigma = tokenizer.nextTokenAsDouble(); + RealType epsilon = tokenizer.nextTokenAsDouble(); + interactionType = new LennardJonesInteractionType(sigma, epsilon); + std::cerr << "Interaction sigma, epsilon: " << sigma << "\t" << epsilon <