Release notes
0.2.0 (unreleased)
Output-sensitivity weights on the
local_weightedPOD snapshot distance:utils/dv_sensitivity.pyreads the total derivatives of the objective and constraints from the optimizer (attach_total_derivative_probe) andReducedOrderModel(distance_weighting=...)weights the distance with them. Unweighted unless a probe supplies them.Compressible RANS at p = 0 (
CompressibleRANSModel): Spalart-Allmaras (SA-neg) or laminar Navier-Stokes, Green-Gauss gradient reconstruction eliminated exactly from Newton, MUSCL inviscid flux, adiabatic no-slip walls. The turbulence closure is a plug-in (TurbulenceModel).The RANS model is built on the Euler model by composition;
DG_windtunnel_model(model_class=...)runs it through CSDL with exact adjoints, including the chain terms through the reconstructed gradient, the cell centres and the wall distance.One time-integration module for steady pseudo-transient continuation, unsteady BDF1/BDF2 and dual time (
core/time_integration.py); opt-in for the Euler model, PTC by default for RANS.Characteristic far field (
define_farfield_bc) and its unsteady transverse refinement (TransverseFarfield, 2D). It is the only far field ofDG_windtunnel_modeland the default ofexamples/flow_analysis.py. The inflow/outflow split is removed, and with it the 1 degree limit on changes of the angle of attack. Breaking changes: the boundary dictionary is the flat free-stream state{'rho', 'p', 'M', 'alpha'}(the'inlet'/'outlet'form raises);DG_windtunnel_model(farfield=...),define_subsonic_inflow_bc,define_subsonic_outflow_bc,subsonic_inflow_state,subsonic_outflow_state,INLET_TAG/OUTLET_TAGandalpha_taggingare gone;define_inlet_outlet_conditions,boundary_conditions['inlet'|'outlet']andcompute_initial_conditions_from_inletbecamedefine_farfield_conditions,farfield_conditions(flat) andcompute_initial_conditions_from_farfield. The far field is subsonic:M >= 1raises.Shape design variables as modular layers (
core/shape_design.py):DG_windtunnel_modeltakes anFFDShapeParameterization(FFD block + layers) instead offfd_shape,ffd_degree,ffd_block_corner_listandcp_coord_opt_idxs, and no longer depends on which variables exist;model.deform_mesh()gives the mesh motion. Layers:ControlPointMotions,SectionalVariables, andWingShape, which adds wing sweep, aspect ratio, root chord, span and taper ratio (absolute values with bounds), plus chordwise thickness and camber modes per spanwise station.examples/wing_opt.pyusesWingShape. The model’s and the warper’s shape input is renamed fromcp_motion_inputstoshape_parameters.DG_windtunnel_modelwithout a shape parameterization or mesh warper: forward analysis on the fixed mesh, withsolve_forward()outside CSDL orevaluate(alpha=...)in a graph;DG_postprocessorcomputes forces and coefficients without FFD definitions (forces_and_coefficients,evaluatewithout a mesh deformation).Moments about any number of points and directions:
DG_windtunnel_model(moments=[(name, point, direction), ...])andDG_postprocessor(moments=...)give CSDL outputsM_<name>(differentiated) andc_m_<name>, e.g. a wing’s root bending moment and pitching moment in one simulation. Breaking:aero_centerand the outputsM,c_mandc_m_alpha(withlog_cm_alpha) are removed; the old pitching moment is("pitch", aero_center, "pitch"). The FOM/ROM coefficient histories hold one \(c_m\) per moment.Partition-independent checkpoints;
examples/flow_analysis.py,examples/airfoil_analysis.pyandexamples/rans_airfoil_opt.py.Boundary tags of the mesh can define the wall and symmetry planes:
load_dolfinx_meshreads and stores the facet tags of XDMF (“Facet tags”), gmsh.msh(physical groups, now readable) and planar CGNS (Wall, Farfield) meshes, andDG_windtunnel_model(wall_tags=..., symmetry_tags=...)uses them in place ofmesh_inner_bdry_function; every other boundary is far field. The function is used if given, with a warning that lists the mesh’s tags.examples/flow_analysis.pytakes--wall-tagsand--symmetry-tags.Mesh input from structured multi-block CGNS grids one cell thick (
utils/mesh_io_utils.py:load_dolfinx_mesh,cgns_to_dolfinx_mesh), reduced to a 2D quadrilateral mesh in memory;examples/flow_analysis.py --meshaccepts them. 3D structured grids are read as hexahedra (tdim=3);examples/wing_opt.pyreadswing_vol_L3.cgnsthis way.ONERA OAT15A validation case (
examples/ONERA-OAT15A/): SA-neg RANS mesh-sensitivity study on the Rizzi grids at \(M = 0.73\), \(Re = 3\times10^6\) (preliminary results on grids 1-4).FileWritergathers piecewise-constant and continuous fields to rank 0, so VTX output shows no seams at the MPI partition boundaries; newmesh_deformationandtime_dependentkeywords. The solution and pressure files of a shape optimization are written on the deformed mesh of each evaluation.POD reduced-order model for the steady forward solves of the Euler and RANS models (
DG_windtunnel_model(reduced_order_model=ReducedOrderModel(...)),core/reduced_order_model.py,core/pod.py): LSPG on a global or locally weighted POD basis of converged solutions in a state-scaled inner product (Euclidean by default, optionally with the mass matrix), with the original POD benchmark’s convergence criterion; accepted below a residual threshold, with a fallback to the full-order solve that adds a snapshot. The host gainspositivity_step_length,steady_residual(),state_scales()and theextra_scalesplug-in.The default Euler path is unchanged (bit-identical residual, Jacobian, derivatives and Newton iterates).
0.1.0 (unreleased)
First release.
Steady compressible Euler solver with piecewise-constant (p=0) DG elements in 2D and 3D.
FFD shape parameterization with control-point and sectional design variables, and geometric constraints.
IDWarp volume mesh deformation.
Adjoint-based derivatives of lift, drag and pitching moment with respect to the shape variables and the angle of attack.
Examples: 2D airfoil (
airfoil_opt.py) and 3D wing (wing_opt.py).