적응 해상도: 물속에서 일정 속도로 끄는 구

연속 적응 해상도(adaptive resolution)는 입자마다 질량과 크기를 다르게 두고, 해석 중에 입자를 나누고(split) 합쳐서(merge) 관심 영역만 작은 입자로 채우는 기능입니다. 이 튜토리얼에서는 수조 물속에 잠긴 구를 수평으로 일정 속도로 끌고, 구 주변만 작은 입자로 세분화하는 모델을 GUI로 만들고 해석합니다.

만들 모델

항목

값

수조

0.2 × 0.15 × 0.12 m, 최소 모서리가 원점

물

수조 바닥부터 높이 0.12 m 영역, 입자 반경 r = 0.002 m, 정지 밀도 간격. 구 표면에서 2.5 r 안의 입자를 지워 46,055개

구

지름 0.032 m, 중심 (0.06, 0.06, 0.06). 바닥·벽·수면에서 표면까지 약 37–44 mm

운동

0–0.6 s 조인트 잠금(정착과 세분화), 0.6 s부터 +x 방향 0.2 m/s(0.25 s 동안 속도를 올림)

적응 해상도

ratio 8(가장 작은 입자의 질량 = 기본 질량 / 8), 구 경계 세분화 d = 1 h_base, w_t = 5 h_base

해석

1.0 s, CUDA

h_base는 기본 입자의 지지 반경 4r입니다(r = 0.002 m이면 0.008 m). 세분화 범위는 h_base 단위로 정합니다.

형상 모델링

수조

Modeling Window의 Shape Components -> File을 엽니다.

  1. Name에 watertank를 넣습니다.

  2. File 옆의 Open으로 UnitBox.obj를 고릅니다.

  3. Scale에 [0.2, 0.15, 0.12], Trans.에 [0.1, 0.075, 0.06]을 넣습니다.

  4. Create Mesh Shape를 누릅니다.

화면에 수조가 나타나고 Property Window의 Geometry 아래에 watertank가 생깁니다. 안의 입자를 보려면 수조의 Color에서 투명도(Alpha)를 낮추거나 Wireframe을 켭니다.

구

같은 방법으로 구를 만듭니다. 구는 ​물속의 최종 위치 에 둡니다. 다음 단계에서 이 위치를 기준으로 구 주변 입자를 지우기 때문입니다.

  • Name : sphere

  • File : sphere.obj

  • Scale : [0.032, 0.032, 0.032]

  • Trans. : [0.06, 0.06, 0.06]

유체

Shape Components -> Particle을 열고 Volumetric을 고른 뒤 다음을 넣습니다.

  1. Name : fluid

  2. Radius : 0.002

  3. Size : [0.2, 0.12, 0.12]

  4. Location : [0.0, 0.0, 0.0]

  5. Rest-density Spacing을 켭니다. 그러면 Wall Gap이 2.5로 바뀌고, 그 아래 줄의 표시가 Initial density ~ 0.800 rho0에서 Initial density ~ 0.997 rho0으로 바뀝니다.

  6. Gen. Particle을 누릅니다.

fluid 입자 형상이 생기고 입자 수(Number)는 46,800개입니다(x 52 × y 30 × z 30 층). 가장 위 입자 층의 높이는 약 0.113 m입니다. 이때는 구 안과 구 표면 바로 옆에도 입자가 있습니다. Volumetric 생성기는 영역을 상자 모양으로 채우기만 합니다.

구 주변 입자 지우기 (Substract)

Modeling Window의 Tool Components -> Substract를 엽니다. 입력 항목은 Modeling Property 아래에 나타납니다.

  1. Shape : sphere

  2. Particle : fluid

  3. offset : 0.005 (2.5 r)

  4. Substract를 누릅니다.

