Lumerical FDTD Solutions

Description

FDTD Solutions is a commercial finite-difference time-domain (FDTD) package.

User instructions

FDTD Solutions is available via the modules system. To add it to your environment run:

$ module load fdtd/8.18.1298

The main program can then be run by executing:

$ fdtd-solutions

Note that other, more specific programs (especially using different MPI versions) are also available.

Warning

FDTD Solutions is supplied in an RPM format with dependencies that are not wholly compatible with our systems, especially later versions. It is possible (though unlikely, I believe) that certain features may not work.

Plugins

FDTD Solutions allows for user-written plugins to permit the study of different materials and models. Unfortunately, these must be placed in a specific location on the NFS server, which cannot be written to from workstations. Instead, plugins are copied once an hour from $HOME/fdtd-plugins/$VERSION to the plugin directory of FDTD Solutions version $VERSION, where $VERSION is the desired version of FDTD (e.g. 8.18.1298).

Note

This only applies to users on a specific whitelist. If you wish to be added, please ask.

Source

Install media.

License

Proprietary. Ortwin Hess/Stefan Maier have floating licenses.

Admin notes

The tarball contains an install script but this simply asks the user a few questions and them installs an rpm (and no other packages are supplied), so it’s best to ignore it. Originally I converted this to a .deb file using alien and then installed it (in a custom location) with dpkg. However, this stopped working sometime after version 8, so I instead went via a simpler route: given we don’t typically uninstall versions, I can live without using dpkg. Instead, I created the desired tree and then went via a cpio archive:

mkdir /common/debian/9.1/Core/fdtd/fdtd-8.18.1298
cd /common/debian/9.1/Core/fdtd/fdtd-8.18.1298
rpm2cpio < /root/fdtd/FDTD_Solutions-8.18.1298/rpm_install_files/FDTD-8.18.1298-1.el6.x86_64.rpm | cpio -i --make-directories
ln -s $PWD/opt/lumerical/fdtd/bin
chmod o= -R /common/debian/9.1/Core/fdtd/fdtd-8.18.1298
chgrp -R hess /common/debian/9.1/Core/fdtd/fdtd-8.18.1298

A little ugly but it appears to work.

FDTD is the installed to a directory structure under opt/ (very annoying!). I created a soft link from bin/ to opt/lumerical/fdtd/bin/ so that the standard module files can be used without alteration.

The final stage is to configure the license server. This must be doing using a GUI program, so used X forwarding when I connected over ssh to the main server and then did:

$ /path/to/fdtd/fdtd-8.18.1298/bin/fdtd_config_license

If there’s an option for the license server type, choose FlexLM. And choose to install as the system default rather than user. The server (running by ICT) must be given as a fully-qualified hostname. The default port settings are correct.

An hourly cron job is used to copy user plugin files to the appropriate place in the install location. Note: weird segmentation faults occur if a user cannot read a plugin, so it’s important to ensure the permissions on the plugins are the same as those of FDTD itself.

It seems that fdtd depends on a version of libgstreamer that is no longer available in the Debian repos after upgrading from 8 to 9. I added this to the module as follows:

tmpdir=$(mktemp -d)
cd $tmpdir
wget http://ftp.ca.debian.org/debian/pool/main/g/gstreamer0.10/libgstreamer0.10-0_0.10.36-1.5_amd64.deb
wget http://ftp.ca.debian.org/debian/pool/main/g/gst-plugins-base0.10/libgstreamer-plugins-base0.10-0_0.10.36-2_amd64.deb
for debfile in $(ls *deb); do dpkg -x $debfile .; done
cp -r ./usr/lib/x86_64-linux-gnu /common/debian/9.1/Core/fdtd/fdtd-8.18.1298/lib
cd -
rm -r $tmpdir

And this lib directory was copied as a hard link to other versions. Some of the older versions also needed an older libpng. This was handled in the same way.