# Creating a main program The general procedure of creating a main program based on the SDK is as follows: 1. Read necessary parameters from the input files. You may also hard coded all parameters in the program with reading from external input files. 2. Normalize the parameters. This is purely for numerical benefits, as avoiding multiplication of very large and very small value can improve the solver accuracy. 3. Simulation system setup using the normalized parameters. 4. Start the main iteration loop. 5. Finalize the whole program ## Read input We recommend using the toml file for input parameters. You can call the `mupro_toml_read_file` subroutine and `get_value` subroutine to obtain desired parameter from. ## Using the SDK Some of the subroutines from the SDK needs to be called directly, while others needs to be called as procedure of a derived type ### Direct called subroutines These are usually either global functions that can only needs to be called once or input file reader which is a thin wrapper around the procedures provided by the toml-f library. Here are a list of them: - mupro_size_setup - mupro_fft_setup - mupro_toml_read_file - get_value - mupro_toml_evaluate_value ### Call subroutines from a derived type For most subroutines from the SDK, they are attached to some derived type, this is because most subroutines needs to be called within specific data context and those necessary data are kept in the derived type. A few examples of these subroutines include: - setup from the type_mupro_electricContext - solve from the type_mupro_electricContext There are many more, and you should read the modules section of this manual to learn available solvers that you can use for your program.