PEAT VOXEL Model

PEAT VOXEL Model preview image

3 collaborators

Dsc_0001 Aryo Adhi Condro (Author)
Idung Risdiyanto (Advisor)
Hidayat Pawitan (Advisor)

Tags

voxel, peat voxel 

Tagged by Aryo Adhi Condro 5 months ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 3D 5.3.1 • Viewed 302 times • Downloaded 48 times • Run 0 times
Download the 'PEAT VOXEL Model' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


## WHAT IS IT?

It is a voxel-based model of peatland hydrology. In general, the model captures spatio-temporal dynamics of surface water due to land-atmospheric interactions on various land cover types, and spatio-temporal dynamics of sub-surface water due to water diffusion within peat layers, which is three-dimensionally explicit, represented as voxels. Temporal resolution of the model is daily, and three-dimensional spatial resolution of the model is 60 m x 60 m x 0.1 m, with extent area of about ~900 ha and maximum peat depth of 4 m.

## HOW TO USE IT

• Execute peatvoxelXXXXX.nlogo3d using NetLogo 5.3.1 3D

• Uncheck view updates to speed up computation

• Configure total of warming up days using warming-up-duration slider

• Turn on the report-ascii-map if you want to get ascii file of output

• Click setup and wait it untill the model initialisation is done

• Then, click 'go' for simulate the model

• The output of the model will saved in output folder (...\data\output\...)

## CREDITS

Aryo Adhi Condro (aacondro@gmail.com), Idung Risdiyanto (idungris@gmail.com) & Hidayat Pawitan (hpawitan@gmail.com)

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;; PEAT VOXEL MODEL
;;
;; A voxel-based model of peatland hydrology
;;
;; Aryo Adhi Condro @ 2017
;;
;; Supervisors: Idung Risdiyanto, S. Si, M.Sc. & Prof. Dr. Hidayat Pawitan
;;
;; GFM - IPB, Bogor, Indonesia
;;
;; Updated: 10-May-2017


breed[waters water]

extensions
[
  array
  csv
  gis
  palette
  pathdir
]

waters-own
[
  water-height
]

globals
[
  input-array-asc
  input-array-csv
  input-path-asc
  input-path-csv

  output-path-asc
  output-path-csv
  output-path-png

  lookup-parameters-peat
  lookup-parameters-climate
  lookup-parameters-land
  lookup-parameters-scenario

  map-attributes-n-cols
  map-attributes-n-rows
  map-attributes-corner-xll
  map-attributes-corner-yll
  map-attributes-cell-size-degree
  map-attributes-cell-size-meter
  map-attributes-cell-area-ha

  timeseries-precipitation ;;mm
  timeseries-potential-evapotranspiration ;;mm

  ;;peat
  parameter-max-peat-depth ;; meter
  parameter-z-size ;; meter
  parameter-peat-layer-number ;;layers

  parameter-hydraulic-conductivity-mean-acrotelm ;; meter per day
  parameter-hydraulic-conductivity-mean-catotelm ;; meter per day
  parameter-hydraulic-conductivity-cv-acrotelm ;; %
  parameter-hydraulic-conductivity-cv-catotelm ;; %

  parameter-initial-water-height-mean-acrotelm ;;mm
  parameter-initial-water-height-cv-acrotelm ;;%
  parameter-initial-water-height-mean-catotelm ;;mm
  parameter-initial-water-height-cv-catotelm ;;%

  parameter-hydraulic-conductivity-min-acrotelm ;; meter per day
  parameter-hydraulic-conductivity-min-catotelm ;; meter per day
  parameter-hydraulic-conductivity-max-acrotelm ;; meter per day
  parameter-hydraulic-conductivity-max-catotelm ;; meter per day

  parameter-max-depth-acrotelm-mean ;;m
  parameter-max-depth-acrotelm-cv ;;%
  parameter-max-depth-acrotelm-min ;;m
  parameter-max-depth-acrotelm-max ;;m
  parameter-saturated-capacity-mean-acrotelm ;;mm
  parameter-saturated-capacity-cv-acrotelm ;;%
  parameter-saturated-capacity-min-acrotelm ;;mm
  parameter-saturated-capacity-max-acrotelm ;;mm
  parameter-saturated-capacity-mean-catotelm ;;mm
  parameter-saturated-capacity-cv-catotelm ;;%
  parameter-saturated-capacity-min-catotelm ;;mm
  parameter-saturated-capacity-max-catotelm ;;mm


  parameter-field-capacity-mean-acrotelm ;;mm
  parameter-field-capacity-cv-acrotelm ;;%
  parameter-field-capacity-min-acrotelm ;;mm
  parameter-field-capacity-max-acrotelm ;;mm
  parameter-field-capacity-mean-catotelm ;;mm
  parameter-field-capacity-cv-catotelm ;;%
  parameter-field-capacity-min-catotelm ;;mm
  parameter-field-capacity-max-catotelm ;;mm

  parameter-overland-flow-velocity ;;m/day
  parameter-overland-flow-routing-distance-per-day-meter;;meter
  parameter-overland-flow-routing-distance-per-day-cell;;xy of voxel

  ;;climate
  parameter-precipitation-gross
  parameter-potential-evapotranspiration

  ;;scenario
  parameter-scenario-number

  ;;voxels
  voxels-zone
  voxels-surface
  voxels-peat
  voxels-acrotelm
  voxels-catotelm

  ;;user message
  message-status

  ;;run
  run-day
  run-day-number
]

