def addkplanes():
    if CTK.t == []: return
    if CTK.__MAINTREE__ <= 0:
        CTK.TXT.insert('START', 'Fail on a temporary tree.\n')
        CTK.TXT.insert('START', 'Error: ', 'Error')
        return
    N = CTK.varsFromWidget(VARS[1].get(), type=2)
    if len(N) != 1:
        CTK.TXT.insert('START', 'Number of layers is incorrect.\n')
        CTK.TXT.insert('START', 'Error: ', 'Error')
        return
    N = N[0]
    nzs = CPlot.getSelectedZones()
    if nzs == []:
        CTK.TXT.insert('START', 'Selection is empty.\n')
        CTK.TXT.insert('START', 'Error: ', 'Error')
        return
    CTK.saveTree()
    fail = False
    for nz in nzs:
        nob = CTK.Nb[nz] + 1
        noz = CTK.Nz[nz]
        #try:
        z = T.addkplane(CTK.t[2][nob][2][noz], N=N)
        CTK.replace(CTK.t, nob, noz, z)
        #except Exception as e: fail = True
    if not fail: CTK.TXT.insert('START', 'K planes added.\n')
    else:
        CTK.TXT.insert('START', 'add K planes failed.\n')
        CTK.TXT.insert('START', 'Error: ', 'Error')
    (CTK.Nb, CTK.Nz) = CPlot.updateCPlotNumbering(CTK.t)
    CTK.TKTREE.updateApp()
    CPlot.render()
a2 = T.oneovern(a2, (1, 2, 1))
t = C.newPyTree(['Base'])
t[2][1][2] += [a1, a2]
t = X.connectNearMatch(t)
test.testT(t, 1)

# 3D raccord i = 1 partiel profil NACA
a = D.naca(12., 5001)
a2 = D.line((1., 0., 0.), (2., 0., 0.), 5001)
a = T.join(a, a2)
a2 = D.line((2., 0., 0.), (1., 0., 0.), 5001)
a = T.join(a2, a)
Ni = 301
Nj = 51
distrib = G.cart((0, 0, 0), (1. / (Ni - 1), 0.5 / (Nj - 1), 1), (Ni, Nj, 1))
naca = G.hyper2D(a, distrib, "C")
a = T.addkplane(naca)
a1 = T.subzone(a, (1, 1, 1), (151, Nj, 2))
a2 = T.subzone(a, (151, 1, 1), (Ni, Nj, 2))
a2 = T.oneovern(a2, (2, 2, 1))
t = C.newPyTree(['Base'])
t[2][1][2] += [a1, a2]
# --- Equation state
t[2][1] = C.addState(t[2][1], 'EquationDimension', 2)
# --- champ aux centres
t = C.initVars(t, 'centers:Density', 1.)
# --- champ aux noeuds
t = C.initVars(t, 'cellN', 2.)
t = X.connectNearMatch(t, dim=2)
test.testT(t, 2)
import Generator.PyTree as G
import Transform.PyTree as T
import Converter.PyTree as C
import KCore.test as test

# 3D structure + champs en noeuds + [champs en centres] + CL
a = G.cart((0., 0., 0.), (0.1, 0.1, 1.), (11, 10, 2))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1, 2, 3])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1, 2, 3])
a = C.initVars(a, 'F', 2.)
a = C.initVars(a, 'centers:G', 1.)
t = C.newPyTree(['Base', a])
t[2][1] = C.addState(t[2][1], 'EquationDimension', 2)
t = T.addkplane(t)
test.testT(t, 1)

# 2D structure + champs en noeuds + [champs en centres] + CL
a = G.cart((0., 0., 0.), (0.1, 0.1, 1.), (11, 10, 1))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1, 2])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1, 2, 3])
a = C.initVars(a, 'F', 2.)
a = C.initVars(a, 'centers:G', 1.)
t = C.newPyTree(['Base', 2, a])
t[2][1] = C.addState(t[2][1], 'EquationDimension', 2)
t = T.addkplane(t)
test.testT(t, 2)
# - snapFront (pyTree) -

import numpy

