LIGO-T2400377
Cosmic Explorer (CE)
Cost Estimate of Unstiffened 
and Ring - Stiffened Beam Tubes
(based on 1992-1994 cost data)

v1

Initial Release: based on 1992-1994 cost info from CBI for LIGO
Dennis Coyne, 11-Nov-2024

Scope

The scope of this cost estimate is the Beam Tube and its supports including design, materials, stiffening provisions, pump ports, supports, manufacturing, cleaning, transportation, and leak testing.
Does not include the baffles, slab (foundation), BT enclosure, BT insulation,  BT vacuum bake, vacuum equipment (gate valves, pumps, controls, gauges, etc.), overall management oversight, cost of money, etc.

Caveats

There are many caveats to the cost estimate presented below. My hope is that this is just the start - that this notebook can be revised and developed as new concepts are proposed and new cost information is derived and created.

Mike Zucker has proposed a Short Spool Beam Tube Concept: https://dcc.ligo.org/LIGO-T2400348
Mike raises some good questions about the assumptions inherent in assuming that longer tubes are more cost effective.
However without further study and serious costing exercises, it is not yet possible to show these trad-offs in a quantitative cost estimate. This estimate is based on CBI’s 1992 cost estimate where longer tube segment lengths have lower costs, limited by the transportation limit of 65 ft (~20 m).

general

I’m allowing extrapolation of the interpolation functions, so turning off warnings:

Off[InterpolatingFunction::dmval];

Sources

https://dcc.ligo.org/LIGO-C1900321, LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 16:
CBI has decided that they cannot justify the $600K or so (before G&A, fee) extra cost for hydroformed expansion joint. They are planning to change their stance and propose the mechanical formed Hyspan joint.

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59-62:
LIGO_DRD_9_ITEM_3.pdf, pg. 155-156 (repeat):
transportation costs for tube sections > 65’ (19.812 m) increase considerably due to a $1.15/mile premium to provide escort vehicles for trucks
Table on pg. 60 provides a cost tradeoff with tube length.
There are errors in the calculation of the number of tubes required for tube segment lengths of 40, 50 and 55 ft. (the 1st 3 rows).
The required number of supports assumes just 4 less than the number of required tubes, i.e. supports at the ends of end segment except the 4 termination supports at the ends of each 2 km modules.
The number of installed tubes is assumed to be 1 less than the number of required tube segments. This should realled be 4 less, so that it is consistent with the number of spare tube segments.
The number of LeakTests is assumed to be 1 more than the number of required tube segments per site. This should be 4 more to account for the spare tube segments.
for tube length, L range of 40’ (12.2 m) <= L <= 60’ (21.3 m)
costTransPerMile[L] = average transportation cost per mile per length of tube
nTubesPerLoad = # of tubes per truck load
nTubes = # tubes required per site
nBellows = # bellows required per site
nSupports = # supports installed per site
nTubeInstalls = # tube segments installed per site
costPerBellows = installed cost of a bellows
costPerSupport = installed cost of a support
costPerTubeInstall = installation cost per tube (not incl. tube material and mfg. cost)
costPerLeakTest = cost per leak test

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 105 & 247 (repeat):
Coil material procurement costs, including:
cost of coil material (304L)
transport cost to/from bake facility
bake cost
transport cost to/from finishing mill
outgas test costs
cost to level
cost to slit
transport to tube mfg
less cost of 10% scrap steel
Here I summarize as a single cost for material and manufacturing, independent of tube segment length:
costTubeNfg

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 113:
Spiral welded tube manufacturing cost is taken as the average of 3 manufacturing quotes/estimates for tube manufacturing + equipment costs + material overhead. Costs are not quoted as a function of tube segment length.

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 139-141 & 282 (repeat):
BT stiffener material costs (material, painting & welding)

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 252-255:
LIGO_DRD_9_ITEM_3.pdf, pg. 128-138
BT configuration --> Bellows and Support spacing

Albert Lazzarini shared an Appendix of cost information that Rai Weiss compiled for a 2020 proposal to the NSF for CE seed funding for vacuum research. This appendix was not submitted due to page count restrictions. The interesting part of this estimate is the separation of Fixed and “Per km” costs. See the section below entitled “LIGO Fabrication Cost based on LIGO Cost Book”.

LIGO Fabrication Cost based on CBI documentation

N.B. : Costs below are for one LIGO Site (8 km of Tube)

Short Transport (Portland, OR to Hanford, WA) Case

This was the shortest transportation case considered by CBI but had the highest cost per mile.

(* using Portland, OR to Hanford, WA rates*)
(*  costTransPerMile[BTsegmentLength]  *)
transMileageCosts={{12.192,2.03172},{15.24,2.03172},{16.764,2.68537},{18.288,3.02828},{19.812,3.20449},{21.336,4.35449},{22.86,4.35449}};
costTransPerMile=Interpolation[transMileageCosts,InterpolationOrder->1];
Off[InterpolatingFunction::dmval];

(* LIGO BT is "interrupted" at the mid-station *)
armLength1=3987.155-2028.345;
armLength2=2006.155-47.345;

armLength1+armLength2

