Example #1
0
def cart3d_to_usm3d_bc_filename(cart3d_filename,
                                usm3d_bc_filename,
                                log=None,
                                debug=False):
    """
    Converts a Cart3D file to STL format.

    :param cart3d_filename: path to the input Cart3D file
    :param usm3d_bc_filename:    path to the output BC file
    :param log:             a logger object (or None)
    :param debug:           True/False (used if log is not defined)
    """
    cart3d = Cart3DReader(log=log, debug=debug)
    (nodes, elements, regions, loads) = cart3d.read_cart3d(cart3d_filename)

    #nodes = cart3d.nodes
    #elements = cart3d.elements
    #regions = cart3d.regions

    usm3d_bc = open(usm3d_bc_filename, 'wb')
    patches = unique(regions)
    npatches = len(patches)
    nelements, three = elements.shape

    usm3d_bc.write('%-8s %-8s %-8s %s\n' %
                   (nelements, 'intA', npatches, 'intB'))
    usm3d_bc.write('Triangle   Patch            Nodes\n')
    for i, element, iregion in zip(count(), elements, regions):
        (n1, n2, n3) = element
        usm3d_bc.write('%-8s %-8s %-8s %-8s %s\n' %
                       (i + 1, iregion, n1, n2, n3))
    usm3d_bc.close()
Example #2
0
def nastran_to_cart3d(bdf, log=None, debug=False):
    """
    Converts a Nastran BDF object to Cart3D format.

    :param bdf:    a BDF object
    :param log:    a logger object (or None)
    :param debug:  True/False (used if log is not defined)

    :returns cart3d: a Cart3D object
    """
    cart3d = Cart3DReader(log=log, debug=debug)

    nnodes = len(model.nodes)
    nelements = len(model.elements)

    nodes = zeros((nnodes, 3), 'float64')
    elements = zeros((nelements, 3), 'int32')
    regions = zeros(nelements, 'int32')

    i = 0
    for node_id, node in sorted(iteritems(model.nodes)):
        elements[i, :] = node.Position()
    for element_id, element in sorted(iteritems(model.elements)):
        if element.type == 'CTRIA3':
            elements[i, :] = element.NodeIDs()
            regions[i] = element.Mid()
        else:
            raise NotImplementedError(element.type)

    cart3d.nodes = nodes
    cart3d.elements = elements
    cart3d.regions = regions
    return cart3d
Example #3
0
    def test_1(self):
        lines = """7 6
    0.000000 0.000000 0.000000
    1.000000 0.000000 0.000000
    2.000000 0.000000 0.000000
    1.000000 1.000000 0.000000
    2.000000 1.000000 0.000000
    1.000000 -1.000000 0.000000
    2.000000 -1.000000 0.000000
    1 4 2
    2 4 5
    2 5 3
    2 6 1
    5 6 2
    5 5 2
    1
    2
    3
    2
    4
    6
    """
        infileName = os.path.join(test_path, 'flat_full.tri')
        f = open(infileName, 'wb')
        f.write(lines)
        f.close()

        cart3d = Cart3DReader(log=None, debug=False)
        (points, elements, regions, loads) = cart3d.read_cart3d(infileName)
        assert len(points) == 7, 'npoints=%s' % len(points)
        assert len(elements) == 6, 'nelements=%s' % len(elements)
        assert len(regions) == 6, 'nregions=%s' % len(regions)
        assert len(loads) == 0, 'nloads=%s' % len(loads)
Example #4
0
def main():
    """tests getting the normal groups"""
    cart3d = Cart3DReader(log=None, debug=False)
    result_names = []  # read the mesh only
    (points, elements, regions, loads) = cart3d.read_cart3d('Cart3d_55000_2.4_10_0_0_0_0.i.triq', result_names=result_names)

    celements = elements.copy()
    normals, groups = get_normal_groups(points, celements)
    tris, quads = normal_groups_to_quads(celements, normals, groups)

    write_nastran_quads_tris(points, tris, quads, bdf_filename='tris_quads.bdf')
