def Fy(x, y, z):
    return 4. * (y - 3)


def Fz(x, y, z):
    return (x - 10) * (y - 2) + z * z


#-------------------------------
# 2D structure + raccords match
#-------------------------------
ni = 10
nj = 10
nk = 1
a = G.cart((0, 0, 0), (1, 1, 1), (ni, nj, nk))
a = C.initVars(a, 'fldX', Fx, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
a = C.initVars(a, 'fldY', Fy, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
a = C.initVars(a, 'fldZ', Fz, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
b = G.cart((9, 0, 0), (1, 1, 1), (ni, nj, nk))
b = C.initVars(b, 'fldX', Fx, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
b = C.initVars(b, 'fldY', Fy, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
b = C.initVars(b, 'fldZ', Fz, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])

a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', b, 'imin', trirac=[1, 2])
b = C.addBC2Zone(b, 'match2', 'BCMatch', 'imin', a, 'imax', trirac=[1, 2])

t = C.newPyTree(['Base', 2])
t[2][1][2] += [a, b]
t = P.computeDiv(t, 'fld')
test.testT(t, 1)
# - computeDiv (pyTree) -
import Converter.PyTree as C
import Post.PyTree as P
import Generator.PyTree as G

ni = 30
nj = 40
nk = 10
m = G.cart((0, 0, 0), (10. / (ni - 1), 10. / (nj - 1), 1), (ni, nj, nk))
m = C.initVars(m, '{fldX}=2*{CoordinateX}+{CoordinateX}*{CoordinateY}')
m = C.initVars(m, '{fldY}=4*{CoordinateY}')
m = C.initVars(m, '{fldZ}={CoordinateX}+{CoordinateZ}*{CoordinateZ}')
m = P.computeDiv(m, 'fld')
C.convertPyTree2File(m, 'out.cgns')

def Fz(x, y, z):
    return x * y + z * z


#-----
# 2D
#-----
ni = 30
nj = 40
m = G.cart((0, 0, 0), (10. / (ni - 1), 10. / (nj - 1), 1), (ni, nj, 1))
m = C.initVars(m, 'fldX', Fx, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
m = C.initVars(m, 'fldY', Fy, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
m = C.initVars(m, 'fldZ', Fz, ['CoordinateX', 'CoordinateY', 'CoordinateZ'])
m = P.computeDiv(m, 'fld')
m = C.initVars(
    m, 'centers:tmpX', Fx,
    ['centers:CoordinateX', 'centers:CoordinateY', 'centers:divfld'])
m = C.initVars(
    m, 'centers:tmpY', Fy,
    ['centers:CoordinateX', 'centers:CoordinateY', 'centers:divfld'])
m = C.initVars(
    m, 'centers:tmpZ', Fz,
    ['centers:CoordinateX', 'centers:CoordinateY', 'centers:divfld'])
m = P.computeDiv(m, 'centers:tmp')
test.testT(m, 1)

#-----
# 3D
#-----
def Fx(x,y,z): return 2*x+x*y
def Fy(x,y,z): return 4.*y
def Fz(x,y,z): return x*y+z*z

#-----
# 2D
#-----
ni = 30; nj = 40
m = G.cart((0,0,0), (10./(ni-1),10./(nj-1),1), (ni,nj,1))
m = C.initVars(m, 'fldX', Fx, ['CoordinateX','CoordinateY','CoordinateZ'])
m = C.initVars(m, 'fldY', Fy, ['CoordinateX','CoordinateY','CoordinateZ'])
m = C.initVars(m, 'fldZ', Fz, ['CoordinateX','CoordinateY','CoordinateZ'])
m = C.addBC2Zone(m,'ov','BCOverlap','imin')
t = C.newPyTree(['Base',2]); t[2][1][2].append(m)
t[2][1] = C.addState(t[2][1], 'Mach', 0.6)
t = P.computeDiv(t, 'fld')
t = C.initVars(t, 'centers:tmpX', Fx, ['centers:CoordinateX','centers:CoordinateY','centers:divfld'])
t = C.initVars(t, 'centers:tmpY', Fy, ['centers:CoordinateX','centers:CoordinateY','centers:divfld'])
t = C.initVars(t, 'centers:tmpZ', Fz, ['centers:CoordinateX','centers:CoordinateY','centers:divfld'])
t = P.computeDiv(t,'centers:tmp')
test.testT(t,1)

#-----
# 3D
#-----
ni = 30; nj = 40
m = G.cart((0,0,0), (10./(ni-1),10./(nj-1),1), (ni,nj,2))
m = C.initVars(m, 'fldX', Fx, ['CoordinateX','CoordinateY','CoordinateZ'])
m = C.initVars(m, 'fldY', Fy, ['CoordinateX','CoordinateY','CoordinateZ'])
m = C.initVars(m, 'fldZ', Fz, ['CoordinateX','CoordinateY','CoordinateZ'])
t = C.newPyTree(['Base',3]); t[2][1][2].append(m)