Difference for src/SimParameters.C from version 1.1463 to 1.1464

version 1.1463version 1.1464
Line 7
Line 7
 /***************************************************************************** /*****************************************************************************
  * $Source: /home/cvs/namd/cvsroot/namd2/src/SimParameters.C,v $  * $Source: /home/cvs/namd/cvsroot/namd2/src/SimParameters.C,v $
  * $Author: jim $  * $Author: jim $
  * $Date: 2016/07/29 21:16:22 $  * $Date: 2016/09/05 18:25:43 $
  * $Revision: 1.1463 $  * $Revision: 1.1464 $
  *****************************************************************************/  *****************************************************************************/
  
 /** \file SimParameters.C /** \file SimParameters.C
Line 264
Line 264
     fixedAtomsOn = atobool(value);     fixedAtomsOn = atobool(value);
     return;     return;
   }   }
  //  SCRIPT_PARSE_BOOL("extraBonds", extraBondsOn)
  //  SCRIPT_PARSE_STRING("binCoordinates", binCoordinateFilename)
  
  //fepb
  //  SCRIPT_PARSE_BOOL("alch", alchOn)
  
 //Modifications for alchemical fep 
   SCRIPT_PARSE_INT("alchEquilSteps",alchEquilSteps)   SCRIPT_PARSE_INT("alchEquilSteps",alchEquilSteps)
  
   if ( ! strncasecmp(param,"alchRepLambda",MAX_SCRIPT_PARAM_SIZE) ) {   if ( ! strncasecmp(param,"alchRepLambda",MAX_SCRIPT_PARAM_SIZE) ) {
Line 333
Line 337
   }   }
 //fepe //fepe
  
 // REDUNDANT TI BEGINS 
 //  if ( ! strncasecmp(param,"tiLambda",MAX_SCRIPT_PARAM_SIZE) ) { 
 //    alchLambda = atof(value); 
 //    ComputeNonbondedUtil::select(); 
 //    return; 
 //  } 
 // REDUNDANT TI ENDS 
  
   if ( ! strncasecmp(param,"nonbondedScaling",MAX_SCRIPT_PARAM_SIZE) ) {   if ( ! strncasecmp(param,"nonbondedScaling",MAX_SCRIPT_PARAM_SIZE) ) {
     nonbondedScaling = atof(value);     nonbondedScaling = atof(value);
     ComputeNonbondedUtil::select();     ComputeNonbondedUtil::select();
Line 736
Line 732
    opts.require("amber", "parmfile", "AMBER parm file", PARSE_STRING);    opts.require("amber", "parmfile", "AMBER parm file", PARSE_STRING);
    opts.optional("amber", "ambercoor", "AMBER coordinate file", PARSE_STRING);    opts.optional("amber", "ambercoor", "AMBER coordinate file", PARSE_STRING);
  
 //Modifications for alchemical fep 
 // begin fep output options     
    opts.optional("alch", "alchoutfreq", "Frequency of alchemical energy" 
      "output in timesteps", &alchOutFreq, 5); 
    opts.range("alchoutfreq", NOT_NEGATIVE); 
    opts.optional("alchoutfreq", "alchoutfile", "Alchemical energy output" 
        "filename", alchOutFile); 
 // end fep output options 
 //fepe 
  
 // REDUNDANT TI BEGINS  
 //   opts.optional("thermInt", "tioutfreq", "Frequency of TI energy output in " 
 //     "timesteps", &tiOutFreq, 5); 
 //   opts.range("tioutfreq", NOT_NEGATIVE); 
 //   opts.optional("tioutfreq", "tioutfile", "TI energy output filename", 
 //     tiOutFile); 
 // REDUNDANT TI ENDS 
  
    /* GROMACS options */    /* GROMACS options */
    opts.optionalB("main", "gromacs", "Use GROMACS-like force field?",    opts.optionalB("main", "gromacs", "Use GROMACS-like force field?",
        &gromacsOn, FALSE);        &gromacsOn, FALSE);
