// get Bjorken- and QGP lifetime for ImpactParameter = 0 private void DetermineMaxLifeTime() { Fireball.Fireball fireball = CreateFireballToDetermineMaxLifeTime(); // Evolving the fireball to calculate the maximum QGP LifeTime while (fireball.MaximumTemperature > BreakupTemperature_MeV) { // quit here if process has been aborted if (JobCancelToken.IsCancellationRequested) { return; } fireball.Advance(0.1); } LifeTime_fm = fireball.LifeTime; BjorkenLifeTime_fm = fireball.BjorkenLifeTime; }
public void CalculateFireballTemperatureEvolution() { PrepareJob("PlotFireballTemperatureEvolution", SnapshotStatusTitles); if (SnapRate_per_fm <= 0) { throw new Exception("SnapRate <= 0."); } Fireball.Fireball fireball = CreateFireball(); BjorkenLifeTime_fm = fireball.BjorkenLifeTime; StringBuilder output = new StringBuilder(); output.AppendLine(); output.AppendLine(); output.AppendLine(string.Format("#{0,7}{1,20}", "Time", "MaximumTemperature")); output.AppendLine(string.Format("#{0,7}{1,20}", "(fm)", "(MeV)")); double dt = 1.0 / SnapRate_per_fm; do { // quit here if process has been aborted if (JobCancelToken.IsCancellationRequested) { break; } StatusValues[0] = fireball.CurrentTime.ToString(); output.AppendLine(string.Format("{0,8:G4}{1,20:G4}", fireball.CurrentTime, fireball.MaximumTemperature)); fireball.Advance(dt); } while(fireball.MaximumTemperature > BreakupTemperature_MeV); LifeTime_fm = fireball.LifeTime; WriteOutputToLogAndDataFile(output); }
public void CalculateDirectPionDecayWidths() { PrepareJob("CalculateDirectPionDecayWidths", DirectPionDecayWidthsStatusTitles); List <double> impactParams = new List <double>(); List <double> nCollQGPs = new List <double>(); List <double> nCollPions = new List <double>(); List <double> nColls = new List <double>(); int step = 0; do { // quit here if process has been aborted if (JobCancelToken.IsCancellationRequested) { LogMessages.Clear(); LogMessages.Append(LogHeader + LogFooter); return; } impactParams.Add(step * GridCellSize_fm); Fireball.Fireball fireball = CreateFireballToCalcDirectPionDecayWidth( impactParams[step]); // Set BjorkenLifeTime for the LogHeader if (step == 0) { BjorkenLifeTime_fm = fireball.BjorkenLifeTime; } // calculate the areas fireball.CalculateNumberCollisions(BreakupTemperature_MeV, out double nCollQGP, out double nCollPion); nCollQGPs.Add(nCollQGP); nCollPions.Add(nCollPion); nColls.Add(fireball.IntegrateFireballField(FireballFieldType.NumberCollisions)); StatusValues[0] = impactParams[step].ToUIString(); StatusValues[1] = nColls[step].ToUIString(); StatusValues[2] = nCollQGPs[step].ToUIString(); StatusValues[3] = nCollPions[step].ToUIString(); step++; }while((step == 1 ? true : nColls[step - 1] > 1)); // quit here if process has been aborted if (JobCancelToken.IsCancellationRequested) { LogMessages.Clear(); LogMessages.Append(LogHeader + LogFooter); return; } // prepare output LogMessages.Clear(); LogMessages.Append(LogHeader); LogMessages.AppendLine(); LogMessages.AppendLine(); LogMessages.AppendLine(string.Format("#{0,7}{1,12}{2,12}{3,12}", "b (fm)", "Ncoll", "NcollQGP", "NcollPion")); LogMessages.AppendLine("#"); for (int i = 0; i < impactParams.Count; i++) { LogMessages.AppendLine(string.Format("{0,8}{1,12}{2,12}{3,12}", impactParams[i].ToUIString(), nColls[i].ToUIString(), nCollQGPs[i].ToUIString(), nCollPions[i].ToUIString())); } LogMessages.Append(LogFooter); File.WriteAllText(YburnConfigFile.OutputPath + DataFileName, LogMessages.ToString()); }
public void MakeSnapshots() { PrepareJob("MakeSnapshots", SnapshotStatusTitles); if (SnapRate_per_fm <= 0) { throw new Exception("SnapRate <= 0."); } // All data is saved in the output file. Additionally, the corresponding gnuplot files (.plt) // are created to facilitate graphical visualization of the data. StringBuilder output = new StringBuilder(); StringBuilder gnuFileStringX = new StringBuilder(); StringBuilder gnuFileStringY = new StringBuilder(); StringBuilder gnuFileStringXY = new StringBuilder(); gnuFileStringX.AppendLine("reset"); gnuFileStringX.AppendLine(); gnuFileStringX.AppendLine(string.Format("stats '{0}' using 3", DataFileName)); gnuFileStringX.AppendLine("set yrange [floor(STATS_min):ceil(STATS_max)]"); gnuFileStringX.AppendLine(); gnuFileStringX.AppendLine("set xlabel 'x (fm)'"); gnuFileStringX.AppendLine(); gnuFileStringY.AppendLine("reset"); gnuFileStringY.AppendLine(); gnuFileStringY.AppendLine(string.Format("stats '{0}' using 3", DataFileName)); gnuFileStringY.AppendLine("set yrange [floor(STATS_min):ceil(STATS_max)]"); gnuFileStringY.AppendLine(); gnuFileStringY.AppendLine("set xlabel 'y (fm)'"); gnuFileStringY.AppendLine(); gnuFileStringXY.AppendLine("reset"); gnuFileStringXY.AppendLine(); gnuFileStringXY.AppendLine(string.Format("stats '{0}' using 3", DataFileName)); gnuFileStringXY.AppendLine("set zrange [floor(STATS_min):ceil(STATS_max)]"); gnuFileStringXY.AppendLine(); gnuFileStringXY.AppendLine("set xlabel 'x (fm)'"); gnuFileStringXY.AppendLine("set ylabel 'y (fm)'"); gnuFileStringXY.AppendLine(); CoordinateSystem system = CreateCoordinateSystem(); Fireball.Fireball fireball = CreateFireball(); BjorkenLifeTime_fm = fireball.BjorkenLifeTime; int index = 0; double dt = 1.0 / SnapRate_per_fm; do { // quit here if process has been aborted if (JobCancelToken.IsCancellationRequested) { break; } // get status of calculation StatusValues[0] = fireball.CurrentTime.ToString(); output.AppendLine(); output.AppendLine(); output.AppendLine(string.Format( "#Time = {0}, Index {1}", fireball.CurrentTime, index)); output.Append(fireball.FieldsToString(FireballFieldTypes, BottomiumStates)); gnuFileStringX.AppendLine(string.Format( "plot '{0}' every {1} index {2} using 1:3 with points title 't = {3} fm/c'; pause .5", DataFileName, system.YAxis.Count, index, fireball.CurrentTime)); gnuFileStringY.AppendLine(string.Format( "plot '{0}' every ::{1}::{2} index {3} using 2:3 with points title 't = {4} fm/c'; pause .5", DataFileName, system.FindClosestXAxisIndex(0) * system.YAxis.Count, (system.FindClosestXAxisIndex(0) + 1) * system.YAxis.Count - 1, index, fireball.CurrentTime)); gnuFileStringXY.AppendLine(string.Format( "splot '{0}' index {1} using 1:2:3 with points title 't = {2} fm/c'; pause .5", DataFileName, index, fireball.CurrentTime)); index++; fireball.Advance(dt); } while(fireball.MaximumTemperature > BreakupTemperature_MeV); LifeTime_fm = fireball.LifeTime; WriteOutputToLogAndDataFile(output); WriteFile(gnuFileStringX, DataFileName + "-plotX.plt"); WriteFile(gnuFileStringY, DataFileName + "-plotY.plt"); WriteFile(gnuFileStringXY, DataFileName + "-plotXY.plt"); }