diff --git a/examples/script_pipe_losses.py b/examples/script_pipe_losses.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c6116f1ece790abb2fc6b6e6ef641d60c56ad88
--- /dev/null
+++ b/examples/script_pipe_losses.py
@@ -0,0 +1,663 @@
+# *****************************************************************************
+# *****************************************************************************
+
+# 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()
+
+# *****************************************************************************
+# *****************************************************************************
+# *****************************************************************************
+# *****************************************************************************
+# *****************************************************************************
+# *****************************************************************************
\ No newline at end of file