Line 1021
Line 999
    opts.units("loweAndersenCutoff", N_ANGSTROM);    opts.units("loweAndersenCutoff", N_ANGSTROM);
 // END LA // END LA
  
 //Modifications for alchemical fep //fepb
 //  alchemical fep options 
    opts.optionalB("main", "alch", "Is achemical simulation being performed?",    opts.optionalB("main", "alch", "Is achemical simulation being performed?",
      &alchOn, FALSE);      &alchOn, FALSE);
    opts.optional("alch", "alchType", "Which alchemical method to use?",  
        PARSE_STRING); 
    opts.optionalB("alch", "alchFepWCARepuOn", "WCA decomposition repu interaction in use?", 
      &alchFepWCARepuOn, FALSE); 
    opts.optionalB("alch", "alchFepWCADispOn", "WCA decomposition disp interaction in use?", 
      &alchFepWCADispOn, FALSE); 
    opts.optionalB("alch", "alchEnsembleAvg", "Ensemble Average in use?", 
      &alchEnsembleAvg, TRUE); 
    opts.optionalB("alch", "alchFepWhamOn", "Energy output for Wham postprocessing in use?", 
      &alchFepWhamOn, FALSE);    
    opts.optional("alch", "alchFepWCArcut1", "WCA repulsion Coeff1 used for generating" 
      "the altered alchemical vDW interactions", &alchFepWCArcut1, 0.0); 
    opts.optional("alch", "alchFepWCArcut2", "WCA repulsion Coeff2 used for generating" 
      "the altered alchemical vDW interactions", &alchFepWCArcut2, 1.0); 
    opts.optional("alch", "alchFepWCArcut3", "WCA repulsion Coeff3 used for generating" 
      "the altered alchemical vDW interactions", &alchFepWCArcut3, 1.0); 
    opts.range("alchFepWCArcut1", NOT_NEGATIVE);  
    opts.range("alchFepWCArcut2", NOT_NEGATIVE); 
    opts.range("alchFepWCArcut3", NOT_NEGATIVE); 
  
    opts.optional("alch", "alchRepLambda", "Lambda of WCA repulsion" 
      "Coupling parameter value for WCA repulsion", &alchRepLambda, -1.0); // an invalid lambda value 
    opts.optional("alch", "alchDispLambda", "Lambda of WCA dispersion" 
      "Coupling parameter value for WCA dispersion", &alchDispLambda, -1.0); // an invalid lambda value 
    opts.optional("alch", "alchElecLambda", "Lambda of electrostatic perturbation" 
      "Coupling parameter value for electrostatic perturbation", &alchElecLambda, -1.0); // an invalid lambda value 
  
   opts.require("alch", "alchLambda", "Coupling parameter value",    opts.require("alch", "alchLambda", "Coupling parameter value", 
       &alchLambda);       &alchLambda);
   opts.optional("alch", "alchLambda2", "Coupling comparison value", 
       &alchLambda2); 
   opts.optional("alch", "alchLambdaFreq", "Frequency of increasing coupling parameter value", 
       &alchLambdaFreq); 
    opts.optional("alch", "alchFile", "PDB file with perturbation flags "    opts.optional("alch", "alchFile", "PDB file with perturbation flags "
      "default is the input PDB file", PARSE_STRING);       "default is the input PDB file", PARSE_STRING); 
    opts.optional("alch", "alchCol", "Column in the alchFile with the "    opts.optional("alch", "alchCol", "Column in the alchFile with the "
      "perturbation flag", PARSE_STRING);      "perturbation flag", PARSE_STRING);
    opts.optional("alch", "alchEquilSteps", "Equilibration steps, before " 
      "data collection in the alchemical window", &alchEquilSteps, 0);    opts.optional("alch", "alchOutFreq", "Frequency of alchemical energy"
    opts.range("alchEquilSteps", NOT_NEGATIVE);      "output in timesteps", &alchOutFreq, 5);
     opts.range("alchoutfreq", NOT_NEGATIVE);
     opts.optional("alch", "alchOutFile", "Alchemical energy output filename",
       alchOutFile);
  
     // soft-core parameters
    opts.optional("alch", "alchVdwShiftCoeff", "Coeff used for generating"    opts.optional("alch", "alchVdwShiftCoeff", "Coeff used for generating"
      "the altered alchemical vDW interactions", &alchVdwShiftCoeff, 5.);      "the altered alchemical vDW interactions", &alchVdwShiftCoeff, 5.);
    opts.range("alchVdwShiftCoeff", NOT_NEGATIVE);    opts.range("alchVdwShiftCoeff", NOT_NEGATIVE);
        
     // scheduling options for different interaction types
    opts.optional("alch", "alchElecLambdaStart", "Lambda at which electrostatic"    opts.optional("alch", "alchElecLambdaStart", "Lambda at which electrostatic"
       "scaling of exnihilated particles begins", &alchElecLambdaStart, 0.5);        "scaling of exnihilated particles begins", &alchElecLambdaStart, 0.5); 
    opts.range("alchElecLambdaStart", NOT_NEGATIVE);    opts.range("alchElecLambdaStart", NOT_NEGATIVE);
