#fileName_mesh = 'first_mesh.1.vtk'
fileName_mesh = 'first_mesh.1.node'


field_1 = {
   'name' : 'displacement',
   'dim' : (3,1),
   'domain' : 'Omega',
   'bases' : {'Omega' : '3_4_P1'}
}

variable_1 = {
   'name' : 'u',
   'kind' : 'unknown field',
   'field' : 'displacement',
   'order' : 0,
}
variable_2 = {
   'name' : 'v',
   'kind' : 'test field',
   'field' : 'displacement',
   'dual' : 'u',
}

region_1000 = {
   'name' : 'Omega',
   'select' : 'all',
}
region_1 = {
   'name' : 'Bottom',
   'select' : 'nodes in (z < 0.001)'
}
region_2 = {
   'name' : 'Top',
   'select' : 'nodes in (z > 1.999)',
}
ebc_1 = {
   'name' : 'fixed_u',
   'region' : 'Bottom',
   'dofs' : {'u.all' : 0.0},
}
integral_1 = {
   'name' : 'i1',
   'kind' : 'v',
   'quadrature' : 'gauss_o1_d3',
}
integral_3 = {
   'name' : 'isurf',
   'kind' : 's',
   'quadrature' : 'gauss_o2_d2',
}
equations = {
   'balance_of_forces' :
   """dw_lin_elastic_iso.i1.Omega( solid.lame, v, u )
      = dw_surface_ltr.isurf.Top( traction.val, v )""",
}
material_1 = {
   'name' : 'solid',
   'mode' : 'here',
   'region' : 'Omega',
   'lame' : {'lambda' : 1e1, 'mu' : 1e0}, # Lame coefficients.
}
material_2 = {
   'name' : 'traction',
   'mode' : 'function',
   'region' : 'Top',
   'function' : 'tractionLoad',
}

def tractionLoad( ts, coor, region, ig ):
   """ts = TimeStepper, coor = coordinates of field nodes in region."""
   import numpy as nm
   from sfepy.base.base import pause, debug
   nt = ts.nt

   val = nm.zeros( (coor.shape[0],), dtype = nm.float64 )
   val.fill( 1e-1 * nt )

   print val
   return {'val' : val}

solver_0 = {
   'name' : 'ls',
   'kind' : 'ls.umfpack',
}

solver_1 = {
   'name' : 'newton',
   'kind' : 'nls.newton',

   'iMax'      : 1,
   'epsA'      : 1e-10,
   'epsR'      : 1.0,
   'macheps'   : 1e-16,
   'linRed'    : 1e-2, # Linear system error < (epsA * linRed).
   'lsRed'     : 0.1,
   'lsRedWarp' : 0.001,
   'lsOn'      : 1.1,
   'lsMin'     : 1e-5,
   'check'     : 0,
   'delta'     : 1e-6,
   'isPlot'    : False,
   'problem'   : 'nonlinear', # 'nonlinear' or 'linear' (ignore iMax)
}

solver_2 = {
    'name' : 'ts',
    'kind' : 'ts.simple',

    't0'    : 0.0,
    't1'    : 1.0,
    'dt'    : None,
    'nStep' : 10, # has precedence over dt!
}

options = {
    'nls' : 'newton',
    'ls' : 'ls',
    'ts' : 'ts',
    'saveSteps' : -1,
}

fe = {
   'chunkSize' : 100000
}