patches-own
[
  ;;voxels
  patch-base?
  patch-layer
  patch-surface?
  patch-zone?

  ;;peat
  patch-peat?
  patch-acrotelm?
  patch-depth
  patch-peat-depth
  patch-peat-hydraulic-conductivity
  patch-water-height
  patch-peat-water-diffusion-darcy
  patch-peat-water-diffusion-outflow-target-voxels
  patch-peat-water-diffusion-outflow-target-voxels-fraction
  patch-peat-water-diffusion-inflow
  patch-peat-water-diffusion-inflow-list
  patch-peat-water-diffusion-inflow-delta-list
  patch-peat-water-diffusion-outflow-delta-list
  patch-peat-water-diffusion-outflow
  patch-peat-water-diffusion-inflow-source-voxels-list
  patch-peat-saturated-capacity
  patch-peat-field-capacity
  patch-water-height-peat


  ;;elevation
  patch-elevation

  ;;land
  patch-land
  patch-land-pet-correction-factor ;;%
  patch-land-interception-potential ;;mm
  patch-land-drought-resistance ;;%
  patch-land-interception-effect-on-transpiration ;;%

  ;;climate
  patch-precipitation-gross


  ;;reporting maps
  patch-water-height-ascii

  ;;observation
  patch-observation-id
]

to-report gis-read-map[m]
 let r gis:load-dataset m
 gis:set-world-envelope gis:envelope-of r
 report r
end 

to initialise-input-parameters
  csv-read-input

  set parameter-z-size item 0 item 1 lookup-parameters-peat ;; meter
  set parameter-initial-water-height-mean-acrotelm item 1 item 1 lookup-parameters-peat;;mm
  set parameter-initial-water-height-cv-acrotelm item 2 item 1 lookup-parameters-peat;;%
  set parameter-initial-water-height-mean-catotelm item 3 item 1 lookup-parameters-peat;;mm
  set parameter-initial-water-height-cv-catotelm item 4 item 1 lookup-parameters-peat;;%
  set parameter-max-depth-acrotelm-mean item 5 item 1 lookup-parameters-peat;;m
  set parameter-max-depth-acrotelm-cv item 6 item 1 lookup-parameters-peat;;%
  set parameter-max-depth-acrotelm-min item 7 item 1 lookup-parameters-peat;;m
  set parameter-max-depth-acrotelm-max item 8 item 1 lookup-parameters-peat;;m
  set parameter-overland-flow-velocity item 9 item 1 lookup-parameters-peat;;m/day

  set parameter-overland-flow-routing-distance-per-day-meter parameter-overland-flow-velocity;; meter/day
  set parameter-overland-flow-routing-distance-per-day-cell round(parameter-overland-flow-routing-distance-per-day-meter / map-attributes-cell-size-meter)
  set parameter-scenario-number item 0 item 1 lookup-parameters-scenario


  set timeseries-precipitation item 1 lookup-parameters-climate;;mm
  set timeseries-potential-evapotranspiration item 2 lookup-parameters-climate;;mm

  set run-day 1
  set run-day-number length (item 0 lookup-parameters-climate)
end 

to initialise-declare-input
 set input-path-asc "data/input/asc/"
 set input-path-csv "data/input/csv/"

 set input-array-asc array:from-list
 [
   "map-dem.asc"
   "map-land.asc"
   "map-observation.asc"
   "map-peat-depth.asc"
 ]

 set input-array-csv array:from-list
 [
   "parameters-peat.csv"
   "parameters-climate.csv"
   "parameters-land.csv"
   "parameters-scenario.csv"
 ]
end 

to initialise-declare-output
  set output-path-csv word"/data/output/" word "run-" word parameter-scenario-number "/csv/"
  pathdir:create output-path-csv

  set output-path-png word"/data/output/" word "run-" word parameter-scenario-number "/png/"
  pathdir:create output-path-png

  if(report-ascii-map?)
  [
    set output-path-asc word"/data/output/" word "run-" word parameter-scenario-number "/asc/"
    pathdir:create output-path-asc
  ]

  output-write-main-header-csv1 word output-path-csv "output-gwl-average.csv"
  output-write-main-header-csv2 word output-path-csv "output-gwl-observation1.csv"
  output-write-main-header-csv3 word output-path-csv "output-gwl-observation2.csv"
  output-write-main-header-csv4 word output-path-csv "output-gwl-observation3.csv"
  output-write-main-header-csv5 word output-path-csv "output-gwl-observation4.csv"
  output-write-main-header-csv6 word output-path-csv "output-gwl-observation5.csv"

  output-write-main-header-csv7 word output-path-csv "output-wc-average.csv"
  output-write-main-header-csv8 word output-path-csv "output-wc-observation1.csv"
  output-write-main-header-csv9 word output-path-csv "output-wc-observation2.csv"
  output-write-main-header-csv10 word output-path-csv "output-wc-observation3.csv"
  output-write-main-header-csv11 word output-path-csv "output-wc-observation4.csv"
  output-write-main-header-csv12 word output-path-csv "output-wc-observation5.csv"

  output-write-main-header-csv13 word output-path-csv "output-wc-landcover-forest.csv"
  output-write-main-header-csv14 word output-path-csv "output-wc-landcover-shrub.csv"
  output-write-main-header-csv15 word output-path-csv "output-wc-landcover-burntland.csv"
  output-write-main-header-csv16 word output-path-csv "output-wc-landcover-bareland.csv"

  output-write-main-header-csv17 word output-path-csv "output-gwl-landcover-forest.csv"
  output-write-main-header-csv18 word output-path-csv "output-gwl-landcover-shrub.csv"
  output-write-main-header-csv19 word output-path-csv "output-gwl-landcover-burntland.csv"
  output-write-main-header-csv20 word output-path-csv "output-gwl-landcover-bareland.csv"
