Last updated on 29 October, 2020. Katana is currently at version 1.0T. Commits will be published to the github page: Katana Github
Katana is an open-source process-modeling assistant & sectioning program. The program is capable of generating process-modelled 3D models of RSFQ cells by leveraging the FreeCAD engine. These models are generally used for improved electrical parameter extraction of superconducting electronic circuits. Katana also allows a designer to peer into GDS files and generate two-dimensional Integrated Circuit (IC) cross-sections with the assistance of layer definition information. Additionally, Katana is capable of automatically generating a FLOOXS process-modeling input script. Katana can combine multiple two-dimensional Gmsh .geo files and convert .msh files back into .geo files (mesh removal). The video below demonstrates typical use of the software. The video is of a pre-release version. See the Usage section for instructions on how to use the newest version.
All updates and bugfixes can be found in "Changelog.txt".
Katana can be executed with input arguments run interactively. If Katana is run with no input arguments, interactive mode is started. The following input arguments may be used:
-help
Print the help information.
-version
Print the current version of Katana.
Katana is primarily used to generate 3D models of RSFQ cells:
-3dmodel
Create a Python script which generates a 3D process-modelled representation
of a circuit when given the following parameters:
1 - The GDS mask layout file of specified circuit
2 - The process information file for the desired fabrication process
3 - The path to where the contours for the fabrication process are stored
4 - The path and desired name of the Python script
Format <Katana> <model command> <gds path> <pif path> <contours path> <output path>
e.g. ./katana -3dmodel data/JTL.gds data/mitll_sfq5ee.pf data/3DGen
data/3DGen/JTLModelOutputScript.py
Katana is capable of generating cross sections of circuits from mask and process information:
-slice
Generate a 2D cross-sectional slice through the IC.
The GDSII format layout file, as well as a layer
definition file are required as input parameters.
Katana also requires the x,y co-ordinate pair of
where to create the slice.
Format: <Katana> <slice> <gds path> <ldf path> <x1> <y1> <x2> <y2>
e.g: ./katana -slice jj.gds mitllsfq5ee.ldf 500 0 500 1000
Two files are produced; a geometry file and .tcl file.
The TCL file should be run by FLOOXS to generate a
cross-section. Both files are saved in the same directory
as the Katana executable. The geometry file is named
"cross_section_output.geo". The FLOOXS input script is
called "katana_generated.tcl".
Katana assists in combining multiple cross-sections in order to create a three-dimensional model. All modeling commands make use of the Gmsh .geo file format. In order to define the characteristic length of all points in the .geo file, add either of the following lines to the top of your .geo file:
MeshSpac = 1;
cl__1 = 1;
Any double can be used in space of the 1. Refer to desired points with that mesh spacing command. Katana currently only stores one characteristic length variable.
Point(1) = {1, 1, 1, MeshSpac};
Point(1) = {1, 1, 1, cl__1};
The modeling module has the following functionality:
-modeling -m
Merges two specified geometry files in the following manner:
1: Imports both files into memory.
2: Performs coherence check on both file data sets.
3: Simplifies both file data sets.
4: Merges both data sets together.
5: Performs coherence check on the merged data.
6: Simplifies the merged data.
7: Writes merged data to specified output file.
Please see the manual for the Katana definition of coherence
and simplification and why they are necessary.
Format <Katana> <modeling> <merge command>
<first file> <second file> <specified output>
e.g. ./katana -modeling -m data/left.geo data/right.geo
-data/combined.geo
-modeling -sa
(legacy. Replaced with more versatile merge above)
Simple append: Joins two 2D geo-files. Append the second
to the first. Support for points and lines only.
Format: <Katana> <modeling> <simple append> <first .geo>
<second.geo> <output.geo> <char. len. override>(optional)
e.g. ./katana -modeling -sa left.geo right.geo both.geo
The optional arguments overrides the characteristic length
of all points. See char. length in Gmsh documentation.
-modeling -t
Translate entire .geo file. Also perform coherence
optimization and file simplification.
Format <Katana> <modeling> <translate command>
<target file> <delta x> <delta y> <delta z>
e.g. ./katana -modeling -t data/shape.geo 1000 0 1000
-modeling -r
Rotate entire .geo file. Also perform coherence optimization
and file simplification. Requires an origin of rotation and
rotation angles in degrees per axis.
Format <Katana> <modeling> <rotate command>
<target file> <origin x> <origin y> <origin z>
<theta x> <theta y> <theta z>
e.g. ./katana -modeling -r data/shape.geo 0 0 0 30 30 30
-modeling -scale
Scale entire .geo file. Also perform coherence optimization
and file simplification. Requires a scaling factor. Useful
for when database units are different to expected.
Format <Katana> <modeling> <scale command>
<target file> <output file> <factor>
e.g. ./katana -modeling -scale data/bigshape.geo
data/smallshape.geo 1e-2
Katana has a Gmsh mesh module capable of mesh volume calculation, as well as conversion of FLOOXS meshes back into a geometry format representation (.geo).
-meshops -s
This is a legacy function since FLOOXS now supports Gmsh .geo
contour exporting. This function converts 2D mesh surfaces
into physical surfaces with the mesh triangles removed.
Format <Katana> <mesh file operations> <Silver Lining Command>
<target mesh> <geo output path>
e.g. ./katana -meshops -s data/f_out.msh data/convert.geo
-meshops -v
Calculate all Gmsh .msh \"Physical Volume\" values in mesh file.
Format <Katana> <mesh file operations> <Volume Command>
e.g. ./katana -meshops -v data/example.msh"
Katana makes use of Boost functions and therefore requires the library present before building.
Katana is built in C++ with CMake and utilizes the clipper library for gds path construction. For your convenience, the relevant source files are included in this repository.
Katana makes use of the Gdscpp library in order to read GDS files. Four your convenience, the relevant source files are included in this repository.
Katana was coded with elements of C++17 and therefore requires a suitable compiler.
In order to build Katana easily on CentOS 7, it is recommended to use Software Collections Developer Toolset 8. The toolset allows one to avoid having to build a gcc version greater than 7 from source as this process takes around 4 hours on a modern computer. Once Katana is built you can simply turn the toolset off again.
sudo yum -y install centos-release-scl-rh devtoolset-8 boost-devel git
git clone git@github.com:HeinrichHerbst/Katana.git
cd Katana
wget https://github.com/Kitware/CMake/releases/download/v3.17.0/cmake-3.17.0-Linux-x86_64.tar.gz
tar xf cmake-3.17.0-Linux-x86_64.tar.gz
rm cmake-3.17.0-Linux-x86_64.tar.gz
mkdir release
cd release
scl enable devtoolset-8 bash
../cmake-3.17.0-Linux-x86_64/bin/cmake -DCMAKE_BUILD_TYPE=Release ..
make
exit
Same as the CentOS install except you can simply install the required software with the native package manager.
sudo apt install cmake gcc git libboost-all-dev
git clone git@github.com:HeinrichHerbst/Katana.git
cd Katana
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
Katana uses the FreeCAD Python API to generate 3D models of RSFQ cells. The generated Python scripts have been tested with FreeCAD V0.19, which uses Python 3.8.4. To ensure compatibility, we recommend that you use a virtual environment with this matching version of Python. The "requirements.txt" file contains the requirements of the virtual environment we used to create functional 3D models. See https://youtu.be/Kg1Yvry_Ydk for a guide to using virtual environments on Linux. See https://gist.github.com/HeinrichHerbst/67ac01d84fbd1c8339ec46f0e23d43f4 for our guide to setting up the correct Python venv on Windows using VS Code.