(* including 1 spare tube segment per ~2km module *)
BTsegmentLength={40,50,55,60,65,70}  0.3048;Clear[nTubes];nTubes[BTL_]:=2 (Ceiling[armLength1/BTL]+Ceiling[armLength2/BTL]+2);

nTubesPerLoad=4;
nLoads=nTubes[BTsegmentLength]/nTubesPerLoad;

(* Portland, OR to Hanford, WA *)
miles=227;
costTrans=nLoads*miles*costTransPerMile[BTsegmentLength];

nTubeSegments=nTubes[BTsegmentLength];
nBellows=nTubes[BTsegmentLength]/2;
nSupports=nTubes[BTsegmentLength]-4;
nTubeInstalls=nTubes[BTsegmentLength]-1;
nLeakTests=nTubes[BTsegmentLength]+1;
nSites=2;

costPerBellows=3000;
costPerSupport=3800;
costPerTubeInstall=1500;
costPerLeakTest=2200;

costBellows=nSites nBellows costPerBellows;
costSupports=nSites nSupports costPerSupport;
costTubeInstall=nSites nTubeSegments costPerTubeInstall;
costLeakTests=nSites nLeakTests costPerLeakTest;

totalCostInstall=(costTrans+costBellows+costSupports+costTubeInstall+costLeakTests)/10^6;

(* Compare to Table at bottom of pg. 60 of LIGO_DRD _ 9 _ITEM _ 2. pdf *)
(* reference table has errors especially in 1st 3 columns *)

TableForm[Partition[Join[costTrans,costBellows,costSupports,costTubeInstall,costLeakTests],Length[BTsegmentLength]],TableHeadings->{{"Freight","Bellows","Supports","Tube Install","Leak Test"},{"40'","50'","55'","60'","65'","70'"}}]

(* Compare to Figure on pg. 61 of LIGO_DRD _ 9 _ITEM _ 2. pdf *)

ListPlot[Transpose[Partition[Join[BTsegmentLength,totalCostInstall],Length[BTsegmentLength]]],Joined->True,Frame->True,FrameLabel->{"BT Segment Length (m)","Estimated Installed Cost ($M)\n(except BT material & Mfg.)"},GridLines->Automatic,PlotLabel->Style["LIGO Beam Tube Installation Cost vs Segment Length",14]]

(* cost of the tube material and manufacturing is taken as the average of 5 steel manufacturer costs, +/- 11% 
Note that these costs are independent of tube segment length *)costCoilMfg=(5068734+6030090+5663768+4893966+6190206)/5 /10^6//N

costSpiralWeldMfg=(3870944+548800+262904+4303000+106650+296466+1809792+208867)/3/10^6 //N

nStiffeners=19552;
costPerInstalledStiffener=(34+41+80)/3 //N;
costStiffeners=nStiffeners costPerInstalledStiffener/10^6;

totalCost=totalCostInstall+costCoilMfg+costSpiralWeldMfg+costStiffeners;

(* Adding all costs together *)