Log Window에 Substract was done.과 745 particles were removed because of substraction.이 남고, fluid의 입자 수가 46,055개가 됩니다. 이 두 수(745개, 46,055개)는 GUI 화면에서 읽은 값이 아니라, 같은 규칙(구 표면까지의 거리 − offset ≤ 0이면 지움)을 정확한 구로 계산한 값입니다. 메시 구와의 차이로 지워지는 입자가 바뀌지 않음을 확인했습니다(문턱에 가장 가까운 입자도 28.7 µm 떨어져 있고, 메시 면의 처짐은 약 15 µm 이하).

Substract는 고른 메시 강체(Shape)로 부호 거리장(SDF)을 만들고, 강체 표면까지의 거리가 offset 이하인 입자(강체 안쪽 포함)를 Particle 형상에서 지웁니다(XImGuiToolTreeNode.cpp의 ImGuiSubstractToolTreeNode::propertyGui). offset은 ​강체 표면에서 잰 거리 입니다. 위젯 툴팁에는 "particle radius + offset"이라고 쓰여 있지만, 코드는 입자 반경을 더하지 않고 offset만 씁니다.

SPH 모델 정의

Model Components에서 SPH를 고르고 Create Model을 누릅니다. 이후 단계는 Property Window의 Model 아래 SPH 모델의 하위 항목을 하나씩 골라 진행합니다.

Fluid

  1. 콤보 상자에서 fluid를 고르고 Add를 누릅니다.

  2. 목록의 fluid를 고르면 아래에 항목이 나타납니다. Fluid를 펼치면 Generated radius: 0.002가 보입니다. Log Window에 Property particle radius was changed from 0.025 to 0.002 to match fluid fluid.가 남고, Property의 Particle Radius가 0.002로 바뀝니다.

  3. Viscosity를 펼쳐 Standard를 고르고 Fluid Viscosity 1e-06, Boundary Viscosity 0을 넣습니다.

  4. XSPH를 펼쳐 Fluid Coefficient 0.05, Boundary Coefficient 0을 넣습니다.

Boundary

콤보 상자에서 watertank와 sphere를 차례로 골라 Add로 목록에 넣습니다. 목록에서 각 경계를 골라 다음을 넣습니다.

수조(watertank)

항목

값

설명

Invert

체크

수조 안쪽 면과 상호작용합니다. 켜면 Refine은 비활성이 됩니다(세분화는 강체에만 걸 수 있음).

Thickness

0.000

Density

1000.0

Resolution

[82, 70, 62]

volume map 격자 수. 2RP를 켜고 Optimal Resolution을 누른 값(셀 크기 2r = h_base/2)과 같습니다.

구(sphere)

항목

값

설명

Invert

체크 안 함

Refine

체크

이 강체 주변을 세분화합니다.

Refine Dist. / Refine Trans.

Recommended Range 버튼

0.008 / 0.04가 들어갑니다(아래 설명).

Density

2700.0

넣은 뒤 Update Mass를 누릅니다.

Resolution

[64, 64, 64]

Refine을 켜면 Refine Dist.와 Refine Trans.가 0인 채로 나타나고, 그 아래에 해석기가 쓸 값이 회색으로 나옵니다.

Text

Resolved d: 0.008 m (1 h_base) Resolved w_t: 0.032 m (4 h_base)

0은 해석기 기본값(d = h_base, w_t = 4 h_base)으로 풀린다는 뜻입니다. Recommended Range를 누르면 Refine Dist.에 0.008, Refine Trans.에 0.04가 들어가고 회색 줄이 다음처럼 바뀝니다.

Text

Resolved d: 0.008 m (1 h_base) Resolved w_t: 0.04 m (5 h_base)

d = 1 h_base, w_t = 5 h_base는 움직이는 강체에 대해 검증한 권장 범위입니다. 구 표면에서 d까지는 가장 작은 입자를 두고, d부터 d + w_t까지 기본 크기로 선형으로 커집니다. 범위가 좁으면(d = 0.5 h_base) 강체 하중 정확도가 떨어졌습니다(docs/multi-resolution-sph.md의 "권장 세분화 범위"). 이 축소판은 구 표면에서 벽·바닥·수면까지가 약 37–44 mm로 d + w_t(48 mm)보다 조금 짧아서, 세분화 띠의 바깥 끝이 벽 근처에서 잘립니다(mv-tow는 그 거리를 76 mm 이상 둡니다).