end 

to gis-read-map-attributes
 let m word input-path-asc array:item input-array-asc 0

 file-open m
  set map-attributes-n-cols read-from-string remove "ncols " file-read-line;;cells
  set map-attributes-n-rows read-from-string remove "nrows " file-read-line;;cells
  set map-attributes-corner-xll read-from-string remove "xllcorner " file-read-line;;degree
  set map-attributes-corner-yll read-from-string remove "yllcorner " file-read-line;;degree
  set map-attributes-cell-size-degree read-from-string remove "cellsize " file-read-line;;degree
 file-close

 set map-attributes-cell-size-meter map-attributes-cell-size-degree * 111000 ;;meter
 set map-attributes-cell-area-ha (map-attributes-cell-size-meter ^ 2) / 10000 ;;ha
end 

to gis-resize-world
 let max-z round max[patch-elevation]of patches
 gis-read-map-attributes
 resize-world 0 (map-attributes-n-cols - 1) 0 (map-attributes-n-rows - 1) 0 (parameter-peat-layer-number)
 set-patch-size 18

 orbit-down 45
 orbit-left 210
end 

to gis-read-input-maps
  ask patches
  [
    set patch-elevation -9999
    set patch-land -9999
    set patch-observation-id -9999
    set patch-peat-depth -9999
  ]

  gis:apply-raster (gis-read-map word input-path-asc array:item input-array-asc 0) patch-elevation
  gis:apply-raster (gis-read-map word input-path-asc array:item input-array-asc 1) patch-land
  gis:apply-raster (gis-read-map word input-path-asc array:item input-array-asc 2) patch-observation-id
  gis:apply-raster (gis-read-map word input-path-asc array:item input-array-asc 3) patch-peat-depth

  set parameter-max-peat-depth round((max[patch-peat-depth]of patches) / 100);; meter
  set parameter-peat-layer-number round(parameter-max-peat-depth / parameter-z-size)
end 

to initialise-land
  ask voxels-surface
  [
    let i position patch-land item 1 lookup-parameters-land
    set patch-land-pet-correction-factor item i item 2 lookup-parameters-land ;;%
    set patch-land-interception-potential item i item 3 lookup-parameters-land ;;mm
    set patch-land-drought-resistance item i item 4 lookup-parameters-land ;;%
    set patch-land-interception-effect-on-transpiration item i item 5 lookup-parameters-land ;;%

    set parameter-hydraulic-conductivity-mean-acrotelm item i item 6 lookup-parameters-land ;;m/d
    set parameter-hydraulic-conductivity-cv-acrotelm item i item 7 lookup-parameters-land ;;%
    set parameter-hydraulic-conductivity-min-acrotelm item i item 8 lookup-parameters-land ;;m/d
    set parameter-hydraulic-conductivity-max-acrotelm item i item 9 lookup-parameters-land ;;m/d

    set parameter-hydraulic-conductivity-mean-catotelm item i item 10 lookup-parameters-land ;;m/d
    set parameter-hydraulic-conductivity-cv-catotelm item i item 11 lookup-parameters-land ;;%
    set parameter-hydraulic-conductivity-min-catotelm item i item 12 lookup-parameters-land ;;m/d
    set parameter-hydraulic-conductivity-max-catotelm item i item 13 lookup-parameters-land ;;m/d

    set parameter-field-capacity-mean-acrotelm item i item 14 lookup-parameters-land;;mm
    set parameter-field-capacity-cv-acrotelm item i item 15 lookup-parameters-land;;%
    set parameter-field-capacity-min-acrotelm item i item 16 lookup-parameters-land;;mm
    set parameter-field-capacity-max-acrotelm item i item 17 lookup-parameters-land;;mm

    set parameter-field-capacity-mean-catotelm item i item 18 lookup-parameters-land;;mm
    set parameter-field-capacity-cv-catotelm item i item 19 lookup-parameters-land;;%
    set parameter-field-capacity-min-catotelm item i item 20 lookup-parameters-land;;mm
    set parameter-field-capacity-max-catotelm item i item 21 lookup-parameters-land;;mm

    set parameter-saturated-capacity-mean-acrotelm item i item 22 lookup-parameters-land;;mm
    set parameter-saturated-capacity-cv-acrotelm item i item 23 lookup-parameters-land;;%
    set parameter-saturated-capacity-min-acrotelm item i item 24 lookup-parameters-land;;mm
    set parameter-saturated-capacity-max-acrotelm item i item 25 lookup-parameters-land;;mm

    set parameter-saturated-capacity-mean-catotelm item i item 26 lookup-parameters-land;;mm
    set parameter-saturated-capacity-cv-catotelm item i item 27 lookup-parameters-land;;%
    set parameter-saturated-capacity-min-catotelm item i item 28 lookup-parameters-land;;mm
    set parameter-saturated-capacity-max-catotelm item i item 29 lookup-parameters-land;;mm
  ]
end 

