高温氦气物性补全;三通四通能量计算bug修正
This commit is contained in:
1 parent
6fc9afe41d
commit
2b07d996cf
133 files changed
+5230
-253310
No files matched your search
@@ -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)}
|
||||
|
||||
Reference in new issue
Block a user