Hi,
I have this code that is a combination of two codes that i found in the git hub repository. First i want to extract the centerline of a given geometry, then i want to buid a 0d model. This is code:
import os
from pathlib import Path
import sv
import sys
import vtk
patient_id = 'AORTA-013'
## Set some directory paths.
script_path = Path(os.path.realpath(__file__)).parent
parent_path = Path(os.path.realpath(__file__)).parent.parent
data_path = "D:/Progetto NIH/Simvascular_Simulation/AORTA-013/mesh/lumen_mesh/mesh-surfaces"
mesh_complete_path = "D:/Progetto NIH/Simvascular_Simulation/AORTA-013/mesh/lumen_mesh/mesh-complete.exterior.vtp"
## Centerline extration
# Create a modeler.
kernel = sv.modeling.Kernel.POLYDATA
modeler = sv.modeling.Modeler(kernel)
model = modeler.read(mesh_complete_path)
model_polydata = model.get_polydata()
face_id = model_polydata.GetPointData().GetArray('ModelFaceID')
inlet_ids = [1]
outlet_ids = [4,3,2,5]
use_face_ids = False
centerlines = model.compute_centerlines(inlet_ids, outlet_ids, use_face_ids)
print('centerline extraction')
input_dir = "D:/Progetto NIH/Simvascular_Simulation/AORTA-013/0D"
file_name = os.path.join(input_dir, 'centerlines.vtp')
writer = vtk.vtkXMLPolyDataWriter()
writer.SetFileName(file_name)
writer.SetInputData(centerlines)
writer.Update()
writer.Write()
## Rom simulation
rom_simulation = sv.simulation.ROM()
## Create ROM simulation parameters.
params = sv.simulation.ROMParameters()
## Mesh parameters.
mesh_params = params.MeshParameters()
## Model parameters.
model_params = params.ModelParameters()
model_params.name = "demo"
model_params.inlet_face_names = ['inlet_aorta' ]
model_params.outlet_face_names = ['aorta_bct', 'aorta_car', 'aorta_suc', 'aorta_outlet']
model_params.centerlines_file_name = input_dir + 'centerlines.vtp'
## Fluid properties.
fluid_props = params.FluidProperties()
## Set wall properties.
print("Set wall properties ...")
material = params.WallProperties.OlufsenMaterial()
print("Material model: {0:s}".format(str(material)))
## Set boundary conditions.
#
inlet_path = "D:/Progetto NIH/Inlet bc/AORTA-013"
bcs = params.BoundaryConditions()
#bcs.add_resistance(face_name='outlet', resistance=1333)
bcs.add_velocities(face_name='inlet', file_name=inlet_path +'flow_inlet_0.flow')
bcs.add_rcr(face_name='aorta_bct', Rp=90.0, C=0.0008, Rd=1200)
bcs.add_rcr(face_name='aorta_car', Rp=100.0, C=0.0004, Rd=1100)
bcs.add_rcr(face_name='aorta_suc', Rp=90.0, C=0.0008, Rd=1200)
bcs.add_rcr(face_name='aorta_outlet', Rp=100.0, C=0.0004, Rd=1100)
## Set solution parameters.
#
solution_params = params.Solution()
solution_params.time_step = 0.001
solution_params.num_time_steps = 1000
## Write a 1D solver input file.
#
output_dir = "D:/Progetto NIH/Simvascular_Simulation/AORTA-013/0D/output"
rom_simulation.write_input_file(model_order=0, model=model_params, mesh=mesh_params, fluid=fluid_props,
material=material, boundary_conditions=bcs, solution=solution_params, directory=output_dir)
When i run it from the shell, it doesn't give an error but it doesn't write the input file either. Does somebody know how to fix this problem?
And has the run method been defined?
Thanks,
Ione
Writing input file for ROM with Python API not working
- Ione Ianniruberto
- Posts: 5
- Joined: Thu Jun 13, 2024 5:43 am
- David Parker
- Posts: 1727
- Joined: Tue Aug 23, 2005 2:43 pm
Re: Writing input file for ROM with Python API not working
Hello Ione,
The Python code you posted looks fine.
You do need to run the script within SimVascular, something like
simvascular --python -- script.py
where simvascular is the SimVascular shell script, not sure where this is on Windows.
Are you running this script in a Power Shell? Windows may not want to run an external program.
Cheers,
Dave
The Python code you posted looks fine.
You do need to run the script within SimVascular, something like
simvascular --python -- script.py
where simvascular is the SimVascular shell script, not sure where this is on Windows.
Are you running this script in a Power Shell? Windows may not want to run an external program.
Cheers,
Dave
- Ione Ianniruberto
- Posts: 5
- Joined: Thu Jun 13, 2024 5:43 am
Re: Writing input file for ROM with Python API not working
Hi,
thanks for your answer. Yes I'm runnig the script in the Windows power shell using this command:
sv.bat --python -- script.py
But I'm not sure wheter this is a problem or not since my collegues are using the same command to run different scripts for the mesh generation and everthing works fine.
Thansk,
Ione
thanks for your answer. Yes I'm runnig the script in the Windows power shell using this command:
sv.bat --python -- script.py
But I'm not sure wheter this is a problem or not since my collegues are using the same command to run different scripts for the mesh generation and everthing works fine.
Thansk,
Ione
- Ione Ianniruberto
- Posts: 5
- Joined: Thu Jun 13, 2024 5:43 am
Re: Writing input file for ROM with Python API not working
When I try to run the code inside SimVascular using the python console, Simvascular crashes and closes suddenly.
What can be the problem?
Thanks,
Ione
What can be the problem?
Thanks,
Ione
- David Parker
- Posts: 1727
- Joined: Tue Aug 23, 2005 2:43 pm
Re: Writing input file for ROM with Python API not working
Hi Ione,
Running a Python script in the SV Python panel needs to have an active project I think, not sure why it would crash though.
It is difficult to see any errors in the Python script because the SV window pops up and then disappears.
To test the script I started the SV Python interpreter and then ran the script in the interpreter using
When I ran your script in a Power Shell and discovered some problems (I'm not a Windows user so these were new to me!)
- the current working directory is set to the location of the sv.bat
- the Python __file__ variable is not defined
- Windows paths need to use raw strings: path = r'C:\Users\YourName\Documents\file.txt'
Fixing the path names and removing using __file__ I was able to create centerlines and the 1D input file.
Cheers,
Dave
Running a Python script in the SV Python panel needs to have an active project I think, not sure why it would crash though.
It is difficult to see any errors in the Python script because the SV window pops up and then disappears.
To test the script I started the SV Python interpreter and then ran the script in the interpreter using
Code: Select all
import os
from pathlib import Path
exec(Path("script.py").read_text())
- the current working directory is set to the location of the sv.bat
- the Python __file__ variable is not defined
- Windows paths need to use raw strings: path = r'C:\Users\YourName\Documents\file.txt'
Fixing the path names and removing using __file__ I was able to create centerlines and the 1D input file.
Cheers,
Dave