From b41146cda5d062ed1702e827d2eb07a3ecc6e772 Mon Sep 17 00:00:00 2001
From: Tucker Siegel <tgsiegel@umd.edu>
Date: Wed, 1 Dec 2021 14:52:25 -0500
Subject: [PATCH] upgrade to add maturity

---
 Dockerfile.dev                              |    9 +
 Dockerfile.prod                             |    8 +
 controllers/maturity_controller.go          |   68 ++
 controllers/routes.go                       |    5 +-
 controllers/seed_controllers.go             |   66 +-
 docs/docs.go                                |  168 ++-
 docs/swagger.json                           |  166 ++-
 docs/swagger.yaml                           |  127 +-
 go.mod                                      |    2 +
 go.sum                                      |    5 +
 lib/__pycache__/mz.cpython-37.pyc           |  Bin 0 -> 449 bytes
 lib/maize/DSSAT.INP                         |  111 ++
 lib/maize/MZCER047.CUL                      |  245 ++++
 lib/maize/MZCER047.ECO                      |   29 +
 lib/maize/MZCER047.SPE                      |   87 ++
 lib/maize/execute.py                        |  243 ++++
 lib/maize/mz.cpython-38-x86_64-linux-gnu.so |  Bin 0 -> 238632 bytes
 lib/maize/mz.f                              | 1209 +++++++++++++++++++
 lib/maize/mz.o                              |  Bin 0 -> 36752 bytes
 models/maturity.go                          |  114 ++
 models/seeds.go                             |   91 +-
 persistence/entities/gdd.go                 |    3 +
 persistence/entities/maturity.go            |   13 +
 persistence/mongodb.go                      |   51 +-
 services/maturity_service.go                |  147 +++
 services/seed_service.go                    |  116 +-
 26 files changed, 2869 insertions(+), 214 deletions(-)
 create mode 100644 controllers/maturity_controller.go
 create mode 100644 lib/__pycache__/mz.cpython-37.pyc
 create mode 100644 lib/maize/DSSAT.INP
 create mode 100644 lib/maize/MZCER047.CUL
 create mode 100644 lib/maize/MZCER047.ECO
 create mode 100644 lib/maize/MZCER047.SPE
 create mode 100644 lib/maize/execute.py
 create mode 100644 lib/maize/mz.cpython-38-x86_64-linux-gnu.so
 create mode 100644 lib/maize/mz.f
 create mode 100644 lib/maize/mz.o
 create mode 100644 models/maturity.go
 create mode 100644 persistence/entities/maturity.go
 create mode 100644 services/maturity_service.go

diff --git a/Dockerfile.dev b/Dockerfile.dev
index 88679e4..1a22f56 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -1,9 +1,18 @@
 FROM dawn/dawn-cli as base
 
+
 RUN mkdir /app
 ADD . /app
 WORKDIR /app
 
+RUN apt-get update && apt-get install -y python3 python3-dev python3-pip gfortran
+RUN pip3 install numpy 
+
+WORKDIR /app/lib/maize 
+RUN f2py mz.f -c -m mz 
+
+WORKDIR /app 
+
 RUN go get -u gitlab.cs.umd.edu/dawn/dawn-go-common
 
 RUN go mod tidy
diff --git a/Dockerfile.prod b/Dockerfile.prod
index 5c955de..f2a6336 100644
--- a/Dockerfile.prod
+++ b/Dockerfile.prod
@@ -4,6 +4,14 @@ RUN mkdir /app
 ADD . /app
 WORKDIR /app
 
+RUN apt-get update && apt-get install -y python3.9 python3.9-dev
+RUN pip install numpy 
+
+WORKDIR /app/lib/maize 
+RUN f2py mz.f -c -m mz 
+
+WORKDIR /app 
+
 RUN go get gitlab.cs.umd.edu/dawn/dawn-go-common
 
 RUN curl -LJ -o swag.tar.gz https://github.com/swaggo/swag/releases/download/v1.7.4/swag_1.7.4_Linux_x86_64.tar.gz
diff --git a/controllers/maturity_controller.go b/controllers/maturity_controller.go
new file mode 100644
index 0000000..c541c61
--- /dev/null
+++ b/controllers/maturity_controller.go
@@ -0,0 +1,68 @@
+package controllers
+
+import (
+	"github.com/gofiber/fiber/v2"
+	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/services"
+)
+
+type MaturityRequest struct {
+	PlantDate int       `json:"plantdate"`
+	Tmins     []float32 `json:"tmins"`
+	Tmaxs     []float32 `json:"tmaxs"`
+	Srads     []float32 `json:"srads"`
+	Rains     []float32 `json:"rains"`
+	Units     string    `json:"units"`
+}
+
+type ResponseTest struct {
+	Date int `json:"date"`
+}
+
+// GetCultivars godoc
+// @Summary Get all generic corn cultivars
+// @Tags Maturity
+// @Description Get all generic corn cultivars
+// @Accept  json
+// @Produce  json
+// @Success 200 {object} models.CultivarResponse
+// @Failure 400 {object} common.StandardError
+// @Param name query string false "Name of cultivar to get"
+// @Router /gdd/maturity/corn/cultivars [get]
+func GetCultivars(c *fiber.Ctx) error {
+	ctx := common.DawnCtx{FiberCtx: c}
+	request := models.CultivarRequest{
+		Name: c.Query("name", ""),
+	}
+	return c.Status(fiber.StatusOK).JSON(services.GetCultivars(ctx, request))
+}
+
+// GetMaturity godoc
+// @Summary Get expected maturity date
+// @Tags Maturity
+// @Description Get expected maturity date
+// @Accept  json
+// @Produce  json
+// @Success 200 {object} models.CultivarResponse
+// @Failure 400 {object} common.StandardError
+// @Param latitude query number true "Latitude to search for"
+// @Param longitude query number true "Longitude to search for"
+// @Param plant_month query number true "Platning month"
+// @Param plant_date query number true "Platning date"
+// @Param var_name query string true "Name of cultivar"
+// @Param var_num query string true "ID# of cultivar"
+// @Param eco_num query string true "Eco# of cultivar"
+// @Param p1 query number true "P1 value of cultivar"
+// @Param p2 query number true "P2 value of cultivar"
+// @Param p5 query number true "P5 value of cultivar"
+// @Param g2 query number true "G2 value of cultivar"
+// @Param g3 query number true "G3 value of cultivar"
+// @Param phint query number true "PHINT value of cultivar"
+// @Router /gdd/maturity/corn [get]
+func GetMaturity(c *fiber.Ctx) error {
+	ctx := common.DawnCtx{FiberCtx: c}
+	request := models.BuildCornMaturityRequest(ctx)
+	return c.Status(fiber.StatusOK).JSON(services.CalculateMaturity(ctx, request))
+
+}
diff --git a/controllers/routes.go b/controllers/routes.go
index 727996d..010a2b5 100644
--- a/controllers/routes.go
+++ b/controllers/routes.go
@@ -16,6 +16,7 @@ func GddRoutes(route fiber.Router) {
 
 	route.Get("gdd/csv", GetCSVFile)
 
-	route.Get("gdd/maturity/corn", GetCornSeedMaturityDate)
-	route.Get("gdd/seeds", GetSeedList)
+	route.Get("gdd/maturity/corn", GetMaturity)
+	route.Get("gdd/maturity/corn/cultivars", GetCultivars)
+	// route.Get("gdd/seeds", GetSeedList)
 }
diff --git a/controllers/seed_controllers.go b/controllers/seed_controllers.go
index c3ac845..d9dc4d4 100644
--- a/controllers/seed_controllers.go
+++ b/controllers/seed_controllers.go
@@ -1,38 +1,38 @@
 package controllers
 
-import (
-	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/services"
+// import (
+// 	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/services"
 
-	"github.com/gofiber/fiber/v2"
-)
+// 	"github.com/gofiber/fiber/v2"
+// )
 
-func GetSeedList(c *fiber.Ctx) error {
-	request := models.SeedListRequest{Product: c.Query("product")}
-	return c.Status(fiber.StatusOK).JSON(
-		services.GetSeedList(c, request),
-	)
-}
+// func GetSeedList(c *fiber.Ctx) error {
+// 	request := models.SeedListRequest{Product: c.Query("product")}
+// 	return c.Status(fiber.StatusOK).JSON(
+// 		services.GetSeedList(c, request),
+// 	)
+// }
 
-// GetCornSeedMaturityDate godoc
-// @Summary Get estimated maturity date from given gdd (uses CFS data if current GDUs are less than the crop maturity)
-// @Tags GDD Maturity Data
-// @Description Get estimated maturity date from given gdd
-// @Accept  json
-// @Produce  json
-// @Success 200 {object} models.CornMaturityResponse
-// @Failure 400 {object} common.StandardError
-// @Param latitude query number true "Latitude to search for"
-// @Param longitude query number true "Longitude to search for"
-// @Param gdds query number true "number of gdds given"
-// @Param month query number true "month planted"
-// @Param date query number true "date planted"
-// @Router /gdd/maturity/corn [get]
-func GetCornSeedMaturityDate(c *fiber.Ctx) error {
-	ctx := common.DawnCtx{FiberCtx: c}
-	request := models.BuildCornMaturityRequest(c)
-	return c.Status(fiber.StatusOK).JSON(
-		services.GetCornMaturityDate(ctx, request),
-	)
-}
+// // GetCornSeedMaturityDate godoc
+// // @Summary Get estimated maturity date from given gdd (uses CFS data if current GDUs are less than the crop maturity)
+// // @Tags GDD Maturity Data
+// // @Description Get estimated maturity date from given gdd
+// // @Accept  json
+// // @Produce  json
+// // @Success 200 {object} models.CornMaturityResponse
+// // @Failure 400 {object} common.StandardError
+// // @Param latitude query number true "Latitude to search for"
+// // @Param longitude query number true "Longitude to search for"
+// // @Param gdds query number true "number of gdds given"
+// // @Param month query number true "month planted"
+// // @Param date query number true "date planted"
+// // @Router /gdd/maturity/corn [get]
+// func GetCornSeedMaturityDate(c *fiber.Ctx) error {
+// 	ctx := common.DawnCtx{FiberCtx: c}
+// 	request := models.BuildCornMaturityRequest(c)
+// 	return c.Status(fiber.StatusOK).JSON(
+// 		services.GetCornMaturityDate(ctx, request),
+// 	)
+// }
diff --git a/docs/docs.go b/docs/docs.go
index 2d3b55d..bb29808 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -235,6 +235,22 @@ var doc = `{
                         "in": "query",
                         "required": true
                     },
+                    {
+                        "enum": [
+                            80,
+                            85,
+                            90,
+                            95,
+                            99,
+                            99.5,
+                            99.9
+                        ],
+                        "type": "number",
+                        "description": "Interval values",
+                        "name": "Interval",
+                        "in": "query",
+                        "required": true
+                    },
                     {
                         "type": "number",
                         "description": "Latitude to search for",
@@ -583,7 +599,7 @@ var doc = `{
         },
         "/gdd/maturity/corn": {
             "get": {
-                "description": "Get estimated maturity date from given gdd",
+                "description": "Get expected maturity date",
                 "consumes": [
                     "application/json"
                 ],
@@ -591,9 +607,9 @@ var doc = `{
                     "application/json"
                 ],
                 "tags": [
-                    "GDD Maturity Data"
+                    "Maturity"
                 ],
-                "summary": "Get estimated maturity date from given gdd (uses CFS data if current GDUs are less than the crop maturity)",
+                "summary": "Get expected maturity date",
                 "parameters": [
                     {
                         "type": "number",
@@ -611,22 +627,78 @@ var doc = `{
                     },
                     {
                         "type": "number",
-                        "description": "number of gdds given",
-                        "name": "gdds",
+                        "description": "Platning month",
+                        "name": "plant_month",
                         "in": "query",
                         "required": true
                     },
                     {
                         "type": "number",
-                        "description": "month planted",
-                        "name": "month",
+                        "description": "Platning date",
+                        "name": "plant_date",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "Name of cultivar",
+                        "name": "var_name",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "ID# of cultivar",
+                        "name": "var_num",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "Eco# of cultivar",
+                        "name": "eco_num",
                         "in": "query",
                         "required": true
                     },
                     {
                         "type": "number",
-                        "description": "date planted",
-                        "name": "date",
+                        "description": "P1 value of cultivar",
+                        "name": "p1",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "P2 value of cultivar",
+                        "name": "p2",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "P5 value of cultivar",
+                        "name": "p5",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "G2 value of cultivar",
+                        "name": "g2",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "G3 value of cultivar",
+                        "name": "g3",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "PHINT value of cultivar",
+                        "name": "phint",
                         "in": "query",
                         "required": true
                     }
@@ -635,7 +707,44 @@ var doc = `{
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/models.CornMaturityResponse"
+                            "$ref": "#/definitions/models.CultivarResponse"
+                        }
+                    },
+                    "400": {
+                        "description": "Bad Request",
+                        "schema": {
+                            "$ref": "#/definitions/common.StandardError"
+                        }
+                    }
+                }
+            }
+        },
+        "/gdd/maturity/corn/cultivars": {
+            "get": {
+                "description": "Get all generic corn cultivars",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Maturity"
+                ],
+                "summary": "Get all generic corn cultivars",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "Name of cultivar to get",
+                        "name": "name",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.CultivarResponse"
                         }
                     },
                     "400": {
@@ -816,23 +925,46 @@ var doc = `{
                 }
             }
         },
