@@ -46,7 +46,7 @@ using GetDP: Problem
4646# Export public API
4747export LineParametersProblem
4848export FEMFormulation, FEMOptions
49- export compute!
49+ export compute!, run_fem_solver
5050export FEMElectrodynamics, FEMDarwin
5151
5252# Main types and implementations
@@ -512,7 +512,6 @@ mutable struct FEMWorkspace
512512
513513 # Set up paths
514514 workspace. paths = setup_paths (problem. system, formulation, opts)
515- cleanup_files (workspace. paths, opts)
516515
517516 return workspace
518517 end
@@ -550,8 +549,12 @@ function compute!(problem::LineParametersProblem,
550549 if isnothing (workspace) || ! isa (workspace, FEMWorkspace)
551550 workspace = FEMWorkspace (problem, formulation, opts)
552551 is_empty_workspace = true
552+ else
553+ is_empty_workspace = false
553554 end
554555
556+ cleanup_files (workspace. paths, opts)
557+
555558 # Log start
556559 @info " Starting FEM simulation for cable system: $(problem. system. system_id) "
557560
@@ -565,21 +568,22 @@ function compute!(problem::LineParametersProblem,
565568 solver_output_exists = false
566569 if opts. run_solver && ! isempty (workspace. paths[:results_dir ])
567570 # Check for presence of result files
568- result_files = readdir (workspace. paths[:results_dir ])
571+ result_files = if isdir (workspace. paths[:results_dir ])
572+ readdir (workspace. paths[:results_dir ])
573+ else
574+ String[] # Return empty vector if directory doesn't exist
575+ end
569576 solver_output_exists = ! isempty (result_files)
570577 end
571578 run_solver = opts. run_solver && (! solver_output_exists || opts. overwrite_results)
572579
573- # Determine if we need to run post-processing
574- run_postproc = opts. run_postprocessing && run_solver
575-
576580 line_params = nothing
577581
578582 try
579583 # Initialize Gmsh for meshing phase
580- if run_mesh
581- gmsh. initialize ()
584+ gmsh. initialize ()
582585
586+ if run_mesh
583587 @info " Building mesh..."
584588 make_mesh! (workspace)
585589
@@ -613,14 +617,9 @@ function compute!(problem::LineParametersProblem,
613617 @debug " Processing formulation: $(fem_formulation. resolution_name) "
614618 make_fem_problem! (fem_formulation, frequency, workspace)
615619
616- solve_cmd = " $(opts. getdp_executable) $(fem_formulation. problem. filename) -msh $(workspace. paths[:mesh_file ]) -solve $(fem_formulation. resolution_name) -v$(opts. verbosity == 0 ? 2 : 3 ) "
617-
618- @info " Solving... (Resolution = $(fem_formulation. resolution_name) )"
619- try
620- gmsh. onelab. run (" GetDP" , solve_cmd)
621- @info " Solve successful!"
622- catch e
623- println (" Solve failed: " , e)
620+ # Invoke FEM solver
621+ if ! run_fem_solver (workspace, fem_formulation)
622+ Base. error (" Solver failed for $(fem_formulation. resolution_name) " )
624623 end
625624 end
626625 # Read results and store in 3D arrays
@@ -633,30 +632,27 @@ function compute!(problem::LineParametersProblem,
633632
634633 if ! opts. cleanup_files
635634 try
636- # Create frequency-specific results directory
637- freq_dir = joinpath (workspace. paths[:case_dir ], " results_f=$(round (frequency, sigdigits= 4 )) " )
638- mkpath (freq_dir)
639-
640- # Move selected files from case_dir
641- for ext in [" .res" , " .pre" ]
642- # Move all files with extension from case_dir
643- case_files = filter (f -> endswith (f, ext),
644- readdir (workspace. paths[:case_dir ], join= true ))
645- for f in case_files
646- mv (f, joinpath (freq_dir, basename (f)), force= true )
647- end
648- end
649-
650- # Move all files from results_dir
635+ # Only attempt rename if results directory exists
651636 if isdir (workspace. paths[:results_dir ])
652- result_files = readdir (workspace. paths[:results_dir ], join= true )
653- if ! isempty (result_files)
654- mv .(result_files,
655- joinpath .(freq_dir, basename .(result_files)),
656- force= true )
637+ # Construct new directory name with frequency
638+ freq_dir = joinpath (dirname (workspace. paths[:results_dir ]),
639+ " results_f=$(round (frequency, sigdigits= 6 )) " )
640+
641+ # Rename the directory
642+ mv (workspace. paths[:results_dir ], freq_dir, force= true )
643+
644+ @info " Renamed results directory for f=$frequency Hz"
645+
646+ for ext in [" .res" , " .pre" ]
647+ # Move all files with extension from case_dir
648+ case_files = filter (f -> endswith (f, ext),
649+ readdir (workspace. paths[:case_dir ], join= true ))
650+ for f in case_files
651+ mv (f, joinpath (freq_dir, basename (f)), force= true )
652+ end
657653 end
658- end
659654
655+ end
660656 catch e
661657 @error " Failed to store results for frequency $frequency Hz" exception = e
662658 rethrow (e)
0 commit comments