Chapter 3 · Resolver implementation

第 3 章 · 求解器实现

Three-stage resolver: theory to simulation code

三阶段求解:从理论到仿真代码

Three-stage status

三个阶段的状态

Stage1: CLOSED_LOOSENED. Stage2: STAGE2_LOOSENED_CLOSED. Both retain accepted waivers. Stage3: STAGE3_ENGINEERING_DOCUMENTATION_COMPLETE. Strict acceptance: false. All 18 objective values remain null. Cannot compute maximum: missing completed observers, feasible maximizing designs, refinement and global certificates. Candidate030 reaches 0.43 ns in 43 accepted steps. Its transferred meta.json belongs to candidate028.

阶段一:CLOSED_LOOSENED。阶段二:STAGE2_LOOSENED_CLOSED。两阶段保留已接受豁免。阶段三:STAGE3_ENGINEERING_DOCUMENTATION_COMPLETE。严格验收:false。全部 18 项目标值仍为 null。无法计算最大值:缺少完整观测、可行最优设计、细化与全局证书。candidate030 经 43 个接受步到达 0.43 ns。转移的 meta.json 属于 candidate028。

1. Physical problem and prerequisites

1. 物理问题与准备

Model activated PFC in water near a rigid wall. Compute phase conversion, heat transfer, compressible flow and interface motion. The domain is axisymmetric. Basilisk x maps to axial z; y maps to radial r. Positive z points away from the wall at z=0. Positive r points away from the axis. Initial velocity is zero and PFC is liquid. Initial pressure is 101325 Pa. Temperature and inventory are specified inputs. This pilot uses closed slip far boundaries. Nonreflecting production boundaries remain unqualified. Read Sections 2–7 before compiling with Basilisk C and qcc.

模拟刚性壁面附近水中的受激 PFC。计算相变、传热、可压缩流动及界面运动。采用轴对称域。Basilisk 的 x 对应轴向 z,y 对应径向 r。正 z 离开 z=0 的壁面。正 r 离开对称轴。初始速度为零,PFC 为液体。初始压力为 101325 Pa。温度与物质总量为给定输入。该试算采用封闭滑移远边界。非反射生产边界尚未合格。使用 Basilisk C 和 qcc 编译前,阅读第 2–7 节。

2. State variables and geometry

2. 状态变量与几何

M_PFC and M_water store partial mass densities in kg/m³. E_PFC and E_water store total energy densities in J/m³. Shared momentum density q has units kg/(m²·s). Z_PFC stores PFC vapour mass density in kg/m³. f_PFC and a_water are volume fractions. Recover specific internal energy before calling the EOS. Physical integrals require the axisymmetric metric. Basilisk dv() includes radial weighting. Multiply by 2π once. Adjust radius to match the fixed inventory on the mesh.

M_PFC、M_water 保存部分质量密度,单位 kg/m³。E_PFC、E_water 保存总能量密度,单位 J/m³。共享动量密度 q 的单位为 kg/(m²·s)。Z_PFC 保存 PFC 蒸汽质量密度,单位 kg/m³。f_PFC、a_water 是体积分数。调用状态方程前先恢复比内能。物理积分需要轴对称度量。Basilisk 的 dv() 已含径向权重。2π 乘一次。调整半径以匹配网格上的固定物质总量。

Symbols before Eq. 1: V: physical cell volume (m³); dv(): Basilisk metric cell volume (m³ per radian); π: circle constant; m: cell mass (kg); M: partial mass density (kg/m³).

公式 1 前的符号:V:物理单元体积(m³);dv():含度量单元体积(每弧度 m³);π:圆周率;m:单元质量(kg);M:部分质量密度(kg/m³)。

(1) Definition. Multiplication gives kg/m³ × m³ = kg.

(1) 定义。kg/m³ × m³ = kg。

Symbols before Eq. 2: ξ: vapour mass fraction (dimensionless); Z: vapour mass density (kg/m³); M: PFC mass density >0 (kg/m³); e: internal energy (J/kg); E: total energy density (J/m³); u: velocity (m/s); |u|: Euclidean speed.

公式 2 前的符号:ξ:蒸汽质量分数(无量纲);Z:蒸汽质量密度(kg/m³);M:PFC 质量密度,>0(kg/m³);e:比内能(J/kg);E:总能量密度(J/m³);u:速度(m/s);|u|:欧氏速率。

(2) Subtract kinetic energy from total specific energy. Vacuum requires separate handling.

(2) 从比总能中减去比动能。真空需单独处理。

3. Thermodynamics and conservative evolution

3. 热力学与守恒演化

Use the bundled material bridge and thermodynamic coefficients. One potential determines water pressure, entropy and temperature. PFC inversion enforces common pressure, mixture volume and mixture energy. Retain branch selection and admissibility checks. Constant sound speed, Tait water or ideal gas would change this closure. The balances below describe the continuum model. Native split operators supply the discrete closure. Material exchange sources must cancel. Check geometry and energy closure together.

使用随附材料桥接代码和热力学系数。同一势函数确定水的压力、熵和温度。PFC 反演满足共同压力、混合体积和混合能量约束。保留分支选择与可接受性检查。常声速、Tait 水或理想气体会改变该闭合。下式描述连续模型。原生分裂算子提供离散闭合。材料交换源必须抵消。几何与能量闭合共同检查。

Symbols before Eq. 3: ρ: total density (kg/m³); u: velocity (m/s); t: time (s); ∂t: time derivative; ∇·: spatial divergence (1/m); ⊗: tensor product; I: dimensionless identity tensor; p: pressure (Pa); τ: viscous stress (Pa); fσ: capillary force density (N/m³).

公式 3 前的符号:ρ:总密度(kg/m³);u:速度(m/s);t:时间(s);∂t:时间导数;∇·:空间散度(1/m);⊗:张量积;I:无量纲单位张量;p:压力(Pa);τ:黏性应力(Pa);fσ:毛细力密度(N/m³)。

(3) Mass and momentum laws. Momentum terms have units N/m³. Axisymmetric divergence includes radial metric terms.

(3) 质量与动量定律。动量各项单位均为 N/m³。轴对称散度含径向度量项。

Symbols before Eq. 4: v: target PFC specific volume (m³/kg); e: target internal energy (J/kg); ξ: vapour mass fraction [0,1]; subscripts L,V: liquid,vapour; phase vL,vV: specific volumes (m³/kg); eL,eV: phase internal energies (J/kg); pL,pV: phase pressures (Pa).

公式 4 前的符号:v:PFC 目标比体积(m³/kg);e:目标比内能(J/kg);ξ:蒸汽质量分数 [0,1];下标 L,V:液相、汽相;vL,vV:相比体积(m³/kg);eL,eV:相比内能(J/kg);pL,pV:相压力(Pa)。

(4) Adopted local equilibrium inverse constraints. The native Newton solve also enforces branch admissibility. ξ=0 and ξ=1 recover pure-phase mixtures.

(4) 采用的局部平衡反演约束。原生牛顿求解还检查分支可接受性。ξ=0、1 恢复纯相。

Symbols before Eq. 5: A: liquid-minus-vapour specific Gibbs energy (J/kg); gL,gV: phase specific Gibbs energies (J/kg); T: absolute temperature >0 (K); ξdot: time rate of vapour fraction (1/s); sdot: reaction specific entropy rate (J/(kg·K·s)); dot: time derivative.

公式 5 前的符号:A:液相减汽相比 Gibbs 能(J/kg);gL,gV:相比 Gibbs 能(J/kg);T:绝对温度 >0(K);ξdot:蒸汽质量分数变化率(1/s);sdot:反应比熵变化率(J/(kg·K·s));上点:时间导数。

(5) Model admissibility test. The implemented mobility, birth and spinodal terms remain in pfc_reaction.h. αc=0 does not disable every evaporation mechanism.

(5) 模型可接受性检查。具体迁移率、成核与自旋分解项保留于 pfc_reaction.h。αc=0 并不关闭所有蒸发机制。

4. Operator splitting and rollback

4. 算子分裂与回滚

Save all fields, geometry and diagnostic counters before each trial. Choose the smallest remaining-time, maximum-step and acoustic CFL limit. Apply half steps for phase, interface heat, water conduction and viscosity. Reconstruct faces and advect conserved fields. Apply pressure and capillarity, then reverse the half-step sequence. Rebuild geometry after each modifying operator. Advance time and iteration after success. On refusal, restore every saved quantity and check restoration. Candidate018–030 interventions remain documented numerical assumptions. Retain soft-accepted heat diagnostics. Second-order convergence is not established. Missing: refinement evidence.

每次试算前保存全部场、几何及诊断计数。时间步取剩余时间、最大步长和声学 CFL 限值中的最小值。依次执行半步相变、界面传热、水导热及黏性。重建面速度,输运守恒量。施加压力与毛细作用,再反向执行半步序列。每个修改算子后重建几何。成功后更新时间和步数。拒绝时恢复全部保存量,再检查恢复。candidate018–030 干预保留为已记录数值假设。保留软接受传热诊断。二阶收敛尚未建立。缺少:细化证据。

Read the includes, fields and boundary declarations first.

先阅读头文件、场和边界声明。

