59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
with open('crates/fluids/coolprop-sys/src/lib.rs', 'r') as f:
|
|
text = f.read()
|
|
|
|
# Replace CoolProp_PropsSI with PropsSI
|
|
text = text.replace('CoolProp_PropsSI(', 'PropsSI(')
|
|
text = text.replace('CoolProp_Props1SI(', 'Props1SI(')
|
|
text = text.replace('CoolProp_get_global_param_string(', 'get_global_param_string(')
|
|
text = text.replace('CoolProp_get_fluid_param_string(', 'get_fluid_param_string(')
|
|
|
|
# Fix strings to c strings for PropsSI arguments
|
|
text = text.replace(
|
|
'PropsSI(prop, b\'P\' as c_char, p, b\'T\' as c_char, t, fluid_c.as_ptr())',
|
|
'PropsSI(c"D".as_ptr(), c"P".as_ptr(), p, c"T".as_ptr(), t, fluid_c.as_ptr())'
|
|
)
|
|
text = text.replace(
|
|
'PropsSI(prop, b\'P\' as c_char, p, b\'H\' as c_char, h, fluid_c.as_ptr())',
|
|
'PropsSI(c"D".as_ptr(), c"P".as_ptr(), p, c"H".as_ptr(), h, fluid_c.as_ptr())'
|
|
)
|
|
text = text.replace(
|
|
'PropsSI(prop, b\'T\' as c_char, t, b\'Q\' as c_char, q, fluid_c.as_ptr())',
|
|
'PropsSI(c"D".as_ptr(), c"T".as_ptr(), t, c"Q".as_ptr(), q, fluid_c.as_ptr())'
|
|
)
|
|
text = text.replace(
|
|
''' b'P' as c_char,
|
|
p,
|
|
b'Q' as c_char, // Q for quality
|
|
x,
|
|
fluid_c.as_ptr(),''',
|
|
''' c"P".as_ptr(),
|
|
p,
|
|
c"Q".as_ptr(), // Q for quality
|
|
x,
|
|
fluid_c.as_ptr(),'''
|
|
)
|
|
|
|
text = text.replace('let prop = property.as_bytes()[0] as c_char;', 'let prop_c = std::ffi::CString::new(property).unwrap();')
|
|
text = text.replace('c"D".as_ptr()', 'prop_c.as_ptr()')
|
|
|
|
# Fix is_fluid
|
|
text = text.replace(
|
|
'''pub unsafe fn is_fluid_available(fluid: &str) -> bool {
|
|
let fluid_c = CString::new(fluid).unwrap();
|
|
CoolProp_isfluid(fluid_c.as_ptr()) != 0
|
|
}''',
|
|
'''pub unsafe fn is_fluid_available(fluid: &str) -> bool {
|
|
let fluid_c = CString::new(fluid).unwrap();
|
|
# CoolProp C API does not expose isfluid, so we try fetching a property
|
|
let res = Props1SI(fluid_c.as_ptr(), c"Tcrit".as_ptr());
|
|
if res.is_finite() && res != 0.0 { true } else { false }
|
|
}'''
|
|
)
|
|
|
|
text = text.replace('CoolProp_CriticalPoint(fluid_c.as_ptr(), b\'T\' as c_char)', 'Props1SI(fluid_c.as_ptr(), c"Tcrit".as_ptr())')
|
|
text = text.replace('CoolProp_CriticalPoint(fluid_c.as_ptr(), b\'P\' as c_char)', 'Props1SI(fluid_c.as_ptr(), c"pcrit".as_ptr())')
|
|
text = text.replace('CoolProp_CriticalPoint(fluid_c.as_ptr(), b\'D\' as c_char)', 'Props1SI(fluid_c.as_ptr(), c"rhocrit".as_ptr())')
|
|
|
|
with open('crates/fluids/coolprop-sys/src/lib.rs', 'w') as f:
|
|
f.write(text)
|