ListPlot[Transpose[Partition[Join[BTsegmentLength,totalCost],Length[BTsegmentLength]]],Joined->True,Frame->True,GridLines->Automatic,FrameLabel->{"BT Segment Length (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["LIGO Total Beam Tube Cost vs Segment Length",20]]

pieData=Transpose[Partition[Join[costTrans/10^6,costBellows/10^6,costSupports/10^6,costTubeInstall/10^6,costLeakTests/10^6,costStiffeners Table[1,{6}] ,costCoilMfg Table[1,{6}] ,costSpiralWeldMfg Table[1,{6}] ],6]]//N;

PieChart[pieData,ChartLabels->{"Freight","Bellows","Supports","Install","Leak Tests","Stiffeners","Coil","Spiral Weld"},PlotLabel->Style["Relative Costs for Tube Segment Lengths:\n40',50',55',60',65',70'",14]]

Long transport Case

BTsegmentLength

(* Using high transportation rates corresponding to Portland, OR to Hanford, WA *)
miles=3000;
costTrans=nLoads miles costTransPerMile[BTsegmentLength]

totalCostInstall=(costTrans+costBellows+costSupports+costTubeInstall+costLeakTests)/10^6;
totalCost=totalCostInstall+costCoilMfg+costSpiralWeldMfg+costStiffeners

relCostTrans=(costTrans/10^6)/totalCost;
relCostBellows=(costBellows/10^6)/totalCost;
relCostSupports=(costSupports/10^6)/totalCost;
relCostTubeInstall=(costTubeInstall/10^6)/totalCost;
relCostLeakTests=(costLeakTests/10^6)/totalCost;
relCostStiffeners=(costStiffeners)/totalCost;
relCostCoilMfg=(costCoilMfg)/totalCost;
relCostSpiralWeldMfg=(costSpiralWeldMfg)/totalCost;

PercentForm[TableForm[Partition[Join[relCostTrans,relCostBellows,relCostSupports,relCostTubeInstall,relCostLeakTests,relCostStiffeners,relCostCoilMfg,relCostSpiralWeldMfg],Length[BTsegmentLength]],TableHeadings->{{"Freight","Bellows","Supports","Tube Install","Leak Test","Stiffeners","Coil Mfg","Spiral Weld Mfg"},{"40'","50'","55'","60'","65'","70'"}}],2]

TableForm[totalCost,TableDirections->Row,TableHeadings->{{"40'","50'","55'","60'","65'","70'"}}]

LIGO Fabrication Cost based on LIGO Cost Book

Albert Lazzarini shared an Appendix of cost information that Rai Weiss compiled for a 2020 proposal to the NSF for CE seed funding for vacuum research. This appendix was not submitted due to page count restrictions. The interesting part of this estimate is the separation of Fixed and “Per km” costs.

escalationFactor=(1.023)^(2028-1994)

LIGOcostManagement={5.5,1.0};
LIGOcostDesign={0.83,0};
LIGOcostTubeFactory={8.05,0};
LIGOcostTubeMaterial={9.02,9.02};
LIGOcostBellows={0.77,0.77};
LIGOcostAssembly={1.66,1.66};
LIGOcostLeakCheck={0.87,0.87};
LIGOcostAnchorsSupports={3.05,3.05};
LIGOcostPumpPorts={1.83,1.83};
LIGOcostHandlingShipping={0.92,0.92};
LIGOcostMobilization={0.46,0};
LIGOcostInstallation={7.2,7.2};
LIGOcostInsulationBake={7.0,7.0};
LIGOcostAcceptance={1.1,0};
LIGOcostCBIprofit={5.2,3.3};
LIGOcostBTEdesign={0.64,0};
LIGOcostBTEsurveyQA={0.32,0.32};
LIGOcostBTEslab={18.6,18.6};
LIGOcostBTtotal=LIGOcostManagement+LIGOcostDesign+LIGOcostTubeFactory+LIGOcostTubeMaterial+LIGOcostBellows+LIGOcostAssembly+LIGOcostLeakCheck+LIGOcostAnchorsSupports+LIGOcostPumpPorts+LIGOcostHandlingShipping+LIGOcostMobilization+LIGOcostInstallation+LIGOcostInsulationBake+LIGOcostAcceptance+LIGOcostCBIprofit+LIGOcostBTEdesign+LIGOcostBTEsurveyQA+LIGOcostBTEslab

Note that TOTAL1 in the source above is incorrectly added  (is $72.4M but should be $73.02M).

Removing the management, design, BTE, slab, insulation & bake from “TOTAL 1” above yields:

costTotalBTfab1994=LIGOcostBTtotal-LIGOcostManagement-LIGOcostDesign-LIGOcostInsulationBake-LIGOcostBTEdesign-LIGOcostBTEsurveyQA-LIGOcostBTEslab

costPerKmBTfab1994=costTotalBTfab1994[[2]]/16

This is roughly in agreement with the LIGO Cost Book for BT fabrication cost (https://dcc.ligo.org/LIGO-G940007, pg 4; see below):
The BT fabrication (not including design and contract management) is $24.676M (less $1.927M for bake) for LHO and $18.571M (less $1.657M for bake) for LLO, so the BT fab cost for both sites (16 km BT) is $39.663M, which is close to the summary Rai prepared for the same scope, i.e. costTotalBTfab1994 = $40.13M. The difference ($0.467M) is about 1% and less than the difference in costs between LLO and LHO.

(24.676-1.927+18.571-1.657)

Note that the cost in the above sub-section “LIGO Fabrication Cost based on CBI documentation” is $18.5M for 65 ft. (20 m) long tubes, which equals the LLO cost in the LIGO Cost Book.

The breakdown of the recurring (per km) cost elements of the scope of this estimate (BT fabrication) from Rai’s summary in percentages is as follows:

data={LIGOcostTubeFactory,LIGOcostTubeMaterial,LIGOcostBellows,LIGOcostAssembly,LIGOcostLeakCheck,LIGOcostAnchorsSupports,LIGOcostPumpPorts,LIGOcostHandlingShipping,LIGOcostMobilization,LIGOcostInstallation,LIGOcostAcceptance,LIGOcostCBIprofit};
dataNormalized=Transpose[#/Total[#]&/@Transpose[data]];
PercentForm[TableForm[dataNormalized,TableHeadings->{{"Tube Factory","Tube Material","Bellows","Assembly","Leak Tests","Anchors & Supports","Pump Ports","Shipping/Handling","Mobilization","Installation","Acceptance","Profit"},{"Totals","Length Dependent"}}],2]

CE Cost for varying tube segment length

Assume LIGO shell thickness and stiffener spacing, but vary the length of the tube segments.

Design Parameters

(* not including spare tube segments *)

armLength=40000; (* m *)

maxTubeSegmentLength=20; (* m *)
BTsegmentLength=Table[i,{i,20}] (* m *)

selectLengths={5,10,15,20};
BTsegmentLength[[selectLengths]]

nLengths=Length[BTsegmentLength];
BTdiameter=1245; (* mm *)
skelp=36 25.4; (* mm *)
nTubes=2 Ceiling[armLength/BTsegmentLength];
BTthickness=3; (* mm *)
BTmaterialDensity=8 10^-6; (* 304L, kg/mm^3 *)

milesFreight=1000; (* miles *)

stiffenerHeight=1.75 25.4; (* mm *)
stiffenerWidth=(3/16) 25.4; (* mm *)

Freight

Freight only addresses transportation of tube segments from tube manufacturer to the site for installation.
Shipping of coils from foundry  to bake facility, to finishing mill, to tube mfg are considered separately in the Coil Mfg costs.
https : // arcb.com/blog/things - to - know - about - heavy - haul - trucking 
width < 8.6 ft (2.621 m)
Height < 13.6 ft (4.145 m)
Length < 53 ft (16.154 m) (but I guess the tubes can extend off the end of the bed)
Gross weight < 80,000 lb
This implies 4 long tubes per truck bed (2 wide x 2 high)
Each LIGO BT segment weighs about 2180 kg (4806 lb), so 4 tube segments < 20,000 lb
Packing density on flat bed: 
If <= 4m length, stand up in 2 rows x 11
if  >4m length, lay down in 2 rows x 2 levels, but ensure that the C.G. of the last tube is < 16m (bed length)

(* packingDensity(tubeSegmentLength,nTubesPerLoad) *)packingDensity={{0,88},{1,88},{2,44},{3,22},{4,22},{5,12},{6,12},{7,8},{8,8},{9,8},{10,8},{11,4},{12,4},{13,4},{14,4},{15,4},{16,4},{17,4},{18,4},{19,4},{20,4}};
nTubesPerLoad=Interpolation[packingDensity,InterpolationOrder->0];

ListPlot[{Table[{length,nTubesPerLoad[length]},{length,1,maxTubeSegmentLength,.1}],Table[{length,length nTubesPerLoad[length]},{length,1,maxTubeSegmentLength,.1}]},Joined->True,Frame->True,FrameLabel->{"Tube Segment Length (m)","Number of Tube Segments Per Load, or\nTotal Length of Tubes in Load (m)"},GridLines->Automatic,PlotLegends->{"# Tube Segments/Load","Total Length in Load (m)"}]

1994 average freight costs as a function of tube length
https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg.59 - 62

transMileageCosts={{12.192,2.03172},{15.24,2.03172},{16.764,2.68537},{18.288,3.02828},{19.812,3.20449},{21.336,4.35449},{22.86,4.35449}};
costTransPerMile=Interpolation[transMileageCosts,InterpolationOrder->1];
Off[InterpolatingFunction::dmval];

nLoads=Ceiling[nTubes/nTubesPerLoad[BTsegmentLength]]

ListPlot[Table[{length,costTransPerMile[length]},{length,1,maxTubeSegmentLength,.1}],Joined->True,Frame->True,FrameLabel->{"Tube Segment Length (m)","Cost Per Mile ($)"},GridLines->Automatic]

costFreight=nLoads milesFreight costTransPerMile[BTsegmentLength]/10^6//N

Bellows

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 252-255
See LIGO-C1900321, file LIGO_DRD_9_ITEM3.pdf, pg. 128-138
For the LIGO BT, the optimum BT length was determined to be 19.812 m (65’ 0”). This optimum was based on a design goal to place the baffles at (or near) the support points. The baffle spacing was specified as 20 m, which was close to the optimum tube length for shipping and construction (19.812 m). The expansion joint spacing then had to be a multiple of 19.812 m.

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 255-271
CBI performed a trade study on the formed Bellows (thin-walled vs near full thickness).
Near full thickness bellows are preferred due to lower cost, fewer welds, higher torsion capacity, lower leak risk  and lower damage risk. Near full thickness (0.100 in) bellows were just (barely) compliant enough so that additional convolutions were not needed (which would add cost).

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 263-265
Discussion of 3 forming methods: roll forming, expanding mandrel (punch forming) and hydroforming. Hydroforming is best but requires the most expensive NRE; best for large volume production.

Rather than attempt to re-design the Bellows (and estimate costs for these variations), in this simple cost estimate model, I’ll assume that each Bellows “handles” the expansion from ~40m of tube, and the cost per Bellows, remains the same.

nBellows=2 armLength/40

costPerBellows=3000;
costBellows= nBellows costPerBellows/10^6 Table[1,{nLengths}]//N;

Supports

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) :

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 252-255
See LIGO-C1900321, file LIGO_DRD_9_ITEM3.pdf, pg. 128-138
For the LIGO BT, the optimum BT length was determined to be 19.812 m (65’ 0”). This optimum was based on a design goal to place the baffles at (or near) the support points. The baffle spacing was specified as 20 m, which was close to the optimum tube length for shipping and construction (19.812 m). The expansion joint spacing then had to be a multiple of 19.812 m.

Perhaps BT gravity sag as a function of BT segment length should be calculated to determine the number of required supports. For this simple cost model, I’ll assume 1 Fixed Support and 1 Guided Support per Bellows (as is the case for LIGO). Since the CBI cost data doesn’t differentiate between fixed and guided, a single support quantity and cost is used.

nSupports=2 nBellows

costPerSupport=3800;
costSupports= nSupports costPerSupport/10^6 Table[1,{nLengths}]//N;

Leak Tests

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat)

nLeakTests=nTubes;
costPerLeakTest=2200;
costLeakTests= nLeakTests costPerLeakTest/10^6//N;

Pump Ports

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) 
 Pump Ports are not explicitly included in CBI’s cost estimate (referenced above).
 FWIW a hand written note on pg. 85 of LIGO_DRD_9_ITEM_3.pdf indicates that each Pump Port costs $3975

Since I don't know the number of required ports, I'll simply scale the LIGO Cost Book number by the CE Length/LIGO Length:

costPumpPorts=1.83 (80/16) Table[1,{nLengths}] //N;

Installation

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) :