Example #5
0
def cart3d_to_nastran_filename(cart3d_filename,
                               bdf_filename,
                               log=None,
                               debug=False):
    """
    Converts a Cart3D file to STL format.

    :param cart3d_filename: path to the input Cart3D file
    :param bdf_filename:    path to the output BDF file
    :param log:             a logger object (or None)
    :param debug:           True/False (used if log is not defined)
    """
    cart3d = Cart3DReader(log=log, debug=debug)
    (nodes, elements, regions, loads) = cart3d.read_cart3d(cart3d_filename)

    #bdf = BDF()
    #bdf.nodes = cart3d.nodes
    #bdf.elements = cart3d.elements
    #bdf.write_bdf(bdf_filename)
    #return
    f = open(bdf_filename, 'wb')
    f.write('CEND\n')
    f.write('BEGIN BULK\n')
    f.write('$Nodes\n')

    i = 0
    nid = 1
    cid = 0
    for node in nodes:
        card = print_card_16(['GRID', nid, cid] + list(node))
        f.write(card)

    eid = 1
    f.write('$Elements\n')
    for (n1, n2, n3), pid in zip(elements, regions):
        card = print_card_8(['CTRIA3', eid, pid, n1, n2, n3])
        f.write(card)
        eid += 1

    t = 0.1
    E = 1e7
    nu = 0.3
    f.write('$Properties\n')
    for pid in unique(regions):
        mid = pid
        card = print_card_8(['PSHELL', pid, mid, t])
        f.write(card)
        card = print_card_8(['MAT1', mid, E, None, nu])
        f.write(card)
    f.write('ENDDATA\n')
    f.close()
Example #6
0
    def test_2(self):
        lines = """5 3 6
    0. 0. 0.
    1. 0. 0.
    2. 0. 0.
    1. 1. 0.
    2. 1. 0.
    1 4 2
    2 4 5
    2 5 3
    1
    2
    3
    1.
    1. 1. 1. 1. 1.
    2.
    2. 2. 2. 2. 2.
    3.
    3. 3. 3. 3. 3.
    4.
    4. 4. 4. 4. 4.
    5.
    5. 5. 5. 5. 5.

    """
        infileName = os.path.join(test_path, 'flat.tri')
        f = open(infileName, 'wb')
        f.write(lines)
        f.close()

        cart3d = Cart3DReader(log=None, debug=False)
        (points, elements, regions, loads) = cart3d.read_cart3d(infileName)

        assert len(points) == 5, 'npoints=%s' % len(points)
        assert len(elements) == 3, 'nelements=%s' % len(elements)
        assert len(regions) == 3, 'nregions=%s' % len(regions)

        assert len(loads) == 10, 'nloads=%s' % len(loads)
        assert len(loads['Cp']) == 5, 'nCp=%s' % len(loads['Cp'])

        outfileName = os.path.join(test_path, 'flat.bin.tri')
        cart3d.write_cart3d(outfileName, points, elements, regions, loads=None, is_binary=True)
        cnormals = cart3d.get_normals(points, elements)
        nnormals = cart3d.get_normals_at_nodes(points, elements, cnormals)
Example #7
0
    def test_3(self):
        infileName = os.path.join(test_path, 'threePlugs.bin.tri')
        outfileName = os.path.join(test_path, 'threePlugs_out.tri')
        outfileName_bin = os.path.join(test_path, 'threePlugs_bin2.tri')
        outfileName_bin_out = os.path.join(test_path, 'threePlugs_bin_out.tri')
        cart3d = Cart3DReader(log=None, debug=False)

        (points, elements, regions, loads) = cart3d.read_cart3d(infileName)
        cart3d.write_cart3d(outfileName, points, elements, regions, loads=None, is_binary=False)
        cart3d.write_cart3d(outfileName_bin, points, elements, regions, loads=None, is_binary=True)

        (points2, elements2, regions2, loads2) = cart3d.read_cart3d(outfileName)
        check_array(points, points2)

        (points2, elements2, regions2, loads2) = cart3d.read_cart3d(outfileName_bin)
        check_array(points, points2)

        os.remove(outfileName)
        os.remove(outfileName_bin)

        cart3d.write_cart3d(outfileName_bin_out, points2, elements2, regions2, loads2, is_binary=False)
        os.remove(outfileName_bin_out)
