Skip to content

Commit

Permalink
Merge pull request #281 from fusion-energy/adding_mesh_source_example
Browse files Browse the repository at this point in the history
Adding an unstructured mesh as a mesh spatial example
  • Loading branch information
shimwell committed Apr 8, 2024
2 parents ebed5c6 + efa6057 commit 588560c
Show file tree
Hide file tree
Showing 3 changed files with 301 additions and 0 deletions.
66 changes: 66 additions & 0 deletions tasks/task_04_make_sources/6_unstructured_mesh_spatial_source.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# This example makes use of a DAGMC unstructured tet mesh to produce a source with
# a MeshSpatial distribution.

from cad_to_dagmc import CadToDagmc

my_model = CadToDagmc()

my_model.add_stp_file('plasma_simplified_180.step')
# import gmsh
# gmsh.initialize()

gmshm = my_model.export_unstructured_mesh_file(filename="umesh.h5m", max_mesh_size=100, min_mesh_size=10)

# perhaps trimesh can get volumes
# import trimesh
# trimesh_mesh_object = trimesh.load_mesh('umesh.h5m')
# vertices = trimesh_mesh_object.vertices


import openmc
import openmc.lib

openmc.config['cross_sections'] = '/home/j/endf-b8.0-hdf5/endfb-viii.0-hdf5/cross_sections.xml'

umesh = openmc.UnstructuredMesh(filename="umesh.h5m",library='moab')

surf1 = openmc.Sphere(r=50000, boundary_type="vacuum")
region1 = -surf1

cell1 = openmc.Cell(region=region1)

my_geometry = openmc.Geometry([cell1])

my_source = openmc.IndependentSource()
my_source.angle = openmc.stats.Isotropic()
my_source.energy = openmc.stats.Discrete([14e6], [1])
# link to docs for MeshSpatial
# https://docs.openmc.org/en/latest/pythonapi/generated/openmc.stats.MeshSpatial.html
# the main difference between MeshSpatial and MeshSource is that in MeshSpatial
# each mesh element has the same source with potentially a different strength
# while in MeshSource the elements can have a different source.
# Having a different source would allow a different energy distribution and therefore
# MeshSources are useful for shut down dose rate simulations where each active element
# results in a different photon emission
my_source.space = openmc.stats.MeshSpatial(
mesh=umesh,
strengths=[1]*1104, # in a more detailed version the strength could be adjusted based on the source position.
volume_normalized=False
)
my_source.strength=1

my_settings = openmc.Settings()
my_settings.batches = 10
my_settings.particles = 1000
my_settings.run_mode = "fixed source"
my_settings.source = my_source

model = openmc.model.Model(my_geometry, None, my_settings )

model.run()


