Updated 2016-04-24 21:36:06 by gold

Sumerian Beveled Bowl Volume 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 volume of ancient Sumerian clay bowls. The impetus for these calculations was checking bowl volumes in some excavation reports and modern replicas. In modern terms, the bowl volume can calculated from the volume of a truncated cone. Most of the testcases involve replicas or models, using assumptions and rules of thumb.

In the Sumerian coefficient lists on clay tablets, there are coefficients which were used in determining the amount of materials and the daily work rates of the workers. In most cases, the math problem is how the coefficient was used in estimating materials and work rates. One difficulty is determining the effective power of the coefficient in base 60. For example, 20 could represent either 20*3600,20,20/60, 20/3600, or even 1/20. The basic dimensions of geometric figures, merchant payments, and final tallies were presented in the Sumerian accounts on clay tablets, but sometimes the calculations were left off the tablet, broken off, or garbled. At least one approach for the modern reader and using modern terminology is to develop the implied algebraic equations from the Sumerian numbers. Then the eTCL calculator can be run over a number of testcases to validate the algebraic equations.

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

Testcase 1
quantity etc units value
testcase number 1
bowl rim diameter mm 155.
bowl base diameter mm 80.
bowl height mm 73.
bowl thickness meters 1000.
side surface mm*mm 30294.5565
total surface mm*mm 54190.2956
volume milliliters 818.4437
bowl volume over standard volume 0.8184

Testcase 2

testcase number 2
bowl rim diameter mm 100.
bowl base diameter mm 100.
bowl height mm 100.
bowl thickness meters 1000.
side surface mm*mm 31415.9265
total surface mm*mm 47123.889
volume milliliters 785.3981
bowl volume over standard volume 0.7853

Testcase 3

Testcase 3
quantity etc units value
testcase number 3
bowl rim diameter mm 145.
bowl base diameter mm 60.
bowl height mm 50.
bowl thickness meters 1000.
side surface mm*mm 21131.1609
total surface mm*mm 40471.5907
volume milliliters 436.223
bowl volume over standard volume 0.4362

Screenshots Section

figure 1.


  • Cities of the Ancient World: [1]
  • Goulder, Jill. "Administrators' bread: Uruk bevel-rim bowl". Antiquity 84 (324): 351 -362[2]
  • Millard, A.R. (1988). The Bevelled-Rim Bowls:British Institute for the Study of Iraq.
  • Bevel Rim bowl article, [3]
  • Beveled rim bowls, Wikipedia
  • Problem Bevel Rim Bowls: Histograms & Related Displays
  • Polulation, Exchange, and Early State Formation, Henry Wright and Gregory Johnson, 1975
  • [www.columbia.edu/itc/anthropology/v3922/pdfs/wright_johnson.pdf]

Appendix Code edit

appendix TCL programs and scripts

        # pretty print from autoindent and ased editor
        # Sumerian beveled bowl volume calculator
        # written on Windows XP on eTCL
        # working under TCL version 8.5.6 and eTCL 1.0.1
        # gold on TCL WIKI , 30mar2014
        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 {{} {bowl rim diameter mm:} }
        lappend names {bowl base diameter mm:}
        lappend names {bowl height mm : }
        lappend names {standard volume milliliters: }
        lappend names {answer: bowl side area mm*mm:  }
        lappend names {volume bowl milliliters:}
        lappend names { bowl vol over sila std. vol : }
        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 bowlvolume {rim base height } {
            set r1  [* $rim .5]
            set r2  [* $base .5]
            set term1 [+ [* $r1 $r1 ] [* $r2 $r2 ] [* $r1 $r2 ]]
            set bowlvolume [* [pi] $height $term1 [/ 1. 3. ]]
        proc bowlsidearea {rim base height } {
            set r1  [* $rim .5]
            set r2  [* $base .5]
            set term2 [* [- $r1 $r2] [- $r1 $r2]]
            set term3 [* $height $height]
            set term4 [sqrt [+ $term2 $term3]]
            set surfaceside [*  [pi] [+ $r1 $r2] $term4]
        proc bowltotalsa {rim base height } {
            set r1  [* $rim .5]
            set r2  [* $base .5]
            set term2 [* [pi] $r1 $r1 ]
            set term3 [* [pi] $r2 $r2 ]
            set sidearea [ bowlsidearea $rim $base $height]
            set bowltotalsa [+ $term2 $term3 $sidearea ]
        proc about {} {
            set msg "Calculator for Sumerian Beveled Bowl
            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 surfaceside bowltotalsa
            incr testcase_number
            set bowlrim $side1
            set bowlbase  $side2
            set bowlheight $side3
            set sila_std_vol2 $side4
            set totalvolx [ bowlvolume $bowlrim $bowlbase $bowlheight]
            set bowltotalsa [ bowltotalsa $bowlrim $bowlbase $bowlheight]
            set surfaceside [ bowlsidearea $bowlrim $bowlbase $bowlheight]
            set side5 $surfaceside
            set side6 [* $totalvolx .001]
            set side7 [/  $totalvolx 1000.  $sila_std_vol2 ]
        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 surfaceside bowltotalsa
            console show;
            puts "testcase number: $testcase_number "
            puts "bowl rim diameter mm: $side1 "
            puts "bowl base diameter mm: $side2 "
            puts "bowl height mm: $side3 "
            puts "bowl thickness meters: $side4 "
            puts "side surface mm*mm : $side5 "
            puts "total surface mm*mm : $bowltotalsa "
            puts "volume milliliters: $side6 "
            puts "bowl volume over standard volume : $side7 "
         frame .buttons -bg aquamarine4
        ::ttk::button .calculator -text "Solve" -command { calculate   }
        ::ttk::button .test2 -text "Testcase1" -command {clearx;fillup 155. 80. 73. 1000. 30294.5  818.4 .8184 }
        ::ttk::button .test3 -text "Testcase2" -command {clearx;fillup 100. 100. 100. 1000. 31415.9  785.39 .785 }
        ::ttk::button .test4 -text "Testcase3" -command {clearx;fillup 145. 60. 50. 1000. 21131.16  436. .436 }
        ::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 Beveled Bowl 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.