Example #8
0
def write_new_cart3d_mesh(cfdGridFile, cfdGridFile2, wA):
    """takes in half model wA, and baseline cart3d model, updates full model grids"""
    log.info("---starting write_new_cart3d_mesh---")

    # make half model
    cart3d = Cart3DReader()
    result_names = ['Cp']
    (points, elements, regions, loads) = cart.read_cart3d(cfdGridFile, result_names=result_names) # reading full model
    (points, elements, regions, loads) = cart.make_half_model(points, elements, regions, loads)

    # adjusting points
    points2 = {}
    for (iPoint, point) in sorted(points.iteritems()):
        wai = wA[iPoint]
        (x, y, z) = point
        points2[iPoint] = [x, y, z + wai]

    (points, elements, regions, loads) = cart.make_mirror_model(points2, elements, regions, loads)  # mirroring model
    cart.write_cart3d(cfdGridFile2, points, elements, regions) # writing half model; no loads (cleans up leftover parameters)

    log.info("---finished write_new_cart3d_mesh---")
    sys.stdout.flush()
Example #9
0
def cart3d_to_stl_filename(cart3d_filename,
                           stl_filename,
                           log=None,
                           debug=False):
    """
    Converts a Cart3D file to STL format.
    
    :param cart3d_filename: path to the input Cart3D file
    :param stl_filename:    path to the output STL file
    :param log:             a logger object (or None)
    :param debug:           True/False (used if log is not defined)
    """
    cart3d = Cart3DReader(log=log, debug=debug)
    cart3d.read_cart3d(cart3d_filename)

    stl = STLReader()
    stl.nodes = cart3d.nodes
    stl.elements = cart3d.elements
    stl.write_stl(stl_filename)
    return
    if 0:
        normals = model.normals()

        f = open(stl_filename, 'wb')
        f.write('solid cart3d_model\n')

        i = 0
        for (n1, n2, n3) in model.elements:
            #f.write('solid cart3d_model\n')
            n = normals[i]
            f.write('loop\n')
            f.write('  facet normal %f %f %f\n' % (n[0], n[1], n[2]))
            f.write('    vertex %f %f %f\n' % (n1[0], n1[1], n1[2]))
            f.write('    vertex %f %f %f\n' % (n1[0], n1[1], n1[2]))
            f.write('    vertex %f %f %f\n' % (n1[0], n1[1], n1[2]))
            f.write('  endfacet')
            f.write('endloop\n')
            i += 1
        f.close()
Example #10
0
def read_cart3d_points(cfdGridFile):
    """return half model points to shrink xK matrix"""
    cart = Cart3DReader()
    (points, elements, regions, loads) = cart.read_cart3d(cfdGridFile)
    (points, elements, regions, loads) = cart.make_half_model(points, elements, regions, loads)
    return points
Example #11
0
 def read_cart3d(self, cart3d_filename):
     nodes, elements, regions, loads = Cart3DReader.read_cart3d(
         self, cart3d_filename)
     self.nodes = nodes
     self.elements = elements - 1