Line 1081
Line 1034
       "scaling of exnihilated particles begins", &alchBondLambdaEnd, 1.0);       "scaling of exnihilated particles begins", &alchBondLambdaEnd, 1.0);
    opts.range("alchBondLambdaEnd", NOT_NEGATIVE);    opts.range("alchBondLambdaEnd", NOT_NEGATIVE);
  
     opts.optionalB("alch", "alchDecouple", "Enable alchemical decoupling?",
 // end FEP options 
 //fepe 
  
 // REDUNDANT TI BEGINS 
 // Modifications for TI 
 // lots of duplication of FEP, we'd be better off without all this but  
 // keeping it in place for now for compatibility 
 //   opts.optionalB("main", "thermInt", "Perform thermodynamic integration?", 
 //     &thermInt, FALSE); 
 // opts.require("thermInt", "tilambda", "Coupling parameter value", &tiLambda); 
 // opts.optional("thermInt", "tiFile", "PDB file with perturbation flags " 
 //     "default is the input PDB file", PARSE_STRING);  
 //   opts.optional("thermInt", "tiCol", "Column in the tiFile with the " 
 //     "perturbation flag", PARSE_STRING); 
 //   opts.optional("thermInt", "tiEquilSteps", "Equilibration steps, before " 
 //     "data collection at each tiLambda value", &tiEquilSteps, 0); 
 //   opts.range("tiEquilSteps", NOT_NEGATIVE); 
 //   opts.optional("thermInt", "tiVdwShiftCoeff", "Coeff used for generating" 
 //     "the altered alchemical vDW interactions", &tiVdwShiftCoeff, 5.); 
 //   opts.range("tiVdwShiftCoeff", NOT_NEGATIVE); 
 //    
 //   opts.optional("thermInt", "tiElecLambdaStart", "Lambda at which to start" 
 //      "electrostatics scaling", &tiElecLambdaStart, 0.5);  
 //   opts.range("tiElecLambdaStart", NOT_NEGATIVE); 
 //    
 //   opts.optional("thermInt", "tiVdwLambdaEnd", "Lambda at which to end" 
 //      "Vdw scaling", &tiVdwLambdaEnd, 0.5);  
 //   opts.range("tiVdwLambdaEnd", NOT_NEGATIVE);   
 // end TI options 
 // REDUNDANT TI ENDS 
  
    opts.optionalB("main", "alchDecouple", "Enable alchemical decoupling?", 
      &alchDecouple, FALSE);      &alchDecouple, FALSE);
    opts.optionalB("main", "alchBondDecouple", "Enable decoupling of purely "    opts.optionalB("alch", "alchBondDecouple", "Enable decoupling of purely "
      "alchemical bonds?", &alchBondDecouple, FALSE);      "alchemical bonds?", &alchBondDecouple, FALSE);
  
     // parameters for alchemical analysis options
     opts.optional("alch", "alchType", "Which alchemical method to use?",
       PARSE_STRING);
     opts.optional("alch", "alchLambda2", "Coupling comparison value",
       &alchLambda2);
     opts.optional("alch", "alchLambdaFreq",
       "Frequency of increasing coupling parameter value", &alchLambdaFreq, 0);
     opts.range("alchLambdaFreq", NOT_NEGATIVE);
     opts.optional("alch", "alchSwitchType", "Switching type flag",
       PARSE_STRING);
     opts.optional("alch", "alchEquilSteps", "Equilibration steps, before "
       "data collection in the alchemical window", &alchEquilSteps, 0);
     opts.range("alchEquilSteps", NOT_NEGATIVE);
  
     // WCA decomposition options
     opts.optionalB("alch", "alchFepWCARepuOn",
       "WCA decomposition repu interaction in use?", &alchFepWCARepuOn, FALSE);
     opts.optionalB("alch", "alchFepWCADispOn",
       "WCA decomposition disp interaction in use?", &alchFepWCADispOn, FALSE);
     opts.optionalB("alch", "alchEnsembleAvg", "Ensemble Average in use?",
       &alchEnsembleAvg, TRUE);
     opts.optionalB("alch", "alchFepWhamOn",
       "Energy output for Wham postprocessing in use?", &alchFepWhamOn, FALSE);
     opts.optional("alch", "alchFepWCArcut1",
       "WCA repulsion Coeff1 used for generating the altered alchemical vDW "
       "interactions", &alchFepWCArcut1, 0.0);
     opts.range("alchFepWCArcut1", NOT_NEGATIVE);
     opts.optional("alch", "alchFepWCArcut2", "WCA repulsion Coeff2 used for "
       "generating the altered alchemical vDW interactions", &alchFepWCArcut2,
       1.0);
     opts.range("alchFepWCArcut2", NOT_NEGATIVE);
     opts.optional("alch", "alchFepWCArcut3",
       "WCA repulsion Coeff3 used for generating the altered alchemical vDW "
       "interactions", &alchFepWCArcut3, 1.0);
     opts.range("alchFepWCArcut3", NOT_NEGATIVE);
     // These default to invalid lambda values.
     opts.optional("alch", "alchRepLambda", "Lambda of WCA repulsion"
       "Coupling parameter value for WCA repulsion", &alchRepLambda, -1.0);
     opts.optional("alch", "alchDispLambda", "Lambda of WCA dispersion"
       "Coupling parameter value for WCA dispersion", &alchDispLambda, -1.0);
     opts.optional("alch", "alchElecLambda", "Lambda of electrostatic "
       "perturbation Coupling parameter value for electrostatic perturbation",
       &alchElecLambda, -1.0);
  //fepe
  
    opts.optionalB("main", "les", "Is locally enhanced sampling enabled?",    opts.optionalB("main", "les", "Is locally enhanced sampling enabled?",
      &lesOn, FALSE);      &lesOn, FALSE);
    opts.require("les", "lesFactor", "Local enhancement factor", &lesFactor);    opts.require("les", "lesFactor", "Local enhancement factor", &lesFactor);
