Updated 2014-06-25 20:56:08 by gold

Sumerian Workcrew & Payroll 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 workcrews and materials from dimensions of ancient Sumerian buildings. The impetus for these calculations was checking reed and mud brick construction in some accounts from UrIII. Most of the testcases involve replicas or models, using assumptions and rules of thumb.

The eTCL calculator is using proportions from a family home or apartment of 8 sar bricks to develop a workcrew report. These workcrew reports appear to be issued on a daily basis for payment of workcrews, but do not present a complete picture of the property. Sometimes the deeds, wills, and court cases will give more details of the property walls and boundaries. Not all features or lines shown in the eTCL calculator may be found in an individual accounting report.

The average Sumerian mudbrick house was about 90 sq. meters, and the average room size was 3 meters width by 3.65 meters length,3* 3.65, or about 10.95 square meters (from several excavations). The coefficient 20 E2 DU3.A (house build work in base 60) was 20/60 sar or 10.6 sqm, the size of a room or family home apartment. The Sumerian mudbrick houses generally contained rooms of 11 square meters built around a central courtyard. For a testcase, the general guidelines suggest about 6 rooms (3*3.6 m.) on both sides of a central courtyard about 5 meters wide.

The standard room interior seems to be a rectangle of 1.2:1 ratio of sides. The room was 6by7 cubits. Possibly, the 1.2:1 was developed from the intervals of 7:6 bricks of square cubits. From the P. theorem, the diagonal would be sqrt(6*6+7*7) or 9.219 cubits. The coefficient igigub siliptum of 1_21 (base 60) seems to refer to the diagonal from a 1.2:1 rectangle or room. The siliptum coefficient converts to 1+21/60, 81/60, and decimal 1.35. The calculation 7*(81/60) gives 9.45 and 9.219*(60/81) gives 6.8, rough approximations to P. theorem. The approximations are about 1-(9.219/9.45), 2.4 percent off. The interior surface area was 6*7 , 42 square cubits. The coefficient was 20/60 sar or 48 square cubits. If one adds a brick width of 0.5 cubit to both sides of the room, then 6.6*7.5 gives 48.75, approximation of the coefficient. Possibly, 20/60 sar refers to the exterior of the room.

The sig du brick cited in the text is probably the sun dried mud brick of L/W/T 0.5/0.5/.1 meters. With 8 sar of bricks from the text, the volume of sig du brick should be 8*720*0.5*0.5*.1 or 144 cubic meters. The brick volume can be checked from the number of 8 workers mixing the mortar and the rule that 1/6 times the volume of brick equals the volume of mortar. The "6 igi-gub iz-zi" is called the constant of the wall and inversed is the ratio of mortar volume to brick volume as 1/6 (noted by Robson). The mortar volume equals workers times mortar volume quota of 3 c.m. per day, 8*3 or 24 c.m. So the approximate brick volume would be workers times mortar volume quota divided by the mortar/brick volume ratio (1/6), (8*3)/(1/6) or 144 c.m. The volume formula derived from the workers*mortar quota/(brick/mortar ratio) is probably accurate +- 10 percent.

After each line about reed bundles, there is line about mixing mud mortar which seems associated: <9 workers: 90 reed bundles for mats: 3 workers to mix mortar> and <18 workers: 180 reed bundles:6 workers to mix mortar>. These can be used to derive proportions for reed/clay uses. The daily quota for clay mixing was 3 cubic meters per workday. The reed mats may have been used in the foundation and spread with mud. 90 reed bundles approximates 90 mats of one square meter. As described the house was about 6.5*7.5 cubits exterior, 48 square meters. 90 mats would be 90/48, roughly a double layer of mats. The mat bundles/mud volume would be 90 bundles/(3 workers*3) or 10 bundles per cubic meter of mud. The loose reeds may have been used after a brick course of 3 cubits high and spread with mud to tie the bricks together. The loose reed bundles/mud volume would be 180 bundles/(6 workers*3) or 10 reed bundles per cubic meter of mud.

Lets look at the coefficient "6_40 igi-gub e-kisib", the inverse capacity constant of a house, relating sars and gurs to the standard room. The gist of the problem is to find the correct power or value of 6_40 in base 60. In metric units, the volume of the standard room would be 6*7*6 meters, 252 cubic meters. Since a volume gur equals 0.3 c.m., the volume of the room would be 252/0.3 or 840 gurs. In Sumerian sar units, the volume sars would be (6/12)*(7/12)*6 or decimal 1.75 sars.

Pseudocode and Equations

  area = [* length width ] # square meters
  Sumerian price in silver = [/ liters 300.]
  Sumerian price in liters grain = [* silver 300.] 
  # 1 silver piece = 1 gur = 300 liters of grain
  liters = [* volume_in_cubic_cm .001]
  price? = raw materials + labor  +  profit
  price? = raw materials + heat process
  price? = raw materials + labor 
  average price per unit  = revenue  / units sold

Table 1,

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

small house printed inTCL WIKI format
testcase number: 1
building length: 3.8
building width meters: 3.2
building height meters: 3.
building thickness meters: 1.2
material volume meters**3: 50.4
brick volume meters**3: 0.00871
number of bricks: 5785.123
8.034brick sars, 720 bricks per sar:

