# Workplan Explanation
> Insert image
The workplan shown on the Gantt chart above details our initial division of labour during the 5 weeks that we will have to work on the project, starting on 26th April and with a hard deadline for submission on 27th May. The main tasks we will tackle are listed on the left of the chart, with the rough time that we expect each of these tasks to take being shown on a week-by-week basis. Each task has been assigned to a person/group of people, who will be responsible for completing this task on time.
It should be noted that there are times when not all members of the group are allocated to a specific task. During these times, these members will be free to move between tasks to provide support in places where it is needed. In this way, we hope to mitigate any delays in tasks being completed on time by being able to prioritise 'free' group members towards areas that require extra help.
The Gantt chart, made in Excel, also allows us to interactively keep track of the completion of tasks as they are finished. This allows the group to easily see the status of all the main tasks at any given time, which will aid in this prioritisation process.
## Breakdown of Tasks
#### Shared Data & Parse Inputs
This task details the development of the 'Shared Data' and 'Parse Inputs' modules, as labeled in the Design Document. It is anticipated that the 'Shared Data' module will take a minimal amount of time, so it has been included with the input parser. This task will be completed within the first week of the project by Lakshmi.
#### Assign Problem
This task details the development of the 'Assign Problem' module, which contains all of the functions necessary to calculate the local energies and transition probabilities of the quantum problems being solved by the code. It will be completed within the first week by Joe and Lakshmi.
#### Run VQMC
This task details the development of the 'Run VQMC' module, which contains the variational quantum Monte Carlo algorithm. It will be completed within the first week by Tadashi.
#### Write NetCDF
This task details the development of the 'Write NetCDF' module, which is responsible for writing the output energies and parameters to a NetCDF dataset to be read by the Python visualisation frontend. This will be completed within the first week by Iain.
#### Main Program
This task details the development of the main driver code that will call each of the functions in the other modules, and as such requires that the other modules be written first. For this reason, it is being started in the second week of development and will be completed within this week by Omar.
#### Build Files
This task details the writing of the Makefile needed to compile the backend code into a working program. It will be started in the first week by Omar, and will be finished once the main program is complete and it can be tested.
#### Python Frontend
This task details the development of two Python scripts. The first is the input generator, which will guide the user through the creation of an input file for the backend to use. This will be written by Lakshmi. The second is the visualisation frontend, which takes the results from the backend and displays them. This will be written by Omar. These tasks will begin in the first week, and be complete by the end of the second week.
#### Burning and Thinning
This task details the process of analysing the outputs of the Monte Carlo algorithm to determine the optimim number of samples to 'burn' at the start to ensure thermalisation of the system, and the thinning parameter needed to ensure Monte Carlo samples are not correlated. This will require work on a separate branch of the code, as changes to the 'Write NetCDF' module will be needed to output the desired results. Significant time will need to be spent on analysis of results, so Lakshmi and Iain will work on this task together in the second week.
#### Test Data
This task details the development of the 'Test Data' module, which implements unit tests for all of the main functions within the code. As such, it requires all main functions be complete and functional beforehand, so it cannot be started until the second week. This task will be completed by Joe within that week.
#### Parallelism
This task details the implementation of MPI parallelism to the backend code. The code should be complete before this task is started, so it will be started in the third week of development. It will be completed within this week by Joe. There is potential for this task to take more time if an opportunity for hybrid MPI/OpenMP parallelism is identified, in which case this task will become part of the Extensions task.
#### Extensions
This task details the implementation of the potential extensions to the code detailed in the Design Document. Due to its experimental nature, this is the most expansive and open-ended of the tasks. For this reason, it is being allocated 3 weeks between weeks 2 and 4 to be completed, and will be headed by Iain, Tadashi and Lakshmi.
#### Documentation
This task details the writing of the developer documentation. While much of this should be generated by Doxygen based on comments in the source code, significant work will be required to turn this into a readable and useful document. Omar and James will work on this task between weeks 3 and 5, as the documentation will be constantly changing while new parts of the code are written.
#### Tutorial
This task details the writing of the user-focused tutorial for the code, and will be managed by James between weeks 3 and 5.