Line 3210
Line 3176
       randomSeed = (unsigned int) time(NULL) + 31530001 * CmiMyPartition();       randomSeed = (unsigned int) time(NULL) + 31530001 * CmiMyPartition();
    }    }
  
 //Modifications for alchemical fep //fepb
  
    alchFepOn = FALSE;    alchFepOn = FALSE;
    alchThermIntOn = FALSE;    alchThermIntOn = FALSE;
  
    if (alchOn) {    if (alchOn) {
  
      if (vdwForceSwitching && (alchFepWCARepuOn || alchFepWCADispOn)) {      if (vdwForceSwitching && (alchFepWCARepuOn || alchFepWCADispOn)) {
        iout << iWARN << "vdwForceSwitching not implemented for alchemical "        iout << iWARN << "vdwForceSwitching not implemented for alchemical "
    "interactions when WCA decomposition is on!\n" << endi;    "interactions when WCA decomposition is on!\n" << endi;
      }      }
       if (martiniSwitching) {
      if (alchOn && martiniSwitching) { 
        iout << iWARN << "Martini switching disabled for alchemical "        iout << iWARN << "Martini switching disabled for alchemical "
    "interactions.\n" << endi;    "interactions.\n" << endi;
      }      }
  
      if (!opts.defined("alchType"))       if (!opts.defined("alchType")) {
      { 
        NAMD_die("Must define type of alchemical simulation: fep or ti\n");        NAMD_die("Must define type of alchemical simulation: fep or ti\n");
      }      }
      else      else {
      { 
        opts.get("alchType",s);        opts.get("alchType",s);
        if (!strcasecmp(s, "fep"))        if (!strcasecmp(s, "fep")) {
        { 
          alchFepOn = TRUE;          alchFepOn = TRUE;
        }        }
        else if (!strcasecmp(s, "ti"))        else if (!strcasecmp(s, "ti")) {
        { 
          alchThermIntOn = TRUE;          alchThermIntOn = TRUE;
        }        }
        else        else {
        { 
          NAMD_die("Unknown type of alchemical simulation; choices are fep or ti\n");          NAMD_die("Unknown type of alchemical simulation; choices are fep or ti\n");
        }        }
      }      }
Line 3257
Line 3215
      if (reassignFreq > 0 && reassignIncr != 0)      if (reassignFreq > 0 && reassignIncr != 0)
  NAMD_die("reassignIncr cannot be used in alchemical simulations\n");  NAMD_die("reassignIncr cannot be used in alchemical simulations\n");
  
      if (alchLambda < 0.0 || alchLambda > 1.0 || alchLambda2 < 0.0 || alchLambda2 > 1.0)      if (alchLambda < 0.0 || alchLambda > 1.0 ||
           alchLambda2 < 0.0 || alchLambda2 > 1.0)
         NAMD_die("Alchemical lambda values should be in the range [0.0, 1.0]\n");         NAMD_die("Alchemical lambda values should be in the range [0.0, 1.0]\n");
  
      if ( alchOn && alchVdwLambdaEnd > 1.0)       if (alchVdwLambdaEnd > 1.0) 
         NAMD_die("Gosh tiny Elvis, you kicked soft-core in the van der Waals! alchVdwLambdaEnd should be in the range [0.0, 1.0]\n");         NAMD_die("Gosh tiny Elvis, you kicked soft-core in the van der Waals! alchVdwLambdaEnd should be in the range [0.0, 1.0]\n");
  
      if ( alchOn && alchBondLambdaEnd > 1.0)      if (alchBondLambdaEnd > 1.0)
        NAMD_die("alchBondLambdaEnd should be in the range [0.0, 1.0]\n");        NAMD_die("alchBondLambdaEnd should be in the range [0.0, 1.0]\n");
  
      if ( alchOn && alchElecLambdaStart > 1.0)       if (alchElecLambdaStart > 1.0) 
         NAMD_die("alchElecLambdaStart should be in the range [0.0, 1.0]\n");         NAMD_die("alchElecLambdaStart should be in the range [0.0, 1.0]\n");
  
      if (!opts.defined("alchLambdaFreq")) {      if (alchFepOn) {
          alchLambdaFreq = 0; 
      } 
       
      if (alchFepOn) 
      { 
        if (!opts.defined("alchoutfile")) {        if (!opts.defined("alchoutfile")) {
        strcpy(alchOutFile, outputFilename);        strcpy(alchOutFile, outputFilename);
        strcat(alchOutFile, ".fep");        strcat(alchOutFile, ".fep");
        }        }
  
       if( (!alchFepWhamOn) && ( (!opts.defined("alchLambda")) || (!opts.defined("alchLambda2"))) ) {        if (!alchFepWhamOn && 
             ((!opts.defined("alchLambda")) || (!opts.defined("alchLambda2")))) {
        NAMD_die("alchFepOn is on, but alchLambda or alchLambda2 is not set.");        NAMD_die("alchFepOn is on, but alchLambda or alchLambda2 is not set.");
       }       }
                
        if(alchRepLambda > 1.0) NAMD_die("alchRepLambda should be in the range [0.0, 1.0].");        if(alchRepLambda > 1.0)
        else if(alchRepLambda >= 0.0) alchFepWCARepuOn = true;          NAMD_die("alchRepLambda should be in the range [0.0, 1.0].");
        else alchFepWCARepuOn = false;        else if(alchRepLambda >= 0.0)
            alchFepWCARepuOn = true;
        if(alchDispLambda > 1.0) NAMD_die("alchDispLambda should be in the range [0.0, 1.0].");        else
        else if(alchDispLambda >= 0.0) alchFepWCADispOn = true;          alchFepWCARepuOn = false;
        else alchFepWCADispOn = false; 
   
        if(alchElecLambda > 1.0) NAMD_die("alchElecLambda should be in the range [0.0, 1.0]."); 
        else if(alchElecLambda >= 0.0) alchFepElecOn = true; 
        else alchFepElecOn = false; 
                
        if( (alchFepWCARepuOn || alchFepWCADispOn || alchFepElecOn) && (!alchFepWhamOn))        if(alchDispLambda > 1.0)
           NAMD_die("alchDispLambda should be in the range [0.0, 1.0].");
         else if(alchDispLambda >= 0.0)
           alchFepWCADispOn = true;
         else
           alchFepWCADispOn = false;
   
         if(alchElecLambda > 1.0)
           NAMD_die("alchElecLambda should be in the range [0.0, 1.0].");
         else if(alchElecLambda >= 0.0)
           alchFepElecOn = true;
         else
           alchFepElecOn = false;
         
         if ((alchFepWCARepuOn || alchFepWCADispOn || alchFepElecOn) && 
             !alchFepWhamOn)
           NAMD_die("alchFepWhamOn has to be on if one of alchFepWCARepuOn/alchFepWCADispOn/alchFepElecOn is set.");           NAMD_die("alchFepWhamOn has to be on if one of alchFepWCARepuOn/alchFepWCADispOn/alchFepElecOn is set.");
        if (alchFepWCARepuOn && alchFepWCADispOn)        if (alchFepWCARepuOn && alchFepWCADispOn)
           NAMD_die("With WCA decomposition, repulsion and dispersion can NOT be in the same FEP stage");           NAMD_die("With WCA decomposition, repulsion and dispersion can NOT be in the same FEP stage");
Line 3304
Line 3269
           NAMD_die("With WCA decomposition, repulsion and electrostatic perturbation can NOT be in the same FEP stage");           NAMD_die("With WCA decomposition, repulsion and electrostatic perturbation can NOT be in the same FEP stage");
        if (alchFepWCADispOn && alchFepElecOn)        if (alchFepWCADispOn && alchFepElecOn)
           NAMD_die("With WCA decomposition, dispersion and electrostatic perturbation can NOT be in the same FEP stage");           NAMD_die("With WCA decomposition, dispersion and electrostatic perturbation can NOT be in the same FEP stage");
        if (alchFepWCARepuOn && (!opts.defined("alchFepWCArcut1")||!opts.defined("alchFepWCArcut2")||!opts.defined("alchFepWCArcut3")))        if (alchFepWCARepuOn && 
             (!opts.defined("alchFepWCArcut1") || 
              !opts.defined("alchFepWCArcut2") ||
              !opts.defined("alchFepWCArcut3") ))
           NAMD_die("When using WCA repulsion,  alchFepWCArcut1, alchFepWCArcut2, and alchFepWCArcut3 must be defined!");           NAMD_die("When using WCA repulsion,  alchFepWCArcut1, alchFepWCArcut2, and alchFepWCArcut3 must be defined!");
        if (alchFepWCARepuOn && ((alchFepWCArcut1 > alchFepWCArcut2) || (alchFepWCArcut2 > alchFepWCArcut3) ))        if (alchFepWCARepuOn && 
             ((alchFepWCArcut1 > alchFepWCArcut2) || 
              (alchFepWCArcut2 > alchFepWCArcut3) ))
            NAMD_die("When using WCA repulsion,  alchFepWCArcut2 must be larger than alchFEPWCArcut1, alchFepWCArcut3 must be larger than alchFEPWCArcut2!");            NAMD_die("When using WCA repulsion,  alchFepWCArcut2 must be larger than alchFEPWCArcut1, alchFepWCArcut3 must be larger than alchFEPWCArcut2!");
 //       if ((alchFepWCARepuOn || alchFepWCADispOn) && (alchElecLambdaStart < 1.0) )        if (alchFepWhamOn && (alchRepLambda < 0.0) && (alchDispLambda < 0.0) && 
 //           NAMD_die("When using WCA decomposition,  repulsion, dispersion and electrostatic must be in 3 different stages!");            (alchElecLambda < 0.0) )
        if(alchFepWhamOn && (alchRepLambda < 0.0) && (alchDispLambda < 0.0) && (alchElecLambda < 0.0) )  
            NAMD_die("One of alchRepLambda, alchDispLambda and alchElecLambda should be set up when alchFepWhamOn is true!");            NAMD_die("One of alchRepLambda, alchDispLambda and alchElecLambda should be set up when alchFepWhamOn is true!");
        if(alchFepWhamOn && (!alchFepElecOn) ) {        if(alchFepWhamOn && (!alchFepElecOn) ) {
          alchElecLambda = 0.0;          alchElecLambda = 0.0;
          ComputeNonbondedUtil::alchElecLambda = alchElecLambda;          ComputeNonbondedUtil::alchElecLambda = alchElecLambda;
 //         ComputeNonbondedUtil::select(); 
        }        }
      }      }
      else if (alchThermIntOn)      else if (alchThermIntOn) {
      { 
        if (!opts.defined("alchoutfile")) {         if (!opts.defined("alchoutfile")) { 
          strcpy(alchOutFile, outputFilename);           strcpy(alchOutFile, outputFilename); 
          strcat(alchOutFile, ".ti");           strcat(alchOutFile, ".ti"); 
        }         } 
      }      }
  
    } else { 
      alchLambda = alchLambda2 = 0; 
      alchElecLambdaStart = 0; 
      alchOutFile[0] = STRINGNULL; 
    }    }
  
  
 //fepe //fepe
  
    if ( alchOn && alchFepOn && alchThermIntOn )    if ( alchOn && alchFepOn && alchThermIntOn )


Legend:
Removed in v.1.1463 
changed lines
 Added in v.1.1464



Made by using version 1.53 of cvs2html