# plotting the mesh source
from openmc_source_plotter import plot_source_position
plot = plot_source_position([my_source], n_samples=10000)
plot.show()
235 changes: 235 additions & 0 deletions tasks/task_04_make_sources/plasma_simplified_180.step
Original file line number Diff line number Diff line change
@@ -0,0 +1,235 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('Open CASCADE Model'),'2;1');
FILE_NAME('Open CASCADE Shape Model','2024-03-21T22:43:16',('Author'),(
'Open CASCADE'),'Open CASCADE STEP processor 7.7','Open CASCADE 7.7'
,'Unknown');
FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('Open CASCADE STEP translator 7.7 3',
'Open CASCADE STEP translator 7.7 3','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#165);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = MANIFOLD_SOLID_BREP('',#16);
#16 = CLOSED_SHELL('',(#17,#157,#161));
#17 = ADVANCED_FACE('',(#18),#33,.T.);
#18 = FACE_BOUND('',#19,.T.);
#19 = EDGE_LOOP('',(#20,#64,#110,#111));
#20 = ORIENTED_EDGE('',*,*,#21,.T.);
#21 = EDGE_CURVE('',#22,#24,#26,.T.);
#22 = VERTEX_POINT('',#23);
#23 = CARTESIAN_POINT('',(600.,0.,0.));
#24 = VERTEX_POINT('',#25);
#25 = CARTESIAN_POINT('',(-600.,7.347880794884E-14,0.));
#26 = SEAM_CURVE('',#27,(#32,#57),.PCURVE_S1.);
#27 = CIRCLE('',#28,600.);
#28 = AXIS2_PLACEMENT_3D('',#29,#30,#31);
#29 = CARTESIAN_POINT('',(0.,0.,0.));
#30 = DIRECTION('',(0.,0.,1.));
#31 = DIRECTION('',(1.,0.,-0.));
#32 = PCURVE('',#33,#51);
#33 = SURFACE_OF_REVOLUTION('',#34,#48);
#34 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#35,#36,#37,#38,#39,#40,#41,#42,
#43,#44,#45,#46,#47),.UNSPECIFIED.,.T.,.F.,(4,1,1,1,1,1,1,1,1,1,4),(
0.,187.23259952043,347.98267676914,428.29163253564,541.7774061079,
718.24889231762,894.72037852735,1.0082061521E+03,1.088515107866E+03,
1.249265185115E+03,1.436497784635E+03),.UNSPECIFIED.);
#35 = CARTESIAN_POINT('',(600.,0.,0.));
#36 = CARTESIAN_POINT('',(592.86624185107,0.,48.135498348999));
#37 = CARTESIAN_POINT('',(549.62668170974,0.,178.40849776857));
#38 = CARTESIAN_POINT('',(456.95940792226,0.,287.78429414326));
#39 = CARTESIAN_POINT('',(311.89821054379,0.,302.22214810004));
#40 = CARTESIAN_POINT('',(306.23857884174,0.,144.24900545953));
#41 = CARTESIAN_POINT('',(296.20312565766,0.,4.213435506256E-14));
#42 = CARTESIAN_POINT('',(306.23857884174,0.,-144.2490054595));
#43 = CARTESIAN_POINT('',(311.89821054379,0.,-302.2221481));
#44 = CARTESIAN_POINT('',(456.95940792226,0.,-287.7842941432));
#45 = CARTESIAN_POINT('',(549.62668170974,0.,-178.4084977685));
#46 = CARTESIAN_POINT('',(592.86624185107,-0.,-48.13549834899));
#47 = CARTESIAN_POINT('',(600.,0.,0.));
#48 = AXIS1_PLACEMENT('',#49,#50);
#49 = CARTESIAN_POINT('',(0.,0.,0.));
#50 = DIRECTION('',(0.,0.,1.));
#51 = DEFINITIONAL_REPRESENTATION('',(#52),#56);
#52 = LINE('',#53,#54);
#53 = CARTESIAN_POINT('',(0.,0.));
#54 = VECTOR('',#55,1.);
#55 = DIRECTION('',(1.,0.));
#56 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#57 = PCURVE('',#33,#58);
#58 = DEFINITIONAL_REPRESENTATION('',(#59),#63);
#59 = LINE('',#60,#61);
#60 = CARTESIAN_POINT('',(0.,1.436497784635E+03));
#61 = VECTOR('',#62,1.);
#62 = DIRECTION('',(1.,0.));
#63 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#64 = ORIENTED_EDGE('',*,*,#65,.T.);
#65 = EDGE_CURVE('',#24,#24,#66,.T.);
#66 = SURFACE_CURVE('',#67,(#81,#88),.PCURVE_S1.);
#67 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#68,#69,#70,#71,#72,#73,#74,#75,
#76,#77,#78,#79,#80),.UNSPECIFIED.,.T.,.F.,(4,1,1,1,1,1,1,1,1,1,4),(
0.,187.23259952043,347.98267676914,428.29163253564,541.7774061079,
718.24889231762,894.72037852735,1.0082061521E+03,1.088515107866E+03,
1.249265185115E+03,1.436497784635E+03),.UNSPECIFIED.);
#68 = CARTESIAN_POINT('',(-600.,7.347880794884E-14,0.));
#69 = CARTESIAN_POINT('',(-592.866241851,7.260517454054E-14,
48.135498348999));
#70 = CARTESIAN_POINT('',(-549.6266817097,6.730985564818E-14,
178.40849776857));
#71 = CARTESIAN_POINT('',(-456.9594079222,5.596138762523E-14,
287.78429414326));
#72 = CARTESIAN_POINT('',(-311.8982105437,3.819651452022E-14,
302.22214810004));
#73 = CARTESIAN_POINT('',(-306.2385788417,3.75034095354E-14,
144.24900545953));
#74 = CARTESIAN_POINT('',(-296.2031256576,3.627442097341E-14,
4.213435506256E-14));
#75 = CARTESIAN_POINT('',(-306.2385788417,3.75034095354E-14,
-144.2490054595));
#76 = CARTESIAN_POINT('',(-311.8982105437,3.819651452022E-14,
-302.2221481));
#77 = CARTESIAN_POINT('',(-456.9594079222,5.596138762523E-14,
-287.7842941432));
#78 = CARTESIAN_POINT('',(-549.6266817097,6.730985564818E-14,
-178.4084977685));
#79 = CARTESIAN_POINT('',(-592.866241851,7.260517454054E-14,
-48.13549834899));
#80 = CARTESIAN_POINT('',(-600.,7.347880794884E-14,0.));
#81 = PCURVE('',#33,#82);
#82 = DEFINITIONAL_REPRESENTATION('',(#83),#87);
#83 = LINE('',#84,#85);
#84 = CARTESIAN_POINT('',(3.14159265359,0.));
#85 = VECTOR('',#86,1.);
#86 = DIRECTION('',(0.,1.));
#87 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#88 = PCURVE('',#89,#94);
#89 = PLANE('',#90);
#90 = AXIS2_PLACEMENT_3D('',#91,#92,#93);
#91 = CARTESIAN_POINT('',(-424.2196652149,5.195192551409E-14,
1.561686555518E-15));
#92 = DIRECTION('',(1.224646799147E-16,1.,-0.));
#93 = DIRECTION('',(-0.,0.,-1.));
#94 = DEFINITIONAL_REPRESENTATION('',(#95),#109);
#95 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#96,#97,#98,#99,#100,#101,#102,
#103,#104,#105,#106,#107,#108),.UNSPECIFIED.,.T.,.F.,(4,1,1,1,1,1,1,
1,1,1,4),(0.,187.23259952043,347.98267676914,428.29163253564,
541.7774061079,718.24889231762,894.72037852735,1.0082061521E+03,
1.088515107866E+03,1.249265185115E+03,1.436497784635E+03),
.UNSPECIFIED.);
#96 = CARTESIAN_POINT('',(1.561686555518E-15,175.78033478504));
#97 = CARTESIAN_POINT('',(-48.13549834899,168.64657663611));
#98 = CARTESIAN_POINT('',(-178.4084977685,125.40701649479));
#99 = CARTESIAN_POINT('',(-287.7842941432,32.739742707311));
#100 = CARTESIAN_POINT('',(-302.2221481,-112.3214546711));
#101 = CARTESIAN_POINT('',(-144.2490054595,-117.9810863732));
#102 = CARTESIAN_POINT('',(-4.057266850704E-14,-128.0165395572));
#103 = CARTESIAN_POINT('',(144.24900545953,-117.9810863732));
#104 = CARTESIAN_POINT('',(302.22214810004,-112.3214546711));
#105 = CARTESIAN_POINT('',(287.78429414326,32.739742707311));
#106 = CARTESIAN_POINT('',(178.40849776857,125.40701649479));
#107 = CARTESIAN_POINT('',(48.135498348999,168.64657663611));
#108 = CARTESIAN_POINT('',(1.561686555518E-15,175.78033478504));
#109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#110 = ORIENTED_EDGE('',*,*,#21,.F.);
#111 = ORIENTED_EDGE('',*,*,#112,.F.);
#112 = EDGE_CURVE('',#22,#22,#113,.T.);
#113 = SURFACE_CURVE('',#114,(#128,#135),.PCURVE_S1.);
#114 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#115,#116,#117,#118,#119,#120,
#121,#122,#123,#124,#125,#126,#127),.UNSPECIFIED.,.T.,.F.,(4,1,1,1,1
,1,1,1,1,1,4),(0.,187.23259952043,347.98267676914,428.29163253564,
541.7774061079,718.24889231762,894.72037852735,1.0082061521E+03,
1.088515107866E+03,1.249265185115E+03,1.436497784635E+03),
.UNSPECIFIED.);
#115 = CARTESIAN_POINT('',(600.,0.,0.));
#116 = CARTESIAN_POINT('',(592.86624185107,0.,48.135498348999));
#117 = CARTESIAN_POINT('',(549.62668170974,0.,178.40849776857));
#118 = CARTESIAN_POINT('',(456.95940792226,0.,287.78429414326));
#119 = CARTESIAN_POINT('',(311.89821054379,0.,302.22214810004));
#120 = CARTESIAN_POINT('',(306.23857884174,0.,144.24900545953));
#121 = CARTESIAN_POINT('',(296.20312565766,0.,4.213435506256E-14));
#122 = CARTESIAN_POINT('',(306.23857884174,0.,-144.2490054595));
#123 = CARTESIAN_POINT('',(311.89821054379,0.,-302.2221481));
#124 = CARTESIAN_POINT('',(456.95940792226,0.,-287.7842941432));
#125 = CARTESIAN_POINT('',(549.62668170974,0.,-178.4084977685));
#126 = CARTESIAN_POINT('',(592.86624185107,-0.,-48.13549834899));
#127 = CARTESIAN_POINT('',(600.,0.,0.));
#128 = PCURVE('',#33,#129);
#129 = DEFINITIONAL_REPRESENTATION('',(#130),#134);
#130 = LINE('',#131,#132);
#131 = CARTESIAN_POINT('',(0.,0.));
#132 = VECTOR('',#133,1.);
#133 = DIRECTION('',(0.,1.));
#134 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#135 = PCURVE('',#136,#141);
#136 = PLANE('',#137);
#137 = AXIS2_PLACEMENT_3D('',#138,#139,#140);
#138 = CARTESIAN_POINT('',(424.21966521495,0.,1.561686555518E-15));
#139 = DIRECTION('',(-0.,-1.,-0.));
#140 = DIRECTION('',(0.,0.,-1.));
#141 = DEFINITIONAL_REPRESENTATION('',(#142),#156);
#142 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#143,#144,#145,#146,#147,#148,
#149,#150,#151,#152,#153,#154,#155),.UNSPECIFIED.,.T.,.F.,(4,1,1,1,1
,1,1,1,1,1,4),(0.,187.23259952043,347.98267676914,428.29163253564,
541.7774061079,718.24889231762,894.72037852735,1.0082061521E+03,
1.088515107866E+03,1.249265185115E+03,1.436497784635E+03),
.UNSPECIFIED.);
#143 = CARTESIAN_POINT('',(1.561686555518E-15,175.78033478504));
#144 = CARTESIAN_POINT('',(-48.13549834899,168.64657663611));
#145 = CARTESIAN_POINT('',(-178.4084977685,125.40701649479));
#146 = CARTESIAN_POINT('',(-287.7842941432,32.739742707311));
#147 = CARTESIAN_POINT('',(-302.2221481,-112.3214546711));
#148 = CARTESIAN_POINT('',(-144.2490054595,-117.9810863732));
#149 = CARTESIAN_POINT('',(-4.057266850704E-14,-128.0165395572));
#150 = CARTESIAN_POINT('',(144.24900545953,-117.9810863732));
#151 = CARTESIAN_POINT('',(302.22214810004,-112.3214546711));
#152 = CARTESIAN_POINT('',(287.78429414326,32.739742707311));
#153 = CARTESIAN_POINT('',(178.40849776857,125.40701649479));
#154 = CARTESIAN_POINT('',(48.135498348999,168.64657663611));
#155 = CARTESIAN_POINT('',(1.561686555518E-15,175.78033478504));
#156 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2)
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
) );
#157 = ADVANCED_FACE('',(#158),#136,.T.);
#158 = FACE_BOUND('',#159,.T.);
#159 = EDGE_LOOP('',(#160));
#160 = ORIENTED_EDGE('',*,*,#112,.T.);
#161 = ADVANCED_FACE('',(#162),#89,.F.);
#162 = FACE_BOUND('',#163,.F.);
#163 = EDGE_LOOP('',(#164));
#164 = ORIENTED_EDGE('',*,*,#65,.T.);
#165 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#169)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#166,#167,#168)) REPRESENTATION_CONTEXT('Context #1',
'3D Context with UNIT and UNCERTAINTY') );
#166 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#167 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#168 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#169 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#166,
'distance_accuracy_value','confusion accuracy');
#170 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
ENDSEC;
END-ISO-10303-21;

0 comments on commit 588560c

Please sign in to comment.