// Geometry header file for SiC blanket

#ifndef GEOMETRY_H
#define GEOMETRY_H

void design_plasma_shape(		DesignPoint *Machine, Part *Plasma);
void design_plasma_shape_w_SOL(	DesignPoint *Machine, Part *Plasma_AT_w_SOL);
void design_separatrix_shape(	DesignPoint *Machine, Part *LCMSurf, Part *Plasma);

void design_first_wall_inboard_shape(	DesignPoint *Machine, Part *Wall, Part *Plasma);
void design_first_wall_outboard_shape(	DesignPoint *Machine, Part *Wall, Part *Plasma);

void design_blanket_inboard_shape(	DesignPoint *Machine, Part *Blanket, Part *RefBody);
void design_blanket_outboard_shape(	DesignPoint *Machine, Part *Blanket, Part *RefBody);

void design_back_wall_inboard_shape(	DesignPoint *Machine, Part *BackWall, Part *RefBody); // DCLL
void design_back_wall_outboard_shape(	DesignPoint *Machine, Part *BackWall, Part *RefBody); // DCLL
void design_blanket_II_shape(			DesignPoint *Machine, Part *Blanket,  Part *RefBody);

void design_divertor_shape(			DesignPoint *Machine, 	Part (*Divertor)[6], 	Part *LCMSurf, 
									Part *RefLeft, 			Part *RefRight, 		Part *Plasma);
void design_divertor_shape_dcll(	DesignPoint *Machine, 	Part (*Divertor)[6], 	Part *LCMSurf,
                           			Part *RefLeft, 			Part *RefRight, 		Part *Plasma);
void design_replaceable_ht_shield(	DesignPoint *Machine, 	Part (*Shield)[2],  	Part *RefLo,   
									Part *RefHi,   			Part *Plasma);

void design_ht_shield_sic( 	DesignPoint *Machine, Part (*Shield)[2], Part *RefLeft, Part (*RefDiag)[2], Part *RefTop, Part *RefRight);
void design_ht_shield_dcll(	DesignPoint *Machine, Part *Shield,      Part *RefLeft, Part (*RefDiag)[2], Part *RefTop, Part *RefRight); // DCLL
void design_skeleton_ring( 	DesignPoint *Machine, Part *Ring,        Part *RefBody); // DCLL
void design_skeleton_ring2( DesignPoint *Machine, Part *Ring,      	 Part *RefLeft, Part (*RefDiag)[2], Part *RefTop, Part *RefRight); // DCLL2 w/ Manifold, not HT Shield
void design_manifold(		DesignPoint *Machine, Part *Manifold,    Part *RefBody); // DCLL
void design_manifolding(	DesignPoint *Machine, Part (*Manifolding)[2], Part (*RefRHT)[2], Part *Ref1, Part *Ref2, Part *Ref3); // SCLL

void design_vacuum_vessel(			DesignPoint *Machine, Part (*Vessel)[4], Part (*RefBody)[2], Part (*Shield)[2]); // SiC
void design_vacuum_vessel_inboard(	DesignPoint *Machine, Part (*Vessel)[4], Part *RefBody); // DCLL
void design_vacuum_vessel_outboard(	DesignPoint *Machine, Part (*Vessel)[4], Part *RefBody); // DCLL
void design_vacuum_vessel_top(		DesignPoint *Machine, Part (*Vessel)[4], Part *RefBody); // DCLL
void copy_vacuum_vessel_top_into_bottom_by_symmetry(Part (*Vessel)[4]); // DCLL

void design_tf_coil_rtheta_PPPLConservative(	DesignPoint *Machine, Part *Magnet, Part *Plasma, double Bt);
void design_tf_coil_rtheta_PPPL(				DesignPoint *Machine, Part *Magnet, Part *Plasma, double Bt);
void design_tf_coil_rtheta_NextStepConservative(DesignPoint *Machine, Part *Magnet, Part *Plasma, Part (*VVRefBody)[4], double Bt);
void design_tf_coil_rtheta_NextStep(			DesignPoint *Machine, Part *Magnet, Part *Plasma, double Bt);
void design_tf_coil_rtheta_HTS(					DesignPoint *Machine, Part *Magnet, Part *Plasma, double Bt);
void design_tf_coil_rtheta_Nb3Sn(				DesignPoint *Machine, Part *Magnet, Part (*RefBody)[2], Part * Plasma, double Bt);
void design_tf_coil_rtheta_aries_at(			DesignPoint *Machine, Part *Magnet, Part *Plasma, double Bt);
void design_tf_coil_rz_plane(					DesignPoint *Machine, Part *Magnet, Part (*VVRefBody)[4]);

void design_bucking_cylinder(	DesignPoint *Machine, Part *BuckCyl,  Part *Magnet,  Part (*Vessel)[4], double Bt);
void design_upper_cap_shape(	DesignPoint *Machine, Part *UpperCap, Part *RefBody, Part (*Vessel)[4], double Bt);
void design_lower_cap_shape(	DesignPoint *Machine, Part *LowerCap, Part *RefBody, Part (*Vessel)[4], double Bt);
void copy_upper_cap_into_lower_cap_shape_by_symmetry( Part *LowerCap, Part *UpperCap);
void design_mpw(				DesignPoint *Machine, Part *Window,   Part *Magnet, Part(*Vessel)[4]);
void design_pf_coil(			DesignPoint *Machine, Part (*Magnet)[36], Part *RefCyl, Part *TopTCap, Part *BottomTCap);
void design_cryogenic_dome_shape(DesignPoint *Machine, Part *Cryo, Part *RefBody);
void design_maintenance_port(	DesignPoint *Machine, Part *MPort, Part (*Vessel)[4], Part *Cryo);

void design_upper_vv_duct_bottom_wall(	DesignPoint *Machine, Part (*Duct)[3], Part (*Vessel)[4], Part *Magnet, Part *Cryo);
void design_upper_vv_duct_top_wall(		DesignPoint *Machine, Part (*Duct)[3], Part (*Vessel)[4], Part *Magnet, Part *Cryo);
void design_upper_vv_duct_side_wall(	DesignPoint *Machine, Part (*Duct)[3]);

#endif
