4. Usecases¶
From some legacy model units of crop modeling platforms we show: - their representation in crop2ml format (metadata and algorithm) - transformation in fortran codes - Test of model units
1- Priestly-Taylor potential evapotranspiration of DSSAT model
1-1- DSSAT fortran code
! PETPT, Subroutine, J.T. Ritchie
! Calculates Priestly-Taylor potential evapotranspiration
!-----------------------------------------------------------------------
! REVISION HISTORY
! ??/??/19?? JR Written
! 11/04/1993 NBP Modified
! 10/17/1997 CHP Updated for modular format.
! 09/01/1999 GH Incorporated into CROPGRO
! 07/24/2006 CHP Use MSALB instead of SALB (includes mulch and soil
! water effects on albedo)
!-----------------------------------------------------------------------
! Called by: WATBAL
! Calls: None
SUBROUTINE PETPT( &
MSALB, SRAD, TMAX, TMIN, XHLAI,& ! inputs
EO) ! outputs
IMPLICIT NONE
! INPUT VARIABLES:
REAL MSALB, SRAD, TMAX, TMIN, XHLAI
! OUTPUT VARIABLES:
REAL EO
! LOCAL VARIABLES:
REAL ALBEDO, EEQ, SLANG, TD
! Should use TAVG here -- we have it from WEATHER variable!
! SSJ 9/18/2006
! TD = TAVG
! JWJ 2/15/2007 - Can't use TAVG unless coefficients in EEQ
! equation are recalibrated. Keep TD calc as it was
! developed.
TD = 0.60*TMAX+0.40*TMIN
IF (XHLAI .LE. 0.0) THEN
ALBEDO = MSALB
ELSE
ALBEDO = 0.23-(0.23-MSALB)*EXP(-0.75*XHLAI)
ENDIF
SLANG = SRAD*23.923
EEQ = SLANG*(2.04E-4-1.83E-4*ALBEDO)*(TD+29.0)
EO = EEQ*1.1
IF (TMAX .GT. 35.0) THEN
EO = EEQ*((TMAX-35.0)*0.05+1.1)
ELSE IF (TMAX .LT. 5.0) THEN
EO = EEQ*0.01*EXP(0.18*(TMAX+20.0))
ENDIF
EO = MAX(EO,0.0001)
RETURN
END SUBROUTINE PETPT
! PETPT VARIABLES:
! ALBEDO Reflectance of soil-crop surface (fraction)
! EEQ Equilibrium evaporation (mm/d)
! EO Potential evapotranspiration rate (mm/d)
! MSALB Soil albedo with mulch and soil water effects (fraction)
! SLANG Solar radiation
! SRAD Solar radiation (MJ/m2-d)
! TD Approximation of average daily temperature (ºC)
! TMAX Maximum daily temperature (°C)
! TMIN Minimum daily temperature (°C)
! XHLAI Leaf area index (m2[leaf] / m2[ground])
1-2- Creation of Crop2ML package
1-3- Crop2ML representation of model unit
4.1. metadata¶
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ModelUnit PUBLIC " " "https://raw.githubusercontent.com/AgriculturalModelExchangeInitiative/crop2ml/master/ModelUnit.dtd">
<ModelUnit name="PETPT" modelid="DSSAT.WheatModel.PETPT" timestep="1" version="1.0">
<Description>
<Title> PETPT, Subroutine, J.T. Ritchie, Calculates Priestly-Taylor potential evapotranspiration </Title>
<Authors>Kwang Soo Kim, luxkwang@snu.ac.kr </Authors>
<Institution>Seoul National University, Seoul, Korea</Institution>
<Reference>DSSAT 4.7; original fortran code was written by J.T. Ritchie </Reference>
<Abstract> See Document at DSSAT 4.7 source code in PETPT.for </Abstract>
</Description>
<Inputs>
<Input name="MSALB" description="Soil albedo with mulch and soil water effects (fraction)" datatype="DOUBLE" min="0" max="1" default="0.3" unit="" inputtype="variable" variablecategory="auxiliary" />
<Input name="SRAD" description="Solar radiation" datatype="DOUBLE" min="0" max="100" default="100" unit="MJ m-2 d-1" inputtype="variable" variablecategory="auxiliary" />
<Input name="TMAX" description="Maximum daily temperature" datatype="DOUBLE" min="-50" max="60" default="20" unit="°C" inputtype="variable" variablecategory="auxiliary" />
<Input name="TMIN" description="Minimum daily temperature" datatype="DOUBLE" min="-50" max="60" default="10" unit="°C" inputtype="variable" variablecategory="auxiliary" />
<Input name="XHLAI" description="Leaf area index" datatype="DOUBLE" min="0" max="10" default="3" unit="m2 m-2" inputtype="variable" variablecategory="state" />
</Inputs>
<Outputs>
<Output name="EO" description="Potential evapotranspiration rate" datatype="DOUBLE" min="0.0" max="1.0" unit="mm d-1" variablecategory="rate" />
</Outputs>
<Algorithm language="cyml" platform="" filename="algo/pyx/petpt.pyx">
</Algorithm>
<Parametersets>
<Parameterset name="Paramset1" description="some values in there" >
</Parameterset>
</Parametersets>
<Testsets>
<Testset name="Testset1" parameterset = "Paramset1" description="some values in there" >
<Test name ="test1">
<InputValue name="MSALB">0.3</InputValue>
<InputValue name="SRAD">100</InputValue>
<InputValue name="TMAX">20</InputValue>
<InputValue name="TMIN">10</InputValue>
<InputValue name="XHLAI">3</InputValue>
<OutputValue name="EO" precision ="2">19.01</OutputValue>
</Test>
</Testset>
</Testsets>
</ModelUnit>
4.2. Algorithm¶
cdef float ALBEDO, EEQ, SLANG, TD
TD = 0.60*TMAX + 0.40*TMIN
if (XHLAI <= 0.0):
ALBEDO = MSALB
else:
ALBEDO = 0.23 - (0.23-MSALB)*exp(-0.75*XHLAI)
SLANG = SRAD * 23.923
EEQ = SLANG * (2.04E-4 - 1.83E-4 * ALBEDO)*(TD+29.0)
EO = EEQ*1.1
if (TMAX > 35.0):
EO = EEQ*((TMAX-35.0)*0.05+1.1)
elif (TMAX < 5.0):
EO = EEQ*0.01*exp(0.18*(TMAX+20.0))
EO = max(EO, 0.0001)
1-4- Fortran code generated
SUBROUTINE petpt_(MSALB, &
SRAD, &
TMAX, &
TMIN, &
XHLAI, &
EO)
REAL, INTENT(OUT) :: EO
REAL:: ALBEDO
REAL:: EEQ
REAL:: SLANG
REAL:: TD
REAL, INTENT(IN) :: MSALB
REAL, INTENT(IN) :: SRAD
REAL, INTENT(IN) :: TMAX
REAL, INTENT(IN) :: TMIN
REAL, INTENT(IN) :: XHLAI
!- Description:
! - Model Name: PETPT, Subroutine, J.T. Ritchie, Calculates Priestly-Taylor potential evapotranspiration
! - Author: Kwang Soo Kim, luxkwang@snu.ac.kr
! - Reference: DSSAT 4.7; original fortran code was written by J.T. Ritchie
! - Institution: Seoul National University, Seoul, Korea
! - Abstract: See Document at DSSAT 4.7 source code in PETPT.for
!- inputs:
! - name: MSALB
! - description : Soil albedo with mulch and soil water effects (fraction)
! - datatype : DOUBLE
! - min : 0
! - max : 1
! - default : 0.3
! - unit :
! - inputtype : variable
! - variablecategory : auxiliary
! - name: SRAD
! - description : Solar radiation
! - datatype : DOUBLE
! - min : 0
! - max : 100
! - default : 100
! - unit : MJ m-2 d-1
! - inputtype : variable
! - variablecategory : auxiliary
! - name: TMAX
! - description : Maximum daily temperature
! - datatype : DOUBLE
! - min : -50
! - max : 60
! - default : 20
! - unit : °C
! - inputtype : variable
! - variablecategory : auxiliary
! - name: TMIN
! - description : Minimum daily temperature
! - datatype : DOUBLE
! - min : -50
! - max : 60
! - default : 10
! - unit : °C
! - inputtype : variable
! - variablecategory : auxiliary
! - name: XHLAI
! - description : Leaf area index
! - datatype : DOUBLE
! - min : 0
! - max : 10
! - default : 3
! - unit : m2 m-2
! - inputtype : variable
! - variablecategory : state
!- outputs:
! - name: EO
! - description : Potential evapotranspiration rate
! - datatype : DOUBLE
! - min : 0.0
! - max : 1.0
! - unit : mm d-1
! - variablecategory : rate
TD = 0.60 * TMAX + 0.40 * TMIN
IF(XHLAI .LE. 0.0) THEN
ALBEDO = MSALB
ELSE
ALBEDO = 0.23 - (0.23 - MSALB) * EXP(-0.75 * XHLAI)
END IF
SLANG = SRAD * 23.923
EEQ = SLANG * (2.04E-4 - 1.83E-4 * ALBEDO) * (TD + 29.0)
EO = EEQ * 1.1
IF(TMAX .GT. 35.0) THEN
EO = EEQ * ((TMAX - 35.0) * 0.05 + 1.1)
ELSE IF ( TMAX .LT. 5.0) THEN
EO = EEQ * 0.01 * EXP(0.18 * (TMAX + 20.0))
END IF
EO = MAX(EO, 0.0001)
END SUBROUTINE petpt_
1-5- Test in jupyterlab
[5]:
Program test_test1_PETPT
REAL:: MSALB
REAL:: SRAD
REAL:: TMAX
REAL:: TMIN
REAL:: XHLAI
REAL:: EO
MSALB = 0.3
SRAD = 100
TMAX = 20
TMIN = 10
XHLAI = 3
call petpt_(MSALB,SRAD,TMAX,TMIN,XHLAI,EO)
print *,EO
CONTAINS
SUBROUTINE petpt_(MSALB, &
SRAD, &
TMAX, &
TMIN, &
XHLAI, &
EO)
REAL, INTENT(OUT) :: EO
REAL:: ALBEDO
REAL:: EEQ
REAL:: SLANG
REAL:: TD
REAL, INTENT(IN) :: MSALB
REAL, INTENT(IN) :: SRAD
REAL, INTENT(IN) :: TMAX
REAL, INTENT(IN) :: TMIN
REAL, INTENT(IN) :: XHLAI
!- Description:
! - Model Name: PETPT, Subroutine, J.T. Ritchie, Calculates Priestly-Taylor potential evapotranspiration
! - Author: Kwang Soo Kim, luxkwang@snu.ac.kr
! - Reference: DSSAT 4.7; original fortran code was written by J.T. Ritchie
! - Institution: Seoul National University, Seoul, Korea
! - Abstract: See Document at DSSAT 4.7 source code in PETPT.for
!- inputs:
! - name: MSALB
! - description : Soil albedo with mulch and soil water effects (fraction)
! - datatype : DOUBLE
! - min : 0
! - max : 1
! - default : 0.3
! - unit :
! - inputtype : variable
! - variablecategory : auxiliary
! - name: SRAD
! - description : Solar radiation
! - datatype : DOUBLE
! - min : 0
! - max : 100
! - default : 100
! - unit : MJ m-2 d-1
! - inputtype : variable
! - variablecategory : auxiliary
! - name: TMAX
! - description : Maximum daily temperature
! - datatype : DOUBLE
! - min : -50
! - max : 60
! - default : 20
! - unit : °C
! - inputtype : variable
! - variablecategory : auxiliary
! - name: TMIN
! - description : Minimum daily temperature
! - datatype : DOUBLE
! - min : -50
! - max : 60
! - default : 10
! - unit : °C
! - inputtype : variable
! - variablecategory : auxiliary
! - name: XHLAI
! - description : Leaf area index
! - datatype : DOUBLE
! - min : 0
! - max : 10
! - default : 3
! - unit : m2 m-2
! - inputtype : variable
! - variablecategory : state
!- outputs:
! - name: EO
! - description : Potential evapotranspiration rate
! - datatype : DOUBLE
! - min : 0.0
! - max : 1.0
! - unit : mm d-1
! - variablecategory : rate
TD = 0.60 * TMAX + 0.40 * TMIN
IF(XHLAI .LE. 0.0) THEN
ALBEDO = MSALB
ELSE
ALBEDO = 0.23 - (0.23 - MSALB) * EXP(-0.75 * XHLAI)
END IF
SLANG = SRAD * 23.923
EEQ = SLANG * (2.04E-4 - 1.83E-4 * ALBEDO) * (TD + 29.0)
EO = EEQ * 1.1
IF(TMAX .GT. 35.0) THEN
EO = EEQ * ((TMAX - 35.0) * 0.05 + 1.1)
ELSE IF ( TMAX .LT. 5.0) THEN
EO = EEQ * 0.01 * EXP(0.18 * (TMAX + 20.0))
END IF
EO = MAX(EO, 0.0001)
END SUBROUTINE petpt_
END Program
[5]:
19.0133114