import Generator.PyTree as G
import Converter.PyTree as C
import Geom.PyTree as D
import Connector.PyTree as X
import Transform.PyTree as T
import Converter.Internal as Internal

s = D.circle((0, 0, 0), 1., N=100)
s2 = T.addkplane(s)

# Grille cartesienne (reguliere)
BB = G.bbox([s])

ni = 100
nj = 100
nk = 3

xmin = BB[0]
ymin = BB[1]
zmin = BB[2]-0.5

xmax = BB[3]
ymax = BB[4]
zmax = BB[5]+0.5

hi = (xmax-xmin)/(ni-1)
hj = (ymax-ymin)/(nj-1)
示例#5
0
# - addkplane (pyTree) -
import Generator.PyTree as G
import Transform.PyTree as T
import Converter.PyTree as C
import KCore.test as test

# traitement par zone
# 3D structure + champs en noeuds + champs en centres + CL
a = G.cart((0., 0., 0.), (0.1, 0.1, 1.), (11, 10, 2))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1, 2, 3])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1, 2, 3])
a = C.initVars(a, 'F', 2.)
a = C.initVars(a, 'centers:G', 1.)
a = T.addkplane(a, N=3)
test.testT(a, 1)

# 2D structure + champs en noeuds + [champs en centres] + CL
a = G.cart((0., 0., 0.), (0.1, 0.1, 1.), (11, 10, 1))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1, 2])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1, 2, 3])
a = C.initVars(a, 'F', 2.)
a = C.initVars(a, 'centers:G', 1.)
a = T.addkplane(a, N=3)
test.testT(a, 2)

# BAR
#a = G.cart((0.,0.,0.),(0.1,1,1),(11,1,1))
# - addkplane (pyTree) -
import Generator.PyTree as G
import Transform.PyTree as T
import Converter.PyTree as C
import KCore.test as test

# traitement par zone
# 3D structure + champs en noeuds + champs en centres + CL
a = G.cart((0.,0.,0.),(0.1,0.1,1.),(11,10,2))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1,2,3])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1,2,3])
a = C.initVars(a, 'F', 2.); a = C.initVars(a, 'centers:G', 1.)
a = T.addkplane(a)
test.testT(a, 1)

# 2D structure + champs en noeuds + [champs en centres] + CL
a = G.cart((0.,0.,0.),(0.1,0.1,1.),(11,10,1))
a = C.addBC2Zone(a, 'wall1', 'BCWall', 'imin')
a = C.addBC2Zone(a, 'overlap1', 'BCOverlap', 'jmin')
a = C.addBC2Zone(a, 'match1', 'BCMatch', 'imax', a, 'imin', [1,2])
a = C.addBC2Zone(a, 'nearmatch1', 'BCNearMatch', 'jmax', a, 'jmin', [1,2,3])
a = C.initVars(a, 'F', 2.); a = C.initVars(a, 'centers:G', 1.)
a = T.addkplane(a)
test.testT(a, 2)

# BAR
a = G.cart((0.,0.,0.),(0.1,1,1),(11,1,1))
a = C.convertArray2Tetra(a)
a = C.initVars(a, 'F',2.); a = C.initVars(a, 'centers:G',1.)
示例#7
0
dho = dhov * (vmin - 1)
snears = [dho] * len(extFaces)
# generation de l octree
o = G.octree(extFaces, snears, dfar=10., balancing=1)
o = G.expandLayer(o)
# conversion en grilles cartesiennes patch grids
if DEPTH == 0: ext = 0
else: ext = DEPTH + 1  # si Chimere
res = G.octree2Struct(o, vmin=11, ext=ext, optimized=1, merged=1)
res = C.fillEmptyBCWith(res, 'nref', 'BCFarfield', dim=2)
#
# Ajout de la base cartesienne
t = C.addBase2PyTree(t, 'CARTESIAN')
t[2][2][2] = res
# ajout d un plan en k
t = T.addkplane(t)
#
#---------------------------
# Assemblage Chimere
#---------------------------
DEPTH = 2
# bodies description
bodies = []
bases = Internal.getNodesFromType(t, 'CGNSBase_t')
for b in bases:
    walls = C.extractBCOfType(b, 'BCWall')
    if walls != []: bodies.append(walls)