nTubeInstalls=2 nTubes;
costPerTubeInstall=1500;
costTubeInstall= nTubeInstalls costPerTubeInstall/10^6//N;

Coil Mfg Costs

1992 cost of the tube material and manufacturing is taken as the average of 5 steel manufacturer costs, +/- 11% 
Note that these costs are (apparently) independent of tube segment length and thickness for the range under consideration by CBI for LIGO.
Assuming:
1) a coil weight of 30,000 lbm, which was the size ordered by CBI
2) no welding of coil ends
3) spiral welded tube, which requires tube spiral length plus 2 x skelp widths
4) 10% scrap recouped

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 105 & 247 (repeat):
Coil material procurement costs, including:
cost of coil material (304L)
transport cost to/from bake facility
bake cost
transport cost to/from finishing mill
outgas test costs
cost to level
cost to slit
transport to tube mfg
less cost of 10% scrap steel

Estimate of coil waste so that the number of 65 ft long tubes from a single coil (6) matches the quotes CBI received from spiral tube manufacturers. Corresponds to 1 skelp length at each end of 6 tubes, or 12 x skelp length waste
I’ve assumed that this as a constant waste weight per coil

coilWeight=30000 0.453592; (* kg *)
wastePerCoil=(Pi /4)(BTdiameter^2-(BTdiameter-2 BTthickness)^2) 12skelp BTmaterialDensity//N;
wastePerCoil/coilWeight