Example #12
0
    def load_cart3d_geometry(self, cart3d_filename, dirname, plot=True):
        #key = self.caseKeys[self.iCase]
        #case = self.resultCases[key]

        skipReading = self.removeOldGeometry(cart3d_filename)
        if skipReading:
            return

        model = Cart3DReader(log=self.log, debug=False)
        self.modelType = 'cart3d'
        #self.modelType = model.modelType
        (nodes, elements, regions, loads) = model.read_cart3d(cart3d_filename)
        self.nNodes = model.nPoints
        self.nElements = model.nElementsRead

        #print("nNodes = ",self.nNodes)
        #print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)
        self.grid2.Allocate(1, 1000)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        self.nidMap = {}
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / self.nNodes  # so you can color the nodes by ID
            for nid, node in sorted(iteritems(nodes)):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print(str(element))

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert nodes is not None
        nnodes = nodes.shape[0]

        nid = 0
        #print("nnodes=%s" % nnodes)
        mmax = amax(nodes, axis=0)
        mmin = amin(nodes, axis=0)
        dim_max = (mmax - mmin).max()
        self.update_axes_length(dim_max)

        for i in range(nnodes):
            points.InsertPoint(nid, nodes[i, :])
            nid += 1

        nelements = elements.shape[0]
        elements -= 1
        for eid in range(nelements):
            elem = vtkTriangle()
            node_ids = elements[eid, :]
            elem.GetPointIds().SetId(0, node_ids[0])
            elem.GetPointIds().SetId(1, node_ids[1])
            elem.GetPointIds().SetId(2, node_ids[2])
            self.grid.InsertNextCell(
                5, elem.GetPointIds())  #elem.GetCellType() = 5  # vtkTriangle

        self.grid.SetPoints(points)
        #self.grid2.SetPoints(points2)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print(dir(self.grid) #.SetNumberOfComponents(0))
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        #self.grid2.Modified()
        self.grid.Update()
        #self.grid2.Update()
        print("updated grid")

        # loadCart3dResults - regions/loads
        self.TurnTextOn()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        assert loads is not None
        if 'Mach' in loads:
            avgMach = mean(loads['Mach'])
            note = ':  avg(Mach)=%g' % avgMach
        else:
            note = ''
        self.iSubcaseNameMap = {1: ['Cart3d%s' % note, '']}
        cases = {}
        ID = 1

        #print("nElements = ",nElements)
        form, cases = self._fill_cart3d_case(cases, ID, nodes, elements,
                                             regions, loads, model)
        #self._finish_results_io(cases)
        self._finish_results_io2(form, cases)
Example #13
0
 def __init__(self, log=None, debug=False):
     Cart3DReader.__init__(self, log=log, debug=debug)
Example #14
0
    def load_cart3d_results(self, cart3d_filename, dirname):
        model = Cart3DReader(log=self.log, debug=False)

        self.load_cart3d_geometry(cart3d_filename, dirname)
Example #15
0
    def load_cart3d_geometry(self, cart3dFileName, dirname):
        #key = self.caseKeys[self.iCase]
        #case = self.resultCases[key]

        skipReading = self.removeOldGeometry(cart3dFileName)
        if skipReading:
            return

        model = Cart3DReader(log=self.log, debug=False)
        self.modelType = model.modelType
        (nodes, elements, regions, loads) = model.read_cart3d(cart3dFileName)
        self.nNodes = model.nPoints
        self.nElements = model.nElementsRead

        #print("nNodes = ",self.nNodes)
        print("nElements = ", self.nElements)

        self.grid.Allocate(self.nElements, 1000)
        #self.gridResult.SetNumberOfComponents(self.nElements)
        self.grid2.Allocate(1, 1000)

        points = vtk.vtkPoints()
        points.SetNumberOfPoints(self.nNodes)
        #self.gridResult.Allocate(self.nNodes, 1000)
        #vectorReselt.SetNumberOfComponents(3)
        self.nidMap = {}
        #elem.SetNumberOfPoints(nNodes)
        if 0:
            fraction = 1. / self.nNodes  # so you can color the nodes by ID
            for nid, node in sorted(nodes.iteritems()):
                points.InsertPoint(nid - 1, *node)
                self.gridResult.InsertNextValue(nid * fraction)
                #print str(element)

                #elem = vtk.vtkVertex()
                #elem.GetPointIds().SetId(0, i)
                #self.aQuadGrid.InsertNextCell(elem.GetCellType(), elem.GetPointIds())
                #vectorResult.InsertTuple3(0, 0.0, 0.0, 1.0)

        assert nodes is not None
        nnodes, three = nodes.shape

        nid = 0
        print "nnodes=%s" % nnodes
        for i in xrange(nnodes):
            points.InsertPoint(nid, nodes[i, :])
            nid += 1

        nelements, three = elements.shape
        elements -= 1
        for eid in xrange(nelements):
            elem = vtkTriangle()
            node_ids = elements[eid, :]
            elem.GetPointIds().SetId(0, node_ids[0])
            elem.GetPointIds().SetId(1, node_ids[1])
            elem.GetPointIds().SetId(2, node_ids[2])
            self.grid.InsertNextCell(
                5, elem.GetPointIds())  #elem.GetCellType() = 5  # vtkTriangle

        self.grid.SetPoints(points)
        #self.grid2.SetPoints(points2)
        #self.grid.GetPointData().SetScalars(self.gridResult)
        #print dir(self.grid) #.SetNumberOfComponents(0)
        #self.grid.GetCellData().SetNumberOfTuples(1);
        #self.grid.GetCellData().SetScalars(self.gridResult)
        self.grid.Modified()
        #self.grid2.Modified()
        self.grid.Update()
        #self.grid2.Update()
        print("updated grid")

        # loadCart3dResults - regions/loads
        self.TurnTextOn()
        self.scalarBar.VisibilityOn()
        self.scalarBar.Modified()

        assert loads is not None
        if 'Mach' in loads:
            avgMach = mean(loads['Mach'])
            note = ':  avg(Mach)=%g' % avgMach
        else:
            note = ''
        self.iSubcaseNameMap = {1: ['Cart3d%s' % note, '']}
        cases = {}
        ID = 1

        #print "nElements = ",nElements
        cases = self.fillCart3dCase(cases, ID, elements, regions, loads)

        self.resultCases = cases
        self.caseKeys = sorted(cases.keys())
        #print "caseKeys = ",self.caseKeys
        #print "type(caseKeys) = ",type(self.caseKeys)
        self.iCase = -1
        self.nCases = len(self.resultCases) - 1  # number of keys in dictionary
        self.cycleResults()  # start at nCase=0
