Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
        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);
        }