⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pothole.f

📁 水文模型的原始代码
💻 F
📖 第 1 页 / 共 2 页
字号:
      sumo = 0.

!! conversion factors
      cnv = 0.
      cnv = 10. * hru_ha(j)

!! when water is impounding
      if (imp_trig(nro(j),nrelease(j),ipot(j)) == 0) then

        !! update volume of water in pothole
        pot_vol(ipot(j)) = pot_vol(ipot(j)) + qday * Abs(pot_fr(j)) *   &
     &     cnv
        potflwi(ipot(j)) = potflwi(ipot(j)) + qday * Abs(pot_fr(j)) *   &
     &     cnv
        qday = qday * (1. - Abs(pot_fr(j)))

        !! update sediment in pothole  
        pot_sed(ipot(j)) = pot_sed(ipot(j)) + sedyld(j) * Abs(pot_fr(j)) 
        potsedi(ipot(j)) = potsedi(ipot(j)) + sedyld(j) * Abs(pot_fr(j))
        sedyld(j) = sedyld(j) * (1. - Abs(pot_fr(j)))

        !! update nitrate in pothole
        pot_no3(ipot(j)) = pot_no3(ipot(j)) + surqno3(j) *              &
     &     Abs(pot_fr(j)) * hru_ha(j)
        surqno3(j) = surqno3(j) * (1. - Abs(pot_fr(j)))


        !! adjust water balance if rice or pothole in HRU
        !! i.e. if ipot(j) == j

        if (pot_vol(j) > 0.) then

          !! compute surface area assuming a cone shape (m^2)
          potsa(j) = pi * (3. * pot_vol(j) / (pi * hru_slp(j)))**.66666
          potsa(j) = potsa(j) / 10000.                    !convert to ha
          potsa(j) = Min(potsa(j), hru_ha(j))

          !! compute rainfall on impounded water and add to current volume
          potpcp = subp(j) * potsa(j) * 10.
          pot_vol(j) = pot_vol(j) + potpcp

          !! check if max volume is exceeded
          if (pot_vol(j) > pot_volx(j)) then
            spillo = 0.
            sedloss = 0.
            no3loss = 0.
            spillo = pot_vol(j) - pot_volx(j)
            sumo = sumo + spillo
            pot_vol(j) = pot_volx(j)
            qday = qday + spillo / cnv

            sedloss = pot_sed(j) *  spillo / pot_vol(j)
            sedloss = Min(sedloss, pot_sed(j))
            pot_sed(j) = pot_sed(j) - sedloss
            potsedo = potsedo + sedloss
            sedyld(j) = sedyld(j) + sedloss

            no3loss = pot_no3(j) *  spillo / pot_vol(j)
            no3loss = Min(no3loss, pot_no3(j))
            pot_no3(j) = pot_no3(j) - no3loss
            surqno3(j) = surqno3(j) + no3loss / hru_ha(j)
          endif

          !! limit seepage into soil if profile is near field capacity
          yy = 0.
          if (sol_sw(j) / sol_sumfc(j) < .5) then
            yy = 1.
          elseif (sol_sw(j) / sol_sumfc(j) < 1.) then
            yy = 1. - sol_sw(j) / sol_sumfc(j)
          endif

          !! calculate seepage into soil
          potsep = yy * sol_k(1,j) * potsa(j) * 240.
          potsep = Min(potsep, pot_vol(j))
          pot_vol(j) = pot_vol(j) - potsep
          sol_st(1,j) = sol_st(1,j) + potsep / cnv

          !! redistribute water so that no layer exceeds maximum storage
          do ly = 1, sol_nly(j)
            dg = 0.
            stmax = 0.
            excess = 0.
            if (ly == 1) then
              dg = sol_z(ly,j)
            else
              dg = sol_z(ly,j) - sol_z(ly-1,j)
            end if
            stmax = sol_por(ly,j) * dg
            if (sol_st(ly,j) <= stmax) exit
            excess = stmax - sol_st(ly,j)
            sol_st(ly,j) = stmax
            if (ly + 1 <= sol_nly(j)) then
              sol_st(ly+1,j) = sol_st(ly+1,j) + excess
            end if
          end do

          !! recompute total soil water
          sol_sw(j) = 0.
          do ly = 1, sol_nly(j)
            sol_sw(j) = sol_sw(j) + sol_st(ly,j)
          end do

          !! compute evaporation from water surface
          if (laiday(j) < evlai) then
            potev = (1. - laiday(j) / evlai) * pet_day
            potev = 10. * evpot(j) * potev * potsa(j)          !!units mm => m^3
            potev = Min(potev, pot_vol(j))
            pot_vol(j) = pot_vol(j) - potev
          endif

          !! Check date for release/impounding water on rice fields
          if (iida == irelease(nro(j),nrelease(j),j) .and.              &
     &                        imp_trig(nro(j),nrelease(j),j) == 1) then
            qday = qday + pot_vol(j) / cnv
            sumo = sumo + pot_vol(j)
            pot_vol(j) = 0.
            potsedo = potsedo + pot_sed(j)
            sedyld(j) = sedyld(j) + pot_sed(j)
            pot_sed(j) = 0.
            surqno3(j) = surqno3(j) + pot_no3(j) / hru_ha(j)
            pot_no3(j) = 0.
          else
            tileo = Min(pot_tile(j), pot_vol(j))
            sumo = sumo + tileo
            pot_vol(j) = pot_vol(j) - tileo
            qday = qday + tileo / cnv
            if (pot_vol(j) > 1.) then
              sedloss = 0.
              no3loss = 0.
              sedloss = pot_sed(j) *  tileo / pot_vol(j)
              pot_sed(j) = pot_sed(j) - sedloss
              potsedo = potsedo + sedloss
              sedyld(j) = sedyld(j) + sedloss
              no3loss = pot_no3(j) *  tileo / pot_vol(j)
              pot_no3(j) = pot_no3(j) - no3loss
              surqno3(j) = surqno3(j) + no3loss / hru_ha(j)
            else
              sedyld(j) = 0.
              surqno3(j) = 0.
            endif
          endif

          !! calculate settling in the pothole
          sedsetl = 0.
          sedsetl = (pot_sed(j) - (pot_nsed(j) * pot_vol(j) / 1.e6)) *  &
     &       sed_stl(j)
          sedsetl = Min(sedsetl, pot_sed(j))
          pot_sed(j) = pot_sed(j) - sedsetl
          pot_sed(j) = Max(0., pot_sed(j))
          pot_no3(j) = pot_no3(j) * (1. - pot_no3l(j))
        endif
      endif


        potpcpmm = potpcp / cnv
        potevmm = potev / cnv
        potsepmm = potsep / cnv
        potflwo = sumo / cnv

!! summary calculations
      if (curyr > nyskip) then
        potmm = 0.
        potmm = pot_vol(j) / cnv

        spadyo = spadyo + potflwo * hru_dafr(j)
        spadyev = spadyev + potevmm * hru_dafr(j)
        spadysp = spadysp + potsepmm * hru_dafr(j)
        spadyrfv = spadyrfv + potpcpmm * hru_dafr(j)
      end if

      return
1000  format (1x,i4,2x,9(f8.2,2x))
      end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -