diff options
Diffstat (limited to 'Simulator/Flowsheet_functions.c')
-rw-r--r-- | Simulator/Flowsheet_functions.c | 547 |
1 files changed, 547 insertions, 0 deletions
diff --git a/Simulator/Flowsheet_functions.c b/Simulator/Flowsheet_functions.c new file mode 100644 index 0000000..26244a8 --- /dev/null +++ b/Simulator/Flowsheet_functions.c @@ -0,0 +1,547 @@ +#include "Flowsheet_functions.h" +#ifdef __cplusplus +extern "C" { +#endif + +#include "Flowsheet_includes.h" + + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_HLiqId(threadData_t *threadData, modelica_real _SH, real_array _VapCp, real_array _HOV, modelica_real _Tc, modelica_real _T) +{ + modelica_real _Hliq; + real_array tmp1; + real_array tmp2; + real_array tmp3; + _tailrecursive: OMC_LABEL_UNUSED + array_alloc_scalar_real_array(&tmp1, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + array_alloc_scalar_real_array(&tmp2, 6, (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 6)))); + array_alloc_scalar_real_array(&tmp3, 6, (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 6)))); + _Hliq = omc_Simulator_Files_ThermodynamicFunctions_HVapId(threadData, _SH, tmp1, tmp2, _Tc, _T) - omc_Simulator_Files_ThermodynamicFunctions_HV(threadData, tmp3, _Tc, _T); + _return: OMC_LABEL_UNUSED + return _Hliq; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_HLiqId(threadData_t *threadData, modelica_metatype _SH, modelica_metatype _VapCp, modelica_metatype _HOV, modelica_metatype _Tc, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real _Hliq; + modelica_metatype out_Hliq; + tmp1 = mmc_unbox_real(_SH); + tmp2 = mmc_unbox_real(_Tc); + tmp3 = mmc_unbox_real(_T); + _Hliq = omc_Simulator_Files_ThermodynamicFunctions_HLiqId(threadData, tmp1, *((base_array_t*)_VapCp), *((base_array_t*)_HOV), tmp2, tmp3); + out_Hliq = mmc_mk_rcon(_Hliq); + return out_Hliq; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_HV(threadData_t *threadData, real_array _HOV, modelica_real _Tc, modelica_real _T) +{ + modelica_real _Hvap; + modelica_real _Tr; + modelica_real tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real tmp4; + modelica_real tmp5; + modelica_real tmp6; + modelica_real tmp7; + modelica_real tmp8; + modelica_real tmp9; + modelica_real tmp10; + _tailrecursive: OMC_LABEL_UNUSED + tmp1 = _Tc; + if (tmp1 == 0) {throwStreamPrint(threadData, "Division by zero %s", "T / Tc");} + _Tr = (_T) / tmp1; + if((_T < _Tc)) + { + tmp2 = _Tr; + tmp3 = _Tr; + tmp4 = 1.0 - _Tr; + tmp5 = (*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 3))) + ((*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 4)))) * (_Tr) + ((*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 5)))) * ((tmp2 * tmp2)) + ((*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 6)))) * ((tmp3 * tmp3 * tmp3)); + if(tmp4 < 0.0 && tmp5 != 0.0) + { + tmp7 = modf(tmp5, &tmp8); + + if(tmp7 > 0.5) + { + tmp7 -= 1.0; + tmp8 += 1.0; + } + else if(tmp7 < -0.5) + { + tmp7 += 1.0; + tmp8 -= 1.0; + } + + if(fabs(tmp7) < 1e-10) + tmp6 = pow(tmp4, tmp8); + else + { + tmp10 = modf(1.0/tmp5, &tmp9); + if(tmp10 > 0.5) + { + tmp10 -= 1.0; + tmp9 += 1.0; + } + else if(tmp10 < -0.5) + { + tmp10 += 1.0; + tmp9 -= 1.0; + } + if(fabs(tmp10) < 1e-10 && ((unsigned long)tmp9 & 1)) + { + tmp6 = -pow(-tmp4, tmp7)*pow(tmp4, tmp8); + } + else + { + throwStreamPrint(threadData, "%s:%d: Invalid root: (%g)^(%g)", __FILE__, __LINE__, tmp4, tmp5); + } + } + } + else + { + tmp6 = pow(tmp4, tmp5); + } + if(isnan(tmp6) || isinf(tmp6)) + { + throwStreamPrint(threadData, "%s:%d: Invalid root: (%g)^(%g)", __FILE__, __LINE__, tmp4, tmp5); + } + _Hvap = (0.001) * (((*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 2)))) * (tmp6)); + } + else + { + _Hvap = 0.0; + } + _return: OMC_LABEL_UNUSED + return _Hvap; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_HV(threadData_t *threadData, modelica_metatype _HOV, modelica_metatype _Tc, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real tmp2; + modelica_real _Hvap; + modelica_metatype out_Hvap; + tmp1 = mmc_unbox_real(_Tc); + tmp2 = mmc_unbox_real(_T); + _Hvap = omc_Simulator_Files_ThermodynamicFunctions_HV(threadData, *((base_array_t*)_HOV), tmp1, tmp2); + out_Hvap = mmc_mk_rcon(_Hvap); + return out_Hvap; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_HVapId(threadData_t *threadData, modelica_real _SH, real_array _VapCp, real_array _HOV, modelica_real _Tc, modelica_real _T) +{ + modelica_real _Hvap; + modelica_integer _n; + real_array _Cp; + real_array tmp1; + modelica_real tmp2; + modelica_integer tmp3; + modelica_integer tmp4; + modelica_integer tmp5; + real_array tmp6; + real_array tmp7; + index_spec_t tmp8; + real_array tmp9; + modelica_real tmp10; + _tailrecursive: OMC_LABEL_UNUSED + _n = ((modelica_integer) 100); + alloc_real_array(&_Cp, 1, ((modelica_integer) -1) + (modelica_integer)_n); + tmp3 = ((modelica_integer) 1); tmp4 = 1; tmp5 = ((modelica_integer) -1) + (modelica_integer)_n; + if(!tmp4) + { + FILE_INFO info = omc_dummyFileInfo; + omc_assert(threadData, info, "assertion range step != 0 failed"); + } + else if(!(((tmp4 > 0) && (tmp3 > tmp5)) || ((tmp4 < 0) && (tmp3 < tmp5)))) + { + modelica_integer _i; + for(_i = ((modelica_integer) 1); in_range_integer(_i, tmp3, tmp5); _i += tmp4) + { + array_alloc_scalar_real_array(&tmp1, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp2 = ((modelica_real)((modelica_integer)_n)); + if (tmp2 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(-298.15 + T) / /*Real*/(n)");} + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ (modelica_integer)_i)) = omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp1, 298.15 + (((modelica_real)((modelica_integer)_i))) * ((-298.15 + _T) / tmp2)); + } + } + + array_alloc_scalar_real_array(&tmp6, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + create_index_spec(&tmp8, 1, (1), (int*)0, 'W'); + index_alloc_real_array(&_Cp, &tmp8, &tmp7); + array_alloc_scalar_real_array(&tmp9, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp10 = ((modelica_real)((modelica_integer)_n)); + if (tmp10 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(0.5 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, T) + sum(Cp[:]) + 0.5 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, 298.15)) / /*Real*/(n)");} + _Hvap = (-298.15 + _T) * (((0.5) * (omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp6, _T)) + sum_real_array(tmp7) + (0.5) * (omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp9, 298.15))) / tmp10); + _return: OMC_LABEL_UNUSED + return _Hvap; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_HVapId(threadData_t *threadData, modelica_metatype _SH, modelica_metatype _VapCp, modelica_metatype _HOV, modelica_metatype _Tc, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real _Hvap; + modelica_metatype out_Hvap; + tmp1 = mmc_unbox_real(_SH); + tmp2 = mmc_unbox_real(_Tc); + tmp3 = mmc_unbox_real(_T); + _Hvap = omc_Simulator_Files_ThermodynamicFunctions_HVapId(threadData, tmp1, *((base_array_t*)_VapCp), *((base_array_t*)_HOV), tmp2, tmp3); + out_Hvap = mmc_mk_rcon(_Hvap); + return out_Hvap; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_LiqCpId(threadData_t *threadData, real_array _LiqCp, modelica_real _T) +{ + modelica_real _Cpliq; + modelica_real tmp1; + modelica_real tmp2; + _tailrecursive: OMC_LABEL_UNUSED + tmp1 = _T; + if (tmp1 == 0) {throwStreamPrint(threadData, "Division by zero %s", "LiqCp[3] / T");} + tmp2 = _T; + _Cpliq = (0.001) * ((*real_array_element_addr1(&_LiqCp, 1, /* modelica_integer */ ((modelica_integer) 2))) + exp(((*real_array_element_addr1(&_LiqCp, 1, /* modelica_integer */ ((modelica_integer) 3)))) / tmp1 + (*real_array_element_addr1(&_LiqCp, 1, /* modelica_integer */ ((modelica_integer) 4))) + ((*real_array_element_addr1(&_LiqCp, 1, /* modelica_integer */ ((modelica_integer) 5)))) * (_T) + ((*real_array_element_addr1(&_LiqCp, 1, /* modelica_integer */ ((modelica_integer) 6)))) * ((tmp2 * tmp2)))); + _return: OMC_LABEL_UNUSED + return _Cpliq; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_LiqCpId(threadData_t *threadData, modelica_metatype _LiqCp, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real _Cpliq; + modelica_metatype out_Cpliq; + tmp1 = mmc_unbox_real(_T); + _Cpliq = omc_Simulator_Files_ThermodynamicFunctions_LiqCpId(threadData, *((base_array_t*)_LiqCp), tmp1); + out_Cpliq = mmc_mk_rcon(_Cpliq); + return out_Cpliq; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_Psat(threadData_t *threadData, real_array _VP, modelica_real _T) +{ + modelica_real _Pvap; + modelica_real tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real tmp4; + modelica_real tmp5; + modelica_real tmp6; + modelica_real tmp7; + modelica_real tmp8; + modelica_real tmp9; + _tailrecursive: OMC_LABEL_UNUSED + tmp1 = _T; + if (tmp1 == 0) {throwStreamPrint(threadData, "Division by zero %s", "VP[3] / T");} + tmp2 = _T; + if(!(tmp2 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(T) was %g should be > 0", tmp2); + }tmp3 = _T; + tmp4 = (*real_array_element_addr1(&_VP, 1, /* modelica_integer */ ((modelica_integer) 6))); + if(tmp3 < 0.0 && tmp4 != 0.0) + { + tmp6 = modf(tmp4, &tmp7); + + if(tmp6 > 0.5) + { + tmp6 -= 1.0; + tmp7 += 1.0; + } + else if(tmp6 < -0.5) + { + tmp6 += 1.0; + tmp7 -= 1.0; + } + + if(fabs(tmp6) < 1e-10) + tmp5 = pow(tmp3, tmp7); + else + { + tmp9 = modf(1.0/tmp4, &tmp8); + if(tmp9 > 0.5) + { + tmp9 -= 1.0; + tmp8 += 1.0; + } + else if(tmp9 < -0.5) + { + tmp9 += 1.0; + tmp8 -= 1.0; + } + if(fabs(tmp9) < 1e-10 && ((unsigned long)tmp8 & 1)) + { + tmp5 = -pow(-tmp3, tmp6)*pow(tmp3, tmp7); + } + else + { + throwStreamPrint(threadData, "%s:%d: Invalid root: (%g)^(%g)", __FILE__, __LINE__, tmp3, tmp4); + } + } + } + else + { + tmp5 = pow(tmp3, tmp4); + } + if(isnan(tmp5) || isinf(tmp5)) + { + throwStreamPrint(threadData, "%s:%d: Invalid root: (%g)^(%g)", __FILE__, __LINE__, tmp3, tmp4); + } + _Pvap = exp((*real_array_element_addr1(&_VP, 1, /* modelica_integer */ ((modelica_integer) 2))) + ((*real_array_element_addr1(&_VP, 1, /* modelica_integer */ ((modelica_integer) 3)))) / tmp1 + ((*real_array_element_addr1(&_VP, 1, /* modelica_integer */ ((modelica_integer) 4)))) * (log(tmp2)) + ((*real_array_element_addr1(&_VP, 1, /* modelica_integer */ ((modelica_integer) 5)))) * (tmp5)); + _return: OMC_LABEL_UNUSED + return _Pvap; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_Psat(threadData_t *threadData, modelica_metatype _VP, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real _Pvap; + modelica_metatype out_Pvap; + tmp1 = mmc_unbox_real(_T); + _Pvap = omc_Simulator_Files_ThermodynamicFunctions_Psat(threadData, *((base_array_t*)_VP), tmp1); + out_Pvap = mmc_mk_rcon(_Pvap); + return out_Pvap; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_SId(threadData_t *threadData, real_array _VapCp, real_array _HOV, modelica_real _Tb, modelica_real _Tc, modelica_real _T, modelica_real _P, modelica_real _xliq, modelica_real _xvap, modelica_real *out_Svap) +{ + modelica_real _Sliq; + modelica_real _Svap; + modelica_real _Tref; + modelica_real _Pref; + modelica_real _S; + modelica_integer _n; + real_array _Cp; + real_array tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real tmp4; + modelica_integer tmp5; + modelica_integer tmp6; + modelica_integer tmp7; + real_array tmp8; + modelica_real tmp9; + real_array tmp10; + modelica_real tmp11; + real_array tmp12; + modelica_real tmp13; + real_array tmp14; + modelica_real tmp15; + modelica_real tmp16; + modelica_real tmp17; + modelica_real tmp18; + real_array tmp19; + modelica_real tmp20; + modelica_real tmp21; + modelica_real tmp22; + modelica_real tmp23; + modelica_real tmp24; + modelica_real tmp25; + modelica_real tmp26; + modelica_real tmp27; + modelica_real tmp28; + modelica_real tmp29; + real_array tmp30; + modelica_real tmp31; + _tailrecursive: OMC_LABEL_UNUSED + _Tref = 298.15; + _Pref = 101325.0; + _n = ((modelica_integer) 10); + alloc_real_array(&_Cp, 1, ((modelica_integer) 9)); + _S = 0.0; + + tmp5 = ((modelica_integer) 1); tmp6 = 1; tmp7 = ((modelica_integer) -1) + (modelica_integer)_n; + if(!tmp6) + { + FILE_INFO info = omc_dummyFileInfo; + omc_assert(threadData, info, "assertion range step != 0 failed"); + } + else if(!(((tmp6 > 0) && (tmp5 > tmp7)) || ((tmp6 < 0) && (tmp5 < tmp7)))) + { + modelica_integer _i; + for(_i = ((modelica_integer) 1); in_range_integer(_i, tmp5, tmp7); _i += tmp6) + { + array_alloc_scalar_real_array(&tmp1, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp2 = ((modelica_real)((modelica_integer)_n)); + if (tmp2 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(-298.15 + T) / /*Real*/(n)");} + tmp3 = ((modelica_real)((modelica_integer)_n)); + if (tmp3 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(-298.15 + T) / /*Real*/(n)");} + tmp4 = 298.15 + (((modelica_real)((modelica_integer)_i))) * ((-298.15 + _T) / tmp3); + if (tmp4 == 0) {throwStreamPrint(threadData, "Division by zero %s", "Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, 298.15 + /*Real*/(i) * (-298.15 + T) / /*Real*/(n)) / (298.15 + /*Real*/(i) * (-298.15 + T) / /*Real*/(n))");} + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ (modelica_integer)_i)) = (omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp1, 298.15 + (((modelica_real)((modelica_integer)_i))) * ((-298.15 + _T) / tmp2))) / tmp4; + } + } + + if((_T >= _Tref)) + { + array_alloc_scalar_real_array(&tmp8, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp9 = _T; + if (tmp9 == 0) {throwStreamPrint(threadData, "Division by zero %s", "Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, T) / T");} + array_alloc_scalar_real_array(&tmp10, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp11 = ((modelica_real)((modelica_integer)_n)); + if (tmp11 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(0.5 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, T) / T + Cp[1] + Cp[2] + Cp[3] + Cp[4] + Cp[5] + Cp[6] + Cp[7] + Cp[8] + Cp[9] + 0.001677008217340265 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, 298.15)) / /*Real*/(n)");} + _S = (-298.15 + _T) * (((0.5) * ((omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp8, _T)) / tmp9) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 1))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 2))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 3))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 4))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 5))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 6))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 7))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 8))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 9))) + (0.001677008217340265) * (omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp10, 298.15))) / tmp11); + } + else + { + array_alloc_scalar_real_array(&tmp12, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp13 = _T; + if (tmp13 == 0) {throwStreamPrint(threadData, "Division by zero %s", "Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, T) / T");} + array_alloc_scalar_real_array(&tmp14, 6, (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp15 = ((modelica_real)((modelica_integer)_n)); + if (tmp15 == 0) {throwStreamPrint(threadData, "Division by zero %s", "(0.5 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, T) / T + Cp[1] + Cp[2] + Cp[3] + Cp[4] + Cp[5] + Cp[6] + Cp[7] + Cp[8] + Cp[9] + 0.001677008217340265 * Simulator.Files.ThermodynamicFunctions.VapCpId({VapCp[1], VapCp[2], VapCp[3], VapCp[4], VapCp[5], VapCp[6]}, 298.15)) / /*Real*/(n)");} + _S = (298.15 - _T) * (((0.5) * ((omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp12, _T)) / tmp13) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 1))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 2))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 3))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 4))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 5))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 6))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 7))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 8))) + (*real_array_element_addr1(&_Cp, 1, /* modelica_integer */ ((modelica_integer) 9))) + (0.001677008217340265) * (omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, tmp14, 298.15))) / tmp15); + } + + if(((_xliq > 0.0) && (_xvap > 0.0))) + { + tmp16 = _Pref; + if (tmp16 == 0) {throwStreamPrint(threadData, "Division by zero %s", "P / Pref");} + tmp17 = (_P) / tmp16; + if(!(tmp17 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(P / Pref) was %g should be > 0", tmp17); + }tmp18 = _xliq; + if(!(tmp18 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(xliq) was %g should be > 0", tmp18); + }array_alloc_scalar_real_array(&tmp19, 6, (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp20 = _T; + if (tmp20 == 0) {throwStreamPrint(threadData, "Division by zero %s", "Simulator.Files.ThermodynamicFunctions.HV({HOV[1], HOV[2], HOV[3], HOV[4], HOV[5], HOV[6]}, Tc, T) / T");} + _Sliq = _S + (-8.3144598) * (log(tmp17) + log(tmp18)) - ((omc_Simulator_Files_ThermodynamicFunctions_HV(threadData, tmp19, _Tc, _T)) / tmp20); + + tmp21 = _Pref; + if (tmp21 == 0) {throwStreamPrint(threadData, "Division by zero %s", "P / Pref");} + tmp22 = (_P) / tmp21; + if(!(tmp22 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(P / Pref) was %g should be > 0", tmp22); + }tmp23 = _xvap; + if(!(tmp23 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(xvap) was %g should be > 0", tmp23); + } + _Svap = _S + (-8.3144598) * (log(tmp22) + log(tmp23)); + } + else + { + if(((_xliq <= 0.0) && (_xvap <= 0.0))) + { + _Sliq = 0.0; + + _Svap = 0.0; + } + else + { + if((_xliq == 0.0)) + { + _Sliq = 0.0; + + tmp24 = _Pref; + if (tmp24 == 0) {throwStreamPrint(threadData, "Division by zero %s", "P / Pref");} + tmp25 = (_P) / tmp24; + if(!(tmp25 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(P / Pref) was %g should be > 0", tmp25); + }tmp26 = _xvap; + if(!(tmp26 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(xvap) was %g should be > 0", tmp26); + } + _Svap = _S + (-8.3144598) * (log(tmp25) + log(tmp26)); + } + else + { + if((_xvap == 0.0)) + { + tmp27 = _Pref; + if (tmp27 == 0) {throwStreamPrint(threadData, "Division by zero %s", "P / Pref");} + tmp28 = (_P) / tmp27; + if(!(tmp28 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(P / Pref) was %g should be > 0", tmp28); + }tmp29 = _xliq; + if(!(tmp29 > 0.0)) + { + FILE_INFO info = {"",0,0,0,0,0}; + omc_assert(threadData, info, "Model error: Argument of log(xliq) was %g should be > 0", tmp29); + }array_alloc_scalar_real_array(&tmp30, 6, (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 1))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 2))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 3))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 4))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 5))), (modelica_real)(*real_array_element_addr1(&_HOV, 1, /* modelica_integer */ ((modelica_integer) 6)))); + tmp31 = _T; + if (tmp31 == 0) {throwStreamPrint(threadData, "Division by zero %s", "Simulator.Files.ThermodynamicFunctions.HV({HOV[1], HOV[2], HOV[3], HOV[4], HOV[5], HOV[6]}, Tc, T) / T");} + _Sliq = _S + (-8.3144598) * (log(tmp28) + log(tmp29)) - ((omc_Simulator_Files_ThermodynamicFunctions_HV(threadData, tmp30, _Tc, _T)) / tmp31); + + _Svap = 0.0; + } + else + { + _Sliq = 0.0; + + _Svap = 0.0; + } + } + } + } + _return: OMC_LABEL_UNUSED + if (out_Svap) { *out_Svap = _Svap; } + return _Sliq; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_SId(threadData_t *threadData, modelica_metatype _VapCp, modelica_metatype _HOV, modelica_metatype _Tb, modelica_metatype _Tc, modelica_metatype _T, modelica_metatype _P, modelica_metatype _xliq, modelica_metatype _xvap, modelica_metatype *out_Svap) +{ + modelica_real tmp1; + modelica_real tmp2; + modelica_real tmp3; + modelica_real tmp4; + modelica_real tmp5; + modelica_real tmp6; + modelica_real _Svap; + modelica_real _Sliq; + modelica_metatype out_Sliq; + tmp1 = mmc_unbox_real(_Tb); + tmp2 = mmc_unbox_real(_Tc); + tmp3 = mmc_unbox_real(_T); + tmp4 = mmc_unbox_real(_P); + tmp5 = mmc_unbox_real(_xliq); + tmp6 = mmc_unbox_real(_xvap); + _Sliq = omc_Simulator_Files_ThermodynamicFunctions_SId(threadData, *((base_array_t*)_VapCp), *((base_array_t*)_HOV), tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, &_Svap); + out_Sliq = mmc_mk_rcon(_Sliq); + if (out_Svap) { *out_Svap = mmc_mk_rcon(_Svap); } + return out_Sliq; +} + +DLLExport +modelica_real omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData_t *threadData, real_array _VapCp, modelica_real _T) +{ + modelica_real _Cpvap; + modelica_real tmp1; + modelica_real tmp2; + _tailrecursive: OMC_LABEL_UNUSED + tmp1 = _T; + if (tmp1 == 0) {throwStreamPrint(threadData, "Division by zero %s", "VapCp[3] / T");} + tmp2 = _T; + _Cpvap = (0.001) * ((*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 2))) + exp(((*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 3)))) / tmp1 + (*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 4))) + ((*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 5)))) * (_T) + ((*real_array_element_addr1(&_VapCp, 1, /* modelica_integer */ ((modelica_integer) 6)))) * ((tmp2 * tmp2)))); + _return: OMC_LABEL_UNUSED + return _Cpvap; +} +modelica_metatype boxptr_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData_t *threadData, modelica_metatype _VapCp, modelica_metatype _T) +{ + modelica_real tmp1; + modelica_real _Cpvap; + modelica_metatype out_Cpvap; + tmp1 = mmc_unbox_real(_T); + _Cpvap = omc_Simulator_Files_ThermodynamicFunctions_VapCpId(threadData, *((base_array_t*)_VapCp), tmp1); + out_Cpvap = mmc_mk_rcon(_Cpvap); + return out_Cpvap; +} + +#ifdef __cplusplus +} +#endif |