Require Class/basicArrows

basicArrows Subclass basicGradientField {
  ClassVar {domain Inherit}
  ClassVar {linkable-types basicSurface}

  Method Compute {} {
    Vars arrows domain htype

    set object [Self Reference Object]
    if {$object == "_NOOP"} return
    set uv [$object get uv]
    upvar [lindex $uv 0] u
    upvar [lindex $uv 1] v
    set d [Self getDimension]

    set arrows {}
    foreach UV [Self GetDomainList [uplevel [list subst $domain]]] {
      basicSurface GetDomain $UV
      for {set j 0; set v $vm} {$j <= $vn} {incr j;set v [expr $j*$vd+$vm]} {
	for {set i 0; set u $um} {$i <= $un} {incr i;set u [expr $i*$ud+$um]} {
          set P [list $u $v]
          set V [uplevel $object Gradient $u $v]
          while {[llength $P] < $d} {lappend P 0}
          while {[llength $V] < $d} {lappend V 0}
          lappend arrows [list [list $P [+ $P $V]] $htype]
        }
      }
    }

    uplevel Parent Compute
  }

  Method GetDomainList {D} {
    set object [Self Reference Object]
    uplevel [list basicSurface InheritSurfaceDomainList $D $object]
  }
}