axisymmetric_activation_core_candidate030.c, lines 1–95

   1  #include "grid/quadtree.h"
   2  #include "axi.h"
   3  #include "axisymmetric_coupled_core_candidate019.h"
   4  #include "axisymmetric_transaction.h"
   5  #include "axisymmetric_snapshot_properties.h"
   6  #include "axisymmetric_transport_collector_candidate020.h"
   7  #include <time.h>
   8  /* CANDIDATE030 STAGE2_LOOSENED: retains 018-029; heat integrator status=11 energy/entropy gate soft-pass */
   9  /* All shared AND auxiliary momentum boundary conditions are explicit.
  10   * z=0 receiving wall: no-slip; r=0 axis: odd radial/even axial velocity.
  11   * Distant faces are closed slip solely for this short assembly diagnostic.
  12   * Full nonreflecting/radiative boundaries and their ledgers remain pending. */
  13  q.x[left]=dirichlet(0);
  14  q.y[left]=dirichlet(0);
  15  q_PFC.x[left]=dirichlet(0);
  16  q_PFC.y[left]=dirichlet(0);
  17  q_water.x[left]=dirichlet(0);
  18  q_water.y[left]=dirichlet(0);
  19  q_adv.x[left]=dirichlet(0);
  20  q_adv.y[left]=dirichlet(0);
  21  q.x[right]=dirichlet(0);
  22  q.y[right]=neumann(0);
  23  q_PFC.x[right]=dirichlet(0);
  24  q_PFC.y[right]=neumann(0);
  25  q_water.x[right]=dirichlet(0);
  26  q_water.y[right]=neumann(0);
  27  q_adv.x[right]=dirichlet(0);
  28  q_adv.y[right]=neumann(0);
  29  q.y[bottom]=dirichlet(0);
  30  q.x[bottom]=neumann(0);
  31  q_PFC.y[bottom]=dirichlet(0);
  32  q_PFC.x[bottom]=neumann(0);
  33  q_water.y[bottom]=dirichlet(0);
  34  q_water.x[bottom]=neumann(0);
  35  q_adv.y[bottom]=dirichlet(0);
  36  q_adv.x[bottom]=neumann(0);
  37  q.y[top]=dirichlet(0);
  38  q.x[top]=neumann(0);
  39  q_PFC.y[top]=dirichlet(0);
  40  q_PFC.x[top]=neumann(0);
  41  q_water.y[top]=dirichlet(0);
  42  q_water.x[top]=neumann(0);
  43  q_adv.y[top]=dirichlet(0);
  44  q_adv.x[top]=neumann(0);
  45  uf.x[left]=dirichlet(0);
  46  uf.x[right]=dirichlet(0);
  47  uf.y[bottom]=dirichlet(0);
  48  uf.y[top]=dirichlet(0);
  49  
  50  static void core_history(FILE * stream,const ClosureAxisSnapshotCell * properties,
  51      const char * stage,double time,int steps) {
  52    double mw,mf,E,S,minimum,error,uncovered;
  53    closure_flow_integrals(&mw,&mf,&E,&S,&minimum,&error,&uncovered);
  54    S=0.;foreach(serial) {
  55      const ClosureAxisSnapshotCell * s=properties+(int)leaf_index[];
  56      S+=(M_water[]*s->water.s+M_PFC[]*s->pfc.s)*dv();
  57    }
  58    fprintf(stream,"%s,%.17g,%d,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%.17g,%lu,%lu,%lu,%lu,%.17g,%.21Lg,%.21Lg,%.21Lg,%.21Lg,%.21Lg,%.21Lg,%.21Lg,%.21Lg,%lu,%lu,%lu\n",
  59      stage,time,steps,2.*pi*mw,2.*pi*mf,2.*pi*E,2.*pi*S,axis_statistics.area_m2,
  60      minimum,error,2.*pi*uncovered,geometric_statistics.final_pressure_residual,
  61      axis_statistics.phase_entropy_HKS_J_K,axis_statistics.phase_entropy_bulk_J_K,
  62      axis_statistics.heat_entropy_J_K,axis_statistics.capillary_work_J,
  63      axis_statistics.heat_energy_defect_J,axis_statistics.geometry_water_volume_defect_m3,
  64      geometric_statistics.work_defect,axis_statistics.phase_evaluations,
  65      axis_statistics.spinodal_warm,axis_statistics.spinodal_global,axis_statistics.heat_evaluations,
  66      axis_statistics.mechanical_entropy_J_K+geometric_statistics.mechanical_entropy,
  67      axis_statistics.water_Fourier_entropy_J_K,axis_statistics.viscous_entropy_J_K,
  68      axis_statistics.water_Fourier_boundary_energy_out_J,axis_statistics.viscous_boundary_energy_out_J,
  69      axis_statistics.water_Fourier_energy_defect_J,axis_statistics.viscous_intrinsic_work_defect_J,
  70      axis_statistics.converted_transport_energy_roundoff_J,axis_statistics.converted_transport_momentum_roundoff_kg_m_s,
  71      axis_statistics.water_Fourier_faces,axis_statistics.viscous_faces,axis_statistics.water_Fourier_iterations);
  72    fflush(stream);
  73    fprintf(stderr,"CORE STAGE PROFILE: stage=%s time=%.17g steps=%d cpu_process_seconds=%.9g raw_queries=%lu inverse_iterations=%lu inverse_fallbacks=%lu global_phase_queries=%lu phase_evaluations=%lu heat_evaluations=%lu\n",
  74      stage,time,steps,(double)clock()/CLOCKS_PER_SEC,geometric_statistics.raw_queries,
  75      geometric_statistics.inverse_iterations,geometric_statistics.inverse_fallbacks,
  76      geometric_statistics.global_phase_queries,axis_statistics.phase_evaluations,
  77      axis_statistics.heat_evaluations);
  78    fprintf(stderr,"CORE READONLY PROFILE: W_calls=%lu F_calls=%lu W_only=%lu F_only=%lu mixed=%lu W_CPU_s=%.9g F_CPU_s=%.9g\n",
  79      axis_snapshot_water_calls,axis_snapshot_PFC_calls,axis_snapshot_W_only,axis_snapshot_F_only,
  80      axis_snapshot_mixed,axis_snapshot_water_cpu,axis_snapshot_PFC_cpu);
  81  }
  82  
  83  /* Selected conditional TS transport integration for candidate011. Each call
  84   * is a physical source half-step; the surrounding whole-macrostep transaction
  85   * restores both fields and axis_statistics if any later operation refuses. */
  86  static int core_transport_candidate011(ClosureAxisSnapshotCell * properties,
  87      double interval,double length,int finest,int viscosity) {
  88    ClosureAxisTransportCommitStats report;
  89    int status=closure_axis_transport_source(interval,length,finest,viscosity,properties,&report);
  90    if(status)return status;
  91    if(viscosity) {
  92      axis_statistics.viscous_entropy_J_K+=report.physical.viscous_entropy_J_K;
  93      axis_statistics.viscous_boundary_energy_out_J+=report.physical.viscous_energy_boundary_out_J;
  94      axis_statistics.viscous_intrinsic_work_defect_J+=report.physical.viscous_intrinsic_work_defect_J;
  95      axis_statistics.converted_transport_energy_roundoff_J+=report.converted_energy_roundoff_J;

Trace initialization, split operators, acceptance and refusal directly. The numbered source is authoritative.

直接跟踪初始化、分裂算子、接受与拒绝。带行号源代码为权威记录。

axisymmetric_activation_core_candidate030.c, lines 190–343

 190    }
 191    if(!(fabs(mass_error)<1.e-6))return 5;
 192    foreach() {
 193      a_water[]=1.-f_PFC[];M_water[]=a_water[]*water.rho;M_PFC[]=f_PFC[]*pfc.rho;
 194      E_water[]=M_water[]*water.e;E_PFC[]=M_PFC[]*pfc.e;Z_PFC[]=0.;
 195  q.x[]=q.y[]=0.;
 196      closure_store_cell_cache(point,initial);
 197    }
 198    boundary({f_PFC,a_water,M_water,M_PFC,E_water,E_PFC,Z_PFC,q,
 199      rhoL_cache,rhoV_cache,p_cache,T_cache,validL_cache,validV_cache});
 200    if(closure_equilibrate_fields(1,p) || closure_axisymmetric_state_guard(p) ||
 201       closure_axisymmetric_geometry(geometry))return 6;
 202    closure_save_advected_targets();
 203    foreach() {
 204      p_trial[]=p[];p_EOS[]=p[];
 205      foreach_dimension(){q_PFC.x[]=0.;q_water.x[]=0.;}
 206    }
 207    boundary({p_trial,p_EOS,q_PFC,q_water});
 208    closure_advective_face_velocity();
 209    FILE * history=fopen("history.csv","w"),* fields=fopen("fields.csv","w");
 210    if(!history || !fields)return 7;
 211    fprintf(stderr,"CANDIDATE011 COMPONENT ONLY: selected viscous/Fourier half-steps enabled; full production admission absent; physicalV=2pi*dv; leaves=%lu initial_radius=%.17g activated_nominal_radius=%.17g mass_relative_error=%.17g\n",
 212      axis_leaf_count,chosen,radius,mass_error);
 213    fprintf(history,"stage,time_s,steps,water_mass_kg,PFC_mass_kg,bulk_energy_J,entropy_J_K,area_m2,min_fraction,fraction_sum_error,uncovered_mass_kg,pressure_residual,phase_HKS_entropy_J_K,phase_bulk_entropy_J_K,interface_heat_entropy_J_K,capillary_work_J,interface_heat_energy_defect_J,water_geometry_volume_defect_m3,pressure_work_defect_J,phase_evaluations,spinodal_warm,spinodal_global,heat_evaluations,mechanical_entropy_J_K,water_Fourier_entropy_J_K,viscous_entropy_J_K,water_Fourier_boundary_energy_out_J,viscous_boundary_energy_out_J,water_Fourier_energy_defect_J,viscous_intrinsic_work_defect_J,converted_transport_energy_roundoff_J,converted_transport_momentum_roundoff_kg_m_s,water_Fourier_edges,viscous_faces,water_Fourier_iterations\n");
 214    fprintf(fields,"stage,time_s,level,z_m,r_m,Delta_m,volume_m3,a_F,a_W,M_F_kg_m3,M_W_kg_m3,E_F_J_m3,E_W_J_m3,u_z_m_s,u_r_m_s,m_F_kg,m_W_kg,E_F_J,E_W_J,xi,p_Pa,T_W_K,T_F_K,s_W_J_kg_K,s_F_J_kg_K,e_W_J_kg,e_F_J_kg,p_F_Pa,steps,leaf_id,area_m2,PFC_raw_volume_m3,water_raw_volume_m3,PFC_geometry_volume_m3,water_geometry_volume_m3,distance_water_m,water_conductance_W_K,water_geometry_volume_defect_m3,PFC_geometry_volume_defect_m3,has_interface,rounded_primary_complement,p_W_actual_Pa,water_caloric_status,PFC_caloric_status");
 215    for(int field=0;field<transaction.fields;field++)fprintf(fields,",rollback_field_%d",field);
 216    fputc('\n',fields);
 217    if(core_snapshot(history,fields,geometry,properties,"initial",0.,0))return 17;
 218    double time=0.,macrostep_start_time=0.;int iteration=0,status=0,macrostep_start_iteration=0;
 219    while(time<end_time) {
 220      macrostep_start_time=time;macrostep_start_iteration=iteration;
 221      if(closure_axisymmetric_transaction_capture(&transaction,geometry)){status=18;break;}
 222      double step=fmin(end_time-time,fmin(maximum_step,closure_acoustic_timestep(courant)));
 223      if(!(step>0. && isfinite(step))){status=8;break;}
 224      if(closure_axisymmetric_phase(.5*step,axis_statistics.area_m2) ||
 225         closure_axisymmetric_geometry(geometry)){status=9;break;}
 226      if(core_snapshot(history,fields,geometry,properties,"phase_first",time,iteration)){status=17;break;}
 227      if(diagnostic_refusal==1){status=91;break;}
 228      if(with_heat && (closure_axisymmetric_heat(.5*step,geometry) ||
 229         closure_axisymmetric_geometry(geometry))){status=10;break;}
 230      if(core_snapshot(history,fields,geometry,properties,"thermal_first",time,iteration)){status=17;break;}
 231      if(diagnostic_refusal==2){status=92;break;}
 232      if(core_transport_candidate011(properties,.5*step,length,fine,0) ||
 233         closure_axisymmetric_geometry(geometry)){status=20;break;}
 234      if(core_snapshot(history,fields,geometry,properties,"water_Fourier_first",time,iteration)){status=17;break;}
 235      {
 236        int transport_status=core_transport_candidate011(properties,.5*step,length,fine,1);
 237        int geometry_status=transport_status?0:closure_axisymmetric_geometry(geometry);
 238        if(transport_status || geometry_status){
 239          fprintf(stderr,"AXI status=21 detail transport=%d geometry=%d\n",transport_status,geometry_status);
 240          status=21;break;
 241        }
 242      }
 243      if(core_snapshot(history,fields,geometry,properties,"viscous_first",time,iteration)){status=17;break;}
 244      fprintf(stderr,"DIAG before face_velocity t=%.17g steps=%d\n",time,iteration);fflush(stderr);
 245      closure_advective_face_velocity();
 246      fprintf(stderr,"DIAG after face_velocity before advect\n");fflush(stderr);
 247      if(closure_advect_conserved(step,iteration)){status=11;break;}
 248      fprintf(stderr,"DIAG after advect before geometry\n");fflush(stderr);
 249      if(closure_axisymmetric_geometry(geometry)){status=16;break;}
 250      fprintf(stderr,"DIAG after geometry before advected snapshot\n");fflush(stderr);
 251      if(core_snapshot(history,fields,geometry,properties,"advected",time,iteration)){status=17;break;}
 252      if(diagnostic_refusal==3){status=93;break;}
 253      if(closure_axisymmetric_pressure_capillary(step) ||
 254         closure_axisymmetric_geometry(geometry)){status=12;break;}
 255      if(core_snapshot(history,fields,geometry,properties,"pressure_capillary",time+step,iteration)){status=17;break;}
 256      if(diagnostic_refusal==4){status=94;break;}
 257      if(core_transport_candidate011(properties,.5*step,length,fine,1) ||
 258         closure_axisymmetric_geometry(geometry)){status=22;break;}
 259      if(core_snapshot(history,fields,geometry,properties,"viscous_last",time+step,iteration)){status=17;break;}
 260      if(core_transport_candidate011(properties,.5*step,length,fine,0) ||
 261         closure_axisymmetric_geometry(geometry)){status=23;break;}
 262      if(core_snapshot(history,fields,geometry,properties,"water_Fourier_last",time+step,iteration)){status=17;break;}
 263      if(with_heat && (closure_axisymmetric_heat(.5*step,geometry) ||
 264         closure_axisymmetric_geometry(geometry))){status=13;break;}
 265      if(core_snapshot(history,fields,geometry,properties,"thermal_last",time+step,iteration)){status=17;break;}
 266      if(diagnostic_refusal==5){status=95;break;}
 267      if(closure_axisymmetric_phase(.5*step,axis_statistics.area_m2) ||
 268         closure_axisymmetric_geometry(geometry)){status=14;break;}
 269      if(diagnostic_refusal==6){status=96;break;}
 270      time+=step;iteration++;if(core_snapshot(history,fields,geometry,properties,"accepted",time,iteration)){status=17;break;}
 271      if(iteration>100000){status=15;break;}
 272    }
 273    if(status && transaction.valid) {
 274      core_snapshot(history,fields,geometry,properties,"rejected_trial",time,iteration);
 275      fprintf(stderr,"CORE REJECTED TRIAL: status=%d raw_queries=%lu phase_evaluations=%lu heat_evaluations=%lu before_macrostep_restore\n",
 276        status,geometric_statistics.raw_queries,axis_statistics.phase_evaluations,axis_statistics.heat_evaluations);
 277      int restored=closure_axisymmetric_transaction_restore(&transaction,geometry);
 278      if(!restored)restored=closure_axisymmetric_transaction_matches(&transaction,geometry);
 279      fprintf(stderr,"CORE MACROSTEP RESTORE: status=%d exact_all_scalar_geometry_statistics=%d fields=%d leaves=%lu\n",
 280        restored,restored==0,transaction.fields,transaction.leaf_count);
 281      if(restored){fprintf(stderr,"AXI global restore failed status=%d\n",restored);status=19;}
 282      else {time=macrostep_start_time;iteration=macrostep_start_iteration;}
 283      core_snapshot(history,fields,geometry,properties,"failed_rolled_back",time,iteration);
 284    } else core_snapshot(history,fields,geometry,properties,status?"failed":"final",time,iteration);
 285    fprintf(stderr,"CORE PROFILE: cpu_seconds=%.9g raw_queries=%lu inverse_iterations=%lu inverse_fallbacks=%lu global_phase_queries=%lu phase_evaluations=%lu heat_evaluations=%lu physical_domain_status=%d\n",
 286      (double)(clock()-cpu_started)/CLOCKS_PER_SEC,geometric_statistics.raw_queries,
 287      geometric_statistics.inverse_iterations,geometric_statistics.inverse_fallbacks,
 288      geometric_statistics.global_phase_queries,axis_statistics.phase_evaluations,
 289      axis_statistics.heat_evaluations,status);
 290    fclose(history);fclose(fields);free(geometry);free(properties);closure_axisymmetric_transaction_free(&transaction);
 291    closure_coupled_phase_caches_free(axis_spinodal_caches);
 292    free(f_PFC.closure_tracers);f_PFC.closure_tracers=NULL;closure_bridge_cleanup();return status;
 293  }