# blanking
BM = numpy.array([[0], [1]])
t = X.blankCells(t, bodies, BM, depth=DEPTH, dim=2)
示例#8
0
def prepareMotionChimeraData(t,
                             tc,
                             tblank,
                             noBaseOff,
                             tBB=None,
                             DEPTH=2,
                             loc='centers',
                             NIT=1,
                             RotationCenter=None,
                             RotationAngle=None,
                             Translation=None,
                             listOfSteadyOffBodyZones=None,
                             listOfOffBodyIntersectingNBZones=None):

    # arbre de BBox des zones donneuses
    if tBB is None: tBB = G.BB(tc)  # BB des zones donneuses

    if listOfOffBodyIntersectingNBZones is None:
        listOfOffBodyIntersectingNBZones = getListOfOffBodyIntersectingNBZones(
            tBB,
            noBaseOff,
            NIT=NIT,
            DEPTH=DEPTH,
            RotationCenter=RotationCenter,
            RotationAngle=RotationAngle,
            Translation=Translation)
        listOfSteadyOffBodyZones = getListOfSteadyOffBodyZones(
            tBB, noBaseOff, listOfOffBodyIntersectingNBZones)

    if listOfSteadyOffBodyZones is None:
        listOfSteadyOffBodyZones = getListOfSteadyOffBodyZones(
            tBB, noBaseOff, listOfOffBodyIntersectingNBZones)

    dimPb = Internal.getNodeFromName(t, 'EquationDimension')
    if dimPb is None:
        raise ValueError('EquationDimension is missing in input body tree.')
    dimPb = Internal.getValue(dimPb)
    if dimPb == 2:
        z0 = Internal.getNodeFromType2(t, 'Zone_t')
        dims = Internal.getZoneDim(z0)
        npts = dims[1] * dims[2] * dims[3]
        zmin = C.getValue(z0, 'CoordinateZ', 0)
        zmax = C.getValue(z0, 'CoordinateZ', npts - 1)
        dz = zmax - zmin
        # Creation du corps 2D pour le preprocessing IBC
        tblank = T.addkplane(tblank)
        tblank = T.contract(tblank, (0, 0, 0), (1, 0, 0), (0, 1, 0), dz)

    rotation = True
    translation = True
    if RotationAngle is None: rotation = False
    if Translation is None: translation = False
    if rotation is True and translation is True:
        raise ValueError(
            "ToolboxIBM: translation and rotation not yet possible together.")
    constantMotion = False
    if rotation:
        if len(RotationAngle) == 3 and isinstance(RotationAngle[0],
                                                  list) == False:
            constantMotion = True
    if translation:
        if len(Translation) == 3 and isinstance(Translation[0], list) == False:
            constantMotion = True

    xc0 = RotationCenter[0]
    yc0 = RotationCenter[1]
    zc0 = RotationCenter[2]

    C._initVars(t[2][noBaseOff], '{centers:cellNInit}={centers:cellN}')
    C._initVars(tc[2][noBaseOff], "{cellNInit}={cellN}")
    dictOfNearBodyBaseNb = {}
    dictOfNearBodyZoneNb = {}
    for nob in range(len(tc[2])):
        if nob != noBaseOff:
            base = tc[2][nob]
            if Internal.getType(base) == 'CGNSBase_t':
                for noz in range(len(base[2])):
                    zone = base[2][noz]
                    if Internal.getType(zone) == 'Zone_t':
                        zname = zone[0]
                        dictOfNearBodyZoneNb[zname] = noz
                        dictOfNearBodyBaseNb[zname] = nob

    dictOfOffBodyZoneNb = {}
    dictOfOffBodyADT = {}  # preconditionnement
    for noz in range(len(tc[2][noBaseOff][2])):
        z = tc[2][noBaseOff][2][noz]
        zname = z[0]
        if Internal.getType(z) == 'Zone_t':
            dictOfOffBodyZoneNb[zname] = noz
            if zname in listOfOffBodyIntersectingNBZones:
                zc = tc[2][noBaseOff][2][noz]
                hook0 = C.createHook(zc, 'adt')
                dictOfOffBodyADT[zname] = hook0

    C._initVars(tc, '{CoordinateXInit}={CoordinateX}')
    C._initVars(tc, '{CoordinateYInit}={CoordinateY}')
    C._initVars(tc, '{CoordinateZInit}={CoordinateZ}')
    C._initVars(t, '{CoordinateXInit}={CoordinateX}')
    C._initVars(t, '{CoordinateYInit}={CoordinateY}')
    C._initVars(t, '{CoordinateZInit}={CoordinateZ}')
    C._initVars(tBB, '{CoordinateXInit}={CoordinateX}')
    C._initVars(tBB, '{CoordinateYInit}={CoordinateY}')
    C._initVars(tBB, '{CoordinateZInit}={CoordinateZ}')

    if NIT > 1:
        for zc in Internal.getZones(tc):
            IDatas = Internal.getNodesFromName(zc, "ID_*")
            for ID in IDatas:
                name = ID[0].split('_')
                ID[0] = 'IDSteady_%s' % (name[1])

    tloc = C.newPyTree(['OffMotion'])
    for zr in t[2][noBaseOff][2]:
        if Internal.getType(zr) == 'Zone_t':
            znamer = zr[0]
            if znamer not in listOfSteadyOffBodyZones:
                # print " Zone de fond en mvt %s"%znamer
                tloc[2][1][2].append(zr)
            else:
                tloc[2][1][2].append(zr)
        tBBloc = G.BB(tloc)

    # a remonter dans l interface
    intersectionsDictOffOff = X.getIntersectingDomains(tBB[2][noBaseOff],
                                                       method='AABB',
                                                       taabb=tBB[2][noBaseOff])
    listOfIntersectionDictsNBNB = {}
    for nob in range(len(t[2])):
        if nob != noBaseOff and Internal.getType(t[2][nob]) == 'CGNSBase_t':
            intersectionsDictNB = X.getIntersectingDomains(tBB[2][nob],
                                                           method='AABB',
                                                           taabb=tBB[2][nob])
            listOfIntersectionDictsNBNB[nob] = intersectionsDictNB

    for it in range(NIT):
        print(' ------------------- Iteration %d ----------------------- ' %
              it)
        if constantMotion:
            if rotation:
                angleX = RotationAngle[0] * it
                angleY = RotationAngle[1] * it
                angleZ = RotationAngle[2] * it
                print('Rotation (degres) : (alphaX=%g,alphaY=%g,alphaZ=%g)' %
                      (angleX, angleY, angleZ))

            elif translation:
                tx = Translation[0]
                ty = Translation[1]
                tz = Translation[2]
        else:
            if rotation:
                angleX = RotationAngle[it][0]
                angleY = RotationAngle[it][1]
                angleZ = RotationAngle[it][2]
                print('Rotation (degres) : (alphaX=%g,alphaY=%g,alphaZ=%g)' %
                      (angleX, angleY, angleZ))

            elif translation:
                tx = Translation[it][0]
                ty = Translation[it][1]
                tz = Translation[it][2]

        if rotation:
            tblankM = T.rotate(tblank, (xc0, yc0, zc0),
                               (angleX, angleY, angleZ))
        elif translation:
            tblankM = T.translate(tblank, (tx, ty, tz))

        C._initVars(tloc, "{centers:cellN}={centers:cellNInit}")
        tloc = blankByIBCBodies(tloc,
                                tblankM,
                                'centers',
                                dim=dimPb,
                                gridType='composite')
        tloc = X.setHoleInterpolatedPoints(tloc, depth=DEPTH, loc='centers')
        for zloc in Internal.getZones(tloc):
            zname = zloc[0]
            nozloc = dictOfOffBodyZoneNb[zname]
            C._cpVars(zloc, 'centers:cellN', tc[2][noBaseOff][2][nozloc],
                      "cellN")

        dictOfMotionADT = {
        }  # ADT des blocs en mvt  a detruire a chq pas de temps

        # bases proches corps interpolees par le maillage de fond fixe + ses voisins
        for nob in range(len(t[2])):
            base = t[2][nob]
            if nob != noBaseOff and Internal.getType(base) == 'CGNSBase_t':
                if rotation:
                    T._rotate(base, (xc0, yc0, zc0), (angleX, angleY, angleZ))
                    T._rotate(tBB[2][nob], (xc0, yc0, zc0),
                              (angleX, angleY, angleZ))
                    T._rotate(tc[2][nob], (xc0, yc0, zc0),
                              (angleX, angleY, angleZ))
                elif translation:
                    T._translate(base, (tx, ty, tz))
                    T._translate(tBB[2][nob], (tx, ty, tz))
                    T._translate(tc[2][nob], (tx, ty, tz))

        tBBNB = Internal.rmNodesByName(tBB, tBB[2][noBaseOff][0])
        intersectionsDictOffNB = X.getIntersectingDomains(
            tBB[2][noBaseOff],
            t2=tBBNB,
            method='AABB',
            taabb=tBB[2][noBaseOff],
            taabb2=tBBNB)
        for nob in range(len(t[2])):
            base = t[2][nob]
            if nob != noBaseOff and Internal.getType(base) == 'CGNSBase_t':
                # test intersection entre maillage proche corps et maillage de fond
                intersectionsDictNBO = X.getIntersectingDomains(
                    tBB[2][nob],
                    t2=tBB[2][noBaseOff],
                    method='AABB',
                    taabb=tBB[2][nob],
                    taabb2=tBB[2][noBaseOff])

                print('Near-body base %s in motion' % (base[0]))
                intersectionsDictNBNB = listOfIntersectionDictsNBNB[nob]
                for zr in Internal.getZones(base):
                    if Internal.getNodesFromName(zr, "ov_ext*") != []:
                        znamer = zr[0]
                        donorZones = []
                        hooks = []
                        for znamed in intersectionsDictNBO[znamer]:
                            if znamed in dictOfOffBodyZoneNb:  # donneur=fond
                                nozd = dictOfOffBodyZoneNb[znamed]
                                zd = tc[2][noBaseOff][2][nozd]
                                hooks.append(dictOfOffBodyADT[znamed])
                                donorZones.append(zd)
                        for znamed in intersectionsDictNBNB[znamer]:
                            nozd = dictOfNearBodyZoneNb[znamed]
                            nobd = dictOfNearBodyBaseNb[znamed]
                            zd = tc[2][nobd][2][nozd]
                            if znamed not in dictOfMotionADT:
                                hook0 = C.createHook(zd, 'adt')
                                dictOfMotionADT[znamed] = hook0
                            hooks.append(dictOfMotionADT[znamed])
                            donorZones.append(zd)

                        donorZones = X.setInterpData(zr,donorZones,nature=1,penalty=1,loc='centers',storage='inverse',sameName=1,\
                                                     hook=hooks, itype='chimera')
                        for zd in donorZones:
                            znamed = zd[0]
                            if znamed in dictOfOffBodyZoneNb:
                                nozd = dictOfOffBodyZoneNb[znamed]
                                tc[2][noBaseOff][2][nozd] = zd
                            elif znamed in dictOfNearBodyZoneNb:
                                nozd = dictOfNearBodyZoneNb[znamed]
                                nobd = dictOfNearBodyBaseNb[znamed]
                                tc[2][nobd][2][nozd] = zd

        # base de fond : interpolee depuis ses zones voisines + zones proches corps
        # les donneurs proches corps mobiles sont deja deplaces
        # intersectionsDict = X.getIntersectingDomains(tBBloc,t2=tBB,method='AABB',taabb=tBBloc,taabb2=tBB)
        for zr in Internal.getZones(tloc):
            znamer = zr[0]
            if znamer not in listOfSteadyOffBodyZones:
                donorZones = []
                hooks = []
                for znamed in intersectionsDictOffOff[
                        znamer]:  # donneur=maillage de fond
                    nozd = dictOfOffBodyZoneNb[znamed]
                    zd = tc[2][noBaseOff][2][nozd]
                    if znamed not in dictOfOffBodyADT:
                        hook0 = C.createHook(zd, 'adt')
                        dictOfOffBodyADT[znamed] = hook0
                    hooks.append(dictOfOffBodyADT[znamed])
                    donorZones.append(zd)
                for znamed in intersectionsDictOffNB[znamer]:
                    nozd = dictOfNearBodyZoneNb[znamed]
                    nobd = dictOfNearBodyBaseNb[znamed]
                    zd = tc[2][nobd][2][nozd]
                    if znamed not in dictOfMotionADT:
                        hook0 = C.createHook(zd, 'adt')
                        dictOfMotionADT[znamed] = hook0
                    hooks.append(dictOfMotionADT[znamed])
                    donorZones.append(zd)

                # print 'Off-body motion zone %s'%znamer
                donorZones = X.setInterpData(zr,donorZones,nature=1,penalty=1,loc='centers',storage='inverse',sameName=1,\
                                             hook=hooks, itype='chimera')
                for zd in donorZones:
                    znamed = zd[0]
                    if znamed in dictOfOffBodyZoneNb:
                        nozd = dictOfOffBodyZoneNb[znamed]
                        tc[2][noBaseOff][2][nozd] = zd
                    elif znamed in dictOfNearBodyZoneNb:
                        nozd = dictOfNearBodyZoneNb[znamed]
                        nobd = dictOfNearBodyBaseNb[znamed]
                        tc[2][nobd][2][nozd] = zd

        for dnrname in dictOfMotionADT:
            C.freeHook(dictOfMotionADT[dnrname])

        # Reinit
        if NIT == 1:
            for dnrname in dictOfOffBodyADT:
                C.freeHook(dictOfOffBodyADT[dnrname])
            C._rmVars(tc, [
                "CoordinateX", "CoordinateY", "CoordinateZ", "cellNInit",
                "CoordinateXInit", "CoordinateYInit", "CoordinateZInit"
            ])
            C._initVars(t, '{CoordinateX}={CoordinateXInit}')
            C._initVars(t, '{CoordinateY}={CoordinateYInit}')
            C._initVars(t, '{CoordinateZ}={CoordinateZInit}')
            C._rmVars(t, [
                "centers:cellNInit", "CoordinateXInit", "CoordinateYInit",
                "CoordinateZInit"
            ])
            C._cpVars(tc, "cellN", t, 'centers:cellN')
            return t, tc

        else:
            for zc in Internal.getZones(tc):
                IDatas = Internal.getNodesFromName(zc, "ID_*")
                for ID in IDatas:
                    name = ID[0].split('_')
                    ID[0] = 'ID#%d_%s' % (it, name[1])

            if it == 5:
                C.convertPyTree2File(t, "t5.cgns")
                C.convertPyTree2File(tc, "tc5.cgns")
            C._initVars(tc[2][noBaseOff], "{cellN}={cellNInit}")  # reinit
            C._initVars(t[2][noBaseOff],
                        "{centers:cellN}={centers:cellNInit}")  # reinit
            C._initVars(tc, '{CoordinateX}={CoordinateXInit}')
            C._initVars(tc, '{CoordinateY}={CoordinateYInit}')
            C._initVars(tc, '{CoordinateZ}={CoordinateZInit}')
            C._initVars(t, '{CoordinateX}={CoordinateXInit}')
            C._initVars(t, '{CoordinateY}={CoordinateYInit}')
            C._initVars(t, '{CoordinateZ}={CoordinateZInit}')
            C._initVars(tBB, '{CoordinateX}={CoordinateXInit}')
            C._initVars(tBB, '{CoordinateY}={CoordinateYInit}')
            C._initVars(tBB, '{CoordinateZ}={CoordinateZInit}')

    for dnrname in dictOfOffBodyADT:
        C.freeHook(dictOfOffBodyADT[dnrname])

    C._rmVars(t, [
        "centers:cellNInit", "CoordinateXInit", "CoordinateYInit",
        "CoordinateZInit"
    ])
    C._initVars(tc[2][noBaseOff], "{cellN}={cellNInit}")
    C._cpVars(tc, "cellN", t, "centers:cellN")
    C._rmVars(
        tc,
        ["cellNInit", "CoordinateXInit", "CoordinateYInit", "CoordinateZInit"])
    return t, tc