Updated 2016-04-27 22:36:33 by gold

Sumerian Population Density and eTCL Slot Calculator Demo Example edit

This page is under development. Comments are welcome, but please load any comments in the comments section at the bottom of the page. Please include your wiki MONIKER in your comment with the same courtesy that I will give you. Its very hard to reply intelligibly without some background of the correspondent. Thanks,gold

gold Here is some eTCL starter code for calculating the number of inhabitants and families of ancient Sumerian cities. The gist of the eTCL calculator for population density is calculating the number of subsistence farmers in the surrounding arable land and using the urban district (tell) diameter to estimate the population density as inhabitants per hectare. This study is primarily looking at the city of Umma in 2300 BCE and determining the availability of workers for large public works. The impetus for these calculations was checking population density in some excavation reports and modern replicas. Most of the testcases involve replicas or models, using assumptions and rules of thumb.

For simple order of magnitude calculations on population density, the governor of Umma controlled 40 plowteams which were assigned 3.88 sqkm to plow for a total of 40*3.88 or 155.2 sqkm of state arable land. If the small feeder canals ran for 2*1800 meters on both sides of the Umma canal, then one side of the state property was 2*2*1800, 7200 meters, or 7.2 km. The state land along the Umma canal would be 155.5 sqkm/7.2 km or 21.6 km. Hence for simple calculations, the state land need only extend for 21.6/2 km, or roughly 10.8 km along the canal from the capitol Umma to account for the estimated state land. The supportable population of Umma can be estimated from the barley yield of the arable land. In recent times, the Iraqi government has a figure for average barley yield of 800 kg/ha, equals 425 gurs per sqkm. If all the state land was planted to barley, the maximum yield was 425 gurs/sqkm *155.5 sqkm or 6.6E4 gurs. In the good times of King Amar-suen, the records show the Umma land was from 1/3 to 1/2 fallow. In recent times, the traditional Iraqi farmers would have half (1/2) the land fallow. Records of the prior reign indicate King Shulgi taxing 1/2 grain harvest for royal use, so the full potential harvest of Umma must have been discounted to some extent. Making simple assumptions, the supportable population of the Sumerian city of Umma can be estimated. The 6.6E4 gurs of barley could be converted into 6.6E4*300 liters of barley, where each adult consumed 2 liters of barley a day or (2*365) liters of barley over a years time. The supportable population would be from (6.6E4*300/(2*365)*(1/2) to (6.6E4*300/(2*365))*(2/3), from 13500 to 18000 people. Also the state records show the city of Umma exporting grain to Susa or loaning grain shipments to other cities (in the good years). That is, the city of Umma was usually a net exporter of grain, so the lower figure of 13500 inhabitants is the most likely.

For another rough check on the inhabitants of Umma city, the "6 for 6" rule can be used. For subsistence farmers producing on half the land with the other half fallow, a family of six inhabitants will need 6 hectares of arable land. For the 155.2 sqkm or 1.552E4 hectares of state arable land, there should be 1.552E4/6 or 2586 families. The 2586 families times 6 in family should give 15,500 inhabitants. This rule has the advantage indicating subsistence adults and children. Given 2 adults per family, the number of adults should be 2586*2 or 5172 adults. The number of children would be 2586*4 or 10300 children.

The population density of Umma can be estimated in the reign of Amar Suen. The elevated area of the Umma tell is about 1500 meters in diameter. The city area was 3.14*1500*1500/4, 1.76E6 sqmeters, 1.76 sqkm, or 176 ha. Taking the lower population figure, the population density was 13500/176 or 77 inhabitants per ha. The higher population estimate of 18000 people would lead to 18000/176 or 102 i/ha. This sounds low density, but the city of Umma was host to two large temples, a harbor with quay, and state government buildings (low density areas).

It is very difficult to get a handle on the numbers of workers and duration of the Lagash project. King Enmetena of Lagash reigned from 2404-2375 BCE.The population of Lagash about 2300 BCE is estimated to be from 10,000 to 30,000 inhabitants. On a seasonal basis, team of workers could be brought off the farmland, and probably Lagash had a pool of skilled workers that was about 1/4 the population.. After the crops were planted, perhaps 2500 workmen would be available for digging, porting clay, and collecting reeds (for building material and fuel) for a period of 60 days. The ratio of about one foreman for 40 workmen gives 2500/40 or rounded, 60 foremen.

Pseudocode and Equations using coefficients

Pseudocode with some Equations
namespace path {::tcl::mathop ::tcl::mathfunc}
pseudocode: mortar = vol of walls times 1/6 , 144. c.m.* (1/6) or 24 c.m.
pseudocode: brick volume = 0.33*.33*.08, or 0.0087 cubic meters
pseudocode: answer is mandays of labor or silver pieces +- error
workdays on foundation = vol of foundation / coefficient
= 36 / 3 or 12 workdays
workdays making bricks = number of bricks / coefficient1

Testcases Section

In planning any software, it is advisable to gather a number of testcases to check the results of the program. The math for the testcases can be checked by pasting statements in the TCL console. Aside from the TCL calculator display, when one presses the report button on the calculator, one will have console show access to the capacity functions (subroutines).

Testcase 1

table printed in tcl wiki format
testcase number 1
arable land 272
district (tell) diameter meters 1500.
arable land hectares 27200.0
number of families 5997.393
men (or women) 11994.786
total inhabitants 35984.360
inhabitants per hectre 203.629

Testcase 2

umma, 2300BCE
testcase number 2
arable land 155.2
district (tell) diameter meters 1500.
arable land hectares 15519.999
number of families 2584.917
men (or women) 5169.835
total inhabitants 15509.507
inhabitants per hectares 87.765

Testcase 3

inner city 1,2300BCE
testcase number 3
arable land 155.2
district (tell) diameter meters 1200.
arable land hectares 15519.999
number of families 2584.917
men (or women) 5169.835
total inhabitants 15509.507
inhabitants per hectaers 137.134

Testcase 4

inner city 2, 2300BCE
testcase number 4
radius kilometers from arable land 155.2
district (tell) diameter meters 1000.
arable land hectares 15519.99
number of families 2584.917
men (or women) 5169.835
total inhabitants 15509.507
inhabitants per hectar 197.473

Testcase 5

testcase number5
arable land 270
district (tell) diameter meters 1440
arable land hectares 27000.0
number of families 5931.367
men (or women) 11862.734
total inhabitants 35588.204
inhabitants per hectares 218.520

Screenshots Section

figure 1.


  • Cities of the Ancient World: [1]

Appendix Code edit

appendix TCL programs and scripts

        # gold on TCL WIKI , 24mar2014
        # pretty print from autoindent and ased editor
        # Sumerian family calculator
        # written on Windows XP on eTCL
        # working under TCL version 8.5.6 and eTCL 1.0.1
        # gold on TCL WIKI , 9feb2014
        package require Tk
        namespace path {::tcl::mathop ::tcl::mathfunc}
        frame .frame -relief flat -bg aquamarine4
        pack .frame -side top -fill y -anchor center
        set names {{} {arable land sq. km:} }
        lappend names {district (tell) diameter meters:}
        lappend names {answers:   arable land hectares: }
        lappend names {number of families: }
        lappend names {men  (or women ):}
        lappend names {total inhabitants:}
        lappend names {inhabitants per hectare, selected district: }
        foreach i {1 2 3 4 5 6 7} {
    label .frame.label$i -text [lindex $names $i] -anchor e
    entry .frame.entry$i -width 35 -textvariable side$i
grid .frame.label$i .frame.entry$i -sticky ew -pady 2 -padx 1 }
         proc pi {} {
         expr acos(-1)
        proc about {} {
            set msg "Calculator for Sumerian  Inhabitants & Family  
            from TCL WIKI,
            written on eTCL "
            tk_messageBox -title "About" -message $msg } 
        proc calculate {     } {
            global answer2
            global side1 side2 side3 side4 side5
            global side6 side7 testcase_number 
            global arable familynum totalpop
            global density numofmen children
            global tell_diameter inhab_hectare
            global arable_hectares children
            incr testcase_number
            set tell_diameter $side2
            set arablez [* $side1 100.]
            set familynum [/ $arablez  6.]   
            set side3 [* $side1 100.]
            set arable_hectares $side3
            set side4 $familynum
            set side5 [* $familynum 2.]
            set side6 [* $familynum 6.]
            set numofmen [* $familynum 2.]
            set totalpop [* $familynum 6.]
            set children [* $familynum 4.]
   set tellarea [/ [* [pi] $side2 $side2 1.E-4 ] 4.]
            set side7 [/ [* $familynum 6.] $tellarea ]
            if  {$side7 > 250.} {set side7 250.}
            set inhab_hectare $side7
        proc fillup {aa bb cc dd ee ff gg} {
            .frame.entry1 insert 0 "$aa"
            .frame.entry2 insert 0 "$bb"
            .frame.entry3 insert 0 "$cc"
            .frame.entry4 insert 0 "$dd"
            .frame.entry5 insert 0 "$ee"
            .frame.entry6 insert 0 "$ff"
            .frame.entry7 insert 0 "$gg"}
        proc clearx {} {
            foreach i {1 2 3 4 5 6 7} {
                .frame.entry$i delete 0 end } }
        proc reportx {} {
            global side1 side2 side3 side4 side5
            global side6 side7 testcase_number 
            global arable familynum totalpop
            global density numofmen children
            global tell_diameter inhab_hectare
            console show;
            puts "%|table printed in| tcl wiki format|% "
            puts "&|quanity| value| comment, if any|& "
            puts "&|testcase number| $testcase_number||& "
  puts "&| arable land in sq kilometers| $side1 ||&"
  puts "&|district (tell) diameter meters| $side2||& "
            puts "&|arable land hectares| $side3||& "
            puts "&|number of families| $side4 ||&"
            puts "&|men  (or women)| $side5||& "
            puts "&|total inhabitants| $side6 ||&"
            puts "&|inhabitants per hectare| $side7 ||&"
            puts "&|children| $children ||& "
         frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 155.2 1500. 15393. 2584.2 5170.  15500. 87.8 }
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 155.2 1200. 15393. 2584.2 5170.  15500. 137.8 }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 155.2 1000. 15393. 2584.2 5170.  15500. 197.}
        ::ttk::button .clearallx -text clear -command {clearx }
        ::ttk::button .about -text about -command about
        ::ttk::button .cons -text report -command { reportx }
        ::ttk::button .exit -text exit -command {exit}
        pack .calculator  -in .buttons -side top -padx 10 -pady 5
        pack  .clearallx .cons .about .exit .test4 .test3 .test2   -side bottom -in .buttons
        grid .frame .buttons -sticky ns -pady {0 10}
        . configure -background aquamarine4 -highlightcolor brown -relief raised -border 30
        wm title . "Sumerian Inhabitants & Family Calculator "       


Pushbutton Operation

For the push buttons, the recommended procedure is push testcase and fill frame, change first three entries etc, push solve, and then push report. Report allows copy and paste from console.

For testcases in a computer session, the eTCL calculator increments a new testcase number internally, eg. TC(1), TC(2) , TC(3) , TC(N). The testcase number is internal to the calculator and will not be printed until the report button is pushed for the current result numbers (which numbers will be cleared on the next solve button.) The command { calculate; reportx } or { calculate ; reportx; clearx } can be added or changed to report automatically. Another wrinkle would be to print out the current text, delimiters, and numbers in a TCL wiki style table as
  puts " %| testcase $testcase_number | value| units |comment |%"
  puts " &| volume| $volume| cubic meters |based on length $side1 and width $side2   |&"  

gold This page is copyrighted under the TCL/TK license terms, this license.

Comments Section edit

Please place any comments here, Thanks.