5. Reproduce the implementation

5. 复现实现

The evidence folder contains candidate030 dependencies and the water table. native/basilisk.tar.gz contains the frozen compiler source. Use Linux/WSL with gcc, GNU make and tar. Copy this folder there and run native/build.sh. The script creates a fresh output directory. qcc requires paths without spaces. This recipe compiles an executable. It starts no campaign. Inspect warnings and record the executable hash. Cross-platform build certification remains incomplete.

evidence 文件夹含 candidate030 依赖及水表。native/basilisk.tar.gz 含冻结编译器源。使用带 gcc、GNU make、tar 的 Linux/WSL。复制本文件夹后运行 native/build.sh。脚本创建新的输出目录。qcc 路径不得含空格。该配方编译可执行文件,不启动计算活动。检查警告并记录可执行文件哈希。跨平台编译认证尚未完成。

native/build.sh · examples/ceilings.py

Command-line input contract

命令行输入约定

Inputs, in order: species; water table; activated temperature (K); PFC mass (kg); nominal radius (m); domain length (m); center height (m); base level; fine level; refinement radius (m); accommodation coefficient; end time (s); maximum step (s); Courant number; heat flag; optional refusal diagnostic. Center height is a length, while γ is dimensionless. Require height>radius and height+radius

依次输入:物种;水表;受激温度(K);PFC 质量(kg);名义半径(m);域长度(m);中心高度(m);基础层级;细化层级;细化半径(m);调节系数;结束时间(s);最大步长(s);Courant 数;传热开关;可选拒绝诊断。中心高度是长度,γ 无量纲。要求 height>radius 且 height+radius