-        "models.CornMaturityResponse": {
+        "models.Cultivar": {
             "type": "object",
             "properties": {
-                "closest_gdd": {
+                "eco_num": {
+                    "type": "string"
+                },
+                "g2": {
                     "type": "number"
                 },
-                "closest_latitude": {
+                "g3": {
                     "type": "number"
                 },
-                "closest_longitude": {
+                "p1": {
                     "type": "number"
                 },
-                "date": {
-                    "type": "string"
+                "p2": {
+                    "type": "number"
+                },
+                "p5": {
+                    "type": "number"
                 },
-                "gdd": {
+                "phint": {
                     "type": "number"
+                },
+                "var_name": {
+                    "type": "string"
+                },
+                "var_num": {
+                    "type": "string"
+                }
+            }
+        },
+        "models.CultivarResponse": {
+            "type": "object",
+            "properties": {
+                "cultivars": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.Cultivar"
+                    }
                 }
             }
         },
@@ -988,5 +1120,5 @@ func (s *s) ReadDoc() string {
 }
 
 func init() {
-	swag.Register(swag.Name, &s{})
+	swag.Register("swagger", &s{})
 }
diff --git a/docs/swagger.json b/docs/swagger.json
index c124f4e..1b8b582 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -218,6 +218,22 @@
                         "in": "query",
                         "required": true
                     },
+                    {
+                        "enum": [
+                            80,
+                            85,
+                            90,
+                            95,
+                            99,
+                            99.5,
+                            99.9
+                        ],
+                        "type": "number",
+                        "description": "Interval values",
+                        "name": "Interval",
+                        "in": "query",
+                        "required": true
+                    },
                     {
                         "type": "number",
                         "description": "Latitude to search for",
@@ -566,7 +582,7 @@
         },
         "/gdd/maturity/corn": {
             "get": {
-                "description": "Get estimated maturity date from given gdd",
+                "description": "Get expected maturity date",
                 "consumes": [
                     "application/json"
                 ],
@@ -574,9 +590,9 @@
                     "application/json"
                 ],
                 "tags": [
-                    "GDD Maturity Data"
+                    "Maturity"
                 ],
-                "summary": "Get estimated maturity date from given gdd (uses CFS data if current GDUs are less than the crop maturity)",
+                "summary": "Get expected maturity date",
                 "parameters": [
                     {
                         "type": "number",
@@ -594,22 +610,78 @@
                     },
                     {
                         "type": "number",
-                        "description": "number of gdds given",
-                        "name": "gdds",
+                        "description": "Platning month",
+                        "name": "plant_month",
                         "in": "query",
                         "required": true
                     },
                     {
                         "type": "number",
-                        "description": "month planted",
-                        "name": "month",
+                        "description": "Platning date",
+                        "name": "plant_date",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "Name of cultivar",
+                        "name": "var_name",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "ID# of cultivar",
+                        "name": "var_num",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "Eco# of cultivar",
+                        "name": "eco_num",
                         "in": "query",
                         "required": true
                     },
                     {
                         "type": "number",
-                        "description": "date planted",
-                        "name": "date",
+                        "description": "P1 value of cultivar",
+                        "name": "p1",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "P2 value of cultivar",
+                        "name": "p2",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "P5 value of cultivar",
+                        "name": "p5",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "G2 value of cultivar",
+                        "name": "g2",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "G3 value of cultivar",
+                        "name": "g3",
+                        "in": "query",
+                        "required": true
+                    },
+                    {
+                        "type": "number",
+                        "description": "PHINT value of cultivar",
+                        "name": "phint",
                         "in": "query",
                         "required": true
                     }
@@ -618,7 +690,44 @@
                     "200": {
                         "description": "OK",
                         "schema": {
-                            "$ref": "#/definitions/models.CornMaturityResponse"
+                            "$ref": "#/definitions/models.CultivarResponse"
+                        }
+                    },
+                    "400": {
+                        "description": "Bad Request",
+                        "schema": {
+                            "$ref": "#/definitions/common.StandardError"
+                        }
+                    }
+                }
+            }
+        },
+        "/gdd/maturity/corn/cultivars": {
+            "get": {
+                "description": "Get all generic corn cultivars",
+                "consumes": [
+                    "application/json"
+                ],
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "Maturity"
+                ],
+                "summary": "Get all generic corn cultivars",
+                "parameters": [
+                    {
+                        "type": "string",
+                        "description": "Name of cultivar to get",
+                        "name": "name",
+                        "in": "query"
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/models.CultivarResponse"
                         }
                     },
                     "400": {
@@ -799,23 +908,46 @@
                 }
             }
         },
-        "models.CornMaturityResponse": {
+        "models.Cultivar": {
             "type": "object",
             "properties": {
-                "closest_gdd": {
+                "eco_num": {
+                    "type": "string"
+                },
+                "g2": {
                     "type": "number"
                 },
-                "closest_latitude": {
+                "g3": {
                     "type": "number"
                 },
-                "closest_longitude": {
+                "p1": {
                     "type": "number"
                 },
-                "date": {
-                    "type": "string"
+                "p2": {
+                    "type": "number"
+                },
+                "p5": {
+                    "type": "number"
                 },
-                "gdd": {
+                "phint": {
                     "type": "number"
+                },
+                "var_name": {
+                    "type": "string"
+                },
+                "var_num": {
+                    "type": "string"
+                }
+            }
+        },
+        "models.CultivarResponse": {
+            "type": "object",
+            "properties": {
+                "cultivars": {
+                    "type": "array",
+                    "items": {
+                        "$ref": "#/definitions/models.Cultivar"
+                    }
                 }
             }
         },
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index b9e54da..497d78f 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -59,18 +59,33 @@ definitions:
           type: number
         type: array
     type: object
-  models.CornMaturityResponse:
+  models.Cultivar:
     properties:
-      closest_gdd:
+      eco_num:
+        type: string
+      g2:
         type: number
-      closest_latitude:
+      g3:
         type: number
-      closest_longitude:
+      p1:
         type: number
-      date:
-        type: string
-      gdd:
+      p2:
         type: number
+      p5:
+        type: number
+      phint:
+        type: number
+      var_name:
+        type: string
+      var_num:
+        type: string
+    type: object
+  models.CultivarResponse:
+    properties:
+      cultivars:
+        items:
+          $ref: '#/definitions/models.Cultivar'
+        type: array
     type: object
   models.FreezingDateResponse:
     properties:
@@ -289,6 +304,19 @@ paths:
         name: product
         required: true
         type: string
+      - description: Interval values
+        enum:
+        - 80
+        - 85
+        - 90
+        - 95
+        - 99
+        - 99.5
+        - 99.9
+        in: query
+        name: Interval
+        required: true
+        type: number
       - description: Latitude to search for
         in: query
         name: latitude
@@ -542,7 +570,7 @@ paths:
     get:
       consumes:
       - application/json
-      description: Get estimated maturity date from given gdd
+      description: Get expected maturity date
       parameters:
       - description: Latitude to search for
         in: query
@@ -554,36 +582,99 @@ paths:
         name: longitude
         required: true
         type: number
-      - description: number of gdds given
+      - description: Platning month
+        in: query
+        name: plant_month
+        required: true
+        type: number
+      - description: Platning date
         in: query
-        name: gdds
+        name: plant_date
         required: true
         type: number
-      - description: month planted
+      - description: Name of cultivar
+        in: query
+        name: var_name
+        required: true
+        type: string
+      - description: ID# of cultivar
         in: query
-        name: month
+        name: var_num
+        required: true
+        type: string
+      - description: Eco# of cultivar
+        in: query
+        name: eco_num
+        required: true
+        type: string
+      - description: P1 value of cultivar
+        in: query
+        name: p1
         required: true
         type: number
-      - description: date planted
+      - description: P2 value of cultivar
         in: query
-        name: date
+        name: p2
         required: true
         type: number
+      - description: P5 value of cultivar
+        in: query
+        name: p5
+        required: true
+        type: number
+      - description: G2 value of cultivar
+        in: query
+        name: g2
+        required: true
+        type: number
+      - description: G3 value of cultivar
+        in: query
+        name: g3
+        required: true
+        type: number
+      - description: PHINT value of cultivar
+        in: query
+        name: phint
+        required: true
+        type: number
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/models.CultivarResponse'
+        "400":
+          description: Bad Request
+          schema:
+            $ref: '#/definitions/common.StandardError'
+      summary: Get expected maturity date
+      tags:
+      - Maturity
+  /gdd/maturity/corn/cultivars:
+    get:
+      consumes:
+      - application/json
+      description: Get all generic corn cultivars
+      parameters:
+      - description: Name of cultivar to get
+        in: query
+        name: name
+        type: string
       produces:
       - application/json
       responses:
         "200":
           description: OK
           schema:
-            $ref: '#/definitions/models.CornMaturityResponse'
+            $ref: '#/definitions/models.CultivarResponse'
         "400":
           description: Bad Request
           schema:
             $ref: '#/definitions/common.StandardError'
-      summary: Get estimated maturity date from given gdd (uses CFS data if current
-        GDUs are less than the crop maturity)
+      summary: Get all generic corn cultivars
       tags:
-      - GDD Maturity Data
+      - Maturity
   /gdd/normals:
     get:
       consumes:
diff --git a/go.mod b/go.mod
index d5e0e03..b85d374 100644
--- a/go.mod
+++ b/go.mod
@@ -3,6 +3,8 @@ module gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd
 go 1.16
 
 require (
+	github.com/DataDog/go-python3 v0.0.0-20211102160307-40adc605f1fe // indirect
+	github.com/Konstantin8105/f4go v0.0.0-20211017110926-3b02a09b3573 // indirect
 	github.com/andybalholm/brotli v1.0.3 // indirect
 	github.com/ansrivas/fiberprometheus/v2 v2.1.2
 	github.com/arsmn/fiber-swagger/v2 v2.15.0
diff --git a/go.sum b/go.sum
index 066b7fc..a2bfdc2 100644
--- a/go.sum
+++ b/go.sum
@@ -44,7 +44,11 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DataDog/go-python3 v0.0.0-20211102160307-40adc605f1fe h1:bNMi0HArOQY4899TKLi4RP7g9BZ2kwLOiVpoJHWxyFs=
+github.com/DataDog/go-python3 v0.0.0-20211102160307-40adc605f1fe/go.mod h1:7ctnOCLiUlwKO9GvAjusUF68edSbiHqC18gVPQF0ojA=
 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
+github.com/Konstantin8105/f4go v0.0.0-20211017110926-3b02a09b3573 h1:brai4FFFTuoeMW97HzZMR5sKSporPtYLvYMl+naNQrI=
+github.com/Konstantin8105/f4go v0.0.0-20211017110926-3b02a09b3573/go.mod h1:vZxW3sVrJfWNzLsO8EYioT8eWMzkdOVu8AqFqj+IWhs=
 github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
 github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
@@ -89,6 +93,7 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bradfitz/slice v0.0.0-20180809154707-2b758aa73013 h1:/P9/RL0xgWE+ehnCUUN5h3RpG3dmoMCOONO1CCvq23Y=
 github.com/bradfitz/slice v0.0.0-20180809154707-2b758aa73013/go.mod h1:pccXHIvs3TV/TUqSNyEvF99sxjX2r4FFRIyw6TZY9+w=
+github.com/bradleyjkemp/cupaloy v2.3.0+incompatible/go.mod h1:Au1Xw1sgaJ5iSFktEhYsS0dbQiS1B0/XMXl+42y9Ilk=
 github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
 github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
diff --git a/lib/__pycache__/mz.cpython-37.pyc b/lib/__pycache__/mz.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..4a6fd888b05ecc6b7d837d93e3963bc71aae9e45
GIT binary patch
literal 449
zcmYLEu};G<5Ix&z8>(brV`Za5>H$<$0-*|+7`gyU7R!lEiJHWbortz8d`LSm@Jm^l
z_ys2HpwhGM-Me?EyYo#L4#C=P_QB5(z?Vz*=2<ecZtg7z5a=B^2rNjBV$?+(<1Uhz
zNWArAPk1}b`-1R60?9y<tuK3Ze}@s&@CFD3d4N$bwe$YXZiQRx#;p@z>uCN7+Q|p_
zxuiu|)093LsSSN>(xue&PMT${Dk}JENfU0hQglhQ5Q64eLW|9~TDKu%iBh$xHLn<R
zlMS{2NE3_Sj?Ooywl}TT^@}Q_^J%o2PT1rk%CoXrMT@c-8#OxW`debwCJw9Rf@x_~
zqf=>Ok`+~aywBNlmdlbCvh^8rkuk@dYT1ynTyY^aV{zaZ6KmU)rHB9iF?VF^UlmF;
TxxDV~4y@$k6BHoNz5x9KLhx<7

literal 0
HcmV?d00001

diff --git a/lib/maize/DSSAT.INP b/lib/maize/DSSAT.INP
new file mode 100644
index 0000000..d766513
--- /dev/null
+++ b/lib/maize/DSSAT.INP
@@ -0,0 +1,111 @@
+*MODEL INPUT FILE            A     8     1     8     8     0
+*FILES              
+MODEL          MZCER047
+FILEX          nml                                                                                          
+FILEA          nml     .  A                                                                                 
+FILET          nml     .  T                                                                                 
+SPECIES        MZCER047.SPE                                                                                 
+ECOTYPE        MZCER047.ECO                                                                                 
+CULTIVAR       MZCER047.CUL                                                                                 
+PESTS          MZCER047.PST ///glade/u/home/sunchao/model/dssat-csm-os/bin/Pest/                            
+SOILS          SOIL.SOL                                                                                     
+WEATHERW       UFGA8201.WTH                                                                                 
+OUTPUT         OVERVIEW
+*SIMULATION CONTROL 
+                   1     1     S 1982056  2150 N X IRRIGATION, GAINESVI 
+                   Y     Y     N     N     N     N     N     Y     M
+                   M     M     E     R     S     R     R     1     G     S     2     D     0
+                   R     R     R     N     M
+                   N     Y     Y     1     Y     N     Y     Y     N     N     Y     N     N
+!AUTOMATIC MANAGEM  
+                   -99     -99   40.  100.   30.   40.   10.
+                 30.   50.  100. GS000 IR001  10.0 1.000
+                 30.   50.   25. FE001 GS000
+                100.     1   20.
+                     0     -99  100.    0.
+*EXP.DETAILS        
+  1nml         NIT X IRR, GAINESVILLE 2N*3I                                
+*TREATMENTS         
+  8 1 0 0 IRRIGATED HIGH NITROGENl 
+*CULTIVARS          
+   MZ IB0006 McCurdy 84aa    
+*FIELDS             
+   UFGA0002 UFGA8201   0.0    0. DR000    0. 100.0 00000 -99    180. IBMZ910014
+          29.63000       -82.37000     40.00               1.0  100.   1.0   0.0   -99   -99
+*INITIAL CONDITIONS 
+   MZ    1982156   100     0  1.00  1.00   0.0  1000  0.80  0.00  100.   15.
+      5. 0.086 0.500 0.100
+     15. 0.086 0.500 0.100
+     30. 0.086 0.500 0.100
+     45. 0.086 0.500 0.100
+     60. 0.086 0.500 0.100
+     90. 0.076 0.600 0.100
+    120. 0.076 0.500 0.100
+    150. 0.130 0.500 0.100
+    180. 0.258 0.500 0.100
+*PLANTING DETAILS   
+   1982157     -99   7.2   7.2     S     R   61.    0.   7.0  -99.  -99. -99.0 -99.0   0.0
+*IRRIGATION         
+   1.000   30.   75.  -99. GS000 IR001   0.0
+   1982063 IR001  13.0
+   1982077 IR001  10.0
+   1982094 IR001  10.0
+   1982107 IR001  13.0
+   1982111 IR001  18.0
+   1982122 IR001  25.0
+   1982126 IR001  25.0
+   1982129 IR001  13.0
+   1982132 IR001  15.0
+   1982134 IR001  19.0
+   1982137 IR001  20.0
+   1982141 IR001  20.0
+   1982148 IR001  15.0
+   1982158 IR001  19.0
+   1982161 IR001   4.0
+   1982162 IR001  25.0
+*FERTILIZERS        
+   1982074 FE001 AP001   10.   56.    0.    0.    0.    0.   -99
+   1982089 FE001 AP001   10.   52.    0.    0.    0.    0.   -99
+   1982102 FE001 AP001   10.   75.    0.    0.    0.    0.   -99
+   1982118 FE001 AP001   10.   37.    0.    0.    0.    0.   -99
+   1982127 FE001 AP001   10.   55.    0.    0.    0.    0.   -99
+   1982137 FE001 AP001   10.  126.    0.    0.    0.    0.   -99
+*RESIDUES           
+*CHEMICALS          
+*TILLAGE            
+*ENVIRONMENT        
+*HARVEST            
+*SOIL               
+ IBMZ910014  Gainesville -99    180. Millhopper Fine Sand                              
+ Gainesville USA          29.630 -82.370 Loamy,silic,hyperth Arenic Paleudult              
+ -99    0.18   2.0  0.65   60.  1.00  0.92 IB001 IB001 IB001 -99  
+    5.       0.026 0.096 0.230 1.000  -99.  1.30 2.000 -99.0 -99.0 -99.0  -9.0  7.00-99.00 20.00-99.00
+   15.       0.025 0.086 0.230 1.000  -99.  1.30 1.000 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+   30.       0.025 0.086 0.230 0.700  -99.  1.40 1.000 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+   45.       0.025 0.086 0.230 0.300  -99.  1.40 0.500 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+   60.       0.025 0.086 0.230 0.300  -99.  1.40 0.500 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+   90.       0.028 0.090 0.230 0.050  -99.  1.45 0.100 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+  120.       0.028 0.090 0.230 0.030  -99.  1.45 0.100 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+  150.       0.029 0.130 0.230 0.002  -99.  1.45 0.040 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+  180.       0.070 0.258 0.360 0.000  -99.  1.20 0.240 -99.0 -99.0 -99.0  -9.0  7.00-99.00-99.00-99.00
+                    
+    5.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+   15.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+   30.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+   45.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+   60.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+   90.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+  120.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+  150.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+  180.-99.00 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0 -99.0-99.00 -99.0 -99.0 -99.0 -99.0 -99.0  -99.
+                    
+    5.-99.00-99.00-99.00-99.00
+   15.-99.00-99.00-99.00-99.00
+   30.-99.00-99.00-99.00-99.00
+   45.-99.00-99.00-99.00-99.00
+   60.-99.00-99.00-99.00-99.00
+   90.-99.00-99.00-99.00-99.00
+  120.-99.00-99.00-99.00-99.00
+  150.-99.00-99.00-99.00-99.00
+  180.-99.00-99.00-99.00-99.00
+*CULTIVAR           
diff --git a/lib/maize/MZCER047.CUL b/lib/maize/MZCER047.CUL
new file mode 100644
index 0000000..7c65e59
--- /dev/null
+++ b/lib/maize/MZCER047.CUL
@@ -0,0 +1,245 @@
+*MAIZE CULTIVAR COEFFICIENTS: MZCER047 MODEL
+!
+!The P1 values for the varieties used in experiments IBWA8301 and
+!UFGA8201 were recalibrated to obtain a better fit for version 3
+!of the model. After converting from 2.1 to 3.0 the varieties
+!IB0035, IB0060, and IB0063 showed an earlier simulated flowering
+!date. To correct this, the P1 values were recalibrated.
+!The reason for this is that there was an error in PHASEI in
+!version 2.1 that had TLNO=IFIX(CUMDTT/21.+6.) rather than
+!TLNO=IFIX(SUMDTT/21.+6.); see p. 74 of Jones & Kiniry.
+!-Walter Bowen, 22 DEC 1994.
+!
+!All G2 values were increased by a factor of 1.1 for Ritchie's
+!change to RUE -Walter, 28 DEC 1994
+!
+! COEFF       DEFINITIONS
+! ========    ===========
+! VAR#        Identification code or number for a specific cultivar
+! VAR-NAME    Name of cultivar
+! EXPNO       Number of experiments used to estimate cultivar parameters
+! ECO#        Ecotype code of this cultivar, points to the Ecotype in the
+!             ECO file (currently not used).
+! P1          Thermal time from seedling emergence to the end of the juvenile
+!             phase (expressed in degree days above a base temperature of 8 deg.C)
+!             during which the plant is not responsive to changes in
+!             photoperiod.
+! P2          Extent to which development (expressed as days) is delayed for
+!             each hour increase in photoperiod above the longest photoperiod
+!             at which development proceeds at a maximum rate (which is
+!             considered to be 12.5 hours).
+! P5          Thermal time from silking to physiological maturity (expressed
+!             in degree days above a base temperature of 8 deg.C).
+! G2          Maximum possible number of kernels per plant.
+! G3          Kernel filling rate during the linear grain filling stage and
+!             under optimum conditions (mg/day).
+! PHINT       Phylochron interval; the interval in thermal time (degree days)
+!             between successive leaf tip appearances.
+!
+! PIO         Pioneer
+! AS          Asgrow (Monsanto)
+! DK          Dekalb (Monsanto)
+! LH          Holden (Monsanto)
+! C/LOL       Land of Lakes
+!
+@VAR#  VRNAME.......... EXPNO   ECO#    P1    P2    P5    G2    G3 PHINT
+!                                        1     2     3     4     5     6
+PC0001 2500-2600 GDD        . IB0001 160.0 0.750 780.0 750.0  8.50 49.00
+PC0002 2600-2650 GDD        . IB0001 185.0 0.750 850.0 800.0  8.50 49.00
+PC0003 2650-2700 GDD        . IB0001 212.0 0.750 850.0 800.0  8.50 49.00
+PC0004 2700-2750 GDD        . IB0001 240.0 0.750 850.0 800.0  8.50 49.00
+PC0005 2750-2800 GDD        . IB0001 260.0 0.750 850.0 800.0  8.50 49.00
+
+990001 LONG SEASON          . IB0001 320.0 0.520 940.0 620.0  6.00 38.90
+990002 MEDIUM SEASON        . IB0001 200.0 0.300 800.0 700.0  8.50 38.90
+990003 SHORT SEASON         . IB0001 110.0 0.300 680.0 820.4  6.60 38.90
+990004 V.SHORT SEASON       . IB0001   5.0 0.300 680.0 820.4  6.60 38.90
+!
+IB0001 CORNL281             . IB0001 110.0 0.300 685.0 907.9  6.60 38.90
+IB0002 CP170                . IB0001 120.0 0.000 685.0 907.9 10.00 38.90
+IB0003 LG11                 . IB0001 125.0 0.000 685.0 907.9 10.00 38.90
+IB0004 F7 X F2              . IB0001 125.0 0.000 685.0 907.9 10.00 38.90
+IB0005 PIO 3995             . IB0001 130.0 0.300 685.0 907.9  8.60 38.90
+IB0006 INRA                 . IB0001 135.0 0.000 685.0 907.9 10.00 38.90
+IB0007 EDO                  . IB0001 135.0 0.300 685.0 907.9 10.40 38.90
+IB0008 A654 X F2            . IB0001 135.0 0.000 685.0 907.9 10.00 38.90
+IB0009 DEKALB XL71          . IB0001 140.0 0.300 685.0 907.9 10.50 38.90
+IB0010 F478 X W705A         . IB0001 140.0 0.000 685.0 907.9 10.00 38.90
+IB0011 DEKALBXL45           . IB0001 150.0 0.400 685.0 907.9 10.15 38.90
+IB0012 PIO 3382             . IB0001 160.0 0.700 950.0 845.0  8.40 38.90  
+IB0013 B59*OH43             . IB0001 162.0 0.800 685.0 862.4  6.90 38.90
+IB0014 F16 X F19            . IB0001 165.0 0.000 685.0 907.9 10.00 38.90
+IB0015 WASHINGTON           . IB0001 165.0 0.400 715.0 825.0 11.00 38.90
+IB0016 B14XOH43             . IB0001 172.0 0.300 685.0 907.9  8.50 38.90
+IB0017 R1*(N32*B14)         . IB0001 172.0 0.800 685.0 907.9 10.15 38.90
+IB0018 B60*R71              . IB0001 172.0 0.800 685.0 781.4  7.70 38.90
+IB0019 WF9*B37              . IB0001 172.0 0.800 685.0 907.9 10.15 38.90
+IB0020 B59*C103             . IB0001 172.0 0.800 685.0 907.9 10.15 38.90
+IB0021 Garst 8702           . IB0001 175.0 0.200 960.0 855.8  6.00 38.90
+IB0022 B14*C103             . IB0001 180.0 0.500 685.0 907.9 10.15 38.90
+IB0023 B14*C131A            . IB0001 180.0 0.500 685.0 907.9 10.15 38.90
+IB0024 PIO 3720             . IB0001 180.0 0.800 685.0 907.9 10.00 38.90
+IB0025 WASH/GRAIN-1         . IB0001 185.0 0.400 775.0 836.0 12.00 38.90
+IB0026 A632 X W117          . IB0001 187.0 0.000 685.0 907.9 10.00 38.90
+IB0027 Garst 8750           . IB0001 190.0 0.200 930.0 891.0  6.30 38.90
+IB0028 TAINAN-11            . IB0001 200.0 0.800 670.0 803.0  6.80 38.90
+IB0029 PIO 3541             . IB0001 200.0 0.300 800.0 770.0  8.50 38.90
+IB0030 PIO 3707             . IB0001 200.0 0.700 800.0 649.0  6.30 38.90
+IB0031 PIO 3475*            . IB0001 200.0 0.700 800.0 797.5  8.60 38.90
+IB0032 PIO 3382*            . IB0001 200.0 0.700 800.0 715.0  8.50 38.90
+IB0033 PIO 3780             . IB0001 200.0 0.760 685.0 660.0  9.60 38.90
+IB0034 PIO 3780*            . IB0001 200.0 0.760 685.0 797.5  9.60 38.90
+IB0035 McCurdy 84aa         . IB0001 265.0 0.300 920.0 920.0  8.00 43.00  
+IB0036 C281                 . IB0001 202.0 0.300 685.0 907.9  5.80 38.90
+IB0037 SWEET CORN           . IB0001 210.0 0.520 625.0 907.5 10.00 38.90
+IB0038 Garst 8555           . IB0001 215.0 0.400 890.0 880.0  9.00 38.90
+IB0039 PIO 3901             . IB0001 215.0 0.760 600.0 616.0  9.00 38.90
+IB0040 B8*153R              . IB0001 218.0 0.300 760.0 632.5  8.80 38.90
+IB0041 Garst 8808           . IB0001 220.0 0.400 780.0 858.0  8.50 38.90
+IB0042 B73 X MO17           . IB0001 220.0 0.520 880.0 803.0 10.00 38.90
+IB0043 PIO 511A             . IB0001 220.0 0.300 685.0 709.5 10.50 38.90
+IB0044 W69A X F546          . IB0001 240.0 0.300 685.0 907.9 10.00 38.90
+IB0045 A632 X VA26          . IB0001 240.0 0.300 685.0 907.9 10.00 38.90
+IB0046 W64A X W117          . IB0001 245.0 0.000 685.0 907.9  8.00 38.90
+IB0047 PIO 3147             . IB0001 255.0 0.760 685.0 917.4 10.00 38.90
+IB0048 WF9*B37              . IB0001 260.0 0.800 710.0 907.9  6.50 38.90
+IB0049 NEB 611              . IB0001 260.0 0.300 720.0 907.5  9.00 38.90
+IB0050 PV82S                . IB0001 260.0 0.500 750.0 660.0  8.50 38.90
+IB0051 PV76S                . IB0001 260.0 0.500 750.0 660.0  8.50 38.90
+IB0052 PIO 3183             . IB0001 260.0 0.500 750.0 660.0  8.50 38.90
+IB0053 CESDA-28             . IB0001 260.0 0.500 669.0 858.0  7.10 38.90
+IB0054 B14*OH43             . IB0001 265.0 0.800 665.0 858.0  6.90 38.90
+IB0055 MCCURDY 6714         . IB0001 265.0 0.300 825.0 907.9  9.80 38.90
+IB0056 FM 6                 . IB0001 276.0 0.520 867.0 677.6 10.70 38.90
+IB0057 TOCORON-3            . IB0001 276.0 0.520 867.0 660.0  8.12 38.90
+IB0058 NC+59                . IB0001 280.0 0.300 750.0 907.5 10.00 38.90
+IB0059 H6                   . IB0001 310.0 0.300 685.0 907.9 10.00 38.90
+IB0060 H610(UH)             . IB0001 365.0 0.520 850.0 680.0  6.50 38.90  
+IB0061 PB 8                 . IB0001 300.0 0.520 990.0 440.0  7.00 38.90
+IB0062 B56*C131A            . IB0001 318.0 0.500 700.0 885.5  6.40 38.90
+IB0063 PIO X 304C           . IB0001 365.0 0.520 920.0 780.0  5.70 38.90  
+IB0064 H.OBREGON            . IB0001 360.0 0.800 685.0 907.9 10.15 38.90
+IB0065 SUWAN-1              . IB0001 380.0 0.600 780.0 825.0  7.00 38.90
+IB0066 PIO 3165             . IB0001 320.0 0.520 940.0 625.0  6.00 38.90
+IB0067 PIO 3324             . IB0001 320.0 0.520 940.0 625.0  6.00 38.90
+IB0068 PIO 3475             . IB0001 200.0 0.700 750.0 907.0  9.00 38.90  
+IB0168 PIO 3475 orig        . IB0001 220.0 0.700 850.0 907.0  9.90 38.90
+IB0069 PIO 3790             . IB0001 212.4 0.520 792.8 625.0  6.00 38.90
+IB0070 CARGILL 111S         . IB0001 290.0 0.500 1035. 580.0  5.50 47.00  
+IB0071 PIO 31G98            . IB0003 165.0 0.750 680.0 820.4  6.60 48.00  
+IB0089 GL 582               . IB0001 200.0 0.700 750.0 750.0  8.60 38.90
+IB0090 GL 482               . IB0001 240.0 0.700 990.0 907.0  8.80 38.90
+IB0091 GL 450               . IB0001 200.0 0.700 850.0 700.0  7.00 38.90
+IB0092 LAURENT 3733         . IB0001 200.0 0.700 680.0 725.0  9.00 38.90  
+IB0093 GL 582 MOD KBS       . IB0001 180.0 0.700 750.0 750.0  8.60 38.90
+IB0099 AGETI76              . IB0001 325.0 2.000 625.0 580.0  7.30 50.00
+IB0100 PARTAP1              . IB0001 450.0 2.000 580.0 600.0 16.50 50.00
+
+IB1051 AS 740               . IB0001 215.0 0.750 850.0 700.0  5.00 48.00
+IB1053 LH198XLH185          . IB0001 205.0 0.750 850.0 731.0  5.00 48.00
+IB0154 PIO 3192             . IB0001 215.0 0.300 990.0 660.0  8.50 48.00   
+IB0155 DEA                  . IB0001 165.0 0.100 476.0 442.0  5.35 40.00   
+
+IB1052 DK 611               . IB0001 260.0 0.100 800.0 980.0  5.70 48.00    
+
+!Brazil cultivars:
+IB0171 AG9010               . IB0001 196.0 0.500 758.0 830.0  5.10 40.00   
+IB0172 DAS CO32             . IB0001 220.0 0.500 747.8 1100.  5.40 45.00   
+IB0173 DKB 333B             . IB0001 250.0 0.500 842.0 920.0  4.80 45.00   
+IB0174 EXCELER              . IB0001 210.0 0.500 770.0 1170.  5.80 45.00   
+
+IB0185 JACKSON HYBRI        . IB0001 200.0 0.300 950.0 980.0  7.15 43.00  
+
+IB1065 PIO 33Y09            . IB0001 245.0 0.500 905.0 780.0  6.00 48.00
+IB1066 PIO 3489             . IB0001 225.0 0.600 895.0 875.0  8.80 48.00
+IB1067 PIO 3394             . IB0001 240.0 0.500 900.0 820.0  8.50 48.00
+IB1069 PIO 3563             . IB0001 216.0 0.600 830.0 860.0  8.80 48.00
+IB1072 DEKALB 485           . IB0001 215.0 0.600 785.0 750.0  8.70 45.00
+IB1068 DEKALB 521           . IB0001 215.0 0.400 795.0 890.0  8.00 48.00
+IB1168 DEKALB 591           . IB0001 225.0 0.400 895.0 880.0  8.00 48.00
+
+LL0499 C/LOL 499            . IB0001 182.0 0.500 650.0 750.0  8.70 46.00
+LL0564 C/LOL 564            . IB0001 210.0 0.500 670.0 880.0 11.25 46.00
+LL0581 C/LOL 581            . IB0001 200.0 0.500 668.0 850.0  8.80 45.00
+LL0599 C/LOL 599            . IB0001 200.0 0.500 670.0 850.0  8.80 45.00
+LL0542 C/LOL 542            . IB0001 185.0 0.500 700.0 835.0  8.70 46.00
+LL0661 C/LOL 661            . IB0001 200.0 0.500 670.0 850.0  9.00 45.00
+LL0674 C/LOL 674            . IB0001 200.0 0.500 670.0 800.0  8.90 45.00
+
+ZA0001 Prisma (FAO 700)     . IB0001 280.0 0.400 850.0 750.0  6.80 38.90
+ZA0002 Prisma GC Avg        . IB0001 280.0 0.300 789.0 700.0  6.05 48.00
+
+IF0001 OBA SUPER 2          . IB0001 270.0 0.600 780.0 840.0  7.80 45.00
+IF0002 EV8728-SR            . IB0001 265.0 0.600 800.0 900.0  7.20 45.00
+IF0003 Mokwa 87TZPB-SR      . IB0001 305.0 0.600 765.0 810.0  8.00 45.00
+IF0004 SPL (semi-prol)      . IB0001 270.0 0.600 740.0 920.0  7.40 41.00
+IF0005 TZB-SR (open p)      . IB0001 290.0 0.600 775.0 990.0  6.80 45.00
+IF0006 EV 8449-SR           . IB0001 385.0 0.600 860.0 700.0  8.00 50.00
+IF0007 EV 8449-SRx          . IB0001 385.0 0.600 860.0 945.4  7.20 50.00
+IF0008 AG-KADUNA            . IB0001 220.0 0.600 780.0 845.0  8.00 40.00
+IF0009 OBA S2 Benin         . IB0001 170.0 0.600 760.0 800.0  8.00 50.00
+IF0010 EV-8449_TG           . IB0001 260.0 0.600 630.0 900.0  9.00 45.00
+IF0011 EV-8443_TG           . IB0001 300.0 0.600 850.0 850.0  8.80 45.00
+
+AC0001 TOHONO O'odham       . IB0001 200.0 0.100 610.0 248.0  9.80 38.90 !Michael Pool, Austin Comm College
+
+! Vietnam sequencing
+VI0001 LVN 10               . IB0001 350.0 1.000 980.0 760.0  9.20 38.90
+
+!Coefficients calibrated by Jones and Boote in Mali
+IM0001 SOTUBAKA             . IB0001 300.0 0.520 930.0 500.0  6.00 38.90
+IM0002 NIELENI              . IB0001 232.0 0.300 688.0 540.0  8.80 38.90
+IM0003 APPOLO               . IB0001 216.0 0.300 530.0 455.0 11.00 38.90
+
+!Coefficients calibrated by Dzotsi and Singh in Togo, 2002.
+IF0018 TZE C0MP4C2          . IB0001 210.0 0.100 660.0 850.0  9.70 55.00
+IF0019 TZESRW X GUA 314     . IB0001 170.0 0.100 660.0 780.0  8.00 55.00
+IF0020 AB-11-TG             . IB0001 250.0 0.100 620.0 920.0  8.50 55.00
+IF0021 TZEEY-SRBC5          . IB0001 130.0 0.100 600.0 850.0  8.00 55.00
+IF0022 IKENNE               . IB0001 280.0 0.600 630.0 900.0  8.80 45.00
+
+!Alagarswamy
+IB0067 TEST                 . IB0001 130.0 0.500 720.0 380.0  7.50 75.00
+KA0001 H625                 . IB0001 130.0 0.500 720.0 380.0  7.50 75.00
+EM0001 H512                 . IB0001 130.0 0.500 720 0 550.0  7.50 75.00
+KY0001 H622                 . IB0001 358.5 0.500 616.1 550.0  7.20 75.00
+KY0002 H511                 . IB0001 317.6 0.500 530.4 550.0  7.50 75.00
+KY0003 CCOMP                . IB0001 366.2 1.235 611.3 600.0  6.50 75.00
+KY0004 MAKUCOMP             . IB0001 183.6 0.500 611.0 380.0 10.00 75.00
+KY0005 H625                 . IB0001 341.1 0.500 612.0 700.0  8.50 75.00
+KY0006 KCB                  . IB0001 125.0 0.500 500.3 450.0 10.50 75.00
+KY0007 PWANI                . IB0001 182.4 0.500 616.0 720.0 10.50 75.00
+KY0008 H613                 . IB0001 182.4 0.500 616.0 825.0 10.15 75.00
+KY0009 CUZCO                . IB0001 182.4 0.500 616.0 380.0  7.50 75.00
+KY0010 H512                 . IB0001 332.9 0.500 601.6 550.0  7.50 75.00
+KY0011 H614                 . IB0001 396.9 0.500 623.6 825.0 10.15 75.00
+KY0012 H5012                . IB0001 351.7 0.500 859.0 550.0  7.50 75.00
+KY0013 H626                 . IB0001 458.0 0.500 429.0 450.0 10.50 75.00
+KY0014 KATUMANICOMPI        . IB0001 238.6 0.500 654.0 450.0 10.50 75.00
+KY0015 PH 1                 . IB0001 234.5 0.500 429.0 720.0 10.50 75.00
+KY0016 HAC                  . IB0001 245.0 0.500 825.0 750.0 10.50 75.00 
+KY0017 H612                 . IB0001 130.0 0.500 390.0 825.0 10.15 75.00
+KY0018 KATUMANICOMP-II      . IB0001 125.0 0.500 660.0 450.0 10.50 75.00
+
+!J.B.Naab data 2003-2006, re-calibrated by kjb 1/2/12
+GH0010 OBATAMPA             . IB0001 280.0 0.000 750.0 540.0  7.50 40.00
+
+!Four Global Futures maize cultivars (3 life cycle by 2 "yield levels")
+!Composite: same maturity as Garst 8808 and WH403), but G2 and G3 mid-way.
+!Those cultivars seemed most realistic compared with 5 other cultivars calibrated
+!in DSSAT, not too early (Pio3382 too early), not too late (Pio 304C is late),
+!not too high in yield(McCurdy 84aa not realistic), DK611 strange, and
+!Obatanpa is low yielding (fertility constraints, or OPV)
+!Yield "trait" is 5% higher RUE, 5% higher G2, 5% higher G3
+
+GF0001 Base Garst808-wh403  . IB0001 250.0 0.500 730.0 800.0  7.80 38.90
+GF0101 Baseline 10%shorter  . IB0001 215.0 0.500 650.0 800.0  7.80 38.90
+GF0201 Baseline 10%longer   . IB0001 285.0 0.500 810.0 800.0  7.80 38.90
+GF0301 Yield norm cycle     . IB0004 250.0 0.500 730.0 840.0  8.19 38.90
+GF0401 Yield 10%shorter     . IB0004 215.0 0.500 650.0 840.0  8.19 38.90
+GF0501 Yield 10%longer      . IB0004 285.0 0.500 810.0 840.0  8.19 38.90
+
+CYMA01 wh403                . IB0001 265.0 0.760 685.0 760.0  7.60 38.90   
+
+! Added by Camilo Andrade from Embrapa Maize and Sorghum
+EBSL06 BRS1030-SL2009       . IB0001 263.8 0.500 1034  700.0  5.20 44.22 !Single-cross hybrid from Embrapa
diff --git a/lib/maize/MZCER047.ECO b/lib/maize/MZCER047.ECO
new file mode 100644
index 0000000..dbbf965
--- /dev/null
+++ b/lib/maize/MZCER047.ECO
@@ -0,0 +1,29 @@
+*MAIZE ECOTYPE COEFFICIENTS: MZCER047 MODEL
+!
+! COEFF   DEFINITIONS
+! =====   ===========
+! ECO#    Code for the ecotype to which a cultivar belongs (see *.cul
+!         file)
+! ECONAME Name of the ecotype, which is referenced from *.CUL file
+! TBASE   Base temperature below which no development occurs, C
+! TOPT    Temperature at which maximum development rate occurs during vegetative stages, C
+! ROPT    Temperature at which maximum development rate occurs for reproductive stages, C
+! P2O     Daylength below which daylength does not affect development rate, hours
+! DJTI    Minimum days from end of juvenile stage to tassel initiation if the cultivar
+!	         is not photoperiod sensitive, days
+! GDDE    Growing degree days per cm seed depth required for emergence, GDD/cm
+! DSGFT   GDD from silking to effective grain filling period, C
+! RUE     Radiation use efficiency, g plant dry matter/MJ PAR
+! KCAN    Canopy light extinction coefficient for daily PAR.
+! TSEN    Critical temperature below which leaf damage occurs (default 6°C)
+! CDAY    Number of cold days parameter (default 15.0 )
+@ECO#  ECONAME.........  TBASE  TOPT ROPT   P20  DJTI  GDDE  DSGFT  RUE   KCAN  TSEN  CDAY
+!                            1     2    3     4     5     6     7     8      9    10    11
+IB0001 GENERIC MIDWEST1    8.0 34.0  34.0  12.5   4.0   6.0   170.  4.2   0.85
+IB0002 GENERIC MIDWEST2    8.0 34.0  34.0  12.5   4.0   6.0   170.  4.5   0.85
+IB0003 GENERIC MIDWEST3    8.0 34.0  34.0  12.5   4.0   6.0   170.  2.0   0.85
+IB0004 +5% RUE MIDWEST1    8.0 34.0  34.0  12.5   4.0   6.0   170.  4.4   0.85
+DFAULT DEFAULT             8.0 34.0  34.0  12.5   4.0   6.0   170.  4.2   0.85
+
+
+
diff --git a/lib/maize/MZCER047.SPE b/lib/maize/MZCER047.SPE
new file mode 100644
index 0000000..373ae0d
--- /dev/null
+++ b/lib/maize/MZCER047.SPE
@@ -0,0 +1,87 @@
+*MAIZE SPECIES COEFFICIENTS: MZCER047 MODEL
+
+*TEMPERATURE EFFECTS
+!       TBASE TOP1  TOP2  TMAX
+  PRFTC  6.2  16.5  33.0  44.0     !Effect of temperature on photosynthesis
+!  RGFIL  5.5  16.0  29.0  37.0     !Effect of temperature on relative grain filling rate (tolerant)
+  RGFIL  5.5  16.0  27.0  35.0     !Effect of temperature on relative grain filling rate (suscept)
+
+*PHOTOSYNTHESIS PARAMETERS 
+  PARSR   0.50      !Conversion of solar radiation to PAR 
+  CO2X     0   220   280   330   400   490   570   750   990  9999
+  CO2Y  0.00  0.85  0.95  1.00  1.02  1.04  1.05  1.06  1.07  1.08
+
+*STRESS RESPONSE
+  FSLFW   0.050     !Fraction of leaf area senesced under 100% water stress, 1/day
+  FSLFN   0.050     !Fraction of leaf area senesced under 100% nitrogen stress, 1/day
+  FSLFP   0.050     !Fraction of leaf area senesced under 100% phosphorus stress, 1/day
+  
+*SEED GROWTH PARAMETERS     
+  SDSZ   .2750      !Maximum potential seed size, mg/sd 
+  RSGR     0.1      !Relative seed growth rate below which plant may mature early
+  RSGRT    5.0      !Number of consecutive days relative seed growth rate is below RSGR that triggers early maturity
+  CARBOT   7.0      !Number of consecutive days CARBO is less than .001 before plant matures due to temperature, water or nitrogen stress
+  DSGT    21.0      !Maximum days from sowing to germination before seed dies.
+  DGET   150.0      !Growing degree days between germination and emergence after which the seed dies due to drought
+  SWCG    0.02      !Minimimum available soil water required for seed germination, cm3/cm3 
+  
+*EMERGENCE INITIAL CONDITIONS  
+  STMWTE  0.20      !Stem weight at emergence, g/plant
+  RTWTE   0.20      !Root weight at emergence, g/plant
+  LFWTE   0.20      !Leaf weight at emergence, g/plant
+  SEEDRVE 0.20      !Carbohydrate reserve in seed at emergence, g/plant
+  LEAFNOE 1.0       !Leaf number at emergence, #/plant
+  PLAE    1.0       !Leaf area at emergence, cm2/plant
+
+*NITROGEN PARAMETERS
+  TMNC    0.00450   !Plant top minimum N concentration g N/g dry matter (orig)
+  TANCE   0.0440    !Nitrogen content in above ground biomass at emergence, g N/g dry matter
+  RCNP    0.01060   !Root critical nitrogen concentration, g N/g root dry weight
+  RANCE   0.0220    !Root N content at emergence   g N/g root
+  CTCNP1  1.52      !Maximum value for critical tissue N concentration (in developing seed embryo)
+  CTCNP2  0.160     !Coefficent for change in conc. with growth stage
+
+*ROOT PARAMETERS
+  PORM    0.05      !Minimum volume required for supplying oxygen to roots for optimum growth (1-1.0)
+  RWMX    0.03      !Not used in ceres, but passed through AltPlant for use elsewhere
+  RLWR    0.98      !Root length to weight ratio (cm/g * 1E-4)
+  RWUEP1  1.50  
+
+*PLANT COMPOSITION VALUES
+  PLIGLF  0.070     !Leaf lignin fraction
+  PLIGST  0.070     !Stem lignin fraction 
+  PLIGRT  0.070     !Root lignin fraction 
+  PLIGSH  0.280     !Shell lignin fraction 
+  PLIGSD  0.020     !Seed lignin fraction 
+
+*PHOSPHORUS CONTENT (g [P]/g [shoot])                                                                 
+  0.0070  0.0025  0.0020  Optimum Shoot Conc (emerg, End L. Growth, p. mat)
+   -99.0   -99.0   -99.0  Optimum Leaf Conc  (   "              "            "     )
+   -99.0   -99.0   -99.0  Optimum Stem Conc  (   "              "            "     )
+  .00041  .00041  .00041  Optimum Root Conc  (   "              "            "     )
+  0.0050  0.0050  0.0005  Optimum Shell Conc (   "              "            "     )
+  0.0035  0.0035  0.0035  Optimum Seed Conc  (   "              "            "     )
+
+  0.0040  0.0015  0.0010  Minimum Shoot Conc (emerg, End L. Growth, p. mat)
+   -99.0   -99.0   -99.0  Minimum Leaf Conc  (   "              "            "     )
+   -99.0   -99.0   -99.0  Minimum Stem Conc  (   "              "            "     )
+  .00020  .00020  .00020  Minimum Root Conc  (   "              "            "     )
+  0.0025  0.0025  .00025  Minimum Shell Conc (   "              "            "     )
+  .00175  .00175  .00175  Minimum Seed Conc  (   "              "            "     )
+
+    25.0    15.0     9.3  Maximum Veg N:P ratio (emergence, eff. grain fill, phys. mat)
+     4.2     2.7     2.1  Minimum Veg N:P ratio (emergence, eff. grain fill, phys. mat)
+
+    0.80    1.00  SRATPHOTO, SRATPART
+    0.10          FracPMobil - max fraction of P which can be mobilized from leaf & stem / day
+  0.0028          ROOTRAD - radius of cylinder around roots from which soil P can be extracted (m)
+
+!At emergence and end of leaf growth: 
+!Optimum shoot P concentration (%) = 0.684 - 0.108X (Jones, 1983) 
+!At physiological maturity: 
+!Optimum shoot P concentration (%) = 0.238 - 0.0056X (Jones, 1983)
+!Where:
+!X is the growth stage.
+!Emergence was defined as growth stage 0 (X = 0), end of leaf growth as growth stage 4, and 
+!physiological maturity as growth stage 10 (Jones, 1983). Minimum shoot P concentration was 
+!taken as 60% of the estimated optimum (Daroub et al., 2003).
diff --git a/lib/maize/execute.py b/lib/maize/execute.py
new file mode 100644
index 0000000..11d91eb
--- /dev/null
+++ b/lib/maize/execute.py
@@ -0,0 +1,243 @@
+#!/usr/bin/env python
+from datetime import datetime, timedelta
+from collections import defaultdict 
+import numpy as np
+import mz, json, argparse
+
+
+# def generate_DSSAT_config(var_num, var_name, eco_num, p1, p2, p5, g2, g3, phint):
+
+
+#! DAYL      Day length on day of simulation (from sunrise to sunset) (hr)
+#! DLAYR(L)   Soil thickness in layer L (cm)
+#! LEAFNO  Number of oldest leaf per plant
+#! LL(NL)     Soil water lower limit, cm3/cm3
+#! NLAYR      Number of soil layers
+#! PLTPOP     Plant population, no./m2
+#! SDEPTH     Sowing depth, cm
+#! SI1(6)     Water stress during a growth stage used for output
+#! SI3(6)     Water stress during a growth stage used for output
+#! SNOW  = Snow depth, mm
+#! SRAD       Daily solar radiation, MJ/m2/day
+#! SUMP       Cumulative plant growth during ISTAGE 4, g/plant
+#! SW(NL)     Soil water content in layer, cm3/cm3
+#! TMAX       Daily maximum temperature, C
+#! TMIN       Daily minimum temperature, C
+#! TWILEN     Twilight definition of daylength
+#! XN         Number of oldest expanding leaf
+#! YRDOY      Year and day of year
+#! YRSIM      Year and day of year of first day of simulation
+
+def execute(config, json_parameter_file, output_csv_name):
+    refyear = "2021"
+    with open(json_parameter_file) as f:
+        params = json.load(f)
+
+    plantdate = int(params["plantdate"])
+    tmins = params["tmins"]
+    tmaxs = params["tmaxs"]
+    srads = params["srads"]
+    rains = params["rains"]
+
+    freedom_units = params["units"] == "F"
+
+    ##INIT
+    DAYL     = 12. 
+    DLAYR    = 10.
+    LEAFNO   = 20.
+    LL       = 0.3
+    NLAYR    = 1. 
+    PLTPOP   = 5 
+    SDEPTH   = 10.
+    SNOW  = 0 
+    SUMP  = 0 # we should use the plant growth value replace it 
+    SW    =2.
+    TWILEN =10 
+    TWILEN =8 
+    XN     =20 
+    YRSIM  = int(f"{refyear}001") 
+    # output
+    EARS=0
+    GPP=0
+    ISDATE=0
+    MDATE=0
+    DTT = np.zeros(1)
+    CUMDTT = np.zeros(1)
+    SUMDTT = np.zeros(1)
+    P3 = np.zeros(1)
+    STGDOY = np.zeros(20,dtype=np.int32)
+    ISTAGE = np.zeros(1, dtype=np.int32) 
+    ISTAGE[0] = 7 # begin with 7
+    YREMRG = np.zeros(1, dtype=np.int32) 
+    CDAY = np.zeros(1, dtype=np.int32) 
+
+    XNTI=0
+    TLNO=0
+    XSTAGE=0
+    RUE=0
+    KCAN=0
+    KEP=0
+    TSEN=0
+    CDAY=0
+    SeedFrac=0
+    VegFrac=0
+
+    gdd=0
+
+    INIT = True
+    yrdoy = 1
+    df_out = defaultdict(list)
+
+    for tmin, tmax, srad, rain in zip(tmins, tmaxs, srads, rains):
+        doy = yrdoy
+        yrdoy += 1
+        if doy<plantdate:
+            continue
+        if INIT:
+            dynamic = 1  
+            INIT = False
+        else:
+            dynamic = -1  
+        
+        YRDOY  = f"{str(refyear)[-2:]}{str(yrdoy).rjust(3, '0')}"
+        SRAD   = float(srad)
+        TMAX   = float(tmax)
+        TMIN   = float(tmin)
+        RAIN   = float(rain)
+
+        if freedom_units:
+            TMAX = (TMAX - 32) * (5/9)
+            TMIN = (TMIN - 32) * (5/9)
+
+        
+        mz.mz_phenol(config, dynamic,                             # !C
+            DAYL,DLAYR,LEAFNO,LL,NLAYR,                            # !I
+            SNOW, SRAD,SUMP,SW,TMAX,TMIN, TWILEN,          # !I
+            XN,YRDOY,YRSIM,                                        # !I
+            CUMDTT,DTT,EARS,GPP,ISDATE, ISTAGE,MDATE,STGDOY,SUMDTT,# !O
+            XNTI,TLNO,XSTAGE,YREMRG,RUE,KCAN,KEP, P3, TSEN, CDAY,  # !O
+            SeedFrac, VegFrac)   
+                                              # !O
+        YRDOY  = f"{refyear}{doy:03d}"
+
+        df_out["DTT"].append(DTT[0])
+        gdd = gdd+DTT[0]
+        df_out["GDD"].append(gdd)
+        df_out["SUMDTT"].append(SUMDTT[0])
+        df_out["ISTAGE"].append(ISTAGE[0])
+        df_out["YRDOY"].append(YRDOY)
+
+    # df_out = pd.DataFrame.from_dict(df_out)
+    # df_out.set_index("YRDOY").to_csv(output_csv_name)
+
+def get_predicted_harvest(config, json_parameter_file):
+    refyear = "2021"
+    with open(json_parameter_file) as f:
+        params = json.load(f)
+
+    plantdate = int(params["plant_date"])
+    tmins = params["tmins"]
+    tmaxs = params["tmaxs"]
+    srads = params["srads"]
+    # rains = params["rains"]
+
+    freedom_units = params["units"] == "F"
+
+    ##INIT
+    DAYL     = 12. 
+    DLAYR    = 10.
+    LEAFNO   = 20.
+    LL       = 0.3
+    NLAYR    = 1. 
+    PLTPOP   = 5 
+    SDEPTH   = 10.
+    SNOW  = 0 
+    SUMP  = 0 # we should use the plant growth value replace it 
+    SW    =2.
+    TWILEN =10 
+    TWILEN =8 
+    XN     =20 
+    YRSIM  = int(f"{refyear}001") 
+    # output
+    EARS=0
+    GPP=0
+    ISDATE=0
+    MDATE=0
+    DTT = np.zeros(1)
+    CUMDTT = np.zeros(1)
+    SUMDTT = np.zeros(1)
+    P3 = np.zeros(1)
+    STGDOY = np.zeros(20,dtype=np.int32)
+    ISTAGE = np.zeros(1, dtype=np.int32) 
+    ISTAGE[0] = 7 # begin with 7
+    YREMRG = np.zeros(1, dtype=np.int32) 
+    CDAY = np.zeros(1, dtype=np.int32) 
+
+    XNTI=0
+    TLNO=0
+    XSTAGE=0
+    RUE=0
+    KCAN=0
+    KEP=0
+    TSEN=0
+    CDAY=0
+    SeedFrac=0
+    VegFrac=0
+
+    gdd=0
+
+    INIT = True
+    yrdoy = 1
+    df_out = defaultdict(list)
+
+    for tmin, tmax, srad in zip(tmins, tmaxs, srads):
+        doy = yrdoy
+        yrdoy += 1
+        if doy<plantdate:
+            continue
+        if INIT:
+            dynamic = 1  
+            INIT = False
+        else:
+            dynamic = -1  
+        
+        YRDOY  = f"{str(refyear)[-2:]}{str(yrdoy).rjust(3, '0')}"
+        SRAD   = float(srad)
+        TMAX   = float(tmax)
+        TMIN   = float(tmin)
+        # RAIN   = float(rain)
+
+        if freedom_units:
+            TMAX = (TMAX - 32) * (5/9)
+            TMIN = (TMIN - 32) * (5/9)
+
+        
+        mz.mz_phenol(config, dynamic,                             # !C
+            DAYL,DLAYR,LEAFNO,LL,NLAYR,                            # !I
+            SNOW, SRAD,SUMP,SW,TMAX,TMIN, TWILEN,          # !I
+            XN,YRDOY,YRSIM,                                        # !I
+            CUMDTT,DTT,EARS,GPP,ISDATE, ISTAGE,MDATE,STGDOY,SUMDTT,# !O
+            XNTI,TLNO,XSTAGE,YREMRG,RUE,KCAN,KEP, P3, TSEN, CDAY,  # !O
+            SeedFrac, VegFrac)   
+                                              # !O
+        YRDOY  = f"{refyear}{doy:03d}"
+
+        if ISTAGE[0] == 6:
+            return YRDOY
+
+    return -1
+
+
+# execute("test.json", "data.csv")
+
+if __name__ == "__main__":
+    parser = argparse.ArgumentParser(description='Process some integers.')
+    parser.add_argument('--config', help='DSSAT config file')
+    parser.add_argument('--input', help='input json file')
+    parser.add_argument('--output', help='output csv file')
+    parser.add_argument('--predicted', action='store_true')
+    args = parser.parse_args()
+    if args.predicted:
+        print (get_predicted_harvest(int(args.config), args.input))
+    else:
+        execute(int(args.config), args.input, args.output)
\ No newline at end of file
diff --git a/lib/maize/mz.cpython-38-x86_64-linux-gnu.so b/lib/maize/mz.cpython-38-x86_64-linux-gnu.so
new file mode 100644
index 0000000000000000000000000000000000000000..6a4349edb938551a0e701aea2d0622ab1739e350
GIT binary patch
literal 238632
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
F`2&6>%r*c3

literal 0
HcmV?d00001

diff --git a/lib/maize/mz.f b/lib/maize/mz.f
new file mode 100644
index 0000000..f4e3922
--- /dev/null
+++ b/lib/maize/mz.f
@@ -0,0 +1,1209 @@
+!======================================================================
+!  MZ_PHENOL, Subroutine
+!
+!  Determines Phenological Stage and Growing Degree Days for Maize
+!----------------------------------------------------------------------
+!  Revision history
+!
+!                 Written
+!  02/07/1993 PWW Header revision and minor changes                 
+!  02/07/1993 PWW Added switch block, code cleanup                  
+!  02/07/1993 PWW Modified TT calculations to reduce line #'s       
+!  05/  /1994 WTB Modified for MILLET model                        
+!  03/29/2001 WDB Converted to modular format                      
+!  12/01/2001 WDB Major restructuring for 2002 release                    
+!  06/11/2002 GH  Modified for Y2K
+!  08/12/2003 CHP Added I/O error checking
+!  10/12/2005 CHP/JIL Added optional temperature sensitivity parameter
+!                 to ecotype file (TSEN)
+!  07/13/2006 CHP Added P model
+!----------------------------------------------------------------------
+
+! DAYL      Day length on day of simulation (from sunrise to sunset) (hr)
+! DLAYR(L)   Soil thickness in layer L (cm)
+! LEAFNO  Number of oldest leaf per plant
+! LL(NL)     Soil water lower limit, cm3/cm3
+! NLAYR      Number of soil layers
+! PLTPOP     Plant population, no./m2
+! SDEPTH     Sowing depth, cm
+! SI1(6)     Water stress during a growth stage used for output
+! SI3(6)     Water stress during a growth stage used for output
+! SNOW  = Snow depth, mm
+! SRAD       Daily solar radiation, MJ/m2/day
+! SUMP       Cumulative plant growth during ISTAGE 4, g/plant
+! SW(NL)     Soil water content in layer, cm3/cm3
+! TMAX       Daily maximum temperature, C
+! TMIN       Daily minimum temperature, C
+! TWILEN     Twilight definition of daylength
+! XN         Number of oldest expanding leaf
+! YRDOY      Year and day of year
+! YRSIM      Year and day of year of first day of simulation
+
+      CHARACTER*1 FUNCTION UPCASE (INCHAR)
+
+      IMPLICIT  NONE
+
+      CHARACTER INCHAR*1
+      INTEGER   CHAVAL
+
+      CHAVAL = ICHAR(INCHAR)
+
+      IF ((CHAVAL .LE. 122) .AND. (CHAVAL .GE. 97)) THEN
+         UPCASE = CHAR(CHAVAL-32)
+       ELSE
+         UPCASE = INCHAR
+      ENDIF
+
+      END FUNCTION UPCASE
+
+
+
+
+      SUBROUTINE IGNORE(LUN,LINEXP,ISECT,CHARTEST)                                                                                                                      
+
+      CHARACTER BLANK*(80),CHARTEST*(*)
+      INTEGER   LENGTH, LUN,LINEXP,ISECT
+      DATA BLANK/'                                                    '/
+
+      LENGTH = LEN(CHARTEST)
+
+      ISECT = 1
+ 30   READ(LUN,'(A)',ERR=70, END=70)CHARTEST
+      LINEXP = LINEXP + 1
+
+!     CHP 5/1/08
+      IF (CHARTEST(1:1) == CHAR(26)) THEN
+        GO TO 70
+      ENDIF
+
+C     Check to see if all of this section has been read
+      IF(CHARTEST(1:1) .EQ. '*'  .OR. CHARTEST(1:1) .EQ. '$') THEN
+C        End of section encountered
+         ISECT = 2
+         RETURN
+      ENDIF
+C
+C     Check for blank lines and comments (denoted by ! in column 1)
+      IF(CHARTEST(1:1).NE.'!' .AND. CHARTEST(1:1).NE.'@') THEN
+!         IF(CHARTEST(1:80).NE.BLANK)THEN
+         IF(CHARTEST(1:LENGTH).NE.BLANK)THEN
+C           FOUND A GOOD LINE TO READ
+            RETURN
+         ENDIF
+      ENDIF
+
+      GO TO 30
+C     To read the next line
+
+ 70   ISECT = 0
+      RETURN
+      END SUBROUTINE IGNORE
+
+
+      SUBROUTINE FIND(LUNUM,NAME,LNUM,FOUND)
+
+      IMPLICIT NONE
+      INTEGER FOUND,I,LNUM,LUNUM
+      CHARACTER SECTION*6,NAME*6,UPCASE*1
+C
+C     Initialization.
+C
+      FOUND = 0
+      LNUM  = 1
+      DO I = 1, LEN(NAME)
+         NAME(I:I) = UPCASE(NAME(I:I))
+      END DO
+C
+C     Loop to read through data file.
+C
+   10 IF (.TRUE.) THEN
+         READ(LUNUM,'(A)',END=20) SECTION
+         DO I = 1,LEN(SECTION)
+            SECTION(I:I) = UPCASE(SECTION(I:I))
+         END DO
+C
+C        String found, set FOUND to 1, and exit loop.
+C
+         IF (NAME .EQ. SECTION) then
+            FOUND = 1
+            GOTO 20
+C
+C           String not found, set FOUND to 0.
+C
+          ELSE
+            FOUND = 0
+         ENDIF
+
+         LNUM = LNUM + 1
+         GOTO 10
+      ENDIF
+
+   20 RETURN
+      END
+
+      
+      SUBROUTINE MZ_PHENOL(FILEID, DYNAMIC,    
+     &    DAYL,DLAYR,LEAFNO,LL,NLAYR,  
+     &    SNOW, SRAD,SUMP,SW,TMAX,TMIN, TWILEN,           
+     &    XN,YRDOY,YRSIM,                                         
+     &    CUMDTT,DTT,EARS,GPP,ISDATE, ISTAGE,MDATE,STGDOY,SUMDTT, 
+     &    XNTI,TLNO,XSTAGE,YREMRG,RUE,KCAN,KEP, P3, TSEN, CDAY,   
+     &    SeedFrac, VegFrac)                               
+
+      !USE ModuleDefs
+      IMPLICIT  NONE
+      SAVE
+      INTEGER,PARAMETER :: NL=1
+      CHARACTER*1,PARAMETER   ::    ISWWAT ="Y" 
+      CHARACTER*30  ::    FILEIO
+      CHARACTER*1,PARAMETER  ::     IDETO  ="Y" 
+      REAL,PARAMETER::            SI1(6)   = (/0.1,0.1,0.1,0.1,0.1,0.1/)
+      REAL,PARAMETER::            SI3(6)   = (/0.1,0.1,0.1,0.1,0.1,0.1/)
+!----------------------------------------------------------------------
+!                             Define Variables
+!----------------------------------------------------------------------
+      INTEGER         DYNAMIC         
+
+!      REAL            ABSTRES         
+      REAL            ACOEF           
+      REAL            BARFAC 
+      CHARACTER*1     BLANK         
+      REAL            C1   
+      REAL            CUMDEP          
+      REAL,intent(inout)   ::  P3          
+Cf2py intent(inout) P3 
+      REAL,intent(inout)   ::  DTT          
+Cf2py intent(inout) DTT 
+      REAL,intent(inout)   ::  CUMDTT          
+Cf2py intent(inout) CUMDTT 
+      REAL,intent(inout)   ::  SUMDTT          
+Cf2py intent(inout) SUMDTT 
+      INTEGER,intent(inout)::  ISTAGE         
+Cf2py intent(inout) ISTAGE 
+      INTEGER,intent(inout)::  YREMRG         
+Cf2py intent(inout) YREMRG 
+      INTEGER,intent(inout)::  STGDOY(20)     
+Cf2py intent(inout) STGDOY 
+      INTEGER,intent(inout)::  CDAY
+Cf2py intent(inout) CDAY 
+      REAL            DAYL            
+      REAL            DEC             
+      REAL            DGET
+      REAL            DJTI
+      REAL            DLAYR(NL)       
+      REAL            DLV             
+      REAL            DOPT                      
+      REAL            DSGT
+      REAL            DSGFT
+      REAL            DUMMY           
+      REAL            EARS            
+      CHARACTER*6     ECONO           
+      INTEGER         ERR             
+      CHARACTER*6     ERRKEY          
+      PARAMETER       (ERRKEY='MZPHEN')
+      INTEGER         ERRNUM
+      CHARACTER*12    FILEC     
+      CHARACTER*12    FILES
+      CHARACTER*12    FILEE     
+      INTEGER    FILEID     
+      CHARACTER*92    FILEGC
+      INTEGER         FOUND          
+      REAL            G2             
+      REAL            G3             
+      REAL            GDDE
+      REAL            GPP            
+      INTEGER         I              
+      INTEGER         IDURP     
+      REAL            KCAN
+      REAL            KEP
+      INTEGER         LEAFNO         
+      INTEGER         L              
+      INTEGER         L0             
+      INTEGER         LINC           
+      REAL            LL(NL)         
+      INTEGER         LNUM           
+      INTEGER         LUNIO          
+      INTEGER         MDATE          
+      INTEGER         NDAS           
+      INTEGER         NLAYR          
+      INTEGER         NOUTDO         
+      REAL            P1             
+      REAL            P2             
+      REAL            P2O            
+      REAL            P5             
+      REAL            P9             
+      CHARACTER*80    PATHCR 
+      CHARACTER*80    PATHSR
+      CHARACTER*80    PATHER        
+      REAL            PDTT
+      REAL            PHINT          
+      REAL            PLTPOP         
+      REAL            PSKER          
+      REAL            RATEIN         
+      REAL            ROPT           
+      REAL            RUE
+      REAL            SDEPTH         
+      CHARACTER*6     SECTION        
+      REAL            S1    
+      REAL            SIND           
+      REAL            SNDN           
+      REAL            SNOW           
+      REAL            SNUP           
+      REAL            SRAD           
+      REAL            SUMDTT_2 !introduced for plant P routine         
+      REAL            SUMP           
+      REAL            SW(NL)         
+      REAL            SWCG
+      REAL            SWSD           
+      REAL            TBASE          
+      REAL            TDSOIL         
+      REAL            TEMPCN         
+                                     
+      REAL            TEMPCR         
+      REAL            TEMPCX         
+      REAL            TH             
+      REAL            TLNO           
+      REAL            TMAX           
+      REAL            TMIN           
+      REAL            TMSOIL         
+      REAL            TNSOIL         
+      REAL            TOPT  
+      REAL            TSEN  !10/12/2005 chp         
+      REAL            TWILEN         
+      CHARACTER*6     VARNO          
+      CHARACTER*16    VRNAME                  
+      REAL            XN             
+      REAL            XNTI           
+      REAL            XS             
+      REAL            XSTAGE         
+      INTEGER         YRDOY          
+      INTEGER         YRSIM
+      INTEGER ISDATE          
+
+      INTEGER PATHL
+      PARAMETER (BLANK = ' ')
+      INTEGER LUNECO
+
+      CHARACTER*6 ECOTYP
+      INTEGER ISECT
+      CHARACTER*255 C255
+      CHARACTER*16  ECONAM
+      INTEGER LUNCRP
+      CHARACTER*92 FILECC
+      CHARACTER*80 C80
+      CHARACTER*78 MESSAGE(10)
+
+!     CHP added for P model
+      REAL SeedFrac, VegFrac
+
+      INTEGER,PARAMETER :: RUNINIT=1
+      WRITE (FILEIO, "(A5, I2,A4)") "DSSAT", FILEID, ".INP"
+!----------------------------------------------------------------------
+!         DYNAMIC = RUNINIT OR DYNAMIC = SEASINIT
+! ---------------------------------------------------------------------
+!     IF (DYNAMIC.EQ.RUNINIT .OR. DYNAMIC.EQ.SEASINIT) THEN
+      IF (DYNAMIC.EQ.RUNINIT ) THEN
+
+!       Do this just once in RUNINIT
+        IF (DYNAMIC .EQ. RUNINIT) THEN
+          !CALL GETLUN('OUTO', NOUTDO)
+          NOUTDO = 20
+
+          !-------------------------------------------------------
+          !     Read input file name (ie. DSSAT45.INP) and path
+          !-------------------------------------------------------
+          !CALL GETLUN('FILEIO', LUNIO)
+          LUNIO = 21
+
+          OPEN (LUNIO, FILE = FILEIO,STATUS = 'OLD',IOSTAT=ERR)  
+          IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILEIO,0)
+            print*,"A5"
+            STOP
+          endif
+
+          READ(LUNIO,50,IOSTAT=ERR) FILES, PATHSR; LNUM = 7
+   50     FORMAT(//////,15X,A12,1X,A80)
+          IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILEIO,LNUM)
+            print*,"A2"
+            STOP
+          endif
+
+          READ(LUNIO,51,IOSTAT=ERR) FILEE, PATHER; LNUM = LNUM + 1
+          IF (ERR .NE. 0) then !CALL ERROR(ERRKEY,ERR,FILEIO,LNUM)
+            print*,"A3"
+            STOP
+          endif
+   51     FORMAT(15X,A12,1X,A80)
+
+          READ(LUNIO,51,IOSTAT=ERR) FILEC, PATHCR; LNUM = LNUM + 1
+          IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILEIO,LNUM)
+            print*,"A4"
+            STOP
+          endif
+
+          !------------------------------------------------------
+          !   Read Planting Details Section
+          !------------------------------------------------------
+          SECTION = '*PLANT'
+          CALL FIND(LUNIO, SECTION, LINC, FOUND) ; LNUM = LNUM + LINC
+          IF (FOUND .EQ. 0) THEN
+            !CALL ERROR(SECTION, 42, FILEIO, LNUM)
+            print*,"A2"
+            STOP
+          ELSE
+!            READ(LUNIO,60,IOSTAT=ERR) PLTPOP,SDEPTH
+            READ(LUNIO,60,IOSTAT=ERR) YREMRG,PLTPOP,SDEPTH
+            LNUM = LNUM + 1
+! 60         FORMAT(25X,F5.2,25X,F5.2)
+ 60         FORMAT(11X,I7,7X,F5.2,25X,F5.2)
+            IF (ERR .NE. 0) THEN!CALL ERROR(ERRKEY,ERR,FILEIO,LNUM)
+              print*,"A3"
+              STOP
+            endif
+          ENDIF
+!     -----------------------------------------------------------------
+!             Read crop cultivar coefficients
+!     -----------------------------------------------------------------
+          SECTION = '*CULTI'
+          CALL FIND(LUNIO, SECTION, LINC, FOUND) ; LNUM = LNUM + LINC
+          IF (FOUND .EQ. 0) THEN
+            !CALL ERROR(SECTION, 42, FILEIO, LNUM)
+            print*,"A5"
+            STOP
+          ELSE
+            READ (LUNIO,1800,IOSTAT=ERR) VARNO,VRNAME,ECONO,
+     %                   P1,P2,P5,G2,G3,PHINT ; LNUM = LNUM + 1 
+            IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILEIO,LNUM)
+              print*,"A5"
+              STOP
+            endif
+1800        FORMAT (A6,1X,A16,1X,A6,1X,6F6.0)    
+          ENDIF
+          CLOSE(LUNIO)
+
+!     -----------------------------------------------------------------
+!              Read Species Coefficients
+!     -----------------------------------------------------------------
+
+          FILECC =  TRIM(PATHSR) // FILES
+          !FILECC = "COGRO047.SPE"
+          !CALL GETLUN('FILEC', LUNCRP)
+          LUNCRP = 16
+          OPEN (LUNCRP,FILE = FILECC, STATUS = 'OLD',IOSTAT=ERR)
+          IF (ERR .NE. 0) THEN!CALL ERROR(ERRKEY,ERR,FILECC,0)
+              print*,"A6"
+              STOP
+          endif
+         
+!         ----------------------------------------------------------------
+!                Find and Read TEMPERATURE Section
+!         ----------------------------------------------------------------
+         
+          SECTION = '*SEED '
+          CALL FIND(LUNCRP, SECTION, LNUM, FOUND)
+          IF (FOUND .EQ. 0) THEN
+            !CALL ERROR(SECTION, 42, FILECC, LNUM)
+            print*,"b"
+            stop
+          ELSE
+         
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            READ(C80,'(9X,F7.3)',IOSTAT=ERR) DSGT
+            IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILECC,LNUM)
+              print*,"A3"
+              STOP
+            endif
+         
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            READ(C80,'(9X,F7.3)',IOSTAT=ERR) DGET
+            IF (ERR .NE. 0) THEN!CALL ERROR(ERRKEY,ERR,FILECC,LNUM)
+              print*,"A3"
+              STOP
+            endif
+            
+            CALL IGNORE(LUNCRP,LNUM,ISECT,C80)
+            READ(C80,'(9X,F7.3)',IOSTAT=ERR) SWCG
+            IF (ERR .NE. 0) THEN !CALL ERROR(ERRKEY,ERR,FILECC,LNUM)
+              print*,"A3"
+              STOP
+            endif
+          ENDIF
+         
+          CLOSE(LUNCRP)
+
+!-----------------------------------------------------------------------
+!     Open Ecotype File FILEE
+!-----------------------------------------------------------------------
+          LNUM = 0
+          PATHL  = INDEX(PATHER,BLANK)
+          IF (PATHL .LE. 1) THEN
+            FILEGC = FILEE
+          ELSE
+            FILEGC = PATHER(1:(PATHL-1)) // FILEE
+          ENDIF
+
+!-----------------------------------------------------------------------
+!    Read Ecotype Parameter File
+!-----------------------------------------------------------------------
+          !CALL GETLUN('FILEE', LUNECO)
+          LUNECO = 10
+          OPEN (LUNECO,FILE = FILEGC,STATUS = 'OLD',IOSTAT=ERRNUM)
+          IF (ERRNUM .NE. 0) THEN !CALL ERROR(ERRKEY,ERRNUM,FILEE,0)
+            print*,"A3"
+            STOP
+          endif
+
+          ECOTYP = '      '
+          LNUM = 0
+          DO WHILE (ECOTYP .NE. ECONO)
+            CALL IGNORE(LUNECO, LNUM, ISECT, C255)
+            IF (ISECT .EQ. 1 .AND. C255(1:1) .NE. ' ' .AND.
+     &            C255(1:1) .NE. '*') THEN
+              READ(C255,3100,IOSTAT=ERRNUM) ECOTYP,ECONAM,TBASE,TOPT,
+     &             ROPT,P2O,DJTI,GDDE,DSGFT,RUE, KCAN
+3100          FORMAT (A6,1X,A16,1X,9(1X,F5.1))
+              IF (ERRNUM .NE. 0) THEN !CALL ERROR(ERRKEY,ERRNUM,FILEE,LNUM)
+                print*,"A3"
+                STOP
+              endif
+        
+              IF (ECOTYP .EQ. ECONO) THEN
+!               Read optional cold sensitivity paramter. 
+!               Default to TSEN = 6.0 if no value given.
+                IF (C255(80:84) == '     ') THEN
+                  TSEN = 6.0
+                ELSE
+                  READ(C255(80:84),'(F5.0)',IOSTAT=ERRNUM) TSEN
+                  IF (ERRNUM .NE. 0 .OR. TSEN < 1.E-6) TSEN = 6.0
+                ENDIF
+        
+!               Read optional number of cold days paramter. 
+!               Default to CDAY = 15.0 if no value given.
+                IF (C255(86:90) == '     ') THEN
+                  CDAY = 15
+                ELSE
+                  READ(C255(86:90),'(I5)',IOSTAT=ERRNUM) CDAY
+                  IF (ERRNUM .NE. 0 .OR. CDAY < 0) CDAY = 15
+                ENDIF
+        
+                EXIT
+              ENDIF
+
+            ELSEIF (ISECT .EQ. 0) THEN
+              !CALL ERROR(ERRKEY,7,FILEE,LNUM)
+              print*,"A3"
+              STOP
+
+! CHP 1/4/2004
+! IMPLEMENT THIS SECTION OF CODE WHEN A DEFAULT ECOTYPE HAS BEEN ADDED
+!    TO THE ECOTYPE FILE.
+!            IF (ECONO .EQ. 'DFAULT') CALL ERROR(ERRKEY,35,FILEGC,LNUM)
+!
+!!           Write message to WARNING.OUT file that default ecotype 
+!!             will be used.
+!            WRITE(MESSAGE(1),5000) ECONO, FILEE
+!            WRITE(MESSAGE(2),5001) 
+! 5000       FORMAT('Ecotype ',A6,' not found in file: ',A12)
+! 5001       FORMAT('Default ecotype parameters will be used.')
+!
+!            ECONO = 'DFAULT'
+!            REWIND(LUNECO)
+!            LNUM = 0
+            ENDIF
+          ENDDO
+
+          CLOSE (LUNECO)
+        ENDIF
+
+      KEP = KCAN/(1-0.07)*(1-0.25)
+
+          DO I=1,20
+              STGDOY(I) = 9999999      
+          ENDDO
+          STGDOY(14) = YRSIM
+!          YREMRG = 9999999
+          YREMRG = -99  !CHP 5/19/2011
+
+      CUMDTT = 0.0
+      SUMDTT = 0.0
+      DTT = 0.0
+      GPP = 0.0
+      ISTAGE = 7
+      XSTAGE = 0.1
+      MDATE      = -99
+      DUMMY = 0
+
+      ISDATE = 0
+      TNSOIL = 0.0
+      TMSOIL = 0.0
+      TH = 00.0
+      TEMPCX = 0.
+      TEMPCR = 0.0
+      TDSOIL = 0.0
+      SWSD = 0.0
+      SNUP = 0.0
+      SNDN = 0.0
+      S1 = 0.0
+      RATEIN = 0.0
+      PSKER = 0.0
+      PDTT = 0.0
+      P9 = 0.0
+      P3 = 0.0
+      NDAS = 0.0
+      L0 = 0.0
+      L = 0
+      DLV = 0.0
+      DEC = 0.0
+      C1 = 0.0
+      ACOEF = 0.0
+      DOPT = 0.0
+
+!     CHP 9/10/2004  P model
+      SeedFrac = 0.0
+      VegFrac  = 0.0
+
+!----------------------------------------------------------------------
+!         DYNAMIC = RATE OR INTEGRATE
+! ---------------------------------------------------------------------
+
+      ELSE    
+
+!         -------------------------------------------------------------
+!             Compute Crown Temperature under snow pack.
+!             Used in COLD.for
+!         -------------------------------------------------------------
+          ! TEMPCN = crown temperature when snow is present and 
+          !   TMIN < 0. This function computes crown temperature 
+          !   as higher than TMIN, C.
+          ! TEMPCX = crown temp. for max. development rate, C
+          ! SNOW  = Snow depth, mm
+          ! XS    = temporary snow depth variable, mm
+
+          TEMPCN = TMIN
+          TEMPCX = TMAX
+          XS     = SNOW
+          XS     = AMIN1 (XS,15.0)
+          !------------------------------------------------------------
+          ! Calculate crown temperature based on temperature and
+          ! snow cover. Crown temperature is higher than TAVG due
+          ! to energy balance of snow pack.
+          !------------------------------------------------------------
+          IF (TMIN .LT. 0.0) THEN
+              TEMPCN = 2.0 + TMIN*(0.4+0.0018*(XS-15.0)**2)
+          ENDIF
+          IF (TMAX .LT. 0.0) THEN
+              TEMPCX = 2.0 + TMAX*(0.4+0.0018*(XS-15.0)**2)
+          ENDIF
+          TEMPCR = (TEMPCX + TEMPCN)/2.0
+  
+  
+          !------------------------------------------------------------
+          ! Compute thermal time based on new method developed by J.T.R
+          ! at CYMMIT, 5/5/98.  TBASE, TOPT, and ROPT are read in 
+          ! from the species file.
+          !------------------------------------------------------------
+          
+          !   DOPT, Devlopment optimum temperature, is set to TOPT 
+          !   during vegetative growth and to ROPT after anthesis
+          
+          DOPT = TOPT
+          IF ((ISTAGE .GT. 3) .AND. (ISTAGE .LE. 6)) THEN
+              DOPT = ROPT
+          ENDIF
+
+          !   Check basic temperature ranges and calculate DTT for
+          !   development based on PC with JTR
+
+          IF (TMAX .LT. TBASE) THEN
+              DTT = 0.0
+          ELSEIF (TMIN .GT. DOPT) THEN
+          !   !
+       !This statement replaces DTT = TOPT .. GoL and LAH, CIMMYT, 1999
+          !   !
+              DTT = DOPT - TBASE
+          !   !
+          !Now, modify TEMPCN, TEMPCX based on soil conditions or snow
+          !   ! If wheat and barley is before terminal spiklett stage
+          !   ! Or if corn and sorghum are before 10 leaves
+          !   !
+          ELSEIF (LEAFNO.LE.10) THEN  
+          !Check for snow  (should following be GT.0 or GT.15 ?).  
+          !   !Based on snow cover, calculate DTT for the day
+          !   !
+              IF (XS .GT. 0.0) THEN
+          !       !
+          !       ! Snow on the ground
+          !       !
+                  DTT    = (TEMPCN + TEMPCX)/2.0 - TBASE
+              ELSE
+          !       !
+          !       ! No snow, compute soil temperature
+          !       !
+                  ACOEF  = 0.01061 * SRAD + 0.5902
+                  TDSOIL = ACOEF * TMAX + (1.0 - ACOEF) * TMIN
+                  TNSOIL = 0.36354 * TMAX + 0.63646 * TMIN
+                  IF (TDSOIL .LT. TBASE) THEN
+                      DTT = 0.0
+                  ELSE
+                      IF (TNSOIL .LT. TBASE) THEN
+                          TNSOIL = TBASE
+                      ENDIF
+                      IF (TDSOIL .GT. DOPT) THEN
+                          TDSOIL = DOPT
+                      ENDIF
+                      !Import DAYL from WEATHR module. chp 5-6-02
+                      TMSOIL = TDSOIL * (DAYL/24.) + 
+     &                        TNSOIL * ((24.-DAYL)/24.)
+                      IF (TMSOIL .LT. TBASE) THEN
+                          DTT = (TBASE+TDSOIL)/2.0 - TBASE
+                      ELSE
+                          DTT = (TNSOIL+TDSOIL)/2.0 - TBASE
+                      ENDIF
+          !           !
+          !           ! Statement added ... GoL and LAH, CIMMYT, 1999
+          !           !
+                      DTT = AMIN1 (DTT,DOPT-TBASE)
+                  ENDIF
+              ENDIF
+          !
+          ! Now, compute DTT for when Tmax or Tmin out of range
+          !
+          ELSEIF (TMIN .LT. TBASE .OR. TMAX .GT. DOPT) THEN
+              DTT = 0.0
+              DO I = 1, 24
+                  TH = (TMAX+TMIN)/2. + (TMAX-TMIN)/2. * SIN(3.14/12.*I)
+                  IF (TH .LT. TBASE) THEN
+                      TH = TBASE
+                  ENDIF
+                  IF (TH .GT. DOPT) THEN
+                      TH = DOPT
+                  ENDIF
+                  DTT = DTT + (TH-TBASE)/24.0
+              END DO
+          ELSE
+              DTT = (TMAX+TMIN)/2.0 - TBASE
+          ENDIF
+
+          !print*,"DTT",tmax,tmin,tbase
+          DTT   = AMAX1 (DTT,0.0)
+          SUMDTT  = SUMDTT  + DTT 
+          CUMDTT = CUMDTT + DTT
+
+
+!     ------------------------------------------------------------------
+!           ISTAGE Definitions
+!
+!             7 - Sowing date
+!             8 - Germination
+!             9 - Emergence
+!             1 - End juvenile
+!             2 - Pannicle initiation
+!             3 - End leaf growth
+!             4 - End pannicle growth
+!             5 - Grain fill
+!             6 - Maturity
+!     ----------------------------------------------------------
+
+
+      !---------------------------------------------------------
+      !               ISTAGE = 7 - Determine sowing date
+      !---------------------------------------------------------
+          IF (ISTAGE .EQ. 7) THEN
+              STGDOY(ISTAGE) = YRDOY
+              NDAS           = 0.0
+              ISTAGE = 8
+              SUMDTT = 0.0
+              IF (ISWWAT .EQ. 'N') RETURN
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              CUMDEP = 0.0
+              DO L = 1, NLAYR
+                  CUMDEP = CUMDEP + DLAYR(L)
+                  IF (SDEPTH .LT. CUMDEP) GO TO 100   ! Was EXIT
+              END DO
+  100         CONTINUE                                ! Sun Fix
+              L0 = L               !L0 is layer that seed is in.
+
+              RETURN
+
+
+      !-----------------------------------------------------------------
+      !               ISTAGE = 8 - Determine Germination Date
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 8) THEN
+              IF (ISWWAT .NE. 'N') THEN
+                  IF (SW(L0) .LE. LL(L0)) THEN
+                      SWSD = (SW(L0)-LL(L0))*0.65 + 
+     &                    (SW(L0+1)-LL(L0+1))*0.35
+                      NDAS = NDAS + 1
+
+                      IF (NDAS .GE. DSGT) THEN
+                          ISTAGE = 6
+                          PLTPOP = 0.00
+                          GPP    = 1.0
+
+                          WRITE(MESSAGE(1),3500)
+                          !CALL WARNING(1,'MZPHEN',MESSAGE)
+                          WRITE (     *,3500)
+                          IF (IDETO .EQ. 'Y') THEN
+                              WRITE (NOUTDO,3500)
+                          ENDIF
+                          MDATE  = YRDOY
+                          RETURN
+                      ENDIF
+                 !Germinate when soil water > 0.02 cm3/cm3
+
+                  IF (SWSD .LT. SWCG) RETURN  
+                  ENDIF
+              ENDIF
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY
+              ISTAGE =    9
+              CUMDTT =  0.0
+              SUMDTT =  0.0
+
+              P9    = 45.0 +  GDDE*SDEPTH
+              RETURN
+
+
+      !-----------------------------------------------------------------
+      !               ISTAGE = 9 - Determine Seedling Emergence Date
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 9) THEN
+              NDAS = NDAS + 1
+              ! Emerge when P9 GDD's have been accumulated
+!              IF (SUMDTT .LT. P9) RETURN 
+              IF (YREMRG .LE. 0) THEN
+	          IF (SUMDTT .LT. P9) RETURN
+	        ELSE
+	          IF (YRDOY .LT. YREMRG) RETURN
+	        ENDIF
+              ! If GDD's pass a threshold, terminate model run
+
+              IF (P9 .GT. DGET) THEN
+                  ISTAGE = 6
+                  PLTPOP = 0.00
+                  GPP    = 1.0
+
+                  WRITE(MESSAGE(1),1399)
+                  !CALL WARNING(1,'MZPHEN',MESSAGE)
+
+                  WRITE (     *,1399)
+                  IF (IDETO .EQ. 'Y') THEN
+                      WRITE (NOUTDO,1399)
+                  ENDIF
+                  MDATE = YRDOY
+                  RETURN
+              ENDIF
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY
+              ISTAGE = 1
+              SUMDTT = SUMDTT - P9
+              TLNO   = 30.0
+              YREMRG = STGDOY(9)   !Passed back into water balance routi
+              RETURN
+
+      !-----------------------------------------------------------------
+      !       ISTAGE = 1 - Emergence to End of Juvenile Stage
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 1) THEN
+              NDAS   = NDAS + 1   !NDAS - number of days after sowing
+              XSTAGE = SUMDTT/P1  !XSTAGE - noninteger growth stage (0-1
+                                  !   Used to compute N demand
+              ! Stage occurs when GDD threshold reached
+              !Return if end of juvenile stage is not reached
+
+!     chp 9/23/2004
+!     For P model, we need to estimate the fraction of time completed 
+!     between emergence and tassel initiation, VegFrac.  Because stage 2 
+!     (end of juvenile stage to tassel initiation) completion is not 
+!     based on physiological time, but rather on daylight hours, we 
+!     will make the assumption that the physical duration of that phase 
+!     is 5 days at optimum temperature.
+
+!     CHP 5/11/2005
+!     Extend VegFrac to include phases 3 & 4 (to beginning of effective 
+!     grain filling).  Reduce Seed Frac to phase 5.
+!             VegFrac = SUMDTT / (P1 + 5.0 * (DOPT - TBASE))
+!             don't know value of P3 yet
+!             VegFrac = SUMDTT / (P1 + 5. * (DOPT - TBASE) + P3 + DSGFT)
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+!             VegFrac = SUMDTT / (P1 + 20. * (DOPT - TBASE) + DSGFT)
+!              VegFrac = SUMDTT / (P1 + 20. * (DOPT - TBASE))
+! 5/30/2007 CHP Estimate of total time is way off for EAAMOD runs,
+!     try using 25* instead of 20*
+              VegFrac = SUMDTT / (P1 + 25. * (DOPT - TBASE))
+
+              IF (SUMDTT .LT. P1) RETURN      
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY          
+              ISTAGE = 2
+              SIND   = 0.0
+
+
+      !-----------------------------------------------------------------
+      !       ISTAGE = 2 - End of Juvenile Stage to Tassel Initiation
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 2) THEN
+              !NDAS - number of days after sowing
+              NDAS   = NDAS + 1       
+              !XSTAGE - noninteger growth stage (1-1.5)
+              XSTAGE = 1.0 + 0.5*SIND !      Used to compute N demand.
+
+              PDTT = DTT
+              IF (ISWWAT .EQ. 'N') THEN    
+                  DUMMY = DUMMY + 1       
+              ENDIF
+ 
+              IF (DUMMY .EQ. 1) THEN          
+                  PDTT = SUMDTT - P1          
+              ENDIF                           
+
+!             chp 9/23/2004
+!             See note for VegFrac under ISTAGE = 1, above
+!             VegFrac = SUMDTT / (P1 + 5.0 * (DOPT - TBASE))
+!             don't know value of P3 yet
+!             VegFrac = SUMDTT / (P1 + 5. * (DOPT - TBASE) + P3 + DSGFT)
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+!             VegFrac = SUMDTT / (P1 + 20. * (DOPT - TBASE) + DSGFT)
+!              VegFrac = SUMDTT / (P1 + 20. * (DOPT - TBASE))
+! 5/30/2007 CHP Estimate of total time is way off for EAAMOD runs,
+!     try using 25* instead of 20*
+              VegFrac = MAX(VegFrac,SUMDTT / (P1 + 25. *(DOPT - TBASE)))
+
+              !RATEIN - floral rate of development driven  by daylength
+              ! and photoperiod sensitivity value for maize (different 
+              ! for SG, ML
+              !TWILEN = AMAX1 (TWILEN,P2O)
+
+              IF (TWILEN .GT. P2O) THEN
+                RATEIN = 1.0/(DJTI+P2*(TWILEN-P2O))  
+              ELSE
+                RATEIN = 1.0 / DJTI
+              ENDIF
+              PDTT   = 1.0   
+              SIND = SIND + RATEIN*PDTT
+              !Return if panicle initiation has not been reached
+              IF (SIND .LT. 1.0) RETURN           
+
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY          
+              ISTAGE = 3
+              XNTI   = SUMDTT/43.0
+           !Next 2 lines: Change implemented at CIMMYT 1999 - JTR,US
+              TLNO    = SUMDTT/(PHINT*0.5)+ 5.0           
+              P3      = ((TLNO + 0.5) * PHINT) - SUMDTT 
+              XNTI    = XN
+
+!             chp 5/11/2005
+              SUMDTT_2 = SUMDTT   !SUMDTT_2 = P1 + P2
+              VegFrac = MAX(VegFrac,SUMDTT_2 / (SUMDTT_2 + P3 + DSGFT))
+
+              SUMDTT  = 0.0
+
+!             chp 9/23/2004, removed 5/11/2005
+!              VegFrac = 1.0
+ 
+      !-----------------------------------------------------------------
+      !       ISTAGE = 3 - Tassel Initiation to End of Leaf Growth
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 3) THEN
+              ! NDAS - number of days after sowing
+              NDAS   = NDAS + 1            
+              ! XSTAGE - noninteger growth stage (1.5-4.5)
+              !    Used to compute N demand.
+              XSTAGE = 1.5 + 3.0*SUMDTT/P3 
+
+!             chp 9/23/2004
+!             For P model, we need to estimate the fraction of time 
+!             completed between tassel initiation and physiological 
+!             maturity, SeedFrac.  
+!             CHP 5/11/2005 Extend VegFrac thru stage 4
+!             SeedFrac = SUMDTT / (P3 + DSGFT + P5)
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+!             VegFrac = (SUMDTT + SUMDTT_2) / (SUMDTT_2 + P3 + DSGFT)
+              VegFrac = MAX(VegFrac,(SUMDTT + SUMDTT_2) / (SUMDTT_2+P3))
+
+              IF (SUMDTT .LT. P3) RETURN
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY
+              ISDATE = YRDOY      
+              ISTAGE = 4
+              SUMDTT = SUMDTT - P3
+              IDURP  = 0
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+              VegFrac = 1.0
+
+      !-----------------------------------------------------------------
+      !       ISTAGE = 4 - End of Leaf Growth to Beginning Effective Gra
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 4) THEN
+              NDAS = NDAS + 1
+              IDURP  = IDURP + 1
+              ! Determine beginning of effective grain filling period fo
+              !  maize.  Silking to beginning EFG is assumed to be 170 G
+              XSTAGE = 4.5+5.5*SUMDTT/(P5*0.95)
+
+!             chp 9/23/2004, 5/11/2005
+!             SeedFrac = (SUMDTT + P3) / (P3 + DSGFT + P5)
+!              VegFrac = (SUMDTT + SUMDTT_2 + P3) / (SUMDTT_2 + P3+DSGFT)
+!              VegFrac = AMIN1(VegFrac, 1.0)
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+              SeedFrac = SUMDTT / P5
+
+              IF (SUMDTT .LT. DSGFT) RETURN
+
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+
+              ! When Silking phase ends and beginning of effective grain
+              !  filling begins.  Compute grains per plant, ears per pla
+              !  and barrenness
+
+              PSKER = SUMP*1000.0/IDURP*3.4/5.0
+              GPP   = G2*PSKER/7200.0 + 50.0
+              GPP   = AMIN1 (GPP, G2)
+              GPP   = AMAX1 (GPP,0.0)
+              EARS  = PLTPOP
+
+              !Determine barrenness for maize
+              GPP = AMAX1 (GPP,51.0)
+             !
+             ! Barreness (mod. US and PWW, 7-21-98)
+             ! Barreness function based on stress (PSKER f(SUMP))
+             ! Smoothing function for ear number reduction
+             !
+              IF (GPP .LT. G2*0.15) THEN
+                  EARS = PLTPOP*(GPP/(G2*0.15))**0.33
+              ELSE
+                  !
+                  ! CIMMYT - US & JTR revised barreness function
+                  !   
+                  IF (PLTPOP .GT. 12.0) THEN
+                  !
+                  ! Barreness from high population
+                  !
+                      IF (GPP .LT. G2*0.5) THEN
+                   !       ABSTRES = AMAX1 (SI1(3), SI3(3))
+                      !
+                      !    Barreness effect with min. N and H2O stress
+                      !
+                   !       IF (ABSTRES .LT. 0.25) THEN
+                              BARFAC = 0.0085*(1.0-GPP/G2)*PLTPOP**1.5
+                              EARS = PLTPOP*(GPP/(G2*0.50))**BARFAC
+                   !       ENDIF
+                      ENDIF
+                  ENDIF
+              ENDIF
+
+              EARS           = AMAX1 (EARS,0.0)
+              STGDOY(ISTAGE) = YRDOY
+              ISTAGE = 5
+
+!             CHP 5/11/2005
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+!              VegFrac = 1.0
+
+      !-----------------------------------------------------------------
+      !       ISTAGE = 5 - Beginning to end of effective grain filling p
+      !-----------------------------------------------------------------
+
+          ELSEIF (ISTAGE .EQ. 5) THEN
+              NDAS = NDAS + 1
+              XSTAGE = 4.5 + 5.5*SUMDTT/P5
+          
+!             chp 9/23/2004, 5/11/2005
+!             SeedFrac = (SUMDTT + P3) / (P3 + DSGFT + P5)
+          
+!             CHP 5/25/2007 Move inflection point back to end of stage 3
+!             SeedFrac = (SUMDTT - DSGFT) / (P5 - DSGFT)
+              SeedFrac = SUMDTT / P5
+          
+              IF (SUMDTT .LT. P5*0.95) RETURN  !End of EFP assumed to be 95%
+              !-------------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Variables
+              !-------------------------------------------------------------
+              STGDOY (ISTAGE) = YRDOY
+              ISTAGE = 6
+
+      !-----------------------------------------------------------------
+      !       ISTAGE = 6 - End Effective Grain Filling to Physiological 
+      !-----------------------------------------------------------------
+          ELSEIF (ISTAGE .EQ. 6) THEN
+              IF (DTT .LT. 2.0) SUMDTT = P5
+
+!             chp 9/23/2004, 5/11/2005
+!             SeedFrac = (SUMDTT + P3) / (P3 + DSGFT + P5)
+              SeedFrac = (SUMDTT - DSGFT) / (P5 - DSGFT)
+
+!     CHP 5/25/2007 Move inflection point back to end of stage 3
+!             SeedFrac = (SUMDTT - DSGFT) / (P5 - DSGFT)
+              SeedFrac = SUMDTT / P5
+
+              IF (SUMDTT .LT. P5)  RETURN
+              !---------------------------------------------------------
+              !   New Growth Stage Occurred Today. Initialize Some Varia
+              !---------------------------------------------------------
+              STGDOY(ISTAGE) = YRDOY
+              MDATE          = YRDOY
+              !ISTAGE = 7
+              ISTAGE = 10  !CHP - Prevents growth parameters from being
+                           ! set back to initial values.  08/11/03
+              CUMDTT = 0.0
+              DTT    = 0.0
+              IF (PLTPOP .NE. 0.0) THEN
+                  IF (GPP .LE. 0.0) THEN
+                      GPP = 1.0
+                  ENDIF
+              ENDIF
+
+!             chp 5/11/2005
+              SeedFrac = 1.0
+! ----------------------------------------------------------------------
+          ENDIF            ! End ISTAGE Loop
+! ----------------------------------------------------------------------
+
+      ENDIF  ! End DYNAMIC STRUCTURE
+      RETURN
+
+!-----------------------------------------------------------------------
+!     Format Strings
+!-----------------------------------------------------------------------
+
+1399  FORMAT (10X,'Seed ran out of metabolite due to deep planting')
+3500  FORMAT ('Crop failure because of lack of germination ',
+     &           'within 15 days of sowing')
+
+      END SUBROUTINE MZ_PHENOL
+
+! DYNAMIC    Modular control
+! ABSTRES    Maximum of water stress stage 1 and 3
+! ACOEF      Coefficient
+! BARFAC     Factor to reduce ears/plant under high populations (barrenn
+! C1         Used to comptue daylength (computed in maize.for)
+! CUMDEP     Cumulative depth of soil, cm
+! CUMDTT     Cumulative daily thermal time after germination, C
+! DAYL       Daylength, hours
+! DEC        Used to compute daylength
+! DGET       Threshold defined as growing degree days between germination and emergence.
+!            If this threshold is exceeded, crop failure ocurrs.
+! DJTI       Minimum days from end of juvenile stage to tassel initiation if the cultivar
+!            is not photoperiod sensitive, DJTI
+! DLAYR(L)   Soil thickness in layer L (cm)
+! DLV        Used to compute daylength
+! DOPT       Development optimum temperature
+! DSGFT      GDD from silking to effective grain filling period, C
+! DSGT       Maximum number of days from sowing to germination before crop failure occurs.
+! DTT        Growing degree days today, C
+! DUMMY      Temporary variable
+! EARS       Ears per m2, computed here and used in grosub.
+! ECONO      Ecotype number for the variety (not really used in maize ye
+! ERR        Determines if error in reading file (0=ok, 1=error)
+! ERRKEY     Variable containing routine where error occurred
+! (ERRKEY='MZ_PHENL')
+! FILEC      Filename of .SPE or species file
+! FILEIO     Filename containing model inputs (IBSNAT35.INP)
+! FOUND      Indicates if a section in a file is found
+! G2         Potential kernel number, kernels/plant
+! G3         Potential kernel growth rate mg/kernel/day
+! GDDE       Growing degree days per cm seed depth required for emergence, GDD/cm
+! GPP        Grain number per plant, grains/plant
+! I          Loop counter
+! IDETO      Screen output switch (Y/N)
+! IDURP      Duration of ISTAGE 4, calendar days
+! ISTAGE     Growth stage
+! ISWWAT     Water balance switch (Y/N)
+! LEAFNO     Number of oldest leaf per plant (same as XN)
+! L          Loop counter
+! L0         Temporary soil layer number
+! LINC       Indicates if a line is a good line
+! LL(NL)     Soil water lower limit, cm3/cm3
+! LNUM       Line number in an input file
+! LUNIO      Logical input number for model input file
+! LUNIO      Assign value to LUNIO for local use.
+! MDATE      Year and day of year of maturity
+! NDAS       Number of days after sowing
+! NLAYR      Number of soil layers
+! NOUTDO     Output file number
+! P1         GDD from seedling emergence to end of juvenile phase, C
+! P2         Photoperiod sensitivity coefficient, 1/hr
+! P2O        Minimum daylength below which daylength does not affect dev
+! P3         Cumulative GDD required to complete ISTAGE 3, C
+! P5         GDD from silking to physiological maturity, C
+! P9         Growing degree days from germination to emergence, C
+! PATHCR     Pathname of species file
+! DTT
+! PHINT      Phyllochron interval. Number of GDD required for new leaf e
+! PLTPOP     Plant population, no./m2
+! PSKER      Average rate of photosynthesis during ISTAGE 4
+! RATEIN     Rate of floral induction
+! ROPT       Second optimum temperature for development from species fil
+! SDEPTH     Sowing depth, cm
+! SECTION    Temporary variable used to identify section in a file
+! S1         Used to compute daylength (computed in maize.for)
+! SI1(6)     Water stress during a growth stage used for output
+! SI3(6)     Water stress during a growth stage used for output
+! SIND       Summed photoperiod induction rate
+! SNDN       Sun down
+! SNOW       Snow, mm
+! SNUP       Sun up
+! SRAD       Daily solar radiation, MJ/m2/day
+! STGDOY(20) Year and day of year that a growth stage occurred on
+! SUMDTT     Sum of GDD for a given stage, C
+! SUMP       Cumulative plant growth during ISTAGE 4, g/plant
+! SW(NL)     Soil water content in layer, cm3/cm3
+! SWCG       Minimum soil water available required for germination to occur, cm3/cm3
+! SWSD       Modified soil water content for computing emergence
+! TBASE      Base temperature for development from ecotype file, C
+! TDSOIL     Weighted average soil temperature, C
+! TEMPCN     Crown temperature when snow is present and TMIN < 0. This f
+!            computes crown temperature as higher than TMIN, C.
+! TEMPCR     Crown temperature, C
+! TEMPCX     Crown temperature for maximum development rate, C
+! TH         Intermedate variable for computing GDD today, C
+! TLNO       Total leaf numbers that will eventually develop
+! TMAX       Daily maximum temperature, C
+! TMIN       Daily minimum temperature, C
+! TMSOIL     Weighted average soil temperature, C
+! TNSOIL     Weighted average soil temperture, C
+! TOPT       Optimum temperature for development from species file, C
+! TWILEN     Twilight definition of daylength
+! VARNO      Variety identification number
+! VRNAME     Variety name
+! WTHADJ(2,8)Note, used here, but not passed into maize.for from cropgro
+! WMODB*1    Note, used here, but not passed into maize.for from cropgro
+! XLAT       Latitude
+! XN         Number of oldest expanding leaf
+! XNTI       Number of leaves at tassel initiation (used in grosub)
+! XS         Temporary snow depth variable
+! XSTAGE     Non-integer growth stage indicator
+! YRDOY      Year and day of year
+! YREMRG     Year and day of year of emergence (passed back to water bal
+! YRSIM      Year and day of year of first day of simulation
+
diff --git a/lib/maize/mz.o b/lib/maize/mz.o
new file mode 100644
index 0000000000000000000000000000000000000000..b7bc856639eb3fa070c3515135f98f7f7732ac1a
GIT binary patch
literal 36752
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

literal 0
HcmV?d00001

diff --git a/models/maturity.go b/models/maturity.go
new file mode 100644
index 0000000..bbf4c98
--- /dev/null
+++ b/models/maturity.go
@@ -0,0 +1,114 @@
+package models
+
+import (
+	"strconv"
+	"time"
+
+	validation "github.com/go-ozzo/ozzo-validation"
+
+	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence/entities"
+)
+
+type CultivarRequest struct {
+	Name string `json:"name"`
+}
+
+type Cultivar struct {
+	VarName string  `json:"var_name"`
+	VarNum  string  `json:"var_num"`
+	EcoNum  string  `json:"eco_num"`
+	P1      float64 `json:"p1"`
+	P2      float64 `json:"p2"`
+	P5      float64 `json:"p5"`
+	G2      float64 `json:"g2"`
+	G3      float64 `json:"g3"`
+	PHINT   float64 `json:"phint"`
+}
+
+type CultivarResponse struct {
+	Cultivars []Cultivar `json:"cultivars"`
+}
+
+func CreateCultivar(c entities.Cultivar) Cultivar {
+	return Cultivar{
+		VarName: c.VarName,
+		VarNum:  c.VarNum,
+		EcoNum:  c.EcoNum,
+		P1:      c.P1,
+		P2:      c.P2,
+		P5:      c.P5,
+		G2:      c.P2,
+		G3:      c.G3,
+		PHINT:   c.PHINT,
+	}
+}
+
+type CornMaturityRequest struct {
+	Latitude  float64   `json:"latitude"`
+	Longitude float64   `json:"longitude"`
+	PlantDate time.Time `json:"plant_date"`
+	VarName   string    `json:"var_name"`
+	VarNum    string    `json:"var_num"`
+	EcoNum    string    `json:"eco_num"`
+	P1        float64   `json:"p1"`
+	P2        float64   `json:"p2"`
+	P5        float64   `json:"p5"`
+	G2        float64   `json:"g2"`
+	G3        float64   `json:"g3"`
+	PHINT     float64   `json:"phint"`
+}
+
+type CornMaturityResponse struct {
+	HarvestDate time.Time `json:"harvest_date"`
+}
+
+func (r CornMaturityRequest) Validate() error {
+
+	return validation.ValidateStruct(&r,
+		validation.Field(&r.Latitude, validation.Required, validation.Min(-90.0), validation.Max(90.0)),
+		validation.Field(&r.Longitude, validation.Required, validation.Min(-180.0), validation.Max(180.0)),
+	)
+}
+
+func BuildCornMaturityRequest(ctx common.DawnCtx) CornMaturityRequest {
+
+	latitude, _ := strconv.ParseFloat(ctx.FiberCtx.Query("latitude", "-100000.0"), 64)
+	longitude, _ := strconv.ParseFloat(ctx.FiberCtx.Query("longitude", "-100000.0"), 64)
+
+	varName := ctx.FiberCtx.Query("var_name", "")
+	varNum := ctx.FiberCtx.Query("var_num", "")
+	ecoNum := ctx.FiberCtx.Query("eco_num", "")
+	plant_month, _ := strconv.Atoi(ctx.FiberCtx.Query("plant_month", "0"))
+	plant_day, _ := strconv.Atoi(ctx.FiberCtx.Query("plant_day", "0"))
+
+	plant_date := time.Date(time.Now().Year(), time.Month(plant_month), plant_day, 0, 0, 0, 0, time.UTC)
+
+	p1, _ := strconv.ParseFloat(ctx.FiberCtx.Query("p1", "0"), 64)
+	p2, _ := strconv.ParseFloat(ctx.FiberCtx.Query("p2", "0"), 64)
+	p5, _ := strconv.ParseFloat(ctx.FiberCtx.Query("p5", "0"), 64)
+	g2, _ := strconv.ParseFloat(ctx.FiberCtx.Query("g2", "0"), 64)
+	g3, _ := strconv.ParseFloat(ctx.FiberCtx.Query("g3", "0"), 64)
+	phint, _ := strconv.ParseFloat(ctx.FiberCtx.Query("phint", "0"), 64)
+	rNew := CornMaturityRequest{
+		Latitude:  latitude,
+		Longitude: longitude,
+		VarName:   varName,
+		VarNum:    varNum,
+		EcoNum:    ecoNum,
+		P1:        p1,
+		P2:        p2,
+		P5:        p5,
+		G2:        g2,
+		G3:        g3,
+		PHINT:     phint,
+		PlantDate: plant_date,
+	}
+
+	if rNew.Validate() != nil {
+		panic(config.BAD_REQUEST)
+	}
+	return rNew
+
+}
diff --git a/models/seeds.go b/models/seeds.go
index c837463..1b6817b 100644
--- a/models/seeds.go
+++ b/models/seeds.go
@@ -1,68 +1,27 @@
 package models
 
-import (
-	"strconv"
-	"time"
-
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
-
-	validation "github.com/go-ozzo/ozzo-validation"
-	"github.com/gofiber/fiber/v2"
-)
-
-type SeedListRequest struct {
-	Product string `json:"product"`
-}
-
-type SeedListResponse struct {
-	Seeds []string `json:"seeds"`
-}
-
-type CornMaturityRequest struct {
-	Latitude  float64 `json:"latitude"`
-	Longitude float64 `json:"longitude"`
-	Gdds      float64 `json:"gdds"`
-	Month     int     `json:"month"`
-	Date      int     `json:"date"`
-}
-
-type CornMaturityResponse struct {
-	Date             time.Time `json:"date"`
-	GDD              float64   `json:"gdd"`
-	ClosestGDD       float64   `json:"closest_gdd"`
-	ClosestLatitude  float64   `json:"closest_latitude"`
-	ClosestLongitude float64   `json:"closest_longitude"`
-}
-
-func (r CornMaturityRequest) Validate() error {
-	return validation.ValidateStruct(&r,
-		validation.Field(&r.Latitude, validation.Required, validation.Min(-90.0), validation.Max(90.0)),
-		validation.Field(&r.Longitude, validation.Required, validation.Min(-180.0), validation.Max(180.0)),
-		validation.Field(&r.Gdds, validation.Required, validation.Min(0.0), validation.Max(6000.0)),
-		validation.Field(&r.Month, validation.Required, validation.Min(1), validation.Max(12)),
-		validation.Field(&r.Date, validation.Required, validation.Min(1), validation.Max(31)),
-	)
-}
-
-func BuildCornMaturityRequest(c *fiber.Ctx) CornMaturityRequest {
-
-	lat, _ := strconv.ParseFloat(c.Query("latitude", "-10000.0"), 64)
-	lon, _ := strconv.ParseFloat(c.Query("longitude", "-10000.0"), 64)
-	month, _ := strconv.Atoi(c.Query("month", "0"))
-	date, _ := strconv.Atoi(c.Query("date", "0"))
-	gdds, _ := strconv.ParseFloat(c.Query("gdds", "-10000.0"), 64)
-
-	newRequest := CornMaturityRequest{
-		Latitude:  lat,
-		Longitude: lon,
-		Gdds:      gdds,
-		Month:     month,
-		Date:      date,
-	}
-
-	if e := newRequest.Validate(); e != nil {
-		panic(config.BAD_REQUEST.AddLogDetails(e.Error()))
-	}
-
-	return newRequest
-}
+// type SeedListRequest struct {
+// 	Product string `json:"product"`
+// }
+
+// type SeedListResponse struct {
+// 	Seeds []string `json:"seeds"`
+// }
+
+// type CornMaturityRequest struct {
+// 	Latitude  float64 `json:"latitude"`
+// 	Longitude float64 `json:"longitude"`
+// 	Gdds      float64 `json:"gdds"`
+// 	Month     int     `json:"month"`
+// 	Date      int     `json:"date"`
+// }
+
+// func (r CornMaturityRequest) Validate() error {
+// 	return validation.ValidateStruct(&r,
+// 		validation.Field(&r.Latitude, validation.Required, validation.Min(-90.0), validation.Max(90.0)),
+// 		validation.Field(&r.Longitude, validation.Required, validation.Min(-180.0), validation.Max(180.0)),
+// 		validation.Field(&r.Gdds, validation.Required, validation.Min(0.0), validation.Max(6000.0)),
+// 		validation.Field(&r.Month, validation.Required, validation.Min(1), validation.Max(12)),
+// 		validation.Field(&r.Date, validation.Required, validation.Min(1), validation.Max(31)),
+// 	)
+// }
diff --git a/persistence/entities/gdd.go b/persistence/entities/gdd.go
index f17aff3..62ba7c9 100644
--- a/persistence/entities/gdd.go
+++ b/persistence/entities/gdd.go
@@ -18,6 +18,8 @@ type Gdd struct {
 	Year       int                `bson:"year,omitempty"`
 	MinTemps   []float64          `bson:"min_temps,omitempty"`
 	MaxTemps   []float64          `bson:"max_temps,omitempty"`
+	SRAD       []float64          `bson:"srad,omitempty"`
+	Precip     []float64          `bson:"precip,omitempty"`
 	Location   Location           `bson:"location,omitempty"`
 }
 
@@ -38,5 +40,6 @@ type CfsGdd struct {
 	MaxTemps []float64          `bson:"max_temps,omitempty"`
 	VarMin   []float64          `bson:"var_mins,omitempty"`
 	VarMax   []float64          `bson:"var_maxs,omitempty"`
+	Srad     []float64          `bson:"srad,omitempty"`
 	Date     primitive.DateTime `bson:"date,omitempty"`
 }
diff --git a/persistence/entities/maturity.go b/persistence/entities/maturity.go
new file mode 100644
index 0000000..c0eb825
--- /dev/null
+++ b/persistence/entities/maturity.go
@@ -0,0 +1,13 @@
+package entities
+
+type Cultivar struct {
+	VarName string  `bson:"var_name"`
+	VarNum  string  `bson:"var_num"`
+	EcoNum  string  `bson:"eco_num"`
+	P1      float64 `bson:"p1"`
+	P2      float64 `bson:"p2"`
+	P5      float64 `bson:"p5"`
+	G2      float64 `bson:"g2"`
+	G3      float64 `bson:"g3"`
+	PHINT   float64 `bson:"phint"`
+}
diff --git a/persistence/mongodb.go b/persistence/mongodb.go
index 0966ac4..da70349 100644
--- a/persistence/mongodb.go
+++ b/persistence/mongodb.go
@@ -11,6 +11,7 @@ import (
 
 	"github.com/bradfitz/slice"
 	"go.mongodb.org/mongo-driver/bson"
+	"go.mongodb.org/mongo-driver/bson/primitive"
 	"go.mongodb.org/mongo-driver/mongo/options"
 )
 
@@ -21,7 +22,7 @@ func buildLocationRequest(location entities.Location, year *int) bson.M {
 			"location": bson.M{
 				"$nearSphere": bson.M{
 					"$geometry":    location,
-					"$maxDistance": 5000,
+					"$maxDistance": 150000,
 				},
 			},
 			"year": *year,
@@ -31,7 +32,7 @@ func buildLocationRequest(location entities.Location, year *int) bson.M {
 			"location": bson.M{
 				"$nearSphere": bson.M{
 					"$geometry":    location,
-					"$maxDistance": 5000,
+					"$maxDistance": 150000,
 				},
 			},
 		}
@@ -148,6 +149,7 @@ func CfsFindAllByLocation(location entities.Location) entities.CfsGdd {
 
 	var g entities.CfsGdd
 	err := coll.FindOne(common.Ctx, filter).Decode(&g)
+
 	if err != nil {
 		panic(config.NO_DATA_FOUND)
 	}
@@ -235,3 +237,48 @@ func FindSeeds(product string) []entities.Seed {
 
 	return results
 }
+
+func FindCultivarByName(name string) entities.Cultivar {
+	coll := common.DB.Collection("dssat")
+
+	filter := bson.M{
+		"var_name": bson.M{
+			"$regex": primitive.Regex{Pattern: name, Options: "i"},
+		},
+	}
+
+	var results entities.Cultivar
+
+	err := coll.FindOne(common.Ctx, filter).Decode(&results)
+	if err != nil {
+		panic(config.NO_DATA_FOUND)
+	}
+
+	return results
+}
+
+func FindCultivarsByName() []entities.Cultivar {
+	coll := common.DB.Collection("dssat")
+
+	var results []entities.Cultivar
+
+	options := options.Find()
+
+	cursor, err := coll.Find(common.Ctx, bson.D{}, options)
+	if err != nil {
+		panic(config.NO_DATA_FOUND)
+	}
+
+	for cursor.Next(context.TODO()) {
+
+		var elem entities.Cultivar
+		err := cursor.Decode(&elem)
+		if err != nil {
+			panic(config.NO_DATA_FOUND)
+		}
+
+		results = append(results, elem)
+	}
+
+	return results
+}
diff --git a/services/maturity_service.go b/services/maturity_service.go
new file mode 100644
index 0000000..686b741
--- /dev/null
+++ b/services/maturity_service.go
@@ -0,0 +1,147 @@
+package services
+
+import (
+	"encoding/json"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"math/rand"
+	"os"
+	"os/exec"
+	"strconv"
+	"strings"
+	"time"
+
+	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence"
+	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence/entities"
+)
+
+type CornMaturityConfig struct {
+	PlantDate int       `json:"plant_date"`
+	Tmins     []float64 `json:"tmins"`
+	Tmaxs     []float64 `json:"tmaxs"`
+	Srads     []float64 `json:"srads"`
+	Units     string    `json:"units"`
+}
+
+func GetCultivars(ctx common.DawnCtx, request models.CultivarRequest) models.CultivarResponse {
+	if request.Name != "" {
+		elem := persistence.FindCultivarByName(request.Name)
+		cultivar := models.CreateCultivar(elem)
+		return models.CultivarResponse{
+			Cultivars: []models.Cultivar{cultivar},
+		}
+	} else {
+		elems := persistence.FindCultivarsByName()
+		var cultivars []models.Cultivar
+		for _, e := range elems {
+			cultivars = append(cultivars, models.CreateCultivar(e))
+		}
+		return models.CultivarResponse{
+			Cultivars: cultivars,
+		}
+	}
+}
+
+func getFullYearData(ctx common.DawnCtx, latitude float64, longitude float64, plantDate time.Time) CornMaturityConfig {
+	location := entities.Location{
+		Type:        "Point",
+		Coordinates: []float64{longitude, latitude},
+	}
+
+	observed := persistence.CurrentGddFindFirstByYearAndLocation(ctx, location)
+	predicted := persistence.CfsFindAllByLocation(location)
+
+	tmins := append(observed.MaxTemps, predicted.MaxTemps...)
+	tmaxs := append(observed.MinTemps, predicted.MinTemps...)
+	srads := append(observed.SRAD, predicted.Srad...)
+
+	pd := plantDate.YearDay()
+
+	if plantDate.Year()%4 == 0 && plantDate.Year()%100 != 0 || plantDate.Year()%400 == 0 {
+		pd -= 1
+	}
+
+	return CornMaturityConfig{
+		PlantDate: pd,
+		Tmins:     tmins,
+		Tmaxs:     tmaxs,
+		Srads:     srads,
+		Units:     "F",
+	}
+}
+
+func CalculateMaturity(ctx common.DawnCtx, request models.CornMaturityRequest) models.CornMaturityResponse {
+
+	cfg := getFullYearData(ctx, request.Latitude, request.Longitude, request.PlantDate)
+	fileId := rand.Intn(99-10) + 10
+
+	file, _ := json.MarshalIndent(cfg, "", " ")
+
+	_ = ioutil.WriteFile("lib/maize/"+strconv.Itoa(fileId)+".json", file, 0644)
+
+	original, err := os.Open("lib/maize/DSSAT.INP")
+	if err != nil {
+		panic(err)
+	}
+	new, err := os.Create("lib/maize/DSSAT" + strconv.Itoa(fileId) + ".INP")
+	if err != nil {
+		panic(err)
+	}
+	_, err = io.Copy(new, original)
+	if err != nil {
+		panic(err)
+	}
+	new.Close()
+	original.Close()
+
+	f, err := os.OpenFile("lib/maize/DSSAT"+strconv.Itoa(fileId)+".INP", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
+	if err != nil {
+		panic(err)
+	}
+
+	cultivarLine := fmt.Sprintf("%s %s             %s %s %s %s %s %s %s",
+		request.VarNum,
+		request.VarName,
+		request.EcoNum,
+		fmt.Sprintf("%f", request.P1)[:5],
+		fmt.Sprintf("%f", request.P2)[:5],
+		fmt.Sprintf("%f", request.P5)[:5],
+		fmt.Sprintf("%f", request.G2)[:5],
+		fmt.Sprintf("%f", request.G3)[:5],
+		fmt.Sprintf("%f", request.PHINT)[:5],
+	)
+
+	if _, err = f.WriteString(cultivarLine); err != nil {
+		panic(err)
+	}
+	f.Close()
+
+	cmd := exec.Command("bash", "-c", "python3 execute.py --input "+strconv.Itoa(fileId)+".json --config "+strconv.Itoa(fileId)+" --predicted")
+	cmd.Dir = "./lib/maize"
+	out, _ := cmd.Output()
+
+	value := strings.TrimSpace(string(out))
+	if value == "-1" || strings.HasPrefix(value, "A") {
+		panic(config.BAD_REQUEST)
+	}
+
+	year, _ := strconv.Atoi(value[:4])
+	doy, _ := strconv.Atoi(value[4:])
+
+	date := time.Date(year, time.January, 1, 0, 0, 0, 0, time.UTC)
+	if year%4 == 0 && year%100 != 0 || year%400 == 0 {
+		doy -= 1
+	}
+	date = date.AddDate(0, 0, doy)
+
+	os.Remove("lib/maize/" + strconv.Itoa(fileId) + ".json")
+	os.Remove("lib/maize/DSSAT" + strconv.Itoa(fileId) + ".INP")
+
+	return models.CornMaturityResponse{
+		HarvestDate: date,
+	}
+}
diff --git a/services/seed_service.go b/services/seed_service.go
index d1a9eed..c26b259 100644
--- a/services/seed_service.go
+++ b/services/seed_service.go
@@ -1,69 +1,69 @@
 package services
 
-import (
-	"math"
-	"time"
+// import (
+// 	"math"
+// 	"time"
 
-	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models/enums"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence"
-	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/utils"
+// 	"gitlab.cs.umd.edu/dawn/dawn-go-common/common"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/config"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/models/enums"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/persistence"
+// 	"gitlab.cs.umd.edu/dawn/go-backend/dawn-gdd/utils"
 
-	"github.com/gofiber/fiber/v2"
-)
+// 	"github.com/gofiber/fiber/v2"
+// )
 
-func GetSeedList(c *fiber.Ctx, request models.SeedListRequest) models.SeedListResponse {
-	product := enums.GetProductFromString(request.Product)
-	if product.Name != enums.ProductType.CORN.Name && product.Name != enums.ProductType.SOYBEAN.Name {
-		panic(config.INVALID_PRODUCT(request.Product))
-	}
-	seeds := persistence.FindSeeds(product.Name)
-	var results []string
-	for i := 0; i < len(seeds); i++ {
-		results = append(results, seeds[i].Seed)
-	}
-	return models.SeedListResponse{Seeds: results}
-}
+// func GetSeedList(c *fiber.Ctx, request models.SeedListRequest) models.SeedListResponse {
+// 	product := enums.GetProductFromString(request.Product)
+// 	if product.Name != enums.ProductType.CORN.Name && product.Name != enums.ProductType.SOYBEAN.Name {
+// 		panic(config.INVALID_PRODUCT(request.Product))
+// 	}
+// 	seeds := persistence.FindSeeds(product.Name)
+// 	var results []string
+// 	for i := 0; i < len(seeds); i++ {
+// 		results = append(results, seeds[i].Seed)
+// 	}
+// 	return models.SeedListResponse{Seeds: results}
+// }
 
-func GetCornMaturityDate(ctx common.DawnCtx, request models.CornMaturityRequest) models.CornMaturityResponse {
+// func GetCornMaturityDate(ctx common.DawnCtx, request models.CornMaturityRequest) models.CornMaturityResponse {
 
-	gddRequest := models.GddRequest{
-		Year:       time.Now().Year(),
-		Product:    "corn",
-		Latitude:   request.Latitude,
-		Longitude:  request.Longitude,
-		Accumulate: false,
-	}
+// 	gddRequest := models.GddRequest{
+// 		Year:       time.Now().Year(),
+// 		Product:    "corn",
+// 		Latitude:   request.Latitude,
+// 		Longitude:  request.Longitude,
+// 		Accumulate: false,
+// 	}
 
-	gdds := GetFullYearGddValues(ctx, gddRequest)
-	closestValue := 0.0
-	closestIdx := 0
-	gdus := 0.0
+// 	gdds := GetFullYearGddValues(ctx, gddRequest)
+// 	closestValue := 0.0
+// 	closestIdx := 0
+// 	gdus := 0.0
 
-	startingDate := time.Date(time.Now().Year(), time.Month(request.Month), request.Date, 0, 0, 0, 0, time.UTC)
-	startingIdx := startingDate.Sub(time.Date(time.Now().Year(), time.January, 1, 0, 0, 0, 0, time.UTC))
-	startingIdxVal := int(startingIdx.Hours() / 24)
-	if isLeapYear(time.Now().Year()) {
-		startingIdxVal -= 1
-	}
+// 	startingDate := time.Date(time.Now().Year(), time.Month(request.Month), request.Date, 0, 0, 0, 0, time.UTC)
+// 	startingIdx := startingDate.Sub(time.Date(time.Now().Year(), time.January, 1, 0, 0, 0, 0, time.UTC))
+// 	startingIdxVal := int(startingIdx.Hours() / 24)
+// 	if isLeapYear(time.Now().Year()) {
+// 		startingIdxVal -= 1
+// 	}
 
-	for i := startingIdxVal; i < len(gdds.GddValues); i++ {
-		value := gdds.GddValues[i]
-		gdus += value
-		if math.Abs(gdus-request.Gdds) < math.Abs(closestValue-request.Gdds) {
-			closestValue = gdus
-			closestIdx = i
-		}
-	}
-	response := models.CornMaturityResponse{
-		Date:             utils.ConvertDateIdxToDate(closestIdx),
-		GDD:              request.Gdds,
-		ClosestGDD:       closestValue,
-		ClosestLatitude:  gdds.ClosestLatitude,
-		ClosestLongitude: gdds.ClosestLongitude,
-	}
-	return response
+// 	for i := startingIdxVal; i < len(gdds.GddValues); i++ {
+// 		value := gdds.GddValues[i]
+// 		gdus += value
+// 		if math.Abs(gdus-request.Gdds) < math.Abs(closestValue-request.Gdds) {
+// 			closestValue = gdus
+// 			closestIdx = i
+// 		}
+// 	}
+// 	response := models.CornMaturityResponse{
+// 		Date:             utils.ConvertDateIdxToDate(closestIdx),
+// 		GDD:              request.Gdds,
+// 		ClosestGDD:       closestValue,
+// 		ClosestLatitude:  gdds.ClosestLatitude,
+// 		ClosestLongitude: gdds.ClosestLongitude,
+// 	}
+// 	return response
 
-}
+// }
-- 
GitLab