LoadDefaultsDecoder::LoadDefaultsDecoder(const std::string& filename)
{
    std::fstream stream;
    stream.open(filename.c_str(), std::ios::in);
    if (!stream) {
        throw DefaultLoadingException("Failed to open file " + filename);
    }
  
  //replace following code with:
  //getCodecByName(const std::string& name, Stream& stream, Bridge* bridge)

  //typedef list<Atlas::Factory<Atlas::Codec<std::iostream> >*> FactoryCodecs;
  //FactoryCodecs *myCodecs = Factory<Codec<std::iostream> >::factories();
  //FactoryCodecs::iterator i;
  //Atlas::Codec<std::iostream> *codec = NULL;
  //for (i = myCodecs->begin(); i != myCodecs->end(); ++i)
    //if((*i)->getName() == "XML")
      //codec = (*i)->New(Codec<std::iostream>::Parameters((iostream&)stream, this));
  //end of replace
    Atlas::Codec *codec = new Atlas::Codecs::XML(stream, *this);

    while(stream) {
        codec->poll();
    }

    delete codec;
  
    MapType anonymous_obj;
    m_objects["anonymous"] = anonymous_obj;
    MapType generic_obj;
    m_objects["generic"] = generic_obj;
    fillDefaults();
}
示例#2
0
const IR::Node* DoDefaultArguments::postorder(IR::Declaration_Instance* inst) {
    auto ii = Instantiation::resolve(inst, refMap, typeMap);
    auto args = fillDefaults(&ii->substitution);
    if (args != nullptr)
        inst->arguments = args;
    return inst;
}
示例#3
0
const IR::Node* DoDefaultArguments::postorder(IR::MethodCallExpression* mce) {
    auto mi = MethodInstance::resolve(mce, refMap, typeMap);
    auto args = fillDefaults(&mi->substitution);
    if (args != nullptr)
        mce->arguments = args;
    return mce;
}
示例#4
0
const IR::Node* DoDefaultArguments::postorder(IR::ConstructorCallExpression* cce) {
    auto cc = ConstructorCall::resolve(cce, refMap, typeMap);
    auto args = fillDefaults(&cc->substitution);
    if (args != nullptr)
        cce->arguments = args;
    return cce;
}
void ConfigSetup::Init(const char *fileName)
{
	std::vector<std::string> line;

	//ADDED LINES TO GET PREFIX PATH AND 
	//CONVERT CHAR ARRY TO STRING TYPE TO GET PREFIX PATH
	//string prefix;
	std::string inputString(fileName);

	size_t found = inputString.rfind('/');
	if (found != std::string::npos)
		prefix = inputString.substr(0, inputString.find_last_of('/')) + '/';
	//END ADD LINE
	
	reader.Open(fileName);
	while(reader.readNextLine(line))
	{
		if(line[0] == "Restart") {
			in.restart.enable = checkBool(line[1]);
		} else if(line[0] == "FirstStep") {
			in.restart.step = stringtoi(line[1]);
		} else if(line[0] == "PRNG") {
			in.prng.kind = line[1];
		} else if(line[0] == "Random_Seed") {
			in.prng.seed = stringtoi(line[1]);
		} else if(line[0] == "ParaTypeCHARMM") {
			if(checkBool(line[1]))
			{
				in.ffKind.numOfKinds++;
				in.ffKind.isEXOTIC = false;
				in.ffKind.isMARTINI = false;
				in.ffKind.isCHARMM = true;
				std::cout << "REMINDER: CHARMM force field has been selected!" << std::endl;
			}
		} else if(line[0] == "ParaTypeEXOTIC") {
			if(checkBool(line[1]))
			{
				in.ffKind.numOfKinds++;
				in.ffKind.isCHARMM = false;
				in.ffKind.isMARTINI = false;
			        in.ffKind.isEXOTIC = true;
				std::cout << "REMINDER: EXOTIC force field has been selected!" << std::endl;
		}
		} else if(line[0] == "ParaTypeMARTINI") {
			if(checkBool(line[1]))
			{
				in.ffKind.numOfKinds ++;
				in.ffKind.isEXOTIC = false;
				in.ffKind.isMARTINI = true;
				in.ffKind.isCHARMM = true;
				std::cout << "REMINDER: MARTINI force field has been selected!" << std::endl;
			}
		} else if(line[0] == "Parameters") {
			in.files.param.name = prefix + line[1]; //ADDED PREFIX
		} else if(line[0] == "Coordinates") {
			uint boxnum = stringtoi(line[1]);
			if(boxnum >= BOX_TOTAL)
			{
				std::cout<< "Error: This simulation requires only " << BOX_TOTAL << " number of PDB file(s)!" << std::endl;
				exit(0);
			}
			in.files.pdb.name[boxnum] = prefix + line[2]; //ADDED PREFIX
		} else if(line[0] == "Structure") {
			uint boxnum = stringtoi(line[1]);
			if(boxnum >= BOX_TOTAL)
			{
				std::cout<< "Error: This simulation requires only " << BOX_TOTAL << " number of PSF file(s)!" << std::endl;
				exit(0);
			}
			in.files.psf.name[boxnum] = prefix + line[2]; //ADDED PREFIX
		}
#if ENSEMBLE == GEMC
		else if(line[0] == "GEMC")
		{
			if(line[1] == "NVT")
			{
				sys.gemc.kind = mv::GEMC_NVT;
				std::cout<< " NVT_GEMC simulation has been selected " << std::endl;
			}
			else if(line[1] == "NPT")
			{
				sys.gemc.kind = mv::GEMC_NPT;
				std::cout<< " NPT_GEMC simulation has been selected " << std::endl;
                        } 
		}
		else if(line[0] == "Pressure")
		{
			sys.gemc.pressure = stringtod(line[1]);
			std::cout<< " Pressure of system has been set to " << sys.gemc.pressure << " bar " << std::endl;
			sys.gemc.pressure *= unit::BAR_TO_K_MOLECULE_PER_A3;
		}
#endif
		else if(line[0] == "Temperature")
		{
			sys.T.inKelvin = stringtod(line[1]);
		}
		else if(line[0] == "Potential")
		{
			if(line[1] == "VDW")
				sys.ff.VDW_KIND = sys.ff.VDW_STD_KIND;
			else if(line[1] == "SHIFT")
				sys.ff.VDW_KIND = sys.ff.VDW_SHIFT_KIND;
			else if(line[1] == "SWITCH")
				sys.ff.VDW_KIND = sys.ff.VDW_SWITCH_KIND;
		}
		else if(line[0] == "LRC")
		{
			sys.ff.doTailCorr = checkBool(line[1]);
		}
		else if(line[0] == "Rswitch")
		{
			sys.ff.rswitch = stringtod(line[1]);
		}
		else if(line[0] == "Rcut")
		{
			sys.ff.cutoff = stringtod(line[1]);
		}
		else if(line[0] == "Exclude")
		{
			if(line[1] == sys.exclude.EXC_ONETWO)
				sys.exclude.EXCLUDE_KIND = sys.exclude.EXC_ONETWO_KIND;
			else if(line[1] == sys.exclude.EXC_ONETHREE)
				sys.exclude.EXCLUDE_KIND = sys.exclude.EXC_ONETHREE_KIND;
			else if(line[1] == sys.exclude.EXC_ONEFOUR)
				sys.exclude.EXCLUDE_KIND = sys.exclude.EXC_ONEFOUR_KIND;
		}
		else if(line[0] == "Ewald")
		{
			sys.elect.ewald = checkBool(line[1]);
			sys.elect.readEwald = true;
		}
		else if(line[0] == "ElectroStatic")
		{
			sys.elect.enable = checkBool(line[1]);
			sys.elect.readElect = true;
		}
		else if(line[0] == "Tolerance")
		{
			sys.elect.tolerance = stringtod(line[1]);
			sys.elect.alpha = sqrt(-1 * log(sys.elect.tolerance))/
			  sys.ff.cutoff;
			sys.elect.recip_rcut = 2 * (-log(sys.elect.tolerance))/
			  sys.ff.cutoff;
		}
		else if(line[0] == "1-4scaling")
		{
			sys.elect.oneFourScale = stringtod(line[1]);
		}
		else if(line[0] == "Dielectric")
		{
			sys.elect.dielectric = stringtod(line[1]);
		}
		else if(line[0] == "RunSteps")
		{
			sys.step.total = stringtoi(line[1]);
		}
		else if(line[0] == "EqSteps")
		{
			sys.step.equil = stringtoi(line[1]);
		}
		else if(line[0] == "AdjSteps")
		{
			sys.step.adjustment = stringtoi(line[1]);
		}
		else if(line[0] == "DisFreq")
		{
			sys.moves.displace = stringtod(line[1]);
		}
		else if(line[0] == "IntraSwapFreq")
		{
			sys.moves.intraSwap = stringtod(line[1]);
		}
		else if(line[0] == "RotFreq")
		{
			sys.moves.rotate = stringtod(line[1]);
		} 
#ifdef VARIABLE_VOLUME
		else if(line[0] == "VolFreq")
		{
			sys.moves.volume = stringtod(line[1]);
		}
#endif
#ifdef VARIABLE_PARTICLE_NUMBER
		else if(line[0] == "SwapFreq")
		{
#if ENSEMBLE == NVT
		        sys.moves.transfer = 0.000;
#else
			sys.moves.transfer = stringtod(line[1]);
#endif
		}
#endif
		else if(line[0] == "BoxDim") {
			uint box = stringtoi(line[1]);
			if(box < BOX_TOTAL)
			{
				XYZ temp;
				sys.volume.boxCoordRead++;
				sys.volume.hasVolume = (sys.volume.boxCoordRead == BOX_TOTAL);
				temp.x = stringtod(line[2]);
				temp.y = stringtod(line[3]);
				temp.z = stringtod(line[4]);

				sys.volume.axis.Set(box, temp);
			}
			else
			{
				std::cout<< "Error: This simulation requires only " << BOX_TOTAL << " number of box dimension(s)!" << std::endl;
				exit(0);
			}
		}
#ifdef VARIABLE_PARTICLE_NUMBER
		else if(line[0] == "CBMC_First")
		{
			sys.cbmcTrials.nonbonded.first = stringtoi(line[1]);
		}
		else if(line[0] == "CBMC_Nth")
		{
			sys.cbmcTrials.nonbonded.nth = stringtoi(line[1]);
		}
		else if(line[0] == "CBMC_Ang")
		{
			sys.cbmcTrials.bonded.ang = stringtoi(line[1]);
		} 
		else if(line[0] == "CBMC_Dih")
		{
			sys.cbmcTrials.bonded.dih = stringtoi(line[1]);
		}
#endif
#if ENSEMBLE == GCMC
		else if(line[0] == "ChemPot") {
			if(line.size() != 3)
			{
				std::cout << "Error: Chemical potential parameters have not been specified!" << std::endl;
				exit(0);
			}
			std::string resName = line[1];
			double val = stringtod(line[2]);
			sys.chemPot.cp[resName] = val;
		} 
#endif
		else if(line[0] == "OutputName") 
		{
			out.statistics.settings.uniqueStr.val = line[1];
		} 
		else if(line[0] == "CoordinatesFreq") 
		{
			out.state.settings.enable = checkBool(line[1]);
			out.state.settings.frequency = stringtoi(line[2]);
		} 
		else if(line[0] == "RestartFreq") 
		{
			out.restart.settings.enable = checkBool(line[1]);
			out.restart.settings.frequency = stringtoi(line[2]);
		} 
		else if(line[0] == "ConsoleFreq") 
		{
			out.console.enable = checkBool(line[1]);
			out.console.frequency = stringtoi(line[2]);
		} 
		else if(line[0] == "BlockAverageFreq") 
		{
			out.statistics.settings.block.enable = checkBool(line[1]);
			out.statistics.settings.block.frequency = stringtoi(line[2]);
		} 
		else if(line[0] == "FluctuationFreq") 
		{
			out.statistics.settings.fluct.enable = checkBool(line[1]);
			out.statistics.settings.fluct.frequency = stringtoi(line[2]);
		} 
#if ENSEMBLE == GCMC
		else if(line[0] == "HistogramFreq") 
		{
			out.statistics.settings.hist.enable = checkBool(line[1]);
			out.statistics.settings.hist.frequency = stringtoi(line[2]);
		}
		else if(line[0] == "DistName")
		{
			out.state.files.hist.histName = line[1];
		}
		else if(line[0] == "HistName")
		{
			out.state.files.hist.sampleName = line[1];
		} 
		else if(line[0] == "RunNumber") 
		{
			out.state.files.hist.number = line[1];
		} 
		else if(line[0] == "RunLetter") 
		{
			out.state.files.hist.letter = line[1];
		} 
		else if(line[0] == "SampleFreq") 
		{
			out.state.files.hist.stepsPerHistSample = stringtoi(line[1]);
		}
#endif
		else if(line[0] == "OutEnergy") {
			out.statistics.vars.energy.block = checkBool(line[1]);
			out.statistics.vars.energy.fluct = checkBool(line[2]);
			out.statistics.vars.energy.hist = checkBool(line[3]);
		} else if(line[0] == "OutPressure") {
			out.statistics.vars.pressure.block = checkBool(line[1]);
			out.statistics.vars.pressure.fluct = checkBool(line[2]);
			out.statistics.vars.pressure.hist = checkBool(line[3]);
		}
#ifdef VARIABLE_PARTICLE_NUMBER
		else if(line[0] == "OutMolNum") {
			out.statistics.vars.molNum.block = checkBool(line[1]);
			out.statistics.vars.molNum.fluct = checkBool(line[2]);
			out.statistics.vars.molNum.hist = checkBool(line[3]);
		} else if(line[0] == "OutAcceptAngles") {
			out.statistics.vars.acceptAngles.block = checkBool(line[1]);
			out.statistics.vars.acceptAngles.fluct = checkBool(line[2]);
			out.statistics.vars.acceptAngles.hist = checkBool(line[3]);
		}
#endif
#ifdef VARIABLE_DENSITY
		else if(line[0] == "OutDensity") {
			out.statistics.vars.density.block = checkBool(line[1]);
			out.statistics.vars.density.fluct = checkBool(line[2]);
			out.statistics.vars.density.hist = checkBool(line[3]);
		}
#endif
#ifdef VARIABLE_VOLUME
		else if(line[0] == "OutVolume") {
			out.statistics.vars.volume.block = checkBool(line[1]);
			out.statistics.vars.volume.fluct = checkBool(line[2]);
			out.statistics.vars.volume.hist = checkBool(line[3]);
		}
#endif
		else{
			cout << "Warning: Unknown input " << line[0] << "!" << endl;
		}
		// Clear and get ready for the next line
		line.clear();
	}

	//*********** Fill in the default values if not specified ***********//
	fillDefaults();

	//*********** Verify inputs ***********//
	verifyInputs();
}