6. Output readers, events and objectives

6. 输出读取、事件和目标

Read the raw-reader contract before parsing snapshots. Group cells by stage and time. Exclude rejected_trial and failed_rolled_back from accepted trajectories. Keep distinct times and intermediate operators separate. Recompute mass as density times physical volume. Preserve leaf IDs and units. A complete event requires expansion, contraction and collapse. The 0.43 ns trace lacks that cycle. Selected whole-water masses are {1,3,10,30,100} pg. Let u_z denote axial water velocity (m/s). Let w denote directed water speed toward z=0 (m/s). Define w=-u_z=-u.x in Basilisk. Positive w points toward the wall. Sort accepted water cells by w and accumulate water mass. This gives mass-selected upper-tail diagnostics. Define a reconstruction rule for partial cells. Integrate gauge pressure over disk radii {2,10} µm. Use averaging windows {2,20} ns. Cell-center peaks are different observables. Missing samples remain null.

解析快照前阅读原始读取约定。按 stage 和时间分组。接受轨迹排除 rejected_trial、failed_rolled_back。不同时刻与中间算子分别保留。质量按密度乘物理体积重算。保留单元 ID 和单位。完整事件需要扩张、收缩与塌缩。0.43 ns 轨迹缺少该周期。选择的全水质量为 {1,3,10,30,100} pg。u_z 表示水的轴向速度(m/s)。w 表示水指向 z=0 的定向速率(m/s)。在 Basilisk 中,w=-u_z=-u.x。w 为正时指向壁面。按 w 排序接受水单元,再累计水质量。由此得到质量选择的上尾诊断。部分单元需指定重建规则。表压积分采用半径 {2,10} µm 的圆盘及 {2,20} ns 平均窗。单元中心峰值是不同观测量。缺失样本保持 null。

