FAME on GPU
FAME-GPU
发布人:管理员 发布时间:2021-04-09

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...