// Last edited on 2011-05-07 12:32:32 by stolfi // Fukushima Daiichi unit #4 - drywell, shroud, and their enclosures // ====================================================================== // DRYWELL WALL, CAVITY, ENCLOSURE #macro un4_drywell_shape(ofs,ofz) // The basic drywell shape (minus the shroud and flange) with // the main surface shifted {ofs} outwards, and the top of // the neck shifted {ofz} up. // Setting {ofs=ofz=0} gives the nominal outer surface // of the metal wall. // Get the parameters of the unperturbed shape: #local sp_ctr_Z = un4_drywell_sphere_ctr_Z; #local sp_rad = un4_drywell_sphere_rad; #local bd_rad = un4_drywell_stem_rad; // Radius of first cylinder #local cn_lo_Z = un4_drywell_cone_lo_Z; #local cn_hi_Z = un4_drywell_cone_hi_Z; #local nk_rad = un4_shroud_rad; // Radius of second cylinder #local nk_hi_Z = un4_drywell_neck_hi_Z; // Find the inclination of the cone part: #local ang = atan2(cn_hi_Z - cn_lo_Z, bd_rad - nk_rad); // Positive if neck is narrower. // Find the unit direction vector of the joint's velocity: #local ur = cos(ang/2); // Radial component. #local uz = sin(ang/2); // Vertical component. // Now generate the shape: #local sp_ctr = < 0, 0, un4_drywell_sphere_ctr_Z>; #local cn_bot = < 0, 0, cn_lo_Z + uz*ofs >; #local cn_top = < 0, 0, cn_hi_Z + uz*ofs >; #local nk_top = < 0, 0, nk_hi_Z + ofz >; union{ sphere{ sp_ctr, sp_rad + ofs } cylinder{ sp_ctr, cn_bot + 0.5*eps*z, bd_rad + ofs } cone{ cn_bot, bd_rad + ofs, cn_top, nk_rad + ofs } cylinder{ cn_top - 0.5*eps*z, nk_top, nk_rad + ofs } } #end #macro un4_drywell_steel_wall() // Wall of drywell wih flange and top lid, not including the shroud. #local T = un4_drywell_thk; // Thickness of drywell wall. #local rpv_CR = un4_rpv_body_rad; // Outer radius of RPV. #local rpv_FR = un4_rpv_flange_rad; // Extra radius of RPV flanges. #local dw_FR = un4_drywell_flange_rad; // Extra radius of shroud flange. #local dw_FT = un4_drywell_flange_thk; // Thickness of shroud flange. #local sp_ctr_Z = un4_drywell_sphere_ctr_Z; // Sphere center Z. #local sp_rad = un4_drywell_sphere_rad; // Sphere radius. #local th_rad = rpv_CR + rpv_FR; // Radius of opening on top of drywell. #local nk_hi_Z = un4_drywell_neck_hi_Z; // Z of top of neck. #local nk_rad = un4_shroud_rad; // Radius of drywell's neck. #local sp_bot = < 0, 0, sp_ctr_Z - sp_rad >; #local sp_ctr = < 0, 0, sp_ctr_Z >; #local nk_top = < 0, 0, nk_hi_Z >; union{ difference{ object{ un4_drywell_shape(-eps,-eps) } object{ un4_drywell_shape(-T+eps,-T+eps) } cylinder{ sp_ctr, nk_top + 0.500*z, th_rad - eps } object{ un4_surge_pipe_punchers() } } object{ generic_vessel_flange(nk_rad,T,dw_FR,dw_FT) scale <1,1,-1> translate nk_top } texture{ tx_enamel_yellow } bounded_by{ cylinder{ sp_bot, nk_top, sp_rad } } } #end #macro un4_drywell_cavity() // Extends somewhat into the refueling pool. // Does not include the refueling pool cavity. // Oigin at OP on reactor axis. // !!! Include the gap between the steel wall and the concrete. object{ un4_drywell_shape(+eps,+3*eps) } #end #macro un4_drywell_enclosure(C) // The concrete around the drywell, excluding the // refueling pool, with the cavity excavated. // Origin is reactor axis at OP height. intersection{ object{ C } difference{ object{ un4_drywell_enclosure_massive() } object{ un4_drywell_cavity() } } texture{ tx_concrete } } #end #macro un4_drywell_enclosure_massive() // The concrete around the drywell, excluding the // refueling pool, with the cavity filled. // Origin is reactor axis at OP height. #local cyl0_bot_Z = un4_drywell_enclosure_cyl0_bot_Z; // Nominal bottom Z of cylinder 0 rOP. #local cyl0_R = un4_drywell_enclosure_cyl0_rad; // Radius of cylinder 0. #local cyl0_top_Z = un4_drywell_enclosure_cyl0_top_Z; // Top Z of cylinder 0 rOP. #local cone1_bot_Z = un4_drywell_enclosure_cone1_bot_Z; // Bottom Z of cone 1. #local cone1_bot_R = un4_drywell_enclosure_cone1_bot_rad; // Bottom Radius of cone 1. #local cone1_top_R = un4_drywell_enclosure_cone1_top_rad; // Top radius of cone 1. #local cone1_top_Z = un4_drywell_enclosure_cone1_top_Z; // Top Z of cone 1 rOP. #local cyl1_bot_Z = un4_drywell_enclosure_cyl1_bot_Z; // Nominal bottom Z of cylinder 1 rOP. #local cyl1_R = un4_drywell_enclosure_cyl1_rad; // Radius of cylinder 1. #local cyl1_top_Z = un4_drywell_enclosure_cyl1_top_Z; // Top Z of cylinder 1 rOP. #local cone2_bot_Z = un4_drywell_enclosure_cone2_bot_Z; // Bottom Z of cone 2. #local cone2_bot_R = un4_drywell_enclosure_cone2_bot_rad; // Bottom Radius of cone 2. #local cone2_top_R = un4_drywell_enclosure_cone2_top_rad; // Top radius of cone 2. #local cone2_top_Z = un4_drywell_enclosure_cone2_top_Z; // Top Z of cone 2 rOP. #local cyl2_bot_Z = un4_drywell_enclosure_cyl2_bot_Z; // Nominal bottom Z of cylinder 2 rOP. #local cyl2_R = un4_drywell_enclosure_cyl2_rad; // Radius of cylinder 2. #local cyl2_top_Z = un4_drywell_enclosure_cyl2_top_Z; // Top Z of cylinder 2 rOP. union{ cylinder{ (cyl0_bot_Z - eps)*z, (cyl0_top_Z + eps)*z, cyl0_R - eps } cone{ cone1_bot_Z*z, cone1_bot_R - eps, cone1_top_Z*z, cone1_top_R - eps } cylinder{ (cyl1_bot_Z - eps)*z, (cyl1_top_Z + eps)*z, cyl1_R - eps } cone{ cone2_bot_Z*z, cone2_bot_R - eps, cone2_top_Z*z, cone2_top_R - eps } cylinder{ (cyl2_bot_Z - eps)*z, (cyl2_top_Z + eps)*z, cyl2_R - eps } bounded_by{ cylinder{ (cyl0_bot_Z - 10*eps)*z, (cyl2_top_Z + 10*eps)*z, cyl1_R + 10*eps } } } #end // ====================================================================== // SHROUD WALL, CAVITY, and ENCLOSURE #macro un4_shroud() // The shroud that sits son top of the drywell. // Origin at seal height on symmetry axis. #local T = un4_shroud_thk; // Thickness of shroud. #local H = un4_shroud_size_Z; // Total height of shroud. #local CR = un4_shroud_rad; // Outer radius of shroud (excl. flange). #local CH = un4_shroud_cyl_size_Z; // Height of straight part of shroud. #local DH = un4_shroud_size_Z - CH; // Height of shroud's dome shroud. #local FT = un4_drywell_flange_thk; // Vertical thickness of drywell/shroud flange. #local FR = un4_drywell_flange_rad; // Extra radius of drywell/shroud flange. #local bot_ctr = < 0, 0, 0 >; #local top_ctr = < 0, 0, H >; object{ object{ generic_flanged_capped_cylinder(CH,CR,H-CH,T,FR,FT,0,1) } texture{ tx_enamel_yellow } bounded_by{ cylinder{ bot_ctr, top_ctr, CR + FR } } } #end #macro un4_shroud_enclosure_massive() // The concrete around the refueling pool, with the cavity filled. // Origin is reactor axis at OP height. #local cone3_bot_Z = un4_drywell_enclosure_cone3_bot_Z; // Bottom Z of cone 3. #local cone3_bot_R = un4_drywell_enclosure_cone3_bot_rad; // Bottom Radius of cone 3. #local cone3_top_R = un4_drywell_enclosure_cone3_top_rad; // Top radius of cone 3. #local cone3_top_Z = un4_drywell_enclosure_cone3_top_Z; // Top Z of cone 3 rOP. #local cyl3_bot_Z = un4_drywell_enclosure_cyl3_bot_Z; // Nominal bottom Z of cylinder 3 rOP. #local cyl3_R = un4_drywell_enclosure_cyl3_rad; // Radius of cylinder 3. #local cyl3_top_Z = un4_drywell_enclosure_cyl3_top_Z; // Top Z of cylinder 3 rOP. union{ cone{ cone3_bot_Z*z, cone3_bot_R - eps, cone3_top_Z*z, cone3_top_R - eps } cylinder{ (cyl3_bot_Z - eps)*z, (cyl3_top_Z - eps)*z, cyl3_R - eps } } #end #macro un4_shroud_cavity() // Negative object to excavate the refueling pool cavity. // Includes steps for the shield plug. // Open at botom to join with the drywell cavity. // Origin at OP on reactor axis. #local cone3_bot_Z = un4_drywell_enclosure_cone3_bot_Z; // Bottom Z of cone 3. #local dw_cyl_bot = < 0, 0, cone3_bot_Z >; #local dw_cyl_top = < 0, 0, un4_shroud_cavity_Z >; #local dw_cyl_rad = un4_drywell_stem_rad; #local shr_cyl_bot = < 0, 0, un4_shroud_cavity_Z >; #local shr_cyl_top = < 0, 0, un4_service_floor_Z + 0.500 >; #local shr_cyl_rad = un4_shroud_cavity_rad; union{ cylinder{ dw_cyl_bot - 5*eps*z, dw_cyl_top + eps*z, dw_cyl_rad + eps } cylinder{ shr_cyl_bot - eps*z, shr_cyl_top + eps*z, shr_cyl_rad + eps } object{ un4_shield_plug_cavity(0) } object{ un4_shield_plug_cavity(1) } object{ un4_shield_plug_cavity(2) } } #end #macro un4_shield_plug_cavity(k) // Generates the cavity for shield plug number {k} (topmost=0). // Origin at OP on reactor axis. #local hi_Z = un4_service_floor_Z - k*un4_shield_plug_thk; #local lo_Z = hi_Z - un4_shield_plug_thk; #local rad = un4_shroud_cavity_rad + (3-k)*un4_shield_plug_step; cylinder{ < 0, 0, lo_Z - eps >, < 0, 0, hi_Z + eps >, rad + eps } #end