Create virtual nodes

#############################################################################################################################
# Created by Ning An
# 2019/12
# https://anning.me/create-virtual-nodes
# Created in Abaqus Version 2017
#----------------------------------------------------
# Function for creating virtual nodes
# mdb: model database
# NameModel: A string with the name of your model
# NameRef: A string with the name of a virtual node.
# Coord: A vector indicates the coordinates of the virtual node.
# Example: VirtualNodes(mdb, 'Model-1', 'Ref-0', [0.0, 0.0, 0.0])
#############################################################################################################################
def VirtualNodes(mdb, NameModel, NameRef, Coord):
    from part import THREE_D, DEFORMABLE_BODY
    #Create reference parts and assemble
    mdb.models[NameModel].Part(dimensionality=THREE_D, name=NameRef, type=
        DEFORMABLE_BODY)
    mdb.models[NameModel].parts[NameRef].ReferencePoint(point=(Coord[0], Coord[1], Coord[2]))
    mdb.models[NameModel].rootAssembly.Instance(dependent=ON, name=NameRef, 
        part=mdb.models[NameModel].parts[NameRef])

    #Create set of reference points
    mdb.models[NameModel].rootAssembly.Set(name=NameRef, referencePoints=(
        mdb.models[NameModel].rootAssembly.instances[NameRef].referencePoints[1],))