调试计算通过,正确性需要验证
This commit is contained in:
parent
562e7cd440
commit
a58fb5c69a
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -28,9 +28,9 @@ Project File Date: 07/06/2025
|
||||
*** Using Compiler 'V5.06 update 7 (build 960)', folder: 'd:\Keil_v5\ARM\ARMCC\Bin'
|
||||
Build target 'Fire_RT-Thread'
|
||||
linking...
|
||||
Program Size: Code=17398 RO-data=1042 RW-data=164 ZI-data=5852
|
||||
FromELF: creating hex file...
|
||||
"..\..\Output\Fire_RT-Thread.axf" - 0 Error(s), 0 Warning(s).
|
||||
..\..\Output\Fire_RT-Thread.axf: error: L6050U: The code size of this image (47388 bytes) exceeds the maximum allowed for this version of the linker.
|
||||
Finished: 0 information, 0 warning, 0 error and 1 fatal error messages.
|
||||
"..\..\Output\Fire_RT-Thread.axf" - 1 Error(s), 0 Warning(s).
|
||||
|
||||
<h2>Software Packages used:</h2>
|
||||
|
||||
@ -43,7 +43,8 @@ Package Vendor: Keil
|
||||
d:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
|
||||
|
||||
<h2>Collection of Component Files used:</h2>
|
||||
Build Time Elapsed: 00:00:02
|
||||
Target not created.
|
||||
Build Time Elapsed: 00:00:04
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -2608,7 +2608,7 @@ I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_usart.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_usart_ex.h)(0x6867D922)
|
||||
F (..\..\User\main.c)(0x6867D922)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\main.o --depend ..\..\output\main.d)
|
||||
F (..\..\User\main.c)(0x686A873C)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\main.o --depend ..\..\output\main.d)
|
||||
I (..\..\User\board.h)(0x6867D922)
|
||||
I (..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h)(0x6867D922)
|
||||
I (..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include\stm32h743xx.h)(0x6867D922)
|
||||
@ -2663,6 +2663,13 @@ I (d:\Keil_v5\ARM\ARMCC\include\signal.h)(0x60252376)
|
||||
I (..\..\rtthread\3.0.3\include\libc/libc_fdset.h)(0x6867D922)
|
||||
I (..\..\rtthread\3.0.3\include\rtservice.h)(0x6867D922)
|
||||
I (..\..\rtthread\3.0.3\include\rtm.h)(0x6867D922)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A87C2)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
|
||||
I (..\..\User\NG\Therm.h)(0x686A839A)
|
||||
I (..\..\User\NG\Detail.h)(0x686A8399)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x6025237C)
|
||||
I (..\..\User\NG\FlowCal.h)(0x686A839A)
|
||||
F (..\..\User\stm32h7xx_it.c)(0x6867D922)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\stm32h7xx_it.o --depend ..\..\output\stm32h7xx_it.d)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h)(0x6867D922)
|
||||
I (..\..\User\stm32h7xx_hal_conf.h)(0x6867D922)
|
||||
@ -2891,43 +2898,44 @@ I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_usart.h)(0x6867D922)
|
||||
I (..\..\Libraries\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_usart_ex.h)(0x6867D922)
|
||||
F (..\..\User\NG\Detail.c)(0x686A1243)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\detail.o --depend ..\..\output\detail.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A1BCB)
|
||||
F (..\..\User\NG\Detail.c)(0x686A839A)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\detail.o --depend ..\..\output\detail.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A87C2)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
|
||||
I (..\..\User\NG\Detail.h)(0x686A0183)
|
||||
I (..\..\User\NG\Detail.h)(0x686A8399)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x6025237C)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\string.h)(0x6025237E)
|
||||
F (..\..\User\NG\Detail.h)(0x686A0183)()
|
||||
F (..\..\User\NG\NGCal.c)(0x686A0183)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\ngcal.o --depend ..\..\output\ngcal.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A1BCB)
|
||||
F (..\..\User\NG\Detail.h)(0x686A8399)()
|
||||
F (..\..\User\NG\NGCal.c)(0x686A839A)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\ngcal.o --depend ..\..\output\ngcal.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A87C2)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
|
||||
I (..\..\User\NG\Therm.h)(0x686A0183)
|
||||
I (..\..\User\NG\Detail.h)(0x686A0183)
|
||||
I (..\..\User\NG\Therm.h)(0x686A839A)
|
||||
I (..\..\User\NG\Detail.h)(0x686A8399)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x6025237C)
|
||||
F (..\..\User\NG\NGCal.h)(0x686A1BCB)()
|
||||
F (..\..\User\NG\Therm.c)(0x686A0183)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\therm.o --depend ..\..\output\therm.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A1BCB)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\String.h)(0x6025237E)
|
||||
F (..\..\User\NG\NGCal.h)(0x686A87C2)()
|
||||
F (..\..\User\NG\Therm.c)(0x686A86C6)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\therm.o --depend ..\..\output\therm.d)
|
||||
I (..\..\User\NG\therm.h)(0x686A839A)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A87C2)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
|
||||
I (..\..\User\NG\Detail.h)(0x686A0183)
|
||||
I (..\..\User\NG\Detail.h)(0x686A8399)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x6025237C)
|
||||
I (..\..\User\NG\Therm.h)(0x686A0183)
|
||||
F (..\..\User\NG\Therm.h)(0x686A0183)()
|
||||
F (..\..\User\NG\FlowCal.h)(0x686A19F6)()
|
||||
F (..\..\User\NG\OFlowCal.c)(0x686A1C3D)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\oflowcal.o --depend ..\..\output\oflowcal.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A1BCB)
|
||||
F (..\..\User\NG\Therm.h)(0x686A839A)()
|
||||
F (..\..\User\NG\FlowCal.h)(0x686A839A)()
|
||||
F (..\..\User\NG\OFlowCal.c)(0x686A86FC)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\oflowcal.o --depend ..\..\output\oflowcal.d)
|
||||
I (..\..\User\NG\NGCal.h)(0x686A87C2)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdlib.h)(0x60252374)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\math.h)(0x60252378)
|
||||
I (..\..\User\NG\Therm.h)(0x686A0183)
|
||||
I (..\..\User\NG\Detail.h)(0x686A0183)
|
||||
I (..\..\User\NG\Therm.h)(0x686A839A)
|
||||
I (..\..\User\NG\Detail.h)(0x686A8399)
|
||||
I (d:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x6025237C)
|
||||
I (..\..\User\NG\FlowCal.h)(0x686A19F6)
|
||||
I (..\..\User\NG\FlowCal.h)(0x686A839A)
|
||||
F (..\..\±Ø¶Á˵Ã÷.txt)(0x6867D922)()
|
||||
F (..\..\rtthread\3.0.3\src\clock.c)(0x6867D922)(--c99 -c --cpu Cortex-M7.fp.dp -D__EVAL -D__MICROLIB -g -O1 --apcs=interwork --split_sections -I ..\..\Libraries\CMSIS\Include -I ..\..\Libraries\CMSIS\Device\ST\STM32H7xx\Include -I ..\..\Libraries\STM32H7xx_HAL_Driver\Inc -I ..\..\rtthread\3.0.3\components\finsh -I ..\..\rtthread\3.0.3\include -I ..\..\rtthread\3.0.3\include\libc -I ..\..\User -I ..\..\User\bsp -I ..\..\User\NG
-Id:\Keil_v5\Arm\Packs\Keil\STM32H7xx_DFP\2.6.0\Drivers\CMSIS\Device\ST\STM32H7xx\Include
-D__UVISION_VERSION="536" -DSTM32H750xx -DUSE_HAL_DRIVER -DSTM32H743xx
-o ..\..\output\clock.o --depend ..\..\output\clock.d)
|
||||
I (..\..\rtthread\3.0.3\include\rthw.h)(0x6867D922)
|
||||
|
BIN
Output/detail.o
BIN
Output/detail.o
Binary file not shown.
@ -56,3 +56,10 @@
|
||||
..\..\output\main.o: ..\..\rtthread\3.0.3\include\rtservice.h
|
||||
..\..\output\main.o: ..\..\rtthread\3.0.3\include\rtm.h
|
||||
..\..\output\main.o: ..\..\rtthread\3.0.3\include\rtthread.h
|
||||
..\..\output\main.o: ..\..\User\NG\NGCal.h
|
||||
..\..\output\main.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\..\output\main.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
|
||||
..\..\output\main.o: ..\..\User\NG\Therm.h
|
||||
..\..\output\main.o: ..\..\User\NG\Detail.h
|
||||
..\..\output\main.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
|
||||
..\..\output\main.o: ..\..\User\NG\FlowCal.h
|
||||
|
BIN
Output/main.o
BIN
Output/main.o
Binary file not shown.
@ -6,3 +6,4 @@
|
||||
..\..\output\ngcal.o: ..\..\User\NG\Therm.h
|
||||
..\..\output\ngcal.o: ..\..\User\NG\Detail.h
|
||||
..\..\output\ngcal.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
|
||||
..\..\output\ngcal.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\String.h
|
||||
|
BIN
Output/ngcal.o
BIN
Output/ngcal.o
Binary file not shown.
Binary file not shown.
@ -1,8 +1,8 @@
|
||||
..\..\output\therm.o: ..\..\User\NG\Therm.c
|
||||
..\..\output\therm.o: ..\..\User\NG\therm.h
|
||||
..\..\output\therm.o: ..\..\User\NG\NGCal.h
|
||||
..\..\output\therm.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdio.h
|
||||
..\..\output\therm.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdlib.h
|
||||
..\..\output\therm.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\math.h
|
||||
..\..\output\therm.o: ..\..\User\NG\Detail.h
|
||||
..\..\output\therm.o: d:\Keil_v5\ARM\ARMCC\Bin\..\include\stdbool.h
|
||||
..\..\output\therm.o: ..\..\User\NG\Therm.h
|
||||
|
BIN
Output/therm.o
BIN
Output/therm.o
Binary file not shown.
File diff suppressed because one or more lines are too long
8
User/NG/.idea/.gitignore
vendored
Normal file
8
User/NG/.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
2
User/NG/.idea/NG.iml
Normal file
2
User/NG/.idea/NG.iml
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
102
User/NG/.idea/editor.xml
Normal file
102
User/NG/.idea/editor.xml
Normal file
@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BackendCodeEditorSettings">
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
|
||||
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
|
||||
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
|
||||
</component>
|
||||
</project>
|
6
User/NG/.idea/encodings.xml
Normal file
6
User/NG/.idea/encodings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/OFlowCal.c" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
7
User/NG/.idea/misc.xml
Normal file
7
User/NG/.idea/misc.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CMakePythonSetting">
|
||||
<option name="pythonIntegrationState" value="YES" />
|
||||
</component>
|
||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
||||
</project>
|
8
User/NG/.idea/modules.xml
Normal file
8
User/NG/.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/NG.iml" filepath="$PROJECT_DIR$/.idea/NG.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
6
User/NG/.idea/vcs.xml
Normal file
6
User/NG/.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
1289
User/NG/AGA10.c
1289
User/NG/AGA10.c
File diff suppressed because it is too large
Load Diff
14
User/NG/CMakeLists.txt
Normal file
14
User/NG/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
||||
cmake_minimum_required(VERSION 3.31)
|
||||
project(NG C)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
add_executable(NG
|
||||
main.c
|
||||
Detail.c
|
||||
FlowCal.h # 头文件明确列出
|
||||
main.c
|
||||
NGCal.c
|
||||
NGCal.h
|
||||
FlowCal.c # 确保包含实现文件
|
||||
Therm.c)
|
1617
User/NG/Detail.c
1617
User/NG/Detail.c
File diff suppressed because it is too large
Load Diff
189
User/NG/Detail.h
189
User/NG/Detail.h
@ -1,109 +1,122 @@
|
||||
/*************************************************************************
|
||||
* 文件: detail.h
|
||||
* <EFBFBD>ļ<EFBFBD>: detail.h
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef _DETAIL_H
|
||||
#ifndef _DETAIL_H
|
||||
#define _DETAIL_H
|
||||
|
||||
#include "NGCal.h"
|
||||
#include <stdbool.h> // 添加bool类型支持
|
||||
#include <stdbool.h> // <EFBFBD><EFBFBD><EFBFBD>bool<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><EFBFBD>
|
||||
|
||||
// 使用结构体替代C++类
|
||||
typedef struct Detail
|
||||
{
|
||||
// 私有成员数据
|
||||
int iNCC; // 组分数目
|
||||
|
||||
int aiCID[21]; // 组分ID
|
||||
// 五个历史变量用于提高重复计算时的效率
|
||||
double dOldMixID; // 上一次计算的混合物ID
|
||||
double dOldPb; // 上一次计算的Pb
|
||||
double dOldTb; // 上一次计算的Tb
|
||||
double dOldPf; // 上一次计算的Pf
|
||||
double dOldTf; // 上一次计算的Tf
|
||||
// ʹ<>ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD>C++<2B><>
|
||||
typedef struct Detail {
|
||||
// ˽<>г<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
|
||||
int iNCC; // <20><><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
||||
|
||||
// 表4第1列中的EOS参数
|
||||
double adAn[58];
|
||||
int aiCID[21]; // <20><><EFBFBD>ID
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ч<EFBFBD><D0A7>
|
||||
double dOldMixID; // <20><>һ<EFBFBD>μ<EFBFBD><CEBC><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ID
|
||||
double dOldPb; // <20><>һ<EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD>Pb
|
||||
double dOldTb; // <20><>һ<EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD>Tb
|
||||
double dOldPf; // <20><>һ<EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD>Pf
|
||||
double dOldTf; // <20><>һ<EFBFBD>μ<EFBFBD><CEBC><EFBFBD><EFBFBD>Tf
|
||||
|
||||
// <20><>4<EFBFBD><34>1<EFBFBD><31><EFBFBD>е<EFBFBD>EOS<4F><53><EFBFBD><EFBFBD>
|
||||
double adAn[58];
|
||||
double adUn[58];
|
||||
|
||||
// 表5中的特征参数
|
||||
double dMri[21]; // 第i组分的分子量
|
||||
double dEi[21]; // 第i组分的特征能量参数
|
||||
double dKi[21]; // 第i组分的尺寸参数 - m^3/kg-mol ^1/3
|
||||
double dGi[21]; // 第i组分的取向参数
|
||||
double dQi[21]; // 第i组分的四极参数
|
||||
double dFi[21]; // 第i组分的高温参数
|
||||
double dSi[21]; // 第i组分的偶极参数
|
||||
double dWi[21]; // 第i组分的缔合参数
|
||||
// <EFBFBD><EFBFBD>5<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dMri[21]; // <20><>i<EFBFBD><69>ֵķ<D6B5><C4B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dEi[21]; // <20><>i<EFBFBD><69>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dKi[21]; // <20><>i<EFBFBD><69>ֵijߴ<C4B3><DFB4><EFBFBD><EFBFBD> - m^3/kg-mol ^1/3
|
||||
double dGi[21]; // <20><>i<EFBFBD><69>ֵ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dQi[21]; // <20><>i<EFBFBD><69>ֵ<EFBFBD><D6B5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dFi[21]; // <20><>i<EFBFBD><69>ֵĸ<D6B5><C4B8>²<EFBFBD><C2B2><EFBFBD>
|
||||
double dSi[21]; // <20><>i<EFBFBD><69>ֵ<EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dWi[21]; // <20><>i<EFBFBD><69>ֵĵϲ<DEBA><CFB2><EFBFBD>
|
||||
|
||||
double dEij[21][21]; // 维里系数能量二元相互作用参数
|
||||
double dUij[21][21]; // 共形能量的二元相互作用参数
|
||||
double dKij[21][21]; // 尺寸的二元相互作用参数
|
||||
double dGij[21][21]; // 取向的二元相互作用参数
|
||||
double dEij[21][21]; // ά<><CEAC>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><EFBFBD><E0BBA5><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
double dUij[21][21]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>Ԫ<EFBFBD><EFBFBD><E0BBA5><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
double dKij[21][21]; // <20>ߴ<EFBFBD>Ķ<EFBFBD>Ԫ<EFBFBD><EFBFBD><E0BBA5><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
double dGij[21][21]; // ȡ<><C8A1>Ķ<EFBFBD>Ԫ<EFBFBD><EFBFBD><E0BBA5><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>
|
||||
|
||||
double adTable6Eij[21][21]; // 表6常数
|
||||
double adTable6Uij[21][21]; // 表6常数
|
||||
double adTable6Kij[21][21]; // 表6常数
|
||||
double adTable6Gij[21][21]; // 表6常数
|
||||
double adTable6Eij[21][21]; // <20><>6<EFBFBD><36><EFBFBD><EFBFBD>
|
||||
double adTable6Uij[21][21]; // <20><>6<EFBFBD><36><EFBFBD><EFBFBD>
|
||||
double adTable6Kij[21][21]; // <20><>6<EFBFBD><36><EFBFBD><EFBFBD>
|
||||
double adTable6Gij[21][21]; // <20><>6<EFBFBD><36><EFBFBD><EFBFBD>
|
||||
|
||||
double adTable5Qi[21]; // 表5常数
|
||||
double adTable5Fi[21]; // 表5常数
|
||||
double adTable5Si[21]; // 表5常数
|
||||
double adTable5Wi[21]; // 表5常数
|
||||
|
||||
double adTableHhvMol[4][21]; //GB/T11062 摩尔高位发热量
|
||||
double adTableLhvMol[4][21]; //GB/T11062 摩尔低位发热量
|
||||
double adTable5Qi[21]; // <20><>5<EFBFBD><35><EFBFBD><EFBFBD>
|
||||
double adTable5Fi[21]; // <20><>5<EFBFBD><35><EFBFBD><EFBFBD>
|
||||
double adTable5Si[21]; // <20><>5<EFBFBD><35><EFBFBD><EFBFBD>
|
||||
double adTable5Wi[21]; // <20><>5<EFBFBD><35><EFBFBD><EFBFBD>
|
||||
|
||||
double dXi[21]; // 第i组分的摩尔分数
|
||||
double dPCalc; // 由pdetail()计算的压力
|
||||
double dT; // 当前温度
|
||||
double dP; // 当前压力
|
||||
double dRhoTP; // 在T和P下的摩尔密度
|
||||
double dB; // 第二维里系数B
|
||||
double adBcoef[18]; // 计算B的18个系数
|
||||
double adFn[58]; // 密度系数的函数
|
||||
double fx[58]; // 用于3个导数的修改系数
|
||||
double dU; // 混合物能量参数
|
||||
double dKp3; // 混合物尺寸参数的立方
|
||||
double dW; // 混合物取向参数
|
||||
double dQp2; // 混合物四极参数的平方
|
||||
double dF; // 高温参数
|
||||
double dRho; // 摩尔密度
|
||||
double dRhoL; // 用于braket函数的低密度
|
||||
double dRhoH; // 用于braket函数的高密度
|
||||
double dPRhoL; // 用于braket函数的低压
|
||||
double dPRhoH; // 用于braket函数的高压
|
||||
double adTableHhvMol[4][21]; //GB/T11062 Ħ<><C4A6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double adTableLhvMol[4][21]; //GB/T11062 Ħ<><C4A6><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 公共变量,也用于高级流体性质计算
|
||||
double dZ; // 当前压缩因子
|
||||
double ddZdT; // Z对T的一阶偏导数
|
||||
double dd2ZdT2; // Z对T的二阶偏导数
|
||||
double ddZdD; // Z对摩尔密度的一阶偏导数
|
||||
double ddBdT; // B对T的一阶偏导数
|
||||
double dd2BdT2; // B对T的二阶偏导数
|
||||
double dXi[21]; // <20><>i<EFBFBD><69>ֵ<EFBFBD>Ħ<EFBFBD><C4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dPCalc; // <20><>pdetail()<29><><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
double dT; // <20><>ǰ<EFBFBD>¶<EFBFBD>
|
||||
double dP; // <20><>ǰѹ<C7B0><D1B9>
|
||||
double dRhoTP; // <20><>T<EFBFBD><54>P<EFBFBD>µ<EFBFBD>Ħ<EFBFBD><C4A6><EFBFBD>ܶ<EFBFBD>
|
||||
double dB; // <20>ڶ<EFBFBD>ά<EFBFBD><CEAC>ϵ<EFBFBD><CFB5>B
|
||||
double adBcoef[18]; // <20><><EFBFBD><EFBFBD>B<EFBFBD><42>18<31><38>ϵ<EFBFBD><CFB5>
|
||||
double adFn[58]; // <20>ܶ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
|
||||
double fx[58]; // <20><><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dU; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dKp3; // <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dW; // <20><><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dQp2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
||||
double dF; // <20><><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
||||
double dRho; // Ħ<><C4A6><EFBFBD>ܶ<EFBFBD>
|
||||
double dRhoL; // <20><><EFBFBD><EFBFBD>braket<65><74><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ܶ<EFBFBD>
|
||||
double dRhoH; // <20><><EFBFBD><EFBFBD>braket<65><74><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8>ܶ<EFBFBD>
|
||||
double dPRhoL; // <20><><EFBFBD><EFBFBD>braket<65><74><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ
|
||||
double dPRhoH; // <20><><EFBFBD><EFBFBD>braket<65><74><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>ѹ
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ڸ<DAB8><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>
|
||||
double dZ; // <20><>ǰѹ<C7B0><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double ddZdT; // Z<><5A>T<EFBFBD><54>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
double dd2ZdT2; // Z<><5A>T<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
double ddZdD; // Z<><5A>Ħ<EFBFBD><C4A6><EFBFBD>ܶȵ<DCB6>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
double ddBdT; // B<><42>T<EFBFBD><54>һ<EFBFBD><D2BB>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
double dd2BdT2; // B<><42>T<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
} Detail;
|
||||
|
||||
// 构造函数和析构函数
|
||||
Detail* Detail_Construct(void);
|
||||
void Detail_Destroy(Detail* pDetail);
|
||||
// <20><><EFBFBD>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Detail *Detail_Construct(void);
|
||||
|
||||
// 私有方法
|
||||
int Detail_compositionchange(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
void Detail_table(Detail* pDetail);
|
||||
void Detail_paramdl(Detail* pDetail);
|
||||
void Detail_chardl(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
void Detail_bvir(Detail* pDetail);
|
||||
void Detail_temp(Detail* pDetail);
|
||||
void Detail_braket(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
void Detail_pdetail(Detail* pDetail, double dRho);
|
||||
void Detail_ddetail(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
void Detail_relativedensity(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
void Detail_Destroy(Detail *pDetail);
|
||||
|
||||
// 公共方法
|
||||
double Detail_zdetail(Detail* pDetail, double dRho);
|
||||
double Detail_dZdT(Detail* pDetail, double dRho);
|
||||
double Detail_d2ZdT2(Detail* pDetail, double dRho);
|
||||
double Detail_dZdD(Detail* pDetail, double dRho);
|
||||
void Detail_Run(Detail* pDetail, NGParSTRUCT* pAGA10);
|
||||
// ˽<>з<EFBFBD><D0B7><EFBFBD>
|
||||
int Detail_compositionchange(Detail *pDetail, NGParSTRUCT *pAGA10);
|
||||
|
||||
int Detail_table(Detail *pDetail);
|
||||
|
||||
void Detail_paramdl(Detail *pDetail);
|
||||
|
||||
void Detail_chardl(Detail *pDetail, NGParSTRUCT *pAGA10);
|
||||
|
||||
void Detail_bvir(Detail *pDetail);
|
||||
|
||||
void Detail_temp(Detail *pDetail);
|
||||
|
||||
void Detail_braket(Detail *pDetail, NGParSTRUCT *pAGA10);
|
||||
|
||||
void Detail_pdetail(Detail *pDetail, double dRho);
|
||||
|
||||
void Detail_ddetail(Detail *pDetail, NGParSTRUCT *pAGA10);
|
||||
|
||||
void Detail_relativedensity(Detail *pDetail, NGParSTRUCT *pAGA10);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double Detail_zdetail(Detail *pDetail, double dRho);
|
||||
|
||||
double Detail_dZdT(Detail *pDetail, double dRho);
|
||||
|
||||
double Detail_d2ZdT2(Detail *pDetail, double dRho);
|
||||
|
||||
double Detail_dZdD(Detail *pDetail, double dRho);
|
||||
|
||||
void Detail_Run(Detail *pDetail, NGParSTRUCT *ptNGPar);
|
||||
|
||||
#endif
|
||||
|
493
User/NG/FlowCal.c
Normal file
493
User/NG/FlowCal.c
Normal file
@ -0,0 +1,493 @@
|
||||
#include "NGCal.h"
|
||||
#include "FlowCal.h"
|
||||
|
||||
void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar) {
|
||||
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Pa
|
||||
double tempPatm = ptFlowPar->dPatm * 1000000;
|
||||
//ѹ<><D1B9>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>Pa
|
||||
double tempPf = ptFlowPar->dPf * 1000000;
|
||||
|
||||
//<2F><>ѹת<D1B9><D7AA><EFBFBD><EFBFBD>Pa
|
||||
double tempDP = ptFlowPar->dDp * 1000;
|
||||
//<2F>¶<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>K
|
||||
double tempTf = ptFlowPar->dTf + 273.15;
|
||||
|
||||
if (ptFlowPar->dPfType == 0) //0<>DZ<EFBFBD>ѹ
|
||||
{
|
||||
ptFlowPar->dPf = tempPatm + tempPf;
|
||||
ptNGPar->dPf = tempPatm + tempPf;
|
||||
} else {
|
||||
ptFlowPar->dPf = tempPf;
|
||||
ptNGPar->dPf = tempPf;
|
||||
}
|
||||
|
||||
ptFlowPar->dDp = tempDP;
|
||||
ptFlowPar->dTf = tempTf;
|
||||
ptNGPar->dTf = tempTf;
|
||||
ptNGPar->dCbtj = ptFlowPar->dCbtj;
|
||||
|
||||
switch (ptNGPar->dCbtj) {
|
||||
case 2:
|
||||
ptNGPar->dPb = 101325;
|
||||
ptNGPar->dTb = 273.15;
|
||||
ptFlowPar->dPb_M = (101325);
|
||||
ptFlowPar->dTb_M = (273.15);
|
||||
break;
|
||||
case 1:
|
||||
|
||||
ptNGPar->dPb = (101325);
|
||||
ptNGPar->dTb = (288.15);
|
||||
ptFlowPar->dPb_M = (101325);
|
||||
ptFlowPar->dTb_M = (288.15);
|
||||
break;
|
||||
case 0:
|
||||
|
||||
ptNGPar->dPb = (101325);
|
||||
ptNGPar->dTb = (293.15);
|
||||
ptFlowPar->dPb_M = (101325);
|
||||
ptFlowPar->dTb_M = (293.15);
|
||||
break;
|
||||
}
|
||||
|
||||
double ngArray[NUMBEROFCOMPONENTS];
|
||||
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
ngArray[i] = ptFlowPar->dNG_Compents[i] / 100;
|
||||
ptNGPar->adMixture[i] = ngArray[i];
|
||||
}
|
||||
Crit(ptNGPar, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dFpv = ptNGPar->dFpv;
|
||||
|
||||
// 1. <20><><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>
|
||||
|
||||
ptFlowPar->dOrificeD = ptFlowPar->dOrificeD * (
|
||||
1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dOrificeMaterial) * (ptFlowPar->dTf - 293.15));
|
||||
ptFlowPar->dPipeD = ptFlowPar->dPipeD * (1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dPipeMaterial) * (
|
||||
ptFlowPar->dTf - 293.15));
|
||||
ptFlowPar->dBeta = ptFlowPar->dOrificeD / ptFlowPar->dPipeD;
|
||||
|
||||
ptFlowPar->dE = calculateE(ptFlowPar->dBeta);
|
||||
ptFlowPar->dFG = calculateFG(ptNGPar->dRD_Real);
|
||||
ptFlowPar->dFT = calculateFT(ptFlowPar->dTb_M, ptFlowPar->dTf);
|
||||
|
||||
ptFlowPar->dKappa = calculateKappa(ptNGPar->dZf);
|
||||
ptFlowPar->dDViscosity = Dlndjs(ptFlowPar->dPf / 1e6, ptFlowPar->dTf);
|
||||
ptFlowPar->dDExpCoefficient = calculateEpsilon(ptFlowPar->dPf, ptFlowPar->dDp,
|
||||
ptFlowPar->dBeta, ptFlowPar->dKappa);
|
||||
|
||||
double D = ptFlowPar->dPipeD / 1000.0; // <20>ܵ<EFBFBD><DCB5>ھ<EFBFBD>(m)
|
||||
double d = ptFlowPar->dOrificeD / 1000.0; // <20>װ<EFBFBD><EFBFBD>(m)
|
||||
double beta = ptFlowPar->dBeta;
|
||||
double P1 = ptFlowPar->dPf; // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>(Pa)
|
||||
double deltaP = ptFlowPar->dDp; // <20><>ѹ(Pa)
|
||||
double Tf = ptFlowPar->dTf;
|
||||
|
||||
// 2. <20><>ʼ<EFBFBD><CABC>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>㣨<EFBFBD><E3A3A8><EFBFBD><EFBFBD><EFBFBD>ʼC=0.6<EFBFBD><EFBFBD>
|
||||
double C_initial = 0.6;
|
||||
double Qf_initial = (C_initial * ptFlowPar->dE * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4)
|
||||
* sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4))));
|
||||
ptFlowPar->dVFlowf = Qf_initial; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||||
|
||||
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double tolerance = 1e-6;
|
||||
int maxIter = 100;
|
||||
double currentC = C_initial;
|
||||
double currentReD = calculateReD(Qf_initial, D, ptNGPar->dRhof, ptFlowPar->dDViscosity);
|
||||
int iter = 0;
|
||||
double prevC = 0;
|
||||
|
||||
// 4. <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
|
||||
do {
|
||||
prevC = currentC;
|
||||
|
||||
// 4.1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>C<EFBFBD><43>GB/T 21446-2008 <20><>¼A<C2BC><41>
|
||||
currentC = calculateCd(beta, currentReD, ptFlowPar->dPipeD, ptFlowPar->dPtmode);
|
||||
|
||||
// 4.2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double Qf = (currentC * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4)
|
||||
* sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4))));
|
||||
ptFlowPar->dVFlowf = Qf;
|
||||
|
||||
// 4.3 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>
|
||||
currentReD = calculateReD(Qf, D, ptNGPar->dRhof, ptFlowPar->dDViscosity);
|
||||
|
||||
iter++;
|
||||
if (iter > maxIter) {
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
}
|
||||
} while (fabs(currentC - prevC) / currentC > tolerance);
|
||||
|
||||
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD>
|
||||
// <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵֲڶ<D6B2><DAB6><EFBFBD><EFBFBD><EFBFBD>
|
||||
double K = calculateK(ptFlowPar->dPipeType); // <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʹܵ<CAB9><DCB5><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
double G_me = calculateRoughnessFactor(ptFlowPar->dPipeD, K, currentC);
|
||||
double C_corrected = currentC * G_me;
|
||||
|
||||
ptFlowPar->dCd = C_corrected;
|
||||
ptFlowPar->dRoughNessPipe = G_me;
|
||||
ptFlowPar->dRnPipe = currentReD;
|
||||
|
||||
// 6. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(1)<29><>
|
||||
double Qn = ptFlowPar->dVFlowf * (ptFlowPar->dFpv * ptFlowPar->dFpv * P1 / ptFlowPar->dPb_M)
|
||||
* (ptFlowPar->dTb_M) / Tf;
|
||||
ptFlowPar->dVFlowb = Qn;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dMFlowb = ptFlowPar->dVFlowb * ptNGPar->dRhob;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dEFlowb = ptFlowPar->dVFlowb * ptNGPar->dHhvMol;
|
||||
// <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dVelocityFlow = ptFlowPar->dVFlowf / (M_PI * pow((ptFlowPar->dPipeD / 2000), 2));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="tempCaiLiao"></param>
|
||||
/// <returns></returns>
|
||||
double CaiLiaoPzxs(int tempCaiLiao) {
|
||||
double CaiLiaoPzxs = 0;
|
||||
// <20>װ<EFBFBD>ܵ<CDB9><DCB5><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
// 0 A3<41><33>15<31>Ÿ<EFBFBD>
|
||||
// 1 10 <20>Ÿ<EFBFBD>
|
||||
// 2 20 <20>Ÿ<EFBFBD>
|
||||
// 3 45 <20>Ÿ<EFBFBD>
|
||||
// 4 1 Cr13?2Cr13
|
||||
// 5 Cr17
|
||||
// 6 12 CrMoV
|
||||
// 7 10 CrMo910
|
||||
// 8 Cr6SiMo
|
||||
// 9 X20CrMoV121
|
||||
// 10 1 Cr18Ni9Ti
|
||||
// 11 <20><>̼ͨ<CDA8><CCBC>
|
||||
// 12 <20><>ҵ<EFBFBD><D2B5>ͭ
|
||||
// 13 <20><>ͭ
|
||||
// 14 <20><>ͭ
|
||||
switch (tempCaiLiao) {
|
||||
case 0:
|
||||
CaiLiaoPzxs = 11.75;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
CaiLiaoPzxs = 11.6;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
CaiLiaoPzxs = 11.16;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
CaiLiaoPzxs = 11.59;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
CaiLiaoPzxs = 10.5;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
CaiLiaoPzxs = 10.0;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
CaiLiaoPzxs = 10.2;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
CaiLiaoPzxs = 15.5;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
CaiLiaoPzxs = 11.5;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
CaiLiaoPzxs = 10.8;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
CaiLiaoPzxs = 16.6;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
CaiLiaoPzxs = 11.4;
|
||||
break;
|
||||
|
||||
case 12:
|
||||
CaiLiaoPzxs = 16.55;
|
||||
break;
|
||||
|
||||
case 13:
|
||||
CaiLiaoPzxs = 17.8;
|
||||
break;
|
||||
|
||||
case 14:
|
||||
CaiLiaoPzxs = 17.2;
|
||||
break;
|
||||
}
|
||||
return CaiLiaoPzxs;
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դֲڶ<EFBFBD> K (GB/T 21446-2008 <EFBFBD><EFBFBD>¼C)
|
||||
* @param dPipeType <EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> K (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4λС<EFBFBD><EFBFBD>)
|
||||
*/
|
||||
double calculateK(int dPipeType) {
|
||||
double Jdccd;
|
||||
switch (dPipeType) {
|
||||
case 0:
|
||||
Jdccd = 0.029;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
Jdccd = 0.075;
|
||||
break;
|
||||
case 4:
|
||||
Jdccd = 0.1;
|
||||
break;
|
||||
case 5:
|
||||
Jdccd = 0.15;
|
||||
break;
|
||||
case 6:
|
||||
Jdccd = 1;
|
||||
break;
|
||||
case 7:
|
||||
Jdccd = 2.1;
|
||||
break;
|
||||
case 8:
|
||||
Jdccd = 0.04;
|
||||
break;
|
||||
case 9:
|
||||
Jdccd = 0.15;
|
||||
break;
|
||||
case 10:
|
||||
Jdccd = 0.13;
|
||||
break;
|
||||
case 11:
|
||||
Jdccd = 0.25;
|
||||
break;
|
||||
default:
|
||||
// <20><><EFBFBD><EFBFBD>δ֪<CEB4><D6AA><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ѡ<EFBFBD><D1A1>
|
||||
fprintf(stderr, "δ֪<EFBFBD>Ĺܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n", dPipeType);
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
return Jdccd;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> G_me (GB/T 21446-2008 <EFBFBD><EFBFBD>¼C)
|
||||
* @param D_pipe <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD> (mm)
|
||||
* @param K <EFBFBD><EFBFBD><EFBFBD>Դֲڶ<EFBFBD> (mm)
|
||||
* @param C δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> G_me (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4λС<EFBFBD><EFBFBD>)
|
||||
*/
|
||||
double calculateRoughnessFactor(double D_pipe, double K, double C) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դֲڶ<D6B2> K/D
|
||||
double K_over_D = K / D_pipe;
|
||||
|
||||
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
||||
if (K_over_D <= 0.0004) {
|
||||
return 1.0000;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double term = (K_over_D * 1e6) - 400; // ת<><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (term < 0) {
|
||||
fprintf(stderr, "K/D <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>÷<EFBFBD>Χ\n");
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
|
||||
double G_me = 1 + (0.011 / C) * sqrt(term);
|
||||
return G_me; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1>
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD>㽥<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><EFBFBD>E<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(8)<EFBFBD><EFBFBD>
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><EFBFBD>E
|
||||
*/
|
||||
double calculateE(double beta) {
|
||||
return 1 / sqrt(1 - pow(beta, 4));
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><EFBFBD>FG<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(9)<EFBFBD><EFBFBD>
|
||||
* @param dRD_Real <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><EFBFBD>FG
|
||||
*/
|
||||
double calculateFG(double dRD_Real) {
|
||||
return 1 / sqrt(dRD_Real);
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><EFBFBD>FT<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(10)<EFBFBD><EFBFBD>
|
||||
* @param dTb_M <EFBFBD>α<EFBFBD><EFBFBD>¶<EFBFBD>(K)
|
||||
* @param dTf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K)
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><EFBFBD>FT
|
||||
*/
|
||||
double calculateFT(double dTb_M, double dTf) {
|
||||
return sqrt(dTb_M / dTf);
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>GB/T 21446-2008 ʽ(11)<EFBFBD><EFBFBD>
|
||||
* @param dPf <EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa)
|
||||
* @param dDp <EFBFBD><EFBFBD>ѹ(Pa)
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param dKappa <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateEpsilon(double dPf, double dDp, double beta, double dKappa) {
|
||||
double tau = (dPf - dDp) / dPf; // ѹ<><D1B9><EFBFBD><EFBFBD>
|
||||
double epsilon = 1 - (0.351 + 0.256 * pow(beta, 4) + 0.93 * pow(beta, 8)) * (1 - pow(tau, 1 / dKappa));
|
||||
return epsilon;
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>GB/T 21446-2008 <EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param dZf <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateKappa(double dZf) {
|
||||
// <20><><EFBFBD>ƹ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱȺ<C8B1>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double gamma = 1.3; // <20><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>ȱȣ<C8B1>Cp/Cv<43><76>1.3<EFBFBD><EFBFBD>
|
||||
double Z = dZf; // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double kappa = gamma / (1 - (gamma - 1) * (1 / Z - 1));
|
||||
return kappa;
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>ReD<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(5)<EFBFBD><EFBFBD>
|
||||
* @param Qf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||||
* @param D <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD>(m)
|
||||
* @param rho <EFBFBD>ܶ<EFBFBD>(kg/m3)
|
||||
* @param mu <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>(Pa<EFBFBD><EFBFBD>s)
|
||||
* @return <EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateReD(double Qf, double D, double rho, double mu) {
|
||||
return (4 * Qf * rho) / (M_PI * D * mu);
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C<EFBFBD><EFBFBD>GB/T 21446-2008 <EFBFBD><EFBFBD>¼A<EFBFBD><EFBFBD>
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param ReD <EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
|
||||
* @param D_mm <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD>(mm)
|
||||
* @param ptMode ȡѹ<EFBFBD><EFBFBD>ʽ
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C
|
||||
*/
|
||||
double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||||
double L1, L2;
|
||||
// <20><><EFBFBD><EFBFBD>ȡѹ<C8A1><D1B9>ʽȷ<CABD><C8B7>L1/L2<4C><32><EFBFBD>ǽ<EFBFBD>ȡѹ<C8A1><D1B9>
|
||||
switch (ptMode) {
|
||||
case 1: // <20>ǽ<EFBFBD>ȡѹ
|
||||
L1 = L2 = 0; // D<><44>λΪmm
|
||||
break;
|
||||
case 0: // <20><><EFBFBD><EFBFBD>ȡѹ
|
||||
L1 = L2 = 25.4 / D_mm;
|
||||
break;
|
||||
case 2: // D-D/2ȡѹ
|
||||
L1 = 1.0;
|
||||
L2 = 0.47;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>ȡѹ<EFBFBD><EFBFBD>ʽ: %d\n", ptMode);
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
|
||||
double term1 = 0.5961 + 0.0261 * pow(beta, 2) - 0.216 * pow(beta, 8);
|
||||
double term2 = 0.000521 * pow(1e6 * beta / ReD, 0.7);
|
||||
double A = pow(19000 * beta / ReD, 0.8);
|
||||
double term3 = (0.0188 + 0.0063 * A) * pow(beta, 3.5) * pow(1e6 / ReD, 0.3);
|
||||
double term4 = (0.043 + 0.08 * exp(-10 * L1) - 0.123 * exp(-7 * L1))
|
||||
* (1 - 0.11 * A) * pow(beta, 4) / (1 - pow(beta, 4));
|
||||
double term5 = -0.031 * (2 * L2 / (1 - beta) - 0.8 * pow(2 * L2 / (1 - beta), 1.1))
|
||||
* pow(beta, 1.3);
|
||||
|
||||
double Cd = term1 + term2 + term3 + term4 + term5;
|
||||
|
||||
// <20><EFBFBD><71.12mm<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (D_mm < 71.12) {
|
||||
Cd += 0.011 * (0.75 - beta) * (2.8 - D_mm / 25.4);
|
||||
}
|
||||
return Cd;
|
||||
}
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>Ȧ<EFBFBD>
|
||||
* @param tempP_jy ѹ<EFBFBD><EFBFBD>(MPa)
|
||||
* @param tempT <EFBFBD>¶<EFBFBD>(K)
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>(Pa<EFBFBD><EFBFBD>s)
|
||||
*/
|
||||
double Dlndjs(double tempP_jy, double tempT) {
|
||||
double Dlndjs_Dlnd_Data[8][11] = {
|
||||
{976, 991, 1014, 1044, 1073, 1114, 1156, 1207, 1261, 1331, 1405},
|
||||
{1027, 1040, 1063, 1091, 1118, 1151, 1185, 1230, 1276, 1331, 1389},
|
||||
{1071, 1082, 1106, 1127, 1149, 1180, 1211, 1250, 1289, 1335, 1383},
|
||||
{1123, 1135, 1153, 1174, 1195, 1224, 1253, 1289, 1324, 1366, 1409},
|
||||
{1167, 1178, 1196, 1216, 1236, 1261, 1287, 1318, 1350, 1385, 1421},
|
||||
{1213, 1224, 1239, 1257, 1275, 1297, 1320, 1346, 1373, 1403, 1435},
|
||||
{1260, 1270, 1281, 1297, 1313, 1333, 1352, 1374, 1396, 1424, 1451},
|
||||
{1303, 1312, 1323, 1338, 1352, 1372, 1391, 1412, 1432, 1456, 1482}
|
||||
};
|
||||
|
||||
double Dlndjs_Dlnd_T[8] = {
|
||||
-15 + 273.15, 0 + 273.15, 15 + 273.15, 30 + 273.15,
|
||||
45 + 273.15, 60 + 273.15, 75 + 273.15, 90 + 273.15
|
||||
};
|
||||
|
||||
double Dlndjs_Dlnd_P[11] = {0.1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
|
||||
|
||||
double s1, s2, ky, kx;
|
||||
int i, m = 0, n = 0;
|
||||
|
||||
if (tempT < Dlndjs_Dlnd_T[0]) {
|
||||
tempT = Dlndjs_Dlnd_T[0];
|
||||
}
|
||||
if (tempT > Dlndjs_Dlnd_T[7]) {
|
||||
tempT = Dlndjs_Dlnd_T[7];
|
||||
}
|
||||
if (tempP_jy < Dlndjs_Dlnd_P[0]) {
|
||||
tempP_jy = Dlndjs_Dlnd_P[0];
|
||||
}
|
||||
if (tempP_jy > Dlndjs_Dlnd_P[10]) {
|
||||
tempP_jy = Dlndjs_Dlnd_P[10];
|
||||
}
|
||||
|
||||
for (i = 0; i <= 6; i++) {
|
||||
if (tempT >= Dlndjs_Dlnd_T[i] && tempT <= Dlndjs_Dlnd_T[i + 1]) {
|
||||
m = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i <= 9; i++) {
|
||||
if (tempP_jy >= Dlndjs_Dlnd_P[i] && tempP_jy <= Dlndjs_Dlnd_P[i + 1]) {
|
||||
n = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Dlndjs_Dlnd_P[n + 1] - Dlndjs_Dlnd_P[n] != 0) {
|
||||
ky = (tempP_jy - Dlndjs_Dlnd_P[n]) / (Dlndjs_Dlnd_P[n + 1] - Dlndjs_Dlnd_P[n]);
|
||||
} else {
|
||||
ky = 0;
|
||||
}
|
||||
|
||||
if (Dlndjs_Dlnd_T[m + 1] - Dlndjs_Dlnd_T[m] != 0) {
|
||||
kx = (tempT - Dlndjs_Dlnd_T[m]) / (Dlndjs_Dlnd_T[m + 1] - Dlndjs_Dlnd_T[m]);
|
||||
} else {
|
||||
kx = 0;
|
||||
}
|
||||
|
||||
s1 = Dlndjs_Dlnd_Data[m][n] + (Dlndjs_Dlnd_Data[m][n + 1] - Dlndjs_Dlnd_Data[m][n]) * ky;
|
||||
s2 = Dlndjs_Dlnd_Data[m + 1][n] + (Dlndjs_Dlnd_Data[m + 1][n + 1] - Dlndjs_Dlnd_Data[m + 1][n]) * ky;
|
||||
return (s1 + (s2 - s1) * kx) / 100000.0;
|
||||
}
|
@ -1,74 +1,71 @@
|
||||
#ifndef _FLOWCAL_H
|
||||
#define _FLOWCAL_H
|
||||
#ifndef FLOWCAL_H
|
||||
#define FLOWCAL_H
|
||||
|
||||
#include "NGCal.h"
|
||||
#include "Detail.h"
|
||||
#include "NGCal.h"
|
||||
|
||||
/* 天然气物性参数的数据结构 */
|
||||
typedef struct FlowParSTRUCT
|
||||
{
|
||||
//流量计算输入参数信息
|
||||
|
||||
int dCbtj; //计量参比条件压力
|
||||
double dPb_M; //计量参比条件压力
|
||||
double dTb_M; //计量参比条件温度
|
||||
double dPb_E; //燃烧参比条件压力
|
||||
double dTb_E; //燃烧参比条件温度
|
||||
double dPatm;//当地大气压 Pa
|
||||
double dNG_Compents[21] ;//天然气组分
|
||||
|
||||
int dMeterType;// 流量计类别
|
||||
int dCoreType;//节流装置类型
|
||||
int dPtmode; //取压方式
|
||||
int dPipeType; // 管道类型
|
||||
double dPipeD; //管道内径 mm
|
||||
int dPipeMaterial; //管道材料
|
||||
/* <20><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ */
|
||||
typedef struct FlowParSTRUCT {
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
double dOrificeD; //孔板孔径mm
|
||||
int dOrificeMaterial; //孔板材料
|
||||
|
||||
double dPf;//输入压力 Pa
|
||||
int dPfType; //压力类型
|
||||
double dTf; //输入温度 K
|
||||
double dDp; //输入差压 Pa
|
||||
|
||||
double dMeterFactor;//仪表系数
|
||||
double dPulseNum;//脉冲数
|
||||
|
||||
int dCbtj; //<2F><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
double dPb_M; //<2F><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
double dTb_M; //<2F><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
double dPb_E; //ȼ<>ղα<D5B2><CEB1><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>
|
||||
double dTb_E; //ȼ<>ղα<D5B2><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>
|
||||
double dPatm; //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>ѹ Pa
|
||||
double dNG_Compents[21]; //<2F><>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//流量计算输出参数
|
||||
double dE; //'求渐近速度系数 E
|
||||
double dFG; //'求相对密度系数 FG
|
||||
double dFT; //'求流动温度系数 'FT
|
||||
double dDViscosity; //'求动力粘度 dlnd
|
||||
double dDExpCoefficient; //'求可膨胀系数
|
||||
double dRnPipe; //'管道雷诺数
|
||||
double dBk; //'孔板锐利度系数Bk
|
||||
double dRoughNessPipe; //'管道粗糙度系数 Gme
|
||||
double dCd; //'修正后的流出系数
|
||||
double dCdCorrect; //'修正后的流出系数
|
||||
double dCdNozell; //'喷嘴的流出系数
|
||||
double dVFlowb;//'标况体积流量 Nm3/s
|
||||
double dVFlowf; //'工况体积流量 m3/s
|
||||
double dMFlowb;//'标况质量流量 t/s
|
||||
double dEFlowb;//'标况能量流量 MJ/s
|
||||
double dVelocityFlow;//'管道内天然气流速
|
||||
double dPressLost;//'压力损失
|
||||
double dBeta;//'直径比
|
||||
double dKappa;//'等熵指数
|
||||
double dFpv;//超压缩因子
|
||||
|
||||
|
||||
int dMeterType; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int dCoreType; //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int dPtmode; //ȡѹ<C8A1><D1B9>ʽ
|
||||
int dPipeType; // <20>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dPipeD; //<2F>ܵ<EFBFBD><DCB5>ھ<EFBFBD> mm
|
||||
int dPipeMaterial; //<2F>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
double dOrificeD; //<2F>װ<EFBFBD><EFBFBD>mm
|
||||
int dOrificeMaterial; //<2F>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>
|
||||
|
||||
double dPf; //<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> Pa
|
||||
int dPfType; //ѹ<><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dTf; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD> K
|
||||
double dDp; //<2F><><EFBFBD><EFBFBD><EFBFBD>ѹ Pa
|
||||
|
||||
double dMeterFactor; //<2F>DZ<EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dPulseNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dE; //'<27><EFBFBD><F3BDA5BD>ٶ<EFBFBD>ϵ<EFBFBD><CFB5> E
|
||||
double dFG; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><CFB5> FG
|
||||
double dFT; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><CFB5> 'FT
|
||||
double dDViscosity; //'<27><><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3> dlnd
|
||||
double dDExpCoefficient; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dRnPipe; //'<27>ܵ<EFBFBD><DCB5><EFBFBD>ŵ<EFBFBD><C5B5>
|
||||
double dBk; //'<27>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Bk
|
||||
double dRoughNessPipe; //'<27>ܵ<EFBFBD><DCB5>ֲڶ<D6B2>ϵ<EFBFBD><CFB5> Gme
|
||||
double dCd; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dCdCorrect; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dCdNozell; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
double dVFlowb; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Nm3/s
|
||||
double dVFlowf; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> m3/s
|
||||
double dMFlowb; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> t/s
|
||||
double dEFlowb; //'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MJ/s
|
||||
double dVelocityFlow; //'<27>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double dPressLost; //'ѹ<><D1B9><EFBFBD><EFBFBD>ʧ
|
||||
double dBeta; //'ֱ<><D6B1><EFBFBD><EFBFBD>
|
||||
double dKappa; //'<27><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
double dFpv; //<2F><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
} FlowParSTRUCT;
|
||||
|
||||
double CaiLiaoPzxs(int tempCaiLiao);
|
||||
|
||||
double calculateK(int dPipeType);
|
||||
|
||||
double calculateRoughnessFactor(double D_pipe, double K, double C);
|
||||
|
||||
void thermalExpansionCorrection(double dOrificeMaterial, double dOrificeD,
|
||||
double dPipeMaterial, double dPipeD,
|
||||
double dTf, double correctedValues[3]);
|
||||
void thermalExpansionCorrection(double dOrificeMaterial, double dOrificeD,
|
||||
double dPipeMaterial, double dPipeD,
|
||||
double dTf, double correctedValues[3]);
|
||||
|
||||
double calculateE(double beta);
|
||||
|
||||
@ -84,10 +81,10 @@ double calculateReD(double Qf, double D, double rho, double mu);
|
||||
|
||||
double calculateCd(double beta, double ReD, double D_mm, int ptMode);
|
||||
|
||||
|
||||
|
||||
double Dlndjs(double tempP_jy, double tempT);
|
||||
|
||||
void OFlowCal(FlowParSTRUCT* ptFlowPar, NGParSTRUCT* ptNGPar);
|
||||
void OFlowCal(FlowParSTRUCT *ptFlowPar, NGParSTRUCT *ptNGPar);
|
||||
|
||||
#endif
|
||||
|
||||
|
121
User/NG/NGCal.c
121
User/NG/NGCal.c
@ -1,86 +1,89 @@
|
||||
#include "NGCal.h"
|
||||
#include "Therm.h"
|
||||
#include "NGCal.h"
|
||||
#include "Therm.h"
|
||||
#include "Detail.h"
|
||||
#include "String.h"
|
||||
static Therm *ptTherm;
|
||||
static Detail *ptDetail;
|
||||
int NGCal_Init(void)
|
||||
{
|
||||
ptDetail = (Detail *)malloc(sizeof(Detail));
|
||||
if (NULL == ptDetail )
|
||||
{
|
||||
return MEMORY_ALLOCATION_ERROR;
|
||||
|
||||
int NGCal_Init(NGParSTRUCT *ptNGPar) {
|
||||
//ptDetail = (Detail *)malloc(sizeof(Detail));
|
||||
ptDetail = Detail_Construct();
|
||||
if (NULL == ptDetail) {
|
||||
return MEMORY_ALLOCATION_ERROR;
|
||||
}
|
||||
ptTherm = (Therm *)malloc(sizeof(Therm));
|
||||
if (NULL == ptTherm )
|
||||
{
|
||||
return MEMORY_ALLOCATION_ERROR;
|
||||
// Detail_Run(ptDetail,ptNGPar);
|
||||
// Detail_compositionchange(ptDetail,ptNGPar);
|
||||
ptTherm = (Therm *) malloc(sizeof(Therm));
|
||||
Therm_Init(ptTherm);
|
||||
if (NULL == ptTherm) {
|
||||
return MEMORY_ALLOCATION_ERROR;
|
||||
}
|
||||
return NGCal_NGCal;
|
||||
|
||||
return NGCal_NGCal;
|
||||
}
|
||||
int NGCal_UnInit(void)
|
||||
{
|
||||
if (ptDetail) free( ptDetail);
|
||||
if (ptTherm) free (ptTherm);
|
||||
return 0;
|
||||
|
||||
int NGCal_UnInit(void) {
|
||||
if (ptDetail) free(ptDetail);
|
||||
if (ptTherm) free(ptTherm);
|
||||
return 0;
|
||||
}
|
||||
double SOS(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
if (NULL == ptDetail || NULL == ptTherm)
|
||||
{
|
||||
NGCal_UnInit();
|
||||
NGCal_Init();
|
||||
|
||||
double SOS(NGParSTRUCT *ptNGPar) {
|
||||
if (NULL == ptDetail || NULL == ptTherm) {
|
||||
NGCal_UnInit();
|
||||
NGCal_Init(ptNGPar);
|
||||
}
|
||||
ptTherm->Run(ptTherm,ptNGPar, ptDetail);
|
||||
Therm_Run(ptTherm, ptNGPar, ptDetail);
|
||||
ptNGPar->dCstar = 0.0;
|
||||
return ptNGPar->dSOS;
|
||||
}
|
||||
double Crit(NGParSTRUCT *ptNGPar, double dPlenumVelocity)
|
||||
{
|
||||
|
||||
double Crit(NGParSTRUCT *ptNGPar, double dPlenumVelocity) {
|
||||
double DH, DDH, S, H;
|
||||
double tolerance = 1.0;
|
||||
double R, P, T, Z;
|
||||
int i;
|
||||
if (NULL == ptDetail || NULL == ptTherm)
|
||||
{
|
||||
NGCal_UnInit();
|
||||
if (NGCal_NGCal != NGCal_Init())
|
||||
{
|
||||
ptNGPar->lStatus = MEMORY_ALLOCATION_ERROR;
|
||||
return 0.0;
|
||||
double tolerance = 1.0;
|
||||
double R, P, T, Z;
|
||||
int i;
|
||||
if (NULL == ptDetail || NULL == ptTherm) {
|
||||
NGCal_UnInit();
|
||||
if (NGCal_NGCal != NGCal_Init(ptNGPar)) {
|
||||
ptNGPar->lStatus = MEMORY_ALLOCATION_ERROR;
|
||||
return 0.0;
|
||||
}
|
||||
}
|
||||
ptTherm->Run(ptTherm,ptNGPar, ptDetail);
|
||||
|
||||
|
||||
Therm_Run(ptTherm, ptNGPar, ptDetail);
|
||||
|
||||
DH = (ptNGPar->dSOS * ptNGPar->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0;
|
||||
S = ptNGPar->dS;
|
||||
H = ptNGPar->dH;
|
||||
R = ptNGPar->dRhof;
|
||||
P = ptNGPar->dPf;
|
||||
Z = ptNGPar->dZf;
|
||||
T = ptNGPar->dTf;
|
||||
H = ptNGPar->dH;
|
||||
R = ptNGPar->dRhof;
|
||||
P = ptNGPar->dPf;
|
||||
Z = ptNGPar->dZf;
|
||||
T = ptNGPar->dTf;
|
||||
DDH = 10.0;
|
||||
for (i = 1; i < MAX_NUM_OF_ITERATIONS; i++)
|
||||
{
|
||||
ptTherm->HS_Mode(ptTherm,ptNGPar, ptDetail, H - DH, S, true);
|
||||
ptTherm->Run(ptTherm,ptNGPar, ptDetail);
|
||||
for (i = 1; i < MAX_NUM_OF_ITERATIONS; i++) {
|
||||
Therm_HS_Mode(ptTherm, ptNGPar, ptDetail, H - DH, S, true);
|
||||
Therm_Run(ptTherm, ptNGPar, ptDetail);
|
||||
DDH = DH;
|
||||
DH = (ptNGPar->dSOS * ptNGPar->dSOS - dPlenumVelocity * dPlenumVelocity) / 2.0;
|
||||
if (fabs(DDH - DH) < tolerance) break;
|
||||
}
|
||||
ptNGPar->dCstar = (ptNGPar->dRhof * ptNGPar->dSOS) / sqrt(R * P * Z);
|
||||
ptNGPar->dPf = P;
|
||||
ptNGPar->dTf = T;
|
||||
ptTherm->Run(ptTherm,ptNGPar, ptDetail);
|
||||
ptNGPar->dTf = T;
|
||||
Therm_Run(ptTherm, ptNGPar, ptDetail);
|
||||
return ptNGPar->dCstar;
|
||||
}
|
||||
double Cperf(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
double k, root, exponent;
|
||||
k = ptNGPar->dKappa;
|
||||
root = 2.0 / (k + 1.0);
|
||||
exponent = (k + 1.0) / (k - 1.0);
|
||||
return(sqrt(k * pow(root, exponent)));
|
||||
|
||||
double Cperf(NGParSTRUCT *ptNGPar) {
|
||||
double k, root, exponent;
|
||||
k = ptNGPar->dKappa;
|
||||
root = 2.0 / (k + 1.0);
|
||||
exponent = (k + 1.0) / (k - 1.0);
|
||||
return (sqrt(k * pow(root, exponent)));
|
||||
}
|
||||
double CRi(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
return (Cperf(ptNGPar) / sqrt(ptNGPar->dZf));
|
||||
|
||||
double CRi(NGParSTRUCT *ptNGPar) {
|
||||
return (Cperf(ptNGPar) / sqrt(ptNGPar->dZf));
|
||||
}
|
||||
|
112
User/NG/NGCal.h
112
User/NG/NGCal.h
@ -1,5 +1,5 @@
|
||||
/*************************************************************************
|
||||
* 文件: NGCal.h
|
||||
* <EFBFBD>ļ<EFBFBD>: NGCal.h
|
||||
|
||||
**************************************************************************/
|
||||
|
||||
@ -8,13 +8,13 @@
|
||||
|
||||
|
||||
|
||||
/* 其他包含文件 */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> */
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* 状态码 */
|
||||
/* ״̬<EFBFBD><EFBFBD> */
|
||||
#define NORMAL 9000
|
||||
#define NGCal_NGCal 9001
|
||||
#define MEMORY_ALLOCATION_ERROR 9002
|
||||
@ -26,73 +26,73 @@
|
||||
#define FLOW_CALC_DIEDAI_ERROR 9008
|
||||
|
||||
|
||||
/* 组分数 */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define NUMBEROFCOMPONENTS 21
|
||||
|
||||
#define M_PI 3.14159265358972 //圆周率
|
||||
#define M_PI 3.14159265897932
|
||||
|
||||
/* 搜索例程中的最大尝试次数 */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define MAX_NUM_OF_ITERATIONS 100
|
||||
|
||||
/* 默认容差限制 */
|
||||
/* Ĭ<EFBFBD><EFBFBD><EFBFBD>ݲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define P_CHG_TOL 0.001 /* 0.001 Pa */
|
||||
#define T_CHG_TOL 0.001 /* 0.001 开尔文 */
|
||||
#define T_CHG_TOL 0.001 /* 0.001 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
|
||||
/* 最大允许P和T */
|
||||
#define P_MAX 1.379e8 /* 最大压力(Pa) ~= 20,000 psi */
|
||||
#define P_MIN 0.0 /* 最小压力 = 0 */
|
||||
#define T_MAX 473.15 /* 最高温度(K) ~= 392 F */
|
||||
#define T_MIN 143.0 /* 最低温度(K) ~= -200 F */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD><EFBFBD>T */
|
||||
#define P_MAX 1.379e8 /* <EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa) ~= 20,000 psi */
|
||||
#define P_MIN 0.0 /* <EFBFBD><EFBFBD>Сѹ<EFBFBD><EFBFBD> = 0 */
|
||||
#define T_MAX 473.15 /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K) ~= 392 F */
|
||||
#define T_MIN 143.0 /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K) ~= -200 F */
|
||||
|
||||
/* 通用气体常数,两种配置 */
|
||||
#define RGASKJ 8.314510e-3 /* 单位: kJ mol^-1 K^-1 */
|
||||
#define RGAS 8.314510 /* 单位: J mol^-1 K^-1 */
|
||||
/* ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>峣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
#define RGASKJ 8.314510e-3 /* <EFBFBD><EFBFBD>λ: kJ mol^-1 K^-1 */
|
||||
#define RGAS 8.314510 /* <EFBFBD><EFBFBD>λ: J mol^-1 K^-1 */
|
||||
|
||||
/* 天然气物性参数的数据结构 */
|
||||
/* <EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ */
|
||||
typedef struct tagNGParSTRUCT
|
||||
{
|
||||
long lStatus; /* 计算状态 */
|
||||
int bForceUpdate; /* 执行完整计算的信号 */
|
||||
double adMixture[21]; /* 摩尔分数组成 */
|
||||
int dCbtj; /* 参比条件 0 101.325MPa 20℃;1:101325MPa,15℃;2:101325MPa,0℃ */
|
||||
double dPb; /* 合同基准压力(Pa) */
|
||||
double dTb; /* 合同基准温度(K) */
|
||||
double dPf; /* 绝对压力(Pa) */
|
||||
double dTf; /* 流动温度(K) */
|
||||
long lStatus; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
|
||||
int bForceUpdate; /* ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD> */
|
||||
double adMixture[21]; /* Ħ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
int dCbtj; /* <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0 101.325MPa 20<32>棻1:101325MPa<50><61>15<31>棻2:101325MPa<50><61>0<EFBFBD><30> */
|
||||
double dPb; /* <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa) */
|
||||
double dTb; /* <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K) */
|
||||
double dPf; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa) */
|
||||
double dTf; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K) */
|
||||
|
||||
/* AGA 8 Detail方法的基本输出 */
|
||||
double dMrx; /* 混合物摩尔质量 */
|
||||
double dZb; /* 合同基准条件下的压缩系数 */
|
||||
double dZf; /* 流动条件下的压缩系数 */
|
||||
double dFpv; /* 超压缩系数 */
|
||||
double dDb; /* 合同基准条件下的摩尔密度(moles/dm3) */
|
||||
double dDf; /* 流动条件下的摩尔密度(moles/dm3) */
|
||||
double dRhob; /* 合同基准条件下的质量密度(kg/m3) */
|
||||
double dRhof; /* 流动条件下的质量密度(kg/m3) */
|
||||
double dRD_Ideal; /* 理想气体相对密度 */
|
||||
double dRD_Real; /* 真实气体相对密度 */
|
||||
/* AGA 8 Detail<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
double dMrx; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ħ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
double dZb; /* <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ѹ<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> */
|
||||
double dZf; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ѹ<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> */
|
||||
double dFpv; /* <EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> */
|
||||
double dDb; /* <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>Ħ<EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>(moles/dm3) */
|
||||
double dDf; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>Ħ<EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>(moles/dm3) */
|
||||
double dRhob; /* <EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>(kg/m3) */
|
||||
double dRhof; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>(kg/m3) */
|
||||
double dRD_Ideal; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD> */
|
||||
double dRD_Real; /* <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD> */
|
||||
|
||||
/* 附加输出 */
|
||||
double dHo; /* 理想气体比焓 */
|
||||
double dH; /* 真实气体比焓(J/kg) */
|
||||
double dS; /* 真实气体比熵(J/kg-mol.K) */
|
||||
double dCpi; /* 理想气体定压热容(J/kg-mol.K) */
|
||||
double dCp; /* 真实气体定压热容(J/kg-mol.K) */
|
||||
double dCv; /* 真实气体定容热容(J/kg-mol.K) */
|
||||
double dk; /* 比热比 */
|
||||
double dKappa; /* 等熵指数,用希腊字母kappa表示 */
|
||||
double dSOS; /* 声速(m/s) */
|
||||
double dCstar; /* 临界流系数C* */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
double dHo; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
double dH; /* <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg) */
|
||||
double dS; /* <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg-mol.K) */
|
||||
double dCpi; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嶨ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg-mol.K) */
|
||||
double dCp; /* <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>嶨ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg-mol.K) */
|
||||
double dCv; /* <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>嶨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(J/kg-mol.K) */
|
||||
double dk; /* <EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD> */
|
||||
double dKappa; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸkappa<EFBFBD><EFBFBD>ʾ */
|
||||
double dSOS; /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m/s) */
|
||||
double dCstar; /* <EFBFBD>ٽ<EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C* */
|
||||
|
||||
/*11062 计算高位发热量和低位发热量*/
|
||||
/*11062 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
|
||||
double dHhvMol; /*高位摩尔发热量*/
|
||||
double dLhvMol; /*低位摩尔发热量*/
|
||||
double dHhvMol; /*<EFBFBD><EFBFBD>λĦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
double dLhvMol; /*<EFBFBD><EFBFBD>λĦ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
|
||||
|
||||
} NGParSTRUCT;
|
||||
|
||||
/* 用于跟踪气体组分的枚举 */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ö<EFBFBD><EFBFBD> */
|
||||
enum gascomp {
|
||||
XiC1=0, XiN2, XiCO2, XiC2, XiC3,
|
||||
XiH2O, XiH2S, XiH2, XiCO, XiO2,
|
||||
@ -100,14 +100,14 @@ enum gascomp {
|
||||
XiNC7, XiNC8, XiNC9, XiNC10, XiHe, XiAr
|
||||
};
|
||||
|
||||
/* 初始化函数原型 */
|
||||
int AGA10_Init(void); /* 初始化 */
|
||||
int AGA10_UnInit(void); /* 反初始化 */
|
||||
/* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> */
|
||||
int NGCal_Init(NGParSTRUCT * ptNGPar); /* <20><>ʼ<EFBFBD><CABC> */
|
||||
int NGCal_UnInit(void); /* <20><><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> */
|
||||
|
||||
/* 基本VOS计算的函数原型 */
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>VOS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> */
|
||||
double SOS(NGParSTRUCT *);
|
||||
|
||||
/* C*计算的函数原型 */
|
||||
/* C*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD> */
|
||||
double Crit(NGParSTRUCT *, double);
|
||||
|
||||
#endif
|
||||
|
@ -2,21 +2,22 @@
|
||||
#include "Therm.h"
|
||||
#include "Detail.h"
|
||||
#include "FlowCal.h"
|
||||
#include "math.h"
|
||||
|
||||
void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
{
|
||||
|
||||
//大气压力转换成Pa
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Pa
|
||||
double tempPatm = ptFlowPar->dPatm*1000000;
|
||||
//压力转换成Pa
|
||||
//ѹ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Pa
|
||||
double tempPf = ptFlowPar->dPf*1000000;
|
||||
|
||||
//差压转换成Pa
|
||||
//<EFBFBD><EFBFBD>ѹת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Pa
|
||||
double tempDP = ptFlowPar->dDp*1000;
|
||||
//温度转换成K
|
||||
//<EFBFBD>¶<EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD>K
|
||||
double tempTf = ptFlowPar->dTf+273.15;
|
||||
|
||||
if (ptFlowPar->dPfType == 0) //0是表压
|
||||
if (ptFlowPar->dPfType == 0) //0<EFBFBD>DZ<EFBFBD>ѹ
|
||||
{
|
||||
ptFlowPar->dPf = tempPatm + tempPf;
|
||||
ptNGPar ->dPf=tempPatm + tempPf;
|
||||
@ -62,12 +63,12 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
ptNGPar->adMixture[i] = ngArray[i];
|
||||
|
||||
}
|
||||
Crit(ptNGPar,0); //计算天然气物性参数
|
||||
Crit(ptNGPar,0); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//开始计算孔板流量
|
||||
//<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dFpv=ptNGPar->dFpv;
|
||||
|
||||
// 1. 计算中间参数
|
||||
// 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ptFlowPar->dOrificeD = ptFlowPar->dOrificeD * (1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dOrificeMaterial) * (ptFlowPar->dTf - 293.15));
|
||||
ptFlowPar->dPipeD = ptFlowPar->dPipeD * (1 + 0.000001 * CaiLiaoPzxs(ptFlowPar->dPipeMaterial) * (ptFlowPar->dTf - 293.15));
|
||||
@ -82,20 +83,20 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
ptFlowPar->dDExpCoefficient = calculateEpsilon(ptFlowPar->dPf, ptFlowPar->dDp,
|
||||
ptFlowPar->dBeta, ptFlowPar->dKappa);
|
||||
|
||||
double D = ptFlowPar->dPipeD / 1000.0; // 管道内径(m)
|
||||
double d = ptFlowPar->dOrificeD / 1000.0; // 孔板孔径(m)
|
||||
double D = ptFlowPar->dPipeD / 1000.0; // <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD>(m)
|
||||
double d = ptFlowPar->dOrificeD / 1000.0; // <EFBFBD>װ<EFBFBD><EFBFBD>(m)
|
||||
double beta = ptFlowPar->dBeta;
|
||||
double P1 = ptFlowPar->dPf; // 绝对压力(Pa)
|
||||
double deltaP = ptFlowPar->dDp; // 差压(Pa)
|
||||
double P1 = ptFlowPar->dPf; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa)
|
||||
double deltaP = ptFlowPar->dDp; // <EFBFBD><EFBFBD>ѹ(Pa)
|
||||
double Tf = ptFlowPar->dTf;
|
||||
|
||||
// 2. 初始雷诺数估算(假设初始C=0.6)
|
||||
// 2. <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼC=0.6<EFBFBD><EFBFBD>
|
||||
double C_initial = 0.6;
|
||||
double Qf_initial = (C_initial * ptFlowPar->dE * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4)
|
||||
* sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4))));
|
||||
ptFlowPar->dVFlowf = Qf_initial; // 初始工况流量(m3/s)
|
||||
ptFlowPar->dVFlowf = Qf_initial; // <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||||
|
||||
// 3. 迭代参数
|
||||
// 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double tolerance = 1e-6;
|
||||
int maxIter = 100;
|
||||
double currentC = C_initial;
|
||||
@ -103,30 +104,30 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
int iter = 0;
|
||||
double prevC = 0;
|
||||
|
||||
// 4. 迭代循环
|
||||
// 4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD>
|
||||
do {
|
||||
prevC = currentC;
|
||||
|
||||
// 4.1 计算流出系数C(GB/T 21446-2008 附录A)
|
||||
// 4.1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C<EFBFBD><EFBFBD>GB/T 21446-2008 <20><>¼A<C2BC><41>
|
||||
currentC = calculateCd(beta, currentReD, ptFlowPar->dPipeD, ptFlowPar->dPtmode);
|
||||
|
||||
// 4.2 更新流量
|
||||
// 4.2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double Qf = (currentC * ptFlowPar->dDExpCoefficient * M_PI * pow(d, 2) / 4)
|
||||
* sqrt(2 * deltaP / (ptNGPar->dRhof * (1 - pow(beta, 4))));
|
||||
ptFlowPar->dVFlowf = Qf;
|
||||
|
||||
// 4.3 更新雷诺数
|
||||
// 4.3 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
|
||||
currentReD = calculateReD(Qf, D, ptNGPar->dRhof, ptFlowPar->dDViscosity);
|
||||
|
||||
iter++;
|
||||
if (iter > maxIter) {
|
||||
fprintf(stderr, "迭代未收敛,超过最大迭代次数!\n");
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n");
|
||||
}
|
||||
} while (fabs(currentC - prevC) / currentC > tolerance);
|
||||
|
||||
// 5. 保存最终结果
|
||||
// 在迭代计算流出系数后,添加粗糙度修正
|
||||
double K = calculateK(ptFlowPar->dPipeType); // 根据实际管道类型选择
|
||||
// 5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD>
|
||||
// <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double K = calculateK(ptFlowPar->dPipeType); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʹܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>
|
||||
double G_me = calculateRoughnessFactor(ptFlowPar->dPipeD, K, currentC);
|
||||
double C_corrected = currentC * G_me;
|
||||
|
||||
@ -134,33 +135,33 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
ptFlowPar->dRoughNessPipe = G_me;
|
||||
ptFlowPar->dRnPipe = currentReD;
|
||||
|
||||
// 6. 计算标况流量(GB/T 21446-2008 式(1))
|
||||
// 6. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(1)<29><>
|
||||
double Qn = ptFlowPar->dVFlowf * (ptFlowPar->dFpv * ptFlowPar->dFpv * P1 / ptFlowPar->dPb_M)
|
||||
* (ptFlowPar->dTb_M) / Tf;
|
||||
ptFlowPar->dVFlowb = Qn;
|
||||
|
||||
// 标况质量流量
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dMFlowb = ptFlowPar->dVFlowb * ptNGPar->dRhob;
|
||||
// 标况能量流量
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dEFlowb = ptFlowPar->dVFlowb * ptNGPar->dHhvMol;
|
||||
// 管道内天然气流速
|
||||
// <EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ptFlowPar->dVelocityFlow = ptFlowPar->dVFlowf / (M_PI * pow((ptFlowPar->dPipeD / 2000), 2));
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 材料膨胀系数计算
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// </summary>
|
||||
/// <param name="tempCaiLiao"></param>
|
||||
/// <returns></returns>
|
||||
double CaiLiaoPzxs(int tempCaiLiao)
|
||||
{
|
||||
double CaiLiaoPzxs = 0;
|
||||
// 孔板和管道材料的膨胀系数
|
||||
// 0 A3、15号钢
|
||||
// 1 10 号钢
|
||||
// 2 20 号钢
|
||||
// 3 45 号钢
|
||||
// <EFBFBD>װ<EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
|
||||
// 0 A3<EFBFBD><EFBFBD>15<EFBFBD>Ÿ<EFBFBD>
|
||||
// 1 10 <EFBFBD>Ÿ<EFBFBD>
|
||||
// 2 20 <EFBFBD>Ÿ<EFBFBD>
|
||||
// 3 45 <EFBFBD>Ÿ<EFBFBD>
|
||||
// 4 1 Cr13?2Cr13
|
||||
// 5 Cr17
|
||||
// 6 12 CrMoV
|
||||
@ -168,10 +169,10 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
// 8 Cr6SiMo
|
||||
// 9 X20CrMoV121
|
||||
// 10 1 Cr18Ni9Ti
|
||||
// 11 普通碳钢
|
||||
// 12 工业用铜
|
||||
// 13 黄铜
|
||||
// 14 红铜
|
||||
// 11 <EFBFBD><EFBFBD>̼ͨ<EFBFBD><EFBFBD>
|
||||
// 12 <EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>ͭ
|
||||
// 13 <EFBFBD><EFBFBD>ͭ
|
||||
// 14 <EFBFBD><EFBFBD>ͭ
|
||||
switch (tempCaiLiao)
|
||||
{
|
||||
case 0:
|
||||
@ -237,9 +238,9 @@ void OFlowCal(FlowParSTRUCT * ptFlowPar,NGParSTRUCT * ptNGPar)
|
||||
return CaiLiaoPzxs;
|
||||
}
|
||||
/**
|
||||
* 计算管道绝对粗糙度 K (GB/T 21446-2008 附录C)
|
||||
* @param dPipeType 管道类型
|
||||
* @return 粗糙度修正系数 K (保留4位小数)
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դֲڶ<EFBFBD> K (GB/T 21446-2008 <EFBFBD><EFBFBD>¼C)
|
||||
* @param dPipeType <EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> K (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4λС<EFBFBD><EFBFBD>)
|
||||
*/
|
||||
double calculateK(int dPipeType) {
|
||||
double Jdccd;
|
||||
@ -277,8 +278,8 @@ double calculateK(int dPipeType) {
|
||||
Jdccd = 0.25;
|
||||
break;
|
||||
default:
|
||||
// 处理未知类型(可选)
|
||||
fprintf(stderr, "未知的管道类型: %d\n", dPipeType);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ֪<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>
|
||||
fprintf(stderr, "δ֪<EFBFBD>Ĺܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: %d\n", dPipeType);
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
return Jdccd;
|
||||
@ -286,119 +287,119 @@ double calculateK(int dPipeType) {
|
||||
|
||||
|
||||
/**
|
||||
* 计算管道粗糙度修正系数 G_me (GB/T 21446-2008 附录C)
|
||||
* @param D_pipe 管道内径 (mm)
|
||||
* @param K 绝对粗糙度 (mm)
|
||||
* @param C 未修正的流出系数
|
||||
* @return 粗糙度修正系数 G_me (保留4位小数)
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> G_me (GB/T 21446-2008 <EFBFBD><EFBFBD>¼C)
|
||||
* @param D_pipe <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD> (mm)
|
||||
* @param K <EFBFBD><EFBFBD><EFBFBD>Դֲڶ<EFBFBD> (mm)
|
||||
* @param C δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD>ֲڶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD> G_me (<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4λС<EFBFBD><EFBFBD>)
|
||||
*/
|
||||
double calculateRoughnessFactor(double D_pipe, double K, double C) {
|
||||
// 计算相对粗糙度 K/D
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դֲڶ<EFBFBD> K/D
|
||||
double K_over_D = K / D_pipe;
|
||||
|
||||
// 判断是否需要修正
|
||||
// <EFBFBD>ж<EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (K_over_D <= 0.0004) {
|
||||
return 1.0000;
|
||||
}
|
||||
|
||||
// 计算修正项
|
||||
double term = (K_over_D * 1e6) - 400; // 转换为无量纲项
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double term = (K_over_D * 1e6) - 400; // ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (term < 0) {
|
||||
fprintf(stderr, "K/D 超出修正公式适用范围\n");
|
||||
fprintf(stderr, "K/D <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Χ\n");
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
|
||||
double G_me = 1 + (0.011 / C) * sqrt(term);
|
||||
return G_me; // 保留四位小数
|
||||
return G_me; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 计算渐近速度系数E(GB/T 21446-2008 式(8))
|
||||
* @param beta 直径比
|
||||
* @return 渐近速度系数E
|
||||
* <EFBFBD><EFBFBD><EFBFBD>㽥<EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><EFBFBD>E<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(8)<EFBFBD><EFBFBD>
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٶ<EFBFBD>ϵ<EFBFBD><EFBFBD>E
|
||||
*/
|
||||
double calculateE(double beta) {
|
||||
return 1 / sqrt(1 - pow(beta, 4));
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算相对密度系数FG(GB/T 21446-2008 式(9))
|
||||
* @param dRD_Real 真实相对密度
|
||||
* @return 相对密度系数FG
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><EFBFBD>FG<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(9)<EFBFBD><EFBFBD>
|
||||
* @param dRD_Real <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܶ<EFBFBD>ϵ<EFBFBD><EFBFBD>FG
|
||||
*/
|
||||
double calculateFG(double dRD_Real) {
|
||||
return 1 / sqrt(dRD_Real);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算流动温度系数FT(GB/T 21446-2008 式(10))
|
||||
* @param dTb_M 参比温度(K)
|
||||
* @param dTf 工况温度(K)
|
||||
* @return 流动温度系数FT
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><EFBFBD>FT<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(10)<EFBFBD><EFBFBD>
|
||||
* @param dTb_M <EFBFBD>α<EFBFBD><EFBFBD>¶<EFBFBD>(K)
|
||||
* @param dTf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>(K)
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶<EFBFBD>ϵ<EFBFBD><EFBFBD>FT
|
||||
*/
|
||||
double calculateFT(double dTb_M, double dTf) {
|
||||
return sqrt(dTb_M / dTf);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算可膨胀系数ε(GB/T 21446-2008 式(11))
|
||||
* @param dPf 上游绝对压力(Pa)
|
||||
* @param dDp 差压(Pa)
|
||||
* @param beta 直径比
|
||||
* @param dKappa 等熵指数
|
||||
* @return 可膨胀系数ε
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>GB/T 21446-2008 ʽ(11)<EFBFBD><EFBFBD>
|
||||
* @param dPf <EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD>(Pa)
|
||||
* @param dDp <EFBFBD><EFBFBD>ѹ(Pa)
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param dKappa <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateEpsilon(double dPf, double dDp, double beta, double dKappa) {
|
||||
double tau = (dPf - dDp) / dPf; // 压力比
|
||||
double tau = (dPf - dDp) / dPf; // ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double epsilon = 1 - (0.351 + 0.256 * pow(beta, 4) + 0.93 * pow(beta, 8)) * (1 - pow(tau, 1/dKappa));
|
||||
return epsilon;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算等熵指数κ(GB/T 21446-2008 推荐方法)
|
||||
* @param dZf 工况压缩因子
|
||||
* @return 等熵指数κ
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>GB/T 21446-2008 <EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param dZf <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateKappa(double dZf) {
|
||||
// 近似公式:基于理想气体比热比和压缩因子修正
|
||||
double gamma = 1.3; // 天然气典型比热比(Cp/Cv≈1.3)
|
||||
double Z = dZf; // 工况压缩因子
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱȺ<EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double gamma = 1.3; // <EFBFBD><EFBFBD>Ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD>ȱȣ<EFBFBD>Cp/Cv<43><76>1.3<EFBFBD><EFBFBD>
|
||||
double Z = dZf; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// 修正公式(经验关系)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>
|
||||
double kappa = gamma / (1 - (gamma - 1) * (1 / Z - 1));
|
||||
return kappa;
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算雷诺数ReD(GB/T 21446-2008 式(5))
|
||||
* @param Qf 工况流量(m3/s)
|
||||
* @param D 管道内径(m)
|
||||
* @param rho 密度(kg/m3)
|
||||
* @param mu 动力粘度(Pa·s)
|
||||
* @return 雷诺数
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>ReD<EFBFBD><EFBFBD>GB/T 21446-2008 ʽ(5)<EFBFBD><EFBFBD>
|
||||
* @param Qf <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(m3/s)
|
||||
* @param D <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD>(m)
|
||||
* @param rho <EFBFBD>ܶ<EFBFBD>(kg/m3)
|
||||
* @param mu <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>(Pa<EFBFBD><EFBFBD>s)
|
||||
* @return <EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
|
||||
*/
|
||||
double calculateReD(double Qf, double D, double rho, double mu) {
|
||||
return (4 * Qf * rho) / (M_PI * D * mu);
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算流出系数C(GB/T 21446-2008 附录A)
|
||||
* @param beta 直径比
|
||||
* @param ReD 雷诺数
|
||||
* @param D_mm 管道内径(mm)
|
||||
* @param ptMode 取压方式
|
||||
* @return 流出系数C
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C<EFBFBD><EFBFBD>GB/T 21446-2008 <EFBFBD><EFBFBD>¼A<EFBFBD><EFBFBD>
|
||||
* @param beta ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param ReD <EFBFBD><EFBFBD>ŵ<EFBFBD><EFBFBD>
|
||||
* @param D_mm <EFBFBD>ܵ<EFBFBD><EFBFBD>ھ<EFBFBD>(mm)
|
||||
* @param ptMode ȡѹ<EFBFBD><EFBFBD>ʽ
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><EFBFBD>C
|
||||
*/
|
||||
double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||||
double L1, L2;
|
||||
// 根据取压方式确定L1/L2(角接取压)
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡѹ<EFBFBD><EFBFBD>ʽȷ<EFBFBD><EFBFBD>L1/L2<4C><32><EFBFBD>ǽ<EFBFBD>ȡѹ<C8A1><D1B9>
|
||||
switch (ptMode) {
|
||||
case 1: // 角接取压
|
||||
L1 = L2 = 0; // D单位为mm
|
||||
case 1: // <EFBFBD>ǽ<EFBFBD>ȡѹ
|
||||
L1 = L2 = 0; // D<EFBFBD><EFBFBD>λΪmm
|
||||
break;
|
||||
case 0: // 法兰取压
|
||||
case 0: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡѹ
|
||||
L1 = L2 = 25.4 / D_mm;
|
||||
break;
|
||||
case 2: // D-D/2ȡѹ
|
||||
@ -406,7 +407,7 @@ double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||||
L2 = 0.47;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "不支持的取压方式: %d\n", ptMode);
|
||||
fprintf(stderr, "<EFBFBD><EFBFBD>֧<EFBFBD>ֵ<EFBFBD>ȡѹ<EFBFBD><EFBFBD>ʽ: %d\n", ptMode);
|
||||
return FLOW_CALC_ERROR;
|
||||
}
|
||||
|
||||
@ -421,7 +422,7 @@ double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||||
|
||||
double Cd = term1 + term2 + term3 + term4 + term5;
|
||||
|
||||
// 孔径<71.12mm修正
|
||||
// <EFBFBD><EFBFBD><71.12mm<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (D_mm < 71.12) {
|
||||
Cd += 0.011 * (0.75 - beta) * (2.8 - D_mm / 25.4);
|
||||
}
|
||||
@ -429,10 +430,10 @@ double calculateCd(double beta, double ReD, double D_mm, int ptMode) {
|
||||
}
|
||||
|
||||
/**
|
||||
* 查表计算粘度μ
|
||||
* @param tempP_jy 压力(MPa)
|
||||
* @param tempT 温度(K)
|
||||
* @return 动力粘度(Pa·s)
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD>Ȧ<EFBFBD>
|
||||
* @param tempP_jy ѹ<EFBFBD><EFBFBD>(MPa)
|
||||
* @param tempT <EFBFBD>¶<EFBFBD>(K)
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><EFBFBD>(Pa<EFBFBD><EFBFBD>s)
|
||||
*/
|
||||
double Dlndjs(double tempP_jy, double tempT) {
|
||||
double Dlndjs_Dlnd_Data[8][11] = {
|
||||
|
687
User/NG/Therm.c
687
User/NG/Therm.c
@ -1,387 +1,474 @@
|
||||
|
||||
#include "NGCal.h"
|
||||
#include "Detail.h"
|
||||
#include "Therm.h"
|
||||
#include "therm.h"
|
||||
#include <math.h>
|
||||
#include <stdbool.h>
|
||||
static void CprCvrHS(NGParSTRUCT *ptNGPar, Detail *ptD);
|
||||
static double H(NGParSTRUCT *ptNGPar, Detail *ptD);
|
||||
static double S(NGParSTRUCT *ptNGPar, Detail *ptD);
|
||||
static void HS_Mode(NGParSTRUCT *ptNGPar, Detail *ptD, double H_target, double S_target, bool bGuess);
|
||||
double CalTH = 4.1840;
|
||||
double GK_root[5] = {
|
||||
0.14887433898163121088,
|
||||
0.43339539412924719080,
|
||||
0.67940956829902440263,
|
||||
0.86506336668898451073,
|
||||
0.97390652851717172008
|
||||
};
|
||||
double GK_weight[5] = {
|
||||
0.29552422471475286217,
|
||||
0.26926671930999634918,
|
||||
0.21908636251598204295,
|
||||
0.14945134915058059038,
|
||||
0.066671344308688137179
|
||||
};
|
||||
int GK_points = 5;
|
||||
double ThermConstants[NUMBEROFCOMPONENTS][11] = {
|
||||
{-29776.4, 7.95454, 43.9417, 1037.09, 1.56373, 813.205, -24.9027, 1019.98,-10.1601, 1070.14,-20.0615},
|
||||
{-3495.34, 6.95587, 0.272892, 662.738,-0.291318,-680.562, 1.78980, 1740.06, 0.0, 100.0, 4.49823},
|
||||
{ 20.7307, 6.96237, 2.68645, 500.371,-2.56429,-530.443, 3.91921, 500.198, 2.13290, 2197.22, 5.81381},
|
||||
{-37524.4, 7.98139, 24.3668, 752.320, 3.53990, 272.846, 8.44724, 1020.13,-13.2732, 869.510,-22.4010},
|
||||
{-56072.1, 8.14319, 37.0629, 735.402, 9.38159, 247.190, 13.4556, 1454.78,-11.7342, 984.518,-24.0426},
|
||||
{-13773.1, 7.97183, 6.27078, 2572.63, 2.05010, 1156.72, 0.0, 100.0, 0.0, 100.0, -3.24989},
|
||||
{-10085.4, 7.94680,-0.08380, 433.801, 2.85539, 843.792, 6.31595, 1481.43,-2.88457, 1102.23,-0.51551},
|
||||
{-5565.60, 6.66789, 2.33458, 2584.98, .749019, 559.656, 0.0, 100.0, 0.0, 100.0, -7.94821},
|
||||
{-2753.49, 6.95854, 2.02441, 1541.22, .096774, 3674.81, 0.0, 100.0, 0.0, 100.0, 6.23387},
|
||||
{-3497.45, 6.96302, 2.40013, 2522.05, 2.21752, 1154.15, 0.0, 100.0, 0.0, 100.0, 9.19749},
|
||||
{-72387.0, 17.8143, 58.2062, 1787.39, 40.7621, 808.645, 0.0, 100.0, 0.0, 100.0, -44.1341},
|
||||
{-72674.8, 18.6383, 57.4178, 1792.73, 38.6599, 814.151, 0.0, 100.0, 0.0, 100.0, -46.1938},
|
||||
{-91505.5, 21.3861, 74.3410, 1701.58, 47.0587, 775.899, 0.0, 100.0, 0.0, 100.0, -60.2474},
|
||||
{-83845.2, 22.5012, 69.5789, 1719.58, 46.2164, 802.174, 0.0, 100.0, 0.0, 100.0, -62.2197},
|
||||
{-94982.5, 26.6225, 80.3819, 1718.49, 55.6598, 802.069, 0.0, 100.0, 0.0, 100.0, -77.5366},
|
||||
{-103353., 30.4029, 90.6941, 1669.32, 63.2028, 786.001, 0.0, 100.0, 0.0, 100.0, -92.0164},
|
||||
{-109674., 34.0847, 100.253, 1611.55, 69.7675, 768.847, 0.0, 100.0, 0.0, 100.0, -106.149},
|
||||
{-122599., 38.5014, 111.446, 1646.48, 80.5015, 781.588, 0.0, 100.0, 0.0, 100.0, -122.444},
|
||||
{-133564., 42.7143, 122.173, 1654.85, 90.2255, 785.564, 0.0, 100.0, 0.0, 100.0, -138.006},
|
||||
{ 0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0 },
|
||||
{ 0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0 }
|
||||
};
|
||||
static double dSi = 0.0;
|
||||
static double dTold = 0.0;
|
||||
static double dMrxold = 0.0;
|
||||
#include "Detail.h"
|
||||
|
||||
void ThermInit(void)
|
||||
{
|
||||
dSi = 0.0;
|
||||
dTold = 0.0;
|
||||
dMrxold = 0.0;
|
||||
}
|
||||
// 初始化Therm实例
|
||||
void Therm_Init(Therm *therm) {
|
||||
therm->CAL_TH = 4.1840;
|
||||
therm->coefA = 0;
|
||||
therm->coefB = 1;
|
||||
therm->coefC = 2;
|
||||
therm->coefD = 3;
|
||||
therm->coefE = 4;
|
||||
therm->coefF = 5;
|
||||
therm->coefG = 6;
|
||||
therm->coefH = 7;
|
||||
therm->coefI = 8;
|
||||
therm->coefJ = 9;
|
||||
therm->coefK = 10;
|
||||
|
||||
void ThermDestroy(void)
|
||||
{
|
||||
therm->dPdD = 0.0;
|
||||
therm->dPdT = 0.0;
|
||||
therm->dSi = 0.0;
|
||||
therm->dTold = 0.0;
|
||||
therm->dMrxold = 0.0;
|
||||
|
||||
therm->GK_points = 5;
|
||||
|
||||
// 初始化GK_root数组
|
||||
therm->GK_root[0] = 0.14887433898163121088;
|
||||
therm->GK_root[1] = 0.43339539412924719080;
|
||||
therm->GK_root[2] = 0.67940956829902440263;
|
||||
therm->GK_root[3] = 0.86506336668898451073;
|
||||
therm->GK_root[4] = 0.97390652851717172008;
|
||||
|
||||
// 初始化GK_weight数组
|
||||
therm->GK_weight[0] = 0.29552422471475286217;
|
||||
therm->GK_weight[1] = 0.26926671930999634918;
|
||||
therm->GK_weight[2] = 0.21908636251598204295;
|
||||
therm->GK_weight[3] = 0.14945134915058059038;
|
||||
therm->GK_weight[4] = 0.066671344308688137179;
|
||||
|
||||
// 初始化ThermConstants数组
|
||||
double thermConstants[21][11] = {
|
||||
{-29776.4, 7.95454, 43.9417, 1037.09, 1.56373, 813.205, -24.9027, 1019.98, -10.1601, 1070.14, -20.0615},
|
||||
{-3495.34, 6.95587, 0.272892, 662.738, -0.291318, -680.562, 1.78980, 1740.06, 0.0, 100.0, 4.49823},
|
||||
{20.7307, 6.96237, 2.68645, 500.371, -2.56429, -530.443, 3.91921, 500.198, 2.13290, 2197.22, 5.81381},
|
||||
{-37524.4, 7.98139, 24.3668, 752.320, 3.53990, 272.846, 8.44724, 1020.13, -13.2732, 869.510, -22.4010},
|
||||
{-56072.1, 8.14319, 37.0629, 735.402, 9.38159, 247.190, 13.4556, 1454.78, -11.7342, 984.518, -24.0426},
|
||||
{-13773.1, 7.97183, 6.27078, 2572.63, 2.05010, 1156.72, 0.0, 100.0, 0.0, 100.0, -3.24989},
|
||||
{-10085.4, 7.94680, -0.08380, 433.801, 2.85539, 843.792, 6.31595, 1481.43, -2.88457, 1102.23, -0.51551},
|
||||
{-5565.60, 6.66789, 2.33458, 2584.98, 0.749019, 559.656, 0.0, 100.0, 0.0, 100.0, -7.94821},
|
||||
{-2753.49, 6.95854, 2.02441, 1541.22, 0.096774, 3674.81, 0.0, 100.0, 0.0, 100.0, 6.23387},
|
||||
{-3497.45, 6.96302, 2.40013, 2522.05, 2.21752, 1154.15, 0.0, 100.0, 0.0, 100.0, 9.19749},
|
||||
{-72387.0, 17.8143, 58.2062, 1787.39, 40.7621, 808.645, 0.0, 100.0, 0.0, 100.0, -44.1341},
|
||||
{-72674.8, 18.6383, 57.4178, 1792.73, 38.6599, 814.151, 0.0, 100.0, 0.0, 100.0, -46.1938},
|
||||
{-91505.5, 21.3861, 74.3410, 1701.58, 47.0587, 775.899, 0.0, 100.0, 0.0, 100.0, -60.2474},
|
||||
{-83845.2, 22.5012, 69.5789, 1719.58, 46.2164, 802.174, 0.0, 100.0, 0.0, 100.0, -62.2197},
|
||||
{-94982.5, 26.6225, 80.3819, 1718.49, 55.6598, 802.069, 0.0, 100.0, 0.0, 100.0, -77.5366},
|
||||
{-103353.0, 30.4029, 90.6941, 1669.32, 63.2028, 786.001, 0.0, 100.0, 0.0, 100.0, -92.0164},
|
||||
{-109674.0, 34.0847, 100.253, 1611.55, 69.7675, 768.847, 0.0, 100.0, 0.0, 100.0, -106.149},
|
||||
{-122599.0, 38.5014, 111.446, 1646.48, 80.5015, 781.588, 0.0, 100.0, 0.0, 100.0, -122.444},
|
||||
{-133564.0, 42.7143, 122.173, 1654.85, 90.2255, 785.564, 0.0, 100.0, 0.0, 100.0, -138.006},
|
||||
{0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0},
|
||||
{0.0, 4.9680, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0, 100.0, 0.0}
|
||||
};
|
||||
|
||||
// 复制常量数组
|
||||
for (int i = 0; i < 21; i++) {
|
||||
for (int j = 0; j < 11; j++) {
|
||||
therm->ThermConstants[i][j] = thermConstants[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
double coth(double x)
|
||||
{
|
||||
return cosh(x)/sinh(x);
|
||||
}
|
||||
|
||||
void Run(NGParSTRUCT *ptNGPar, Detail *ptD)
|
||||
{
|
||||
double c, x, y, z;
|
||||
Detail_Run(ptD, ptNGPar);
|
||||
Detail_dZdD(ptD, ptNGPar->dDf);
|
||||
CprCvrHS(ptNGPar, ptD);
|
||||
ptNGPar->dk = ptNGPar->dCp / ptNGPar->dCv;
|
||||
x = ptNGPar->dk * RGAS * 1000.0 * ptNGPar->dTf;
|
||||
// 实现Run方法
|
||||
void Therm_Run(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail) {
|
||||
// local variables
|
||||
double c, x, y, z;
|
||||
|
||||
// first run basic set of functions within AGA 8 (1994) Detail Method
|
||||
Detail_Run(detail, ptNGPar);
|
||||
|
||||
// find first partial derivative of Z wrt D
|
||||
Detail_dZdD(detail, ptNGPar->dDf);
|
||||
|
||||
// find real gas cv, cp, specific enthalpy and entropy
|
||||
Therm_CprCvrHS(therm, ptNGPar, detail);
|
||||
|
||||
// ratio of real gas specific heats
|
||||
ptNGPar->dk = ptNGPar->dCp / ptNGPar->dCv;
|
||||
|
||||
// solve c in three steps, for clarity and ease of debugging
|
||||
x = ptNGPar->dk * RGAS * 1000.0 * ptNGPar->dTf;
|
||||
y = ptNGPar->dMrx;
|
||||
z = ptNGPar->dZf + ptNGPar->dDf * ptD->ddZdD;
|
||||
c = (x / y) * z;
|
||||
ptNGPar->dSOS = sqrt(c);
|
||||
ptNGPar->dKappa = (c * ptNGPar->dRhof) / ptNGPar->dPf;
|
||||
z = ptNGPar->dZf + ptNGPar->dDf * detail->ddZdD;
|
||||
|
||||
// calculate c, which is SOS^2
|
||||
c = (x / y) * z;
|
||||
|
||||
// speed of sound
|
||||
ptNGPar->dSOS = sqrt(c);
|
||||
|
||||
// calculate the real gas isentropic exponent
|
||||
// using expression functionally equivalent to Equation 3.2
|
||||
ptNGPar->dKappa = (c * ptNGPar->dRhof) / ptNGPar->dPf;
|
||||
}
|
||||
|
||||
double CpiMolar(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
double Cp = 0.0;
|
||||
// 实现CpiMolar方法
|
||||
double Therm_CpiMolar(Therm *therm, NGParSTRUCT *ptNGPar) {
|
||||
double cp = 0.0;
|
||||
double Cpx;
|
||||
double DT, FT, HT, JT;
|
||||
double Dx, Fx, Hx, Jx;
|
||||
double T;
|
||||
int i;
|
||||
T = ptNGPar->dTf;
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
||||
{
|
||||
if (ptNGPar->adMixture[i] <= 0.0) continue;
|
||||
Cpx = 0.0;
|
||||
DT = ThermConstants[i][coefD] / T;
|
||||
FT = ThermConstants[i][coefF] / T;
|
||||
HT = ThermConstants[i][coefH] / T;
|
||||
JT = ThermConstants[i][coefJ] / T;
|
||||
Dx = DT/sinh(DT);
|
||||
Fx = FT/cosh(FT);
|
||||
Hx = HT/sinh(HT);
|
||||
Jx = JT/cosh(JT);
|
||||
Cpx += ThermConstants[i][coefB];
|
||||
Cpx += ThermConstants[i][coefC] * Dx * Dx;
|
||||
Cpx += ThermConstants[i][coefE] * Fx * Fx;
|
||||
Cpx += ThermConstants[i][coefG] * Hx * Hx;
|
||||
Cpx += ThermConstants[i][coefI] * Jx * Jx;
|
||||
Cpx *= ptNGPar->adMixture[i];
|
||||
Cp += Cpx;
|
||||
|
||||
T = ptNGPar->dTf;
|
||||
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
if (ptNGPar->adMixture[i] > 0) {
|
||||
// 计算每个组分的贡献
|
||||
Cpx = 0.0;
|
||||
|
||||
// calculate species intermediate terms
|
||||
DT = therm->ThermConstants[i][therm->coefD] / T;
|
||||
FT = therm->ThermConstants[i][therm->coefF] / T;
|
||||
HT = therm->ThermConstants[i][therm->coefH] / T;
|
||||
JT = therm->ThermConstants[i][therm->coefJ] / T;
|
||||
|
||||
// use intermediate terms to avoid redundant calcs
|
||||
Dx = DT / sinh(DT);
|
||||
Fx = FT / cosh(FT);
|
||||
Hx = HT / sinh(HT);
|
||||
Jx = JT / cosh(JT);
|
||||
|
||||
Cpx += therm->ThermConstants[i][therm->coefB];
|
||||
Cpx += therm->ThermConstants[i][therm->coefC] * Dx * Dx;
|
||||
Cpx += therm->ThermConstants[i][therm->coefE] * Fx * Fx;
|
||||
Cpx += therm->ThermConstants[i][therm->coefG] * Hx * Hx;
|
||||
Cpx += therm->ThermConstants[i][therm->coefI] * Jx * Jx;
|
||||
|
||||
// use current mole fraction to weight the contribution
|
||||
Cpx *= ptNGPar->adMixture[i];
|
||||
|
||||
// add this contribution to the sum
|
||||
cp += Cpx;
|
||||
}
|
||||
}
|
||||
Cp *= CalTH;
|
||||
return Cp;
|
||||
|
||||
return cp * therm->CAL_TH;
|
||||
}
|
||||
|
||||
double Ho(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
// 实现coth方法
|
||||
double Therm_coth(double x) {
|
||||
return 1.0 / tanh(x);
|
||||
}
|
||||
|
||||
// 实现Ho方法
|
||||
double Therm_Ho(Therm *therm, NGParSTRUCT *ptNGPar) {
|
||||
double H = 0.0;
|
||||
double Hx;
|
||||
double DT, FT, HT, JT;
|
||||
double cothDT, tanhFT, cothHT, tanhJT;
|
||||
double T;
|
||||
int i;
|
||||
T = ptNGPar->dTf;
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
||||
{
|
||||
if (ptNGPar->adMixture[i] <= 0.0) continue;
|
||||
double T = ptNGPar->dTf;
|
||||
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
if (ptNGPar->adMixture[i] <= 0.0) continue;
|
||||
|
||||
Hx = 0.0;
|
||||
DT = ThermConstants[i][coefD] / T;
|
||||
FT = ThermConstants[i][coefF] / T;
|
||||
HT = ThermConstants[i][coefH] / T;
|
||||
JT = ThermConstants[i][coefJ] / T;
|
||||
cothDT = coth(DT);
|
||||
|
||||
DT = therm->ThermConstants[i][therm->coefD] / T;
|
||||
FT = therm->ThermConstants[i][therm->coefF] / T;
|
||||
HT = therm->ThermConstants[i][therm->coefH] / T;
|
||||
JT = therm->ThermConstants[i][therm->coefJ] / T;
|
||||
|
||||
cothDT = Therm_coth(DT);
|
||||
tanhFT = tanh(FT);
|
||||
cothHT = coth(HT);
|
||||
cothHT = Therm_coth(HT);
|
||||
tanhJT = tanh(JT);
|
||||
Hx += ThermConstants[i][coefA];
|
||||
Hx += ThermConstants[i][coefB] * T;
|
||||
Hx += ThermConstants[i][coefC] * ThermConstants[i][coefD] * cothDT;
|
||||
Hx -= ThermConstants[i][coefE] * ThermConstants[i][coefF] * tanhFT;
|
||||
Hx += ThermConstants[i][coefG] * ThermConstants[i][coefH] * cothHT;
|
||||
Hx -= ThermConstants[i][coefI] * ThermConstants[i][coefJ] * tanhJT;
|
||||
Hx *= ptNGPar->adMixture[i];
|
||||
H += Hx;
|
||||
|
||||
Hx += therm->ThermConstants[i][therm->coefA];
|
||||
Hx += therm->ThermConstants[i][therm->coefB] * T;
|
||||
Hx += therm->ThermConstants[i][therm->coefC] * therm->ThermConstants[i][therm->coefD] * cothDT;
|
||||
Hx -= therm->ThermConstants[i][therm->coefE] * therm->ThermConstants[i][therm->coefF] * tanhFT;
|
||||
Hx += therm->ThermConstants[i][therm->coefG] * therm->ThermConstants[i][therm->coefH] * cothHT;
|
||||
Hx -= therm->ThermConstants[i][therm->coefI] * therm->ThermConstants[i][therm->coefJ] * tanhJT;
|
||||
|
||||
Hx *= ptNGPar->adMixture[i];
|
||||
H += Hx;
|
||||
}
|
||||
H *= CalTH;
|
||||
H /= ptNGPar->dMrx;
|
||||
return H * 1.e3;
|
||||
|
||||
H *= therm->CAL_TH;
|
||||
H /= ptNGPar->dMrx;
|
||||
return H * 1000.0;
|
||||
}
|
||||
|
||||
double So(NGParSTRUCT *ptNGPar)
|
||||
{
|
||||
// 实现So方法
|
||||
double Therm_So(Therm *therm, NGParSTRUCT *ptNGPar) {
|
||||
double S = 0.0;
|
||||
double Sx;
|
||||
double DT, FT, HT, JT;
|
||||
double cothDT, tanhFT, cothHT, tanhJT;
|
||||
double sinhDT, coshFT, sinhHT, coshJT;
|
||||
double T;
|
||||
int i;
|
||||
T = ptNGPar->dTf;
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
||||
{
|
||||
if (ptNGPar->adMixture[i] <= 0.0) continue;
|
||||
double T = ptNGPar->dTf;
|
||||
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
if (ptNGPar->adMixture[i] <= 0.0) continue;
|
||||
|
||||
Sx = 0.0;
|
||||
DT = ThermConstants[i][coefD] / T;
|
||||
FT = ThermConstants[i][coefF] / T;
|
||||
HT = ThermConstants[i][coefH] / T;
|
||||
JT = ThermConstants[i][coefJ] / T;
|
||||
cothDT = coth(DT);
|
||||
|
||||
DT = therm->ThermConstants[i][therm->coefD] / T;
|
||||
FT = therm->ThermConstants[i][therm->coefF] / T;
|
||||
HT = therm->ThermConstants[i][therm->coefH] / T;
|
||||
JT = therm->ThermConstants[i][therm->coefJ] / T;
|
||||
|
||||
cothDT = Therm_coth(DT);
|
||||
tanhFT = tanh(FT);
|
||||
cothHT = coth(HT);
|
||||
cothHT = Therm_coth(HT);
|
||||
tanhJT = tanh(JT);
|
||||
|
||||
sinhDT = sinh(DT);
|
||||
coshFT = cosh(FT);
|
||||
sinhHT = sinh(HT);
|
||||
coshJT = cosh(JT);
|
||||
Sx += ThermConstants[i][coefK];
|
||||
Sx += ThermConstants[i][coefB] * log(T);
|
||||
Sx += ThermConstants[i][coefC] * (DT * cothDT - log(sinhDT));
|
||||
Sx -= ThermConstants[i][coefE] * (FT * tanhFT - log(coshFT));
|
||||
Sx += ThermConstants[i][coefG] * (HT * cothHT - log(sinhHT));
|
||||
Sx -= ThermConstants[i][coefI] * (JT * tanhJT - log(coshJT));
|
||||
Sx *= ptNGPar->adMixture[i];
|
||||
S += Sx;
|
||||
|
||||
Sx += therm->ThermConstants[i][therm->coefK];
|
||||
Sx += therm->ThermConstants[i][therm->coefB] * log(T);
|
||||
Sx += therm->ThermConstants[i][therm->coefC] * (DT * cothDT - log(sinhDT));
|
||||
Sx -= therm->ThermConstants[i][therm->coefE] * (FT * tanhFT - log(coshFT));
|
||||
Sx += therm->ThermConstants[i][therm->coefG] * (HT * cothHT - log(sinhHT));
|
||||
Sx -= therm->ThermConstants[i][therm->coefI] * (JT * tanhJT - log(coshJT));
|
||||
|
||||
Sx *= ptNGPar->adMixture[i];
|
||||
S += Sx;
|
||||
}
|
||||
S *= CalTH;
|
||||
S /= ptNGPar->dMrx;
|
||||
return S * 1.e3;
|
||||
|
||||
S *= therm->CAL_TH;
|
||||
S /= ptNGPar->dMrx;
|
||||
return S * 1000.0;
|
||||
}
|
||||
|
||||
void CprCvrHS(NGParSTRUCT *ptNGPar, Detail *ptD)
|
||||
{
|
||||
double Cvinc, Cvr, Cpr;
|
||||
double Hinc;
|
||||
double Sinc;
|
||||
double Smixing;
|
||||
double Cp, Si;
|
||||
double a, b, x;
|
||||
int i;
|
||||
Cvinc = 0.0;
|
||||
Hinc = 0.0;
|
||||
Sinc = 0.0;
|
||||
Smixing = 0.0;
|
||||
Cp = CpiMolar(ptNGPar);
|
||||
ptNGPar->dHo = Ho(ptNGPar);
|
||||
Si = So(ptNGPar);
|
||||
ptNGPar->dCpi = (Cp * 1000.0) / ptNGPar->dMrx;
|
||||
for (i = 0; i < GK_points; i++)
|
||||
{
|
||||
x = ptNGPar->dDf * (1.0 + GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
||||
Cvinc += GK_weight[i] * (2.0 * ptD->ddZdT + ptNGPar->dTf * ptD->dd2ZdT2) / x;
|
||||
Sinc += GK_weight[i] * (ptD->dZ + ptNGPar->dTf * ptD->ddZdT - 1.0) / x;
|
||||
x = ptNGPar->dDf * (1.0 - GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
||||
Cvinc += GK_weight[i] * (2.0 * ptD->ddZdT + ptNGPar->dTf * ptD->dd2ZdT2) / x;
|
||||
Sinc += GK_weight[i] * (ptD->dZ + ptNGPar->dTf * ptD->ddZdT - 1.0) / x;
|
||||
// 实现CprCvrHS方法
|
||||
void Therm_CprCvrHS(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail) {
|
||||
double Cvinc = 0.0;
|
||||
double Cvr, Cpr;
|
||||
double Hinc = 0.0;
|
||||
double Sinc = 0.0;
|
||||
double Smixing = 0.0;
|
||||
double Cp = Therm_CpiMolar(therm, ptNGPar);
|
||||
double Si;
|
||||
|
||||
ptNGPar->dHo = Therm_Ho(therm, ptNGPar);
|
||||
Si = Therm_So(therm, ptNGPar);
|
||||
|
||||
ptNGPar->dCpi = (Cp * 1000.0) / ptNGPar->dMrx;
|
||||
|
||||
for (int i = 0; i < therm->GK_points; i++) {
|
||||
double x = ptNGPar->dDf * (1.0 + therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
|
||||
Hinc += therm->GK_weight[i] * detail->ddZdT / x;
|
||||
Cvinc += therm->GK_weight[i] * (2.0 * detail->ddZdT + ptNGPar->dTf * detail->dd2ZdT2) / x;
|
||||
Sinc += therm->GK_weight[i] * (detail->dZ + ptNGPar->dTf * detail->ddZdT - 1.0) / x;
|
||||
|
||||
x = ptNGPar->dDf * (1.0 - therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
|
||||
Hinc += therm->GK_weight[i] * detail->ddZdT / x;
|
||||
Cvinc += therm->GK_weight[i] * (2.0 * detail->ddZdT + ptNGPar->dTf * detail->dd2ZdT2) / x;
|
||||
Sinc += therm->GK_weight[i] * (detail->dZ + ptNGPar->dTf * detail->ddZdT - 1.0) / x;
|
||||
}
|
||||
Detail_zdetail(ptD, ptNGPar->dDf);
|
||||
Detail_dZdT(ptD, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(ptD, ptNGPar->dDf);
|
||||
Cvr = Cp - RGAS * (1.0 + ptNGPar->dTf * Cvinc * 0.5 * ptNGPar->dDf);
|
||||
a = (ptNGPar->dZf + ptNGPar->dTf * ptD->ddZdT);
|
||||
b = (ptNGPar->dZf + ptNGPar->dDf * ptD->ddZdD);
|
||||
Cpr = Cvr + RGAS * ((a * a)/b);
|
||||
Cpr /= ptNGPar->dMrx;
|
||||
|
||||
Detail_zdetail(detail, ptNGPar->dDf);
|
||||
Detail_dZdT(detail, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(detail, ptNGPar->dDf);
|
||||
|
||||
Cvr = Cp - RGAS * (1.0 + ptNGPar->dTf * Cvinc * 0.5 * ptNGPar->dDf);
|
||||
|
||||
double a = (ptNGPar->dZf + ptNGPar->dTf * detail->ddZdT);
|
||||
double b = (ptNGPar->dZf + ptNGPar->dDf * detail->ddZdD);
|
||||
|
||||
double dPdT = RGAS * ptNGPar->dDf * a;
|
||||
double dPdD = RGAS * ptNGPar->dTf * b;
|
||||
|
||||
Cpr = Cvr + RGAS * ((a * a) / b);
|
||||
|
||||
Cpr /= ptNGPar->dMrx;
|
||||
Cvr /= ptNGPar->dMrx;
|
||||
ptNGPar->dCv = Cvr * 1000.0; ptNGPar->dCp = Cpr * 1000.0;
|
||||
ptNGPar->dH = ptNGPar->dHo + 1000.0 * RGAS * ptNGPar->dTf *
|
||||
(ptNGPar->dZf - 1.0 - ptNGPar->dTf * Hinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
||||
{
|
||||
if (ptNGPar->adMixture[i] > 0.0) Smixing += ptNGPar->adMixture[i] * log(ptNGPar->adMixture[i]);
|
||||
|
||||
ptNGPar->dCv = Cvr * 1000.0;
|
||||
ptNGPar->dCp = Cpr * 1000.0;
|
||||
|
||||
ptNGPar->dH = ptNGPar->dHo + 1000.0 * RGAS * ptNGPar->dTf * (
|
||||
ptNGPar->dZf - 1.0 - ptNGPar->dTf * Hinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
if (ptNGPar->adMixture[i] != 0) Smixing += ptNGPar->adMixture[i] * log(ptNGPar->adMixture[i]);
|
||||
}
|
||||
Smixing *= RGAS;
|
||||
ptNGPar->dS = Si - Smixing - 1000.0 * RGAS *
|
||||
(log(ptNGPar->dPf/101325.0) - log(ptNGPar->dZf) + Sinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
|
||||
ptNGPar->dS = Si - Smixing - 1000.0 * RGAS * (
|
||||
log(ptNGPar->dPf / 101325.0) - log(ptNGPar->dZf) + Sinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
}
|
||||
|
||||
void HS_Mode(NGParSTRUCT *ptNGPar, Detail *ptD, double H_target, double S_target, bool bGuess)
|
||||
{
|
||||
double s0, s1, s2, t0, t1, t2, tmin, tmax;
|
||||
double h0, h1, h2, p0, p1, p2, px, pmin, pmax;
|
||||
// 实现HS_Mode方法
|
||||
void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, bool bGuess) {
|
||||
double s0 = S;
|
||||
double h0 = H;
|
||||
double t1, t2, tmin, tmax;
|
||||
double p1, p2, px, pmin, pmax;
|
||||
double delta1, delta2;
|
||||
double tolerance = 0.001; int i, j;
|
||||
s0 = S_target;
|
||||
h0 = H_target;
|
||||
if (bGuess)
|
||||
{
|
||||
double tolerance = 0.001;
|
||||
|
||||
if (bGuess) {
|
||||
t1 = ptNGPar->dTf;
|
||||
px = ptNGPar->dPf;
|
||||
pmax = px * 2.0;
|
||||
pmin = px * 0.1;
|
||||
tmax = t1 * 1.5;
|
||||
tmin = t1 * 0.67;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
t1 = 273.15;
|
||||
px = 1013250.0; pmax = P_MAX;
|
||||
pmin = 10000.0; tmax = T_MAX;
|
||||
px = 1013250.0;
|
||||
pmax = P_MAX;
|
||||
pmin = 10000.0;
|
||||
tmax = T_MAX;
|
||||
tmin = T_MIN;
|
||||
}
|
||||
t2 = t1 + 10.0;
|
||||
Detail_Run(ptD, ptNGPar);
|
||||
h1 = H(ptNGPar, ptD) - h0;
|
||||
for (i = 0; i < MAX_NUM_OF_ITERATIONS; i++)
|
||||
{
|
||||
|
||||
t2 = t1 + 10.0;
|
||||
|
||||
Detail_Run(detail, ptNGPar);
|
||||
double h1 = Therm_H(therm, ptNGPar, detail) - h0;
|
||||
|
||||
for (int i = 0; i < MAX_NUM_OF_ITERATIONS; i++) {
|
||||
ptNGPar->dTf = t2;
|
||||
p1 = px; p2 = px * 0.1; ptNGPar->dPf = p1;
|
||||
Detail_Run(ptD, ptNGPar);
|
||||
s1 = S(ptNGPar, ptD) - s0;
|
||||
for (j = 0; j < MAX_NUM_OF_ITERATIONS; j++)
|
||||
{
|
||||
p1 = px;
|
||||
p2 = px * 0.1;
|
||||
ptNGPar->dPf = p1;
|
||||
Detail_Run(detail, ptNGPar);
|
||||
double s1 = Therm_S(therm, ptNGPar, detail) - s0;
|
||||
|
||||
for (int j = 0; j < MAX_NUM_OF_ITERATIONS; j++) {
|
||||
ptNGPar->dPf = p2;
|
||||
Detail_Run(ptD, ptNGPar);
|
||||
s2 = S(ptNGPar, ptD) - s0;
|
||||
delta2 = fabs(s1 - s2) / s0;
|
||||
if (delta2 < tolerance) break;
|
||||
p0 = p2;
|
||||
Detail_Run(detail, ptNGPar);
|
||||
double s2 = Therm_S(therm, ptNGPar, detail) - s0;
|
||||
|
||||
delta2 = fabs(s1 - s2) / s0;
|
||||
if (delta2 < tolerance) break;
|
||||
|
||||
double p0 = p2;
|
||||
p2 = (p1 * s2 - p2 * s1) / (s2 - s1);
|
||||
if (p2 <= pmin)
|
||||
{
|
||||
p2 = pmin;
|
||||
}
|
||||
if (p2 >= pmax) p2 = pmax;
|
||||
p1 = p0;
|
||||
|
||||
if (p2 <= pmin) p2 = pmin;
|
||||
if (p2 >= pmax) p2 = pmax;
|
||||
|
||||
p1 = p0;
|
||||
s1 = s2;
|
||||
}
|
||||
if (j >= MAX_NUM_OF_ITERATIONS)
|
||||
ptNGPar->lStatus = MAX_NUM_OF_ITERATIONS_EXCEEDED;
|
||||
h2 = H(ptNGPar, ptD) - h0;
|
||||
delta1 = fabs(h1 - h2) / h0;
|
||||
if (delta1 < tolerance && i > 0) break;
|
||||
t0 = t2;
|
||||
|
||||
if (ptNGPar->lStatus == MAX_NUM_OF_ITERATIONS_EXCEEDED) break;
|
||||
|
||||
double h2 = Therm_H(therm, ptNGPar, detail) - h0;
|
||||
delta1 = fabs(h1 - h2) / h0;
|
||||
|
||||
if (delta1 < tolerance && i > 0) break;
|
||||
|
||||
double t0 = t2;
|
||||
t2 = (t1 * h2 - t2 * h1) / (h2 - h1);
|
||||
if (t2 >= tmax) t2 = tmax;
|
||||
if (t2 <= tmin)
|
||||
{
|
||||
|
||||
if (t2 >= tmax) t2 = tmax;
|
||||
if (t2 <= tmin) {
|
||||
t2 = t0 + 10.0;
|
||||
ptNGPar->dTf = t2;
|
||||
Detail_Run(ptD, ptNGPar);
|
||||
h2 = H(ptNGPar, ptD) - h0;
|
||||
Detail_Run(detail, ptNGPar);
|
||||
h2 = Therm_H(therm, ptNGPar, detail) - h0;
|
||||
}
|
||||
|
||||
t1 = t0;
|
||||
h1 = h2;
|
||||
}
|
||||
if (i >= MAX_NUM_OF_ITERATIONS)
|
||||
|
||||
if (ptNGPar->lStatus == MAX_NUM_OF_ITERATIONS_EXCEEDED) {
|
||||
ptNGPar->lStatus = MAX_NUM_OF_ITERATIONS_EXCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
double H(NGParSTRUCT *ptNGPar, Detail *ptD)
|
||||
{
|
||||
double Hinc;
|
||||
double x;
|
||||
int i;
|
||||
Hinc = 0.0;
|
||||
ptNGPar->dHo = Ho(ptNGPar);
|
||||
for (i = 0; i < GK_points; i++)
|
||||
{
|
||||
x = ptNGPar->dDf * (1.0 + GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
||||
// 实现H方法
|
||||
double Therm_H(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail) {
|
||||
double Hinc = 0.0;
|
||||
ptNGPar->dHo = Therm_Ho(therm, ptNGPar);
|
||||
|
||||
for (int i = 0; i < therm->GK_points; i++) {
|
||||
double x = ptNGPar->dDf * (1.0 + therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
|
||||
Hinc += therm->GK_weight[i] * detail->ddZdT / x;
|
||||
if (i == 10) break;
|
||||
x = ptNGPar->dDf * (1.0 - GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Hinc += GK_weight[i] * ptD->ddZdT / x;
|
||||
|
||||
x = ptNGPar->dDf * (1.0 - therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
|
||||
Hinc += therm->GK_weight[i] * detail->ddZdT / x;
|
||||
}
|
||||
Detail_zdetail(ptD, ptNGPar->dDf);
|
||||
Detail_dZdT(ptD, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(ptD, ptNGPar->dDf);
|
||||
ptNGPar->dH = ptNGPar->dHo + 1000.0 * RGAS * ptNGPar->dTf *
|
||||
(ptNGPar->dZf - 1.0 - ptNGPar->dTf * Hinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
|
||||
Detail_zdetail(detail, ptNGPar->dDf);
|
||||
Detail_dZdT(detail, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(detail, ptNGPar->dDf);
|
||||
|
||||
ptNGPar->dH = ptNGPar->dHo + 1000.0 * RGAS * ptNGPar->dTf * (
|
||||
ptNGPar->dZf - 1.0 - ptNGPar->dTf * Hinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
return ptNGPar->dH;
|
||||
}
|
||||
|
||||
double S(NGParSTRUCT *ptNGPar, Detail *ptD)
|
||||
{
|
||||
// 实现S方法
|
||||
double Therm_S(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail) {
|
||||
double Sinc;
|
||||
double Smixing;
|
||||
double x;
|
||||
int i;
|
||||
Sinc = 0.0;
|
||||
Smixing = 0.0;
|
||||
for (i = 0; i < GK_points; i++)
|
||||
{
|
||||
x = ptNGPar->dDf * (1.0 + GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Sinc += GK_weight[i] * (ptD->dZ + ptNGPar->dTf * ptD->ddZdT - 1.0) / x;
|
||||
|
||||
// initialize integral
|
||||
Sinc = 0.0;
|
||||
|
||||
// initialize entropy of mixing
|
||||
Smixing = 0.0;
|
||||
|
||||
// integrate partial derivatives from D=0 to D=D, applying Gauss-Kronrod quadrature
|
||||
for (i = 0; i < therm->GK_points; i++) {
|
||||
// calculate 1st and 2nd partial derivatives of Z wrt T
|
||||
x = ptNGPar->dDf * (1.0 + therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
Sinc += therm->GK_weight[i] * (detail->dZ + ptNGPar->dTf * detail->ddZdT - 1.0) / x;
|
||||
if (i == 10) break;
|
||||
x = ptNGPar->dDf * (1.0 - GK_root[i]) / 2.0;
|
||||
Detail_zdetail(ptD, x);
|
||||
Detail_dZdT(ptD, x);
|
||||
Detail_d2ZdT2(ptD, x);
|
||||
Sinc += GK_weight[i] * (ptD->dZ + ptNGPar->dTf * ptD->ddZdT - 1.0) / x;
|
||||
|
||||
x = ptNGPar->dDf * (1.0 - therm->GK_root[i]) / 2.0;
|
||||
Detail_zdetail(detail, x);
|
||||
Detail_dZdT(detail, x);
|
||||
Detail_d2ZdT2(detail, x);
|
||||
Sinc += therm->GK_weight[i] * (detail->dZ + ptNGPar->dTf * detail->ddZdT - 1.0) / x;
|
||||
}
|
||||
Detail_zdetail(ptD, ptNGPar->dDf);
|
||||
Detail_dZdT(ptD, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(ptD, ptNGPar->dDf);
|
||||
if (ptNGPar->dTf != dTold || ptNGPar->dMrx != dMrxold)
|
||||
{
|
||||
dSi = So(ptNGPar);
|
||||
dTold = ptNGPar->dTf;
|
||||
dMrxold = ptNGPar->dMrx;
|
||||
|
||||
// reset Z and partial deivatives dZdT and d2ZdT2
|
||||
Detail_zdetail(detail, ptNGPar->dDf);
|
||||
Detail_dZdT(detail, ptNGPar->dDf);
|
||||
Detail_d2ZdT2(detail, ptNGPar->dDf);
|
||||
|
||||
// find ideal gas entropy, but only if temperature or composition have changed
|
||||
if (ptNGPar->dTf != therm->dTold || ptNGPar->dMrx != therm->dMrxold) {
|
||||
therm->dSi = Therm_So(therm, ptNGPar);
|
||||
therm->dTold = ptNGPar->dTf;
|
||||
therm->dMrxold = ptNGPar->dMrx;
|
||||
}
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++)
|
||||
{
|
||||
if (ptNGPar->adMixture[i] > 0.0) Smixing += ptNGPar->adMixture[i] * log(ptNGPar->adMixture[i]);
|
||||
|
||||
// calculate entropy of mixing
|
||||
for (i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
if (ptNGPar->adMixture[i] != 0) Smixing += ptNGPar->adMixture[i] * log(ptNGPar->adMixture[i]);
|
||||
}
|
||||
Smixing *= RGAS;
|
||||
ptNGPar->dS = dSi - Smixing - 1000.0 * RGAS *
|
||||
(log(ptNGPar->dPf/101325.0) - log(ptNGPar->dZf) + Sinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
return ptNGPar->dS;
|
||||
|
||||
// calculate specific entropy
|
||||
ptNGPar->dS = therm->dSi - Smixing - 1000.0 * RGAS * (
|
||||
log(ptNGPar->dPf / 101325.0) - log(ptNGPar->dZf) + Sinc * 0.5 * ptNGPar->dDf) / ptNGPar->dMrx;
|
||||
return (ptNGPar->dS);
|
||||
}
|
||||
|
@ -1,73 +1,60 @@
|
||||
/*************************************************************************
|
||||
* 文件: therm.h
|
||||
* 描述: Therm类的头文件
|
||||
|
||||
* <EFBFBD>ļ<EFBFBD>: therm.h
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Therm<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef _THERM_H
|
||||
#ifndef _THERM_H
|
||||
#define _THERM_H
|
||||
|
||||
#include "NGCal.h"
|
||||
#include "NGCal.h"
|
||||
#include "Detail.h"
|
||||
|
||||
// Therm类
|
||||
typedef struct Therm {
|
||||
// 成员数据
|
||||
double dT; // 当前温度,单位开尔文(K)
|
||||
double dP; // 当前压力,单位帕斯卡(Pa)
|
||||
double dD; // 摩尔密度,单位mol/dm3
|
||||
double dRho; // 质量密度,单位kg/m3
|
||||
|
||||
double dPdD; // P对D的偏导数
|
||||
|
||||
double dPdT; // P对T的偏导数
|
||||
double dSi; // 理想气体比熵,单位kJ/kg.K
|
||||
double dTold; // 之前使用的温度
|
||||
|
||||
double dMrxold; // 之前使用的混合物摩尔质量
|
||||
|
||||
// 方法指针
|
||||
double (*CpiMolar)(struct Therm*, NGParSTRUCT*);
|
||||
void (*Run)(struct Therm*, NGParSTRUCT*, Detail*);
|
||||
double (*Ho)(struct Therm*, NGParSTRUCT*);
|
||||
double (*So)(struct Therm*, NGParSTRUCT*);
|
||||
void (*CprCvrHS)(struct Therm*, NGParSTRUCT*, Detail*);
|
||||
double (*H)(struct Therm*, NGParSTRUCT*, Detail*);
|
||||
double (*S)(struct Therm*, NGParSTRUCT*, Detail*);
|
||||
void (*HS_Mode)(struct Therm*, NGParSTRUCT*, Detail*, double, double, int);
|
||||
double CAL_TH;
|
||||
int coefA;
|
||||
int coefB;
|
||||
int coefC;
|
||||
int coefD;
|
||||
int coefE;
|
||||
int coefF;
|
||||
int coefG;
|
||||
int coefH;
|
||||
int coefI;
|
||||
int coefJ;
|
||||
int coefK;
|
||||
|
||||
double dPdD; // partial deriv of P wrt D
|
||||
double dPdT; // partial deriv of P wrt T
|
||||
double dSi; // ideal gas specific entropy, kJ/kg.K
|
||||
double dTold; // temperature previously used
|
||||
double dMrxold; // mixture molar mass previously used
|
||||
|
||||
int GK_points; // set the number of points for quadrature
|
||||
double GK_root[5];
|
||||
double GK_weight[5];
|
||||
|
||||
double ThermConstants[21][11];
|
||||
} Therm;
|
||||
|
||||
// Therm类的构造函数和析构函数
|
||||
Therm* Therm_construct(void);
|
||||
void Therm_destruct(Therm* obj);
|
||||
// 函数声明
|
||||
void Therm_Init(Therm *therm);
|
||||
|
||||
// Therm类使用的其他数据
|
||||
void Therm_Run(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail);
|
||||
|
||||
// 使用 extern 声明变量
|
||||
extern int GK_points;
|
||||
extern double GK_root[5];
|
||||
extern double GK_weight[5];
|
||||
extern double ThermConstants[21][11];
|
||||
double Therm_CpiMolar(Therm *therm, NGParSTRUCT *ptNGPar);
|
||||
|
||||
// 热化学卡路里到焦耳的转换常数: 1 cal(IT) = 4.1840 J
|
||||
extern double CalTH ;
|
||||
double Therm_coth(double x);
|
||||
|
||||
double Therm_Ho(Therm *therm, NGParSTRUCT *ptNGPar);
|
||||
|
||||
// 系数索引的枚举
|
||||
enum CoefficientList {
|
||||
coefA = 0,
|
||||
coefB,
|
||||
coefC,
|
||||
coefD,
|
||||
coefE,
|
||||
coefF,
|
||||
coefG,
|
||||
coefH,
|
||||
coefI,
|
||||
coefJ,
|
||||
coefK
|
||||
};
|
||||
double Therm_So(Therm *therm, NGParSTRUCT *ptNGPar);
|
||||
|
||||
void Therm_CprCvrHS(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail);
|
||||
|
||||
#endif
|
||||
void Therm_HS_Mode(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail, double H, double S, bool bGuess);
|
||||
|
||||
double Therm_H(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail);
|
||||
|
||||
double Therm_S(Therm *therm, NGParSTRUCT *ptNGPar, Detail *detail);
|
||||
|
||||
#endif // THERM__H
|
||||
|
157
User/NG/main.c
Normal file
157
User/NG/main.c
Normal file
@ -0,0 +1,157 @@
|
||||
#include <stdio.h>
|
||||
#include "NGCal.h"
|
||||
#include "FlowCal.h"
|
||||
|
||||
int main() {
|
||||
// 定义并初始化 FlowParSTRUCT 结构体变量
|
||||
FlowParSTRUCT flowParams = {0};
|
||||
NGParSTRUCT ngParams = {0};
|
||||
|
||||
// 设置基本参数
|
||||
flowParams.dPatm = 0.0981; // 标准大气压(bar)
|
||||
flowParams.dPf = 1.48; // 压力(MPa)
|
||||
flowParams.dPfType = 0; // 0=表压,1=绝压
|
||||
flowParams.dDp = 12.50; // 差压(kPa)
|
||||
flowParams.dTf = 15.0; // 温度(°C)
|
||||
flowParams.dCbtj = 0; // 参比条件类型(0=标准状态)
|
||||
|
||||
// 设置管道参数
|
||||
flowParams.dPipeD = 259.38; // 管道内径(mm)
|
||||
flowParams.dOrificeD = 150.25; // 孔板孔径(mm)
|
||||
flowParams.dPipeType = 0; // 管道类型
|
||||
flowParams.dPtmode = 0; // 取压方式(0=法兰取压,1=角接取压)
|
||||
|
||||
// 设置材料参数
|
||||
flowParams.dPipeMaterial = 2; // 20号钢
|
||||
flowParams.dOrificeMaterial = 10; // 镍铬合金
|
||||
|
||||
// 设置天然气组分(示例: 95%甲烷,5%其他)
|
||||
// 初始化天然气组分数组(GB/T 21446-2008 典型示例组成)
|
||||
for (int i = 0; i < NUMBEROFCOMPONENTS; i++) {
|
||||
flowParams.dNG_Compents[i] = 0.0; // 先全部初始化为0
|
||||
}
|
||||
|
||||
// 按照GB/T 21446-2008标准中典型天然气组分赋值(体积百分比)
|
||||
flowParams.dNG_Compents[0] = 88.36; // 甲烷(CH4)
|
||||
flowParams.dNG_Compents[1] = 0.68; // 氮气(N2)
|
||||
flowParams.dNG_Compents[2] = 1.57; // 二氧化碳(CO2)
|
||||
flowParams.dNG_Compents[3] = 6.25; // 乙烷(C2H6)
|
||||
flowParams.dNG_Compents[4] = 2.4; // 丙烷(C3H8)
|
||||
flowParams.dNG_Compents[5] = 0.00; // 水(H2O)
|
||||
flowParams.dNG_Compents[6] = 0.00; // 硫化氢(H2S)
|
||||
flowParams.dNG_Compents[7] = 0.04; // 氢气(H2)
|
||||
flowParams.dNG_Compents[8] = 0.00; // 一氧化碳(CO)
|
||||
flowParams.dNG_Compents[9] = 0.00; // 氧气(O2)
|
||||
flowParams.dNG_Compents[10] = 0.15; // 异丁烷(i-C4H10)
|
||||
flowParams.dNG_Compents[11] = 0.35; // 正丁烷(n-C4H10)
|
||||
flowParams.dNG_Compents[12] = 0.05; // 异戊烷(i-C5H12)
|
||||
flowParams.dNG_Compents[13] = 0.1; // 正戊烷(n-C5H12)
|
||||
flowParams.dNG_Compents[14] = 0.01; // 己烷(C6H14)
|
||||
flowParams.dNG_Compents[15] = 0.0; // 庚烷(C7H16)
|
||||
flowParams.dNG_Compents[16] = 0.0; // 辛烷(C8H18)
|
||||
flowParams.dNG_Compents[17] = 0.0; // 壬烷(C9H20)
|
||||
flowParams.dNG_Compents[18] = 0.0; // 癸烷(C10H22)
|
||||
flowParams.dNG_Compents[19] = 0.04; // 氦气(He)
|
||||
flowParams.dNG_Compents[20] = 0.0; // 其他组分
|
||||
|
||||
// // 显式调用 NGCal_Init 初始化模块
|
||||
// if (NGCal_NGCal != NGCal_Init()) {
|
||||
// printf("错误:NGCal 初始化失败!\n");
|
||||
// return -1; // 退出程序
|
||||
// }
|
||||
|
||||
// 调用流量计算函数
|
||||
OFlowCal(&flowParams, &ngParams);
|
||||
|
||||
// 打印计算结果
|
||||
printf("工况条件信息:\n");
|
||||
printf("标准参比条件: %d\n", flowParams.dCbtj);
|
||||
printf("计量参比压力: %.2f\n", flowParams.dPb_M);
|
||||
printf("计量参比温度: %.2f\n", flowParams.dTb_M);
|
||||
printf("能量参比压力: %.2f\n", flowParams.dPb_E);
|
||||
printf("能量参比温度: %.2f\n", flowParams.dTb_E);
|
||||
printf("大气压力: %.2f Pa\n", flowParams.dPatm);
|
||||
printf("天然气组分:\n");
|
||||
for (int i = 0; i < 21; i++) {
|
||||
printf(" 组分 %d: %.6f\n", i, flowParams.dNG_Compents[i]);
|
||||
}
|
||||
|
||||
printf("\n仪表参数:\n");
|
||||
printf("仪表类型: %d\n", flowParams.dMeterType);
|
||||
printf("核心类型: %d\n", flowParams.dCoreType);
|
||||
printf("取压方式: %d\n", flowParams.dPtmode);
|
||||
printf("管道类型: %d\n", flowParams.dPipeType);
|
||||
printf("管道内径: %.2f mm\n", flowParams.dPipeD);
|
||||
printf("管道材质: %d\n", flowParams.dPipeMaterial);
|
||||
printf("孔板直径: %.2f mm\n", flowParams.dOrificeD);
|
||||
printf("孔板材质: %d\n", flowParams.dOrificeMaterial);
|
||||
|
||||
printf("\n测量值:\n");
|
||||
printf("压力: %.2f Pa\n", flowParams.dPf);
|
||||
printf("压力类型: %d\n", flowParams.dPfType);
|
||||
printf("温度: %.2f K\n", flowParams.dTf);
|
||||
printf("差压: %.2f Pa\n", flowParams.dDp);
|
||||
printf("仪表系数: %.6f\n", flowParams.dMeterFactor);
|
||||
printf("脉冲数: %.2f\n", flowParams.dPulseNum);
|
||||
|
||||
printf("\n计算结果:\n");
|
||||
printf("膨胀系数: %.6f\n", flowParams.dE);
|
||||
printf("相对密度系数: %.6f\n", flowParams.dFG);
|
||||
printf("超压缩系数: %.6f\n", flowParams.dFT);
|
||||
printf("动力粘度: %.6f\n", flowParams.dDViscosity);
|
||||
printf("热膨胀系数: %.6f\n", flowParams.dDExpCoefficient);
|
||||
printf("管道雷诺数: %.2f\n", flowParams.dRnPipe);
|
||||
printf("孔板弯曲系数: %.6f\n", flowParams.dBk);
|
||||
printf("管道粗糙度: %.6f\n", flowParams.dRoughNessPipe);
|
||||
printf("流出系数: %.6f\n", flowParams.dCd);
|
||||
printf("流出系数修正: %.6f\n", flowParams.dCdCorrect);
|
||||
printf("喷嘴流出系数: %.6f\n", flowParams.dCdNozell);
|
||||
printf("标况体积流量: %.6f Nm3/s\n", flowParams.dVFlowb);
|
||||
printf("工况体积流量: %.6f m3/s\n", flowParams.dVFlowf);
|
||||
printf("质量流量: %.6f t/s\n", flowParams.dMFlowb);
|
||||
printf("能量流量: %.6f MJ/s\n", flowParams.dEFlowb);
|
||||
printf("流速: %.6f m/s\n", flowParams.dVelocityFlow);
|
||||
printf("压力损失: %.6f\n", flowParams.dPressLost);
|
||||
printf("直径比: %.6f\n", flowParams.dBeta);
|
||||
printf("等熵指数: %.6f\n", flowParams.dKappa);
|
||||
printf("压缩因子: %.6f\n", flowParams.dFpv);
|
||||
|
||||
printf("状态: %ld\n", ngParams.lStatus);
|
||||
printf("强制更新标志: %d\n", ngParams.bForceUpdate);
|
||||
printf("混合比:\n");
|
||||
for (int i = 0; i < 21; i++) {
|
||||
printf(" 组分 %d: %.6f\n", i, ngParams.adMixture[i]);
|
||||
}
|
||||
printf("参比条件: %d\n", ngParams.dCbtj);
|
||||
printf("标准压力: %.2f Pa\n", ngParams.dPb);
|
||||
printf("标准温度: %.2f K\n", ngParams.dTb);
|
||||
printf("工作压力: %.2f Pa\n", ngParams.dPf);
|
||||
printf("工作温度: %.2f K\n", ngParams.dTf);
|
||||
|
||||
printf("\nAGA 8 详细计算结果:\n");
|
||||
printf("平均分子量: %.6f\n", ngParams.dMrx);
|
||||
printf("标准条件下压缩因子: %.6f\n", ngParams.dZb);
|
||||
printf("工作条件下压缩因子: %.6f\n", ngParams.dZf);
|
||||
printf("超压缩因子: %.6f\n", ngParams.dFpv);
|
||||
printf("标准条件下摩尔密度: %.6f moles/dm3\n", ngParams.dDb);
|
||||
printf("工作条件下摩尔密度: %.6f moles/dm3\n", ngParams.dDf);
|
||||
printf("标准条件下密度: %.6f kg/m3\n", ngParams.dRhob);
|
||||
printf("工作条件下密度: %.6f kg/m3\n", ngParams.dRhof);
|
||||
printf("理想相对密度: %.6f\n", ngParams.dRD_Ideal);
|
||||
printf("实际相对密度: %.6f\n", ngParams.dRD_Real);
|
||||
|
||||
printf("\n热力学性质:\n");
|
||||
printf("理想焓: %.6f\n", ngParams.dHo);
|
||||
printf("实际焓: %.6f J/kg\n", ngParams.dH);
|
||||
printf("实际熵: %.6f J/kg-mol.K\n", ngParams.dS);
|
||||
printf("理想定压比热: %.6f J/kg-mol.K\n", ngParams.dCpi);
|
||||
printf("实际定压比热: %.6f J/kg-mol.K\n", ngParams.dCp);
|
||||
printf("实际定容比热: %.6f J/kg-mol.K\n", ngParams.dCv);
|
||||
printf("比热比: %.6f\n", ngParams.dk);
|
||||
printf("等熵指数: %.6f\n", ngParams.dKappa);
|
||||
printf("声速: %.6f m/s\n", ngParams.dSOS);
|
||||
printf("临界流函数: %.6f\n", ngParams.dCstar);
|
||||
|
||||
printf("\n单位摩尔高热值: %.6f\n", ngParams.dHhvMol);
|
||||
printf("单位摩尔低热值: %.6f\n", ngParams.dLhvMol);
|
||||
}
|
BIN
User/NG/main.obj
Normal file
BIN
User/NG/main.obj
Normal file
Binary file not shown.
@ -184,7 +184,7 @@ static void key_thread_entry(void* parameter)
|
||||
if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON )/* K1 被按下 */
|
||||
{
|
||||
printf("挂起LED1线程!\n");
|
||||
uwRet = rt_thread_suspend(led1_thread);/* 挂起LED1线程 */
|
||||
uwRet = rt_thread_suspend(OFlowCal_thread);/* 挂起LED1线程 */
|
||||
if(RT_EOK == uwRet)
|
||||
{
|
||||
rt_kprintf("挂起LED1线程成功!\n");
|
||||
@ -197,7 +197,7 @@ static void key_thread_entry(void* parameter)
|
||||
if( Key_Scan(KEY2_GPIO_PORT,KEY2_PIN) == KEY_ON )/* K1 被按下 */
|
||||
{
|
||||
printf("恢复LED1线程!\n");
|
||||
uwRet = rt_thread_resume(led1_thread);/* 恢复LED1线程! */
|
||||
uwRet = rt_thread_resume(OFlowCal_thread);/* 恢复LED1线程! */
|
||||
if(RT_EOK == uwRet)
|
||||
{
|
||||
rt_kprintf("恢复LED1线程成功!\n");
|
||||
|
Loading…
Reference in New Issue
Block a user