BTsegmentWeightUncut= (Pi /4)(BTdiameter^2-(BTdiameter-2 BTthickness)^2) (BTsegmentLength 1000) BTmaterialDensity//N;
nTubesPerCoil=Floor[(coilWeight-wastePerCoil)/BTsegmentWeightUncut]

nCoils=Ceiling[nTubes/nTubesPerCoil ]//N

baseCostCoil=27639; (* 304L *)
freightCostBake=822;
costBake=3000;
freightFinishingMill=411;
costOutgasTest=2650;
costLevel=1500;
costSlit=1800;
freightTubeMfg=1370/2; (*2 coils per trip *)

costCoilMfg=(baseCostCoil+freightCostBake+costBake+freightFinishingMill+costOutgasTest+costLevel+costSlit+freightTubeMfg) nCoils/10^6

Spiral Weld Mfg Costs

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 113:
Spiral welded tube manufacturing cost is taken as the average of 3 manufacturing quotes/estimates for tube manufacturing + equipment costs + material overhead. Costs are not quoted as a function of tube segment length. Presumably shorter length tube segments would cost a little more due to the need to make more transverse cuts, but I don’t know this cost.

costSpiralWeldMfg=Table[1,{nLengths}] (3870944+548800+262904+4303000+106650+296466+1809792+208867)/3/10^6 //N;

Stiffener Mfg Costs

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 139-141 & 282 (repeat):
BT stiffener material costs (material, painting & welding)

stiffenerSpacing=758; (* mm, baseline stiffener spacing == LIGO *)
nStiffeners=2 armLength 10^3/758 //N

thicknessBarStock=(3/16) 25.4; (* mm *)
lengthBarStock=14 12 25.4; (* mm *)
unitWeightBarStock=1.12  0.00148816; (* kg/mm *)
unitCostBarStock=1.55/0.453592; (* $/kg *)
costStiffenerMaterial=lengthBarStock unitWeightBarStock unitCostBarStock;
costPerStiffenerMfg=(34+41+80)/3 //N;
costFactorStiffenerMfg=costPerStiffenerMfg/costStiffenerMaterial;
costPerStiffenerWld=15;
costStiffeners=Table[1,{nLengths}] nStiffeners (costPerStiffenerMfg costFactorStiffenerMfg+costPerStiffenerWld)/10^6;

Total Costs (as a function of tube segment length)

totalCost=costFreight+costBellows+costSupports+costTubeInstall+costLeakTests+costPumpPorts+costCoilMfg+costSpiralWeldMfg+costStiffeners;

