domain = FEGrid( coord_max = (length,height,0.), 
                 shape   = shape,
                 fets_eval = fets_eval )


#-------------------------
# ts: 
#-------------------------

# alternative way to get the top/bottom middle dof using slicing of FEGrid:
# i.e. get the element which is placed right for the center and then get the lower left node

#bottom_middle_dof = domain[shape[0]/2, 0, 0, 0].dofs[0,0,1]
#top_middle_dof    = domain[shape[0]/2,-1, 0,-1].dofs[0,0,1]

top_middle_dofs, top_middle_dof_points = domain.get_top_middle_dofs()
top_middle_dof = top_middle_dofs[0,1]
print 'top_middle_dof', top_middle_dof

bottom_middle_dofs, bottom_middle_dof_points = domain.get_bottom_middle_dofs()
bottom_middle_dof = bottom_middle_dofs[0,1]
print 'bottom_middle_dof', bottom_middle_dof

tstepper = TS( dof_resultants = True,
               sdomain = domain,
     bcond_list =  [ BCDof( var='u', value = u_max, dof = top_middle_dof ),
                     BCDofGroup( var='u', value = 0., dims = [0,1],
                              get_dof_method = domain.get_bottom_left_dofs ),
                     BCDofGroup( var='u', value = 0., dims = [1],
                              get_dof_method = domain.get_bottom_right_dofs ) ],
     rtrace_list =  [
height = 1.

# 100 linear elements
shape = (4*20,1)

# Discretization
domain = FEGrid( coord_max = (length,height,0.), 
                 shape   = shape,
                 fets_eval = fets_eval,
                 geo_transform = arch_2d )
#
#right_dofs, right_dof_r = domain.get_right_dofs()
#right_dof = right_dofs[0,0]
#print 'right_dof',right_dof

top_middle_dofs, top_middle_dof_r = domain.get_top_middle_dofs()
# dof in global y-direction
top_middle_dof = top_middle_dofs[0,1]
print 'top_middle_dofs',top_middle_dofs
print 'top_middle_dof' ,top_middle_dof

top_dofs, top_dof_r = domain.get_top_dofs()
# dof in global y-direction
print 'fets_eval.n_e_dofs' , fets_eval.n_e_dofs

if fets_eval.n_e_dofs == 8:
    top_left_middle_dofs = top_dofs[shape[0]/4, :]
elif fets_eval.n_e_dofs == 18:
    top_left_middle_dofs = top_dofs[shape[0]/2, :]
print 'top_left_middle_dofs' , top_left_middle_dofs