Example #16
0
def intersect_model(cart3d_filename):
    cart3d = Cart3DReader()
    points, elements, regions, loads = cart3d.read_cart3d(cart3d_filename)

    intersect = Intersect(points, elements, regions)
    intersect.intersect_tris()
Example #17
0
 def read_cart3d(self, cart3d_filename):
     nodes, elements, regions, loads = Cart3DReader.read_cart3d(self, cart3d_filename)
     self.nodes = nodes
     self.elements = elements - 1
Example #18
0
 def __init__(self, log=None, debug=False):
     Cart3DReader.__init__(self, log=log, debug=debug)
Example #19
0
def run_map_loads(inputs, cart3dGeom='Components.i.triq', bdfModel='fem.bdf', bdfModelOut='fem.loads.out'):
    assert os.path.exists(bdfModel), '%r doesnt exist' % bdfModel

    t0 = time()
    aero_format = inputs['aero_format'].lower()

    # the property regions to map elements to
    propertyRegions = [1, 1101, 1501, 1601, 1701, 1801, 1901, 2101, 2501, 2601, 2701, 2801, 2901, 10103, 10201, 10203, 10301, 10401, 10501, 10601, 10701, 10801, 10901, 20103, 20203, 20301, 20401, 20501, 20601, 20701, 20801, 20901, 701512, 801812]
    if inputs is None:
        inputs = {
            'aero_format' : 'Cart3d',
            'Mach' : 0.825,
            'pInf' : 499.3,        # psf, alt=35k (per Schaufele p. 11)
            'pInf' : pInf / 144.,  # convert to psi
            'qInf' : 1.4 / 2. * pInf * Mach**2.,
            'Sref' : 1582876.,  # inch^2
            'Lref' : 623.,  # inch
            'xref' : 268.,  # inch
            'isubcase' : 1,
        }

    isubcase = inputs['isubcase']
    pInf = inputs['pInf']
    qInf = inputs['qInf']

    if aero_format == 'cart3d':
        mesh = Cart3DReader()
        half_model = cart3dGeom + '_half'
        result_names = ['Cp', 'rho', 'rhoU', 'rhoV', 'rhoW', 'E']

        if not os.path.exists(half_model):
            (nodes, elements, regions, loads) = mesh.read_cart3d(cart3dGeom, result_names=result_names)
            #Cp = loads['Cp']
            (nodes, elements, regions, loads) = mesh.make_half_model(nodes, elements, regions, loads, axis='y')
            Cp = loads['Cp']
            #(nodes, elements, regions, Cp) = mesh.renumber_mesh(nodes, elements, regions, Cp)
            mesh.write_cart3d(half_model, nodes, elements, regions, loads)
        else:
            (nodes, elements, regions, loads) = mesh.read_cart3d(half_model, result_names=['Cp'])
        Cp = loads['Cp']
    else:
        raise NotImplementedError('aero_format=%r' % aero_format)

    aeroModel = AeroModel(inputs, nodes, elements, Cp)
    log.info("elements[1] = %s" % elements[1])
    del elements, nodes, Cp


    fem = BDF(debug=True, log=log)
    fem.read_bdf(bdfModel)
    sys.stdout.flush()

    # 1 inboard
    # 1000s upper - lower inboard
    # 2000s lower - lower inboard
    # big - fin

    structuralModel = StructuralModel(fem, propertyRegions)

    mapper = LoadMapping(aeroModel, structuralModel)
    t1 = time()
    mapper.set_flight_condition(pInf, qInf)
    mapper.setOutput(bdffile=bdfModelOut, loadCase=isubcase)
    log.info("setup time = %g sec; %g min" % (t1-t0, (t1-t0)/60.))

    mapper.build_mapping_matrix(debug=False)
    t2 = time()
    log.info("mapping matrix time = %g sec; %g min" % (t2-t1, (t2-t1)/60.))

    mapper.mapLoads()
    t3 = time()
    log.info("map loads time = %g sec" % (t3 - t2))
    log.info("total time = %g min" % ((t3 - t0) / 60.))