Property

SPH Property

항목

값

설명

Use ZSort / Steps Zsort

체크 / 500

기본값

Boundary

Boundary Bender 2019

적응 해상도는 Bender volume map 경계에서만 됩니다.

Kernel

Cubic Spline

Particle Radius

0.002

유체를 추가할 때 자동으로 들어갑니다.

Ratio

8

Adaptive Resolution 절. 가장 작은 입자의 질량 비 m_base / m_fine입니다. 1이면 적응 해상도가 꺼집니다.

Adaptive Resolution 절의 나머지(Max Particles 0, Refine Surface 끔, Advanced 아래 항목)는 건드리지 않습니다.

Ratio에 8을 넣으면 절 끝의 Adaptive Status 상자가 다음처럼 됩니다.

Text

On: Ratio 8, finest mass m_base / 8 h_base: 0.008 m (support radius, 4 r) r_fine: 0.001 m (0.125 h_base) h_fine: 0.004 m (0.5 h_base) Cell size: 0.01008 m (1.26 h_base) Body 'sphere': d = 0.008 m (1 h_base), w_t = 0.04 m (5 h_base) Capacity: 218900 particles (estimated)
  • r_fine, h_fine은 가장 작은 입자의 반경과 지지 반경입니다(질량이 1/8이면 길이는 1/2).

  • Capacity는 해석기가 잡을 입자 용량입니다. 유체 46,055개에 ratio 8의 추정 계수(약 4.75)를 곱한 값입니다.

  • 빨간 Error: 줄이나 노란 Warning: 줄이 없어야 합니다. 있으면 아래 흔한 오류와 상태 상자 메시지를 봅니다.

  • 상태 상자는 해석기가 해석을 시작할 때 하는 검사와 같은 함수를 부릅니다. 상자에 오류가 있으면 해석도 같은 오류로 멈춥니다. 상자는 저장과 해석을 막지 않습니다.

Scheme

Scheme은 DFSPH입니다. Paper Tolerances를 누르면 다음 값이 들어갑니다.

  • Max Iterations : 256

  • Max Den. Error : 0.01

  • Max Div. Error : 0.1

값의 단위는 %입니다. 적응 해상도의 운동 강체 검증 사례(mv-tow 등)는 모두 이 논문 해법 기준으로 돌렸습니다. 기본값(Max Iterations 100, Max Den. Error 0.5)에서는 비교 기준인 고정 fine 해석의 압력 해법이 반복 상한 100회에 잘려, 적응 해석과 수렴 정도가 다른 비교가 되었습니다(docs/multi-resolution-sph.md의 "검증 사례와 설정").

Fluid-only Divergence는 끈 채로 둡니다. 켜면 발산 해법이 유체-유체 상호작용만 풀고 강체 하중은 밀도 해법에서만 받습니다. 사례마다 효과의 방향이 다르고 ratio 1 결과도 바뀌어서, 기본값으로 권하지 않는 옵트인 설정입니다(docs/multi-resolution-sph.md의 "옵트인 설정").

Simulation

SPH Simulation

항목

값

설명

TS Method

CFL

가변 시간 간격

CFL Factor

0.25

Min Time Step

1e-06

Max Time Step

0.0005

Time Step

0.0005

초기 시간 간격

MBD 모델 정의

Model Components에서 MBD를 고르고 Create Model을 누릅니다. 그러면 Modeling Window에 MBD Components가 나타납니다.

강체

MBD Components -> Body -> Rigidbody에서 SPH Boundary를 고르고 콤보 상자에서 sphere를 고른 뒤 Add to Rigidbody를 누릅니다. 질량과 관성은 Boundary의 Density(2700)로 계산됩니다.

병진 조인트

MBD Components -> Constraint -> Translate에서 다음을 넣고 Create를 누릅니다.

  • Name : Translate_0

  • first : ground, second : sphere

  • Loc. : [0.06, 0.06, 0.06]

  • Tra. Axis : [1, 0, 0]

