Skip to content

Commit c59046e

Browse files
cleaned up resolutions, skip ci
1 parent dad8c94 commit c59046e

4 files changed

Lines changed: 122 additions & 98 deletions

File tree

examples/tutorial3.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ opts = FEMOptions(
7777
# Run the FEM model
7878
@time workspace, line_params = compute!(problem, formulation, opts)
7979

80-
println("R = $(round(real(line_params.Z[1,1,1])*1000, sigdigits=4)) Ω/km")
80+
println("\nR = $(round(real(line_params.Z[1,1,1])*1000, sigdigits=4)) Ω/km")
8181
println("L = $(round(imag(line_params.Z[1,1,1])/(2π*f)*1e6, sigdigits=4)) mH/km")
82-
println("C = $(round(imag(line_params.Y[1,1,1])/(2π*f)*1e9, sigdigits=4)) nF/km")
82+
println("C = $(round(imag(line_params.Y[1,1,1])/(2π*f)*1e9, sigdigits=4)) μF/km")
8383

84-
println("FEM model run completed.")
84+
# @time _, line_params = compute!(problem, formulation, opts, workspace=workspace)

src/FEMTools.jl

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ using GetDP: Problem
4646
# Export public API
4747
export LineParametersProblem
4848
export FEMFormulation, FEMOptions
49-
export compute!
49+
export compute!, run_fem_solver
5050
export 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

Comments
 (0)