常见粒子属性的获取与输出

获取粒子信息

BaseParticles &fluid_axial_particles = fluid_axial_observer.getBaseParticles();
Vecd *pos_axial = fluid_axial_particles.ParticlePositions();
Real *vol = fluid_axial_particles.VolumetricMeasures()
UnsignedInt originalID = fluid_axial_particles.ParticleOriginalIds();
UnsignedInt sortedID = fluid_axial_particles.ParticlesortedIds();
Vecd *vel_axial = fluid_axial_particles.getVariableDataByName<Vecd>("Velocity");

所有DiscreteVariable,都能用getVariableDataByName获取到。只不过对于position、volume、originalID、sortedID这些变量,可以用更直接的接口。

输出粒子信息

BodyStatesRecordingToVtp body_states_recording(sph_system);
body_states_recording.addToWrite<Real>(water_block, "Pressure");
body_states_recording.addToWrite<Real>(water_block, "Density");
body_states_recording.addToWrite<Vecd>(water_block, "Force");
body_states_recording.addToWrite<Vecd>(water_block, "ForcePrior");
body_states_recording.addToWrite<Real>(water_block, "Mass");
body_states_recording.addToWrite<Real>(water_block, "VolumetricMeasure");

基础/通用(几乎所有 body 都能见到)

  • "Position" (Vecd):粒子位置(见 base_particles.cpp)。

  • "VolumetricMeasure" (Real):体积度量(体粒子=体积;面粒子=面积;线粒子=长度),常用于质量/积分(同上)。

  • "Density" (Real):密度(同上)。

  • "Mass" (Real):质量(通常由 rho * Vol 初始化得到)(同上)。

  • "Velocity" (Vecd):速度(很多材料/动力学会注册,见 base_material.cpp)。

  • "Acceleration" (Vecd):加速度(同上)。

  • "OriginalID" (UnsignedInt):生成时的原始粒子编号(默认就被加入输出,见 base_particles.cpp)。

  • "Force" (Vecd):力(动力学里常作为合力/中间量注册)。

  • "ForcePrior" (Vecd):先验/外加/预处理的力项(很多积分框架会把某些力先累加到这里,再进入后续更新)。

流体里很常写的

  • "Pressure" (Real):压力(见 fluid_integration.hpp)。

  • "DensityChangeRate" (Real):$\mathrm{d}\rho/\mathrm{d}t$(同上)。

  • "VelocityGradient" (Matd):速度梯度 $\nabla \mathbf{v}$(常用于后处理/验证,见 continuum_integration.hpp)。

  • "VorticityInner" (AngularVecd):涡量/旋度相关量(见 viscous_dynamics.cpp)。

  • "ViscousForce" (Vecd):黏性力(见 viscous_dynamics.hpp)。

  • (表面张力相关)"ColorGradient" (Vecd), "SurfaceTensionStress" (Matd), "SurfaceTensionForce" (Vecd), "NormDirection" (Vecd)(见 surface_tension.cpp 和 surface_tension.hpp)。

  • (非牛顿)"ElasticStress" (Matd), "ElasticStressChangeRate" (Matd), "VariableViscosity" (Real)(见 non_newtonian_dynamics.cpp)。

固体/薄壳(shell/plate/beam)里很常写的

  • "NormalDirection" (Vecd):法向(例如边界/壳体粒子常用)。

  • "DeformationGradient" (Matd):形变梯度 $\mathbf{F}$(见 thin_structure_dynamics.cpp)。

  • "DeformationRate" (Matd):$\dot{\mathbf{F}}$(同上)。

  • "StressPK1OnParticle" (Matd):一阶 Piola-Kirchhoff 应力(见 elastic_dynamics.cpp)。

  • "Rotation", "AngularVelocity", "AngularAcceleration"Vecd):转动相关状态量(薄结构里常见,同上 thin_structure_dynamics)。

  • (曲率相关,正好和你这个算例对应)

    • "1stPrincipleCurvature", "2ndPrincipleCurvature" (Real)

    • "Average1stPrincipleCurvature", "Average2ndPrincipleCurvature" (Real) 这些在薄壳曲率计算/邻域里用到(见 thin_structure_dynamics.cpp)。你当前例子里就在写 "Average1stPrincipleCurvature"(见 channel_flow_shell.cpp)。

“指示器/几何辅助量”(排查自由面、边界层、体部件很有用)

  • "Indicator" (int):自由面/内部粒子指示(见 surface_indication.hpp)。

  • "PositionDivergence" (Real):位置散度类指标(同上)。

  • "SignedDistance", "InitialSignedDistance" (Real):符号距离场及初值(见 general_geometric.cpp)。

  • "DistanceFromWall" (Vecd):到墙距离/方向相关量(见 near_wall_boundary.cpp)。

  • "SmearedSurface", "PreviousSurfaceIndicator" (int):表面涂抹/前一步表面指示(见 surface_indication.cpp)。

Last updated

Was this helpful?