Beispiel #1
0
def exfile_to_OpenCMISS(nodeFilename, elementFilename, coordinateField, region, meshUserNumber,
                      dimension=2, interpolation='linear'):
    """Convert an exnode and exelem files to a morphic mesh.

    Only Linear lagrange elements supported.

    Keyword arguments:
    nodeFilename -- exnode filename
    elementFilename -- exelem filename
    coordinateField -- the field to read in
    dimension -- dimension of mesh to read in
    interpolation -- the interpolation of the mesh to read in
    """

    # Load exfiles
    exnode = exfile.Exnode(nodeFilename)
    exelem = exfile.Exelem(elementFilename, dimension)

    totalNumberOfNodes = len(exnode.nodeids)
    totalNumberOfElements = len(exelem.elements)

    # Start the creation of a manually generated mesh in the region
    mesh = iron.Mesh()
    mesh.CreateStart(meshUserNumber, region, dimension)
    mesh.NumberOfComponentsSet(1)
    mesh.NumberOfElementsSet(totalNumberOfElements)

    # Define nodes for the mesh
    nodes = iron.Nodes()
    nodes.CreateStart(region, totalNumberOfNodes)
    nodes.UserNumbersAllSet(exnode.nodeids)
    nodes.CreateFinish()

    elements = iron.MeshElements()
    meshComponentNumber = 1
    elements.CreateStart(mesh, meshComponentNumber, basis)
    elemNums = []
    for elem in exelem.elements:
        elemNums.append(elem.number)
    elements.UserNumbersAllSet(elemNums)
    for elem_idx, elem in enumerate(exelem.elements):
        elements.NodesSet(elem_idx+1, elem.nodes)
    elements.CreateFinish()

    mesh.CreateFinish()

    coordinates, node_ids = extract_exfile_coordinates(nodeFilename, coordinateField, interpolation)

    return mesh, coordinates, node_ids
Beispiel #2
0
 decompositionUserNumber, geometricFieldUserNumber, equationsSetUserNumber,
 equationsSetFieldUserNumber, independentFieldUserNumber,
 dependentFieldUserNumber, problemUserNumber, fibreFieldUserNumber,
 materialFieldUserNumber, deformedFieldUserNumber, strainFieldUserNumber,
 cellMLUserNumber, cellMLModelsFieldUserNumber,
 cellMLParametersFieldUserNumber, cellMLIntermediateFieldUserNumber) = range(
     1, 22)

# longitudinal elements, circumferential elements, transmural elements
elems = [8, 8, 2]
"""
cmd = '. ./matlab_batcher.sh benchmark_ellipse_linear ['+str(elems[0])+','+str(elems[1])+','+str(elems[2])+']'
if not os.path.exists("ellipse_benchmark_lin_"+str(elems[2])+"-"+str(elems[1])+"-"+str(elems[0])+".exnode"):
    os.system(cmd)
"""
inputNodes = exfile.Exnode("ellipse_benchmark_lin_" + str(elems[2]) + "-" +
                           str(elems[1]) + "-" + str(elems[0]) + ".exnode")
inputElems = exfile.Exelem("ellipse_benchmark_lin_" + str(elems[2]) + "-" +
                           str(elems[1]) + "-" + str(elems[0]) + ".exelem")
num_apex_elem = elems[1] * elems[2]

# Set up region and CS
[numOfCompNodes, compNodeNum, CS,
 region] = BasicSetUp(regionUserNumber, coordinateSystemUserNumber)

# Set up tricubic Hermite basis functions
[linearBasis, colBasis] = BasisFunction(linearBasisUserNumber,
                                        numOfXi,
                                        option,
                                        collapsed=True)

# Set up mesh
Beispiel #3
0
def exfile_to_morphic(nodeFilename, elementFilename, coordinateField,
                      dimension=2, interpolation='linear'):
    """Convert an exnode and exelem files to a morphic mesh.

    Only Linear lagrange elements supported.

    Keyword arguments:
    nodeFilename -- exnode filename
    elementFilename -- exelem filename
    coordinateField -- the field to read in
    dimension -- dimension of mesh to read in
    """

    # Create morphic mesh
    mesh = morphic.Mesh()

    # Load exfiles
    exnode = exfile.Exnode(nodeFilename)
    exelem = exfile.Exelem(elementFilename, dimension)

    # Add nodes
    if interpolation == 'linear':
        derivatives = [1]
    elif interpolation == 'hermite':
        derivatives = range(1,9)
    for node_num in exnode.nodeids:
        coordinates = []
        for component in range(1, 4):
            component_name = ["x", "y", "z"][component - 1]
            componentValues = []
            for derivative_idx, derivative in enumerate(derivatives):
                componentValues.append(exnode.node_value(coordinateField,
                                                     component_name, node_num,
                                                     derivative))
            coordinates.append(componentValues)

        mesh.add_stdnode(node_num, coordinates, group='_default')
        print 'Morhpic node added', node_num, coordinates

    if dimension == 2:
        if interpolation == 'linear':
            element_interpolation = ['L1', 'L1']
        if interpolation == 'quadratic':
            element_interpolation = ['L2', 'L2']
    elif dimension == 3:
        if interpolation == 'linear':
            element_interpolation = ['L1', 'L1', 'L1']
        if interpolation == 'quadratic':
            element_interpolation = ['L2', 'L2', 'L2']
        if interpolation == 'hermite':
            element_interpolation = ['H3', 'H3', 'H3']

    # Add elements
    for elem in exelem.elements:
        mesh.add_element(elem.number, element_interpolation, elem.nodes)
        print 'Morphic element added', elem.number

    # Generate the mesh
    mesh.generate(True)

    return mesh
Beispiel #4
0
# The number of data points which are digitised from the heart segments
# fix interior nodes so that fitting only applies to surface
# If start iteration > 1, read in geometry from a previous fit iteration
numberOfDataPoints = 2513
numberOfIterations = 1
fixInterior = True
zeroTolerance = 0.00001
hermite = True
# Set Sobolev smoothing parameters
tau = 0.00005
kappa = 0.00001
iteration = 1
if iteration > 1:
    exfileMesh = True
    exnode = exfile.Exnode("DeformedGeometry" + str(iteration - 1) +
                           ".part0.exnode")
    exelem = exfile.Exelem("UndeformedGeometry.part0.exelem")
else:
    exfileMesh = False
print "other parameters setted up "

#=================================================================
#
#=================================================================
(coordinateSystemUserNumber, regionUserNumber, basisUserNumber,
 generatedMeshUserNumber, meshUserNumber, decompositionUserNumber,
 geometricFieldUserNumber, equationsSetFieldUserNumber,
 dependentFieldUserNumber, independentFieldUserNumber,
 dataPointFieldUserNumber, materialFieldUserNumber, analyticFieldUserNumber,
 dependentDataFieldUserNumber, dataPointsUserNumber, dataProjectionUserNumber,
 equationsSetUserNumber, problemUserNumber) = range(1, 19)