Issue with VSPAERO via CLI: "Could not load Degen Geometry" error

46 views
Skip to first unread message

Steven Zhu

unread,
Feb 18, 2026, 6:32:05 PM (4 days ago) Feb 18
to OpenVSP
Hi everyone,

I am attempting to run VSP 3.47 via the command line on Windows, using the files from the Adjoint Optimization page (https://openvsp.org/wiki/doku.php?id=vspaero_opt).

I placed the example files into the OpenVSP directory and ran the command: vspaero_opt -omp 4 Wing

The terminal shows that the VSPAERO file was read successfully, but then fails with the following error:

Could not load Wing VSP Degen Geometry, CART3D Tri, or VSPGEOM Tri file...

I also tried vspaero -geom Wing, but encountered the same error.

It seems I am missing the step to generate the necessary geometry files via CLI before running the solver. Could someone please advise on the correct command to generate these files from a .vsp3 model using the terminal?

Thanks in advance for your help!

Rob McDonald

unread,
Feb 19, 2026, 2:30:21 PM (4 days ago) Feb 19
to OpenVSP
Are you sure you're running the version you think you are?

If you have an older version in your path, you might be running an unexpected version.

Rob

Steven Zhu

unread,
Feb 19, 2026, 4:30:43 PM (3 days ago) Feb 19
to OpenVSP

You were correct, I was running vsp3.41. The adjoint solver is now working as expected.

I have a follow-up question regarding the gradient file header. Could you confirm my understanding of the following:

  1. Nodes: Do these represent the coordinates of the physical surface mesh vertices?

  2. pFxpX: Does this represent the sensitivity of the total force in X to the X-displacement of that specific node ?

  3. Subscripts _i and _o: Do these denote Inviscid/Induced and Other/Viscous contributions respectively? 

Thanks for the help.

Steven


Rob McDonald

unread,
Feb 19, 2026, 4:44:06 PM (3 days ago) Feb 19
to OpenVSP
I believe your interpretation of the gradient file is correct.

The _i is the inviscid component.  _o is the parasite component.  These should sum to the total (with no subscript).

Internally, vspaero_opt actually includes a full copy of OpenVSP.  It uses OpenVSP to evaluate the geometry -- it finite differences the geometry to get partial derivatives of the grid points with respect to the design variables.  pXpVi pYpVi pZpVi for each variable Vi (where i is an index, not inviscid/viscous).

It multiplies these together to get pFxpVi etc. which is used to drive the optimizer.

Rob

Steven Zhu

unread,
Feb 19, 2026, 9:15:25 PM (3 days ago) Feb 19
to OpenVSP

Thank you for the explanation!

Regarding the gradients, are the partial derivatives of the objectives with respect to the design variables recorded in a file? Having access to these would be much more convenient than processing the derivatives of individual nodes.

Also, could you clarify what "CS", "CML", "CMN",  and "CMM" stands for in the setting within the VSPAero file? The context is:

Optimization_CL_Weight   = 1.
Optimization_CD_Weight   = 1.
Optimization_CS_Weight   = 0.
Optimization_CL_Required = 0.55
Optimization_CD_Required = 0.
Optimization_CS_Required = 0.
Optimization_CML_Weight   = 0.
Optimization_CMM_Weight   = 1.
Optimization_CMN_Weight   = 0.
Optimization_CML_Required = 0.
Optimization_CMM_Required = 0.
Optimization_CMN_Required = 0.

Thank you. 

Rob McDonald

unread,
Feb 19, 2026, 9:34:29 PM (3 days ago) Feb 19
to OpenVSP
On Thursday, February 19, 2026 at 6:15:25 PM UTC-8 zyx20...@gmail.com wrote:

Thank you for the explanation!

Regarding the gradients, are the partial derivatives of the objectives with respect to the design variables recorded in a file? Having access to these would be much more convenient than processing the derivatives of individual nodes.

I do not believe it is.

I think the *.gradient file was written out as a debugging step as this was developed.  I'm somewhat surprised it has stuck around.

By the time the derivatives were chain ruled through to OpenVSP design variables, it didn't make sense to dump everything out to file anymore.

What is your actual goal?

I suspect that your goals will best be met by reading and understanding the vspaero_opt code -- how it interacts with vspaero and OpenVSP.

If you intend to integrate this stuff into a larger problem -- say aero/structure coupling, or a larger MDO problem, or even just integrate with a different optimizer -- you are going to want to do this in memory using the VSPAERO and OpenVSP API's rather than going through files.
 

Also, could you clarify what "CS", "CML", "CMN",  and "CMM" stands for in the setting within the VSPAero file? The context is:

Optimization_CL_Weight   = 1.
Optimization_CD_Weight   = 1.
Optimization_CS_Weight   = 0.
Optimization_CL_Required = 0.55
Optimization_CD_Required = 0.
Optimization_CS_Required = 0.
Optimization_CML_Weight   = 0.
Optimization_CMM_Weight   = 1.
Optimization_CMN_Weight   = 0.
Optimization_CML_Required = 0.
Optimization_CMM_Required = 0.
Optimization_CMN_Required = 0.


CFX,Y,Z are the forces in body axes
CMX,Y,Z are the moments in body axes

CL,C,S are the forces in wind axes
CS is the Side force coefficient

CML,M,N are the moments in wind axes.

These are the same magnitude as the moments in body axes, but the signs are flipped to match convention.

CML -- rolling moment
CMM -- pitching moment
CMN -- yawing moment

Rob
 
Reply all
Reply to author
Forward
0 new messages