2016-07-28 3 views
0

내 목표는 매개 변수화 된 모델 인 긴 직사각형 영역에서 전환 매핑 된 쿼드 메쉬를 얻는 것입니다. 다음과 같이 최종 메쉬 볼 수 있습니다 :이 최종 출력 메시을 실현할 수스크립트를 사용하여 ABAQUS에서 스케치 된 페이스를 더 빠르게 분할하는 방법

Transition Mapped Quad Meshing

수있는 유일한 방법은 각각의 가장자리에 적절한 메시 컨트롤 및 시드를 사용하여, 다음 스케치와 함께 얼굴을 분할하는 것이 었습니다. 'for'루프의 왼쪽에서 실행 Python 스크립트에서 사용 된 후

Single block created by partioning the face with sketch

: 따라서,이 같은 형상 왼쪽의 블록을 생성하기 시작 가장 오른쪽 끝에 최종 분할 된면에 사각형의 얼굴은 다음과 같습니다

Final geometry ready to be meshed

그래서, 나는 세 가지 방법으로이 일을 시도했다.

옵션 1 : 왼쪽에서 findAt를 사용하여 스케 쳐 창을 배치 한 다음 블록을 생성하고 "for"루프를 사용하여 스케 쳐 창의 좌표계 원점을 오른쪽으로 점진적으로 오른쪽으로 밀어냅니다 오른쪽 측면. 즉, 원점에 대한 블록의 위치는 항상 동일하므로 원점이 왼쪽에서 오른쪽으로 이동하면 블록이 함께 이동했습니다. 그래서 필자는 필요한 수의 블록 수만큼 "스케치가있는 파티션 페이스"를 열고 닫아야했습니다.

옵션 2 : 스케 쳐 윈도우의 원점이 동일한 위치 (예 : 0.0, 0.0, 0.0)에 있으며 블록이 점진적으로 오른쪽으로 밀렸습니다. 옵션 1과 비교할 때 원점을 기준으로 한 블록의 상대적 위치가 각 증분에서 변경되었습니다. 여기서도 "스케치가있는 파티션면"이 열리고 필요한 블록 수만큼 닫힙니다.

옵션 3 : "스케치가있는 파티션 페이스"를 한 번만 열었고 원점은 같은 위치에있었습니다. 그런 다음이 모든 수평선과 수직선을 "for"루프로 그려 최종적으로 분할 된면을 만듭니다.

이러한 모든 방법론은 완벽하게 작동하지만 시간이 많이 걸립니다. 이 방법들 각각은 8-12 분에서부터 거의 모든 블록 생성을 끝내기 때문에 수렴 연구에는 적합하지 않습니다.

누구나이 전체 프로세스를 3-4 분 정도 빨리 수행 할 수있는 더 나은 솔루션을 제안 할 수 있습니까? 정말 고맙겠습니다. 미리 감사드립니다.

편집 :/첫 번째 (초기 스케치를 중복 당신이 복사 선형 패턴을 사용할 수 있습니다 ABAQUS 스케치에로 스케치하는 과정을 반복 할 필요가 없습니다 것 같다

# The arguments of the function "block" are the x and y coordinates of the 
# 4 corners of the rectangle where the blocks have to be generated in. 
def block(x_left, x_right, y_top, y_bottom): 

    # Opens the sketcher window 
    p = mdb.models['TDCB'].parts['Part_TDCB'] 
    f, e, d = p.faces, p.edges, p.datums 
    t = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(x_left + ((x_right - x_left)/3), y_bottom + ((y_top - y_bottom)/3), 0.0), 
    normal=(0.0, 0.0, 1.0)), sketchPlaneSide=SIDE1, origin=(x_left, y_bottom, 0.0))    
    s = mdb.models['TDCB'].ConstrainedSketch(name='__profile__', sheetSize=500.00, 
    gridSpacing=12.00, transform=t) 
    g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints 
    s.setPrimaryObject(option=SUPERIMPOSE) 
    p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES) 


    # The following block generates the first couple of horizontal lines 
    s.Line(point1=(block_width, 0.0), point2=(block_width, y_top)) # Line No.1 

    s.Line(point1=(0.0, y_coord[-2]), point2=(block_width, y_coord[-2])) # Line No.2 

    s.Line(point1=(0.0, y_coord[-3]), point2=(block_width, y_coord[-3])) # Line No.3 

    s.Line(point1=(0.0, y_coord[-4]), point2=(block_width, y_coord[-4])) # Line No.4 

    s.Line(point1=(0.0, y_coord[-5]), point2=(block_width, y_coord[-5])) # Line No.5 

    s.Line(point1=(0.0, y_coord[-6]), point2=(block_width, y_coord[-6])) # Line No.6 

    # Closes the sketcher window 
    p = mdb.models['TDCB'].parts['Part_TDCB'] 
    f = p.faces 
    pickedFaces = f.findAt((x_left + ((x_right - x_left)/3), y_bottom + ((y_top - y_bottom)/3), 0.0))      
    e1, d2 = p.edges, p.datums 
    p.PartitionFaceBySketch(faces=pickedFaces, sketch=s) 
    s.unsetPrimaryObject() 
    del mdb.models['TDCB'].sketches['__profile__']  

    return 

# Finally the blocks are generated using a "for" loop 
for i in range(total_blocks): 
    block(x_left, x_right, y_top, y_bottom) 
+0

Longjie 어쩌면 도움이 될 것입니다 코드의 예를 보여줍니다. – agentp

+0

하나의 스케치에서 모든 선을 만들고 한 번에 분할 할 수 있습니까? 여러 단계가 필요 없습니다. 또한 큰 것에서 작은 것으로 전이하는 무질서 메쉬에 무슨 문제가 있습니까? 그것은 당신이 그것을 보여준 것처럼 순조로운 전환 일 필요는 없습니다. – will

+0

@ 윌 : 매우 유용한 힌트입니다. 나는 그것을 밖으로 시도 할 것이다. 고마워. ..이전 모델이 동일한 전환을 가진 다른 사람에 의해 생성 되었기 때문에 전환에 대해 사실 내 감독자가 원하는 것입니다. –

답변

0

: 여기에 코드들입니다 왼쪽에 블록). 이것은 전체 과정을 더 쉽게 만들 수 있습니다. 감사.

감사합니다,

+0

그건 내가 해왔 던 것과는 아주 다른 가치있는 제안이야. 나는 그것을 시도 할 것이다. 고마워. .. –