만든 뒤 Property Window에서 Translate_0을 골라 Locking을 켜고 Start 0, End 0.6을 넣습니다. 0.6 s까지 구가 움직이지 않으므로, 그동안 물이 정착하고(0–0.5 s) 구 주변이 세분화됩니다(0.5 s부터).

병진 모터

MBD Components -> Constraint -> Tra. Motor에서 다음을 넣고 Create를 누릅니다.

  • Name : TMotor0

  • base : Translate_0

  • S. Time : 0.6

  • E. Time : 100

  • C. Value : 0.2 (m/s, 조인트 축 방향이므로 +x)

  • R. Time : 0.25 (0.6 s부터 0.25 s 동안 속도를 부드럽게 올림, mv-tow와 같은 값)

모터와 조인트 잠금 규칙(잠금이 모터보다 우선, 켜지는 순간의 위치를 기준으로 삼음)은 docs/multi-resolution-sph.md의 "병진 조인트와 병진 모터"에 있습니다. 노드 편집기에서 "Translational Joint"와 "Translation Motor"로 만들어도 됩니다.

MBD Simulation

MBD 모델의 Simulation에서 Time Step에 0.00005를 넣습니다(mv-tow와 같은 값).

MBD Stepper

MBD 모델의 Stepper에서 콤보 상자를 Euler Implicit로 바꿉니다(mv-tow와 같은 적분기). 기본값 HHT로 두면 Alpha·Tol. 입력이 나타나고 파일에도 alpha, tolerence가 저장되며, 샘플과 다른 적분기로 해석됩니다.

저장

File -> Save로 ​빈 폴더 에 default.json으로 저장합니다(sample/tutorial-adaptive에 저장하지 마십시오. 커밋된 샘플을 덮어씁니다). 입자 형상은 같은 폴더에 fluid.par로 저장됩니다. Substract로 지운 입자는 이 파일에 들어가지 않습니다. 저장된 파일은 sample/tutorial-adaptive/default.json과 같은 구성입니다. Property의 adaptive에는 다음만 들어갑니다.

Json

"adaptive": { "max_particles": 0, "ratio": 8, "surface": { "distance": 0.0, "enabled": false, "seed": "geometric" } }

start_time 등 Advanced의 키는 편집하지 않았으므로 쓰지 않습니다. 해석기는 그 기본값을 씁니다.

저장된 파일의 입자 수는 두 곳 모두 Substract 뒤의 값(46055)입니다: 그래픽 형상(graphics.shapes의 fluid 항목 num_particles, GUI가 다시 열 때 읽음)과 model.SPH.Fluid.fluid.num_particles(해석기가 읽음).

해석 수행

Property Window 아래의 Simulation 절에서 다음을 넣고 Simulation을 누릅니다.

  • Compute : CUDA

  • Save Interval : 40 (40 step마다 결과 저장)

  • End Time : 1.0

명령줄에서는 다음과 같습니다(이 PC에서 약 2.5분).

Bat

xdynamics_gui.exe --no-gui-solve <폴더>\default.json cuda 1.0 40

해석이 시작되면 경계마다 volume map을 만듭니다. 적응 해상도에서는 ratio 8에 대해 단계별 map 4개를 만들고, 작업 폴더에 .cdm 파일로 캐시합니다. 두 번째 실행부터는 캐시를 읽습니다.

로그(xdynamics.log, Log Window)에서 다음을 확인합니다.

  • 시작할 때 [adaptive] ratio 8 (continuous adaptive resolution is on)과 설정 요약 줄 [adaptive] ratio … refined bodies: …이 나옵니다.

  • 저장마다 [adaptive] fluid n N split N merged N … 줄이 나옵니다. 0.5 s 전에는 split과 merged가 0이고, 0.5 s 직후 구 주변 입자가 한꺼번에 나뉘어 split과 입자 수 n이 늘어납니다. mass(유체 총질량)는 실행 내내 같아야 합니다.

  • Linear motor TMotor0 … 줄에서 0.6 s 이후 모터 속도가 0.2 m/s까지 오르는 것과 구에 걸리는 힘(force)을 봅니다.