to initialise-peat-properties
  ask patches
  [
    set patch-peat-field-capacity -9999
    set patch-peat-hydraulic-conductivity -9999
    set patch-peat-saturated-capacity -9999
  ]

  ask voxels-acrotelm
  [
    set patch-peat-hydraulic-conductivity ;;meter per day
       (min list parameter-hydraulic-conductivity-max-acrotelm
       (max list parameter-hydraulic-conductivity-min-acrotelm
       (random-normal parameter-hydraulic-conductivity-mean-acrotelm
       ((parameter-hydraulic-conductivity-cv-acrotelm / 100) * parameter-hydraulic-conductivity-mean-acrotelm))))

    set patch-peat-field-capacity ;;mm
        (min list parameter-field-capacity-max-acrotelm
        (max list parameter-field-capacity-min-acrotelm
        (random-normal parameter-field-capacity-mean-acrotelm
        ((parameter-field-capacity-cv-acrotelm / 100) * parameter-field-capacity-mean-acrotelm))))

    set patch-peat-saturated-capacity ;;mm
        (min list parameter-saturated-capacity-max-acrotelm
        (max list parameter-saturated-capacity-min-acrotelm
        (random-normal parameter-saturated-capacity-mean-acrotelm
        ((parameter-saturated-capacity-cv-acrotelm / 100) * parameter-saturated-capacity-mean-acrotelm))))
  ]

  ask voxels-catotelm
  [
    set patch-peat-hydraulic-conductivity ;;meter per day
       (min list parameter-hydraulic-conductivity-max-catotelm
       (max list parameter-hydraulic-conductivity-min-catotelm
       (random-normal parameter-hydraulic-conductivity-mean-catotelm
       ((parameter-hydraulic-conductivity-cv-catotelm / 100) * parameter-hydraulic-conductivity-mean-catotelm))))

    set patch-peat-field-capacity ;;mm
        (min list parameter-field-capacity-max-catotelm
        (max list parameter-field-capacity-min-catotelm
        (random-normal parameter-field-capacity-mean-catotelm
        ((parameter-field-capacity-cv-catotelm / 100) * parameter-field-capacity-mean-catotelm))))

     set patch-peat-saturated-capacity ;;mm
        (min list parameter-saturated-capacity-max-catotelm
        (max list parameter-saturated-capacity-min-catotelm
        (random-normal parameter-saturated-capacity-mean-catotelm
        ((parameter-saturated-capacity-cv-catotelm / 100) * parameter-saturated-capacity-mean-catotelm))))
  ]

  ask voxels-acrotelm
  [
      set patch-water-height ;;mm
        (min list patch-peat-saturated-capacity
        (max list 0
        (random-normal parameter-initial-water-height-mean-acrotelm
        ((parameter-initial-water-height-cv-acrotelm / 100) * parameter-initial-water-height-mean-acrotelm))))
  ]

  ask voxels-catotelm
  [
    set patch-water-height ;;mm
        (min list patch-peat-saturated-capacity
        (max list 0
        (random-normal parameter-initial-water-height-mean-catotelm
        ((parameter-initial-water-height-cv-catotelm / 100) * parameter-initial-water-height-mean-catotelm))))
  ]
end 

to initialise-patches
  ask patches
  [
    set patch-base? false
    set patch-surface? false
    set patch-zone? false
    set patch-water-height -9999
    set patch-peat? false
    set patch-depth -9999
    set patch-acrotelm? false
  ]

  ask patches
  [
    set patch-base? pzcor = 0 and (patch-elevation <= 0 or patch-elevation >= 0) and (patch-land > 0) and (patch-peat-depth <= 0 or patch-peat-depth >= 0)
  ]

  let z parameter-peat-layer-number + 1
  let z-list n-values z[?]

  ask patches with[patch-base?]
  [
    let x pxcor
    let y pycor

    let dem patch-elevation
    let land patch-land
    let obs patch-observation-id
    let peat-depth patch-peat-depth

    foreach z-list
    [
      ask patch x y ?
      [
        set patch-zone? true
        set patch-elevation dem
        set patch-land land
        set patch-observation-id obs
        set patch-peat-depth peat-depth
        set patch-layer parameter-peat-layer-number - ?
        set patch-depth round(patch-layer * parameter-z-size * 10) / 10
      ]
    ]

    ask patch x y (last z-list)
    [
      set patch-surface? true
    ]
  ]

  ask patches
  [
    set patch-peat? patch-zone? and patch-layer >= 1 and patch-layer <= parameter-peat-layer-number
        and patch-depth <= (patch-peat-depth / 100)
  ]

  set voxels-zone patches with[patch-zone?]
  set voxels-surface patches with[patch-surface?]
  set voxels-peat patches with[patch-peat?]

  ask voxels-peat
  [
    let d
        max list parameter-max-depth-acrotelm-min
        (min list parameter-max-depth-acrotelm-max
        (random-normal parameter-max-depth-acrotelm-mean
        (parameter-max-depth-acrotelm-mean * (parameter-max-depth-acrotelm-cv / 100))))

    let rd (round (d * 10)) / 10

    set patch-acrotelm? (patch-depth > 0 and patch-depth <= rd)
  ]

  set voxels-acrotelm voxels-peat with[patch-acrotelm?]
  set voxels-catotelm voxels-peat with[not patch-acrotelm?]

  ask voxels-surface
  [
    set patch-water-height 0
  ]
end 

to gis-display-voxels
  ask voxels-zone
  [
    set pcolor palette:scale-gradient palette:scheme-colors "Divergent" "Spectral" 11 patch-water-height 0 100 ;;more blue more water
  ]
end 

to run-setup
  set message-status ""
  ca
  set message-status "initialising the model... please, wait..."
  initialise-declare-input
  gis-read-map-attributes
  initialise-input-parameters
  gis-read-input-maps
  gis-resize-world
  initialise-patches
  initialise-declare-output
  initialise-land
  initialise-peat-properties
  update-scenario-number
  reset-ticks
  set message-status "model initialisation is done! now, you can simulate!"
