Skip to content

Instantly share code, notes, and snippets.

@marcogobbo
Last active June 7, 2023 09:57
Show Gist options
  • Save marcogobbo/e5dd800a79449ac2c0daea3856b2f541 to your computer and use it in GitHub Desktop.
Save marcogobbo/e5dd800a79449ac2c0daea3856b2f541 to your computer and use it in GitHub Desktop.
Electron Gun
<define name="output_path" value="[KASPERSYS]/output/Kassiopeia"/>
<define name="log_path" value="[KASPERSYS]/log/Kassiopeia"/>
<messages>
<file path="[log_path]" base="ElectronGunHolmesLog.txt"/>
<message key="k_file" terminal="normal" log="warning"/>
<message key="k_initialization" terminal="normal" log="warning"/>
<message key="kg_core" terminal="normal" log="warning"/>
<message key="kg_shape" terminal="normal" log="warning"/>
<message key="kg_mesh" terminal="normal" log="warning"/>
<message key="kg_axial_mesh" terminal="normal" log="warning"/>
<message key="ks_object" terminal="normal" log="normal"/>
<message key="ks_operator" terminal="normal" log="normal"/>
<message key="ks_field" terminal="normal" log="normal"/>
<message key="ks_geometry" terminal="normal" log="normal"/>
<message key="ks_generator" terminal="normal" log="normal"/>
<message key="ks_trajectory" terminal="normal" log="normal"/>
<message key="ks_interaction" terminal="normal" log="normal"/>
<message key="ks_navigator" terminal="normal" log="normal"/>
<message key="ks_terminator" terminal="normal" log="normal"/>
<message key="ks_writer" terminal="normal" log="normal"/>
<message key="ks_main" terminal="normal" log="normal"/>
<message key="ks_run" terminal="normal" log="normal"/>
<message key="ks_event" terminal="normal" log="normal"/>
<message key="ks_track" terminal="normal" log="normal"/>
<message key="ks_step" terminal="normal" log="normal"/>
</messages>
<geometry>
<!-- world -->
<cylinder_space name="world_space" z1="-5." z2="5." r="5."/>
<!-- electrodes and columns -->
<tag name="electrode_tag">
<cylinder_tube_space
name="electrode_hole"
z1="1.5e-3"
z2="-1.5e-3"
r1="2.0e-2"
r2="0.5e-2"
radial_mesh_count="30"
/>
</tag>
<tag name="electrode_tag">
<cylinder_space
name="electrode"
z1="1.5e-3"
z2="-1.5e-3"
r="2.0e-2"
/>
</tag>
<!--<tag name="column_tag">
<cylinder_space
name="column"
z1="0.4e-2"
z2="-0.4e-2"
r="1.5e-3"
longitudinal_mesh_count="200"
longitudinal_mesh_power="3."
axial_mesh_count="128"
/>
</tag>-->
<!-- assembly -->
<space name="electron_gun_assembly">
<space name="electrode_1" node="electrode_hole">
<transformation displacement="0. 0. 1.0e-2"/>
</space>
<space name="electrode_2" node="electrode"/>
<!--<space name="column_1" node="column">
<transformation displacement="1.2e-2 1.2e-2 0.5e-2"/>
</space>
<space name="column_2" node="column">
<transformation displacement="0 -1.6e-2 0.5e-2"/>
</space>
<space name="column_3" node="column">
<transformation displacement="-1.2e-2 1.2e-2 0.5e-2"/>
</space>-->
</space>
<space name="world" node="world_space">
<space name="electron_gun" tree="electron_gun_assembly"/>
</space>
<!-- appearance -->
<appearance name="app_electrode" color="255 127 0 127" arc="72" surfaces="world/electron_gun/@electrode_tag"/>
<!--<appearance name="app_column" color="255 255 255 127" arc="72" surfaces="world/electron_gun/@column_tag"/>-->
<!-- mesh -->
<axial_mesh name="mesh_electrode" surfaces="world/electron_gun/@electrode_tag"/>
<!--<axial_mesh name="mesh_column" surfaces="world/electron_gun/@column_tag"/>-->
<!-- bem -->
<electrostatic_dirichlet name="electrode_hole" spaces="world/electron_gun/electrode_1" value="20."/>
<electrostatic_dirichlet name="electrode" spaces="world/electron_gun/electrode_2" value="0."/>
<!--<electrostatic_neumann name="column" spaces="world/electron_gun/column_1" flux="0."/>
<electrostatic_neumann name="column" spaces="world/electron_gun/column_2" flux="0."/>
<electrostatic_neumann name="column" spaces="world/electron_gun/column_3" flux="0."/>-->
</geometry>
<kemfield>
<!-- electric fields -->
<electrostatic_field
name="field_electrostatic"
directory="[KEMFIELD_CACHE]"
file="emf_egun_holmes.kbd"
system="world/electron_gun"
surfaces="world/electron_gun/@electrode_tag"
symmetry="axial"
>
<robin_hood_bem_solver
integrator="analytic"
tolerance="1.e-10"
check_sub_interval="100"
display_interval="1"
cache_matrix_elements="true"
use_vtk="true"
/>
<zonal_harmonic_field_solver
number_of_bifurcations="-1"
convergence_ratio=".99"
convergence_parameter="1.e-15"
proximity_to_sourcepoint="1.e-12"
number_of_central_coefficients="500"
use_fractional_central_sourcepoint_spacing="false"
central_sourcepoint_spacing="1.e-3"
central_sourcepoint_start="-5.2e-1"
central_sourcepoint_end="5.2e-1"
number_of_remote_coefficients="200"
remote_sourcepoint_start="-5.e-2"
remote_sourcepoint_end="5.e-2"
/>
</electrostatic_field>
<electric_potentialmap_calculator
name="e_fieldmap_calculator"
field="field_electrostatic"
file="potentialmap_egun_holmes.vti"
directory="[output_path]"
force_update="false"
compute_field="true"
center="0 0 0.5e-2"
length="4.0e-2 4.0e-2 1.3e-2"
spacing="0.001"
mirror_x="true"
mirror_y="true"
mirror_z="true"
/>
</kemfield>
<kassiopeia>
<ksgen_generator_composite name="generator_uniform" pid="11">
<energy_composite>
<energy_uniform name="e_uniform" value_max="0.8" value_min="0.2"/>
</energy_composite>
<position_cylindrical_composite space="world/electron_gun/electrode_2">
<r_cylindrical radius_min="0." radius_max="2.0e-2"/>
<phi_uniform value_min="0." value_max="360."/>
<z_fix value="1.5e-3"/>
</position_cylindrical_composite>
<direction_spherical_composite space="world/electron_gun/electrode_2">
<theta_uniform value_min="-90" value_max="90"/>
<phi_uniform value_min="0." value_max="360"/>
</direction_spherical_composite>
<time_composite>
<time_fix value="0."/>
</time_composite>
</ksgen_generator_composite>
<!-- exact trajectory-->
<kstraj_trajectory_exact name="trajectory_exact" attempt_limit="8">
<interpolator_crk name="interpolator_crk"/>
<integrator_rkdp853 name="integrator_rkdp853"/>
<term_propagation name="term_propagation"/>
<control_position_error name="control_position_error" absolute_position_error="1e-12" safety_factor="0.75" solver_order="8"/>
<control_length name="stepsizelength" length="1e-4" />
<control_time name="stepsizetime" time="1e-6" />
</kstraj_trajectory_exact>
<!-- output -->
<ks_component_member name="component_track_initial_particle" field="initial_particle" parent="track"/>
<ks_component_member name="component_track_final_particle" field="final_particle" parent="track"/>
<ks_component_member name="component_track_position" field="position" parent="component_track_final_particle"/>
<ks_component_member name="component_track_length" field="length" parent="component_track_final_particle"/>
<ks_component_group name="component_track_world">
<component_member name="final_position" field="position" parent="component_track_final_particle"/>
<component_member name="terminator_name" field="terminator_name" parent="track"/>
<component_member name="final_polar_angle_to_b" field="polar_angle_to_b" parent="component_track_final_particle"/>
</ks_component_group>
<ks_component_member name="component_step_initial_particle" field="initial_particle" parent="step"/>
<ks_component_member name="component_step_final_particle" field="final_particle" parent="step"/>
<ks_component_member name="component_step_position" field="position" parent="component_step_final_particle"/>
<ks_component_member name="component_step_length" field="length" parent="component_step_final_particle"/>
<ks_component_group name="component_step_world">
<component_member name="final_position" field="position" parent="component_step_final_particle"/>
<component_member name="position" field="position" parent="component_step_final_particle"/>
<component_member name="polar_angle_to_b" field="polar_angle_to_b" parent="component_step_final_particle"/>
</ks_component_group>
<kswrite_root
name="write_root"
path="[output_path]"
base="ElectronGunHolmes.root"
/>
<ksterm_max_z name="term_max_z" z="11.5e-3"/>
<ksterm_death name="term_death_surface"/>
<ksnav_space name="nav_space" enter_split="false" exit_split="false"/>
<ksnav_surface name="nav_surface" transmission_split="false" reflection_split="false"/>
<ksgeo_space name="space_world" spaces="world_space">
<add_terminator parent="root_terminator" child="term_max_z"/>
<add_track_output parent="write_root" child="component_track_world"/>
<add_step_output parent="write_root" child="component_step_world"/>
<geo_space name="electrode_1" spaces="world/electron_gun/electrode_1">
<add_terminator parent="root_terminator" child="term_max_z"/>
</geo_space>
<!--<geo_space name="column_1" spaces="world/electron_gun/column_1">
<add_terminator parent="root_terminator" child="term_max_z"/>
</geo_space>
<geo_space name="column_2" spaces="world/electron_gun/column_2">
<add_terminator parent="root_terminator" child="term_max_z"/>
</geo_space>
<geo_space name="column_3" spaces="world/electron_gun/column_3">
<add_terminator parent="root_terminator" child="term_max_z"/>
</geo_space>-->
</ksgeo_space>
<ks_simulation
name="electron_gun_simulation"
run="1"
seed="51385"
events="20"
electric_field="field_electrostatic"
generator="generator_uniform"
trajectory="trajectory_exact"
space="space_world"
space_navigator="nav_space"
surface_navigator="nav_surface"
writer="write_root"
/>
</kassiopeia>
<vtk_window
name="vtk_window"
enable_display="true"
enable_write="true"
frame_title="KGeoBag Visualization"
frame_size_x="1024"
frame_size_y="768"
frame_color_red=".2"
frame_color_green=".2"
frame_color_blue=".2"
view_angle="45"
eye_angle="0.5"
multi_samples="4"
depth_peeling="10"
>
<vtk_geometry_painter
name="geometry_painter"
path="[output_path]"
file="ElectronGunHolmes.vtp"
surfaces="world/electron_gun/#"
/>
<vtk_track_painter
name="track_painter"
path="[output_path]"
file="ElectronGunHolmes.root"
point_object="component_step_world"
point_variable="position"
color_object="component_step_world"
color_variable="polar_angle_to_b"
/>
<vtk_track_terminator_painter
name="terminator_painter"
path="[output_path]"
file="ElectronGunHolmes.root"
point_object="component_track_world"
point_variable="final_position"
terminator_object="component_track_world"
terminator_variable="terminator_name"
add_terminator="term_max_z"
add_color="0 255 0"
add_terminator="term_death_surface"
add_color="0 255 0"
/>
</vtk_window>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment