Select Git revision
load_data.py
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
script_pipe_losses.py 26.17 KiB
# *****************************************************************************
# *****************************************************************************
# import libraries
import matplotlib.pyplot as plt
import math
# topupheat
import topupheat.pipes.fic as fic
from topupheat.pipes.single import StandardisedPipe, StandardisedPipeDatabase
from topupheat.pipes.twin import StandardisedTwinPipe
from topupheat.pipes.trenches import SupplyReturnPipeTrench, TwinPipeTrench
import topupheat.pipes.trenches as _tre
# *****************************************************************************
# *****************************************************************************
# pipe data
pipedata_files = [
'pipes/enerpipe_caldopex_single.csv',
'pipes/enerpipe_caldopex_twin.csv',
'pipes/isoplus_singlepipes_s1.csv',
'pipes/isoplus_singlepipes_s2.csv',
'pipes/isoplus_singlepipes_s3.csv',
'pipes/isoplus_twin_disconti_s1.csv',
'pipes/isoplus_twin_disconti_s2.csv',
'pipes/isoplus_twin_disconti_s3.csv',
]
# *****************************************************************************
# *****************************************************************************
# specifications
# maximum specific pressure drop
list_max_specific_pressure_loss = [100] # Pa/m
# district heating details
dh_flow_temperature = 273.15+100 # K
dh_return_temperature = 273.15+100 # K
# temperature fluid bulk
temperature_fluid_bulk = 0.5*(dh_return_temperature+dh_flow_temperature)
# ground temperature
ground_temperature = 273.15+10 # K
# pipe absolute/effective roughness
pipe_e_eff = 0.01/1000 # m
# pipe length
pipe_length = 1000
# pipe depth
pipe_depth = 0.8
# pipe soil
soil_k = 1 #0.5
# pipe distance
pipe_distance = 0.1 # plus diameter
ground_air_heat_transfer_coefficient = math.inf
# single pipe method
# single_pipe_trench_config = (_tre.SHT_METHOD_DIRECT, _tre.TRGTPT_KRISCHER1936)
# single_pipe_trench_config = (_tre.SHT_METHOD_SYM_ASYM, _tre.TRGTPT_MULTIPOLE_ZERO_ORDER)
# single_pipe_trench_config = (_tre.SHT_METHOD_SYM_ASYM, _tre.TRGTPT_MULTIPOLE_FIRST_ORDER)
# single_pipe_trench_config = (_tre.SHT_METHOD_DIRECT, _tre.TRGTPT_MULTIPOLE_ZERO_ORDER)
single_pipe_trench_config = (_tre.SHT_METHOD_DIRECT, _tre.TRGTPT_MULTIPOLE_FIRST_ORDER)
# twin pipe method
# twin_pipe_trench_config = (_tre.SHT_METHOD_SYM_ASYM, _tre.TRGTPT_MULTIPOLE_ZERO_ORDER)
# twin_pipe_trench_config = (_tre.SHT_METHOD_SYM_ASYM, _tre.TRGTPT_MULTIPOLE_FIRST_ORDER)
twin_pipe_trench_config = (_tre.SHT_METHOD_SYM_ASYM, _tre.TRGTPT_TWO_MODEL_APPROX)
# *****************************************************************************
# specify the pipes
list_pipe_tuples = [
# (20, 1, 'caldopex', '25-76'),
# (20, 2, 'caldopex', 'PLUS 25-91'),
# (25, 1, 'caldopex', '32-76'),
# (25, 2, 'caldopex', 'PLUS 32-91'),
# (32, 1, 'caldopex', '40-91'),
# (32, 2, 'caldopex', 'PLUS 40-111'),
# (40, 1, 'caldopex', '50-111'),
# (40, 2, 'caldopex', 'PLUS 50-126'),
# (50, 1, 'caldopex', '63-126'),
# (50, 2, 'caldopex', 'PLUS 63-142'),
# (65, 1, 'caldopex', '75-142'),
# (65, 2, 'caldopex', 'PLUS 75-162'),
# (80, 1, 'caldopex', '90-162'),
# (80, 2, 'caldopex', 'PLUS 90-182'),
# (100, 1, 'caldopex', '110-162'),
# (100, 2, 'caldopex', '110-182'),
# (100, 3, 'caldopex', 'PLUS 110-202'),
# (125, 1, 'caldopex', '125-182'),
# (125, 2, 'caldopex', 'PLUS 125-202'),
# (125, 3, 'caldopex', '140-202'),
# (150, 1, 'caldopex', '160-250'),
# (20, 1, 'caldopex', '25+25-91'),
# (20, 2, 'caldopex', 'PLUS 25+25-111'),
# (25, 1, 'caldopex', '32+32-111'),
# (25, 2, 'caldopex', 'PLUS 32+32-126'),
# (32, 1, 'caldopex', '40+40-126'),
# (32, 2, 'caldopex', 'PLUS 40+40-142'),
# (40, 1, 'caldopex', '50+50-162'),
# (40, 2, 'caldopex', 'PLUS 50+50-182'),
# (50, 1, 'caldopex', '63+63-182'),
# (50, 2, 'caldopex', 'PLUS 63+63-202'),
# (65, 1, 'caldopex', '75+75-202'),
(20, 1, 'isoplus', 'DRE-20-STD'),
(25, 1, 'isoplus', 'DRE-25-STD'),
(32, 1, 'isoplus', 'DRE-32-STD'),
(40, 1, 'isoplus', 'DRE-40-STD'),
(50, 1, 'isoplus', 'DRE-50-STD'),
(65, 1, 'isoplus', 'DRE-65-STD'),
(80, 1, 'isoplus', 'DRE-80-STD'),
(100, 1, 'isoplus', 'DRE-100-STD'),
(125, 1, 'isoplus', 'DRE-125-STD'),
(150, 1, 'isoplus', 'DRE-150-STD'),
(200, 1, 'isoplus', 'DRE-200-STD'),
(250, 1, 'isoplus', 'DRE-250-STD'),
(300, 1, 'isoplus', 'DRE-300-STD'),
(350, 1, 'isoplus', 'DRE-350-STD'),
(400, 1, 'isoplus', 'DRE-400-STD'),
(450, 1, 'isoplus', 'DRE-450-STD'),
(500, 1, 'isoplus', 'DRE-500-STD'),
(600, 1, 'isoplus', 'DRE-600-STD'),
(700, 1, 'isoplus', 'DRE-700-STD'),
(800, 1, 'isoplus', 'DRE-800-STD'),
(900, 1, 'isoplus', 'DRE-900-STD'),
(1000, 1, 'isoplus', 'DRE-1000-STD'),
(20, 2, 'isoplus', 'DRE-20-RE'),
(25, 2, 'isoplus', 'DRE-25-RE'),
(32, 2, 'isoplus', 'DRE-32-RE'),
(40, 2, 'isoplus', 'DRE-40-RE'),
(50, 2, 'isoplus', 'DRE-50-RE'),
(65, 2, 'isoplus', 'DRE-65-RE'),
(80, 2, 'isoplus', 'DRE-80-RE'),
(100, 2, 'isoplus', 'DRE-100-RE'),
(125, 2, 'isoplus', 'DRE-125-RE'),
(150, 2, 'isoplus', 'DRE-150-RE'),
(200, 2, 'isoplus', 'DRE-200-RE'),
(250, 2, 'isoplus', 'DRE-250-RE'),
(300, 2, 'isoplus', 'DRE-300-RE'),
(350, 2, 'isoplus', 'DRE-350-RE'),
(400, 2, 'isoplus', 'DRE-400-RE'),
(450, 2, 'isoplus', 'DRE-450-RE'),
(500, 2, 'isoplus', 'DRE-500-RE'),
(600, 2, 'isoplus', 'DRE-600-RE'),
(700, 2, 'isoplus', 'DRE-700-RE'),
(800, 2, 'isoplus', 'DRE-800-RE'),
(900, 2, 'isoplus', 'DRE-900-RE'),
(1000, 2, 'isoplus', 'DRE-1000-RE'),
(20, 3, 'isoplus', 'DRE-20-TWIRE'),
(25, 3, 'isoplus', 'DRE-25-TWIRE'),
(32, 3, 'isoplus', 'DRE-32-TWIRE'),
(40, 3, 'isoplus', 'DRE-40-TWIRE'),
(50, 3, 'isoplus', 'DRE-50-TWIRE'),
(65, 3, 'isoplus', 'DRE-65-TWIRE'),
(80, 3, 'isoplus', 'DRE-80-TWIRE'),
(100, 3, 'isoplus', 'DRE-100-TWIRE'),
(125, 3, 'isoplus', 'DRE-125-TWIRE'),
(150, 3, 'isoplus', 'DRE-150-TWIRE'),
(200, 3, 'isoplus', 'DRE-200-TWIRE'),
(250, 3, 'isoplus', 'DRE-250-TWIRE'),
(300, 3, 'isoplus', 'DRE-300-TWIRE'),
(350, 3, 'isoplus', 'DRE-350-TWIRE'),
(400, 3, 'isoplus', 'DRE-400-TWIRE'),
(450, 3, 'isoplus', 'DRE-450-TWIRE'),
(500, 3, 'isoplus', 'DRE-500-TWIRE'),
(600, 3, 'isoplus', 'DRE-600-TWIRE'),
(20, 1, 'isoplus', 'DRD-20-STD'),
(25, 1, 'isoplus', 'DRD-25-STD'),
(32, 1, 'isoplus', 'DRD-32-STD'),
(40, 1, 'isoplus', 'DRD-40-STD'),
(50, 1, 'isoplus', 'DRD-50-STD'),
(65, 1, 'isoplus', 'DRD-65-STD'),
(80, 1, 'isoplus', 'DRD-80-STD'),
(100, 1, 'isoplus', 'DRD-100-STD'),
(125, 1, 'isoplus', 'DRD-125-STD'),
(150, 1, 'isoplus', 'DRD-150-STD'),
(200, 1, 'isoplus', 'DRD-200-STD'),
(20, 2, 'isoplus', 'DRD-20-RE'),
(25, 2, 'isoplus', 'DRD-25-RE'),
(32, 2, 'isoplus', 'DRD-32-RE'),
(40, 2, 'isoplus', 'DRD-40-RE'),
(50, 2, 'isoplus', 'DRD-50-RE'),
(65, 2, 'isoplus', 'DRD-65-RE'),
(80, 2, 'isoplus', 'DRD-80-RE'),
(100, 2, 'isoplus', 'DRD-100-RE'),
(125, 2, 'isoplus', 'DRD-125-RE'),
(150, 2, 'isoplus', 'DRD-150-RE'),
(200, 2, 'isoplus', 'DRD-200-RE'),
(20, 3, 'isoplus', 'DRD-20-TWIRE'),
(25, 3, 'isoplus', 'DRD-25-TWIRE'),
(32, 3, 'isoplus', 'DRD-32-TWIRE'),
(40, 3, 'isoplus', 'DRD-40-TWIRE'),
(50, 3, 'isoplus', 'DRD-50-TWIRE'),
(65, 3, 'isoplus', 'DRD-65-TWIRE'),
(80, 3, 'isoplus', 'DRD-80-TWIRE'),
(100, 3, 'isoplus', 'DRD-100-TWIRE'),
(125, 3, 'isoplus', 'DRD-125-TWIRE'),
(150, 3, 'isoplus', 'DRD-150-TWIRE')
]
# specify the pipes
u_pipes = {
(20, 1, 'caldopex', '25-76'): 0,
(20, 2, 'caldopex', 'PLUS 25-91'): 0,
(25, 1, 'caldopex', '32-76'): 0,
(25, 2, 'caldopex', 'PLUS 32-91'): 0,
(32, 1, 'caldopex', '40-91'): 0,
(32, 2, 'caldopex', 'PLUS 40-111'): 0,
(40, 1, 'caldopex', '50-111'): 0,
(40, 2, 'caldopex', 'PLUS 50-126'): 0,
(50, 1, 'caldopex', '63-126'): 0,
(50, 2, 'caldopex', 'PLUS 63-142'): 0,
(65, 1, 'caldopex', '75-142'): 0,
(65, 2, 'caldopex', 'PLUS 75-162'): 0,
(80, 1, 'caldopex', '90-162'): 0,
(80, 2, 'caldopex', 'PLUS 90-182'): 0,
(100, 1, 'caldopex', '110-162'): 0,
(100, 2, 'caldopex', '110-182'): 0,
(100, 3, 'caldopex', 'PLUS 110-202'): 0,
(125, 1, 'caldopex', '125-182'): 0,
(125, 2, 'caldopex', 'PLUS 125-202'): 0,
(125, 3, 'caldopex', '140-202'): 0,
(150, 1, 'caldopex', '160-250'): 0,
(20, 1, 'caldopex', '25+25-91'): 0,
(20, 2, 'caldopex', 'PLUS 25+25-111'): 0,
(25, 1, 'caldopex', '32+32-111'): 0,
(25, 2, 'caldopex', 'PLUS 32+32-126'): 0,
(32, 1, 'caldopex', '40+40-126'): 0,
(32, 2, 'caldopex', 'PLUS 40+40-142'): 0,
(40, 1, 'caldopex', '50+50-162'): 0,
(40, 2, 'caldopex', 'PLUS 50+50-182'): 0,
(50, 1, 'caldopex', '63+63-182'): 0,
(50, 2, 'caldopex', 'PLUS 63+63-202'): 0,
(65, 1, 'caldopex', '75+75-202'): 0,
# single pipe, standard insulation
(20, 1, 'isoplus', 'DRE-20-STD'): 0.1295,
(25, 1, 'isoplus', 'DRE-25-STD'): 0.1564,
(32, 1, 'isoplus', 'DRE-32-STD'): 0.1589,
(40, 1, 'isoplus', 'DRE-40-STD'): 0.1810,
(50, 1, 'isoplus', 'DRE-50-STD'): 0.2013,
(65, 1, 'isoplus', 'DRE-65-STD'): 0.2325,
(80, 1, 'isoplus', 'DRE-80-STD'): 0.2418,
(100, 1, 'isoplus', 'DRE-100-STD'): 0.2543,
(125, 1, 'isoplus', 'DRE-125-STD'): 0.2880,
(150, 1, 'isoplus', 'DRE-150-STD'): 0.3369,
(200, 1, 'isoplus', 'DRE-200-STD'): 0.3686,
(250, 1, 'isoplus', 'DRE-250-STD'): 0.3637,
(300, 1, 'isoplus', 'DRE-300-STD'): 0.4126,
(350, 1, 'isoplus', 'DRE-350-STD'): 0.4009,
(400, 1, 'isoplus', 'DRE-400-STD'): 0.4222,
(450, 1, 'isoplus', 'DRE-450-STD'): 0.4242,
(500, 1, 'isoplus', 'DRE-500-STD'): 0.4149,
(600, 1, 'isoplus', 'DRE-600-STD'): 0.5002,
(700, 1, 'isoplus', 'DRE-700-STD'): 0.5665,
(800, 1, 'isoplus', 'DRE-800-STD'): 0.6372,
(900, 1, 'isoplus', 'DRE-900-STD'): 0.7027,
(1000, 1, 'isoplus', 'DRE-1000-STD'): 0.7742,
# single pipe, reinforced
(20, 2, 'isoplus', 'DRE-20-RE'): 0.1114,
(25, 2, 'isoplus', 'DRE-25-RE'): 0.1308,
(32, 2, 'isoplus', 'DRE-32-RE'): 0.1420,
(40, 2, 'isoplus', 'DRE-40-RE'): 0.1593,
(50, 2, 'isoplus', 'DRE-50-RE'): 0.1763,
(65, 2, 'isoplus', 'DRE-65-RE'): 0.1980,
(80, 2, 'isoplus', 'DRE-80-RE'): 0.2076,
(100, 2, 'isoplus', 'DRE-100-RE'): 0.2148,
(125, 2, 'isoplus', 'DRE-125-RE'): 0.2459,
(150, 2, 'isoplus', 'DRE-150-RE'): 0.2794,
(200, 2, 'isoplus', 'DRE-200-RE'): 0.2953,
(250, 2, 'isoplus', 'DRE-250-RE'): 0.2914,
(300, 2, 'isoplus', 'DRE-300-RE'): 0.3284,
(350, 2, 'isoplus', 'DRE-350-RE'): 0.3169,
(400, 2, 'isoplus', 'DRE-400-RE'): 0.3277,
(450, 2, 'isoplus', 'DRE-450-RE'): 0.3299,
(500, 2, 'isoplus', 'DRE-500-RE'): 0.3249,
(600, 2, 'isoplus', 'DRE-600-RE'): 0.3748,
(700, 2, 'isoplus', 'DRE-700-RE'): 0.4238,
(800, 2, 'isoplus', 'DRE-800-RE'): 0.4732,
(900, 2, 'isoplus', 'DRE-900-RE'): 0.5221,
(1000, 2, 'isoplus', 'DRE-1000-RE'): 0.5733,
# single pipe, twice reinforced
(20, 3, 'isoplus', 'DRE-20-TWIRE'): 0.10280,
(25, 3, 'isoplus', 'DRE-25-TWIRE'): 0.1191,
(32, 3, 'isoplus', 'DRE-32-TWIRE'): 0.1290,
(40, 3, 'isoplus', 'DRE-40-TWIRE'): 0.1432,
(50, 3, 'isoplus', 'DRE-50-TWIRE'): 0.1557,
(65, 3, 'isoplus', 'DRE-65-TWIRE'): 0.1744,
(80, 3, 'isoplus', 'DRE-80-TWIRE'): 0.1847,
(100, 3, 'isoplus', 'DRE-100-TWIRE'): 0.1905,
(125, 3, 'isoplus', 'DRE-125-TWIRE'): 0.2138,
(150, 3, 'isoplus', 'DRE-150-TWIRE'): 0.2343,
(200, 3, 'isoplus', 'DRE-200-TWIRE'): 0.2472,
(250, 3, 'isoplus', 'DRE-250-TWIRE'): 0.2468,
(300, 3, 'isoplus', 'DRE-300-TWIRE'): 0.2698,
(350, 3, 'isoplus', 'DRE-350-TWIRE'): 0.2605,
(400, 3, 'isoplus', 'DRE-400-TWIRE'): 0.2684,
(450, 3, 'isoplus', 'DRE-450-TWIRE'): 0.2703,
(500, 3, 'isoplus', 'DRE-500-TWIRE'): 0.2669,
(600, 3, 'isoplus', 'DRE-600-TWIRE'): 0.3065,
# isoplus twin disconti
(20, 1, 'isoplus', 'DRD-20-STD'): 0.1830,
(25, 1, 'isoplus', 'DRD-25-STD'): 0.1981,
(32, 1, 'isoplus', 'DRD-32-STD'): 0.2154,
(40, 1, 'isoplus', 'DRD-40-STD'): 0.2573,
(50, 1, 'isoplus', 'DRD-50-STD'): 0.2495,
(65, 1, 'isoplus', 'DRD-65-STD'): 0.2923,
(80, 1, 'isoplus', 'DRD-80-STD'): 0.3343,
(100, 1, 'isoplus', 'DRD-100-STD'): 0.3348,
(125, 1, 'isoplus', 'DRD-125-STD'): 0.3100,
(150, 1, 'isoplus', 'DRD-150-STD'): 0.3763,
(200, 1, 'isoplus', 'DRD-200-STD'): 0.4115,
(20, 2, 'isoplus', 'DRD-20-RE'): 0.1608,
(25, 2, 'isoplus', 'DRD-25-RE'): 0.1700,
(32, 2, 'isoplus', 'DRD-32-RE'): 0.1856,
(40, 2, 'isoplus', 'DRD-40-RE'): 0.2144,
(50, 2, 'isoplus', 'DRD-50-RE'): 0.2076,
(65, 2, 'isoplus', 'DRD-65-RE'): 0.2430,
(80, 2, 'isoplus', 'DRD-80-RE'): 0.2653,
(100, 2, 'isoplus', 'DRD-100-RE'): 0.2635,
(125, 2, 'isoplus', 'DRD-125-RE'): 0.2488,
(150, 2, 'isoplus', 'DRD-150-RE'): 0.2914,
(200, 2, 'isoplus', 'DRD-200-RE'): 0.3037,
(20, 3, 'isoplus', 'DRD-20-TWIRE'): 0.1423,
(25, 3, 'isoplus', 'DRD-25-TWIRE'): 0.1516,
(32, 3, 'isoplus', 'DRD-32-TWIRE'): 0.1661,
(40, 3, 'isoplus', 'DRD-40-TWIRE'): 0.1882,
(50, 3, 'isoplus', 'DRD-50-TWIRE'): 0.1833,
(65, 3, 'isoplus', 'DRD-65-TWIRE'): 0.2074,
(80, 3, 'isoplus', 'DRD-80-TWIRE'): 0.2199,
(100, 3, 'isoplus', 'DRD-100-TWIRE'): 0.2197,
(125, 3, 'isoplus', 'DRD-125-TWIRE'): 0.2126,
(150, 3, 'isoplus', 'DRD-150-TWIRE'): 0.2379
}
# *****************************************************************************
# *****************************************************************************
# pipe data
pipedb = StandardisedPipeDatabase(source=pipedata_files)
# fluid data
fluiddata_file = 'fluids/incropera2006_saturated_water.csv'
fluiddb = fic.FluidDatabase(fluid='water', phase='l', source=fluiddata_file)
# *****************************************************************************
# *****************************************************************************
# pipe tuples
list_single_pipe_tuples = [
pipe_tuple
for pipe_tuple in list_pipe_tuples
if not pipedb.is_twin[pipe_tuple]
]
list_twin_pipe_tuples = [
pipe_tuple
for pipe_tuple in list_pipe_tuples
if pipedb.is_twin[pipe_tuple]
]
# pipe objects
list_single_pipes = [
StandardisedPipe(
pipe_tuple=pipe_tuple,
e_eff=pipe_e_eff, # override pipe absolute roughness
length=pipe_length, # override the pipe length
db=pipedb)
for pipe_tuple in list_single_pipe_tuples
]
list_twin_pipes = [
StandardisedTwinPipe(
pipe_tuple=pipe_tuple,
e_eff=pipe_e_eff, # override pipe absolute roughness
length=pipe_length, # override the pipe length
db=pipedb)
for pipe_tuple in list_twin_pipe_tuples
]
# *****************************************************************************
# *****************************************************************************
# 3) calculate the pipe efficiency as a function of the pipe diameter
# *****************************************************************************
# create a list of pipe objects
dict_single_trench = {}
dict_single_capacity = {}
dict_single_heat_transfer_rate = {}
dict_twin_trench = {}
dict_twin_capacity = {}
dict_twin_heat_transfer_rate = {}
# for each specific pressure loss level
for max_specific_pressure_loss in list_max_specific_pressure_loss:
if len(list_single_pipe_tuples) != 0:
# single pipe trench
single_trench = SupplyReturnPipeTrench(
pipe_center_depth=[pipe_depth+pipe.d_cas/2 for pipe in list_single_pipes],
pipe_center_distance=[pipe_distance+pipe.d_cas for pipe in list_single_pipes],
fluid_db=fluiddb,
phase=fluiddb.fluid_LIQUID,
pressure=[1e5 for i in range(len(list_single_pipes))],
supply_temperature=[dh_flow_temperature for i in range(len(list_single_pipes))],
return_temperature=[dh_return_temperature for i in range(len(list_single_pipes))],
max_specific_pressure_loss=[max_specific_pressure_loss for i in range(len(list_single_pipes))],
supply_pipe=list_single_pipes
)
assert single_trench.vector_mode
# single pipe trench losses
qs, qr = single_trench.specific_heat_transfer_surroundings(
ground_thermal_conductivity=soil_k,
ground_air_heat_transfer_coefficient=ground_air_heat_transfer_coefficient,
temperature_surroundings=ground_temperature,
method=single_pipe_trench_config[0],
model=single_pipe_trench_config[1]
)
single_trench_htr = [_qs+_qr for _qs, _qr in zip(qs, qr)]
# add lists to the dicts
dict_single_trench.update(
{max_specific_pressure_loss: single_trench}
)
dict_single_heat_transfer_rate.update(
{max_specific_pressure_loss: single_trench_htr}
)
dict_single_capacity.update(
{max_specific_pressure_loss: single_trench.rated_heat_capacity()}
)
# *************************************************************************
if len(list_twin_pipes) != 0:
# twin pipe trench
twin_trench = TwinPipeTrench(
pipe_center_depth=[pipe_depth+pipe.d_cas/2 for pipe in list_twin_pipes],
fluid_db=fluiddb,
phase=fluiddb.fluid_LIQUID,
pressure=[1e5 for i in range(len(list_twin_pipes))],
supply_temperature=[dh_flow_temperature for i in range(len(list_twin_pipes))],
return_temperature=[dh_return_temperature for i in range(len(list_twin_pipes))],
max_specific_pressure_loss=[max_specific_pressure_loss for i in range(len(list_twin_pipes))],
supply_pipe=list_twin_pipes
)
assert twin_trench.vector_mode
# twin pipe trench losses
qs, qr = twin_trench.specific_heat_transfer_surroundings(
ground_thermal_conductivity=soil_k,
ground_air_heat_transfer_coefficient=ground_air_heat_transfer_coefficient,
temperature_surroundings=ground_temperature,
method=twin_pipe_trench_config[0],
model=twin_pipe_trench_config[1]
)
twin_trench_htr = [_qs+_qr for _qs, _qr in zip(qs, qr)]
# add lists to the dicts
dict_twin_trench.update(
{max_specific_pressure_loss: twin_trench}
)
dict_twin_heat_transfer_rate.update(
{max_specific_pressure_loss: twin_trench_htr}
)
dict_twin_capacity.update(
{max_specific_pressure_loss: twin_trench.rated_heat_capacity()}
)
# *************************************************************************
# *****************************************************************************
# *****************************************************************************
# plot the pipe heat losses as a function of pipe specifiction
fig, ax = plt.subplots()
fig.set_size_inches(15,10)
model_string_ids = ['-STD','-RE','-TWIRE']
single_pipe_tuples_per_tech = {
i: [pipe_tuple for pipe_tuple in list_single_pipe_tuples if model_string_ids[i] in pipe_tuple[3]]
for i, _str in enumerate(model_string_ids)
}
twin_pipe_tuples_per_tech = {
i: [pipe_tuple for pipe_tuple in list_twin_pipe_tuples if model_string_ids[i] in pipe_tuple[3]]
for i, _str in enumerate(model_string_ids)
}
for max_specific_pressure_loss in list_max_specific_pressure_loss:
for tech_index, _single_pipe_tuples in single_pipe_tuples_per_tech.items():
_indices = [list_single_pipe_tuples.index(pipe_tuple) for pipe_tuple in _single_pipe_tuples]
# single pipe
ax.plot(
[1000*list_single_pipes[index].d_int for index in _indices],
[2*u_pipes[pipe_tuple]*(temperature_fluid_bulk-ground_temperature)
for pipe_tuple in _single_pipe_tuples],
'ro-',
markersize=10,
label='topupheat, tech '+str(model_string_ids[tech_index])
)
for tech_index, _twin_pipe_tuples in twin_pipe_tuples_per_tech.items():
_indices = [list_twin_pipe_tuples.index(pipe_tuple) for pipe_tuple in _twin_pipe_tuples]
# twin pipe
ax.plot(
[1000*list_twin_pipes[index].d_int for index in _indices],
[u_pipes[pipe_tuple]*(temperature_fluid_bulk-ground_temperature)
for pipe_tuple in _twin_pipe_tuples],
'bo-',
markersize=10,
label='topupheat, tech '+str(model_string_ids[tech_index])
)
# # single pipe
# ax.plot([1000*pipe.d_int for pipe in list_single_pipes],
# [u_pipes[pipe.pipe_tuple]*(temperature_fluid_bulk-ground_temperature)
# for pipe in list_single_pipes],
# 'ro',
# markersize=10,
# label='Single @ '+str(max_specific_pressure_loss)+' Pa/m')
# # twin pipe
# ax.plot([1000*pipe.d_int for pipe in list_twin_pipes],
# [u_pipes[pipe.pipe_tuple]*(temperature_fluid_bulk-ground_temperature)
# for pipe in list_twin_pipes],
# 'go',
# markersize=10,
# label='Twin @ '+str(max_specific_pressure_loss)+' Pa/m')
# ax.plot([1000*single_trench.supply_pipe.d_int
# for single_trench in dict_single_trench[max_specific_pressure_loss]],
# [qloss_line #sum(qloss_line)
# for qloss_line in dict_heat_losses[max_specific_pressure_loss]],
# 'ro-',
# markersize=10,
# label='Results @ '+str(max_specific_pressure_loss)+' Pa/m')
# ax.plot([d_int*1000 for d_int in table_d_int],
# table_losses,
# 'bs-',
# markersize=10,
# label='Röder et al. (2021)')
ax.plot([1000*pipe.d_int for pipe in list_single_pipes],
[dict_single_heat_transfer_rate[max_specific_pressure_loss][i]
for i, pipe_tuple in enumerate(list_single_pipe_tuples)],
'gx',
markersize=10,
label='isoplus, 2x single')
ax.plot([1000*pipe.d_int for pipe in list_twin_pipes],
[dict_twin_heat_transfer_rate[max_specific_pressure_loss][i]
for i, pipe_tuple in enumerate(list_twin_pipe_tuples)],
'k^',
markersize=10,
label='isoplus, 1x twin')
ax.set(xlabel='Nominal diameter (DN)',
ylabel='Specific heat losses [W/m]',
title='Specific heat losses as a function of pipe diameter')
ax.grid()
ax.legend()
# fig.savefig("test.png")
plt.show()
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# plot the pipe heat losses as a function of pipe heat capacity
# # Röder2021: http://doi.org/10.5278/ijsepm.6248
# table_phc = [0.07e6,0.08e6,0.1e6,0.2e6,0.35e6,0.6e6,0.800e6,1.495e6,2.05e6,3.95e6]
# table_losses = [7,8,9,8.5,12,16,18,22,31,33] # W/m
# list_losses = [heat/pipe_length for heat in list_heat_transfer_rate]
# fig, ax = plt.subplots()
# ax.plot([-pc for pc in list_pc],
# list_losses)
# ax.plot(table_phc,
# table_losses)
# ax.set(xlabel='pipe heat capacity (kW)',
# ylabel='Specific heat losses [-]',
# title='Specific heat losses as a function of pipe heat capacity')
# ax.grid()
# # fig.savefig("test.png")
# plt.show()
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# # plot the pipe heat capacity as a function of the pipe diameter
# # Röder2021: http://doi.org/10.5278/ijsepm.6248
# fig, ax = plt.subplots()
# fig.set_size_inches(15,10)
# for max_specific_pressure_loss in list_max_specific_pressure_loss:
# ax.plot([1000*pipe.d_int
# for pipe in dict_single_trench[max_specific_pressure_loss].supply_pipe],
# [htr/1e3
# for htr in dict_single_capacity[max_specific_pressure_loss]],
# 'ro-',
# label='Results @ '+str(max_specific_pressure_loss)+' Pa/m')
# # *****************************************************************************
# ax.plot(table_dn,
# #[d_int*1000 for d_int in table_d_int],
# table_power,
# 'bx-',
# label='Röder et al. (2021)')
# ax.set(xlabel='Nominal diameter [mm]',
# ylabel='Heat transfer rate [kW]',
# title='Pipe design capacity comparison: own vs Röder et al. (2021)')
# ax.grid()
# ax.legend()
# # fig.savefig("test.png")
# plt.show()
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************
# *****************************************************************************