end 

to dynamic-flow-surface-water
  let target min-one-of neighbors with[patch-surface?] [patch-elevation + (sum [water-height]of waters-here)]

  if[patch-elevation + (sum [water-height]of waters-here)] of target < (patch-elevation + (sum [water-height]of waters-here))
  [
    move-to target
  ]
end 

to dynamic-simulate-surface-water
   set parameter-precipitation-gross item(run-day - 1) timeseries-precipitation
   set parameter-potential-evapotranspiration item(run-day - 1) timeseries-potential-evapotranspiration


   ask voxels-surface
   [
     set patch-precipitation-gross parameter-precipitation-gross
   ]

   ask voxels-surface
   [
     let x pxcor
     let y pycor
     let z pzcor
     let unsaturated-water-zone patches with[pxcor = x and pycor = y and patch-acrotelm?]

     let h mean[patch-water-height]of unsaturated-water-zone
     let saturated-capacity mean[patch-peat-saturated-capacity]of unsaturated-water-zone
     let field-capacity mean[patch-peat-field-capacity]of unsaturated-water-zone


     let interception-actual patch-land-interception-potential * ( 1 - exp (-1 * (patch-precipitation-gross / patch-land-interception-potential)))
     let evapotranspiration-corected (patch-land-pet-correction-factor / 100) * parameter-potential-evapotranspiration

     let relative-water-availability ifelse-value (field-capacity > 0)
     [
        min list 1 (h / ((patch-land-drought-resistance / 100) * field-capacity))
     ]
     [
       1
     ]

     let evapotranspiration-actual relative-water-availability * (max list 0 (evapotranspiration-corected - ((patch-land-interception-effect-on-transpiration / 100) * interception-actual)))

     ask unsaturated-water-zone
     [
       set patch-water-height max list 0 (patch-water-height - evapotranspiration-actual)
     ]


     ;; elaborate infiltration (MaxInf*t24)

     let infiltration-capacity max list 0 (saturated-capacity - h)
     let total-water-gross max list 0 (patch-precipitation-gross + patch-water-height - interception-actual)
     let infiltration min list total-water-gross infiltration-capacity

     ask unsaturated-water-zone
     [
       set patch-water-height min list patch-peat-saturated-capacity (patch-water-height + infiltration)
     ]

     let total-water-net max list 0 (total-water-gross - infiltration)

     if(total-water-net > 0)
     [
       sprout-waters 1
       [
         ht
         set water-height total-water-net
       ]
     ]
   ]

   ask voxels-surface
   [
     set patch-water-height 0
   ]


   if(any? waters)
   [
     repeat parameter-overland-flow-routing-distance-per-day-cell ;; iteration = routing distance of each cell per day
     [
       ask waters[dynamic-flow-surface-water]
        ask patches with[not patch-surface?]
       [
         if(any? waters-here)
         [
           ask waters-here [die]
         ]
       ]
     ]
   ]

   ask voxels-surface
   [
     if(any? waters-here)
     [
       set patch-water-height sum[water-height]of waters-here
     ]
   ]

  ask waters[die]
end 

to dynamic-diffuse-peat-water
  ;;initialisation
  ask voxels-peat
  [
    set patch-peat-water-diffusion-darcy 0
    set patch-peat-water-diffusion-inflow 0
    set patch-peat-water-diffusion-outflow 0
    set patch-peat-water-diffusion-inflow-list[]
    set patch-peat-water-diffusion-inflow-source-voxels-list []
    set patch-peat-water-diffusion-inflow-delta-list[]
    set patch-peat-water-diffusion-outflow-delta-list[]
  ]

  ask voxels-peat
  [
    let h patch-water-height
    let n neighbors6 with[patch-peat?]
    let z pzcor
    let source self

    ask n
    [
      let d ifelse-value(pzcor = z) ;;mm
         [
           map-attributes-cell-size-meter ;; meter
         ]
         [
           parameter-z-size ;; meter
         ]

      set patch-peat-water-diffusion-darcy
        -1 * patch-peat-hydraulic-conductivity * ((h - patch-water-height) / d)
    ]

    set patch-peat-water-diffusion-outflow-target-voxels n with[patch-peat-water-diffusion-darcy < 0]

    if(any? patch-peat-water-diffusion-outflow-target-voxels)
    [
      let total-outflow sum[-1 * patch-peat-water-diffusion-darcy]of patch-peat-water-diffusion-outflow-target-voxels
      let outflow min list patch-water-height total-outflow

      set patch-peat-water-diffusion-outflow ;;actual outflow from source voxels
          outflow

      ask patch-peat-water-diffusion-outflow-target-voxels
      [
        set patch-peat-water-diffusion-outflow-target-voxels-fraction
            (-1 * patch-peat-water-diffusion-darcy) / total-outflow

        set patch-peat-water-diffusion-inflow ;;actual inflow to target voxels
            outflow * patch-peat-water-diffusion-outflow-target-voxels-fraction

        set patch-peat-water-diffusion-inflow-list lput patch-peat-water-diffusion-inflow patch-peat-water-diffusion-inflow-list

        set patch-peat-water-diffusion-inflow-source-voxels-list lput source patch-peat-water-diffusion-inflow-source-voxels-list
      ]
    ]
  ]

  ;; limit inflow to the maximum capacity of peat retention
  ask voxels-peat
  [
    let unlimited-inflow-list patch-peat-water-diffusion-inflow-list
    let sum-unlimited-inflow sum unlimited-inflow-list
    let sum-maximum-inflow max list 0 (patch-peat-saturated-capacity - patch-water-height)

    if(sum-unlimited-inflow > sum-maximum-inflow)
    [
      let i-fraction (map[? / sum-unlimited-inflow] unlimited-inflow-list)
      let i (map[sum-maximum-inflow * ?] i-fraction)
      set patch-peat-water-diffusion-inflow-delta-list (map[max list 0 (?1 - ?2)] unlimited-inflow-list i)
      set patch-peat-water-diffusion-inflow-list i
    ]
  ]

  ;; delta change outflow by source voxels -- as limited by maximum water retention
  ask voxels-peat
  [
    if(length patch-peat-water-diffusion-inflow-delta-list > 0)
    [
      let ldi patch-peat-water-diffusion-inflow-delta-list
      let lsi patch-peat-water-diffusion-inflow-source-voxels-list

      foreach ldi
      [
        let di ?
        let i position di ldi
        let source item i lsi
        ask source
        [
            set patch-peat-water-diffusion-outflow-delta-list lput di patch-peat-water-diffusion-outflow-delta-list
        ]
      ]

    ]
  ]

  ;; synchronise the outflow from source voxels according to maximum inflow of target voxels
  ask voxels-peat
  [
     set patch-peat-water-diffusion-outflow max list 0 (patch-peat-water-diffusion-outflow - (sum patch-peat-water-diffusion-outflow-delta-list))
  ]

  ;; update water height
  ask voxels-peat
  [
      set patch-water-height
        max list 0
        (patch-water-height + sum patch-peat-water-diffusion-inflow-list - patch-peat-water-diffusion-outflow)
  ]

  ;; convert water level from positive term into negative term
  ask patches
  [
    set patch-water-height-peat -9999
  ]

  ask voxels-peat
  [
    set patch-water-height-peat patch-water-height - patch-peat-saturated-capacity
  ]