Example #20
0
def run_map_loads(cart3dGeom='Components.i.triq',
                  bdfModel='fem.bdf',
                  bdfModelOut='fem.loads.out'):
    assert os.path.exists(bdfModel), '%r doesnt exist' % bdfModel

    t0 = time()
    mesh = Cart3DReader()
    half_model = cart3dGeom + '_half'

    result_names = ['Cp', 'rho', 'rhoU', 'rhoV', 'rhoW', 'E']
    (nodes, elements, regions,
     loads) = mesh.read_cart3d(cart3dGeom, result_names=result_names)
    #Cp = loads['Cp']
    (nodes, elements, regions, loads) = mesh.make_half_model(nodes,
                                                             elements,
                                                             regions,
                                                             loads,
                                                             axis='y')

    Cp = loads['Cp']
    #(nodes, elements, regions, Cp) = mesh.renumber_mesh(nodes, elements, regions, Cp)
    mesh.write_cart3d(half_model, nodes, elements, regions, loads)

    Mach = 0.825
    pInf = 499.3  # psf, alt=35k (per Schaufele p. 11)
    pInf = pInf / 144.  # convert to psi
    qInf = 1.4 / 2. * pInf * Mach**2.
    aeroModel = AeroModel(nodes, elements, Cp, pInf, qInf)
    log.info("elements[1] = %s" % elements[1])
    del elements, nodes, Cp

    fem = BDF(debug=True, log=log)
    fem.read_bdf(bdfModel)
    sys.stdout.flush()

    propertyRegions = [
        1, 1101, 1501, 1601, 1701, 1801, 1901, 2101, 2501, 2601, 2701, 2801,
        2901, 10103, 10201, 10203, 10301, 10401, 10501, 10601, 10701, 10801,
        10901, 20103, 20203, 20301, 20401, 20501, 20601, 20701, 20801, 20901,
        701512, 801812
    ]

    # 1 inboard
    # 1000s upper - lower inboard
    # 2000s lower - lower inboard
    # big - fin

    structuralModel = StructuralModel(fem, propertyRegions)

    mapper = LoadMapping(aeroModel, structuralModel)
    t1 = time()
    mapper.set_flight_condition(pInf, qInf)
    mapper.setOutput(bdffile=bdfModelOut, loadCase=1)
    log.info("setup time = %g sec; %g min" % (t1 - t0, (t1 - t0) / 60.))

    mapper.build_mapping_matrix(debug=False)
    t2 = time()
    log.info("mapping matrix time = %g sec; %g min" % (t2 - t1,
                                                       (t2 - t1) / 60.))

    mapper.mapLoads()
    t3 = time()
    log.info("map loads time = %g sec" % (t3 - t2))
    log.info("total time = %g min" % ((t3 - t0) / 60.))