이 튜토리얼 모델을 RTX 4060 Ti에서 실행한 로그의 일부입니다(시각 표시 생략, 같은 줄은 ...로 줄임). volume map 8개 생성에 약 68 s, 해석 2,000 step에 약 86 s가 걸렸습니다.

Text

[adaptive] fluid: 46055 loaded particles, capacity 218900 [adaptive] ratio 8 (continuous adaptive resolution is on) Translation motor TMotor0 on joint Translate_0: constant speed 0.200000, ramp 0.250000 s (m/s), start 0.6, end 100 [adaptive] ratio 8 max_particles 0 surface off (phi_max 0.048) refined bodies: sphere [adaptive] start_time 0.5 s split_delay_steps 10 blend_time 0.01 s ramp_interval 0 s [adaptive] fluid n 46055 split 0 merged 0 redistributed 0 mass 2.35801636265 min_m 5.12e-05 max_m 5.12e-05 ... ... [adaptive] fluid n 60799 split 5152 merged 0 ... mass 2.35801636586 min_m 6.4e-06 max_m 5.12e-05 ... (0.52 s) [adaptive] fluid n 60851 split 52 merged 0 ... (0.54 s) ... [adaptive] fluid n 60925 split 10 merged 0 ... (0.60 s) Linear motor TMotor0 engages at t=0.60005: pos 0.000000e+00 m, offset 0.000000e+00 m ... [adaptive] fluid n 61727 split 611 merged 509 ... mass 2.35801636558 min_m 6.4e-06 max_m 5.12e-05 ... (1.00 s) Linear motor TMotor0 t=1.00005: pos 5.496001e-02 m, speed 0.20000 m/s, force 8.065423e-02 N
  • 0.5 s까지는 분할이 없고(split 0), 0.52 s 저장에 분할 5,152개가 한꺼번에 일어나 입자가 60,799개가 됩니다. 0.6 s까지는 저장마다 수십 개(52, 34, 30, 10)로 줄어 세분화가 자리 잡습니다.

  • 구가 움직이기 시작하면(0.6 s) 분할과 병합이 함께 일어나고, 입자 수는 약 61,000–62,500개를 오갑니다.

  • mass(유체 총질량)는 처음과 상대 차 약 \(1.4\times10^{-9}\)로 같습니다.

  • 구는 1.0 s까지 +x로 0.055 m 움직이고, 0.85 s부터 0.2 m/s로 끌립니다. 모터 힘은 0.01–0.18 N입니다.

  • 이 모델은 유속이 작아 시간 간격이 끝까지 Max Time Step(0.0005 s)이었습니다.

결과 확인

해석이 끝나면 Result Window에서 frame을 넘기거나 재생합니다.

  • 입자 형상의 Display Mode를 Sphere (Shaded)로 두면 입자가 자기 반경으로 그려집니다. 0.5 s 뒤에 구 주변 입자가 작아지는 것이 보입니다. 해석 중 실시간 표시에는 입자별 반경이 전달되지 않으므로, 크기 차이는 결과 재생에서만 보입니다.

  • Result 콤보에서 mass를 고르면 입자 질량으로 색을 칠합니다. 기본 입자의 질량은 \(m_{base} = \rho_0 \cdot 0.8\,(2r)^3 = 5.12\times10^{-5}\) kg이고, 가장 작은 질량은 그 1/8인 \(6.4\times10^{-6}\) kg입니다(위 실행의 min_m). 구 표면에서 d(8 mm)까지 질량이 가장 작고, 그 밖 w_t(40 mm) 동안 기본 질량으로 커집니다.

  • radius는 입자 반경 \(r_i = h_i/4\), adaptive_class는 분류(S s o l L = 0..4)입니다.

​아래 결과 영상의 색상은 입자의 반경 크기에 따른 색상 표현입니다.