Symbols before Eq. 6: pbar: disk/window mean gauge pressure (Pa); p(r,t): wall pressure (Pa); p0: reference pressure (Pa); a: disk radius >0 (m); Δt: window duration >0 (s); t0: window start (s); r: radius (m); t: time (s); integrals: area/time integration; π: dimensionless circle constant.

公式 6 前的符号:pbar:圆盘及时间窗平均表压(Pa);p(r,t):壁面压力(Pa);p0:参考压力(Pa);a:圆盘半径 >0(m);Δt:时间窗 >0(s);t0:开始时间(s);r:半径(m);t:时间(s);积分:面积与时间积分;π:无量纲圆周率。

(6) Divide pressure-area-time integral by disk area and duration. Constant gauge pressure returns itself. Native complete wall samples are missing.

(6) 将压力-面积-时间积分除以面积及时间。恒定表压会返回自身。缺少完整原生壁面样本。

7. Conditional energy ceilings and the quoted example

7. 条件能量上限与引用示例

Assume positive selected water mass and a consistent work budget. Other energy terms must be nonnegative. No later useful energy enters. The resulting bounds are conditional. Attaining them requires separate trajectory evidence. The sealed report gives available work for a 6 µm droplet. PFP: 2.722572407203039 nJ. PFH: 4.622122564638143 nJ. A separate example assigns 5 nJ to a uniform water jet. Its radius is 3 µm; length is 50 µm. Density is 1000 kg/m³; sound speed is 1500 m/s. Incoming speed is 84.10 m/s. Estimated contact pressure is 63.08–126.16 MPa. These are illustrative inputs and contact estimates. A candidate030 maximum is not established.

