Home Background BandStructure Publications Downloads Team
The goal of FAME-GPU is to solve the energy band of photonic crystals and get the accurate information of its energy band as soon as possible. For a better computational efficiency, we implemented the FAME-GPU version, it can get more than a hundred times the efficiency of the CPU. The design of FAME-GPU allows scientists to download and use it easily, and users can use it without knowing complicated mathematical models and calculation methods.
Download
https://github.com/FAME-GPU/FAME-GPU
How to set up FAME-GPU?
Download FAME-GPU from Github.
Install CUDA (version 10.1) and LAPACK (version 3.9.0) on your system.
In Makefile,
set the GPU_TARGET (Line 15).
set the CUDADIR (Line 27).
set the LAPACKDIR (Line 35).
Command make or make -j <num> to compile FAME-GPU.
If successful, you will see the Main.out executable file.
Before executing Main.out, user need to set two files: Popt.txt and material data.
If all settings are completed, command ./Main.out, FAME-GPU will start working.
Popt.txt parameter settings
In Popt.txt, there are five types of information here: mesh information, reciprocal lattice information, material information, solver information and flag setting.
Mesh information:
# Grid number: <n1> <n2> <n3>.
It is used to adjust the number of grids of the x-axis, y-axis and z-axis directions. Actually, the program is mainly based on the \delta_x, such that \delta_x ≈ \delta_y ≈ \delta_z.
Reciprocal lattice information
# Part number: <num>.
The two vertices on the Brillouin zone path are divided into <num> equal divisions.
Material information
# Material data name: <Data_Name>.
There are many benchmarks in FAME_Material_Data folder, you can choose from them or create a new material.
If you want to create a new material, the next part will tell you how to set.
The material data need to be placed in the FAME_Material_Data folder.
# Material type:
You can choose <isotropic> or <biisotropic>.
# Permittivity (inner material): <num> <\varepsilon_in_1> <\varepsilon_in_2> ... <\varepsilon_in_num>.
# Permittivity (outer material): <\varepsilon_out>.
# Permeability (inner material): <num> <\varepsilon_in_1> <\varepsilon_in_2> ... <\varepsilon_in_num>.
# Permeability (outer material): <\varepsilon_out>.
# Reciprocity (inner material) (must given when biisotropic): <num> <\varepsilon_in_1> <\varepsilon_in_2> ... <\varepsilon_in_num>.
# Reciprocity (outer material) (must given when biisotropic):<\varepsilon_out>.
# Chirality (inner material) (must given when biisotropic):<num> <\varepsilon_in_1> <\varepsilon_in_2> ... <\varepsilon_in_num>.
# Chirality (outer material) (must given when biisotropic):<\varepsilon_out>.
Solver information
# Desired eigenpair number: <num>.
# Dimension of Krylov subspace for Lanczos: <num>.
# Maximum restart number of Lanczos: <num>.
#Maximum iteration number of linear solver: <num>.
Flag setting
In the following, open set 0, close set 1.
# Device: <num>.
If there are multiple GPUs, you can choose which device to use. If there is only one, set to 0.
# Printf User Option: <open/close>.
If open, the program will display the settings read from Popt.txt.
# Printf Parameter: <open/close>.
If open, the program will display calculation parameters.
# Create Parameter: <open/close>.
If open, the program will output the calculation parameters as Data_Par.txt.
# Create B_inout: <open/close>.
If open, the program will output the B_inout as Data_B.txt.
# Create Wave Vector: <open/close>.
If open, the program will output the wave vector as Data_WaveVector.txt.
# Save Eigen Vector: <open/close>.
If open, the program will output Data_EV_<N_WaveVector>_<N_EigenVector>.txt for each eigen vector.
# Grid nums Max: <open/close> <memory size (GB)>.
If open, the program will adjust the size of n1, n2 and n3 according to the memory size to reach the maximum calculation.
# Sphere/Cylinder radius adjustment: <open/close> <radius>.
If open, the program will set all radii = <radius>.
Precision settings
In include/FAME_Use_Single.h, you can choose whether to use the single precision or not. The default precision is double precision. The tolerances of eigen-decomposition, linear solver and eigensolver are set in FAME_Main/FAME_Main_Code.cu.
Material data settings
To be continued...