Esempio n. 1
0
def fixWallXNegGeneral(idx, globaldata, nbhs, control, conditionNumber,
                       aggressive, wallpoints, configData, hashtable):
    if control > 0:
        return globaldata
    else:
        control = control + 1
        mynbhs = core.convertIndexToPoints(core.getNeighbours(idx, globaldata),
                                           globaldata)
        mychecknbhs = core.getXNegPointsWithInput(idx, globaldata, mynbhs,
                                                  configData)
        finalnbhs = list(set(nbhs) - set(mynbhs))
        finalnbhs = core.getXNegPointsWithInput(idx, globaldata, finalnbhs,
                                                configData)
        # print(finalnbhs)
        conditionSet = []
        for itm in finalnbhs:
            checkset = [itm] + mychecknbhs
            newcheck = core.getConditionNumberWithInput(
                idx, globaldata, checkset, configData)
            if newcheck < conditionNumber:
                if not core.isNonAeroDynamicEvenBetter(idx, itm, globaldata,
                                                       wallpoints):
                    conditionSet.append([itm, newcheck])
        if len(conditionSet) > 0:
            conditionSet.sort(key=lambda x: x[1])
            globaldata = core.appendNeighbours(idx, globaldata,
                                               conditionSet[0][0], hashtable)
            fixWallXNegGeneral(idx, globaldata, nbhs, control, conditionNumber,
                               aggressive, wallpoints, configData, hashtable)
        else:
            if aggressive == True:
                leftright = core.getLeftandRightPoint(idx, globaldata)
                currnbhs = core.convertIndexToPoints(
                    core.getNeighbours(idx, globaldata), globaldata)
                nbhofnbh = []
                leftright = leftright + currnbhs
                for itm in leftright:
                    itm_real = core.getIndexFromPoint(itm, globaldata,
                                                      hashtable)
                    layernbhs = core.convertIndexToPoints(
                        core.getNeighbours(itm_real, globaldata), globaldata)
                    nbhofnbh = nbhofnbh + layernbhs
                nbhofnbh = list(
                    set(nbhofnbh) - set([core.getPointXY(idx, globaldata)]))
                fixWallXNegGeneral(idx, globaldata, nbhofnbh, control,
                                   conditionNumber, False, wallpoints,
                                   configData, hashtable)
            else:
                return globaldata
    return globaldata
Esempio n. 2
0
def fixYneg(idx, globaldata, nbhs, control, conditionNumber, aggressive,
            polygonData, wallpoints, configData):
    if control > 0:
        return globaldata
    else:
        control = control + 1
        mynbhs = core.convertIndexToPoints(core.getNeighbours(idx, globaldata),
                                           globaldata)
        mychecknbhs = core.getYNegPointsWithInputLegacy(
            idx, globaldata, mynbhs, configData)
        finalnbhs = list(set(nbhs) - set(mynbhs))
        finalnbhs = core.getYNegPointsWithInputLegacy(idx, globaldata,
                                                      finalnbhs, configData)
        finalnbhs = core.getAeroPointsFromSet(idx, finalnbhs, globaldata,
                                              wallpoints)
        # print(finalnbhs)
        conditionSet = []
        for itm in finalnbhs:
            checkset = [itm] + mychecknbhs
            newcheck = core.getConditionNumberDictionary(
                idx, globaldata, checkset, configData)
            if newcheck < conditionNumber:
                if not core.isNonAeroDynamicEvenBetter(idx, itm, globaldata,
                                                       wallpoints):
                    conditionSet.append([itm, newcheck])
        if len(conditionSet) > 0:
            conditionSet.sort(key=lambda x: x[1])
            globaldata = core.appendNeighbours(idx, globaldata,
                                               conditionSet[0][0])
            fixYneg(idx, globaldata, nbhs, control, conditionNumber,
                    aggressive, polygonData, wallpoints, configData)
        else:
            if aggressive == True:
                directnbhs = getNeighboursFromTriangle(idx, globaldata,
                                                       polygonData)
                nbhofnbh = []
                for itm in directnbhs:
                    itm_real = core.getIndexFromPoint(itm, globaldata)
                    layernbhs = getNeighboursFromTriangle(
                        itm_real, globaldata, polygonData)
                    nbhofnbh = nbhofnbh + layernbhs
                nbhofnbh = list(set(nbhofnbh))
                fixYneg(idx, globaldata, nbhofnbh, control, conditionNumber,
                        False, polygonData, wallpoints, configData)
            else:
                return globaldata
    return globaldata
