feat: Add detailed Nastran memory error detection in run-baseline
- Parse Nastran log file to detect memory allocation failures - Extract requested vs available memory from log - Provide actionable error message with specific values - Include log files in result_files response
This commit is contained in:
@@ -4706,6 +4706,33 @@ async def run_baseline_simulation(study_id: str):
|
||||
op2_files = list(baseline_dir.glob("*.op2"))
|
||||
f06_files = list(baseline_dir.glob("*.f06"))
|
||||
bdf_files = list(baseline_dir.glob("*.bdf")) + list(baseline_dir.glob("*.dat"))
|
||||
log_files = list(baseline_dir.glob("*.log"))
|
||||
|
||||
# Parse Nastran log for specific error messages
|
||||
error_details = result.get("errors", [])
|
||||
memory_error = False
|
||||
if not result.get("success") and log_files:
|
||||
try:
|
||||
with open(log_files[0], "r") as f:
|
||||
log_content = f.read()
|
||||
if "Unable to allocate requested memory" in log_content:
|
||||
memory_error = True
|
||||
# Extract memory request info
|
||||
import re
|
||||
|
||||
mem_match = re.search(r"Requested size = (\d+) Gbytes", log_content)
|
||||
avail_match = re.search(
|
||||
r"Physical memory available:\s+(\d+) MB", log_content
|
||||
)
|
||||
if mem_match and avail_match:
|
||||
requested = int(mem_match.group(1))
|
||||
available = int(avail_match.group(1)) / 1024 # Convert to GB
|
||||
error_details.append(
|
||||
f"Nastran memory allocation failed: Requested {requested}GB but only {available:.1f}GB available. "
|
||||
"Try closing other applications or reduce memory in nastran.rcf"
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {
|
||||
"success": result.get("success", False),
|
||||
@@ -4717,11 +4744,16 @@ async def run_baseline_simulation(study_id: str):
|
||||
"op2": [f.name for f in op2_files],
|
||||
"f06": [f.name for f in f06_files],
|
||||
"bdf": [f.name for f in bdf_files],
|
||||
"log": [f.name for f in log_files],
|
||||
},
|
||||
"errors": result.get("errors", []),
|
||||
"errors": error_details,
|
||||
"message": "Baseline simulation complete"
|
||||
if result.get("success")
|
||||
else "Simulation failed",
|
||||
else (
|
||||
"Nastran out of memory - close other applications and retry"
|
||||
if memory_error
|
||||
else "Simulation failed"
|
||||
),
|
||||
}
|
||||
|
||||
except ImportError as e:
|
||||
|
||||
Reference in New Issue
Block a user