mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-28 14:15:42 -04:00
Use clever tricks to simplify Boolean geometry expressions
This commit is contained in:
parent
be470d2615
commit
9a3f3d1560
29 changed files with 54 additions and 28 deletions
|
|
@ -547,7 +547,11 @@ class Cell(object):
|
|||
|
||||
if self.region is not None:
|
||||
# Set the region attribute with the region specification
|
||||
element.set("region", str(self.region))
|
||||
region = str(self.region)
|
||||
if region.startswith('('):
|
||||
region = region[1:-1]
|
||||
if len(region) > 0:
|
||||
element.set("region", region)
|
||||
|
||||
# Only surfaces that appear in a region are added to the geometry
|
||||
# file, so the appropriate check is performed here. First we create
|
||||
|
|
|
|||
|
|
@ -232,6 +232,11 @@ class Intersection(Region):
|
|||
def __init__(self, *nodes):
|
||||
self.nodes = list(nodes)
|
||||
|
||||
def __and__(self, other):
|
||||
new = Intersection(*self.nodes)
|
||||
new.nodes.append(other)
|
||||
return new
|
||||
|
||||
def __iter__(self):
|
||||
for n in self.nodes:
|
||||
yield n
|
||||
|
|
@ -304,6 +309,11 @@ class Union(Region):
|
|||
def __init__(self, *nodes):
|
||||
self.nodes = list(nodes)
|
||||
|
||||
def __or__(self, other):
|
||||
new = Union(*self.nodes)
|
||||
new.nodes.append(other)
|
||||
return new
|
||||
|
||||
def __iter__(self):
|
||||
for n in self.nodes:
|
||||
yield n
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from six import add_metaclass, string_types
|
|||
import numpy as np
|
||||
|
||||
from openmc.checkvalue import check_type, check_value, check_greater_than
|
||||
from openmc.region import Region, Intersection
|
||||
from openmc.region import Region, Intersection, Union
|
||||
|
||||
|
||||
# A static variable for auto-generated Surface IDs
|
||||
|
|
@ -1736,6 +1736,18 @@ class Halfspace(Region):
|
|||
self.surface = surface
|
||||
self.side = side
|
||||
|
||||
def __and__(self, other):
|
||||
if isinstance(other, Intersection):
|
||||
return Intersection(self, *other.nodes)
|
||||
else:
|
||||
return Intersection(self, other)
|
||||
|
||||
def __or__(self, other):
|
||||
if isinstance(other, Union):
|
||||
return Union(self, *other.nodes)
|
||||
else:
|
||||
return Union(self, other)
|
||||
|
||||
def __invert__(self):
|
||||
return -self.surface if self.side == '+' else +self.surface
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
25bfa163360c4c48a9f51c4cde33c4fb9080e472e11b11ad6d01452d90bcb57d123b95bb4ba6b92178e0c678a38e7d8fc136430e9c105b2be8d7243b5561c641
|
||||
3d7e640e5d8553a67324a6b91c9de23ae8c053dee05d9b194b15b7508a94985e32eec409253df2afd9134f295e8cbf2a5d75891eae7f73df1773a70db12f94dc
|
||||
|
|
@ -1 +1 @@
|
|||
2feaef10cd32d90d89bf3f1c10cddcb7b1c2daaf739dfe13427c3453168cef0d9f57d272bab24d4493bdcae6f97e2afdf636f5b966a7a93d1d16edb6728cc2eb
|
||||
9c36e3ae973f59a70a6ec46d6d83a13099e5bbe13881f2064dd02aebafeb40b131ccb0f1455d20a06602b8a2fb3f332c77784159f2a98a6a14ae614f15b2ef8e
|
||||
|
|
@ -1 +1 @@
|
|||
df5a0ee7d353fe25344496058cea42e3244a7ab32c13c34c03b4b2f6adf88579f08a71ec0d22d8d264e50e3663717068ff54308e2d16aed8e085c222a8c2fdbd
|
||||
ce6a747ab6bf33bafb449f6b6eeb5f3962c1b45824620d2e0c93c04de36d38da8b37db71a3593d68cd61b8c3cd3cb1df2505e6c5a1726f1d1e6fb7b65ecf30f2
|
||||
|
|
@ -1 +1 @@
|
|||
6ae54c198e7659503d297e40be746a5bd72b35909fceed4b3ef357876b781946c0ea5021342556ef21f4034fa9e42b2c6014077c0efd3459dc063e6da4b12b59
|
||||
be2dea743311bea603f69ce9f1982d16a22f2cf98f8cae81209d21adad4ec6d842d2b715020dfca399a3cb6c4a178bb2db455a70b5da83412f2d738e86be00e4
|
||||
|
|
@ -1 +1 @@
|
|||
3c242912caf520c09de59edc2911d886fe77041577c1ab6a57985527f5b9e34d79d74c1fefff13d83462909d37d2318626cc14dcc717ce42f32420a799bd5c58
|
||||
1befa239029aec6a9dd792b4b615168bc476ccc3589c289d63ba15742411c4c377bc46957800dce15e2b0867e8c5c7449ba8fb4f09c527cf5e5c9bba5b2f61ea
|
||||
|
|
@ -1 +1 @@
|
|||
c0882d16048d434219d32ed7b875615e00142b55ab78be5b51e0195e23cb534a3aa5a8e9c212f0bfff96c452177315deb1264421d688438814560b4131c88930
|
||||
f4b4a63f8015b98b3f9b297834d548ed2f175dc92dcd6cd9a5c7ab38d98d1a57795372ae87b14027784ae28068eac5ac2243dca56444e0ebe4f0a53df449b2ad
|
||||
|
|
@ -1 +1 @@
|
|||
57d1ece4aa9633e5fc6d2fce9f7bba444d02046e0cdadc6e53efdf591b6e50fd0e5a14b956b7ad10710b4535b10354899e2ffc783fd78de5ccd09a061cb5678d
|
||||
f579ac15478188287c6d8ddc700e0037180f7214c41913b21e15b021860ace7037879f3b485e455dcf709b9f6003d31226878bd5b32c653b2b81101f6cf44d57
|
||||
|
|
@ -1 +1 @@
|
|||
12abd69924751d1cf2a296ce799bfb2a6a4e744ffc49eef5a5cee8b764254caa3783c406cff71238c5608b454f451953479fb4caad45460a013225ab8de2271e
|
||||
6f9eff262e0d09cf0c7a175bef4e0661381e0c0ea99c1f45febc103a0f4fa844758f1b4504db4a13d16098bbf2879b2d8af7b1465736028d59c4673b5909ff05
|
||||
|
|
@ -1 +1 @@
|
|||
1f82e622b36562a0a14536fe24c95ee9c901c428f7f082f245afae5c699ccd647aaf31a49790822ceb7ec136bdb75f8e25c3677642f73702ca2e30b058f6b440
|
||||
979466e614ad705a010a9ff3e93788c936b73658d6e684b7ba6ed88786793d43ee362d3dcf2501b0762f3077bf59b0cb1f340dd86f04d1929f2081b137859017
|
||||
|
|
@ -1 +1 @@
|
|||
ec7f0697d22668dcc4cdaf134c58b9f84137730d52cb44264ee9205369abcf995b2f66847d620715cd609bd2f5f865294374978f8fb89f182962e40801171cba
|
||||
f128ba46838cf23029c4830bddc2612eefafb979f6e1844fea2575710b0eb558882eb9466cacfd00d994bc201c19541999b96b8cf0de4a11e102f71d0bb58a9c
|
||||
|
|
@ -1 +1 @@
|
|||
8f9b2d1ba196fc0ad2e70647fb8691c5fc06b64b78f17414149a7fadfe63dd7e431830f73cb239e9c84f01e88896bf3f3d3cad1f57645bd63936dcc7db67e8a9
|
||||
05a9778a42c28a65e29b467482d7ca6f74fb5cca425ff5ed0d63425030740f4bdb2e376b42adaad94ee1587ec1774b0516a4426309700025eff578eb7d5845f7
|
||||
|
|
@ -1 +1 @@
|
|||
74f306b40647c6d7125af404234bbd6883ae88a446b00f828fcda9adc8bca5167b544b23d083c802e2c0630f7fcec9052e31bced490cc94b3e3193512359cb96
|
||||
14ee7ab57a1a2e8b2d567771d7092cbbd2892f540aefc6f61721e257bbc87598606eea509d2b83d1c9afc88f6b943f6eea6a85711c82a909395c9d7dca8115e0
|
||||
|
|
@ -1 +1 @@
|
|||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
8409f264b45150e8f28f0f37347d6ebca6b1e0d8c3cd6eb9c2004bf74ecb454514e830ff4b67ade5f492d43465e1cb98b6c597563dd7566f76036fec4f0d882a
|
||||
|
|
@ -1 +1 @@
|
|||
df187239f7481867cc09138709da90bc28eeb647b4bcbb08b894e7fdf6ff45510341b77e34754c2358f0e0665f8e552bb1eafed8c42cd2c50595b60366320ce4
|
||||
a7ce96604b3e79e5333e872d50e5f459d8ccbd8317a50a942a5c51c5a76a1a1a4e640c9ec58c1c7c75fc74344dac4789608ca30a49b442fda1f2c25636d12051
|
||||
|
|
@ -1 +1 @@
|
|||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
8409f264b45150e8f28f0f37347d6ebca6b1e0d8c3cd6eb9c2004bf74ecb454514e830ff4b67ade5f492d43465e1cb98b6c597563dd7566f76036fec4f0d882a
|
||||
|
|
@ -1 +1 @@
|
|||
03d894a7995ac40f7971b17349b460f4b563cb1c94abaa7e7241e6f7edad7f0cb80d3f80829db14ea6b7d70d18197cb15e308047cd10f699d834178eeb6396be
|
||||
15f4829f02d43e357875a7ee9ad89beced200dffd3d7cad0d75d67f2f8b826d9e0b3510128b2b45462a33389b7313b94fc658b3b9525fff618a24f7d1b859bcb
|
||||
|
|
@ -1 +1 @@
|
|||
4291b40470e7d59383c9e51c4178ca923b698cb1aaea16c1982fe3789ca980df10a65b84fb5021dacd4d290ebc232c2579f99b6c990fb6b8f28f67eef2aabcb2
|
||||
8409f264b45150e8f28f0f37347d6ebca6b1e0d8c3cd6eb9c2004bf74ecb454514e830ff4b67ade5f492d43465e1cb98b6c597563dd7566f76036fec4f0d882a
|
||||
|
|
@ -1 +1 @@
|
|||
eed0190893105747f0146472dfea86ca58b9fc2e8d039961d9fef8f235f79da32215f9b59b840419e6b69c5a04544b4659f2634b63e3a76b6b0f8c75d05e416c
|
||||
4e11714b20d7ce463df075b15c68fe7c7f9c3fa20833e6aeb15c00e9367ed4c965f063802807cc0b48dc2b3314b3d36236c0d68996b8894e425e824226ca9998
|
||||
|
|
@ -1 +1 @@
|
|||
2be927608035759f52a2ac88b2c84e28c06e0f7905187bfd4695fecd80f417e727d8879c52fe03253938f7aa0301061f72dce9b5ae46b8675049b5bc4d9525a0
|
||||
bc434e6aa07ab96a26b2fa7f589df1d1431ba4385d59721b588817efa6d9e2a94ba6e633d85ff60855464b6c520724d59600fb69d2f9af33ed421eedcf0ac255
|
||||
|
|
@ -1 +1 @@
|
|||
259ea7c22920ddea0bc076ee77d35e76f36d2c7043cb8d036b182a11fd7d0f6524e3cbd9c6b0bf4a1af905ebe10b765d3d43e43e899d3edbb601baf6fd172365
|
||||
17a7828d1e2bd6e0708fe9d88183f71a59751a88b835b85efbc2578dd48fba76caf6cc765a855debdba2a9697b12ade74b22c2cb60a1a7e8c38e40fae2f60cf0
|
||||
|
|
@ -1 +1 @@
|
|||
c01691348435ace955eb9ba8c6771f4e62cef427d1ce935971683f87bdadb9f4695379d9d664511213e883b6588d341d8e6265a4e36676f40bdbf3be6cc39898
|
||||
c50546581bb45ded4dc9d82940e40c8da25a44c1582d03087062d3869248f8ddfb55ace4757896e591edff7dd8ac5fad0a1ca284f2995d693467f688587aee0d
|
||||
|
|
@ -1 +1 @@
|
|||
2ca11b519f903c106940ca4095764a5decab2c474f76a13a0869a9527db7e5bb5733b53b18b4dbb2a5e0dd0ae58cf55017491dae94d41b8094c1140d9079beb8
|
||||
971a09ed7e8f2fb7e6d551b5e4c339be5fec8587b9d7f221a44a1da8148d7666944c6acbbc620c0878f2e581ba36a76d60a75254cece0c9fb962dbbf37092e15
|
||||
|
|
@ -1 +1 @@
|
|||
530c54691a4f2df131627849dd58c5e6f331ede786c1ffff0b1126c4c0fe64929a15113699103a05f2c6178ec90be4a3d6fc12b80c32ec608ed4a59c965ef2e4
|
||||
f8540bc1864c98ecbf771928a3bedb22c5d9ddc50eadd2ffabecf08ef990499c310eb4678a57d0fdd84b01768a575036722acbc5cf4d1374b5ca0dbf4e8aac25
|
||||
|
|
@ -1 +1 @@
|
|||
8ce48c0217ed0e9a151a96307db9bf3b2d897f8f1d36bbc1f96e24cad914bd6eaa0510e70d9c54f222fb5178bfe515eaaa4aebd11cbcd3f6c757749fddee6e9d
|
||||
ce47a39f54d87a57b7eb565540c25fd624e1655307e38577ce956c0d5899827660ce48b61c7f29c7032eb802347ec4f757ea4c1d1145fa2ba93c174d315ba27a
|
||||
|
|
@ -1 +1 @@
|
|||
3a356b5b6d0aaa3db8c601521e1837a6870c5e5f6d1068f4f3e9b896c0107517d99ff9676311221633169b4d79dc1c4076bff84130e6de16df7ace4da5481a60
|
||||
a343c0643d038ae72a6c33feac17e78cb4e7fa0aabab8617573da5f48e33ea41bae979421eea941bf7c46796681c67a3763d9a326019fc29a064bd3c7d47aac9
|
||||
|
|
@ -1 +1 @@
|
|||
382404d3061d2c847c87654ab12594ba3fbb7e3a82327da872b5fe2029018ef4d5d3376fceba5c2229ea6f85e1fb63650caf54baed3f3b0304137fde61a98d63
|
||||
7d90f0eb17bccfeebe2ddce4aaab6a9ae6996a7e613b58949f120f8558bf71a37d9edb0393fff4b4d2718604de60313730266a62021b9c9a1e134be8f1a81f67
|
||||
Loading…
Add table
Add a link
Reference in a new issue