moja-global / Google.Summer.of.Code

This is the space to discuss and develop the ideas put forward under Google's Summer of Code.
Mozilla Public License 2.0
1 stars 1 forks source link

GSoC 2021 - Case studies in module development, ideally the creation of a ‘module repository’. #7

Open Mohitkumar6122 opened 3 years ago

Mohitkumar6122 commented 3 years ago

Hello @moja-global I would like to work on the project labeled under the Documentation Section. The project aims at one or more case studies in module development, ideally the creation of a ‘module repository’., Currently this project is labeled as [D0, P0].

Introduction

I am currently in my 3rd year of graduation in Computer Science and Engineering from the National Institute of Technology Hamirpur, India. Linkedin : Mohit Kumar E-mail: mkay6123@gmail.com

Project

This project aims at Case studies in module development, ideally the creation of a ‘module repository’. Since modules are important in making package installation easier and organize our code into smaller pieces that are easier to manage. the code in the modules can be reloaded and rerun as many times as needed, which enables code reuse. Moreover, I will create a separate repository for the modules section which will include the changes made to modules and also include 'how to create a module' and describing current modules of FLINT.

So this Project will shed light on 'how to develop a module' and will also explain the current 6 modules and newly formed modules, their use and advantages, and users can use these modules according to their requirements to run and contribute to FLINT. Further, I will attempt to develop the module as pip installable and a wiki page for the changes made. Making modules as pip installable will help users to install Flint modules without cloning the repository, and they can install it from their terminal.

I am well versed in Python, C++, and its packages which are required in the development of the modules. I feel that Python is the most suitable language for the development of modules and I have worked on various Python Projects so it is a bit easier for me to learn module development. I have also worked as an open-source contributor for @moja-global and @PublicLab which both are environment caring organizations. I also worked on the documentation and visualization tool at moja-global. This Project will not increase my knowledge regarding module development, FLINT, and climate change but will also boost my skill set and will gain experience from experienced mentors.

I am already present in the slack workspace and willing and passionate to contribute to this project.

Thanks.

CC: @gmajan @leitchy @aornugent

aornugent commented 3 years ago

Hello @Mohitkumar6122 - thanks for opening an issue! We're excited to see someone interested in working on module development.

A key step in this project will be describing how modules are integrated into FLINT implementations during compilation. Modules are written in C++ (so it's great that you're comfortable in this language).

Another key step would be describing about how modules are distributed. This will probably be a wiki page linking to GitHub repositories. I might have misled you when I suggested that we should look at pip for inspiration - this is something we might work towards in the long term (we don't have a Python interface for FLINT, yet) but I don't think needs to be a deliverable of your project.

What might be helpful though is to think about what a module 'manifest' might look like. Manifests are meta-data used by package managers to describe compatibility (which FLINT versions can be used?) dependency (what inputs are needed?) and configuration requirements (does the module use daily monthly or annual time steps?). These are just examples, but standardising this meta-data today opens the door to automated tools for distribution in the future. cargo has a great example of package manifests for the Rust language.

Lastly, this project should describe the core contribution of each module. This will often be ecological processes (like tree growth or soil carbon) and you could ask @shubhamkarande13 or @waridrox for help here. Some modules extend the core FLINT functionality to include things like projections and uncertainty analysis. I can help you with these.

Could you please collate a list of modules that should go into our repository? We can add to them as the proposal develops. Many thanks!

Mohitkumar6122 commented 3 years ago

Thanks a lot, @aornugent for guiding me, As, regarding C++, I am familiar and compatible with it. And for the modules, I am currently discussing it with @shubhamkarande13 and reading wiki-related with it and I came up with the following modules which are present in FLINT that we should include into our repository

  1. Empirical forest growth module
  2. Hybrid forest growth module
  3. WOFOST crop growth module
  4. Turnover module
  5. Decomposition module
  6. RothC soil carbon module

I assume that you are talking about these modules, Please correct me if I made any mistake...!. One more thing, If possible could you please tell me resources to get familiar with modules Thanks.

aornugent commented 3 years ago

Excellent, that's a good list to start with. You should also look at: https://github.com/moja-global/FLINT.Module.To_Be_Desgined_Modules/issues for suggestions of other modules to work on. @RobboW and @GeoffRoberts might be able to advise which would to start on.

To better understand how modules are implemented, I would compare the FLINT.example and FLINT.Chapman-Richards and try to identify how the simple example has been extended into a more complex model of forest growth.

RobboW commented 3 years ago

great to see you looking at this. There are a lot of potential modules here to get working on... A really intersting one will be the fire related modules. These can vary form simple to complex as they themselves will interact with lots of other modules. But looking to implement some simple methods as applied in savanna buring could be a real opportunity.