token = 1
#!/usr/bin/env python

###
### This file is generated automatically by SALOME v9.14.0 with dump python functionality
###

import sys
import salome

salome.salome_init()
import salome_notebook
notebook = salome_notebook.NoteBook()
sys.path.insert(0, r'D:/CRM/salomefiles')
import os
import numpy as np

# Load the Excel file saved as CSV (NumPy can handle CSV)
file_path = "D:/CRM/salomefiles/Mesh_Control.csv"

# Load data with NumPy (skip header row for numeric data)
data = np.genfromtxt(file_path, delimiter=",", skip_header=1)

# Load headers separately
with open(file_path, "r") as f:
    headers = f.readline().strip().split(",")[1:]  # skip the first column (index)

# Set the token (1-10)
#token = 1

# Find the row corresponding to the token
row = data[data[:, 0] == token]
if row.size == 0:
    raise ValueError(f"Token {token} not found")

values = row[0, 1:]

# Load values into variables dynamically (convert to Python float)
for var_name, var_value in zip(headers, values):
    globals()[var_name] = float(var_value)

# Example: now you can directly use variables like TAIL, TAIL_TE, etc.
#print(TAIL, TAIL_TE, TAIL_LE, WING, WING_LE)


###
### GEOM component
###

import GEOM
from salome.geom import geomBuilder
import math
import SALOMEDS


geompy = geomBuilder.New()

O = geompy.MakeVertex(0, 0, 0)
OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
FT_step_1 = geompy.ImportSTEP("D:/CRM/salomefiles/Original_Fuselage_Tail.step", False, True)
uCRM_Wing_step_1 = geompy.ImportSTEP("D:/CRM/salomefiles/uCRM_Wing.step", False, True)
Fuse_1 = geompy.MakeFuseList([FT_step_1, uCRM_Wing_step_1], True, True, theFuzzyParam=0.001)
ProcessShape_1 = geompy.ProcessShape(Fuse_1, ["DropSmallEdges"], ["DropSmallEdges.Tolerance3d"], ["0.05"])
Sphere_1 = geompy.MakeSphereR(950)
Plane_1 = geompy.MakePlaneLCS(None, 2000, 3)
Partition_1 = geompy.MakePartition([Sphere_1], [Plane_1], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
[geomObj_1,Solid_2] = geompy.ExtractShapes(Partition_1, geompy.ShapeType["SOLID"], True)
FLUID = geompy.MakeCutList(Solid_2, [ProcessShape_1], True, theFuzzyParam=0.0001)
SYMM = geompy.CreateGroup(FLUID, geompy.ShapeType["FACE"])
geompy.UnionIDs(SYMM, [11])
FARFIELD = geompy.CreateGroup(FLUID, geompy.ShapeType["FACE"])
geompy.UnionIDs(FARFIELD, [3])
TAIL = geompy.CreateGroup(FLUID, geompy.ShapeType["FACE"])
geompy.UnionIDs(TAIL, [213, 172, 221, 218, 188, 224, 181])
WING = geompy.CreateGroup(FLUID, geompy.ShapeType["FACE"])
geompy.UnionIDs(WING, [205, 233, 210, 238, 198, 226, 249, 241, 246])
FUSELAGE = geompy.CreateGroup(FLUID, geompy.ShapeType["FACE"])
geompy.UnionIDs(FUSELAGE, [148, 109, 92, 83, 99, 151, 193, 62, 135, 114, 158, 170, 89, 76, 153, 71, 140, 56, 126, 145, 104])
TAIL_TIP_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(TAIL_TIP_E, [220, 217])
TAIL_BASE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(TAIL_BASE_E, [120, 123, 125])
TAIL_TE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(TAIL_TE_E, [192, 177, 190, 185])
TAIL_LE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(TAIL_LE_E, [178])
WING_TIP_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(WING_TIP_E, [248])
WING_LE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(WING_LE_E, [207, 235])
WING_TE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(WING_TE_E, [228, 204, 200, 232])
WING_BASE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(WING_BASE_E, [162, 166, 195, 164, 197])
FUSELAGE_BASE_E = geompy.CreateGroup(FLUID, geompy.ShapeType["EDGE"])
geompy.UnionIDs(FUSELAGE_BASE_E, [41, 47, 23, 14, 19, 33, 43, 21, 51, 55, 35, 53, 27, 45, 49, 25, 17, 29, 37, 31, 39])
[SYMM, FARFIELD, TAIL, WING, FUSELAGE, TAIL_TIP_E, TAIL_BASE_E, TAIL_TE_E, TAIL_LE_E, WING_TIP_E, WING_LE_E, WING_TE_E, WING_BASE_E, FUSELAGE_BASE_E] = geompy.GetExistingSubObjects(FLUID, False)
geompy.addToStudy( O, 'O' )
geompy.addToStudy( OX, 'OX' )
geompy.addToStudy( OY, 'OY' )
geompy.addToStudy( OZ, 'OZ' )
geompy.addToStudy( FT_step_1, 'FT.step_1' )
geompy.addToStudy( uCRM_Wing_step_1, 'uCRM_Wing.step_1' )
geompy.addToStudy( Fuse_1, 'Fuse_1' )
geompy.addToStudy( ProcessShape_1, 'ProcessShape_1' )
geompy.addToStudy( Sphere_1, 'Sphere_1' )
geompy.addToStudy( Plane_1, 'Plane_1' )
geompy.addToStudy( Partition_1, 'Partition_1' )
geompy.addToStudyInFather( Partition_1, Solid_2, 'Solid_2' )
geompy.addToStudy( FLUID, 'FLUID' )
geompy.addToStudyInFather( FLUID, SYMM, 'SYMM' )
geompy.addToStudyInFather( FLUID, FARFIELD, 'FARFIELD' )
geompy.addToStudyInFather( FLUID, TAIL, 'TAIL' )
geompy.addToStudyInFather( FLUID, WING, 'WING' )
geompy.addToStudyInFather( FLUID, FUSELAGE, 'FUSELAGE' )
geompy.addToStudyInFather( FLUID, TAIL_TIP_E, 'TAIL_TIP_E' )
geompy.addToStudyInFather( FLUID, TAIL_BASE_E, 'TAIL_BASE_E' )
geompy.addToStudyInFather( FLUID, TAIL_TE_E, 'TAIL_TE_E' )
geompy.addToStudyInFather( FLUID, TAIL_LE_E, 'TAIL_LE_E' )
geompy.addToStudyInFather( FLUID, WING_TIP_E, 'WING_TIP_E' )
geompy.addToStudyInFather( FLUID, WING_LE_E, 'WING_LE_E' )
geompy.addToStudyInFather( FLUID, WING_TE_E, 'WING_TE_E' )
geompy.addToStudyInFather( FLUID, WING_BASE_E, 'WING_BASE_E' )
geompy.addToStudyInFather( FLUID, FUSELAGE_BASE_E, 'FUSELAGE_BASE_E' )

output_prefix = "Mesh_"
#output_suffix = ".py"
out_name = f"{output_prefix}{token}"

###
### SMESH component
###

import  SMESH, SALOMEDS
from salome.smesh import smeshBuilder

smesh = smeshBuilder.New()
#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
                                 # multiples meshes built in parallel, complex and numerous mesh edition (performance)

Mesh_1 = smesh.Mesh(FLUID,'Mesh_1')

NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)