def main():
    # Command Line Arguments
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input", const=str, nargs="?")
    parser.add_argument("-a", "--adapt", const=str, nargs="?")
    args = parser.parse_args()

    log.info("Loading Data")

    file1 = open(args.input or "preprocessorfile_rechecker.txt", "r")
    data = file1.read()
    globaldata = ["start"]
    adaptdata = []
    adaptwall = []
    derefine = []
    splitdata = data.split("\n")
    splitdata = splitdata[:-1]

    core.silentRemove("pseudopoints.txt")

    configData = core.getConfig()

    for idx, itm in enumerate(tqdm(splitdata)):
        itm = itm.split(" ")
        itm.pop(-1)
        entry = itm
        globaldata.append(entry)

    wallPoints = core.adaptGetWallPointArray(globaldata)
    wallPointsFlatten = core.flattenList(wallPoints)
    

    # for idx, itm in enumerate(splitdata):
    #     itm = itm.split(" ")
    #     itm.pop(-1)
    #     entry = itm
    #     globaldata_main.append(entry)
    #     generalpts = []
    #     generalpts.extend(range(1,len(globaldata_main) + 1))

    # wallpts = adaptGetWallPointArray(globaldata_main)
    # for itm in wallpts:
    #     pseudopts.extend(nonAdaptWallPolygon(globaldata_main, itm, float(configData["global"]["nonAdaptRegion"]), generalpts))

    # edgePts = tuple(configData["global"]["edgePoints"])

    # pseudopts.extend(createEdgeCircle(globaldata_main,edgePts,configData["global"]["nonAdaptEdgePointRadius"],generalpts))

    # print("Freeze Points",len(pseudopts))
    log.info("Processed Pre-Processor File")
    # print(len(pseudopts))
    # print(pseudopts)

    file2 = open(args.adapt or "sensor_flag.dat")
    data2 = file2.read()
    data2 = re.sub(" +", " ", data2)
    data2 = data2.split("\n")
    data2 = data2[:-1]
    if len(data2) + 1 != len(globaldata):
        log.error("Sensor File Length is not equal to Preprocessor File Length")
        exit()

    log.info("Reading Adaptation File")

    for idx2, itm2 in enumerate(tqdm(data2)):
        adaptpoint = itm2.split(" ")
        adaptpoint.pop(0)
        if int(adaptpoint[1]) == 1:
            if int(idx2):
                xcord = globaldata[int(adaptpoint[0])][1]
                ycord = globaldata[int(adaptpoint[0])][2]
                xycord = str(xcord) + "," + str(ycord)
                if xycord not in wallPointsFlatten:
                    adaptdata.append([xcord, ycord])
                else:
                    wallidx = core.getIndexFromPoint(xycord,globaldata)
                    walldepth = core.getDepth(wallidx,globaldata)
                    WALL_LIMIT = int(configData["adapter"]["minWallAdaptDepth"])
                    if walldepth >= WALL_LIMIT:
                        adaptwall.append([xcord, ycord])
                    else:
                        adaptdata.append([xcord, ycord])
        elif int(adaptpoint[1]) == 2 and configData["adapter"]["derefine"]:
                xcord = globaldata[int(adaptpoint[0])][1]
                ycord = globaldata[int(adaptpoint[0])][2]
                derefine.append([xcord, ycord])

    log.info("Interior Points being adapted: {}".format(len(adaptdata)))
    log.info("Wall Points being adapted: {}".format(len(adaptwall)))
    if configData["adapter"]["derefine"]:
        log.info("Points being derefined: {}".format(len(derefine)))
    else:
        log.warn("Derefined has been disabled")

    # perPndList = []

    # print("Finding mini quadrants")

    # for idax,itm in enumerate(tqdm(adaptwall)):
    #     idx = core.getIndexFromPoint(str(itm[0] + "," + str(itm[1])), globaldata)
    #     perList = core.getPerpendicularPointsFromQuadrants(idx,globaldata)
    #     for itm in perList:
    #         if core.quadrantContains(itm[1],itm[0]):
    #             perPndList.append(itm)
    #         else:
    #             print("Warning Quadrant Point Mismatch")
    #             print(itm)

    # perPndList = list(set(perPndList))

    # splineList = []

    # for itm in perPndList:
    #     wallPointCord = itm[2]
    #     wallPointCurrent = core.getIndexFromPointTuple(wallPointCord, globaldata)
    #     leftRight = core.convertIndexToPoints(core.getLeftandRightPointIndex(wallPointCurrent,globaldata),globaldata)
    #     leftRight.insert(1,str(wallPointCord[0]) + "," + str(wallPointCord[1]))
    #     # print(leftRight)
    #     # nbhPts = findNearestNeighbourWallPointsManual(itm[0],globaldata,wallPointsFlatten,wallPoints)
        
    #     splineData = core.feederData(leftRight,wallPoints)
    #     print(itm)
    #     # print(splineData)
    #     splineList.append(splineData)

    # try:
    #     writingDict = dict(core.load_obj("wall"))
    # except IOError:
    #     writingDict = {}
    # # print(writingDict)
    # print("Bsplining", len(perPndList), "points.")
    # bsplineArray = []
    # additionPts = []

    # for itm in wallPoints:
    #     bsplineData = np.array(core.undelimitXY(itm))
    #     bsplineArray.append(bsplineData)
    # print("Starting BSpline")
    # for idx,itm in enumerate(tqdm(perPndList)): 
    #     data = splineList[idx]
    #     newpts = core.generateBSplineBetween(bsplineArray[int(data[3])],data[0],data[1],int(configData["bspline"]["pointControl"]))
    #     newpts = core.convertToSuperNicePoints(perPndList[idx],newpts)
    #     newpts = core.findNearestPoint(perPndList[idx][0],newpts)
    #     if newpts != False:
    #         if core.quadrantContains(perPndList[idx][1],newpts):
    #             None
    #         try:
    #             writingDict[data[4]] = writingDict[data[4]] + [newpts]
    #         except KeyError:
    #             writingDict[data[4]] = [newpts]
    #         additionPts.append([newpts])
    #     else:
    #         data = splineList[idx]
    #         newpts = core.generateBSplineBetween(bsplineArray[int(data[3])],data[1],data[2],int(configData["bspline"]["pointControl"]))
    #         newpts = core.convertToSuperNicePoints(perPndList[idx],newpts)
    #         newpts = core.findNearestPoint(perPndList[idx][0],newpts)
    #         if newpts != False:
    #             if core.quadrantContains(perPndList[idx][1],newpts):
    #                 None
    #             try:
    #                 writingDict[data[5]] = writingDict[data[5]] + [newpts]
    #             except KeyError:
    #                 writingDict[data[5]] = [newpts]
    #             additionPts.append([newpts])
    # additionPts = list(itertools.chain.from_iterable(additionPts))
    # core.save_obj(writingDict,"wall")

    log.info("Writing adapted text")

    with open("adapted.txt", "a+") as text_file:
        text_file.writelines("3000 3000\n")
        for item1 in derefine:
            text_file.writelines(["%s " % item for item in item1])
            text_file.writelines("\n")
        text_file.writelines("3000 3000\n")
        text_file.writelines("1000 1000\n")
        for item1 in adaptdata:
            text_file.writelines(["%s " % item for item in item1])
            text_file.writelines("\n")
        for item1 in adaptwall:
            text_file.writelines(["%s " % item for item in item1])
            text_file.writelines("\n")
        text_file.writelines("1000 1000\n")
        # text_file.writelines("2000 2000\n")
        # for item1 in additionPts:
        #     text_file.writelines(["%s " % item for item in item1])
        #     text_file.writelines("\n")
        # text_file.writelines("1000 1000\n")
    log.info("Done")