end 

to run-simulate
  repeat run-day-number
  [
    dynamic-simulate-surface-water
    dynamic-diffuse-peat-water


    gis-display-voxels
    gis-report-daily

    tick

    if(run-day < run-day-number)
    [
      set run-day run-day + 1
    ]
  ]
end 

to run-warm-up
  repeat warming-up-duration
  [
    dynamic-simulate-surface-water
    dynamic-diffuse-peat-water

    tick

    if(run-day < run-day-number)
    [
      set run-day run-day + 1
    ]
  ]
end 

to run-go
  set message-status "warming up..."
  run-warm-up
  clear-all-plots
  set run-day 1
  reset-ticks

  set message-status "simulating..."
  run-simulate
  set message-status "simulation is done!"
end 

to-report csv-read[file is-lookup? is-multi-string? n-string]
  file-open file
    let first-line file-read-line
    let comma? true
    let col 0

    while [comma?]
    [
      set first-line remove (substring first-line 0 ((position "," first-line) + 1)) first-line
      set comma? member? "," first-line
      set col col + 1
    ]

    let data-list n-values (col + 1) [[]]


    while [not file-at-end?]
    [
       let index 0
       let init file-read-line
       let v substring init 0 (position "," init)

       set data-list ifelse-value (is-lookup?)
       [
         replace-item index data-list (lput v item index data-list)
       ]
       [
         replace-item index data-list (lput (read-from-string v) item index data-list)
       ]

       let r ifelse-value (is-lookup?)
       [
         remove-item (position "," (remove v init)) (remove v init)
       ]
       [
         remove-item (position "," (substring init (position "," init) (length init))) (substring init (position "," init) (length init))
       ]

       ifelse col > 1
       [
         repeat (col - 1)
         [
           set index index + 1
           set v substring r 0 (position "," r)
           set r ifelse-value (is-multi-string?)
           [
             ifelse-value (index < n-string)
             [
               remove-item (position "," (remove v r)) (remove v r)
             ]
             [
               remove-item (position "," (substring r (position "," r) (length r))) (substring r (position "," r) (length r))
             ]
           ]
           [
             remove-item (position "," (substring r (position "," r) (length r))) (substring r (position "," r) (length r))
           ]

           set data-list ifelse-value (is-multi-string?)
           [
             ifelse-value (index < n-string)
             [
               replace-item index data-list (lput v item index data-list)
             ]
             [
               replace-item index data-list (lput (read-from-string v) item index data-list)
             ]
           ]
           [
             replace-item index data-list (lput (read-from-string v) item index data-list)
           ]
         ]
         set data-list replace-item (index + 1) data-list (lput (read-from-string r) item (index + 1) data-list)
       ]
       [
         set index index + 1
         set data-list replace-item index data-list (lput (read-from-string r) item index data-list)
      ]
    ]

  file-close
  report data-list
end 

to csv-read-input
  set lookup-parameters-peat csv-read (word input-path-csv array:item input-array-csv 0) true false 0
  set lookup-parameters-climate csv-read (word input-path-csv array:item input-array-csv 1) false false 0
  set lookup-parameters-land csv-read (word input-path-csv array:item input-array-csv 2) true false 0
  set lookup-parameters-scenario csv-read (word input-path-csv array:item input-array-csv 3) true false 0
end 

