************************************************************************** ************************************************************************** * DRIVER for the MODEL TO SIMULATE CROP GROWTH SUBJECTED TO * DAILY VARIATIONS OF WEATHER AND SOIL WATER CONDITIONS * Written in Microsoft FORTRAN for PC-compatible machines * Authors: RICARDO BRAGA and JADIR ROSA * Obs: This program is an assignment of the course AGE 5646-Agricultural * and Biological Systems Simulation. * Date: 03/31/1997 * Modified 7/99 CHP - modified modular format, revised output format, * modified soil water routines, added water balance * Modified by Izael Fattori (ESALQ) (June/2018) - inserido subrotina para o calculo do * fotoperido, modificado a subrotina PGS, modificado a estrutura * do arquivo de dados meteorologicos C************************************************************************* * * LIST OF VARIABLES * * DOY = Julian day * DOYP = date of planting (Julian day) * endsim = code signifying physiological maturity (end of simulation) * FROP = frequency of printout (days) * IPRINT = code for printout (=0 for printout) * LAI = canopy leaf area index (m2 m-2) * PAR = photosynthetically active radiation (MJ/m2/d) * RAIN = daily rainfall (mm) * SRAD = daily solar radiation (MJ/m2/d) * SWFAC1 = soil water deficit stress factor * SWFAC2 = soil water excess stress factor * TAIRHR = hourly average temperature (Celsius) * TMAX = daily maximum temperature (Celsius) * TMIN = daily minimum temperature (Celsius) * *********************************************************************** PROGRAM MAIN !----------------------------------------------------------------------- USE DFLIB IMPLICIT NONE REAL LAI, SWFAC1, SWFAC2 REAL SRAD, TMAX, TMIN, PAR, RAIN INTEGER DOY,DOYP, YEARP, endsim, YEAR, CNTRCICLO INTEGER FROP, IPRINT, NDA !************************************************************************ !************************************************************************ ! INITIALIZATION AND INPUT OF DATA !************************************************************************ CALL OPENF(DOYP, YEARP, FROP) endsim = 0 CALL WEATHR(DOY,YEAR,SRAD,TMAX,TMIN,RAIN,PAR,'INITIAL ') CALL SW( & DOY, YEAR, LAI,RAIN, SRAD, TMAX, TMIN, !Input & SWFAC1, SWFAC2, !Output & 'INITIAL ') !Control CALL PLANT(DOY, endsim, TMAX, TMIN, !Input & PAR, SWFAC1, SWFAC2, !Input & LAI, !Output & 'INITIAL ') !Control !----------------------------------------------------------------------- ! DAILY TIME LOOP !----------------------------------------------------------------------- DO 500 NDA = 0,1000 IF (NDA .NE. 0) THEN CALL WEATHR(DOY,YEAR,SRAD,TMAX,TMIN,RAIN,PAR,'RATE ') IF (DOY == DOYP .AND. YEAR == YEARP) THEN CNTRCICLO = 1 endsim = 0 ENDIF !COLHEITA !IF (DOY == DOYH .AND. YEAR == YEARH) THEN ! CNTRCICLO = 0 ! endsim = 1 !ENDIF !************************************************************************ !************************************************************************ ! RATE CALCULATIONS !************************************************************************ CALL SW( & DOY, YEAR, LAI, RAIN, SRAD, TMAX, TMIN, !Input & SWFAC1, SWFAC2, !Output & 'RATE ') !Control IF (DOY == DOYP .AND. YEAR == YEARP) THEN CNTRCICLO = 1 endsim = 0 ENDIF !COLHEITA !IF (DOY == DOYh .AND. YEAR == YEARh) THEN ! CNTRCICLO = 0 ! endsim = 1 !ENDIF IF (CNTRCICLO == 1) THEN CALL PLANT(DOY, endsim,TMAX,TMIN, !Input & PAR, SWFAC1, SWFAC2, !Input & LAI, !Output & 'RATE ') !Control ENDIF !************************************************************************ !************************************************************************ ! INTEGRATION OF STATE VARIABLES !************************************************************************ CALL SW( & DOY, YEAR, LAI,RAIN, SRAD, TMAX, TMIN, !Input & SWFAC1, SWFAC2, !Output & 'INTEG ') !Control IF (CNTRCICLO == 1) THEN CALL PLANT(DOY, endsim, TMAX,TMIN, !Input & PAR, SWFAC1, SWFAC2, !Input & LAI, !Output & 'INTEG ') !Control ENDIF ENDIF !************************************************************************ !************************************************************************ ! WRITE DAILY OUTPUT !************************************************************************ IPRINT = MOD(DOY, FROP) IF ((IPRINT .EQ. 0) .OR. (endsim .EQ. 1) .OR. & (DOY .EQ. DOYP)) THEN CALL SW( & DOY, YEAR, LAI,RAIN, SRAD, TMAX, TMIN, !Input & SWFAC1, SWFAC2, !Output & 'OUTPUT ') !Control IF (CNTRCICLO == 1) THEN CALL PLANT(DOY, endsim, TMAX,TMIN, !Input & PAR, SWFAC1, SWFAC2, !Input & LAI, !Output & 'OUTPUT ') !Control ENDIF ENDIF IF (ENDSIM .EQ. 1) EXIT !----------------------------------------------------------------------- ! END OF DAILY TIME LOOP !----------------------------------------------------------------------- 500 ENDDO !************************************************************************ !************************************************************************ ! CLOSE FILES AND WRITE SUMMARY REPORTS !************************************************************************ CALL WEATHR(DOY,YEAR,SRAD,TMAX,TMIN,RAIN,PAR,'CLOSE ') CALL SW( & DOY, YEAR, LAI,RAIN, SRAD, TMAX, TMIN, !Input & SWFAC1, SWFAC2, !Output & 'CLOSE ') !Control CALL PLANT(DOY, endsim, TMAX,TMIN, !Input & PAR, SWFAC1, SWFAC2, !Input & LAI, !Output & 'CLOSE ') PAUSE 'End of Program - hit enter key to end' !----------------------------------------------------------------------- STOP END PROGRAM MAIN **************************************************************************** ************************************************************************ * SUBROUTINE OPENF(DOYP) * This subroutine opens the simulation control file, and reads date of * planting (DOYP) * * SIMCTRL.INP => date of planting, frequency of printout ************************************************************************ SUBROUTINE OPENF(DOYP,YEARP,FROP) IMPLICIT NONE INTEGER DOYP,FROP,YEARP OPEN (UNIT=8, FILE='SIMCTRL.INP',STATUS='UNKNOWN') READ(8,*) DOYP, YEARP, FROP IF (FROP .LE. 0) FROP = 1 5 FORMAT(2I6) CLOSE(8) !----------------------------------------------------------------------- RETURN END SUBROUTINE OPENF ************************************************************************ ************************************************************************