Lumerical est une suite logicielle pour la modélisation d'appareils nanophotoniques; elle contient les applications FDTD Solutions.
Installation¶
Les applications FDTD Solutions sont maintenant intégrées au paquet Lumerical. Il n'y a pas d'installation centrale de ces logiciels sur l'infrastructure nationale, mais si vous disposez d'une licence, vous pouvez les installer en suivant les directives ci-dessous.
Si vous avez téléchargé la suite Lumerical au complet (fichier Lumerical-2020a-r1-d316eeda68.tar.gz), voyez les sections Installer Lumerical et Utiliser le module Lumerical.
Si vous avez téléchargé seulement Lumerical (fichier FDTD_Solutions-8.19.1438.tar.gz), voyez les sections Installer FDTD Solutions et Utiliser le module fdtd_solutions.
Installer Lumerical¶
Si la version de l'installateur correspond exactement à celle de la recette¶
Pour installer la suite Lumerical, lancez
oùpath est le chemin vers le répertoire qui contient le fichier .tar.gz pour installer Lumerical sous Linux.
Si la version de l'installateur ne correspond pas exactement à celle de la recette¶
Avec une version 2020a différente de 2020a-r1-d316eeda68, lancez
eb Lumerical-2020a-r1-d316eeda68.eb --try-software-version=<version> --sourcepath=<path> --disable-enforce-checksums
Lumerical-2020a-r1-d316eeda68.eb.tar.gz a été téléchargé dans $HOME/scratch, la commande suivante installera Lumerical dans votre répertoire $HOME/.local.
eb Lumerical-2020a-r1-d316eeda68.eb --try-software-version=2020a-r6-aabbccdd --sourcepath=$HOME/scratch --disable-enforce-checksums
En date du 1er avril 2020, les recettes suivantes sont disponibles :
| Recette pour l'installation | Version de l'installeur | Version compatible |
|---|---|---|
Lumerical-2019b-r6-1db3676.eb |
Lumerical-2019b-r6-1db3676.tar.gz |
Lumerical-2019b-*.tar.gz |
Lumerical-2020a-r1-d316eeda68.eb |
Lumerical-2020a-r1-d316eeda68.tar.gz |
Lumerical-2020a-*.tar.gz |
Lumerical-2021-R2.5-2885-27742aa972.eb |
Lumerical-2021-R2.5-2885-27742aa972.tar.gz |
Lumerical-2021-*.tar.gz |
Lumerical-2022-R1.3-3016-2c0580a.eb |
Lumerical-2022-R1.3-3016-2c0580a.tar.gz |
Lumerical-2022-*.tar.gz |
Si ces directives ne fonctionnent pas, contactez le soutien technique et nous adapterons une recette pour l'installation de votre version.
Une fois l'installation terminée, vous devez vous déconnecter et vous reconnecter au serveur. Chargez ensuite le module Lumerical avec
Configurer le fichier de licence¶
Le module Lumerical cherchera le fichier $HOME/.licenses/lumerical.lic pour savoir comment contacter le serveur de licence.
Créez le fichier avec le contenu suivant, en ajustant 27011@license01.example.com en fonction du port et du hostname de votre serveur de licence.
Copiez la commande suivante dans $HOME/.licenses/lumerical.lic
Installer FDTD Solutions¶
Pour installer FDTD Solutions, lancez la commande
oùpath est le chemin vers le répertoire qui contient le fichier .tar.gz pour l'installation sous Linux.
Si vous avez une autre version que 8.19.1438, utilisez
eb FDTD_Solutions-8.19.1438.eb --try-software-version=<version> --sourcepath=<path> --disable-enforce-checksums
FDTD_Solutions-8.19.1466.tar a été téléchargé dans $HOME/Downloads, la commande suivante installera FDTD Solutions
à l'intérieur du dossier $HOME/.local.
eb FDTD_Solutions-8.19.1438.eb --try-software-version=8.19.1466 --sourcepath=$HOME/Downloads --disable-enforce-checksums
Après l'installation, il faut se déconnecter du serveur et se connecter de nouveau. Pour charger le module, utilisez
Vous devez aussi configurer votre installation pour utiliser votre serveur de licence. Démarrez l'application d'abord sur un nœud de connexion et on vous demandera l'information sur votre serveur de licence; il ne sera pas nécessaire de répéter cette opération.Utilisation¶
Le module lumerical possède plus d'outils que le module fdtd_solutions, mais la principale différence est que la variable d'environnement qui contient l'emplacement pour l'installation se nomme EBROOTLUMERICAL dans un cas et EBROOTFDTD_SOLUTIONS dans l'autre. Les scripts doivent donc être ajustés en fonction du module utilisé en indiquant le nom correspondant du module dans la ligne module load ... et EBROOTFDTD_SOLUTIONS par EBROOTLUMERICAL, selon le cas.
Utiliser le module Lumerical¶
L'implémentation MPI fournie par Lumerical ne fonctionne pas étroitement avec notre ordonnanceur; pour cette raison, utilisez les options --ntasks-per-node=1 et --cpus-per-task=32 quand vous soumettrez une tâche.
L'exemple suivant est un script qui demande 2 nœuds pour une durée de 30 minutes; vous pouvez adapter ce script selon vos besoins.
Utiliser le module fdtd_solutions¶
L'implémentation MPI fournie par FDTD ne fonctionne pas étroitement avec notre ordonnanceur; pour cette raison, utilisez les options --ntasks-per-node=1 et --cpus-per-task=32 quand vous soumettez une tâche.
Dans notre exemple de script, on demande deux nœuds pour une heure; vous pouvez utiliser ce script en remplaçant les valeurs de durée et de nombre de nœuds, selon vos besoins.
Gabarits de scripts¶
À noter
Cette section a été rédigée pour le module fdtd_solutions et n'est pas adaptée au module lumerical.
Si vous avez plusieurs simulations à faire exécuter, il ne serait pas très efficace d'avoir à modifier le script pour chacune d'elles. Vous pouvez alors utiliser un gabarit de script.
Par exemple,
* Créez le répertoire $HOME/bin et enregistrez-y le script fdtd-run.sh (voir ci-dessous).
* Créez le répertoire $HOME/bin/templates et enregistrez-y les gabarits de scripts fdtd-mpi-template.sh et fdtd-process-template.sh.
fdtd-mpi-template.sh est en fait un interpréteur (shell) du script fdtd_solutions.sh présenté ci-dessus et fdtd-process-template.sh indique les ressources de calcul dont vous avez besoin.
Pour soumettre une tâche, utilisez
Ceci utilisera 32 cœurs sur un seul nœud standard. Pour utiliser plus de cœurs, demandez plusieurs nœuds comme suit```bash linenums="1"
fdtd-process-template.sh¶
!/bin/bash¶
This script is used to replace tags in a submission script template with¶
actual values from an FDTD Solutions project file. The script is called¶
with the following arguments:¶
¶
fdtd-process-template.sh [options] <#processes>¶
¶
Valid options are:¶
¶
-r The simulation rate in MNodes/s used in time estimates.¶
If no option is given the default is 4MNodes/s/process¶
which is very conservative.¶
¶
-tm The minimum time in seconds that the simulation can take.¶
If no option is given the default is 600 seconds.¶
¶
-ms A multiplicative factor to apply to the memory estimate in %.¶
If no option is given the default value is 110.¶
¶
-mm The minimum memory that a process can use.¶
If no option is given the default is 20MB.¶
¶
The script will replace the following tokens in the template file with specified values:¶
¶
Token Value¶
The total memory required by all processes¶
The memory required for each simulation process¶
The total hours required for the simulation¶
The total minutes required for the simulation¶
The total seconds required for the simulation¶
The number of processes to use¶
The path of the fsp project file¶
The name of the fsp project file, without a leading path¶
¶
¶
Rate default¶
RATE=4
Minimum time default¶
TIME_MIN=600
Memory safety default¶
MEMORY_SAFETY=110
Minimum memory default¶
MEMORY_MIN=20
Process command line options¶
while [ $# -gt 3 ] ; do case $1 in -r) RATE=$2 ;; -tm) TIME_MIN=$2 ;; -ms) MEMORY_SAFETY=$2 ;; -mm) MEMORY_MIN=$2 ;; esac shift shift done
Number of processes¶
PROCS=$3
Path of fsp file¶
DIRFSP=dirname $1
fsp file name without path¶
FILENAME=basename $1
Run FDTD to get stats from project file¶
module load fdtd_solutions SCRIPTDIR=$EBROOTFDTD_SOLUTIONS/bin $SCRIPTDIR/fdtd-engine-mpich2nem -mr $1 > $1.tmp
Estimated memory¶
ESTMEM=grep memory $1.tmp | sed 's/^.*=//'
Total memory required¶
TOTALMEM=$(( ESTMEM * MEMORY_SAFETY / 100 ))
Memory required per process¶
PROCMEM=$((TOTALMEM / PROCS)) if [ "$PROCMEM" -lt "$MEMORY_MIN" ]; then PROCMEM=$MEMORY_MIN fi
Gridpoints¶
GRIDPTS=grep gridpoints $1.tmp | sed 's/^.*=//'
Timesteps¶
TIMESTEPS=grep time_steps $1.tmp | sed 's/^.*=//'
Estimated time¶
TIME=$(( GRIDPTS * TIMESTEPS / PROCS / RATE / 10000000 )) if [ "$TIME" -lt "$TIME_MIN" ]; then TIME=$TIME_MIN fi
HOUR=$((TIME / 3600)) MINSEC=$((TIME - HOUR * 3600)) MIN=$((MINSEC / 60)) SEC=$((MINSEC - MIN * 60))
echo $TOTALMEM
The replacements¶
sed -e "s#