ListPlot[Transpose[Partition[Join[BTsegmentLength,totalCost],nLengths]],Joined->True,Frame->True,GridLines->Automatic,FrameLabel->{"BT Segment Length (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["LIGO Total Beam Tube Cost vs Segment Length",14]]

plotData={Transpose[Partition[Join[BTsegmentLength,costFreight],nLengths]],Transpose[Partition[Join[BTsegmentLength,costBellows],nLengths]],Transpose[Partition[Join[BTsegmentLength,costSupports],nLengths]],Transpose[Partition[Join[BTsegmentLength,costTubeInstall],nLengths]],Transpose[Partition[Join[BTsegmentLength,costLeakTests],nLengths]],Transpose[Partition[Join[BTsegmentLength,costCoilMfg],nLengths]],Transpose[Partition[Join[BTsegmentLength,costSpiralWeldMfg],nLengths]],Transpose[Partition[Join[BTsegmentLength,costStiffeners],nLengths]]};

StackedListPlot[plotData,Joined->True,Frame->True,GridLines->Automatic,FrameLabel->{"BT Segment Length (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["CE Total Beam Tube Cost vs Segment Length",14],PlotLegends->{"Freight","Bellows","Supports","Install","Leak Tests","Coil Mfg","Spiral Wld","Stiffeners"}]

StackedListPlot[plotData,Joined->True,Frame->True,GridLines->Automatic,PlotRange->{{5,20},{0,200}}, FrameLabel->{"BT Segment Length (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["CE Total Beam Tube Cost vs Segment Length",14],PlotLegends->{"Freight","Bellows","Supports","Install","Leak Tests","Coil Mfg","Spiral Wld","Stiffeners"}]

dataTable=Partition[Join[costFreight[[selectLengths]]/totalCost[[selectLengths]],costBellows[[selectLengths]]/totalCost[[selectLengths]],costSupports[[selectLengths]]/totalCost[[selectLengths]],costTubeInstall[[selectLengths]]/totalCost[[selectLengths]],costLeakTests[[selectLengths]]/totalCost[[selectLengths]],costCoilMfg[[selectLengths]]/totalCost[[selectLengths]],costSpiralWeldMfg[[selectLengths]]/totalCost[[selectLengths]],costStiffeners[[selectLengths]]/totalCost[[selectLengths]]],nSL];

nSelectLength=Length[selectLengths];
headerString=Table[0,{nSelectLength}];
For[i=1,i<nSelectLength+1,i++,headerString[[i]]=TextString[BTsegmentLength[[selectLengths[[i]]]]]];
PercentForm[TableForm[dataTable,TableHeadings->{{"Freight","Bellows","Supports","Install","Leak Tests","Coil Mfg","Spiral Wld","Stiffeners"},headerString}],2]

CE Cost for varying stiffener spacing

Shell thickness increases with increased stiffener spacing. 
Tube segment length is a constant 20 m.

Import Stiffened Design Parameters

Import the file created by T2400351-v2 ASME section VIII division 1.nb
For varying stiffener spacing (L304L), provides corresponding :
shell thickness (t304L), 
stiffener height (h304L), 
stiffener thickness (b304L)
for 1245 mm OD tube

data=Import["ASMEdiv1CE304L.dat"];
L304L=data[[1]]

t304L=data[[2]]

b304L=data[[3]]

h304L=data[[4]]

nSpacings=Length[L304L]

stiffener304L=Transpose[Partition[Join[L304L,h304L],nSpacings]];
LIGOstiffener={{758,1.75 25.4}};
ListLogLinearPlot[{stiffener304L,LIGOstiffener},Joined->True,Frame->True,FrameLabel->{"Spacing Between Stiffeners or Supports (mm)","Stiffener Height (mm)\n(stiffener thickness = 4.8 mm)"},PlotLabels -> {"ASME 304L\nFS = 3.0","LIGO\nFS = 2.6"},PlotStyle->{Red,Blue},PlotMarkers->{{None},{Automatic}},GridLines->All]

Design Parameters

(* not including spare tube segments *)

armLength=40000; (* m *)

maxTubeSegmentLength=20; (* m *)
BTsegmentLength=20; (* m *)

selectSpacing={1,6,11,16,21};
nSelectSpacings=Length[selectSpacing];
L304L[[selectSpacing]]
t304L[[selectSpacing]]
h304L[[selectSpacing]]

BTdiameter=1245; (* mm *)
skelp=36 25.4; (* mm *)
nTubes=2 Ceiling[armLength/BTsegmentLength];
BTmaterialDensity=8 10^-6; (* 304L, kg/mm^3 *)

milesFreight=1000; (* miles *)

Freight

Freight only addresses transportation of tube segments from tube manufacturer to the site for installation.
Shipping of coils from foundry  to bake facility, to finishing mill, to tube mfg are considered separately in the Coil Mfg costs.
https : // arcb.com/blog/things - to - know - about - heavy - haul - trucking 
width < 8.6 ft (2.621 m)
Height < 13.6 ft (4.145 m)
Length < 53 ft (16.154 m) (but I guess the tubes can extend off the end of the bed)
Gross weight < 80,000 lb
This implies 4 long tubes per truck bed (2 wide x 2 high)
Each LIGO BT segment weighs about 2180 kg (4806 lb), so 4 tube segments < 20,000 lb
Packing density on flat bed: 
If <= 4m length, stand up in 2 rows x 11
if  >4m length, lay down in 2 rows x 2 levels, but ensure that the C.G. of the last tube is < 16m (bed length)

(* packingDensity(tubeSegmentLength,nTubesPerLoad) *)packingDensity={{0,88},{1,88},{2,44},{3,22},{4,22},{5,12},{6,12},{7,8},{8,8},{9,8},{10,8},{11,4},{12,4},{13,4},{14,4},{15,4},{16,4},{17,4},{18,4},{19,4},{20,4}};
nTubesPerLoad=Interpolation[packingDensity,InterpolationOrder->0];

ListPlot[{Table[{length,nTubesPerLoad[length]},{length,1,maxTubeSegmentLength,.1}],Table[{length,length nTubesPerLoad[length]},{length,1,maxTubeSegmentLength,.1}]},Joined->True,Frame->True,FrameLabel->{"Tube Segment Length (m)","Number of Tube Segments Per Load, or\nTotal Length of Tubes in Load (m)"},GridLines->Automatic,PlotLegends->{"# Tube Segments/Load","Total Length in Load (m)"}]

1994 average freight costs as a function of tube length
https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg.59 - 62

transMileageCosts={{12.192,2.03172},{15.24,2.03172},{16.764,2.68537},{18.288,3.02828},{19.812,3.20449},{21.336,4.35449},{22.86,4.35449}};
costTransPerMile=Interpolation[transMileageCosts,InterpolationOrder->1];
Off[InterpolatingFunction::dmval];

nLoads=Ceiling[nTubes/nTubesPerLoad[BTsegmentLength]]

ListPlot[Table[{length,costTransPerMile[length]},{length,1,maxTubeSegmentLength,.1}],Joined->True,Frame->True,FrameLabel->{"Tube Segment Length (m)","Cost Per Mile ($)"},GridLines->Automatic]

costFreight=nLoads milesFreight costTransPerMile[BTsegmentLength]/10^6Table[1,{nSpacings}]//N;

Bellows

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 252-255
See LIGO-C1900321, file LIGO_DRD_9_ITEM3.pdf, pg. 128-138
For the LIGO BT, the optimum BT length was determined to be 19.812 m (65’ 0”). This optimum was based on a design goal to place the baffles at (or near) the support points. The baffle spacing was specified as 20 m, which was close to the optimum tube length for shipping and construction (19.812 m). The expansion joint spacing then had to be a multiple of 19.812 m.

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 255-271
CBI performed a trade study on the formed Bellows (thin-walled vs near full thickness).
Near full thickness bellows are preferred due to lower cost, fewer welds, higher torsion capacity, lower leak risk  and lower damage risk. Near full thickness (0.100 in) bellows were just (barely) compliant enough so that additional convolutions were not needed (which would add cost).

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 263-265
Discussion of 3 forming methods: roll forming, expanding mandrel (punch forming) and hydroforming. Hydroforming is best but requires the most expensive NRE; best for large volume production.

Rather than attempt to re-design the Bellows (and estimate costs for these variations), in this simple cost estimate model, I’ll assume that each Bellows “handles” the expansion from ~40m of tube, and the cost per Bellows, remains the same.

nBellows=2 armLength/40

costPerBellows=3000;
costBellows= nBellows costPerBellows/10^6 Table[1,{nSpacings}]//N;

Supports

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) :

See LIGO-C1900321, file LIGO_DRD_9_ITEM2.pdf, pg. 252-255
See LIGO-C1900321, file LIGO_DRD_9_ITEM3.pdf, pg. 128-138
For the LIGO BT, the optimum BT length was determined to be 19.812 m (65’ 0”). This optimum was based on a design goal to place the baffles at (or near) the support points. The baffle spacing was specified as 20 m, which was close to the optimum tube length for shipping and construction (19.812 m). The expansion joint spacing then had to be a multiple of 19.812 m.

Perhaps BT gravity sag as a function of BT segment length should be calculated to determine the number of required supports. For this simple cost model, I’ll assume 1 Fixed Support and 1 Guided Support per Bellows (as is the case for LIGO). Since the CBI cost data doesn’t differentiate between fixed and guided, a single support quantity and cost is used.

nSupports=2 nBellows

costPerSupport=3800;
costSupports= nSupports costPerSupport/10^6 Table[1,{nSpacings}]//N;

Leak Tests

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat)

nLeakTests=nTubes;
costPerLeakTest=2200;
costLeakTests= nLeakTests costPerLeakTest/10^6 Table[1,{nSpacings}]//N;

Pump Ports

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) 
 Pump Ports are not explicitly included in CBI’s cost estimate (referenced above).
 FWIW a hand written note on pg. 85 of LIGO_DRD_9_ITEM_3.pdf indicates that each Pump Port costs $3975

Since I don't know the number of required ports, I'll simply scale the LIGO Cost Book number by the CE Length/LIGO Length:

costPumpPorts=1.83 (80/16) Table[1,{nSpacings}] //N;

Installation

https : // dcc.ligo.org/LIGO - C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 59 - 62 :
 LIGO_DRD _ 9 _ITEM _ 3. pdf, pg. 155 - 156 (repeat) :

nTubeInstalls=2 nTubes;
costPerTubeInstall=1500;
costTubeInstall= nTubeInstalls costPerTubeInstall/10^6 Table[1,{nSpacings}]//N;

Coil Mfg Costs

1992 cost of the tube material and manufacturing is taken as the average of 5 steel manufacturer costs, +/- 11% 
Note that these costs are (apparently) independent of tube segment length and thickness for the range under consideration by CBI for LIGO.
Assuming:
1) a coil weight of 30,000 lbm, which was the size ordered by CBI
2) no welding of coil ends
3) spiral welded tube, which requires tube spiral length plus 2 x skelp widths
4) 10% scrap recouped

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 105 & 247 (repeat):
Coil material procurement costs, including:
cost of coil material (304L)
transport cost to/from bake facility
bake cost
transport cost to/from finishing mill
outgas test costs
cost to level
cost to slit
transport to tube mfg
less cost of 10% scrap steel

