# CCHE2D mesh.geo to BLUE KENUE channel mesh.t3s --Clemens Dorfmann--
#---------------------------------------------------------------------#

# Give here the filenames for Input and Output files:

Input_file = 'test_17x5.geo'
Output_file = 'test_17x5.geo.t3s'

#---------------------------------------------------------------------#

# read CCHE2D file
CCHE2D_file = open(Input_file, 'r')
CC_text = CCHE2D_file.readlines()
CCHE2D_file.close()

# initialisation of some empty lists
line_ji = []
liste_x_CC = []
liste_y_CC = []
liste_z_CC = []
liste_x_BK = []
liste_y_BK = []
liste_z_BK = []
liste_node1 = []
liste_node2 = []
liste_node3 = []

# get i (crosswise node number) and j (streamwise node number) from first line
line_ji.append(CC_text[0].split())
i = int(line_ji[0][0])
j = int(line_ji[0][1])

CC_text.pop(0)

# read x y z values into lists and sort
for lines in CC_text:
    CC_text = lines.split()
    liste_x_CC.append(float(CC_text[0]))
    liste_y_CC.append(float(CC_text[1]))
    liste_z_CC.append(float(CC_text[3]))

for k in range(i):
    liste_x_BK += liste_x_CC[k::i]
    liste_y_BK += liste_y_CC[k::i]
    liste_z_BK += liste_z_CC[k::i]

# node connectivity table for BlueKenue
for k in range(1, i*j-j+1):
    liste_node1 += [k] * 2
del liste_node1[2*j-1::2*j]
del liste_node1[2*j-1::2*j-1]
del liste_node1[0]

for k in range(j+1, i*j):
    liste_node2 += [k] * 2
del liste_node2[2*j-2::2*j]
del liste_node2[2*j-2::2*j-1]

for k in range(1, len(liste_node2), 2):
    liste_node3 += (liste_node2[k] - (j-1), liste_node2[k] + 1)

# write to BlueKenue channel mesh file
BlueKenue_file= open(Output_file, 'w')

BlueKenue_file.write('#' + '\n' + '# CCHE2D source file:' + '\t' + str(Input_file)  + '\n' + '#' + '\n' + \
                    ':AttributeUnits 1 m' + '\n' + ':NodeCount ' + str(i*j) + '\n' + ':ElementCount ' + \
                    str((i-1)*(j-1)*2) + '\n' + ':ElementType  T3' + '\n' + '#' + '\n' +  ':EndHeader' + '\n')

for k in range(i*j):
    BlueKenue_file.write(str(liste_x_BK[k]) + ' ' + str(liste_y_BK[k]) + ' ' + str(liste_z_BK[k]) + '\n')

for k in range((i-1)*(j-1)*2):
    BlueKenue_file.write(str(liste_node1[k]) + ' ' + str(liste_node2[k]) + ' ' + str(liste_node3[k]) + '\n')

BlueKenue_file.close()