SYMM_1 = Mesh_1.GroupOnGeom(SYMM,'SYMM',SMESH.FACE)
FARFIELD_1 = Mesh_1.GroupOnGeom(FARFIELD,'FARFIELD',SMESH.FACE)
TAIL_1 = Mesh_1.GroupOnGeom(TAIL,'TAIL',SMESH.FACE)
WING_1 = Mesh_1.GroupOnGeom(WING,'WING',SMESH.FACE)
FUSELAGE_1 = Mesh_1.GroupOnGeom(FUSELAGE,'FUSELAGE',SMESH.FACE)
WING_TIP_E_1 = Mesh_1.GroupOnGeom(WING_TIP_E,'WING_TIP_E',SMESH.EDGE)
WING_LE_E_1 = Mesh_1.GroupOnGeom(WING_LE_E,'WING_LE_E',SMESH.EDGE)
WING_TE_E_1 = Mesh_1.GroupOnGeom(WING_TE_E,'WING_TE_E',SMESH.EDGE)
WING_BASE_E_1 = Mesh_1.GroupOnGeom(WING_BASE_E,'WING_BASE_E',SMESH.EDGE)
FUSELAGE_BASE_E_1 = Mesh_1.GroupOnGeom(FUSELAGE_BASE_E,'FUSELAGE_BASE_E',SMESH.EDGE)
TAIL_TIP_E_1 = Mesh_1.GroupOnGeom(TAIL_TIP_E,'TAIL_TIP_E',SMESH.EDGE)
TAIL_TE_E_1 = Mesh_1.GroupOnGeom(TAIL_TE_E,'TAIL_TE_E',SMESH.EDGE)
TAIL_BASE_E_1 = Mesh_1.GroupOnGeom(TAIL_BASE_E,'TAIL_BASE_E',SMESH.EDGE)
TAIL_LE_E_1 = Mesh_1.GroupOnGeom(TAIL_LE_E,'TAIL_LE_E',SMESH.EDGE)
[ SYMM_1, FARFIELD_1, TAIL_1, WING_1, FUSELAGE_1, WING_TIP_E_1, WING_LE_E_1, WING_TE_E_1, WING_BASE_E_1, FUSELAGE_BASE_E_1, TAIL_TIP_E_1, TAIL_TE_E_1, TAIL_BASE_E_1, TAIL_LE_E_1 ] = Mesh_1.GetGroups()


NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
NETGEN_3D_Parameters_1.SetMaxSize( V_Mesh_Max )
NETGEN_3D_Parameters_1.SetMinSize( V_Mesh_Min )
NETGEN_3D_Parameters_1.SetSecondOrder( 0 )
NETGEN_3D_Parameters_1.SetOptimize( 1 )
NETGEN_3D_Parameters_1.SetFineness( 5 )
NETGEN_3D_Parameters_1.SetGrowthRate( V_Volume_Growth )
NETGEN_3D_Parameters_1.SetNbSegPerEdge( V_Per_Edge )
NETGEN_3D_Parameters_1.SetNbSegPerRadius( V_Per_Radius )
NETGEN_3D_Parameters_1.SetChordalError( -1 )
NETGEN_3D_Parameters_1.SetChordalErrorEnabled( 0 )
NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 1 )
NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
NETGEN_3D_Parameters_1.SetCheckChartBoundary( 88 )


NETGEN_3D_Parameters_1.SetLocalSizeOnShape(TAIL, V_TAIL)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(WING, V_WING)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(FUSELAGE, V_FUSELAGE)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(FUSELAGE_BASE_E, V_FUSELAGE_BASE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(TAIL_TIP_E, V_TAIL_TIP_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(TAIL_LE_E, V_TAIL_LE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(TAIL_TE_E, V_TAIL_TE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(WING_TIP_E, V_WING_TIP_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(WING_TE_E, V_WING_TE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(WING_LE_E, V_WING_LE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(WING_BASE_E, V_WING_BASE_E)
NETGEN_3D_Parameters_1.SetLocalSizeOnShape(TAIL_BASE_E, V_TAIL_BASE_E)


[ SYMM_1, FARFIELD_1, TAIL_1, WING_1, FUSELAGE_1, WING_TIP_E_1, WING_LE_E_1, WING_TE_E_1, WING_BASE_E_1, FUSELAGE_BASE_E_1, TAIL_TIP_E_1, TAIL_TE_E_1, TAIL_BASE_E_1, TAIL_LE_E_1 ] = Mesh_1.GetGroups()



isDone = Mesh_1.Compute()
Mesh_1.CheckCompute()


[ SYMM_1, FARFIELD_1, TAIL_1, WING_1, FUSELAGE_1, WING_TIP_E_1, WING_LE_E_1, WING_TE_E_1, WING_BASE_E_1, FUSELAGE_BASE_E_1, TAIL_TIP_E_1, TAIL_TE_E_1, TAIL_BASE_E_1, TAIL_LE_E_1 ] = Mesh_1.GetGroups()


'''
#SET PRISM SETTINGS
Growth_Ratio=V_Growth_Ratio
First_Cell_Height=5e-06
Number_Of_Layers=int(V_Number_Of_Layers)

print("PRISM STARTING")

if Growth_Ratio==1:
    Thickness=First_Cell_Height*Number_Of_Layers
elif Growth_Ratio>1:
    Thickness=(First_Cell_Height/(1-Growth_Ratio))*(1-Growth_Ratio**Number_Of_Layers)
else:
    print("Growth ratio cannot be less than 1")

print(First_Cell_Height)
print(Growth_Ratio)
print(Number_Of_Layers)
print(Thickness)


Viscous_Layers_1 = NETGEN_1D_2D_3D.ViscousLayers(Thickness,Number_Of_Layers,Growth_Ratio,[ 11, 3],1,smeshBuilder.SURF_OFFSET_SMOOTH)

isDone = Mesh_1.Compute()
Mesh_1.CheckCompute()
[ SYMM_1, FARFIELD_1, TAIL_1, WING_1, FUSELAGE_1, WING_TIP_E_1, WING_LE_E_1, WING_TE_E_1, WING_BASE_E_1, FUSELAGE_BASE_E_1, TAIL_TIP_E_1, TAIL_TE_E_1, TAIL_BASE_E_1, TAIL_LE_E_1 ] = Mesh_1.GetGroups()
'''

## Set names of Mesh objects
smesh.SetName(WING_LE_E_1, 'WING_LE_E')
smesh.SetName(WING_BASE_E_1, 'WING_BASE_E')
smesh.SetName(WING_TE_E_1, 'WING_TE_E')
smesh.SetName(FUSELAGE_BASE_E_1, 'FUSELAGE_BASE_E')
smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
smesh.SetName(WING_1, 'WING')
smesh.SetName(TAIL_LE_E_1, 'TAIL_LE_E')
smesh.SetName(FUSELAGE_1, 'FUSELAGE')
smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
smesh.SetName(TAIL_TE_E_1, 'TAIL_TE_E')
smesh.SetName(SYMM_1, 'SYMM')
smesh.SetName(TAIL_TIP_E_1, 'TAIL_TIP_E')
smesh.SetName(FARFIELD_1, 'FARFIELD')
smesh.SetName(WING_TIP_E_1, 'WING_TIP_E')
smesh.SetName(TAIL_BASE_E_1, 'TAIL_BASE_E')
smesh.SetName(TAIL_1, 'TAIL')
#smesh.SetName(Viscous_Layers_1, 'Viscous Layers_1')
smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')





#GROUPING SURFACES
BODY = Mesh_1.GetMesh().UnionListOfGroups([ FUSELAGE_1, TAIL_1, WING_1], 'BODY' )
smesh.SetName(BODY, 'BODY')


print("REMOVING EXTRA SURFACE AND EDGES")


#REMOVE EDGE
remove_edge=["WING_TIP_E", "WING_LE_E", "WING_TE_E", "WING_BASE_E", "FUSELAGE_BASE_E", "TAIL_TIP_E", "TAIL_TE_E", "TAIL_BASE_E", "TAIL_LE_E"]

mesh_obj=salome.myStudy.FindObjectByPath("/Mesh/Mesh_1/")
group_folder=salome.myStudy.FindObjectByPath("/Mesh/Mesh_1/Groups of Edges/")

for ele in remove_edge:
    print(ele)

    if mesh_obj and group_folder:
        mesh=salome.IDToObject(mesh_obj.GetID())
        it=salome.myStudy.NewChildIterator(group_folder)
        while it.More():
            child=it.Value()
            name=child.GetName()
            if name==ele:
                print(f"Found Group: {name}")
                smesh_group=salome.IDToObject(child.GetID())
                Mesh_1.RemoveGroup(smesh_group)
                print("Removed from Mesh")
                salome.myStudy.NewBuilder().RemoveObjectWithChildren(child)
                print("Removed from tree")
                break
            it.Next()
    else:
        print("Not Found")

salome.sg.updateObjBrowser()


#REMOVE SURFACE
remove_surf=["FUSELAGE", "TAIL", "WING"]

mesh_obj=salome.myStudy.FindObjectByPath("/Mesh/Mesh_1/")
group_folder=salome.myStudy.FindObjectByPath("/Mesh/Mesh_1/Groups of Faces/")

for ele in remove_surf:
    print(ele)

    if mesh_obj and group_folder:
        mesh=salome.IDToObject(mesh_obj.GetID())
        it=salome.myStudy.NewChildIterator(group_folder)
        while it.More():
            child=it.Value()
            name=child.GetName()
            if name==ele:
                print(f"Found Group: {name}")
                smesh_group=salome.IDToObject(child.GetID())
                Mesh_1.RemoveGroup(smesh_group)
                print("Removed from Mesh")
                salome.myStudy.NewBuilder().RemoveObjectWithChildren(child)
                print("Removed from tree")
                break
            it.Next()
    else:
        print("Not Found")

salome.sg.updateObjBrowser()

[ SYMM_1, FARFIELD_1, BODY] = Mesh_1.GetGroups()


#new_path=f"D:/CRM/salomefiles/{token}"
new_path=f"D:/CRM/salomefiles/"

import os
os.chdir(new_path)
exec(compile(open('D:/CRM/salomefiles/cfdmsh.py', 'rb').read(), 'D:/CRM/salomefiles/cfdmsh.py', 'exec'))
ExportSU2File(Mesh_1,out_name)


if salome.sg.hasDesktop():
  salome.sg.updateObjBrowser()