Estimate of coil waste so that the number of 65 ft long tubes from a single coil (6) matches the quotes CBI received from spiral tube manufacturers. Corresponds to 1 skelp length at each end of 6 tubes, or 12 x skelp length waste
I’ve assumed that this as a constant waste weight per coil

coilWeight=30000 0.453592; (* kg *)
wastePerCoil=(Pi /4)(BTdiameter^2-(BTdiameter-2 BTthickness)^2) 12skelp BTmaterialDensity//N;
wastePerCoil/coilWeight

Assuming Coil Weight is constant for varying tube thickness, as the stiffener spacing varies:

BTsegmentWeightUncut= (Pi /4)(BTdiameter^2-(BTdiameter-2 t304L)^2) (BTsegmentLength 1000) BTmaterialDensity//N;
nTubesPerCoil=Floor[(coilWeight-wastePerCoil)/BTsegmentWeightUncut]

nCoils=Ceiling[nTubes/nTubesPerCoil ]//N

baseCostCoil=27639; (* 304L *)
freightCostBake=822;
costBake=3000;
freightFinishingMill=411;
costOutgasTest=2650;
costLevel=1500;
costSlit=1800;
freightTubeMfg=1370/2; (*2 coils per trip *)

costCoilMfg=(baseCostCoil+freightCostBake+costBake+freightFinishingMill+costOutgasTest+costLevel+costSlit+freightTubeMfg) nCoils Table[1,{nSpacings}]/10^6;

