[ PROMPT_NODE_26594 ]
advanced_features
[ SKILL_DOCUMENTATION ]
# 高级功能
## 自定义强迫力 (Custom Forcing)
### 强迫力类型
FluidSim 支持多种强迫机制来维持湍流或驱动特定的动力学过程。
#### 时间相关随机强迫 (Time-Correlated Random Forcing)
最常用于维持湍流:
python
params.forcing.enable = True
params.forcing.type = "tcrandom"
params.forcing.nkmin_forcing = 2 # 最小强迫波数
params.forcing.nkmax_forcing = 5 # 最大强迫波数
params.forcing.forcing_rate = 1.0 # 能量注入率
params.forcing.tcrandom_time_correlation = 1.0 # 相关时间
#### 比例强迫 (Proportional Forcing)
维持特定的能量分布:
python
params.forcing.type = "proportional"
params.forcing.forcing_rate = 1.0
#### 脚本中的自定义强迫
直接在启动脚本中定义强迫力:
python
params.forcing.enable = True
params.forcing.type = "in_script"
sim = Simul(params)
# 定义自定义强迫函数
def compute_forcing_fft(sim):
"""在傅里叶空间计算强迫力"""
forcing_vx_fft = sim.oper.create_arrayK(value=0.)
forcing_vy_fft = sim.oper.create_arrayK(value=0.)
# 添加自定义强迫逻辑
# 示例:强制特定模态
forcing_vx_fft[10, 10] = 1.0 + 0.5j
return forcing_vx_fft, forcing_vy_fft
# 重写强迫方法
sim.forcing.forcing_maker.compute_forcing_fft = lambda: compute_forcing_fft(sim)
# 运行仿真
sim.time_stepping.start()
## 自定义初始条件
### 脚本内初始化
完全控制初始场:
python
from math import pi
import numpy as np
params = Simul.create_default_params()
params.oper.nx = params.oper.ny = 256
params.oper.Lx = params.oper.Ly = 2 * pi
params.init_fields.type = "in_script"
sim = Simul(params)
# 获取坐标数组
X, Y = sim.oper.get_XY_loc()
# 定义速度场
vx = sim.state.state_phys.get_var("vx")
vy = sim.state.state_phys.get_var("vy")
# Taylor-Green 涡旋
vx[:] = np.sin(X) * np.cos(Y)
vy[:] = -np.cos(X) * np.sin(Y)
# 在傅里叶空间初始化状态
sim.state.statephys_from_statespect()
# 运行仿真
sim.time_stepping.start()
### 层初始化(分层流)
设置密度层:
python
from fluidsim.solvers.ns2d.strat.solver import Simul
params = Simul.create_default_params()
params.N = 1.0 # 层化
params.init_fields.type = "in_script"
sim = Simul(params)
# 定义稠密层
X, Y = sim.oper.get_XY_loc()
b = sim.state.state_phys.get_var("b") # 浮力场
# 高斯密度异常