假定所选水质量为正,且功预算自洽。其他能量项必须非负,后续无有效能量输入。所得界限具有条件性。达到界限需要独立轨迹证据。封存报告给出 6 µm 液滴的可用功。PFP:2.722572407203039 nJ。PFH:4.622122564638143 nJ。另一个示例为均匀水射流指定 5 nJ。半径为 3 µm,长度为 50 µm。密度为 1000 kg/m³,声速为 1500 m/s。入射速率为 84.10 m/s。接触压力估计为 63.08–126.16 MPa。这些是示例输入及接触估计。candidate030 最大值尚未建立。

Symbols before Eq. 7: W: available work ≥0 (J); K: selected-water kinetic energy ≥0 (J); m: selected water mass >0 (kg); U: selected wall-directed speed lower threshold ≥0 (m/s); square root: nonnegative branch.

公式 7 前的符号:W:可用功 ≥0(J);K:所选水的动能 ≥0(J);m:水质量 >0(kg);U:所选壁面定向速率下阈值 ≥0(m/s);平方根:非负分支。

(7) Each selected parcel has a wall-directed component at least U. Total speed exceeds that nonnegative component. Sum their kinetic energies. Divide by positive m/2; take the nonnegative root. J/kg=m²/s². W=0 gives U=0; m→0 makes the bound diverge. A finite energy budget alone supplies no mass-free speed maximum.

