public TruncHuntFillTracor(double saStart, double saStep, double saStepIncr, List <int> recList) { SaStart = saStart; SaStep = saStep; SaStepIncr = saStepIncr; RecordList = recList; numRecs = RecordList.Count; recDataDict = new Dictionary <int, RecordTraceData>(numRecs); foreach (var iRec in RecordList) { recDataDict[iRec] = new RecordTraceData(iRec); } OveralOutput = new List <string>(); TraceFinished = false; sa = 0; saVec.Add(0); NextStep(); }
internal void startTrace() { var watch = Stopwatch.StartNew(); var strt = DateTime.Now; Utils.initiateConsole(); var wdir = Directory.GetParent(TclModelPath).FullName; var tclModelName = Path.GetFileName(TclModelPath); var sa = SaStart; var numRecs = RecordList.Count; var recDataDict = new Dictionary <int, RecordTraceData>(numRecs); foreach (var iRec in RecordList) { addRecordTab(iRec); recDataDict[iRec] = new RecordTraceData(iRec); } double sa50_ = 0; double sa50 = 0; var stage = "Hunt"; var nPnt = 0; var saVec = new List <double>(); saVec.Add(0); var idaOut = File.CreateText("truncIDA/overall.txt"); while (true) { nPnt++; var nRec = 0; saVec.Add(sa); double clpsP = 0; var numClpsd = 0; var line = ""; foreach (var iRec in RecordList) { nRec++; var data = recDataDict[iRec]; if (data.SaClps != 0 && data.SaClps < sa) { continue; } if (data.SaNoClps != 0 && data.SaNoClps > sa) { continue; } data.saVec.Add(sa); data.n++; var disp = 0.0; var res = Utils.RunOps(iRec, sa, wdir, OpsExePath, tclModelName, ref data.failureFlag, ref disp, ref data.endTime); if (!res) { Console.WriteLine($"ERROR Running OpenSees at Sa= {sa} for record={iRec}"); return; } data.dispVec.Add(disp); var slope = Math.Abs((sa - data.saVec[data.n1]) / (disp - data.dispVec[data.n1])); if (data.n == 1) { data.initSlope = slope; } data.slopeRat = slope / data.initSlope; if (data.slopeRat < 0.2 || disp > 0.1 || data.failureFlag == 1) { data.clpsFlag = 1; data.SaClps = sa; } else { data.clpsFlag = 0; data.SaNoClps = sa; data.n1 = data.n; } data.PrintSelf(); showResults(iRec, nPnt, sa, disp, slope, data.slopeRat, data.clpsFlag, data.failureFlag, data.endTime, stage); data.Out1.WriteLine(line); data.Out1.Flush(); data.lineVec.Add(line); int numSum = 0; if (stage == "Hunt") { numSum = numRecs; } else { numSum = nRec; } numClpsd = 0; for (var i = 0; i < numSum; i++) { numClpsd += recDataDict[RecordList[i]].clpsFlag; } clpsP = (numClpsd + 0.0) / numRecs; if (clpsP >= 0.5) { break; } } numClpsd = 0; foreach (var iRec in RecordList) { numClpsd += recDataDict[iRec].clpsFlag; } clpsP = (numClpsd + 0.0) / numRecs; line = $"{nPnt} {sa} {stage} {clpsP}"; foreach (var iRec in RecordList) { line = $"{line} {recDataDict[iRec].clpsFlag}"; } idaOut.WriteLine(line); if (clpsP >= 0.5) { if (stage == "Hunt") { stage = "Bracket"; } sa50 = sa; } else { sa50_ = sa; } if (stage == "Hunt") { sa = sa + SaStepIncr * (nPnt + 1); } else { var clpsRsltn = (sa50 - sa50_) / sa50_; if (clpsRsltn < 0.05) { break; } sa = sa50_ + (sa50 - sa50_) / 3; } } idaOut.WriteLine($"MedIM= {sa50_}"); idaOut.Close(); foreach (var data in recDataDict.Values) { data.FinalizePrint(); } watch.Stop(); var processTime = watch.Elapsed; Console.ForegroundColor = ConsoleColor.Cyan; Console.WriteLine("\n\nIDA started at: {0}", strt); Console.WriteLine("IDA ended at: {0}", DateTime.Now); Console.WriteLine("Total IDA time = {0}", watch.Elapsed); }