高温氦气物性补全;三通四通能量计算bug修正

This commit is contained in:
ljz committed 2026-09-15 17:57:20 +08:00
1 parent 6fc9afe41d
commit 2b07d996cf
133 files changed
+5230 -253310

No files matched your search

+16 -3
View File
@@ -168,6 +168,8 @@ def _compile_storage_anchored_program(network: SimulationNetwork) -> NativeProgr
state_keys, state_index = [], {}
for c in components:
fields = ("m", "U") if c in chambers else (("v", "x") if c in masses else ())
if c.model_type == "amesim_pnch012" and sum(c.external_volume_rates.values()) != 0:
fields += ("_volume_displacement",)
for field in fields:
key = f"{c.name}.{field}"
state_index[key] = len(state_keys)
@@ -258,9 +260,15 @@ def _compile_storage_anchored_program(network: SimulationNetwork) -> NativeProgr
rate = "0.0"
if c.model_type == "amesim_pnch012":
volume += "".join(" + " + get(p, "volume") for p in connected)
if key(c, '_volume_displacement') in state_index:
index = si(c, '_volume_displacement')
init.append(f"y[{index}] = 0.0;")
lines.append(f"dy[{index}] = {_number(sum(c.external_volume_rates.values()))};")
volume += f" + y[{index}]"
put(c, "vol", f"fmax({_number(c.cvol0 / 100)}, {volume})")
rate = _number(sum(c.external_volume_rates.values())) + "".join(" + " + get(p, "volume_flow") for p in connected)
put(c, "dvol", f"{get(c, 'vol')} <= {_number(c.cvol0 / 100)} ? 0.0 : ({rate})")
limit = _number(c.cvol0 / 100)
put(c, "dvol", f"({volume}) < {limit} || (({volume}) <= {limit} && ({rate}) < 0) ? 0.0 : ({rate})")
volume, rate = get(c, "vol"), get(c, "dvol")
volume_expressions[c.name] = (volume, rate)
# p0/T0 refer to the complete connected volume at the initial positions.
@@ -379,19 +387,24 @@ def _compile_storage_anchored_program(network: SimulationNetwork) -> NativeProgr
f"const double model_atol[NSTATES] = {{{','.join(map(state_absolute_tolerance, state_keys))}}};",
"const char *const model_output_keys[NOUTPUTS] = {" + ",".join(json.dumps(v.key, ensure_ascii=True) for v in variables) + "};",
"int model_init(double *y) {", *init, "return 1; }",
"int model_eval(double t, const double *y, double *dy, double *w) {", "(void)t;",
"static int model_eval_internal(double t, const double *y, double *dy, double *w, NativePropertyTemperatures *temperatures) {", "(void)t;",
f"NativePropertyState property_states[{min(256,max(16,4*len(components)))}];",
"NativePropertyCache property_cache, *properties=&property_cache;",
"native_properties_init(properties,property_states,sizeof(property_states)/sizeof(property_states[0]));", *lines,
"native_properties_init(properties,property_states,sizeof(property_states)/sizeof(property_states[0]));",
"properties->temperatures=temperatures;", *lines,
"for (int i=0;i<NSTATES;i++) if (!isfinite(dy[i])) return 0;",
"for (int i=0;i<NOUTPUTS;i++) if (!isfinite(w[i])) return 0;",
"return 1; }",
"int model_eval(double t,const double *y,double *dy,double *w) {return model_eval_internal(t,y,dy,w,NULL);}",
"int model_property_temperatures(double t,const double *y,NativePropertyTemperatures *temperatures) {double dy[NSTATES],w[NOUTPUTS];return model_eval_internal(t,y,dy,w,temperatures);}",
"double model_next_break(double t, double end) { (void)t; double result=end;", *next_event,
"return result; }", "",
])
header = f'''#ifndef GENERATED_NATIVE_MODEL_H
#define GENERATED_NATIVE_MODEL_H
#include "kernels.h"
#define MODEL_PROPERTY_TEMPERATURES 1
int model_property_temperatures(double t,const double *y,NativePropertyTemperatures *temperatures);
#define NSTATES {len(state_keys)}
#define NOUTPUTS {len(variables)}
#define NSTOPS {len(stops)}