to gis-report-daily
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]

  export-view (word output-path-png word "peat-water-day-" word day ".png")

  output-report-csv1 word output-path-csv "output-gwl-average.csv"
  output-report-csv2 word output-path-csv "output-gwl-observation1.csv"
  output-report-csv3 word output-path-csv "output-gwl-observation2.csv"
  output-report-csv4 word output-path-csv "output-gwl-observation3.csv"
  output-report-csv5 word output-path-csv "output-gwl-observation4.csv"
  output-report-csv6 word output-path-csv "output-gwl-observation5.csv"

  output-report-csv7 word output-path-csv "output-wc-average.csv"
  output-report-csv8 word output-path-csv "output-wc-observation1.csv"
  output-report-csv9 word output-path-csv "output-wc-observation2.csv"
  output-report-csv10 word output-path-csv "output-wc-observation3.csv"
  output-report-csv11 word output-path-csv "output-wc-observation4.csv"
  output-report-csv12 word output-path-csv "output-wc-observation5.csv"

  output-report-csv13 word output-path-csv "output-wc-landcover-forest.csv"
  output-report-csv14 word output-path-csv "output-wc-landcover-shrub.csv"
  output-report-csv15 word output-path-csv "output-wc-landcover-burntland.csv"
  output-report-csv16 word output-path-csv "output-wc-landcover-bareland.csv"

  output-report-csv17 word output-path-csv "output-gwl-landcover-forest.csv"
  output-report-csv18 word output-path-csv "output-gwl-landcover-shrub.csv"
  output-report-csv19 word output-path-csv "output-gwl-landcover-burntland.csv"
  output-report-csv20 word output-path-csv "output-gwl-landcover-bareland.csv"

  if(report-ascii-map?)
  [
    let l sort remove-duplicates[patch-depth]of voxels-peat ;;m

    foreach l
    [
      let d-m ?
      let d-cm d-m * 100
      let p voxels-peat with[patch-depth = d-m]

      ask patches with[pzcor = 0]
      [
        set patch-water-height-ascii -9999
      ]

      let z max[pzcor]of voxels-peat with[patch-depth = d-m]

      ask patches with[pzcor = z]
      [
        let x pxcor
        let y pycor
        let w patch-water-height
        ask patches with[pzcor = 0]
        [
          if(pxcor = x and pycor = y)
          [
            set patch-water-height-ascii w
          ]
        ]
      ]

      let m gis:patch-dataset patch-water-height-ascii
      let f word output-path-asc "tmp.asc"
      gis:store-dataset m f

      gis-replace-header-asc ("tmp.asc") (word "peat-water-day-" word day word "-depth-" d-cm "-cm.asc")
    ]
  ]
end 

to gis-replace-header-asc[f1 f2]
  let d1 word output-path-asc f1

  let num 0
  let line ""
  let line-data []

  file-open d1
     while [not file-at-end?]
     [
       set line file-read-line
       set line-data lput line line-data
       set num num + 1
     ]
  file-close

  file-delete d1

  let d2 word output-path-asc f2

  if (file-exists? d2)
  [
    file-delete d2
  ]

  file-open d2
    file-print word "ncols         " map-attributes-n-cols
    file-print word "nrows         " map-attributes-n-rows
    file-print word "xllcorner     " map-attributes-corner-xll
    file-print word "yllcorner     " map-attributes-corner-yll
    file-print word "cellsize      " map-attributes-cell-size-degree
    file-print "NODATA_value  -9999"
    foreach n-values (num - 6)[?]
    [
      file-print item (? + 6) line-data
    ]
  file-close
end 

to update-scenario-number
  set parameter-scenario-number parameter-scenario-number + 1
  let f (word input-path-csv array:item input-array-csv 3)
  file-delete f

  file-open f
      file-type "Scenario parameters"
      file-type ","
      file-print "Value"
      file-type "Scenario number"
      file-type ","
      file-print parameter-scenario-number
  file-close
end 

to output-write-main-header-csv1[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv1[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat ;;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm ;;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm ;;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ?]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s
  file-close
end 

to output-write-main-header-csv2[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 1]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 1 (mm)" h
  set h lput "Acrotelm peat water observation 1 (mm)" h
  set h lput "Catotelm peat water observation 1 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #1"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv2[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 1];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 1];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 1];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 1]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-observation-id = 1]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s
  file-close
end 

to output-write-main-header-csv3[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 2]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 2 (mm)" h
  set h lput "Acrotelm peat water observation 2 (mm)" h
  set h lput "Catotelm peat water observation 2 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #2"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv3[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 2];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 2];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 2];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 2]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-observation-id = 2]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s

  file-close
end 

to output-write-main-header-csv4[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 3]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 3 (mm)" h
  set h lput "Acrotelm peat water observation 3 (mm)" h
  set h lput "Catotelm peat water observation 3 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #3"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv4[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 3];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 3];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 3];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 3]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-observation-id = 3]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s

  file-close
end 

to output-write-main-header-csv5[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 4]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 4 (mm)" h
  set h lput "Acrotelm peat water observation 4 (mm)" h
  set h lput "Catotelm peat water observation 4 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #4"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv5[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 4];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 4];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 4];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 4]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-observation-id = 4]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s

  file-close
end 

to output-write-main-header-csv6[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 5]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 5 (mm)" h
  set h lput "Acrotelm peat water observation 5 (mm)" h
  set h lput "Catotelm peat water observation 5 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #5"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv6[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 5];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 5];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 5];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 5]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-observation-id = 5]] l)

     let s[]
     foreach l
     [
       let i position ? l
       set s lput (sum sublist m 0 (i + 1)) s
     ]

     foreach bl s
     [
       file-type ?
       file-type comma
     ]

     file-print last s

  file-close