Spiral Weld Mfg Costs

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 113:
Spiral welded tube manufacturing cost is taken as the average of 3 manufacturing quotes/estimates for tube manufacturing + equipment costs + material overhead. Costs are not quoted as a function of tube segment length. Presumably shorter length tube segments would cost a little more due to the need to make more transverse cuts, but I don’t know this cost.

costSpiralWeldMfg=Table[1,{nSpacings}] (3870944+548800+262904+4303000+106650+296466+1809792+208867)/3/10^6 //N;

Stiffener Mfg Costs

https://dcc.ligo.org/LIGO-C1900321
LIGO_DRD _ 9 _ITEM _ 2. pdf, pg. 139-141 & 282 (repeat):
BT stiffener material costs (material, painting & welding)

nStiffeners=2 armLength 10^3/L304L //N

Assuming available bar stock every 1/4” in width for the chosen 3/8” thick bar
Should really choose next largest size, but here I’m selecting nearest width

availableBarStockWidths=Table[2+i .25,{i,0,15}] 25.4;
selectedBarStockWidths=Nearest[availableBarStockWidths,h304L];
thicknessBarStock=b304L; (* mm *)

Use the CBI cost estimate for LIGO stiffeners (1.75” high x 3/8” thick) to scale the cost of stiffeners of other dimensions:

lengthBarStock=14 12 25.4; (* mm *)
unitWeightBarStock=1.12  0.00148816; (* kg/mm *)
unitCostBarStock=1.55/0.453592; (* $/kg *)
costStiffenerMaterial=lengthBarStock unitWeightBarStock unitCostBarStock;
costPerStiffenerMfg=(34+41+80)/3 //N;
costFactorStiffenerMfg=costPerStiffenerMfg/costStiffenerMaterial

costStiffenerMaterial=unitCostBarStock selectedBarStockWidths/(1.75 25.4);  (* $/kg *)

costPerStiffenerWld=15;
costStiffeners=Table[1,{nSpacings}] nStiffeners (costPerStiffenerMfg costFactorStiffenerMfg+costPerStiffenerWld)/10^6;

Total Costs (as a function of stiffener spacing)

totalCost=costFreight+costBellows+costSupports+costLeakTests+costPumpPorts+costTubeInstall+costCoilMfg+costSpiralWeldMfg+costStiffeners;

ListPlot[Transpose[Partition[Join[L304L,totalCost],nSpacings]],Joined->True,Frame->True,GridLines->Automatic,FrameLabel->{"Stiffener Spacing (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["CE Total Beam Tube Cost vs Stiffener Spacing",14]]

plotData={Transpose[Partition[Join[L304L/10^3,costFreight],nSpacings]],Transpose[Partition[Join[L304L/10^3,costBellows],nSpacings]],Transpose[Partition[Join[L304L/10^3,costSupports],nSpacings]],Transpose[Partition[Join[L304L/10^3,costLeakTests],nSpacings]],
Transpose[Partition[Join[L304L/10^3,costPumpPorts],nSpacings]],
Transpose[Partition[Join[L304L/10^3,costTubeInstall],nSpacings]],Transpose[Partition[Join[L304L/10^3,costCoilMfg],nSpacings]],Transpose[Partition[Join[L304L/10^3,costSpiralWeldMfg],nSpacings]],Transpose[Partition[Join[L304L/10^3,costStiffeners],nSpacings]]};

StackedListPlot[plotData,Joined->True,Frame->True,GridLines->Automatic,FrameLabel->{"BT Stiffener Spacing (m)","Estimated Installed Cost ($M)"},PlotLabel->Style["CE Total Beam Tube Cost vs Stiffener Spacing",14],PlotLegends->{"Freight","Bellows","Supports","Leak Tests","Pump Ports","Install","Coil Mfg","Spiral Wld","Stiffeners"}]