def mp_producer(idWorker, nIter,bbt_parameters,normfunc_dicts,loopTbms): start_time = time.time() now = datetime.datetime.now() strnow = now.strftime("%Y%m%d%H%M%S") main_logger = createLogger(idWorker,"mp_producer") main_logger.info("[%d]############################# Starts at %s" % (idWorker,strnow)) #with plock: # print "[%d]############################# Starts at %s" % (idWorker,strnow) #inizializzo le info sui tracciati dai file di configurazione inizio_GLEST = bbtConfig.getfloat('Import','inizio_GLEST') fine_GLEST = bbtConfig.getfloat('Import','fine_GLEST') inizio_GLSUD = bbtConfig.getfloat('Import','inizio_GLSUD') fine_GLSUD = bbtConfig.getfloat('Import','fine_GLSUD') inizio_CE = bbtConfig.getfloat('Import','inizio_CE') fine_CE = bbtConfig.getfloat('Import','fine_CE') #differenza tra CE e GLEST in modo tale che GLNORD = delta_GLEST_CE - CE delta_GLEST_CE = bbtConfig.getfloat('Import','delta_GLEST_CE') projectRefCost = bbtConfig.getfloat('Import','project_ref_cost') # mln di euro # danzi.tn@20151115 recepimento modifiche su InfoAlignment fatte da Garbriele #LEGGO I PARAMETRI DA FILE DI CONFIGURAZIONE fCShiledMin = bbtConfig.getfloat('Alignment','frictionCShiledMin') fCShiledMode = bbtConfig.getfloat('Alignment','frictionCShiledMode') fCShiledMax = bbtConfig.getfloat('Alignment','frictionCShiledMax') #CREO OGGETTO fcShield = FrictionCoeff(fCShiledMin,fCShiledMode,fCShiledMax) #LEGGO I PARAMETRI DA FILE DI CONFIGURAZIONE fCCutterdMin = bbtConfig.getfloat('Alignment','frictionCCutterMin') fCCutterMode = bbtConfig.getfloat('Alignment','frictionCCutterMode') fCCutterMax = bbtConfig.getfloat('Alignment','frictionCCutterMax') #CREO OGGETTO fcCutter = FrictionCoeff(fCCutterdMin,fCCutterMode,fCCutterMax) alnAll = [] aln=InfoAlignment('Galleria di linea direzione Sud', 'GLSUD', inizio_GLSUD, fine_GLSUD,fCCutterMode, fCShiledMode) alnAll.append(aln) aln=InfoAlignment('Cunicolo esplorativo direzione Nord', 'CE', delta_GLEST_CE - fine_CE, delta_GLEST_CE - inizio_CE , fCCutterMode, fCShiledMode) alnAll.append(aln) aln=InfoAlignment('Galleria di linea direzione Nord', 'GLNORD',inizio_GLEST, fine_GLEST, fCCutterMode, fCShiledMode) alnAll.append(aln) kpiTbmList = [] for iIterationNo in range(nIter): iter_start_time = time.time() bbttbmkpis = [] bbt_evalparameters = [] iCheckEvalparameters = 0 iCheckBbttbmkpis = 0 # Per tutti i Tunnel main_logger.info("[%d]########### iteration %d - %d" % (idWorker, iIterationNo, idWorker*nIter + iIterationNo)) #with plock: # print "[%d]########### iteration %d - %d" % (idWorker, iIterationNo, idWorker*nIter + iIterationNo) for alnCurr in alnAll: for tbmKey in loopTbms: tbmData = loopTbms[tbmKey] # Se la TBM e' conforme al TUnnell if alnCurr.tbmKey in tbmData.alignmentCode: main_logger.debug("[%d] %s - %s" % (idWorker,alnCurr.description, tbmKey )) tbm = TBM(tbmData, 'V') kpiTbm = KpiTbm4Tunnel(alnCurr.description, idWorker*nIter + iIterationNo) iCheckBbttbmkpis += 1 kpiTbm.setKPI4TBM(alnCurr,tbmKey,tbm,projectRefCost) # cerco i segmenti che rientrano tra inizio e fine del Tunnell matches_params = [bpar for bpar in bbt_parameters if alnCurr.pkStart <= bpar.inizio and bpar.fine <= alnCurr.pkEnd] main_logger.debug("[%d] Sono interessati %d pk" % (idWorker, len(matches_params) )) for bbt_parameter in matches_params: iCheckEvalparameters += 1 bbtparameter4seg = build_bbtparameter4seg_from_bbt_parameter(bbt_parameter,normfunc_dicts[int(bbt_parameter.fine)]) # danzi.tn@20151115 recepimento modifiche su InfoAlignment fatte da Garbriele if iIterationNo > 2: alnCurr.frictionCoeff = fcShield.rvs() alnCurr.fiRi = fcCutter.rvs() else: alnCurr.frictionCoeff = fCShiledMode alnCurr.fiRi = fCCutterMode try: tbmsect = TBMSegment(bbtparameter4seg, tbm, alnCurr.fiRi, alnCurr.frictionCoeff) except Exception as e: main_logger.error("[%d] %s, %s per pk %d TBMSegment va in errore: %s" % (idWorker, alnCurr.description, tbmKey, bbt_parameter.fine , e) ) main_logger.error("[%d] bbtparameter4seg = %s" % str(bbtparameter4seg)) continue kpiTbm.setKPI4SEG(alnCurr,tbmsect,bbtparameter4seg) #danzi.tn@20151114 inseriti nuovi parametri calcolati su TunnelSegment bbt_evalparameters.append((strnow, idWorker*nIter + iIterationNo,alnCurr.description, tbmKey, bbt_parameter.fine,bbt_parameter.he,bbt_parameter.hp,bbt_parameter.co,bbtparameter4seg.gamma,\ bbtparameter4seg.sci,bbtparameter4seg.mi,bbtparameter4seg.ei,bbtparameter4seg.cai,bbtparameter4seg.gsi,bbtparameter4seg.rmr,\ tbmsect.pkCe2Gl(bbt_parameter.fine),\ tbmsect.TunnelClosureAtShieldEnd*100. ,\ tbmsect.rockBurst.Val,\ tbmsect.frontStability.Ns,\ tbmsect.frontStability.lambdae,\ tbmsect.penetrationRate*1000. ,\ tbmsect.penetrationRateReduction*1000. ,\ tbmsect.contactThrust, \ tbmsect.torque, \ tbmsect.frictionForce, \ tbmsect.requiredThrustForce, \ tbmsect.availableThrust, \ tbmsect.dailyAdvanceRate, \ bbt_parameter.profilo_id, \ bbt_parameter.geoitem_id, \ bbt_parameter.title, \ bbtparameter4seg.sti, \ bbtparameter4seg.k0, \ tbmsect.t0, \ tbmsect.t1, \ tbmsect.t3, \ tbmsect.t4, \ tbmsect.t5, \ tbmsect.InSituCondition.SigmaV, \ tbmsect.Excavation.Radius, \ tbmsect.Rock.E, \ tbmsect.MohrCoulomb.psi, \ tbmsect.Rock.Ucs, \ tbmsect.InSituCondition.Gsi, \ tbmsect.HoekBrown.Mi, \ tbmsect.HoekBrown.D, \ tbmsect.HoekBrown.Mb, \ tbmsect.HoekBrown.S, \ tbmsect.HoekBrown.A, \ tbmsect.HoekBrown.Mr, \ tbmsect.HoekBrown.Sr, \ tbmsect.HoekBrown.Ar, \ tbmsect.UrPi_HB(0.), \ tbmsect.Rpl, \ tbmsect.Picr, \ tbmsect.LDP_Vlachopoulos_2009(0.), \ tbmsect.LDP_Vlachopoulos_2009(tbm.Slen), \ ) ) kpiTbm.updateKPI(alnCurr) bbttbmkpis += kpiTbm.getBbtTbmKpis() sys.stdout.flush() iter_end_time = time.time() main_logger.debug("[%d]#### iteration %d - %d terminated in %d seconds" % (idWorker, iIterationNo, idWorker*nIter + iIterationNo, iter_end_time-iter_start_time)) main_logger.debug("[%d]### Start inserting %d (%d) Parameters and %d (21x%d) KPIs" % (idWorker, len(bbt_evalparameters),iCheckEvalparameters,len(bbttbmkpis),iCheckBbttbmkpis)) insert_eval4Iter(sDBPath,bbt_evalparameters,bbttbmkpis) insert_end_time = time.time() main_logger.debug("[%d]]### Insert terminated in %d seconds" % (idWorker,insert_end_time-iter_end_time)) now = datetime.datetime.now() strnow = now.strftime("%Y%m%d%H%M%S") end_time = time.time() main_logger.info("[%d]############################# Ends at %s (%s seconds)" % (idWorker,strnow, end_time-start_time))
def main_loop(sDBPath, nIter,bbt_parameters,normfunc_dicts,loopTbms): start_time = time.time() now = datetime.datetime.now() strnow = now.strftime("%Y%m%d%H%M%S") print "############################# Starts at %s" % strnow #inizializzo le info sui tracciati dai file di configurazione inizio_GLEST = bbtConfig.getfloat('Import','inizio_GLEST') fine_GLEST = bbtConfig.getfloat('Import','fine_GLEST') inizio_GLSUD = bbtConfig.getfloat('Import','inizio_GLSUD') fine_GLSUD = bbtConfig.getfloat('Import','fine_GLSUD') inizio_CE = bbtConfig.getfloat('Import','inizio_CE') fine_CE = bbtConfig.getfloat('Import','fine_CE') #differenza tra CE e GLEST in modo tale che GLNORD = delta_GLEST_CE - CE delta_GLEST_CE = bbtConfig.getfloat('Import','delta_GLEST_CE') projectRefCost = bbtConfig.getfloat('Import','project_ref_cost') # mln di euro # danzi.tn@20151115 recepimento modifiche su InfoAlignment fatte da Garbriele #LEGGO I PARAMETRI DA FILE DI CONFIGURAZIONE fCShiledMin = bbtConfig.getfloat('Alignment','frictionCShiledMin') fCShiledMode = bbtConfig.getfloat('Alignment','frictionCShiledMode') fCShiledMax = bbtConfig.getfloat('Alignment','frictionCShiledMax') #CREO OGGETTO fcShield = FrictionCoeff(fCShiledMin,fCShiledMode,fCShiledMax) #LEGGO I PARAMETRI DA FILE DI CONFIGURAZIONE fCCutterdMin = bbtConfig.getfloat('Alignment','frictionCCutterMin') fCCutterMode = bbtConfig.getfloat('Alignment','frictionCCutterMode') fCCutterMax = bbtConfig.getfloat('Alignment','frictionCCutterMax') #CREO OGGETTO fcCutter = FrictionCoeff(fCCutterdMin,fCCutterMode,fCCutterMax) alnAll = [] aln=InfoAlignment('Galleria di linea direzione Sud', 'GLSUD', inizio_GLSUD, fine_GLSUD,fCCutterMode, fCShiledMode) alnAll.append(aln) aln=InfoAlignment('Cunicolo esplorativo direzione Nord', 'CE', delta_GLEST_CE - fine_CE, delta_GLEST_CE - inizio_CE , fCCutterMode, fCShiledMode) alnAll.append(aln) aln=InfoAlignment('Galleria di linea direzione Nord', 'GLNORD',inizio_GLEST, fine_GLEST, fCCutterMode, fCShiledMode) alnAll.append(aln) kpiTbmList = [] for iIterationNo in range(nIter): if iIterationNo+1 % 9 ==0: compact_database(sDBPath) # Per tutti i Tunnel print "########### iteration %d" % iIterationNo for alnCurr in alnAll: # Per tutte le tbm print "Tunnel: %s" % alnCurr.description for tbmKey in loopTbms: tbmData = loopTbms[tbmKey] # Se la TBM e' conforme al TUnnell if alnCurr.tbmKey in tbmData.alignmentCode: print "\tTBM %s ok" % tbmKey tbm = TBM(tbmData, 'V') kpiTbm = KpiTbm4Tunnel(alnCurr.description,iIterationNo) kpiTbm.setKPI4TBM(alnCurr,tbmKey,tbm,projectRefCost) bbt_evalparameters = [] # cerco i segmenti che rientrano tra inizio e fine del Tunnell matches_params = [bpar for bpar in bbt_parameters if alnCurr.pkStart <= bpar.inizio and bpar.fine <= alnCurr.pkEnd] for bbt_parameter in matches_params: bbtparameter4seg = build_bbtparameter4seg_from_bbt_parameter(bbt_parameter,normfunc_dicts[int(bbt_parameter.fine)]) # danzi.tn@20151115 recepimento modifiche su InfoAlignment fatte da Garbriele if iIterationNo > 2: alnCurr.frictionCoeff = fcShield.rvs() alnCurr.fiRi = fcCutter.rvs() else: alnCurr.frictionCoeff = fCShiledMode alnCurr.fiRi = fCCutterMode tbmsect = TBMSegment(bbtparameter4seg, tbm, alnCurr.fiRi, alnCurr.frictionCoeff) kpiTbm.setKPI4SEG(alnCurr,tbmsect,bbtparameter4seg) #danzi.tn@20151114 inseriti nuovi parametri calcolati su TunnelSegment bbt_evalparameters.append((strnow,iIterationNo,alnCurr.description, tbmKey, bbt_parameter.fine,bbt_parameter.he,bbt_parameter.hp,bbt_parameter.co,bbtparameter4seg.gamma,\ bbtparameter4seg.sci,bbtparameter4seg.mi,bbtparameter4seg.ei,bbtparameter4seg.cai,bbtparameter4seg.gsi,bbtparameter4seg.rmr,\ tbmsect.pkCe2Gl(bbt_parameter.fine),\ tbmsect.TunnelClosureAtShieldEnd*100. ,\ tbmsect.rockBurst.Val,\ tbmsect.frontStability.Ns,\ tbmsect.frontStability.lambdae,\ tbmsect.penetrationRate*1000. ,\ tbmsect.penetrationRateReduction*1000. ,\ tbmsect.contactThrust, \ tbmsect.torque, \ tbmsect.frictionForce, \ tbmsect.requiredThrustForce, \ tbmsect.availableThrust, \ tbmsect.dailyAdvanceRate, \ bbt_parameter.profilo_id, \ bbt_parameter.geoitem_id, \ bbt_parameter.title, \ bbtparameter4seg.sti, \ bbtparameter4seg.k0, \ tbmsect.t0, \ tbmsect.t1, \ tbmsect.t3, \ tbmsect.t4, \ tbmsect.t5, \ tbmsect.InSituCondition.SigmaV, \ tbmsect.Excavation.Radius, \ tbmsect.Rock.E, \ tbmsect.MohrCoulomb.psi, \ tbmsect.Rock.Ucs, \ tbmsect.InSituCondition.Gsi, \ tbmsect.HoekBrown.Mi, \ tbmsect.HoekBrown.D, \ tbmsect.HoekBrown.Mb, \ tbmsect.HoekBrown.S, \ tbmsect.HoekBrown.A, \ tbmsect.HoekBrown.Mr, \ tbmsect.HoekBrown.Sr, \ tbmsect.HoekBrown.Ar, \ tbmsect.UrPi_HB(0.), \ tbmsect.Rpl, \ tbmsect.Picr, \ tbmsect.LDP_Vlachopoulos_2009(0.), \ tbmsect.LDP_Vlachopoulos_2009(tbm.Slen), \ ) ) kpiTbm.updateKPI(alnCurr) kpiTbm.saveBbtTbmKpis(sDBPath) insert_bbtparameterseval(sDBPath,bbt_evalparameters,iIterationNo) else: print "\tTBM %s NON disponibile per questo Tunnel" % tbmKey now = datetime.datetime.now() strnow = now.strftime("%Y%m%d%H%M%S") end_time = time.time() print "############################# Ends at %s (%s seconds)" % (strnow, end_time-start_time)