end 

;;add reporting

to output-write-main-header-csv7[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv7[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat ;;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm ;;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm ;;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ?]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv8[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 1]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 1 (mm)" h
  set h lput "Acrotelm peat water observation 1 (mm)" h
  set h lput "Catotelm peat water observation 1 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #1"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv8[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 1];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 1];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 1];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 1]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-observation-id = 1]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv9[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 2]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 2 (mm)" h
  set h lput "Acrotelm peat water observation 2 (mm)" h
  set h lput "Catotelm peat water observation 2 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #2"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv9[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 2];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 2];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 2];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 2]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-observation-id = 2]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m

  file-close
end 

to output-write-main-header-csv10[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 3]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 3 (mm)" h
  set h lput "Acrotelm peat water observation 3 (mm)" h
  set h lput "Catotelm peat water observation 3 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #3"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv10[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 3];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 3];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 3];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 3]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-observation-id = 3]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m

  file-close
end 

to output-write-main-header-csv11[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 4]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 4 (mm)" h
  set h lput "Acrotelm peat water observation 4 (mm)" h
  set h lput "Catotelm peat water observation 4 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #4"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv11[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 4];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 4];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 4];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 4]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-observation-id = 4]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m

  file-close
end 

to output-write-main-header-csv12[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 5]) ;;cm
  let h["Day"]
  set h lput "Surface water observation 5 (mm)" h
  set h lput "Acrotelm peat water observation 5 (mm)" h
  set h lput "Catotelm peat water observation 5 (mm)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Observation point #5"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv12[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-observation-id = 5];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-observation-id = 5];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-observation-id = 5];;m

  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-observation-id = 5]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-observation-id = 5]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m

  file-close
end 

;; add report by land use

to output-write-main-header-csv13[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: forest"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv13[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 1];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 1];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 1];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 1]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-land = 1]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv14[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: shrub"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv14[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 2];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 2];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 2];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 2]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-land = 2]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv15[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: burnt land"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv15[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 3];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 3];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 3];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 3]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-land = 3]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv16[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: bareland"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv16[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 4];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 4];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 4];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 4]
     file-type comma

     let a (map[mean[patch-water-height]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height]of voxels-peat with[patch-depth = ? and patch-land = 4]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

;; add GWL by land use

to output-write-main-header-csv17[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: forest"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv17[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 1];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 1];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 1];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 1]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-land = 1]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv18[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: shrub"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv18[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 2];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 2];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 2];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 2]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-land = 2]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv19[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: burnt land"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv19[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 3];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 3];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 3];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 3]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-land = 3]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

to output-write-main-header-csv20[f]
  let l (map[? * 100] sort remove-duplicates[patch-depth]of voxels-peat) ;;cm
  let h["Day"]
  set h lput "Average surface water (mm/pixel)" h
  set h lput "Average acrotelm peat water (mm/pixel)" h
  set h lput "Average catotelm peat water (mm/pixel)" h

  foreach l
  [
       set h lput (word "Peat water layer " word ? "-cm depth (mm/pixel)") h
  ]
  let comma ","
  file-open f
     file-print "P E A T   V O X E L   M O D E L"
     file-print ""
     file-print "Developed by: Aryo Adhi Condro - 2017"
     file-print ""
     file-print "Supervisors: Idung Risdiyanto S. Si M.Sc. & Prof. Dr. Hidayat Pawitan"
     file-print ""
     file-print "GFM - IPB - Bogor - Indonesia"
     file-print ""
     file-print word "Simulation results reported on: " date-and-time
     file-print ""
     file-print "Pixel average - land use/cover type: bareland"
     file-print ""

     foreach bl h
     [
       file-type ?
       file-type comma
     ]

     file-print last h

  file-close
end 

to output-report-csv20[f]
  let day ifelse-value(run-day < 10) [word "0" run-day][run-day]
  let comma ","
  let l sort remove-duplicates[patch-depth]of voxels-peat with[patch-land = 4];;m
  let al sort remove-duplicates[patch-depth]of voxels-acrotelm with[patch-land = 4];;m
  let cl sort remove-duplicates[patch-depth]of voxels-catotelm with[patch-land = 4];;m


  file-open f
     file-type day
     file-type comma
     file-type mean[patch-water-height]of voxels-surface with[patch-land = 4]
     file-type comma

     let a (map[mean[patch-water-height-peat]of voxels-acrotelm with[patch-depth = ?]] al)
     let c (map[mean[patch-water-height-peat]of voxels-catotelm with[patch-depth = ?]] cl)

     file-type sum a
     file-type comma
     file-type sum a + sum c
     file-type comma

     let m (map[mean[patch-water-height-peat]of voxels-peat with[patch-depth = ? and patch-land = 4]] l)

     foreach bl m
     [
       file-type ?
       file-type comma
     ]

     file-print last m
  file-close
end 

There is only one version of this model, created 5 months ago by Aryo Adhi Condro.

Attached files

File Type Description Last updated
Guidelines for Peat Voxel.pdf pdf The User Guidelines 5 months ago, by Aryo Adhi Condro Download
input.rar data The samples of input data 5 months ago, by Aryo Adhi Condro Download
pathdir.rar extension Pathdir Extension for NetLogo 5 months ago, by Aryo Adhi Condro Download
PEAT VOXEL Model.png preview Preview for 'PEAT VOXEL Model' 5 months ago, by Aryo Adhi Condro Download

This model does not have any ancestors.

This model does not have any descendants.