Sumerian Workcrew Report

24workers making bricks: 8 brick sar
16workers carry bricks: 60 ninda original
8workers mix clay for mortar:
9workers carry reeds : 90 bundles original
3workers mix clay for mortar:
18workers carry reed bundles: 180 b. original
6workers mix clay for mortar:
84total workdays:
House ordered by Lugal (prince) Lu-Sara
foreman Lu-Sinnar
scribe Ur-Kul

Screenshots Section

figure 1.


  • Cocquerillat, D. 1968. Palmearies et cultures de l’Enna d’Uruk (559–520).
  • Cuneiform Digital Library Journal, search on Equivalency Values
  • Ur III Equivalency Values[1]
  • Especially, the Ur III Equivalency Values for dates sections.
  • The Sumerian keywords search on the cdli
  • are very effective, but major size files to download

Appendix Code edit

appendix TCL programs and scripts

        # pretty print from autoindent and ased editor
        # Sumerian date tree production calculator
        # pretty print from autoindent and ased editor
        # Sumerian construction workcrew report calculator
        # written on Windows XP on eTCL
        # working under TCL version 8.5.6 and eTCL 1.0.1
        # gold on TCL WIKI , 14jun2014
        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 {{} {length meters:} }
        lappend names {width meters:}
        lappend names {height meters : }
        lappend names {wall thickness meters: }
        lappend names {answer: material cubic meters}
        lappend names {vol of Sumerian bricks cubic meters:}
        lappend names {number of Sumerian bricks: }
        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 volx { aa bb cc } {
         set volem [* $aa $bb $cc ]
         return $volem
        proc about {} {
        set msg "Calculator for Sumerian Workcrew Report 
            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 tlength 
            global tlengthsq surfacearea  
            global tlengthx
            global brick1 brick2 brick3 brick4 brick5
            global brick6 brick6 brick7 brick8 brick9
            global brick10 
            incr testcase_number
            set tlength [* $side1 1. ]
            set twidth  [* $side2 1. ]
            set theight [* $side3 1. ]
            set tthickness [* $side4 1. ] 
            set brickl 0.33
            set brickw 0.33
            set brickt 0.08
            set brickvolx [volx 0.33 0.33 0.08]
            set wallside [volx $tlength $theight $tthickness]
            set wallfront [volx $twidth $theight $tthickness]
            set totalvolx [+ [* $wallside 2. ] [* $wallfront 2. ]]
            set brickvol [* 0.33 0.33 0.08]
            set bricknumx [/  $totalvolx $brickvol ]
            set bricksar [/ $bricknumx 720. ]
            set brick2 [int [* $bricksar [/ 24. 8. ]]]
            set brick1 $bricksar
            set brick3 [int [* $bricksar [/ 16. 8. ]]]
            set brick4 [int [* $bricksar [/ 8. 8. ]]]
            set brick5 [int [* $bricksar [/ 9. 8. ]]]
            set brick6 [int [* $bricksar [/ 3. 8. ]]]
            set brick7 [int [* $bricksar [/ 18. 8. ]]]
            set brick8 [int [* $bricksar [/ 6. 8. ]]]
            set brick10 [+ $brick2 $brick3 $brick4 $brick5 $brick6 $brick7 $brick8 ]   
            set side5 $totalvolx
            set side6 $brickvol 
            set side7 $bricknumx
        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 tlengthsq surfacearea
            global tlength
            global brick1 brick2 brick3 brick4 brick5
            global brick6 brick6 brick7 brick8 brick9
            global brick10
            console show;
            puts "%|table| printed in|TCL WIKI format |% "
            puts "&|testcase number:| $testcase_number| |& "
            puts "&|building length:| $side1| |& "
            puts "&|building width meters: |$side2| |& "
            puts "&|building height meters: |$side3| |& "
            puts "&|building thickness meters: | $side4| |& "
            puts "&|material volume meters**3: |$side5| |& "
            puts "&|brick volume meters**3: |$side6| |& "
            puts "&|number of bricks: | $side7| |& "
            puts "&|$brick1|brick sars, 720 bricks per sar:|& "
            puts "*** Sumerian Workcrew Report***    "
            puts "&|$brick2|workers making bricks:[int $brick1] brick sar|& " 
            puts "&|$brick3|workers carry bricks: 60 ninda original|& " 
            puts "&|$brick4|workers mix clay for mortar:  |& "
            puts "&|$brick5|workers carry reeds : 90 bundles original|& "
            puts "&|$brick6|workers mix clay for mortar:  |& "
            puts "&|$brick7|workers carry reed bundles: 180 b. original |& "
            puts "&|$brick8|workers mix clay for mortar:  |& "
            puts "&|$brick10|total workdays:  |& "
            puts "&| House ordered by  Lugal (prince) Lu-Sara | |& "
            puts "&| foreman Lu-Sinnar | |& "
            puts "&| scribe  Ur-Kul | |& "
            puts "&| seal  | |& "
         frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 3.8 3.2 3. 1.2 50.4  .0087 5785. }
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 3.6 3. 3. 1.2 47.5  .0088 5454. }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 30. 10. 3. 1.2 288.  .0087 33050. }
        ::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 Workcrew Report "       

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.