It would make my life much easier if I could change the default node-numbering feature in Trelis. In a simplified case, let’s say we have a square domain. how can I renumber the nodes in a way that it starts from the lower-left corner and ends at the upper-right?
Here’s an example script that works on your example, i.e. rectangular grid, mapped mesh scheme, 2D
## Function to return a list of unique values, within tolerance
def tol_set(inList,tol):
inList.sort()
outList = [inList.pop(0), ]
for i in inList:
# Skip items within tolerance.
if abs(outList[-1] - i) <= tol:
continue
outList.append(i)
return outList
## Begin script
cubit.cmd('reset')
## Make initial mesh
cubit.cmd('create surface rectangle width 1 zplane')
cubit.cmd('surf all interval 4')
cubit.cmd('surf all scheme map')
cubit.cmd('mesh surf all')
## Show initial node labels
cubit.cmd('label node On')
cubit.cmd('graphics text size 5')
## Make sure that all node ids are contiguous, starting at 1
num_nodes = cubit.get_node_count()
cubit.cmd('renumber Node all start_id 1 uniqueids')
## Update node label text
cubit.cmd('label node Off')
cubit.cmd('label node On')
## Get nodal coordinates
xyz = [[] for i in range(0,num_nodes)]
for i in range(0,num_nodes):
xyz[i] = list(cubit.get_nodal_coordinates(i+1))
## Get unique x,y values of nodal coordinates
x = []
y = []
for i in range(0,num_nodes):
x.append(xyz[i][0])
y.append(xyz[i][1])
x = tol_set(x,1e-12)
y = tol_set(y,1e-12)
## Renumber node ids increasing West->East, South->North
n = 0
for i in range(0,len(y)):
for j in range(0,len(x)):
n += 1
print(n)
node_id = cubit.get_closest_node(x[j],y[i],0.)
print(node_id)
command = 'renumber Node {node_id} start_id {n} uniqueids'
command = command.format(node_id=node_id, n=n)
cubit.cmd(command)
## Update node label text
cubit.cmd('label node Off')
cubit.cmd('label node On')