흔한 오류와 상태 상자 메시지

Property의 Adaptive Status 상자는 해석기와 같은 문구를 Error:(빨강), Warning:(노랑), 회색 안내 줄로 보입니다. 해석기 로그에도 같은 문구가 나옵니다.

메시지

원인

고치는 법

Error: Adaptive resolution needs Bender volume map boundaries (Property.boundary_method 0)

Property의 Boundary가 Boundary Bender 2019가 아님

Boundary를 Boundary Bender 2019로 바꿉니다.

Error: Adaptive resolution needs Bender volume map boundaries; boundary '<이름>' is a particle (Akinci) boundary

입자로 만든 경계가 있음

메시 경계(.obj)로 바꿉니다.

Error: Adaptive resolution is not supported for 2D simulations

Property의 2D Sim.이 켜짐

적응 해상도는 3D만 됩니다.

Error: Adaptive resolution cannot be combined with surface tension / ... with dump/restart / ... with emitters that reuse particles

함께 쓸 수 없는 기능이 켜짐

그 기능을 끄거나 Ratio를 1로 둡니다.

Error: Refined boundary '<이름>' does not exist

파일의 refine이 없는 경계 이름을 가리킴

경계 이름을 맞추거나 그 경계의 Refine을 끕니다.

Error: Refined boundary '<이름>' is inverted; only bodies can be refined

수조처럼 Invert인 경계에 refine이 켜짐(파일에서)

그 경계의 Refine을 끕니다. GUI는 Invert 경계의 Refine을 비활성으로 둡니다.

Error: adaptive.ratio 8.5 must be an integer >= 1

파일의 ratio가 정수가 아님. Ratio 아래에 노란 안내 File value 8.5 is not an integer ratio; it is saved unchanged until Ratio is edited가 함께 나옴

Ratio를 편집합니다. 아래 "보이는 값을 다시 넣어도 바뀌지 않을 때"를 봅니다.

Error: adaptive.s_merge "yes" must be true or false

파일의 s_merge가 참/거짓이 아님

Merge Class s (s_merge)를 두 번 눌러(켰다 끄기) 꺼진 값을 씁니다.

Error: adaptive.surface.seed 'foo' must be "geometric" or "density"

파일의 seed 값이 잘못됨

Surface Seed에서 항목을 고릅니다(보이는 항목을 다시 골라도 씁니다).

Error: Adaptive resolution settings could not be read: <내용>

파일 값의 형식이 틀려 읽을 수 없음(예: surface.enabled가 문자열)

해당 위젯을 편집합니다(Refine Surface는 두 번 눌러 원하는 값으로).

Error: adaptive.start_time must be >= 0, adaptive.blend_time must be > 0, adaptive.split_delay_steps must be >= 0, adaptive.ramp_interval must be >= 0

Advanced의 값이 범위 밖

값을 고칩니다. 모르면 툴팁의 기본값을 넣습니다.

Error: Scheme.divergence_fluid_only needs Bender volume map boundaries (Property.boundary_method 0)

Fluid-only Divergence가 켜졌는데 경계가 Bender가 아님. Scheme 패널에도 Fluid-only Divergence needs Boundary Bender 2019 (Property > Boundary)가 나옴

Fluid-only Divergence를 끕니다.

Warning: adaptive.ratio 8 but no sizing criterion is on (adaptive.surface.enabled false and no boundary refine enabled): nothing is refined, while the particle capacity, the h-level volume maps and the per-step host copies are still paid

Ratio를 넣었지만 세분화 기준(강체 Refine, Refine Surface)이 하나도 켜지지 않음

구 경계의 Refine을 켭니다.

<항목>: checked when the run starts (회색)

GUI 모델만으로 정할 수 없는 항목

해석을 시작할 때 해석기가 검사합니다. 할 일은 없습니다.

No particle radius: the lengths are not available (회색)

Property의 Particle Radius가 0

유체를 Fluid에 추가하거나 반경을 넣습니다.

