program main_human cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cto run coupled model cby 2010/03/31, hanasaki, NIES: H08ver1.0 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc implicit none c parameter (array) integer n0l integer n0t integer n0m integer n0c integer n0swim !! Crop type (SWIM,Krysanova 2000) integer n0ram !! Crop type (Leff et al., 2004) parameter (n0l=64800) c parameter (n0l=5040) parameter (n0t=3) parameter (n0m=4) parameter (n0c=2) parameter (n0swim=71) parameter (n0ram=19) c parameter (physical) integer n0secday !! seconds in a day [s] real p0sigma !! Stefan Boltzman const [W m-2 K-4] real p0omega !! anglular speed of Earth rot [s-1] real p0icepnt !! ice point [K] real p0l !! latent heat water -> vapor [J kg-1] real p0lf !! latent heat ice -> water [J kg-1] real p0cp !! heat capacity of air [J kg-1] parameter (n0secday=86400) parameter (p0sigma=5.67e-8) parameter (p0omega=7.27e-5) parameter (p0icepnt=273.15) parameter (p0l=2.50e6) parameter (p0lf=0.333e6) parameter (p0cp=1005) c parameter (default) integer n0if !! input file integer n0of !! output file real p0mis !! missing value parameter (n0if=15) parameter (n0of=16) parameter (p0mis=1.0E20) c index (array) integer i0l integer i0t integer i0m integer i0c integer i0swim !! Crop type (SWIM,Krysanova 2000) integer i0ram !! Crop type (Leff et al., 2004) c index (time) integer i0year !! year integer i0mon !! month integer i0day !! day integer i0sec !! second integer i0doy c temporary real r0tmp real r1tmp(n0l) character*128 c0tmp character*128 s0ave !! string "ave" (average) character*128 s0sta !! string "sta" (state variables) character*128 s0spn !! string "spn" (spin up) character*128 s0sum !! string "sum" (summation) data s0ave/'ave'/ data s0sta/'sta'/ data s0spn/'spn'/ data s0sum/'sum'/ c function integer iargc integer igetday integer igetdoy !! Function to obtain DOY cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c land cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c in (set of lnd) integer i0yearmin !! starting year integer i0yearmax !! ending year integer i0secint !! interval [s] integer i0ldbg !! debugging point integer i0cntc !! maximum iteration integer i0spnflg !! spinup flag real r0spnerr !! spinup error real r0spnrat !! spinup ratio real r1spn(n0l) !! storage to check spinup real r0engbalc !! energy inbalance tolerance [W/m2] real r0watbalc !! water inbalance tolerance [mm/dy] c in (file: map of lnd) integer i1lndmsk(n0l) !! land mask [-] real r1soildepth(n0l) !! soil depth [m] real r1w_fieldcap(n0l)!! field capacity [m3 m-3] real r1w_wilt(n0l) !! wilting point [m3 m-3] real r1cg(n0l) !! volumetric dry soil heat capacity real r1cd(n0l) !! bulk transfer coefficient real r1gamma(n0l) !! gamma of subsurface runoff [-] real r1tau(n0l) !! tau of subsurface runoff [dy] real r1balbedo(n0l) !! base albedo [-] character*128 c0lndmsk character*128 c0soildepth character*128 c0w_fieldcap character*128 c0w_wilt character*128 c0cg character*128 c0cd character*128 c0gamma character*128 c0tau character*128 c0balbedo c in (file: met) real r1wind(n0l) !! wind speed [m s-1] real r1rainf(n0l) !! rainfall rate [kg m-2 s-1] real r1snowf(n0l) !! snowfall rate [kg m-2 s-1] real r1tair(n0l) !! air temperature [K] real r1qair(n0l) !! specific humidity [kg kg-1] real r1psurf(n0l) !! surface pressure [Pa] real r1swdown(n0l) !! downward shortwave rad [W m-2] real r1lwdown(n0l) !! downward longwave rad [W m-2] real r1rh(n0l) !! relative humidity [-] real r1tcor(n0l) !! temperature correction real r1pcor(n0l) !! precipitation correction real r1lcor(n0l) !! longwave correction character*128 c0wind character*128 c0rainf character*128 c0snowf character*128 c0tair character*128 c0qair character*128 c0psurf character*128 c0swdown character*128 c0lwdown character*128 c0rh character*128 c0tcor character*128 c0pcor character*128 c0lcor c state variables (lnd) real r1soilmoist(n0l) !! ave layer soil moisture [kg m-2] real r3soilmoist(n0l,0:n0t,0:n0m) real r1soilmoist_pr(n0l) real r1soiltemp(n0l) !! ave layer soil temp [K] real r3soiltemp(n0l,0:n0t,0:n0m) real r1soiltemp_pr(n0l) real r1avgsurft(n0l) !! average surface temperature [K] real r3avgsurft(n0l,0:n0t,0:n0m) real r1avgsurft_pr(n0l) real r1swe(n0l) !! snow water equivalent [kg m-2] real r3swe(n0l,0:n0t,0:n0m) real r1swe_pr(n0l) character*128 c1soilmoist(0:n0m) character*128 c1soilmoistini(0:n0m) character*128 c1soiltemp(0:n0m) character*128 c1soiltempini(0:n0m) character*128 c1avgsurft(0:n0m) character*128 c1avgsurftini(0:n0m) character*128 c1swe(0:n0m) character*128 c1sweini(0:n0m) c out (0:bias correction) real r2rainf(n0l,0:n0t) !! rainfall rate [kg m-2 s-1] real r2snowf(n0l,0:n0t) !! snowfall rate [kg m-2 s-1] real r2tair(n0l,0:n0t) !! air temperature [K] real r2lwdown(n0l,0:n0t) !! longwave [W m-2] character*128 c0rainfout !! Rainf (corrected) character*128 c0snowfout !! Snowf (corrected) character*128 c0tairout !! Tair (corrected) character*128 c0lwdownout !! LWdown (corrected) c out (1:general energy balance components) real r1swnet(n0l) !! Net shortwave rad [W m-2] down real r3swnet(n0l,0:n0t,0:n0m) real r1lwnet(n0l) !! Net longwave rad [W m-2] down real r3lwnet(n0l,0:n0t,0:n0m) real r1qle(n0l) !! Latent heat flux [W m-2] up real r3qle(n0l,0:n0t,0:n0m) real r1qh(n0l) !! Sensible heat flux [W m-2] up real r3qh(n0l,0:n0t,0:n0m) real r1qg(n0l) !! Ground heat flux [W m-2] down real r3qg(n0l,0:n0t,0:n0m) real r1qf(n0l) !! Energy of fusion [W m-2] s SWIM) c - crop id converter (SWIM --> Ramankutty) c - crop parameter of SWIM cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc open(n0if,file=c0ram2swim,status='old') read(n0if,*) (i1ram2swim(i0ram),i0ram=1,n0ram) close(n0if) d write(*,*) 'main: --- i1ram2swim ------------------------------' d write(*,*) i1ram2swim c open(n0if,file=c0swim2ram,status='old') read(n0if,*) (i1swim2ram(i0swim),i0swim=1,n0swim) close(n0if) d write(*,*) 'main: --- i1swim2ram ------------------------------' d write(*,*) i1swim2ram c open(n0if,file=c0crppar,status='old') read(n0if,*) do i0swim=1,n0swim read(n0if,*) $ r2crppar(1,i0swim), c0tmp, r2crppar(2,i0swim), $ r2crppar(3,i0swim), r2crppar(4,i0swim), r2crppar(5,i0swim), $ r2crppar(6,i0swim), r2crppar(7,i0swim), r2crppar(8,i0swim), $ r2crppar(9,i0swim), r2crppar(10,i0swim),r2crppar(11,i0swim), $ r2crppar(12,i0swim),r2crppar(13,i0swim),r2crppar(14,i0swim), $ r2crppar(15,i0swim),r2crppar(16,i0swim),r2crppar(17,i0swim), $ r2crppar(18,i0swim),r2crppar(19,i0swim),r2crppar(20,i0swim), $ r2crppar(21,i0swim),r2crppar(22,i0swim),r2crppar(23,i0swim), $ r2crppar(24,i0swim),c0tmp end do close(n0if) c do i0ram=1,n0ram r1icnum(i0ram)=r2crppar(1,i1ram2swim(i0ram)) r1ird(i0ram)=r2crppar(2,i1ram2swim(i0ram)) r1be(i0ram)=r2crppar(3,i1ram2swim(i0ram)) r1hvsti(i0ram)=r2crppar(4,i1ram2swim(i0ram)) r1to(i0ram)=r2crppar(5,i1ram2swim(i0ram)) r1tb(i0ram)=r2crppar(6,i1ram2swim(i0ram)) r1blai(i0ram)=r2crppar(7,i1ram2swim(i0ram)) r1dlai(i0ram)=r2crppar(8,i1ram2swim(i0ram)) r1dlp1(i0ram)=r2crppar(9,i1ram2swim(i0ram)) r1dlp2(i0ram)=r2crppar(10,i1ram2swim(i0ram)) r1bn1(i0ram)=r2crppar(11,i1ram2swim(i0ram)) r1bn2(i0ram)=r2crppar(12,i1ram2swim(i0ram)) r1bn3(i0ram)=r2crppar(13,i1ram2swim(i0ram)) r1bp1(i0ram)=r2crppar(14,i1ram2swim(i0ram)) r1bp2(i0ram)=r2crppar(15,i1ram2swim(i0ram)) r1bp3(i0ram)=r2crppar(16,i1ram2swim(i0ram)) r1cnyld(i0ram)=r2crppar(17,i1ram2swim(i0ram)) r1cpyld(i0ram)=r2crppar(18,i1ram2swim(i0ram)) r1rdmx(i0ram)=r2crppar(19,i1ram2swim(i0ram)) r1cvm(i0ram)=r2crppar(20,i1ram2swim(i0ram)) r1almn(i0ram)=r2crppar(21,i1ram2swim(i0ram)) r1sla(i0ram)=r2crppar(22,i1ram2swim(i0ram)) r1pt2(i0ram)=r2crppar(23,i1ram2swim(i0ram)) r1phun(i0ram)=r2crppar(24,i1ram2swim(i0ram)) end do cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Initialize state variables (lnd) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc do i0m=1,n0m call read_binary(n0l,c1soilmoistini(i0m),r1tmp) do i0l=1,n0l r3soilmoist(i0l,0,i0m)=r1tmp(i0l) end do end do do i0m=1,n0m call read_binary(n0l,c1soiltempini(i0m),r1tmp) do i0l=1,n0l r3soiltemp(i0l,0,i0m)=r1tmp(i0l) end do end do do i0m=1,n0m call read_binary(n0l,c1avgsurftini(i0m),r1tmp) do i0l=1,n0l r3avgsurft(i0l,0,i0m)=r1tmp(i0l) end do end do do i0m=1,n0m call read_binary(n0l,c1sweini(i0m),r1tmp) do i0l=1,n0l r3swe(i0l,0,i0m)=r1tmp(i0l) end do end do d write(*,*) 'main: --- Initialize state variables --------------' d write(*,*) 'main: r3soilmoist(1):',r3soilmoist(i0ldbg,0,1) d write(*,*) 'main: r3soilmoist(2):',r3soilmoist(i0ldbg,0,2) d write(*,*) 'main: r3soiltemp(1): ',r3soiltemp(i0ldbg,0,1) d write(*,*) 'main: r3soiltemp(2): ',r3soiltemp(i0ldbg,0,2) d write(*,*) 'main: r3avgsurft(1): ',r3avgsurft(i0ldbg,0,1) d write(*,*) 'main: r3avgsurft(2): ',r3avgsurft(i0ldbg,0,2) d write(*,*) 'main: r3swe(1): ',r3swe(i0ldbg,0,1) d write(*,*) 'main: r3swe(2): ',r3swe(i0ldbg,0,2) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Initialize state variables (riv) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc call read_binary(n0l,c0rivstoini,r1rivsto) call read_binary(n0l,c0rivstoini,r1rivsto_pr) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Initialize state variables (hum) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc call read_binary(n0l,c0damstoini,r1damsto) call read_binary(n0l,c0msrstoini,r1msrsto) d write(*,*) 'main_human: r1damsto',r1damsto(i0ldbg) d write(*,*) 'main_human: r1msrsto',r1msrsto(i0ldbg) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Initialize state variables c - biomass c - nitrogen c - phosphorus cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc do i0m=1,n0m call read_binary(n0l,c1btini(i0m),r1tmp) do i0l=1,n0l r2bt(i0l,i0m)=r1tmp(i0l) end do end do do i0m=1,n0m call read_binary(n0l,c1rsdini(i0m),r1tmp) do i0l=1,n0l r2rsd(i0l,i0m)=r1tmp(i0l) end do end do do i0m=1,n0m call read_binary(n0l,c1outbini(i0m),r1tmp) do i0l=1,n0l r2outb(i0l,i0m)=r1tmp(i0l) end do end do c new start (initialize) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Initialize cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc r1frcsupagrriv=0.0 r1frcsupagrmsr=0.0 r1frcsupagrnnb=0.0 r1frcsoilmoistgrn=1.0 r1frcsoilmoistriv=0.0 r1frcsoilmoistmsr=0.0 r1frcsoilmoistnnb=0.0 c new end cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Loop (year,mon,it) cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc d write(*,*) 'main: --- Calculation -----------------------------' 10 do i0l=1,n0l r1spn(i0l)=r3soilmoist(i0l,0,0) end do c if(i0spnflg.eq.0)then i0yearmin_dummy=i0yearmin i0yearmax_dummy=i0yearmin else i0yearmin_dummy=i0yearmin i0yearmax_dummy=i0yearmax end if c do i0year=i0yearmin_dummy,i0yearmax_dummy do i0mon=1,12 do i0day=1,igetday(i0year,i0mon) do i0sec=i0secint,n0secday,i0secint write(*,*) '------------------------------' write(*,'(a6,i4.4,a1,i2.2,a1,i2.2,a1,i5.5)') $ ' time:',i0year,'/',i0mon,'/',i0day,':',i0sec write(*,*) '------------------------------' c call read_result( $ n0l, $ c0wind, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1wind) c call read_result( $ n0l, $ c0rainf, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1rainf) if(c0pcor.eq.'NO')then do i0l=1,n0l r1pcor(i0l)=1.0 end do else call read_result( $ n0l, $ c0pcor, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1pcor) end if do i0l=1,n0l if(r1rainf(i0l).ne.p0mis.and. $ r1pcor(i0l).ne.p0mis)then r1rainf(i0l)=r1rainf(i0l)*r1pcor(i0l) end if end do c call read_result( $ n0l, $ c0snowf, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1snowf) if(c0pcor.eq.'NO')then do i0l=1,n0l r1pcor(i0l)=1.0 end do else call read_result( $ n0l, $ c0pcor, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1pcor) end if do i0l=1,n0l if(r1snowf(i0l).ne.p0mis.and. $ r1pcor(i0l).ne.p0mis)then r1snowf(i0l)=r1snowf(i0l)*r1pcor(i0l) end if end do c call read_result( $ n0l, $ c0psurf, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1psurf) c call read_result( $ n0l, $ c0tair, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1tair) if(c0tcor.eq.'NO')then do i0l=1,n0l r1tcor(i0l)=0.0 end do else call read_result( $ n0l, $ c0tcor, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1tcor) end if do i0l=1,n0l r1tair(i0l)=r1tair(i0l)+r1tcor(i0l) end do c if(c0qair.ne.'NO'.and.c0rh.ne.'NO')then write(*,*) 'main: both qair and rh is specified.' stop else if(c0qair.ne.'NO')then call read_result( $ n0l, $ c0qair, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1qair) else if(c0rh.ne.'NO')then call read_result( $ n0l, $ c0rh, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1rh) call conv_rhtoqa( $ n0l, $ r1rh,r1psurf,r1tair, $ r1qair) end if c call read_result( $ n0l, $ c0swdown, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1swdown) c call read_result( $ n0l, $ c0lwdown, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1lwdown) if(c0lcor.eq.'NO')then do i0l=1,n0l r1lcor(i0l)=0.0 end do else call read_result( $ n0l, $ c0lcor, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1lcor) end if do i0l=1,n0l r1lwdown(i0l)=r1lwdown(i0l)+r1lcor(i0l) end do c call read_result( $ n0l, $ c0balbedo, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1balbedo) if(c0tcor.ne.'NO')then call conv_rstors( $ n0l, $ r1rainf,r1snowf,r1psurf,r1qair,r1tair) end if d write(*,*) 'main: Meteorological input' d write(*,*) 'main: |-r1rainf: ',r1rainf(i0ldbg) d write(*,*) 'main: |-r1snowf: ',r1snowf(i0ldbg) d write(*,*) 'main: |-r1tair: ',r1tair(i0ldbg) d write(*,*) 'main: |-r1qair: ',r1qair(i0ldbg) d write(*,*) 'main: |-r1lwdown: ',r1lwdown(i0ldbg) d write(*,*) 'main: |-r1swdown: ',r1swdown(i0ldbg) d write(*,*) 'main: |-r1psurf: ',r1psurf(i0ldbg) d write(*,*) 'main: |-r1wind: ',r1wind(i0ldbg) d write(*,*) 'main: |-r1balbedo:',r1balbedo(i0ldbg) c if(c0envflw.ne.'NO')then call read_result( $ n0l, $ c0envflw, i0year, i0mon, $ i0day, i0sec, i0secint, $ r1envflw) else r1envflw=0.0 end if c if(i0sec.eq.n0secday)then call calc_flgcrp( $ n0l,n0c, $ i0year,i0mon,i0day, $ i0ldbg,i0dayadvirg, $ i2pltdoy,i2hvsdoy, $ i2flgcul, i2flgirg, r2target, $ c0opthvsdoy) end if c if(i0sec.eq.n0secday)then do i0m=1,n0m do i0l=1,n0l r1soilmoist(i0l)=r3soilmoist(i0l,0,i0m) end do do i0l=1,n0l r1tmp(i0l)=r2arafrc(i0l,i0m) end do c d write(*,*) 'main: Before calc_irgapp' d write(*,*) 'main: |-i0m: ',i0m d write(*,*) 'main: |-r1soilmoist:',r1soilmoist(i0ldbg) d write(*,*) 'main: |-r1demagr: ',r1demagr(i0ldbg) d write(*,*) 'main: |-r1supagr: ',r1supagr(i0ldbg) c new start (preprocess 1) do i0l=1,n0l r1soilmoist_pr(i0l)=r1soilmoist(i0l) end do do i0l=1,n0l r1supagr_pr(i0l)=r1supagr(i0l) end do c new end call calc_irgapp( $ n0l,n0c, $ i0ldbg,n0secday, r0fctpad, r0fctnonpad, $ c1optlnduse(i0m), $ i2crptyp, r1soildepth, r1w_fieldcap, $ r1w_wilt, r1lndara, r1tmp, $ i2flgcul, i2flgirg, r2target, $ r1soilmoist, r1supagr, $ r1demagr) d write(*,*) 'main: After calc_irgapp' d write(*,*) 'main: |-i0m: ',i0m d write(*,*) 'main: |-r1soilmoist:',r1soilmoist(i0ldbg) d write(*,*) 'main: |-r1demagr: ',r1demagr(i0ldbg) d write(*,*) 'main: |-r1supagr: ',r1supagr(i0ldbg) c new start (main process 1) r1zero=0.0 do i0l=1,n0l r1supagr_df(i0l)=r1supagr_pr(i0l)-r1supagr(i0l) end do do i0l=1,n0l r1frcsoilmoistgrn(i0l)=r3frcsoilmoistgrn(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistriv(i0l)=r3frcsoilmoistriv(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistmsr(i0l)=r3frcsoilmoistmsr(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistnnb(i0l)=r3frcsoilmoistnnb(i0l,0,i0m) end do c call calc_watsrc( $ n0l,real(n0secday),r1lndara,r1tmp, $ r1soilmoist_pr,r1zero,r1zero, r1supagr_df, $ r1frcsupagrriv,r1frcsupagrmsr,r1frcsupagrnnb, $ r1frcsoilmoistgrn,r1frcsoilmoistriv, $ r1frcsoilmoistmsr,r1frcsoilmoistnnb) d write(*,*) 'main: After calc_watsrc [1st]' d write(*,*) 'main: |-r1lndara',r1lndara(i0ldbg) d write(*,*) 'main: |-r1lndfrc',r1tmp(i0ldbg) d write(*,*) 'main: |-r1soilmo',r1soilmoist_pr(i0ldbg) d write(*,*) 'main: |-r1rainf --' d write(*,*) 'main: |-r1qsm --' d write(*,*) 'main: |-r1supagr',r1supagr_df(i0ldbg) d write(*,*) 'main: |-r1supriv',r1frcsupagrriv(i0ldbg) d write(*,*) 'main: |-r1supmsr',r1frcsupagrmsr(i0ldbg) d write(*,*) 'main: |-r1supnnb',r1frcsupagrnnb(i0ldbg) d write(*,*) 'main: |-r1smgrn',r1frcsoilmoistgrn(i0ldbg) d write(*,*) 'main: |-r1smriv',r1frcsoilmoistriv(i0ldbg) d write(*,*) 'main: |-r1smmsr',r1frcsoilmoistmsr(i0ldbg) d write(*,*) 'main: |-r1smnnb',r1frcsoilmoistnnb(i0ldbg) c do i0l=1,n0l r3frcsoilmoistgrn(i0l,0,i0m)=r1frcsoilmoistgrn(i0l) end do do i0l=1,n0l r3frcsoilmoistriv(i0l,0,i0m)=r1frcsoilmoistriv(i0l) end do do i0l=1,n0l r3frcsoilmoistmsr(i0l,0,i0m)=r1frcsoilmoistmsr(i0l) end do do i0l=1,n0l r3frcsoilmoistnnb(i0l,0,i0m)=r1frcsoilmoistnnb(i0l) end do c new end c do i0l=1,n0l r3soilmoist(i0l,0,i0m)=r1soilmoist(i0l) end do call wrte_bints3(n0l,n0t, $ r1demagr, r3demagr, c1demagr, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0ave,n0m,i0m,r2arafrc,s0sum) c end do do i0l=1,n0l r1demagr(i0l)=r3demagr(i0l,1,0) end do d write(*,*) 'main: After mosaic loop' d write(*,*) 'main: |-r1demagr: ',r1demagr(i0ldbg) end if c if(i0sec.eq.n0secday)then r1tmp=0.0 do i0l=1,n0l if(r1demagrfix(i0l).ne.p0mis)then r1tmp(i0l)=r1tmp(i0l)+r1demagrfix(i0l) end if end do do i0l=1,n0l if(r1demind(i0l).ne.p0mis)then r1tmp(i0l)=r1tmp(i0l)+r1demind(i0l) end if end do do i0l=1,n0l if(r1demdom(i0l).ne.p0mis)then r1tmp(i0l)=r1tmp(i0l)+r1demdom(i0l) end if end do call calc_damdem( $ n0l, $ i1damid_, r1tmp, c0damalc, $ r1damdem) call wrte_bints2(n0l,n0t, $ r1damdem, r2damdem, c0damdem, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0ave) end if c if(i0sec.eq.n0secday)then do i0l=1,n0l if(i1damid_(i0l).ne.0)then i0damid_=i1damid_(i0l) i0damprp=i1damprp(i0l) i01stmon=i11stmon(i0l) if(i0mon.eq.i01stmon.and.i0day.eq.1.and. $ i0sec.eq.n0secday)then i0flgkrls=1 else i0flgkrls=0 end if r0rivout=r1rivoutfix(i0l) r0damcap=r1damcap(i0l) r0damsrf=r1damsrf(i0l) r0daminf=r2rivout(i0l,1) if(i0damprp.eq.4)then r0damdem=r1damdem(i0l) else r0damdem=r1damdemfix(i0l) end if r0damdemfix=r1damdemfix(i0l) r0damout=0.0 r0krls=r1krls(i0l) r0damsto=r1damsto(i0l) if(i0l.eq.i0ldbg)then d write(*,*) 'main: Before calc_resope' d write(*,*) 'main: |-i0damid_ ',i0damid_ d write(*,*) 'main: |-i01stmon ',i01stmon d write(*,*) 'main: |-i0secint ',i0secint d write(*,*) 'main: |-i0l ',i0l d write(*,*) 'main: |-i0flgkrls ',i0flgkrls d write(*,*) 'main: |-r0knorm ',r0knorm d write(*,*) 'main: |-r0rivout ',r0rivout d write(*,*) 'main: |-r0damcap ',r0damcap d write(*,*) 'main: |-r0damsrf ',r0damsrf d write(*,*) 'main: |-r0daminf ',r0daminf d write(*,*) 'main: |-r0damdem ',r0damdem d write(*,*) 'main: |-r0damdemfix',r0damdemfix d write(*,*) 'main: |-r0damout ',r0damout d write(*,*) 'main: |-r0krls ',r0krls d write(*,*) 'main: |-r0damsto ',r0damsto end if call calc_resope( $ i0secint,i0damid_, $ i0flgkrls,r0knorm, $ c0optkrls,c0optdamrls,c0optdamwbc, $ r0rivout, r0damcap,r0damsrf, $ r0daminf,r0damdem, r0damdemfix, $ r0damout, $ r0krls, r0damsto) r1damout(i0l)=r0damout r1krls(i0l)=r0krls r1damsto(i0l)=r0damsto end if end do end if c do i0m=1,n0m do i0l=1,n0l r1avgsurft_pr(i0l)=r3avgsurft(i0l,0,i0m) end do do i0l=1,n0l r1swe_pr(i0l)=r3swe(i0l,0,i0m) end do do i0l=1,n0l r1soilmoist_pr(i0l)=r3soilmoist(i0l,0,i0m) end do do i0l=1,n0l r1soiltemp_pr(i0l)=r3soiltemp(i0l,0,i0m) end do c call calc_leakyb( $ n0l, $ i0secint, i0ldbg, i0cntc, r0engbalc, $ r0watbalc, $ i1lndmsk, r1soildepth,r1w_fieldcap,r1w_wilt, $ r1cg, r1cd, $ r1gamma, r1tau, r1balbedo, $ r1wind, r1rainf, r1snowf, r1tair, $ r1qair, r1psurf, r1swdown, r1lwdown, $ r1avgsurft_pr,r1swe_pr,r1soilmoist_pr,r1soiltemp_pr, $ r1swnet, r1lwnet, r1qle, r1qh, $ r1qg, r1qf, r1qv, $ r1evap, r1qs, r1qsb, r1qtot, $ r1qsm, r1qst, $ r1avgsurft, r1albedo, r1swe, $ r1soilmoist, r1soiltemp, r1soilwet, $ r1potevap, r1et, r1subsnow, $ r1salbedo, $ i1engnotbal, i1watnotbal,i1notfin) c new start (main process 2) r1zero=0.0 do i0l=1,n0l r1frcsoilmoistgrn(i0l)=r3frcsoilmoistgrn(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistriv(i0l)=r3frcsoilmoistriv(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistmsr(i0l)=r3frcsoilmoistmsr(i0l,0,i0m) end do do i0l=1,n0l r1frcsoilmoistnnb(i0l)=r3frcsoilmoistnnb(i0l,0,i0m) end do do i0l=1,n0l r1tmp(i0l)=r2arafrc(i0l,i0m) end do c call calc_watsrc( $ n0l,real(i0secint),r1lndara,r1tmp, $ r1soilmoist_pr,r1rainf,r1qsm,r1zero, $ r1frcsupagrriv,r1frcsupagrmsr,r1frcsupagrnnb, $ r1frcsoilmoistgrn,r1frcsoilmoistriv, $ r1frcsoilmoistmsr,r1frcsoilmoistnnb) d write(*,*) 'main: After calc_watsrc [2nd]' d write(*,*) 'main: |-r1lndara',r1lndara(i0ldbg) d write(*,*) 'main: |-r1lndfrc',r1tmp(i0ldbg) d write(*,*) 'main: |-r1soilmo',r1soilmoist_pr(i0ldbg) d write(*,*) 'main: |-r1rainf ',r1rainf(i0ldbg) d write(*,*) 'main: |-r1qsm ',r1qsm(i0ldbg) d write(*,*) 'main: |-r1supagr --' d write(*,*) 'main: |-r1supriv',r1frcsupagrriv(i0ldbg) d write(*,*) 'main: |-r1supmsr',r1frcsupagrmsr(i0ldbg) d write(*,*) 'main: |-r1supnnb',r1frcsupagrnnb(i0ldbg) d write(*,*) 'main: |-r1smgrn',r1frcsoilmoistgrn(i0ldbg) d write(*,*) 'main: |-r1smriv',r1frcsoilmoistriv(i0ldbg) d write(*,*) 'main: |-r1smmsr',r1frcsoilmoistmsr(i0ldbg) d write(*,*) 'main: |-r1smnnb',r1frcsoilmoistnnb(i0ldbg) c do i0l=1,n0l r1evapgrn(i0l)=r1evap(i0l)*r1frcsoilmoistgrn(i0l) r1evapriv(i0l)=r1evap(i0l)*r1frcsoilmoistriv(i0l) r1evapmsr(i0l)=r1evap(i0l)*r1frcsoilmoistmsr(i0l) r1evapnnb(i0l)=r1evap(i0l)*r1frcsoilmoistnnb(i0l) end do c call wrte_bints3(n0l,n0t, $ r1frcsoilmoistgrn,r3frcsoilmoistgrn,c1frcsoilmoistgrn, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1frcsoilmoistriv,r3frcsoilmoistriv,c1frcsoilmoistriv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1frcsoilmoistmsr,r3frcsoilmoistmsr,c1frcsoilmoistmsr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1frcsoilmoistnnb,r3frcsoilmoistnnb,c1frcsoilmoistnnb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) c call wrte_bints3(n0l,n0t, $ r1evapgrn, r3evapgrn, c1evapgrn, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1evapriv, r3evapriv, c1evapriv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1evapmsr, r3evapmsr, c1evapmsr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1evapnnb, r3evapnnb, c1evapnnb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) c new end c state variables call wrte_bints3(n0l,n0t, $ r1soilmoist, r3soilmoist, c1soilmoist, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1soiltemp, r3soiltemp, c1soiltemp, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1avgsurft, r3avgsurft, c1avgsurft, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1swe, r3swe, c1swe, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: State variables' d write(*,*) 'main: |-r1soilmoist: ',r1soilmoist(i0ldbg) d write(*,*) 'main: |-r1soiltemp: ',r1soiltemp(i0ldbg) d write(*,*) 'main: |-r1avgsurft: ',r1avgsurft(i0ldbg) d write(*,*) 'main: |-r1swe: ',r1swe(i0ldbg) c out1 call wrte_bints3(n0l,n0t, $ r1swnet, r3swnet, c1swnet, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1lwnet, r3lwnet, c1lwnet, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qle, r3qle, c1qle, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qh, r3qh, c1qh, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qg, r3qg, c1qg, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qf, r3qf, c1qf, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qv, r3qv, c1qv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: Output' d write(*,*) 'main: |-r1swnet: ',r1swnet(i0ldbg) d write(*,*) 'main: |-r1lwnet: ',r1lwnet(i0ldbg) d write(*,*) 'main: |-r1qle: ',r1qle(i0ldbg) d write(*,*) 'main: |-r1qh: ',r1qh(i0ldbg) d write(*,*) 'main: |-r1qg: ',r1qg(i0ldbg) d write(*,*) 'main: |-r1qf: ',r1qf(i0ldbg) d write(*,*) 'main: |-r1qv: ',r1qv(i0ldbg) c out2 call wrte_bints3(n0l,n0t, $ r1evap, r3evap, c1evap, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qs, r3qs, c1qs, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qsb, r3qsb, c1qsb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qtot, r3qtot, c1qtot, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1qsm, r3qsm, c1qsm, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: |-r1snowf: ',r1snowf(i0ldbg) d write(*,*) 'main: |-r1rainf: ',r1rainf(i0ldbg) d write(*,*) 'main: |-r1evap: ',r1evap(i0ldbg) d write(*,*) 'main: |-r1qs: ',r1qs(i0ldbg) d write(*,*) 'main: |-r1qsb: ',r1qsb(i0ldbg) d write(*,*) 'main: |-r1qtot: ',r1qtot(i0ldbg) d write(*,*) 'main: |-r1qsm: ',r1qsm(i0ldbg) c out3 call wrte_bints3(n0l,n0t, $ r1albedo, r3albedo, c1albedo, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: |-r1albedo: ',r1albedo(i0ldbg) c out4 call wrte_bints3(n0l,n0t, $ r1soilwet, r3soilwet, c1soilwet, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: |-r1soilwet: ',r1soilwet(i0ldbg) c out5 call wrte_bints3(n0l,n0t, $ r1potevap, r3potevap, c1potevap, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1subsnow, r3subsnow, c1subsnow, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: |-r1potevap: ',r1potevap(i0ldbg) d write(*,*) 'main: |-r1subsnow: ',r1subsnow(i0ldbg) c out 7 call wrte_bints3(n0l,n0t, $ r1salbedo, r3salbedo, c1salbedo, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta,n0m,i0m,r2arafrc,s0ave) d write(*,*) 'main: |-r1salbedo: ',r1salbedo(i0ldbg) end do c call wrte_bints2(n0l,n0t, $ r1snowf, r2snowf, c0snowfout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1rainf, r2rainf, c0rainfout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1tair, r2tair, c0tairout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1lwdown, r2lwdown, c0lwdownout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) c c0tmp='NO' !! needed for crop calculation call wrte_bints2(n0l,n0t, $ r1swdown, r2swdown, c0tmp, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) c call calc_humact( $ n0l, i0ldbg, $ i0secint, r1rivseq, r0rivseqmax, $ r1rivnxl, r1lndara, r1paramc, $ r1rivsto_pr, r1qtot, $ r1rivsto, r1rivinf, r1rivout, $ r1damsto, r1daminf, r1damout, $ r1demagr, r1demind, r1demdom, $ r1supagr, r1supind, r1supdom, $ r1supagrriv, r1supindriv, r1supdomriv, $ r1supagrmsr, r1supindmsr, r1supdommsr, $ r1supagrnnb, r1supindnnb, r1supdomnnb, $ c0optnnb, r1envflw, $ i1damid_, r1damcap, r1msrcap, $ r1msrsto, r1msrinf, r1msrout) do i0l=1,n0l r1rivsto_pr(i0l)=r1rivsto(i0l) end do c new start (main process 3) do i0l=1,n0l r1tmp(i0l)=r1supagrriv(i0l)+r1supagrmsr(i0l) $ +r1supagrnnb(i0l) end do do i0l=1,n0l if(r1tmp(i0l).ne.0.0)then r1frcsupagrriv(i0l)=r1supagrriv(i0l)/r1tmp(i0l) r1frcsupagrmsr(i0l)=r1supagrmsr(i0l)/r1tmp(i0l) r1frcsupagrnnb(i0l)=r1supagrnnb(i0l)/r1tmp(i0l) end if end do c new end c riv call wrte_bints2(n0l,n0t, $ r1rivout, r2rivout, c0dis, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1rivsto, r2rivsto, c0rivsto, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c dam call wrte_bints2(n0l,n0t, $ r1damout, r2damout, c0damout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1damsto, r2damsto, c0damsto, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c msr call wrte_bints2(n0l,n0t, $ r1msrout, r2msrout, c0msrout, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1msrsto, r2msrsto, c0msrsto, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c sup (total) call wrte_bints2(n0l,n0t, $ r1supagr, r2supagr, c0supagr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1supind, r2supind, c0supind, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) call wrte_bints2(n0l,n0t, $ r1supdom, r2supdom, c0supdom, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c sup (riv) call wrte_bints2(n0l,n0t, $ r1supagrriv, r2supagrriv, c0supagrriv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1supindriv, r2supindriv, c0supindriv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) call wrte_bints2(n0l,n0t, $ r1supdomriv, r2supdomriv, c0supdomriv, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c sup (msr) call wrte_bints2(n0l,n0t, $ r1supagrmsr, r2supagrmsr, c0supagrmsr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1supindmsr, r2supindmsr, c0supindmsr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) call wrte_bints2(n0l,n0t, $ r1supdommsr, r2supdommsr, c0supdommsr, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c sup (nnb) call wrte_bints2(n0l,n0t, $ r1supagrnnb, r2supagrnnb, c0supagrnnb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0ave) call wrte_bints2(n0l,n0t, $ r1supindnnb, r2supindnnb, c0supindnnb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) call wrte_bints2(n0l,n0t, $ r1supdomnnb, r2supdomnnb, c0supdomnnb, $ i0year,i0mon,i0day,i0sec,i0secint, $ s0sta) c if(i0sec.eq.n0secday)then i0doy=igetdoy(i0year,i0mon,i0day) do i0m=1,n0m c if(c1optlnduse(i0m).eq.'dci'.or. $ c1optlnduse(i0m).eq.'dcr')then do i0l=1,n0l if(i2flgcul(i0l,1).eq.1)then i1flgcul(i0l)=1 i1flg2nd(i0l)=0 i1crptyp(i0l)=i2crptyp(i0l,1) i1crpday(i0l)=int(r2crpday(i0l,i0m))+1 else if(i2flgcul(i0l,2).eq.1)then i1flgcul(i0l)=1 i1flg2nd(i0l)=1 i1crptyp(i0l)=i2crptyp(i0l,2) i1crpday(i0l)=int(r2crpday(i0l,i0m))+1 else i1flgcul(i0l)=0 i1flg2nd(i0l)=0 i1crptyp(i0l)=0 i1crpday(i0l)=0 end if end do else if(c1optlnduse(i0m).eq.'sci'.or. $ c1optlnduse(i0m).eq.'scr')then do i0l=1,n0l if(i2flgcul(i0l,1).eq.1)then i1flgcul(i0l)=1 i1flg2nd(i0l)=0 i1crptyp(i0l)=i2crptyp(i0l,1) i1crpday(i0l)=int(r2crpday(i0l,i0m))+1 else i1flgcul(i0l)=0 i1flg2nd(i0l)=0 i1crptyp(i0l)=0 i1crpday(i0l)=0 end if end do else if(c1optlnduse(i0m).eq.'non')then do i0l=1,n0l i1flgcul(i0l)=0 i1flg2nd(i0l)=0 i1crptyp(i0l)=0 i1crpday(i0l)=0 end do else write(*,*) 'main: i0m: ',i0m write(*,*) 'main: c1optlnduse:',c1optlnduse(i0m) stop end if c do i0l=1,n0l r1tair(i0l)=r2tair(i0l,1) end do do i0l=1,n0l r1swdown(i0l)=r2swdown(i0l,1) end do do i0l=1,n0l r1evap(i0l)=r3evap(i0l,1,i0m) end do do i0l=1,n0l r1evapgrn(i0l)=r3evapgrn(i0l,1,i0m) end do do i0l=1,n0l r1evapriv(i0l)=r3evapriv(i0l,1,i0m) end do do i0l=1,n0l r1evapmsr(i0l)=r3evapmsr(i0l,1,i0m) end do do i0l=1,n0l r1evapnnb(i0l)=r3evapnnb(i0l,1,i0m) end do do i0l=1,n0l r1potevap(i0l)=r3potevap(i0l,1,i0m) end do c do i0l=1,n0l r1huna(i0l)=r2huna(i0l,i0m) end do do i0l=1,n0l r1swu(i0l)=r2swu(i0l,i0m) end do do i0l=1,n0l r1swp(i0l)=r2swp(i0l,i0m) end do do i0l=1,n0l r1regfw(i0l)=r2regfw(i0l,i0m) end do do i0l=1,n0l r1regfl(i0l)=r2regfl(i0l,i0m) end do do i0l=1,n0l r1regfh(i0l)=r2regfh(i0l,i0m) end do do i0l=1,n0l r1regfn(i0l)=r2regfn(i0l,i0m) end do do i0l=1,n0l r1regfp(i0l)=r2regfp(i0l,i0m) end do do i0l=1,n0l r1bt(i0l)=r2bt(i0l,i0m) end do do i0l=1,n0l r1rsd(i0l)=r2rsd(i0l,i0m) end do do i0l=1,n0l r1outb(i0l)=r2outb(i0l,i0m) end do do i0l=1,n0l r1cwd(i0l)=r2cwd(i0l,i0m) end do do i0l=1,n0l r1cws(i0l)=r2cws(i0l,i0m) end do do i0l=1,n0l r1cwsgrn(i0l)=r2cwsgrn(i0l,i0m) end do do i0l=1,n0l r1cwsriv(i0l)=r2cwsriv(i0l,i0m) end do do i0l=1,n0l r1cwsmsr(i0l)=r2cwsmsr(i0l,i0m) end do do i0l=1,n0l r1cwsnnb(i0l)=r2cwsnnb(i0l,i0m) end do c d write(*,*) 'main: Before calc_crpyld' d write(*,*) 'main: |-i0m: ',i0m d write(*,*) 'main: |-c1optlnduse:',c1optlnduse(i0m) d write(*,*) 'main: |-i0crpdaymax:',i0crpdaymax d write(*,*) 'main: |-r0regfmin: ',r0regfmin d write(*,*) 'main: |-r0tdorm: ',r0tdorm d write(*,*) 'main: |-r0tfrz: ',r0tfrz d write(*,*) 'main: |-r0thvs: ',r0thvs d write(*,*) 'main: |-r0hunmax: ',r0hunmax d write(*,*) 'main: |-r1ihunmat: ',r0ihunmat d write(*,*) 'main: |-i1flgcul: ',i1flgcul(i0ldbg) d write(*,*) 'main: |-i1crptyp: ',i1crptyp(i0ldbg) d write(*,*) 'main: |-i1crpday: ',i1crpday(i0ldbg) d write(*,*) 'main: |-r1tair: ',r1tair(i0ldbg) d write(*,*) 'main: |-r1swdown: ',r1swdown(i0ldbg) d write(*,*) 'main: |-r1potevap: ',r1potevap(i0ldbg) d write(*,*) 'main: |-r1evap: ',r1evap(i0ldbg) d write(*,*) 'main: |-r1evapgrn: ',r1evapgrn(i0ldbg) d write(*,*) 'main: |-r1evapriv: ',r1evapriv(i0ldbg) d write(*,*) 'main: |-r1evapmsr: ',r1evapmsr(i0ldbg) d write(*,*) 'main: |-r1evapnnb: ',r1evapnnb(i0ldbg) d write(*,*) 'main: |-r1huna: ',r1huna(i0ldbg) d write(*,*) 'main: |-r1swu : ',r1swu(i0ldbg) d write(*,*) 'main: |-r1swp : ',r1swp(i0ldbg) d write(*,*) 'main: |-r1regfw: ',r1regfw(i0ldbg) d write(*,*) 'main: |-r1regfl: ',r1regfl(i0ldbg) d write(*,*) 'main: |-r1regfh: ',r1regfh(i0ldbg) d write(*,*) 'main: |-r1regfn: ',r1regfn(i0ldbg) d write(*,*) 'main: |-r1regfp: ',r1regfp(i0ldbg) d write(*,*) 'main: |-r1bt: ',r1bt(i0ldbg) d write(*,*) 'main: |-r1rsd: ',r1rsd(i0ldbg) d write(*,*) 'main: |-r1outb: ',r1outb(i0ldbg) d write(*,*) 'main: |-r1cwd: ',r1cwd(i0ldbg) d write(*,*) 'main: |-r1cws: ',r1cws(i0ldbg) d write(*,*) 'main: |-r1cwsgrn: ',r1cwsgrn(i0ldbg) d write(*,*) 'main: |-r1cwsriv: ',r1cwsriv(i0ldbg) d write(*,*) 'main: |-r1cwsmsr: ',r1cwsmsr(i0ldbg) d write(*,*) 'main: |-r1cwsnnb: ',r1cwsnnb(i0ldbg) c call calc_crpyld( $ n0l, n0ram, $ i0ldbg, $ i0crpdaymax,r0regfmin, r0tdorm, r0tfrz, $ r0thvs, r0hunmax, r0ihunmat, c0optts, $ c0optws, c0optns, c0optps, c0optfrz, $ r1icnum, r1ird, r1be, r1hvsti, $ r1to, r1tb, r1blai, r1dlai, $ r1dlp1, r1dlp2, r1bn1, r1bn2, $ r1bn3, r1bp1, r1bp2, r1bp3, $ r1cnyld, r1cpyld, r1rdmx, r1cvm, $ r1almn, r1sla, r1pt2, r1phun, $ i1flgcul, i1crptyp, i1crpday, $ r1tair, r1swdown, r1potevap, r1evap, $ r1evapgrn, r1evapriv, r1evapmsr, r1evapnnb, $ r1huna, r1swu, r1swp, r1regfw, $ r1regfl, r1regfh, r1regfn, r1regfp, $ r1bt, r1rsd, r1outb, $ r1cwd, r1cws, r1yld, r1regfd, $ r1cwsgrn, r1cwsriv, r1cwsmsr, r1cwsnnb, $ i1flgmat, i1flgend) c d write(*,*) 'main: After calc_crpyld' d write(*,*) 'main: |-r1huna: ',r1huna(i0ldbg) d write(*,*) 'main: |-r1swu : ',r1swu(i0ldbg) d write(*,*) 'main: |-r1swp : ',r1swp(i0ldbg) d write(*,*) 'main: |-r1regfw: ',r1regfw(i0ldbg) d write(*,*) 'main: |-r1regfl: ',r1regfl(i0ldbg) d write(*,*) 'main: |-r1regfh: ',r1regfh(i0ldbg) d write(*,*) 'main: |-r1regfn: ',r1regfn(i0ldbg) d write(*,*) 'main: |-r1regfp: ',r1regfp(i0ldbg) d write(*,*) 'main: |-r1bt: ',r1bt(i0ldbg) d write(*,*) 'main: |-r1rsd: ',r1rsd(i0ldbg) d write(*,*) 'main: |-r1outb: ',r1outb(i0ldbg) d write(*,*) 'main: |-r1cwd: ',r1cwd(i0ldbg) d write(*,*) 'main: |-r1cws: ',r1cws(i0ldbg) d write(*,*) 'main: |-r1cwsgrn: ',r1cwsgrn(i0ldbg) d write(*,*) 'main: |-r1cwsriv: ',r1cwsriv(i0ldbg) d write(*,*) 'main: |-r1cwsmsr: ',r1cwsmsr(i0ldbg) d write(*,*) 'main: |-r1cwsnnb: ',r1cwsnnb(i0ldbg) d write(*,*) 'main: |-r1yld: ',r1yld(i0ldbg) d write(*,*) 'main: |-r1regfd: ',r1regfd(i0ldbg) d write(*,*) 'main: |-i1flgmat: ',i1flgmat(i0ldbg) c output do i0l=1,n0l if(i1flgmat(i0l).eq.1)then if(i1flg2nd(i0l).eq.1)then r2cwdout2nd(i0l,i0m)=r1cwd(i0l) r2cwsout2nd(i0l,i0m)=r1cws(i0l) r2cwsout2ndgrn(i0l,i0m)=r1cwsgrn(i0l) r2cwsout2ndriv(i0l,i0m)=r1cwsriv(i0l) r2cwsout2ndmsr(i0l,i0m)=r1cwsmsr(i0l) r2cwsout2ndnnb(i0l,i0m)=r1cwsnnb(i0l) r2yldout2nd(i0l,i0m)=r1yld(i0l) r2regfdout2nd(i0l,i0m)=r1regfd(i0l) r2crpdayout2nd(i0l,i0m)=real(i1crpday(i0l)) r2hvsdoyout2nd(i0l,i0m)=real(i0doy) else r2cwdout1st(i0l,i0m)=r1cwd(i0l) r2cwsout1st(i0l,i0m)=r1cws(i0l) r2cwsout1stgrn(i0l,i0m)=r1cwsgrn(i0l) r2cwsout1striv(i0l,i0m)=r1cwsriv(i0l) r2cwsout1stmsr(i0l,i0m)=r1cwsmsr(i0l) r2cwsout1stnnb(i0l,i0m)=r1cwsnnb(i0l) r2yldout1st(i0l,i0m)=r1yld(i0l) r2regfdout1st(i0l,i0m)=r1regfd(i0l) r2crpdayout1st(i0l,i0m)=real(i1crpday(i0l)) r2hvsdoyout1st(i0l,i0m)=real(i0doy) end if c d if(i0l.eq.i0ldbg)then d write(*,*) 'main: i0doy: ',i0doy d write(*,*) 'main: r1cwd: ',r1cwd(i0ldbg) d write(*,*) 'main: r1cws: ',r1cws(i0ldbg) d write(*,*) 'main: r1cwsgrn: ',r1cwsgrn(i0ldbg) d write(*,*) 'main: r1cwsriv: ',r1cwsriv(i0ldbg) d write(*,*) 'main: r1cwsmsr: ',r1cwsmsr(i0ldbg) d write(*,*) 'main: r1cwsnnb: ',r1cwsnnb(i0ldbg) d write(*,*) 'main: r1yld: ',r1yld(i0ldbg) d write(*,*) 'main: r1regfd: ',r1regfd(i0ldbg) d write(*,*) 'main: i1flgmat: ',i1flgmat(i0ldbg) d write(*,*) 'main: i1crpday: ',i1crpday(i0ldbg) d end if c end if c if(i1flgend(i0l).eq.1)then if(i1flg2nd(i0l).eq.1)then i2flgculkiller(i0l,2)=1 else i2flgculkiller(i0l,1)=1 end if r1cwd(i0l)=0.0 r1cws(i0l)=0.0 r1cwsgrn(i0l)=0.0 r1cwsriv(i0l)=0.0 r1cwsmsr(i0l)=0.0 r1cwsnnb(i0l)=0.0 r1yld(i0l)=0.0 r1regfd(i0l)=0.0 i1crpday(i0l)=0 end if end do c save do i0l=1,n0l r2crpday(i0l,i0m)=real(i1crpday(i0l)) end do c save do i0l=1,n0l r2huna(i0l,i0m)=r1huna(i0l) end do do i0l=1,n0l r2swu(i0l,i0m)=r1swu(i0l) end do do i0l=1,n0l r2swp(i0l,i0m)=r1swp(i0l) end do do i0l=1,n0l r2regfw(i0l,i0m)=r1regfw(i0l) end do do i0l=1,n0l r2regfl(i0l,i0m)=r1regfl(i0l) end do do i0l=1,n0l r2regfh(i0l,i0m)=r1regfh(i0l) end do do i0l=1,n0l r2regfn(i0l,i0m)=r1regfn(i0l) end do do i0l=1,n0l r2regfp(i0l,i0m)=r1regfp(i0l) end do do i0l=1,n0l r2bt(i0l,i0m)=r1bt(i0l) end do do i0l=1,n0l r2rsd(i0l,i0m)=r1rsd(i0l) end do do i0l=1,n0l r2outb(i0l,i0m)=r1outb(i0l) end do do i0l=1,n0l r2cwd(i0l,i0m)=r1cwd(i0l) end do do i0l=1,n0l r2cws(i0l,i0m)=r1cws(i0l) end do do i0l=1,n0l r2cwsgrn(i0l,i0m)=r1cwsgrn(i0l) end do do i0l=1,n0l r2cwsriv(i0l,i0m)=r1cwsriv(i0l) end do do i0l=1,n0l r2cwsmsr(i0l,i0m)=r1cwsmsr(i0l) end do do i0l=1,n0l r2cwsnnb(i0l,i0m)=r1cwsnnb(i0l) end do c write if(i0mon.eq.12.and.i0day.eq.31)then do i0l=1,n0l r1tmp(i0l)=r2yldout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3yldout1st, c1yldout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2cwdout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwdout1st, c1cwdout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout1st, c1cwsout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout1stgrn(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout1stgrn,c1cwsout1stgrn, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout1striv(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout1striv,c1cwsout1striv, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout1stmsr(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout1stmsr,c1cwsout1stmsr, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout1stnnb(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout1stnnb,c1cwsout1stnnb, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2regfdout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3regfdout1st, c1regfdout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2crpdayout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3crpdayout1st,c1crpdayout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2hvsdoyout1st(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3hvsdoyout1st,c1hvsdoyout1st, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2yldout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3yldout2nd, c1yldout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2cwdout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwdout2nd, c1cwdout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2cwsout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout2nd, c1cwsout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout2ndgrn(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout2ndgrn,c1cwsout2ndgrn, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout2ndriv(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout2ndriv,c1cwsout2ndriv, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout2ndmsr(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout2ndmsr,c1cwsout2ndmsr, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2cwsout2ndnnb(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3cwsout2ndnnb,c1cwsout2ndnnb, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0ave) do i0l=1,n0l r1tmp(i0l)=r2regfdout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3regfdout2nd, c1regfdout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2crpdayout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3crpdayout2nd,c1crpdayout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) do i0l=1,n0l r1tmp(i0l)=r2hvsdoyout2nd(i0l,i0m) end do call wrte_bints3(n0l,n0t, $ r1tmp, r3hvsdoyout2nd,c1hvsdoyout2nd, $ i0year,i0mon,i0day,n0secday,n0secday, $ s0sta,n0m,i0m,r2arafrc,s0sum) c if(i0m.eq.n0m)then r2yldout1st=0.0 r2cwdout1st=0.0 r2cwsout1st=0.0 r2cwsout1stgrn=0.0 r2cwsout1striv=0.0 r2cwsout1stmsr=0.0 r2cwsout1stnnb=0.0 r2regfdout1st=0.0 r2crpdayout1st=0.0 r2hvsdoyout1st=0.0 r2yldout2nd=0.0 r2cwdout2nd=0.0 r2cwsout2nd=0.0 r2cwsout2ndgrn=0.0 r2cwsout2ndriv=0.0 r2cwsout2ndmsr=0.0 r2cwsout2ndnnb=0.0 r2regfdout2nd=0.0 r2crpdayout2nd=0.0 r2hvsdoyout2nd=0.0 end if c end if end do !! i0m c do i0l=1,n0l if(i2flgculkiller(i0l,1).eq.1)then i2flgcul(i0l,1)=0 i2flgculkiller(i0l,1)=0 end if if(i2flgculkiller(i0l,2).eq.1)then i2flgcul(i0l,2)=0 i2flgculkiller(i0l,2)=0 end if end do c end if cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc end do !! sec end do !! day end do !! mon end do !! year cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Spinup cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc if(i0spnflg.eq.0)then call calc_spinup( $ n0l, i0ldbg, $ r0spnerr, r0spnrat, $ r1soilmoist, r1spn, $ i0spnflg) if (i0spnflg.eq.0) then write(*,*) 'main: Again spin up' else write(*,*) 'main: End spin up.' do i0m=0,n0m call wrte_bints3(n0l,n0t, $ r1tmp, r3soilmoist, c1soilmoist, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1tmp, r3soiltemp, c1soiltemp, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1tmp, r3avgsurft, c1avgsurft, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn,n0m,i0m,r2arafrc,s0ave) call wrte_bints3(n0l,n0t, $ r1tmp, r3swe, c1swe, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn,n0m,i0m,r2arafrc,s0ave) end do call wrte_bints2(n0l,n0t, $ r1tmp, r2rivsto, c0rivsto, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn) call wrte_bints2(n0l,n0t, $ r1tmp, r2damsto, c0damsto, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn) call wrte_bints2(n0l,n0t, $ r1tmp, r2msrsto, c0msrsto, $ i0yearmin-1,12,31,n0secday,i0secint, $ s0spn) end if go to 10 end if cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c Message cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc do i0l=1,n0l if(i1watnotbal(i0l).gt.0)then write(*,*) 'main: i1watnotbal: ',i0l,i1watnotbal(i0l) end if end do c do i0l=1,n0l if(i1engnotbal(i0l).gt.0)then write(*,*) 'main: i1engnotbal: ',i0l,i1engnotbal(i0l) end if end do c do i0l=1,n0l if(i1notfin(i0l).gt.0)then write(*,*) 'main: i1notfin: ',i0l,i1notfin(i0l) end if end do c end