Introduction

Overview

In short, CombLayer is a Geant 4-like system for building CGS geometries. Its main features are summarised in this poster.

Do not use CombLayer if ...

  • your model is small. Use pstudy or alternative tools instead.
    • while pstudy is convenient with small number of parameters, it becomes extremely difficult to maintain a complex geometry.
  • you need an as-built model. Use DAGMC.
    • be aware of calculation speed issues with complex geometries
    • difficult to do parametric studies

Use CombLayer if...

  • your model is large
    • In CombLayer, geometry is made of individual components (C++ class instances)
      • each component is made in its own individual coordinate system
      • components can be re-used in different areas of geometry
        • e.g. fuel element or neutron extraction channel
        • currently, CombLayer has more than 400 components
      • components can be built in parallel by several developers
  • you need to do parametric studies (optimisation)

Building geometry

git clone https://github.com/SAnsell/CombLayer.git
git checkout PIK-tutorial
./CMake.pl -O
cmake .
make -j$(nproc) pik

Note: the CMake.pl script is obsolete since 2024. One must update the standard CMakeLists.txt files insted.

Inner shielding cell

git checkout e77b5a32a
make pik
./pik a
ModelSupport::buildCylinder(SMap,buildIndex+7,Origin,Z,innerShieldRadius);

ModelSupport::buildPlane(SMap,buildIndex+5,Origin-Z*(depth),Z);
ModelSupport::buildPlane(SMap,buildIndex+6,Origin+Z*(height),Z);
  • Cells are built in the PIKPool::createObjects method
    • In addition, we need to define the outer surface in order for CombLayer to be able to insert the pool into the outer void cell. Since currently we have only one cell, its surface becomes outer surface.
Out=ModelSupport::getComposite(SMap,buildIndex," -7 5 -6 ");
makeCell("InnerShield",System,cellIndex++,innerShieldMat,0.0,Out);
addOuterSurf(Out);
createSurfaces();
createObjects(System);

e77b5a32a-yz.pnge77b5a32a-xy.png

Inner shielding wall

Let's add a side wall around the InnerShield cell.

git checkout 79a4df2ee
make pik

We will also change the wall thickness via the command line argument:

./pik -v PoolInnerShieldWallThick 50 a

79a4df2ee-yz.png79a4df2ee-xy.png

We also have to update the outer surface. It's made of the outer cylinder (17) and the original bottom and top planes (5 and 6):

Out=ModelSupport::getComposite(SMap,buildIndex," -17 5 -6 ");
addOuterSurf(Out);

Check out the difference between both commits:

git diff e77b5a32a 79a4df2ee

We will also change the inner shielding material from light water to heavy water. We could have done it via command line:

./pik -v PoolInnerShieldMat D2O a

but since we need this change to be permanent we will modify the source code of the PIKVariables function in Model/pik/PIKVariables.cxx:

 Control.addVariable("PoolInnerShieldMat","D2O");