.. index:: Lumerical, FDTD .. _Lumerical FDTD Solutions: 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: .. code-block:: bash $ module load fdtd/8.18.1298 The main program can then be run by executing: .. code-block:: bash $ 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: .. code-block:: bash 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: .. code-block:: bash $ /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: .. code-block:: bash 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.