(7) 每个所选流体元的壁面定向分量至少为 U。总速率不小于该非负分量。累加动能,除以正数 m/2,再取非负平方根。J/kg=m²/s²。W=0 得 U=0;m→0 时界限发散。有限能量预算不能单独给出无质量约束的速率最大值。

Symbols before Eq. 8: m: uniform jet mass (kg); ρ: water density >0 (kg/m³); a: jet radius >0 (m); L: jet length >0 (m); W: jet kinetic energy ≥0 (J); U: incoming jet speed ≥0 (m/s); π: circle constant.

公式 8 前的符号:m:均匀射流质量(kg);ρ:水密度 >0(kg/m³);a:射流半径 >0(m);L:长度 >0(m);W:射流动能 ≥0(J);U:入射速率 ≥0(m/s);π:圆周率。

(8) Cylinder volume times density; substitute this positive mass into Eq. 7 with all work converted to jet kinetic energy.

(8) 圆柱体积乘密度;将正质量代入公式 7,假定全部功转为射流动能。

Symbols before Eq. 9: Δp: contact gauge pressure (Pa); Z1,Z2: incident/receiver acoustic impedances >0 (kg/(m²·s)); ρ: incident density (kg/m³); c: incident sound speed (m/s); U: incoming speed (m/s); u*: contact velocity (m/s); subscripts 1,2 label media; * labels contact.

公式 9 前的符号:Δp:接触表压(Pa);Z1,Z2:入射及接收介质声阻抗 >0(kg/(m²·s));ρ:入射密度(kg/m³);c:声速(m/s);U:入射速率 ≥0(m/s);u*:接触速度(m/s);下标 1,2 表示介质;* 表示接触。

(9) Linear planar acoustic contact: match pressure and interface velocity. Add Z1u* to both sides, divide by positive Z1+Z2, then substitute. Equal impedance gives ρcU/2; rigid limit gives ρcU. Weak compression and times before lateral release are required. These are contact estimates, not averaged receiver objectives.

(9) 线性平面声学接触:匹配压力与界面速度。两边加 Z1u*,除以正数 Z1+Z2,再代入压力。相等阻抗得 ρcU/2;刚性极限得 ρcU。要求弱压缩且早于横向卸载。它们为接触估计,并非接收圆盘平均目标。

8. Independent checks and unresolved production work

8. 独立检查及未完成生产工作

Run examples/ceilings.py with Python 3. It checks mass, speed ceilings, contact pressure and disk/window averaging. Assertions check scaling and limiting cases. Stage3 passed 239 independent arithmetic comparisons. Keep PASS, FAIL, WAIVED and NOT_RUN distinct. All 18 objectives remain null. Seven Stage2 waivers remain: full cycle; coverage/objectives; radius/γ; PFH route; registered observers; hold-outs/refinement/certification; production C4. The original R_rest membership check failed. Two pre-existing transfer files caused that failure. Scoped protected evidence passed. Read the final answer for historical prediction qualifications. Strict scientific acceptance remains unresolved.

用 Python 3 运行 examples/ceilings.py。它检查质量、速率上限、接触压力及圆盘时间窗平均。断言检查尺度关系与极限。阶段三通过 239 项独立算术比较。PASS、FAIL、WAIVED、NOT_RUN 分别保留。全部 18 项目标仍为 null。保留七项阶段二豁免:完整周期;覆盖/目标;半径/γ;PFH 路径;注册观测;留出/细化/认证;生产 C4。原 R_rest 成员检查失败,原因是两个既有转移文件。限定保护范围内的证据通过。历史预测限定见最终答案。严格科学验收尚未解决。

Sources and further implementation study

来源与进一步实现学习

The sealed report contains the derivation, bibliography and source reconciliation. Read material_bridge.c for EOS calls. Read pfc_conserved_inverse.h for inversion and pfc_reaction.h for kinetics. Read axisymmetric_coupled_core_candidate019.h for geometry and split operators. Read axisymmetric_transaction.h for rollback. Inspect every dependency before changing a closure. Retain rejected diagnostics. Check conservation, positive states, mesh refinement and event continuity. A new production campaign requires a separately frozen scope. This teaching revision preserves the sealed scientific verdict.

封存报告含推导、参考文献及来源核对。material_bridge.c 给出状态方程调用。pfc_conserved_inverse.h 给出反演,pfc_reaction.h 给出动力学。axisymmetric_coupled_core_candidate019.h 给出几何与分裂算子。axisymmetric_transaction.h 给出回滚。修改闭合前检查全部依赖。保留拒绝诊断。检查守恒、正状态、网格细化与事件连续性。新生产活动需要单独冻结范围。本次教学修订保留封存科学判定。

material_bridge.c

pfc_conserved_inverse.h

pfc_reaction.h

axisymmetric_coupled_core_candidate019.h

axisymmetric_transaction.h

Final answer

Engineering PDF

Editable LaTeX

Results ledger

PROGRESS.json · INPUT_MANIFEST.json · Raw reader contract