No fluid particles: the capacity estimate is 0 (회색)

Fluid에 유체가 없음

유체를 추가합니다.

Substract requires a mesh body and a particle shape. (Log Window)

Substract의 Shape가 메시 형상이 아니거나 Particle이 입자 형상이 아님

Shape에 메시(.obj)로 만든 강체를, Particle에 유체 입자 형상을 고릅니다.

보이는 값을 다시 넣어도 바뀌지 않을 때

GUI는 사용자가 위젯 값을 ​바꾼 키만 위젯 값으로 저장하고, 건드리지 않은 키는 파일의 값을 그대로 다시 씁니다. 그래서 파일 값이 위젯에 그대로 보일 수 없는 경우(예: 파일의 ratio 8.5가 Ratio 칸에 8로 보임), 보이는 값 8을 다시 입력해도 값이 바뀌지 않았으므로 편집으로 치지 않고 8.5가 그대로 저장됩니다. 다른 값으로 바꿨다가 원하는 값으로 되돌리십시오(예: 9를 넣었다가 8). 체크박스(Merge Class s (s_merge), Refine Surface)는 두 번 누르면 됩니다. 상태 상자의 오류가 사라지면 저장할 값이 바뀐 것입니다.

Rest-density Spacing과 Wall Gap

Rest-density Spacing을 켜면 Wall Gap이 2.5로 바뀌고, 끄면 켜기 전의 값으로 돌아갑니다. 켜 둔 동안 Wall Gap에 다른 값을 넣었더라도, 끄는 순간 그 값은 켜기 전의 값으로 바뀝니다. Wall Gap을 바꾸려면 체크박스를 원하는 상태로 둔 뒤에 넣으십시오.

그 밖의 문제

  • ​첫 step에서 구 주변 입자가 튐: Substract의 offset이 작습니다. 이 모델에서 offset 0.002(1 r)이면 첫 step 직후 구 근처(표면에서 4 r 안) 입자의 최대 속도가 2.27 m/s, offset 0.005(2.5 r)이면 0.0005 m/s였습니다. offset을 2.5 r로 두고 유체를 다시 만들어 Substract를 다시 누릅니다.

  • ​구 안에 입자가 남거나, 구와 떨어진 곳이 비어 있음: Substract 뒤에 구를 옮겼습니다. 구를 최종 위치에 두고 유체를 다시 만든 뒤(Gen. Particle) Substract를 다시 누릅니다.

  • ​회전시킨 강체: 강체 형상을 회전시켜도(Tool Components의 Rotate 등) Substract와 해석기는 화면과 같은 회전된 모양을 씁니다(2026-11-09 수정; 그 전에는 둘 다 메시 파일의 원래 방향을 썼습니다). Substract 전에 강체를 최종 방향으로 돌려 두는 것은 위치와 같습니다. 그 전 해석기로 만든 회전 강체의 volume map 캐시(.cdm)는 쓰이지 않고 새로 만들어집니다(파일 이름에 _bf). 저장하고 다시 열어도 형상의 회전이 유지됩니다(graphics.shapes의 rotation). 그 전 GUI로 저장한 파일은 형상 회전이 없으므로, 열 때 Boundary(또는 MBD Body)의 회전을 형상에 넣고 Shape <이름>: rotation taken from the model (file without a shape rotation).을 남깁니다.

  • Fluid의 Generated radius 0.002 differs from …(빨강): 입자를 만든 반경과 Property 반경이 다릅니다. 모든 유체는 Property 반경으로 해석되므로, 입자를 같은 반경으로 다시 만들거나 Property의 Particle Radius를 맞춥니다.

  • ​첫 해석이 오래 걸림: volume map을 만드는 시간입니다. 캐시(.cdm)가 있으면 다음 실행은 빠릅니다. Resolution을 크게 하면 map 생성 시간이 늘어납니다.

  • ​분할이 일어나지 않음: 0.5 s(Start Time) 전에는 분할하지 않습니다. 구 Refine이 켜져 있는지 확인합니다.

On this page