Copy disabled (too large)
Download .txt
Showing preview only (14,755K chars total). Download the full file to get everything.
Repository: ImperialCollegeLondon/sharpy
Branch: main
Commit: 2c9d92b1187e
Files: 895
Total size: 13.9 MB
Directory structure:
gitextract__e84dmdr/
├── .codecov.yml
├── .coveragerc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ └── workflows/
│ ├── docker_build.yaml
│ ├── docker_build_test.yaml
│ ├── pypi_build.yaml
│ ├── readme.md
│ ├── sharpy_no_test_needed.yaml
│ └── sharpy_tests.yaml
├── .github_changelog_generator
├── .gitignore
├── .gitmodules
├── .readthedocs.yaml
├── .version.json
├── .zenodo.json
├── CHANGELOG.md
├── CMakeLists.txt
├── Dockerfile
├── LICENSE
├── README.md
├── docs/
│ ├── .nojekyll
│ ├── JOSS/
│ │ ├── codemeta.json
│ │ ├── generate.rb
│ │ ├── paper.bib
│ │ └── paper.md
│ ├── Makefile
│ ├── docignore.yml
│ ├── requirements_rtd
│ └── source/
│ ├── _static/
│ │ ├── .placeholder
│ │ └── sharpy_guide/
│ │ └── sharpy_intro.html
│ ├── conf.py
│ ├── content/
│ │ ├── capabilities.md
│ │ ├── casefiles.rst
│ │ ├── contributing.md
│ │ ├── debug.rst
│ │ ├── example_notebooks/
│ │ │ ├── UDP_control/
│ │ │ │ ├── control_design_script.m
│ │ │ │ ├── get_settings_udp.py
│ │ │ │ ├── matlab_functions/
│ │ │ │ │ ├── PID_linear_model.slx
│ │ │ │ │ ├── adjust_state_space_system.m
│ │ │ │ │ ├── get_1minuscosine_gust_input.m
│ │ │ │ │ ├── read_SHARPy_state_space_system.m
│ │ │ │ │ └── set_input_parameters.m
│ │ │ │ ├── parameter_UDP_control_pazy_udp_closed_loop_gust_response.json
│ │ │ │ ├── pazy_PID_controller_UDP.py
│ │ │ │ ├── pazy_network_info.yml
│ │ │ │ ├── pid_controller.py
│ │ │ │ └── tutorial_udp_control.ipynb
│ │ │ ├── cantilever/
│ │ │ │ ├── model_static_cantilever.py
│ │ │ │ └── static_cantilever.ipynb
│ │ │ ├── cantilever_wing.ipynb
│ │ │ ├── linear_goland_flutter.ipynb
│ │ │ ├── linear_horten.ipynb
│ │ │ ├── nonlinear_t-tail_HALE.ipynb
│ │ │ ├── source/
│ │ │ │ └── type04_db_nrel5mw_oc3_v06.xlsx
│ │ │ └── wind_turbine.ipynb
│ │ ├── examples.rst
│ │ ├── faqs.md
│ │ ├── installation.md
│ │ ├── postproc.rst
│ │ ├── publications.md
│ │ ├── solvers.rst
│ │ └── test_cases.rst
│ ├── includes/
│ │ ├── aero/
│ │ │ ├── index.rst
│ │ │ ├── models/
│ │ │ │ ├── aerogrid/
│ │ │ │ │ ├── AeroTimeStepInfo.rst
│ │ │ │ │ ├── Aerogrid.rst
│ │ │ │ │ ├── generate_strip.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── airfoilpolars/
│ │ │ │ ├── Polar.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── mapping/
│ │ │ ├── aero2struct_force_mapping.rst
│ │ │ ├── index.rst
│ │ │ └── total_forces_moments.rst
│ │ ├── cases/
│ │ │ ├── coupled/
│ │ │ │ ├── X-HALE/
│ │ │ │ │ ├── generate_xhale/
│ │ │ │ │ │ ├── generate_naca_camber.rst
│ │ │ │ │ │ ├── generate_solver_file.rst
│ │ │ │ │ │ ├── index.rst
│ │ │ │ │ │ └── read_beam_data.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ ├── hangar/
│ │ │ │ ├── horten_wing/
│ │ │ │ │ ├── HortenWing.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── richards_wing/
│ │ │ │ │ ├── HortenWing.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── swept_flying_wing/
│ │ │ │ ├── SweptWing.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── templates/
│ │ │ ├── Ttail/
│ │ │ │ ├── Ttail_3beams.rst
│ │ │ │ ├── Ttail_canonical.rst
│ │ │ │ └── index.rst
│ │ │ ├── flying_wings/
│ │ │ │ ├── FlyingWing.rst
│ │ │ │ ├── Goland.rst
│ │ │ │ ├── Pazy.rst
│ │ │ │ ├── QuasiInfinite.rst
│ │ │ │ ├── Smith.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── template_wt/
│ │ │ ├── create_blade_coordinates.rst
│ │ │ ├── create_node_radial_pos_from_elem_centres.rst
│ │ │ ├── generate_from_excel_type03.rst
│ │ │ ├── index.rst
│ │ │ ├── rotor_from_excel_type03.rst
│ │ │ └── spar_from_excel_type04.rst
│ │ ├── controllers/
│ │ │ ├── controlsurfacepidcontroller/
│ │ │ │ ├── ControlSurfacePidController.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── takeofftrajectorycontroller/
│ │ │ ├── TakeOffTrajectoryController.rst
│ │ │ └── index.rst
│ │ ├── generators/
│ │ │ ├── bumpvelocityfield/
│ │ │ │ ├── BumpVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── dynamiccontrolsurface/
│ │ │ │ ├── DynamicControlSurface.rst
│ │ │ │ └── index.rst
│ │ │ ├── floatingforces/
│ │ │ │ ├── FloatingForces.rst
│ │ │ │ ├── change_of_to_sharpy.rst
│ │ │ │ ├── compute_equiv_hd_added_mass.rst
│ │ │ │ ├── compute_jacobian.rst
│ │ │ │ ├── compute_xf_zf.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── jonswap_spectrum.rst
│ │ │ │ ├── matrix_from_rf.rst
│ │ │ │ ├── noise_freq_1s.rst
│ │ │ │ ├── quasisteady_mooring.rst
│ │ │ │ ├── rename_terms.rst
│ │ │ │ ├── response_freq_dep_matrix.rst
│ │ │ │ ├── rfval.rst
│ │ │ │ ├── time_wave_forces.rst
│ │ │ │ └── wave_radiation_damping.rst
│ │ │ ├── gridbox/
│ │ │ │ ├── GridBox.rst
│ │ │ │ └── index.rst
│ │ │ ├── gustvelocityfield/
│ │ │ │ ├── DARPA.rst
│ │ │ │ ├── GustVelocityField.rst
│ │ │ │ ├── continuous_sin.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── lateral_one_minus_cos.rst
│ │ │ │ ├── one_minus_cos.rst
│ │ │ │ ├── span_sine.rst
│ │ │ │ ├── time_varying.rst
│ │ │ │ └── time_varying_global.rst
│ │ │ ├── helicoidalwake/
│ │ │ │ ├── HelicoidalWake.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── modifystructure/
│ │ │ │ ├── ChangeLumpedMass.rst
│ │ │ │ ├── ChangedVariable.rst
│ │ │ │ ├── LumpedMassControl.rst
│ │ │ │ ├── ModifyStructure.rst
│ │ │ │ └── index.rst
│ │ │ ├── polaraeroforces/
│ │ │ │ ├── EfficiencyCorrection.rst
│ │ │ │ ├── PolarCorrection.rst
│ │ │ │ ├── get_aoacl0_from_camber.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── local_stability_axes.rst
│ │ │ │ ├── magnitude_and_direction_of_relative_velocity.rst
│ │ │ │ └── span_chord.rst
│ │ │ ├── shearvelocityfield/
│ │ │ │ ├── ShearVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── steadyvelocityfield/
│ │ │ │ ├── SteadyVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── straightwake/
│ │ │ │ ├── StraightWake.rst
│ │ │ │ └── index.rst
│ │ │ ├── trajectorygenerator/
│ │ │ │ ├── TrajectoryGenerator.rst
│ │ │ │ └── index.rst
│ │ │ ├── turbvelocityfield/
│ │ │ │ ├── TurbVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ └── turbvelocityfieldbts/
│ │ │ ├── TurbVelocityFieldBts.rst
│ │ │ └── index.rst
│ │ ├── index.rst
│ │ ├── io/
│ │ │ ├── index.rst
│ │ │ ├── inout_variables/
│ │ │ │ ├── SetOfVariables.rst
│ │ │ │ └── index.rst
│ │ │ └── network_interface/
│ │ │ ├── InNetwork.rst
│ │ │ ├── Network.rst
│ │ │ ├── NetworkLoader.rst
│ │ │ ├── OutNetwork.rst
│ │ │ └── index.rst
│ │ ├── linear/
│ │ │ ├── assembler/
│ │ │ │ ├── index.rst
│ │ │ │ ├── lincontrolsurfacedeflector/
│ │ │ │ │ ├── LinControlSurfaceDeflector.rst
│ │ │ │ │ ├── der_R_arbitrary_axis_times_v.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── linearaeroelastic/
│ │ │ │ │ ├── LinearAeroelastic.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── linearbeam/
│ │ │ │ │ ├── LinearBeam.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── lineargustassembler/
│ │ │ │ │ ├── LeadingEdge.rst
│ │ │ │ │ ├── MultiLeadingEdge.rst
│ │ │ │ │ ├── campbell.rst
│ │ │ │ │ ├── gust_from_string.rst
│ │ │ │ │ ├── index.rst
│ │ │ │ │ └── spanwise_interpolation.rst
│ │ │ │ └── linearuvlm/
│ │ │ │ ├── LinearUVLM.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── src/
│ │ │ ├── assembly/
│ │ │ │ ├── AICs.rst
│ │ │ │ ├── dfqsdgamma_vrel0.rst
│ │ │ │ ├── dfqsduinput.rst
│ │ │ │ ├── dfqsdvind_gamma.rst
│ │ │ │ ├── dfqsdvind_zeta.rst
│ │ │ │ ├── dfqsdzeta_omega.rst
│ │ │ │ ├── dfqsdzeta_vrel0.rst
│ │ │ │ ├── dfunstdgamma_dot.rst
│ │ │ │ ├── dvinddzeta.rst
│ │ │ │ ├── dvinddzeta_cpp.rst
│ │ │ │ ├── eval_panel_cpp.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── nc_domegazetadzeta.rst
│ │ │ │ ├── nc_dqcdzeta.rst
│ │ │ │ ├── nc_dqcdzeta_Sin_to_Sout.rst
│ │ │ │ ├── test_wake_prop_term.rst
│ │ │ │ ├── uc_dncdzeta.rst
│ │ │ │ ├── wake_prop.rst
│ │ │ │ └── wake_prop_from_dimensions.rst
│ │ │ ├── gridmapping/
│ │ │ │ ├── AeroGridMap.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── interp/
│ │ │ │ ├── get_Wnv_vector.rst
│ │ │ │ ├── get_Wvc_scalar.rst
│ │ │ │ ├── get_panel_wcv.rst
│ │ │ │ └── index.rst
│ │ │ ├── lib_dbiot/
│ │ │ │ ├── Dvcross_by_skew3d.rst
│ │ │ │ ├── eval_panel_comp.rst
│ │ │ │ ├── eval_panel_cpp.rst
│ │ │ │ ├── eval_panel_exp.rst
│ │ │ │ ├── eval_panel_fast.rst
│ │ │ │ ├── eval_panel_fast_coll.rst
│ │ │ │ ├── eval_seg_comp_loop.rst
│ │ │ │ ├── eval_seg_exp.rst
│ │ │ │ ├── eval_seg_exp_loop.rst
│ │ │ │ └── index.rst
│ │ │ ├── lib_ucdncdzeta/
│ │ │ │ ├── eval.rst
│ │ │ │ └── index.rst
│ │ │ ├── libfit/
│ │ │ │ ├── fitfrd.rst
│ │ │ │ ├── get_rfa_res.rst
│ │ │ │ ├── get_rfa_res_norm.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── poly_fit.rst
│ │ │ │ ├── rfa.rst
│ │ │ │ ├── rfa_fit_dev.rst
│ │ │ │ ├── rfa_mimo.rst
│ │ │ │ └── rfader.rst
│ │ │ ├── libsparse/
│ │ │ │ ├── block_dot.rst
│ │ │ │ ├── block_matrix_dot_vector.rst
│ │ │ │ ├── block_sum.rst
│ │ │ │ ├── csc_matrix.rst
│ │ │ │ ├── dense.rst
│ │ │ │ ├── dot.rst
│ │ │ │ ├── eye_as.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── solve.rst
│ │ │ │ └── zeros_as.rst
│ │ │ ├── libss/
│ │ │ │ ├── Hnorm_from_freq_resp.rst
│ │ │ │ ├── SSconv.rst
│ │ │ │ ├── SSderivative.rst
│ │ │ │ ├── SSintegr.rst
│ │ │ │ ├── StateSpace.rst
│ │ │ │ ├── addGain.rst
│ │ │ │ ├── adjust_phase.rst
│ │ │ │ ├── build_SS_poly.rst
│ │ │ │ ├── butter.rst
│ │ │ │ ├── compare_ss.rst
│ │ │ │ ├── couple.rst
│ │ │ │ ├── disc2cont.rst
│ │ │ │ ├── eigvals.rst
│ │ │ │ ├── freqresp.rst
│ │ │ │ ├── get_freq_from_eigs.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── join.rst
│ │ │ │ ├── join2.rst
│ │ │ │ ├── parallel.rst
│ │ │ │ ├── project.rst
│ │ │ │ ├── random_ss.rst
│ │ │ │ ├── retain_inout_channels.rst
│ │ │ │ ├── scale_SS.rst
│ │ │ │ ├── series.rst
│ │ │ │ ├── simulate.rst
│ │ │ │ ├── ss_block.rst
│ │ │ │ ├── ss_to_scipy.rst
│ │ │ │ └── sum_ss.rst
│ │ │ ├── lin_aeroelastic/
│ │ │ │ ├── LinAeroEla.rst
│ │ │ │ └── index.rst
│ │ │ ├── lin_utils/
│ │ │ │ ├── Info.rst
│ │ │ │ ├── comp_tot_force.rst
│ │ │ │ ├── extract_from_data.rst
│ │ │ │ ├── index.rst
│ │ │ │ └── solve_linear.rst
│ │ │ ├── lingebm/
│ │ │ │ ├── FlexDynamic.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── newmark_ss.rst
│ │ │ │ └── sort_eigvals.rst
│ │ │ ├── linuvlm/
│ │ │ │ ├── Dynamic.rst
│ │ │ │ ├── DynamicBlock.rst
│ │ │ │ ├── Frequency.rst
│ │ │ │ ├── Static.rst
│ │ │ │ ├── get_Cw_cpx.rst
│ │ │ │ └── index.rst
│ │ │ ├── multisurfaces/
│ │ │ │ ├── MultiAeroGridSurfaces.rst
│ │ │ │ └── index.rst
│ │ │ └── surface/
│ │ │ ├── AeroGridGeo.rst
│ │ │ ├── AeroGridSurface.rst
│ │ │ ├── get_aic3_cpp.rst
│ │ │ └── index.rst
│ │ ├── postprocs/
│ │ │ ├── AeroForcesCalculator.rst
│ │ │ ├── AerogridPlot.rst
│ │ │ ├── AsymptoticStability.rst
│ │ │ ├── BeamLoads.rst
│ │ │ ├── BeamPlot.rst
│ │ │ ├── Cleanup.rst
│ │ │ ├── FrequencyResponse.rst
│ │ │ ├── LiftDistribution.rst
│ │ │ ├── PickleData.rst
│ │ │ ├── PlotFlowField.rst
│ │ │ ├── SaveData.rst
│ │ │ ├── SaveParametricCase.rst
│ │ │ ├── StabilityDerivatives.rst
│ │ │ ├── StallCheck.rst
│ │ │ ├── UDPout.rst
│ │ │ └── WriteVariablesTime.rst
│ │ ├── rom/
│ │ │ ├── balanced/
│ │ │ │ ├── Balanced.rst
│ │ │ │ ├── Direct.rst
│ │ │ │ ├── FrequencyLimited.rst
│ │ │ │ ├── Iterative.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── krylov/
│ │ │ │ ├── Krylov.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── index.rst
│ │ │ ├── krylovutils/
│ │ │ │ ├── check_eye.rst
│ │ │ │ ├── construct_krylov.rst
│ │ │ │ ├── evec.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── lu_factor.rst
│ │ │ │ ├── lu_solve.rst
│ │ │ │ ├── mgs_ortho.rst
│ │ │ │ ├── remove_a12.rst
│ │ │ │ └── schur_ordered.rst
│ │ │ ├── librom/
│ │ │ │ ├── balfreq.rst
│ │ │ │ ├── balreal_direct_py.rst
│ │ │ │ ├── balreal_iter.rst
│ │ │ │ ├── balreal_iter_old.rst
│ │ │ │ ├── check_stability.rst
│ │ │ │ ├── eigen_dec.rst
│ │ │ │ ├── get_gauss_weights.rst
│ │ │ │ ├── get_trapz_weights.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── low_rank_smith.rst
│ │ │ │ ├── modred.rst
│ │ │ │ ├── res_discrete_lyap.rst
│ │ │ │ ├── smith_iter.rst
│ │ │ │ └── tune_rom.rst
│ │ │ └── librom_interp/
│ │ │ ├── FLB_transfer_function.rst
│ │ │ ├── InterpROM.rst
│ │ │ ├── index.rst
│ │ │ └── transfer_function.rst
│ │ ├── solvers/
│ │ │ ├── aero/
│ │ │ │ ├── DynamicUVLM.rst
│ │ │ │ ├── NoAero.rst
│ │ │ │ ├── PrescribedUvlm.rst
│ │ │ │ ├── StaticUvlm.rst
│ │ │ │ ├── StepLinearUVLM.rst
│ │ │ │ └── StepUvlm.rst
│ │ │ ├── aero_solvers.rst
│ │ │ ├── coupled/
│ │ │ │ ├── DynamicCoupled.rst
│ │ │ │ ├── LinDynamicSim.rst
│ │ │ │ ├── StaticCoupled.rst
│ │ │ │ └── StaticCoupledRBM.rst
│ │ │ ├── coupled_solvers.rst
│ │ │ ├── flight dynamics/
│ │ │ │ ├── StaticTrim.rst
│ │ │ │ └── Trim.rst
│ │ │ ├── flight dynamics_solvers.rst
│ │ │ ├── linear/
│ │ │ │ ├── LinearAssembler.rst
│ │ │ │ └── Modal.rst
│ │ │ ├── linear_solvers.rst
│ │ │ ├── loader/
│ │ │ │ ├── AerogridLoader.rst
│ │ │ │ ├── BeamLoader.rst
│ │ │ │ └── PreSharpy.rst
│ │ │ ├── loader_solvers.rst
│ │ │ ├── structural/
│ │ │ │ ├── NonLinearDynamic.rst
│ │ │ │ ├── NonLinearDynamicCoupledStep.rst
│ │ │ │ ├── NonLinearDynamicMultibody.rst
│ │ │ │ ├── NonLinearDynamicPrescribedStep.rst
│ │ │ │ ├── NonLinearStatic.rst
│ │ │ │ ├── RigidDynamicCoupledStep.rst
│ │ │ │ └── RigidDynamicPrescribedStep.rst
│ │ │ ├── structural_solvers.rst
│ │ │ ├── time_integrator/
│ │ │ │ ├── GeneralisedAlpha.rst
│ │ │ │ └── NewmarkBeta.rst
│ │ │ └── time_integrator_solvers.rst
│ │ ├── structure/
│ │ │ ├── index.rst
│ │ │ ├── models/
│ │ │ │ ├── beam/
│ │ │ │ │ ├── StructTimeStepInfo.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── beamstructures/
│ │ │ │ │ ├── Element.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── index.rst
│ │ │ ├── lagrangeconstraints/
│ │ │ │ ├── BaseLagrangeConstraint.rst
│ │ │ │ ├── constant_rot_vel_FoR.rst
│ │ │ │ ├── constant_vel_FoR.rst
│ │ │ │ ├── def_rot_axis_FoR_wrt_node_general.rst
│ │ │ │ ├── def_rot_axis_FoR_wrt_node_xyz.rst
│ │ │ │ ├── def_rot_vect_FoR_wrt_node.rst
│ │ │ │ ├── def_rot_vel_FoR_wrt_node.rst
│ │ │ │ ├── define_FoR_dof.rst
│ │ │ │ ├── define_node_dof.rst
│ │ │ │ ├── define_num_LM_eq.rst
│ │ │ │ ├── equal_lin_vel_node_FoR.rst
│ │ │ │ ├── equal_pos_node_FoR.rst
│ │ │ │ ├── free.rst
│ │ │ │ ├── fully_constrained_node_FoR.rst
│ │ │ │ ├── generate_lagrange_matrix.rst
│ │ │ │ ├── hinge_FoR.rst
│ │ │ │ ├── hinge_FoR_wrtG.rst
│ │ │ │ ├── hinge_node_FoR.rst
│ │ │ │ ├── hinge_node_FoR_constant_vel.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── initialise_lc.rst
│ │ │ │ ├── lagrangeconstraint.rst
│ │ │ │ ├── lc_from_string.rst
│ │ │ │ ├── lin_vel_node_wrtA.rst
│ │ │ │ ├── lin_vel_node_wrtG.rst
│ │ │ │ ├── postprocess.rst
│ │ │ │ ├── print_available_lc.rst
│ │ │ │ ├── remove_constraint.rst
│ │ │ │ ├── spherical_FoR.rst
│ │ │ │ └── spherical_node_FoR.rst
│ │ │ ├── modalutils/
│ │ │ │ ├── assert_modes_mass_normalised.rst
│ │ │ │ ├── assert_orthogonal_eigenvectors.rst
│ │ │ │ ├── free_modes_principal_axes.rst
│ │ │ │ ├── get_mode_zeta.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── mode_sign_convention.rst
│ │ │ │ ├── modes_to_cg_ref.rst
│ │ │ │ ├── principal_axes_inertia.rst
│ │ │ │ ├── scale_mass_normalised_modes.rst
│ │ │ │ ├── scale_mode.rst
│ │ │ │ ├── write_modes_vtk.rst
│ │ │ │ └── write_zeta_vtk.rst
│ │ │ └── xbeamlib/
│ │ │ ├── Xbopts.rst
│ │ │ ├── cbeam3_asbly_dynamic.rst
│ │ │ ├── cbeam3_asbly_static.rst
│ │ │ ├── cbeam3_correct_gravity_forces.rst
│ │ │ ├── cbeam3_loads.rst
│ │ │ ├── cbeam3_solv_modal.rst
│ │ │ ├── cbeam3_solv_nlnstatic.rst
│ │ │ ├── index.rst
│ │ │ └── xbeam3_asbly_dynamic.rst
│ │ └── utils/
│ │ ├── algebra/
│ │ │ ├── cross3.rst
│ │ │ ├── crv2quat.rst
│ │ │ ├── crv2rotation.rst
│ │ │ ├── crv2tan.rst
│ │ │ ├── crv_bounds.rst
│ │ │ ├── der_CcrvT_by_v.rst
│ │ │ ├── der_Ccrv_by_v.rst
│ │ │ ├── der_Ceuler_by_v.rst
│ │ │ ├── der_Ceuler_by_v_NED.rst
│ │ │ ├── der_CquatT_by_v.rst
│ │ │ ├── der_Cquat_by_v.rst
│ │ │ ├── der_Peuler_by_v.rst
│ │ │ ├── der_TanT_by_xv.rst
│ │ │ ├── der_Tan_by_xv.rst
│ │ │ ├── der_Teuler_by_w.rst
│ │ │ ├── der_Teuler_by_w_NED.rst
│ │ │ ├── der_quat_wrt_crv.rst
│ │ │ ├── der_skewp_skewp_v.rst
│ │ │ ├── deuler_dt.rst
│ │ │ ├── deuler_dt_NED.rst
│ │ │ ├── euler2quat.rst
│ │ │ ├── euler2rot.rst
│ │ │ ├── get_transformation_matrix.rst
│ │ │ ├── get_triad.rst
│ │ │ ├── index.rst
│ │ │ ├── mat2quat.rst
│ │ │ ├── multiply_matrices.rst
│ │ │ ├── norm3d.rst
│ │ │ ├── normsq3d.rst
│ │ │ ├── panel_area.rst
│ │ │ ├── quadskew.rst
│ │ │ ├── quat2euler.rst
│ │ │ ├── quat2rotation.rst
│ │ │ ├── quat_bound.rst
│ │ │ ├── rotation2crv.rst
│ │ │ ├── rotation2quat.rst
│ │ │ ├── rotation3d_x.rst
│ │ │ ├── rotation3d_y.rst
│ │ │ ├── rotation3d_z.rst
│ │ │ ├── skew.rst
│ │ │ ├── tangent_vector.rst
│ │ │ ├── triad2rotation.rst
│ │ │ └── unit_vector.rst
│ │ ├── analytical/
│ │ │ ├── flat_plate_analytical.rst
│ │ │ ├── garrick_drag_pitch.rst
│ │ │ ├── garrick_drag_plunge.rst
│ │ │ ├── index.rst
│ │ │ ├── nc_derivs.rst
│ │ │ ├── qs_derivs.rst
│ │ │ ├── sears_CL_freq_resp.rst
│ │ │ ├── sears_fun.rst
│ │ │ ├── sears_lift_sin_gust.rst
│ │ │ ├── theo_CL_freq_resp.rst
│ │ │ ├── theo_CM_freq_resp.rst
│ │ │ ├── theo_fun.rst
│ │ │ ├── theo_lift.rst
│ │ │ └── wagner_imp_start.rst
│ │ ├── control_utils/
│ │ │ ├── PID.rst
│ │ │ └── index.rst
│ │ ├── datastructures/
│ │ │ ├── AeroTimeStepInfo.rst
│ │ │ ├── Linear.rst
│ │ │ ├── LinearTimeStepInfo.rst
│ │ │ ├── StructTimeStepInfo.rst
│ │ │ └── index.rst
│ │ ├── docutils/
│ │ │ ├── check_folder_in_ignore.rst
│ │ │ ├── generate_documentation.rst
│ │ │ ├── index.rst
│ │ │ ├── output_documentation_module_page.rst
│ │ │ ├── write_file.rst
│ │ │ └── write_folder.rst
│ │ ├── exceptions/
│ │ │ ├── DocumentationError.rst
│ │ │ ├── NotConvergedSolver.rst
│ │ │ ├── NotRecognisedSetting.rst
│ │ │ ├── NotValidSetting.rst
│ │ │ └── index.rst
│ │ ├── frequencyutils/
│ │ │ ├── find_limits.rst
│ │ │ ├── find_target_system.rst
│ │ │ ├── freqresp_relative_error.rst
│ │ │ ├── frobenius_norm.rst
│ │ │ ├── h_infinity_norm.rst
│ │ │ ├── hamiltonian.rst
│ │ │ ├── index.rst
│ │ │ ├── l2norm.rst
│ │ │ └── max_eigs.rst
│ │ ├── generate_cases/
│ │ │ ├── AerodynamicInformation.rst
│ │ │ ├── AeroelasticInformation.rst
│ │ │ ├── SimulationInformation.rst
│ │ │ ├── StructuralInformation.rst
│ │ │ ├── clean_test_files.rst
│ │ │ ├── from_node_array_to_elem_matrix.rst
│ │ │ ├── from_node_list_to_elem_matrix.rst
│ │ │ ├── get_airfoil_camber.rst
│ │ │ ├── get_aoacl0_from_camber.rst
│ │ │ ├── get_factor_geometric_progression.rst
│ │ │ ├── get_mu0_from_camber.rst
│ │ │ ├── index.rst
│ │ │ └── read_column_sheet_type01.rst
│ │ ├── generator_interface/
│ │ │ ├── index.rst
│ │ │ └── output_documentation.rst
│ │ ├── geo_utils/
│ │ │ ├── generate_naca_camber.rst
│ │ │ ├── index.rst
│ │ │ └── interpolate_naca_camber.rst
│ │ ├── h5utils/
│ │ │ ├── add_array_to_grp.rst
│ │ │ ├── add_as_grp.rst
│ │ │ ├── check_file_exists.rst
│ │ │ ├── index.rst
│ │ │ ├── read_group.rst
│ │ │ ├── readh5.rst
│ │ │ ├── save_list_as_array.rst
│ │ │ └── saveh5.rst
│ │ ├── index.rst
│ │ ├── model_utils/
│ │ │ ├── index.rst
│ │ │ └── mass_matrix_generator.rst
│ │ ├── multibody/
│ │ │ ├── disp_and_accel2state.rst
│ │ │ ├── get_elems_nodes_list.rst
│ │ │ ├── index.rst
│ │ │ ├── merge_multibody.rst
│ │ │ ├── split_multibody.rst
│ │ │ ├── state2disp_and_accel.rst
│ │ │ └── update_mb_dB_before_merge.rst
│ │ ├── plotutils/
│ │ │ ├── index.rst
│ │ │ ├── plot_timestep.rst
│ │ │ └── set_axes_equal.rst
│ │ └── settings/
│ │ ├── SettingsTable.rst
│ │ ├── check_settings_in_options.rst
│ │ ├── index.rst
│ │ └── load_config_file.rst
│ └── index.rst
├── environment.yml
├── environment_arm64.yml
├── lib/
│ ├── .placeholder
│ └── CMakeLists.txt
├── pyproject.toml
├── scripts/
│ ├── __init__.py
│ ├── optimiser/
│ │ ├── __init__.py
│ │ ├── base_case/
│ │ │ └── generate.py
│ │ ├── optimiser.py
│ │ └── optimiser_input.yaml
│ └── xplaneUDPout/
│ ├── HALE_varDIe.acf
│ ├── __init__.py
│ ├── variables.yaml
│ └── xplaneUDP.py
├── setup.py
├── sharpy/
│ ├── __init__.py
│ ├── aero/
│ │ ├── __init__.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── aerogrid.py
│ │ │ ├── grid.py
│ │ │ └── nonliftingbodygrid.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── airfoilpolars.py
│ │ ├── mapping.py
│ │ ├── utils.py
│ │ └── uvlmlib.py
│ ├── cases/
│ │ ├── __init__.py
│ │ ├── coupled/
│ │ │ ├── WindTurbine/
│ │ │ │ ├── __init__.py
│ │ │ │ └── generate_rotor.py
│ │ │ ├── X-HALE/
│ │ │ │ ├── generate_xhale.py
│ │ │ │ └── inputs/
│ │ │ │ ├── EMX-07_camber.txt
│ │ │ │ ├── aero_properties.xlsx
│ │ │ │ ├── beam_properties.xlsx
│ │ │ │ └── lumped_mass.xlsx
│ │ │ ├── __init__.py
│ │ │ ├── hinged_controlled_wing/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── generate_hinged_controlled_wing.py
│ │ │ │ └── generate_hinged_roll_controlled_wing.py
│ │ │ ├── linear_horten/
│ │ │ │ └── __init__.py
│ │ │ ├── multibody_takeoff/
│ │ │ │ ├── __init__.py
│ │ │ │ └── generate_hale.py
│ │ │ └── simple_HALE/
│ │ │ ├── __init__.py
│ │ │ └── generate_hale.py
│ │ ├── hangar/
│ │ │ ├── __init__.py
│ │ │ ├── horten_wing.py
│ │ │ ├── richards_wing.py
│ │ │ └── swept_flying_wing.py
│ │ └── templates/
│ │ ├── Ttail.py
│ │ ├── __init__.py
│ │ ├── flying_wings.py
│ │ ├── fuselage_wing_configuration/
│ │ │ ├── __init__.py
│ │ │ ├── fuselage_wing_configuration.py
│ │ │ ├── fwc_aero.py
│ │ │ ├── fwc_fuselage.py
│ │ │ ├── fwc_get_settings.py
│ │ │ └── fwc_structure.py
│ │ └── template_wt.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ ├── bladepitchpid.py
│ │ ├── controlsurfacepidcontroller.py
│ │ ├── multibodycontroller.py
│ │ └── takeofftrajectorycontroller.py
│ ├── generators/
│ │ ├── __init__.py
│ │ ├── bumpvelocityfield.py
│ │ ├── dynamiccontrolsurface.py
│ │ ├── floatingforces.py
│ │ ├── gridbox.py
│ │ ├── gustvelocityfield.py
│ │ ├── helicoidalwake.py
│ │ ├── modifystructure.py
│ │ ├── polaraeroforces.py
│ │ ├── shearvelocityfield.py
│ │ ├── steadyvelocityfield.py
│ │ ├── straightwake.py
│ │ ├── trajectorygenerator.py
│ │ ├── turbvelocityfield.py
│ │ └── turbvelocityfieldbts.py
│ ├── io/
│ │ ├── __init__.py
│ │ ├── inout_variables.py
│ │ ├── logger_utils.py
│ │ ├── message_interface.py
│ │ └── network_interface.py
│ ├── linear/
│ │ ├── __init__.py
│ │ ├── assembler/
│ │ │ ├── __init__.py
│ │ │ ├── lincontrolsurfacedeflector.py
│ │ │ ├── linearaeroelastic.py
│ │ │ ├── linearbeam.py
│ │ │ ├── linearcustom.py
│ │ │ ├── lineargustassembler.py
│ │ │ └── linearuvlm.py
│ │ ├── dev/
│ │ │ ├── __init__.py
│ │ │ ├── linfunc.py
│ │ │ ├── linsym_biot_segment.py
│ │ │ ├── linsym_uc_dncdzeta.py
│ │ │ └── sym_dev_dbiot.py
│ │ ├── src/
│ │ │ ├── __init__.py
│ │ │ ├── assembly.py
│ │ │ ├── gridmapping.py
│ │ │ ├── interp.py
│ │ │ ├── lib_dbiot.py
│ │ │ ├── lib_ucdncdzeta.py
│ │ │ ├── libfit.py
│ │ │ ├── libsparse.py
│ │ │ ├── libss.py
│ │ │ ├── lin_aeroelastic.py
│ │ │ ├── lin_utils.py
│ │ │ ├── lingebm.py
│ │ │ ├── linuvlm.py
│ │ │ ├── multisurfaces.py
│ │ │ ├── surface.py
│ │ │ └── uvlmutils.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── derivatives.py
│ │ ├── ss_interface.py
│ │ └── sselements.py
│ ├── postproc/
│ │ ├── __init__.py
│ │ ├── aeroforcescalculator.py
│ │ ├── aerogridplot.py
│ │ ├── asymptoticstability.py
│ │ ├── beamloads.py
│ │ ├── beamplot.py
│ │ ├── cleanup.py
│ │ ├── frequencyresponse.py
│ │ ├── liftdistribution.py
│ │ ├── pickledata.py
│ │ ├── plotflowfield.py
│ │ ├── savedata.py
│ │ ├── saveparametriccase.py
│ │ ├── stabilityderivatives.py
│ │ ├── stallcheck.py
│ │ ├── udpout.py
│ │ └── writevariablestime.py
│ ├── presharpy/
│ │ ├── __init__.py
│ │ └── presharpy.py
│ ├── rom/
│ │ ├── __init__.py
│ │ ├── balanced.py
│ │ ├── krylov.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── krylovutils.py
│ │ ├── librom.py
│ │ └── librom_interp.py
│ ├── sharpy_main.py
│ ├── solvers/
│ │ ├── __init__.py
│ │ ├── _basestructural.py
│ │ ├── aerogridloader.py
│ │ ├── beamloader.py
│ │ ├── dynamiccoupled.py
│ │ ├── dynamicuvlm.py
│ │ ├── gridloader.py
│ │ ├── initialaeroelasticloader.py
│ │ ├── lindynamicsim.py
│ │ ├── linearassembler.py
│ │ ├── modal.py
│ │ ├── noaero.py
│ │ ├── nonliftingbodygridloader.py
│ │ ├── nonlineardynamic.py
│ │ ├── nonlineardynamiccoupledstep.py
│ │ ├── nonlineardynamicmultibody.py
│ │ ├── nonlineardynamicmultibodyjax.py
│ │ ├── nonlineardynamicprescribedstep.py
│ │ ├── nonlinearstatic.py
│ │ ├── nostructural.py
│ │ ├── prescribeduvlm.py
│ │ ├── rigiddynamiccoupledstep.py
│ │ ├── rigiddynamicprescribedstep.py
│ │ ├── staticcoupled.py
│ │ ├── statictrim.py
│ │ ├── staticuvlm.py
│ │ ├── steplinearuvlm.py
│ │ ├── stepuvlm.py
│ │ ├── timeintegrators.py
│ │ ├── timeintegratorsjax.py
│ │ ├── trim.py
│ │ └── updatepickle.py
│ ├── structure/
│ │ ├── __init__.py
│ │ ├── basestructure.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── beam.py
│ │ │ └── beamstructures.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── lagrangeconstraints.py
│ │ ├── lagrangeconstraintsjax.py
│ │ ├── modalutils.py
│ │ └── xbeamlib.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── algebra.py
│ │ ├── analytical.py
│ │ ├── constants.py
│ │ ├── control_utils.py
│ │ ├── controller_interface.py
│ │ ├── cout_utils.py
│ │ ├── ctypes_utils.py
│ │ ├── datastructures.py
│ │ ├── docutils.py
│ │ ├── exceptions.py
│ │ ├── frequencyutils.py
│ │ ├── generate_cases.py
│ │ ├── generator_interface.py
│ │ ├── geo_utils.py
│ │ ├── h5utils.py
│ │ ├── input_arg.py
│ │ ├── linearutils.py
│ │ ├── model_utils.py
│ │ ├── multibody.py
│ │ ├── multibodyjax.py
│ │ ├── num_utils.py
│ │ ├── plotutils.py
│ │ ├── rom_interface.py
│ │ ├── settings.py
│ │ ├── sharpydir.py
│ │ └── solver_interface.py
│ └── version.py
├── tests/
│ ├── __init__.py
│ ├── coupled/
│ │ ├── __init__.py
│ │ ├── dynamic/
│ │ │ ├── __init__.py
│ │ │ ├── hale/
│ │ │ │ └── generate_hale.py
│ │ │ └── test_dynamic.py
│ │ ├── multibody/
│ │ │ ├── __init__.py
│ │ │ ├── double_pendulum/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_double_pendulum_geradin.py
│ │ │ ├── double_prescribed_pendulum/
│ │ │ │ └── test_double_prescribed_pendulum.py
│ │ │ ├── double_slanted_pendulum/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_double_pendulum_slanted.py
│ │ │ ├── fix_node_velocity_wrtA/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_fix_node_velocity_wrtA.py
│ │ │ ├── fix_node_velocity_wrtG/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_fix_node_velocity_wrtG.py
│ │ │ ├── floating_forces/
│ │ │ │ └── test_floatingforces.py
│ │ │ └── floating_wind_turbine/
│ │ │ ├── oc3_cs_v07.floating.h5
│ │ │ └── test_floating_wind_turbine.py
│ │ ├── prescribed/
│ │ │ ├── WindTurbine/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_rotor.py
│ │ │ ├── __init__.py
│ │ │ ├── gamma_dot_test/
│ │ │ │ └── test_gamma_dot.py
│ │ │ ├── rotating_wing/
│ │ │ │ └── generate_rotating_wing.py
│ │ │ └── test_prescribed.py
│ │ └── static/
│ │ ├── __init__.py
│ │ ├── pazy/
│ │ │ └── generate_pazy.py
│ │ ├── smith_g_2deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_g_2deg.py
│ │ ├── smith_g_4deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_g_4deg.py
│ │ ├── smith_nog_2deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_nog_2deg.py
│ │ ├── smith_nog_4deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_nog_4deg.py
│ │ ├── test_pazy_static.py
│ │ └── test_static.py
│ ├── docs/
│ │ ├── __init__.py
│ │ └── test_docs.py
│ ├── io/
│ │ ├── Example_simple_hale/
│ │ │ ├── Client_HALE.py
│ │ │ ├── __init__.py
│ │ │ ├── generate_hale_io.py
│ │ │ └── variables_hale.yaml
│ │ ├── __init__.py
│ │ ├── generate_pazy_udpout.py
│ │ ├── sample_udp_inout/
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── generate_pazy_test_io_local.py
│ │ │ └── variables_coarse.yaml
│ │ ├── test_pazy_udpout.py
│ │ └── variables.yaml
│ ├── linear/
│ │ ├── __init__.py
│ │ ├── assembly/
│ │ │ ├── __init__.py
│ │ │ └── test_assembly.py
│ │ ├── control_surfaces/
│ │ │ ├── __init__.py
│ │ │ └── test_control_surfaces.py
│ │ ├── derivatives/
│ │ │ ├── __init__.py
│ │ │ ├── test_ders.py
│ │ │ └── test_stabilityderivatives.py
│ │ ├── frequencyutils/
│ │ │ ├── __init__.py
│ │ │ ├── src/
│ │ │ │ ├── a.npy
│ │ │ │ ├── b.npy
│ │ │ │ ├── c.npy
│ │ │ │ └── d.npy
│ │ │ └── test_frequency_utils.py
│ │ ├── goland_wing/
│ │ │ ├── __init__.py
│ │ │ └── test_goland_flutter.py
│ │ ├── gusts/
│ │ │ ├── __init__.py
│ │ │ ├── test_external_gust.py
│ │ │ └── test_linear_gusts.py
│ │ ├── horten/
│ │ │ ├── __init__.py
│ │ │ └── test_horten.py
│ │ ├── rom/
│ │ │ ├── __init__.py
│ │ │ ├── src/
│ │ │ │ ├── A.mat
│ │ │ │ ├── B.mat
│ │ │ │ └── C.mat
│ │ │ ├── test_balancing.py
│ │ │ ├── test_krylov.py
│ │ │ ├── test_rom_framework.py
│ │ │ ├── test_schur.py
│ │ │ └── test_springmasssystem.py
│ │ ├── statespace/
│ │ │ ├── __init__.py
│ │ │ ├── test_statespace.py
│ │ │ └── test_variable_tracker.py
│ │ └── uvlm/
│ │ ├── __init__.py
│ │ └── test_infinite_span.py
│ ├── sourcepanelmethod/
│ │ ├── __init__.py
│ │ ├── geometry_parameter_models.json
│ │ ├── test_data/
│ │ │ ├── results_low_wing_coupled_0.csv
│ │ │ └── results_low_wing_coupled_1.csv
│ │ ├── test_source_panel_method.py
│ │ └── test_vlm_coupled_spm.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── test_algebra.py
│ │ ├── test_generate_cases.py
│ │ └── test_settings.py
│ ├── uvlm/
│ │ ├── __init__.py
│ │ ├── dynamic/
│ │ │ └── test_wake_cfl_n1.py
│ │ └── static/
│ │ ├── __init__.py
│ │ ├── big_wake_planarwing/
│ │ │ └── generate_big_wake_planarwing.py
│ │ ├── planarwing/
│ │ │ ├── __init__.py
│ │ │ └── generate_planarwing.py
│ │ └── polars/
│ │ ├── __init__.py
│ │ ├── generate_wing.py
│ │ ├── test_polars.py
│ │ └── xf-naca0018-il-50000.txt
│ └── xbeam/
│ ├── __init__.py
│ ├── geradin/
│ │ ├── __init__.py
│ │ └── generate_geradin.py
│ ├── modal/
│ │ └── rotating_beam/
│ │ └── generate_bielawa_baromega2_1e3.py
│ └── test_xbeam.py
└── utils/
├── docker/
│ └── bashrc
└── environment.yml
================================================
FILE CONTENTS
================================================
================================================
FILE: .codecov.yml
================================================
ignore:
- '*/tests/*'
================================================
FILE: .coveragerc
================================================
# this file controls the execution of coverage.py
[run]
omit=
./tests/*
./docs/*
./dev/*
./scripts/*
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Have to re-enable the standard pragma
pragma: no cover
# Don't complain about missing debug-only code:
def __repr__
if self\.debug
# Don't complain if tests don't hit defensive assertion code:
raise AssertionError
raise NotImplementedError
# Don't complain if non-runnable code isn't run:
if 0:
if __name__ == .__main__.:
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: potential bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behaviour.
If model related, please try and reproduce with one of the provided models (found in `/cases/`). Else, please provided the input files (a `.fem.h5`, `aero.h5` and `case.sharpy`).
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**System Info (please complete the following information):**
- OS: [e.g. CentOS7/MacOS 13.1]
- SHARPy Version [e.g. v1.2]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/workflows/docker_build.yaml
================================================
name: Create and publish Docker image
on:
push:
branches:
- develop
- main
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v3.2.0
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
================================================
FILE: .github/workflows/docker_build_test.yaml
================================================
name: Test Docker image build
on:
pull_request:
branches:
- main
- develop
- 'rc*'
push:
paths:
- 'utils/*'
- 'Dockerfile'
- '.github/workflows/docker*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
test_image_build:
runs-on: ubuntu-latest
name: Test Docker image build
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build Docker image
uses: docker/build-push-action@v3.2.0
with:
context: .
push: false
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
================================================
FILE: .github/workflows/pypi_build.yaml
================================================
name: Create and publish pypi image
on:
# only runs when there is a new published release
# and for testing, pull requests to develop and main
# and if there are changes to the build process and github action
release:
types: [published]
push:
branches:
- develop
- main
paths:
- 'setup.py'
- '.github/workflows/pypi*'
pull_request:
branches:
- main
- develop
- 'rc*'
jobs:
create-pypi-image:
name: >-
Create .whl 🛞 from SHARPy distribution
runs-on: ubuntu-20.04
env:
python-version-chosen: "3.10.8"
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ env.python-version-chosen }}
uses: actions/setup-python@v2
with:
python-version: ${{ env.python-version-chosen }}
- name: Set up GCC
uses: egor-tensin/setup-gcc@v1
with:
version: 7
platform: x64
- name: Pre-Install dependencies
run: |
export QT_QPA_PLATFORM='offscreen'
sudo apt install libeigen3-dev
git submodule init
git submodule update
- name: Install pypa/build
run: >-
python3 -m
pip install
build
--user
- name: Install wheel
run: python3 -m pip install wheel --user
- name: Build a source tarball
run: python setup.py sdist
- name: Build a binary wheel
run: python3 setup.py bdist_wheel
- name: Find the wheel created during pip install
run:
python3 -m pip cache dir
- name: Store the distribution packages
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
publish-to-pypi:
name: >-
Publish Python 🐍 distribution 📦 to PyPI
if: github.event_name == 'release' && github.event.release.action == 'published' # only publish to PyPI on tag pushes
needs:
- create-pypi-image
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/ic_sharpy # Replace <package-name> with your PyPI project name
permissions:
id-token: write # IMPORTANT: mandatory for trusted publishing
steps:
- name: Download all the dists
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
# with:
# path: dist/*
================================================
FILE: .github/workflows/readme.md
================================================
# SHARPy GitHub Workflows
There are 4(+1 experimental) automated workflows for SHARPy's CI/CD.
## SHARPy Tests
The related to the SHARPy tests that run the `SHARPy Tests` job are:
* `sharpy_tests.yaml`: when Python or the submodules files are edited
* `sharpy_no_test_needed.yaml`: otherwise
This avoids running the full set of tests for changes in the documentation etc.
Since the merge to `develop` and `main` is protected by the tests passing, the
second workflow ensures a positive result for those PRs that did not change the
Python code, hence allowing the merge.
## Docker
Two nearly identical workflows, the only difference is that one pushes the Docker
image to the SHARPy packages. Therefore:
* `docker_build_test.yaml`: Builds the Docker image but does not push. Runs on changes to the `docker*` workflows, changes to the `utils/` directory (environments) and changes to the `Dockerfile`. Required test for PRs to merge to `develop` and `main`.
* `docker_build.yaml`: Builds and pushes the Docker image. Runs on pushes to `develop`, `main` and annotated tags.
## Pypi (experimental!)
One workflow with two jobs, the first creates and the second pushes the wheel
artifact to ic-sharpy @ pypi. Therefore:
* `pypi_build.yaml`: Builds and pushes the pypi wheel according to conditions. Runs on changes to the `pypi*` workflow, changes to the `setup.py`, and PRs and pushes to main and develop. Required test for PRs to merge to `develop` and `main`. Publishes on annotated tags.
================================================
FILE: .github/workflows/sharpy_no_test_needed.yaml
================================================
name: SHARPy Tests
on:
pull_request:
branches:
- main
- develop
- 'rc*'
paths-ignore:
- '*.py'
- 'lib/**'
- '.github/workflows/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: 'echo "No changes to python files, submodules or workflows, no run required" '
================================================
FILE: .github/workflows/sharpy_tests.yaml
================================================
name: SHARPy Tests
on:
push:
paths:
- '*.py'
- 'lib/*'
- '.github/workflows/sharpy*'
pull_request:
branches:
- main
- develop
- 'rc*'
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.10.8]
steps:
- uses: actions/checkout@v4
with:
submodules: "recursive"
fetch-tags: true
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Set up GCC
uses: egor-tensin/setup-gcc@v1
with:
version: 10
platform: x64
- name: Check that gfortran works
run: gfortran --version
- name: Install build package dependencies
run: sudo apt install libblas-dev liblapack-dev libeigen3-dev
- name: Install sharpy and coverage using pip
run: |
export QT_QPA_PLATFORM='offscreen'
pip install .
pip install coverage
- name: Run coverage
run: |
coverage run -m unittest discover
coverage json
- name: Upload Coverage to Codecov
uses: codecov/codecov-action@v3
with:
verbose: true
================================================
FILE: .github_changelog_generator
================================================
since-tag=1.0.0
================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# IPython Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
# Vim stuff
*.*~
*.swp
*.h5
# project dependent stuff
lib/*.so
output/*
.idea
# figure folders
*figs/*
*.eps
*.vtu
output*/
snapshots/
# OSX files
*.DS_Store
# linear tools / tests cases
*.prof
figs/*
\.spyproject/
# sharpy extension
*.sharpy
# Exceptions
# !tests/coupled/multibody/floating_wind_turbine/oc3_cs_v07.floating.h5
!tests/coupled/multibody/floating_wind_turbine/oc3_cs_v07.floating.h*
================================================
FILE: .gitmodules
================================================
[submodule "lib/UVLM"]
path = lib/UVLM
url = http://github.com/imperialcollegelondon/UVLM
[submodule "lib/xbeam"]
path = lib/xbeam
url = http://github.com/imperialcollegelondon/xbeam
================================================
FILE: .readthedocs.yaml
================================================
# .readthedocs.yaml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Set the version of Python and other tools you might need
build:
os: ubuntu-22.04
tools:
python: "3.10"
python:
install:
- requirements: docs/requirements_rtd
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/source/conf.py
# We recommend specifying your dependencies to enable reproducible builds:
# https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
# python:
# install:
# - requirements: docs/requirements.txt
================================================
FILE: .version.json
================================================
{
"schemaVersion": 1,
"label": "release version",
"message": "2.4",
"color": "green"
}
================================================
FILE: .zenodo.json
================================================
{
"license": "other-open",
"title": "SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines",
"upload_type": "software",
"creators": [
{
"orcid": "0000-0002-8133-9481",
"affiliation": "Imperial College London",
"name": "Alfonso del Carre"
},
{
"orcid": "0000-0001-7445-5970",
"affiliation": "Imperial College London",
"name": "Norberto Goizueta"
},
{
"orcid": "0000-0003-4840-5392",
"affiliation": "Imperial College London",
"name": "Arturo Mu\u00f1oz-Sim\u00f3n"
},
{
"orcid": "0000-0002-6706-3220",
"affiliation": "Imperial College London",
"name": "Rafael Palacios"
}
],
"access_right": "open"
}
================================================
FILE: CHANGELOG.md
================================================
# Changelog
## [2.4](https://github.com/imperialcollegelondon/sharpy/tree/2.4) (2025-03-20)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.3...2.4)
**Implemented enhancements:**
- Add the automatic differentiation multibody solver based on JAX [\#305](https://github.com/ImperialCollegeLondon/sharpy/pull/305) ([ben-l-p](https://github.com/ben-l-p))
- Non-perpendicular hinge axis possible for multibody solver [\#299](https://github.com/ImperialCollegeLondon/sharpy/pull/299) ([kccwing](https://github.com/kccwing))
- Add hosting of built wheel at PyPI - develop [\#298](https://github.com/ImperialCollegeLondon/sharpy/pull/298) ([kccwing](https://github.com/kccwing))
- Add hosting of built wheel at PyPI - main [\#297](https://github.com/ImperialCollegeLondon/sharpy/pull/297) ([kccwing](https://github.com/kccwing))
**Fixed bugs:**
- Updated docs to address issue with conda install failing [\#290](https://github.com/ImperialCollegeLondon/sharpy/pull/290) ([ben-l-p](https://github.com/ben-l-p))
**Closed issues:**
- TypeError: unhashable type: 'UnstructuredGrid' [\#313](https://github.com/ImperialCollegeLondon/sharpy/issues/313)
- Creating aileron control surfaces to induce roll [\#304](https://github.com/ImperialCollegeLondon/sharpy/issues/304)
- Static Trim Routine Fails with Dynamic-Type Control Surfaces [\#300](https://github.com/ImperialCollegeLondon/sharpy/issues/300)
- Not a Git Repository [\#295](https://github.com/ImperialCollegeLondon/sharpy/issues/295)
**Merged pull requests:**
- Merge develop into main for new version release [\#318](https://github.com/ImperialCollegeLondon/sharpy/pull/318) ([ben-l-p](https://github.com/ben-l-p))
- Xhale thrust node typo [\#317](https://github.com/ImperialCollegeLondon/sharpy/pull/317) ([kccwing](https://github.com/kccwing))
- Mayavi github dependency restored for hotfix - develop [\#316](https://github.com/ImperialCollegeLondon/sharpy/pull/316) ([kccwing](https://github.com/kccwing))
- Mayavi github dependency restored for hotfix [\#311](https://github.com/ImperialCollegeLondon/sharpy/pull/311) ([kccwing](https://github.com/kccwing))
- Update body and wake FoR multiplication [\#309](https://github.com/ImperialCollegeLondon/sharpy/pull/309) ([kccwing](https://github.com/kccwing))
- Bug fix for generate\_full\_structure [\#306](https://github.com/ImperialCollegeLondon/sharpy/pull/306) ([kccwing](https://github.com/kccwing))
- Fix AeroForcesCalculator giving forces in wrong frame of reference [\#301](https://github.com/ImperialCollegeLondon/sharpy/pull/301) ([ben-l-p](https://github.com/ben-l-p))
- Temporary Fix for NumPy 2.0 Issues \(Develop Branch\) [\#293](https://github.com/ImperialCollegeLondon/sharpy/pull/293) ([ben-l-p](https://github.com/ben-l-p))
- Temporary Fix for NumPy 2.0 Issues \(Main Branch\) [\#292](https://github.com/ImperialCollegeLondon/sharpy/pull/292) ([ben-l-p](https://github.com/ben-l-p))
## [2.3](https://github.com/imperialcollegelondon/sharpy/tree/2.3) (2024-05-10)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.2...2.3)
**Implemented enhancements:**
- Version 2.3 update [\#289](https://github.com/ImperialCollegeLondon/sharpy/pull/289) ([ben-l-p](https://github.com/ben-l-p))
- Update develop branch with main [\#284](https://github.com/ImperialCollegeLondon/sharpy/pull/284) ([ben-l-p](https://github.com/ben-l-p))
- Added pip install \(with docs\) [\#280](https://github.com/ImperialCollegeLondon/sharpy/pull/280) ([ben-l-p](https://github.com/ben-l-p))
- Update beamplot.py to have stride option, consistent with aerogridplot.py [\#279](https://github.com/ImperialCollegeLondon/sharpy/pull/279) ([kccwing](https://github.com/kccwing))
**Fixed bugs:**
- Fix Github Runner Docker build failing [\#285](https://github.com/ImperialCollegeLondon/sharpy/pull/285) ([ben-l-p](https://github.com/ben-l-p))
- Add scipy version info to env yml [\#277](https://github.com/ImperialCollegeLondon/sharpy/pull/277) ([SJ-Innovation](https://github.com/SJ-Innovation))
**Closed issues:**
- Scipy 1.12.0 Incompatible [\#276](https://github.com/ImperialCollegeLondon/sharpy/issues/276)
- BeamLoader postprocessor squishing answers [\#270](https://github.com/ImperialCollegeLondon/sharpy/issues/270)
- Solving Environment gets killed. [\#268](https://github.com/ImperialCollegeLondon/sharpy/issues/268)
- Error when running sharpy unittest: module scipy.sparse.\_sputils not found [\#227](https://github.com/ImperialCollegeLondon/sharpy/issues/227)
- Potential bug in /sharpy/structure/utils/modalutils.py [\#208](https://github.com/ImperialCollegeLondon/sharpy/issues/208)
**Merged pull requests:**
- Added ability to turn aligned grid off [\#288](https://github.com/ImperialCollegeLondon/sharpy/pull/288) ([ben-l-p](https://github.com/ben-l-p))
- Update with main for mamba fixes [\#286](https://github.com/ImperialCollegeLondon/sharpy/pull/286) ([ben-l-p](https://github.com/ben-l-p))
- Correct typos caught by Divya Sanghi [\#283](https://github.com/ImperialCollegeLondon/sharpy/pull/283) ([bbahiam](https://github.com/bbahiam))
- Develop: Update environment.yml to fix scipy version issue [\#282](https://github.com/ImperialCollegeLondon/sharpy/pull/282) ([kccwing](https://github.com/kccwing))
- Update noaero.py for consistency in function input [\#275](https://github.com/ImperialCollegeLondon/sharpy/pull/275) ([kccwing](https://github.com/kccwing))
- A few minor bug fixes [\#273](https://github.com/ImperialCollegeLondon/sharpy/pull/273) ([sduess](https://github.com/sduess))
- Update XBeam version to include compiler optimisation [\#272](https://github.com/ImperialCollegeLondon/sharpy/pull/272) ([ben-l-p](https://github.com/ben-l-p))
- Update XBeam version to include compiler optimisation [\#271](https://github.com/ImperialCollegeLondon/sharpy/pull/271) ([ben-l-p](https://github.com/ben-l-p))
- Improve docs and code of newmark\_ss [\#267](https://github.com/ImperialCollegeLondon/sharpy/pull/267) ([bbahiam](https://github.com/bbahiam))
- Changed Github runner from Conda to Mamba [\#266](https://github.com/ImperialCollegeLondon/sharpy/pull/266) ([ben-l-p](https://github.com/ben-l-p))
- Changed Github runner from Conda to Mamba [\#265](https://github.com/ImperialCollegeLondon/sharpy/pull/265) ([ben-l-p](https://github.com/ben-l-p))
- Hotfix for documentation search [\#264](https://github.com/ImperialCollegeLondon/sharpy/pull/264) ([kccwing](https://github.com/kccwing))
- Hotfix for documentation - develop [\#263](https://github.com/ImperialCollegeLondon/sharpy/pull/263) ([kccwing](https://github.com/kccwing))
- Hotfix for documentation - main [\#262](https://github.com/ImperialCollegeLondon/sharpy/pull/262) ([kccwing](https://github.com/kccwing))
- Merging v2.2 into develop [\#261](https://github.com/ImperialCollegeLondon/sharpy/pull/261) ([kccwing](https://github.com/kccwing))
## [2.2](https://github.com/imperialcollegelondon/sharpy/tree/2.2) (2023-10-18)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.1...2.2)
**Implemented enhancements:**
- Added environment for Apple Silicon \(ARM64\) [\#254](https://github.com/ImperialCollegeLondon/sharpy/pull/254) ([ben-l-p](https://github.com/ben-l-p))
- New Fuselage Model plus Minor Improvements [\#249](https://github.com/ImperialCollegeLondon/sharpy/pull/249) ([sduess](https://github.com/sduess))
**Fixed bugs:**
- fix polars concatenation in assembly of aeroinformation - develop [\#253](https://github.com/ImperialCollegeLondon/sharpy/pull/253) ([kccwing](https://github.com/kccwing))
- fix polars concatenation in assembly of aeroinformation - main [\#252](https://github.com/ImperialCollegeLondon/sharpy/pull/252) ([kccwing](https://github.com/kccwing))
- Minor bug fixes in aero util functions and save data postprocessor [\#247](https://github.com/ImperialCollegeLondon/sharpy/pull/247) ([sduess](https://github.com/sduess))
**Closed issues:**
- Automated tests failed : UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 47: ordinal not in range\(128\) [\#245](https://github.com/ImperialCollegeLondon/sharpy/issues/245)
- Wrong key in settings for /cases/templates/flying\_wings.py [\#205](https://github.com/ImperialCollegeLondon/sharpy/issues/205)
**Merged pull requests:**
- merging develop into main for v2.2 [\#259](https://github.com/ImperialCollegeLondon/sharpy/pull/259) ([kccwing](https://github.com/kccwing))
- fix \[docker\] use correct environment name in docker bashrc [\#257](https://github.com/ImperialCollegeLondon/sharpy/pull/257) ([sduess](https://github.com/sduess))
- Update docker environment [\#255](https://github.com/ImperialCollegeLondon/sharpy/pull/255) ([sduess](https://github.com/sduess))
- Update README.md [\#246](https://github.com/ImperialCollegeLondon/sharpy/pull/246) ([rafapalacios](https://github.com/rafapalacios))
- bringing commits to main into develop [\#244](https://github.com/ImperialCollegeLondon/sharpy/pull/244) ([rafapalacios](https://github.com/rafapalacios))
- Updates to plotutils.py and the cantilever\_wing demo [\#242](https://github.com/ImperialCollegeLondon/sharpy/pull/242) ([boltyboi](https://github.com/boltyboi))
- Small additions to the installation guide. [\#241](https://github.com/ImperialCollegeLondon/sharpy/pull/241) ([boltyboi](https://github.com/boltyboi))
- Tutorial for closed-Loop Simulation with SHARPy as a hardware-in-the-loop system [\#240](https://github.com/ImperialCollegeLondon/sharpy/pull/240) ([sduess](https://github.com/sduess))
## [2.1](https://github.com/imperialcollegelondon/sharpy/tree/2.1) (2023-05-31)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/2.0...2.1)
**Implemented enhancements:**
- SHARPy Docker now releases to GitHub Packages [\#218](https://github.com/ImperialCollegeLondon/sharpy/pull/218) ([ngoiz](https://github.com/ngoiz))
- Some Enhancements and Fixes for the Polar Correction, Wake Discretisation, and Gust Velocity Field Generator [\#217](https://github.com/ImperialCollegeLondon/sharpy/pull/217) ([sduess](https://github.com/sduess))
- Collective blade pitch PID control of wind turbines [\#176](https://github.com/ImperialCollegeLondon/sharpy/pull/176) ([ArturoMS13](https://github.com/ArturoMS13))
**Fixed bugs:**
- Handle absolute tolerance for structural convergence tests as input settings and increase default value [\#221](https://github.com/ImperialCollegeLondon/sharpy/pull/221) ([sduess](https://github.com/sduess))
- Fix horseshoe wake handling in UVLM [\#204](https://github.com/ImperialCollegeLondon/sharpy/pull/204) ([sduess](https://github.com/sduess))
**Closed issues:**
- No such file or directory during: source bin/sharpy\_vars.sh [\#233](https://github.com/ImperialCollegeLondon/sharpy/issues/233)
- Twist direction inconsistent [\#212](https://github.com/ImperialCollegeLondon/sharpy/issues/212)
**Merged pull requests:**
- Version number updates for 2.1 from develop [\#237](https://github.com/ImperialCollegeLondon/sharpy/pull/237) ([kccwing](https://github.com/kccwing))
- Merge to main for version 2.0.1 release [\#236](https://github.com/ImperialCollegeLondon/sharpy/pull/236) ([kccwing](https://github.com/kccwing))
- Updates to Goland wing example [\#234](https://github.com/ImperialCollegeLondon/sharpy/pull/234) ([rafapalacios](https://github.com/rafapalacios))
- A bit of clean-up of the readme file of the repo [\#231](https://github.com/ImperialCollegeLondon/sharpy/pull/231) ([rafapalacios](https://github.com/rafapalacios))
- Dev internals [\#223](https://github.com/ImperialCollegeLondon/sharpy/pull/223) ([ACea15](https://github.com/ACea15))
- updating from python 3.7 to 3.10 [\#222](https://github.com/ImperialCollegeLondon/sharpy/pull/222) ([kccwing](https://github.com/kccwing))
- Fix typo in setting [\#206](https://github.com/ImperialCollegeLondon/sharpy/pull/206) ([sduess](https://github.com/sduess))
## [2.0](https://github.com/imperialcollegelondon/sharpy/tree/2.0) (2022-07-04)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/1.3...2.0)
**Implemented enhancements:**
- Plot the aeroelastic mode shape to Paraview [\#202](https://github.com/ImperialCollegeLondon/sharpy/pull/202) ([ngoiz](https://github.com/ngoiz))
- Enhanced linear solver [\#196](https://github.com/ImperialCollegeLondon/sharpy/pull/196) ([ngoiz](https://github.com/ngoiz))
- Add pip support [\#175](https://github.com/ImperialCollegeLondon/sharpy/pull/175) ([DavidAnderegg](https://github.com/DavidAnderegg))
**Fixed bugs:**
- Flap inputs in state-space model not working in certain wing configurations [\#192](https://github.com/ImperialCollegeLondon/sharpy/issues/192)
- Fix mass matrix generation for lumped masses in case of several masses per node [\#194](https://github.com/ImperialCollegeLondon/sharpy/pull/194) ([sduess](https://github.com/sduess))
- Fix the sparse matrix in balancing ROM [\#186](https://github.com/ImperialCollegeLondon/sharpy/pull/186) ([AntonioWR](https://github.com/AntonioWR))
**Closed issues:**
- scipy used for direct balancing method [\#184](https://github.com/ImperialCollegeLondon/sharpy/issues/184)
- Potential Issue in the balancing direct method [\#183](https://github.com/ImperialCollegeLondon/sharpy/issues/183)
- Why no pip support? [\#171](https://github.com/ImperialCollegeLondon/sharpy/issues/171)
**Merged pull requests:**
- Contain write operations within with statements [\#195](https://github.com/ImperialCollegeLondon/sharpy/pull/195) ([ngoiz](https://github.com/ngoiz))
- Support loading/saving state-spaces and gains to h5 files [\#188](https://github.com/ImperialCollegeLondon/sharpy/pull/188) ([ngoiz](https://github.com/ngoiz))
- Update installation docs [\#187](https://github.com/ImperialCollegeLondon/sharpy/pull/187) ([nacho-carnicero](https://github.com/nacho-carnicero))
- Unittest for nonlinear dynamic solver [\#185](https://github.com/ImperialCollegeLondon/sharpy/pull/185) ([sduess](https://github.com/sduess))
- Change in the io-Settings to add thrust. [\#164](https://github.com/ImperialCollegeLondon/sharpy/pull/164) ([Eriklyy](https://github.com/Eriklyy))
- UDP-Inout change for multiply cs\_surface\_deflections and loads/strain [\#162](https://github.com/ImperialCollegeLondon/sharpy/pull/162) ([Eriklyy](https://github.com/Eriklyy))
- Update AsymptoticStability and FrequencyResponse post-processors [\#103](https://github.com/ImperialCollegeLondon/sharpy/pull/103) ([ngoiz](https://github.com/ngoiz))
## [1.3](https://github.com/imperialcollegelondon/sharpy/tree/1.3) (2021-11-11)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.2.1...1.3)
**Implemented enhancements:**
- Include gravity direction as input for structural solvers [\#112](https://github.com/ImperialCollegeLondon/sharpy/issues/112)
- Simulation settings check - Unrecognised settings raise Error [\#148](https://github.com/ImperialCollegeLondon/sharpy/pull/148) ([ngoiz](https://github.com/ngoiz))
- Aerodynamic forces correction enhancements [\#140](https://github.com/ImperialCollegeLondon/sharpy/pull/140) ([ngoiz](https://github.com/ngoiz))
- New feature: apply external forces to the system at runtime [\#125](https://github.com/ImperialCollegeLondon/sharpy/pull/125) ([ArturoMS13](https://github.com/ArturoMS13))
- Lift distribution post-processor [\#121](https://github.com/ImperialCollegeLondon/sharpy/pull/121) ([sduess](https://github.com/sduess))
**Fixed bugs:**
- Fix bug in computing total moments in A frame [\#177](https://github.com/ImperialCollegeLondon/sharpy/pull/177) ([ngoiz](https://github.com/ngoiz))
**Closed issues:**
- Unrecognised model in goland test case [\#143](https://github.com/ImperialCollegeLondon/sharpy/issues/143)
**Merged pull requests:**
- Implement GitHub Actions as testing suite provider [\#179](https://github.com/ImperialCollegeLondon/sharpy/pull/179) ([ngoiz](https://github.com/ngoiz))
- Update submodules and conda environments [\#161](https://github.com/ImperialCollegeLondon/sharpy/pull/161) ([sduess](https://github.com/sduess))
- Support element variables in UDP output [\#160](https://github.com/ImperialCollegeLondon/sharpy/pull/160) ([ngoiz](https://github.com/ngoiz))
- Output directory in the location specified in settings\[SHARPy\]\[log\_folder\] [\#130](https://github.com/ImperialCollegeLondon/sharpy/pull/130) ([ngoiz](https://github.com/ngoiz))
- Update and include features in multibody [\#126](https://github.com/ImperialCollegeLondon/sharpy/pull/126) ([ArturoMS13](https://github.com/ArturoMS13))
- Update linear UVLM to account for CFL not equal to one in the wake convection [\#124](https://github.com/ImperialCollegeLondon/sharpy/pull/124) ([ArturoMS13](https://github.com/ArturoMS13))
- Minor changes [\#123](https://github.com/ImperialCollegeLondon/sharpy/pull/123) ([ArturoMS13](https://github.com/ArturoMS13))
## [v1.2.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.2.1) (2021-02-09)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.2...v1.2.1)
**Implemented enhancements:**
- Allow CFL != 1in shedding step [\#78](https://github.com/ImperialCollegeLondon/sharpy/issues/78)
- Vortex wake managed by SHARPy [\#77](https://github.com/ImperialCollegeLondon/sharpy/issues/77)
- Recover vortex core in UVLM [\#76](https://github.com/ImperialCollegeLondon/sharpy/issues/76)
- Include viscous drag force from airfoil properties [\#75](https://github.com/ImperialCollegeLondon/sharpy/issues/75)
**Fixed bugs:**
- Bug in beamstructure.py [\#117](https://github.com/ImperialCollegeLondon/sharpy/issues/117)
- Definition of control surfaces and impact of node ordering in mirrored wings [\#43](https://github.com/ImperialCollegeLondon/sharpy/issues/43)
**Closed issues:**
- examples refer to non-existent solver SHWUvlm [\#119](https://github.com/ImperialCollegeLondon/sharpy/issues/119)
- Potential bug in xbeam and cbeam interfaces [\#89](https://github.com/ImperialCollegeLondon/sharpy/issues/89)
- Update packages producing deprecation warnings and tackle other warnings [\#80](https://github.com/ImperialCollegeLondon/sharpy/issues/80)
**Merged pull requests:**
- Rigid coupled solver [\#120](https://github.com/ImperialCollegeLondon/sharpy/pull/120) ([ArturoMS13](https://github.com/ArturoMS13))
- Support to save ROM projector matrices [\#118](https://github.com/ImperialCollegeLondon/sharpy/pull/118) ([ngoiz](https://github.com/ngoiz))
## [v1.2](https://github.com/imperialcollegelondon/sharpy/tree/v1.2) (2020-12-03)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.1...v1.2)
**Implemented enhancements:**
- Quasi-steady solver in stepuvlm [\#114](https://github.com/ImperialCollegeLondon/sharpy/pull/114) ([ArturoMS13](https://github.com/ArturoMS13))
- Generator to modify structural mass at runtime [\#107](https://github.com/ImperialCollegeLondon/sharpy/pull/107) ([ngoiz](https://github.com/ngoiz))
- Sends simulation info to xplane via udp [\#104](https://github.com/ImperialCollegeLondon/sharpy/pull/104) ([wong-hl](https://github.com/wong-hl))
- Major new aerodynamic features [\#101](https://github.com/ImperialCollegeLondon/sharpy/pull/101) ([ArturoMS13](https://github.com/ArturoMS13))
- Simple post-processor to save simulation parameters for batch runs [\#91](https://github.com/ImperialCollegeLondon/sharpy/pull/91) ([ngoiz](https://github.com/ngoiz))
- SHARPy support for external inputs via UDP network [\#90](https://github.com/ImperialCollegeLondon/sharpy/pull/90) ([ngoiz](https://github.com/ngoiz))
- Vortex radius as input parameter [\#86](https://github.com/ImperialCollegeLondon/sharpy/pull/86) ([ArturoMS13](https://github.com/ArturoMS13))
- Enhanced Frequency Response post-processor and linear system input/output options [\#83](https://github.com/ImperialCollegeLondon/sharpy/pull/83) ([ngoiz](https://github.com/ngoiz))
- Pazi wing added to flying\_wing template [\#82](https://github.com/ImperialCollegeLondon/sharpy/pull/82) ([outoforderdev](https://github.com/outoforderdev))
- Several new aerodynamic enhancements [\#79](https://github.com/ImperialCollegeLondon/sharpy/pull/79) ([ArturoMS13](https://github.com/ArturoMS13))
**Fixed bugs:**
- libss.py disc2cont doesn't accept SISO systems [\#88](https://github.com/ImperialCollegeLondon/sharpy/issues/88)
- Dimension mismatch when assembling linear UVLM with "shortened" wake [\#71](https://github.com/ImperialCollegeLondon/sharpy/issues/71)
- Fix bug wake shape generator StaticCoupled [\#85](https://github.com/ImperialCollegeLondon/sharpy/pull/85) ([ArturoMS13](https://github.com/ArturoMS13))
- Rework of direct balancing [\#74](https://github.com/ImperialCollegeLondon/sharpy/pull/74) ([outoforderdev](https://github.com/outoforderdev))
**Closed issues:**
- \[develop\] Documentation for postprocs not rendering in RTD [\#109](https://github.com/ImperialCollegeLondon/sharpy/issues/109)
- Numerical error in the linear UVLM output matrices when vortex radius is too small [\#105](https://github.com/ImperialCollegeLondon/sharpy/issues/105)
- fatal error: mkl.h: No such file or directory [\#70](https://github.com/ImperialCollegeLondon/sharpy/issues/70)
- lingebm.py -\> update\_matrices\_time\_scale [\#69](https://github.com/ImperialCollegeLondon/sharpy/issues/69)
- Missing node connectivities figure in case files documentation [\#68](https://github.com/ImperialCollegeLondon/sharpy/issues/68)
**Merged pull requests:**
- \[fix\] Fixed bug in Gridbox class [\#111](https://github.com/ImperialCollegeLondon/sharpy/pull/111) ([sduess](https://github.com/sduess))
- Include linear UVLM stiffening and damping terms in the UVLM D matrix [\#108](https://github.com/ImperialCollegeLondon/sharpy/pull/108) ([ngoiz](https://github.com/ngoiz))
- Fix accuracy problem in UVLMLin [\#106](https://github.com/ImperialCollegeLondon/sharpy/pull/106) ([ArturoMS13](https://github.com/ArturoMS13))
- Minor improvements [\#102](https://github.com/ImperialCollegeLondon/sharpy/pull/102) ([ngoiz](https://github.com/ngoiz))
- Linearisation of externally applied follower forces [\#100](https://github.com/ImperialCollegeLondon/sharpy/pull/100) ([ngoiz](https://github.com/ngoiz))
- Updated docs for DataStructures and Multibody [\#99](https://github.com/ImperialCollegeLondon/sharpy/pull/99) ([ArturoMS13](https://github.com/ArturoMS13))
- Support linearised all-moving control surfaces [\#97](https://github.com/ImperialCollegeLondon/sharpy/pull/97) ([ngoiz](https://github.com/ngoiz))
- Update Linux and minimal environments [\#96](https://github.com/ImperialCollegeLondon/sharpy/pull/96) ([ngoiz](https://github.com/ngoiz))
- New approach to multibody computations [\#95](https://github.com/ImperialCollegeLondon/sharpy/pull/95) ([ArturoMS13](https://github.com/ArturoMS13))
- New SHARPy examples in the documentation [\#94](https://github.com/ImperialCollegeLondon/sharpy/pull/94) ([ArturoMS13](https://github.com/ArturoMS13))
- Add support for offline use of UDPout postproc [\#93](https://github.com/ImperialCollegeLondon/sharpy/pull/93) ([ngoiz](https://github.com/ngoiz))
- Option to transform rigid modes given at A FoR to centre of gravity and aligned with principal axes of inertia [\#92](https://github.com/ImperialCollegeLondon/sharpy/pull/92) ([ngoiz](https://github.com/ngoiz))
- Pazy wing modified to include the tip weight [\#87](https://github.com/ImperialCollegeLondon/sharpy/pull/87) ([outoforderdev](https://github.com/outoforderdev))
- Minor output clean up [\#81](https://github.com/ImperialCollegeLondon/sharpy/pull/81) ([ngoiz](https://github.com/ngoiz))
- Fixes assembly of linUVLM after plotting wake with minus m\_star [\#72](https://github.com/ImperialCollegeLondon/sharpy/pull/72) ([ngoiz](https://github.com/ngoiz))
## [v1.1.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.1) (2020-02-03)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.0-2...v1.1.1)
**Implemented enhancements:**
- User-defined aerodynamic airfoil efficiency factor and constant force terms [\#59](https://github.com/ImperialCollegeLondon/sharpy/pull/59) ([ngoiz](https://github.com/ngoiz))
**Closed issues:**
- Broken link on SHARPy Installation Guide [\#67](https://github.com/ImperialCollegeLondon/sharpy/issues/67)
- Update citation instructions [\#62](https://github.com/ImperialCollegeLondon/sharpy/issues/62)
- Incorrect version tag displayed when running SHARPy [\#61](https://github.com/ImperialCollegeLondon/sharpy/issues/61)
- Clean up SHARPy linear interface with UVLM [\#48](https://github.com/ImperialCollegeLondon/sharpy/issues/48)
**Merged pull requests:**
- Documentation Improvements [\#66](https://github.com/ImperialCollegeLondon/sharpy/pull/66) ([ngoiz](https://github.com/ngoiz))
- Minor fixes and general code clean up of linear modules [\#65](https://github.com/ImperialCollegeLondon/sharpy/pull/65) ([ngoiz](https://github.com/ngoiz))
- Error log file created when program encounters exceptions [\#64](https://github.com/ImperialCollegeLondon/sharpy/pull/64) ([ngoiz](https://github.com/ngoiz))
- Update README.md [\#63](https://github.com/ImperialCollegeLondon/sharpy/pull/63) ([rafapalacios](https://github.com/rafapalacios))
- Clean up linear SHARPy's interface with UVLM [\#60](https://github.com/ImperialCollegeLondon/sharpy/pull/60) ([ngoiz](https://github.com/ngoiz))
## [v1.1.0-2](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.0-2) (2019-12-12)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.1.0...v1.1.0-2)
## [v1.1.0](https://github.com/imperialcollegelondon/sharpy/tree/v1.1.0) (2019-12-12)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.0.1...v1.1.0)
**Implemented enhancements:**
- Improvements to Model Reduction [\#56](https://github.com/ImperialCollegeLondon/sharpy/pull/56) ([ngoiz](https://github.com/ngoiz))
- Submodules and cmake build tools instead of Makefiles [\#52](https://github.com/ImperialCollegeLondon/sharpy/pull/52) ([fonsocarre](https://github.com/fonsocarre))
- New settings check against valid options [\#39](https://github.com/ImperialCollegeLondon/sharpy/pull/39) ([ngoiz](https://github.com/ngoiz))
- Default settings get type specified for the setting rather than their own type [\#34](https://github.com/ImperialCollegeLondon/sharpy/pull/34) ([ngoiz](https://github.com/ngoiz))
**Fixed bugs:**
- Default value not correct in documentation when it is a numpy type. [\#32](https://github.com/ImperialCollegeLondon/sharpy/issues/32)
- Documentation for Postprocessors being skipped by Sphinx in RTD [\#30](https://github.com/ImperialCollegeLondon/sharpy/issues/30)
**Closed issues:**
- Minor documentation issues [\#53](https://github.com/ImperialCollegeLondon/sharpy/issues/53)
- WindTurbine case generation script does not produce sharpy file [\#50](https://github.com/ImperialCollegeLondon/sharpy/issues/50)
- Considerations for building SHARPy [\#47](https://github.com/ImperialCollegeLondon/sharpy/issues/47)
- Installation fails on macOS with Intel compiler [\#46](https://github.com/ImperialCollegeLondon/sharpy/issues/46)
- run\_theo\_freq.py fails in Docker container [\#37](https://github.com/ImperialCollegeLondon/sharpy/issues/37)
- Compare to other competing software in JOSS paper [\#36](https://github.com/ImperialCollegeLondon/sharpy/issues/36)
**Merged pull requests:**
- Example wind turbine [\#58](https://github.com/ImperialCollegeLondon/sharpy/pull/58) ([ArturoMS13](https://github.com/ArturoMS13))
- Small typo in README.md and updates to it [\#57](https://github.com/ImperialCollegeLondon/sharpy/pull/57) ([fonsocarre](https://github.com/fonsocarre))
- Restructuring of A Short Guide to SHARPy [\#55](https://github.com/ImperialCollegeLondon/sharpy/pull/55) ([ngoiz](https://github.com/ngoiz))
- JOSS Paper Minor typos fixed [\#54](https://github.com/ImperialCollegeLondon/sharpy/pull/54) ([ngoiz](https://github.com/ngoiz))
- Update .solver.txt extension to .sharpy [\#51](https://github.com/ImperialCollegeLondon/sharpy/pull/51) ([ArturoMS13](https://github.com/ArturoMS13))
- Fix typo in unittests using tearDowns instead of tearDown [\#49](https://github.com/ImperialCollegeLondon/sharpy/pull/49) ([ngoiz](https://github.com/ngoiz))
- Bug fixes in installation docs [\#45](https://github.com/ImperialCollegeLondon/sharpy/pull/45) ([rafmudaf](https://github.com/rafmudaf))
- Updated installation instructions [\#44](https://github.com/ImperialCollegeLondon/sharpy/pull/44) ([ngoiz](https://github.com/ngoiz))
- Travis CI now uses the minimal environment, the same as the Docker build [\#42](https://github.com/ImperialCollegeLondon/sharpy/pull/42) ([fonsocarre](https://github.com/fonsocarre))
- Remove calls to matplotlib \(or wrap in try except\) [\#41](https://github.com/ImperialCollegeLondon/sharpy/pull/41) ([ngoiz](https://github.com/ngoiz))
- Added information about competing software in JOSS paper [\#40](https://github.com/ImperialCollegeLondon/sharpy/pull/40) ([fonsocarre](https://github.com/fonsocarre))
- Removes deprecated case files from cases folder [\#38](https://github.com/ImperialCollegeLondon/sharpy/pull/38) ([ngoiz](https://github.com/ngoiz))
- Change position of --name argument in docs [\#35](https://github.com/ImperialCollegeLondon/sharpy/pull/35) ([petebachant](https://github.com/petebachant))
- Improvements in documentation [\#31](https://github.com/ImperialCollegeLondon/sharpy/pull/31) ([ngoiz](https://github.com/ngoiz))
## [v1.0.1](https://github.com/imperialcollegelondon/sharpy/tree/v1.0.1) (2019-11-17)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/1.0.0...v1.0.1)
**Implemented enhancements:**
- New example of linearised flying wing [\#28](https://github.com/ImperialCollegeLondon/sharpy/pull/28) ([ngoiz](https://github.com/ngoiz))
- SHARPy can now be obtained from a Docker Hub container [\#27](https://github.com/ImperialCollegeLondon/sharpy/pull/27) ([fonsocarre](https://github.com/fonsocarre))
- Improved modal solver [\#26](https://github.com/ImperialCollegeLondon/sharpy/pull/26) ([fonsocarre](https://github.com/fonsocarre))
- Updated function calls for latest numpy 1.17 [\#25](https://github.com/ImperialCollegeLondon/sharpy/pull/25) ([ngoiz](https://github.com/ngoiz))
- Examples added to documentation [\#24](https://github.com/ImperialCollegeLondon/sharpy/pull/24) ([fonsocarre](https://github.com/fonsocarre))
- Improved linear solver documentation and minor Krylov ROM fixes [\#23](https://github.com/ImperialCollegeLondon/sharpy/pull/23) ([ngoiz](https://github.com/ngoiz))
- change log generator incorporated [\#22](https://github.com/ImperialCollegeLondon/sharpy/pull/22) ([ngoiz](https://github.com/ngoiz))
**Merged pull requests:**
- Version v1.0.1 released [\#29](https://github.com/ImperialCollegeLondon/sharpy/pull/29) ([fonsocarre](https://github.com/fonsocarre))
## [1.0.0](https://github.com/imperialcollegelondon/sharpy/tree/1.0.0) (2019-11-07)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v1.0.0-rc...1.0.0)
**Implemented enhancements:**
- WriteVariablesTime output global beam variables and consistent out dir [\#19](https://github.com/ImperialCollegeLondon/sharpy/pull/19) ([ngoiz](https://github.com/ngoiz))
- Autodocumenter [\#16](https://github.com/ImperialCollegeLondon/sharpy/pull/16) ([ngoiz](https://github.com/ngoiz))
**Closed issues:**
- Tests not passing due to them being outdated + test refactoring. [\#11](https://github.com/ImperialCollegeLondon/sharpy/issues/11)
**Merged pull requests:**
- Release of v1.0.0!!! [\#20](https://github.com/ImperialCollegeLondon/sharpy/pull/20) ([fonsocarre](https://github.com/fonsocarre))
- Documentation fixes/updates [\#18](https://github.com/ImperialCollegeLondon/sharpy/pull/18) ([ngoiz](https://github.com/ngoiz))
- Fix dynamic control surface and settings for aerogridloader [\#15](https://github.com/ImperialCollegeLondon/sharpy/pull/15) ([ngoiz](https://github.com/ngoiz))
## [v1.0.0-rc](https://github.com/imperialcollegelondon/sharpy/tree/v1.0.0-rc) (2019-08-22)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/V0.2.1...v1.0.0-rc)
**Closed issues:**
- Output table [\#10](https://github.com/ImperialCollegeLondon/sharpy/issues/10)
**Merged pull requests:**
- Remove H5pyDeprecationWarning [\#14](https://github.com/ImperialCollegeLondon/sharpy/pull/14) ([ArturoMS13](https://github.com/ArturoMS13))
- Lagrange multipliers for Catapult Take Off works + clean tests [\#13](https://github.com/ImperialCollegeLondon/sharpy/pull/13) ([fonsocarre](https://github.com/fonsocarre))
## [V0.2.1](https://github.com/imperialcollegelondon/sharpy/tree/V0.2.1) (2019-03-14)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v0.2...V0.2.1)
## [v0.2](https://github.com/imperialcollegelondon/sharpy/tree/v0.2) (2019-03-14)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/v0.1...v0.2)
**Closed issues:**
- Add recovery options [\#9](https://github.com/ImperialCollegeLondon/sharpy/issues/9)
## [v0.1](https://github.com/imperialcollegelondon/sharpy/tree/v0.1) (2018-09-03)
[Full Changelog](https://github.com/imperialcollegelondon/sharpy/compare/bd2b65974d57d2d6486ea90cdb68ef6324efbac8...v0.1)
**Implemented enhancements:**
- Hinge definition for control surface [\#8](https://github.com/ImperialCollegeLondon/sharpy/issues/8)
- sharpy\_main.main does not return output [\#5](https://github.com/ImperialCollegeLondon/sharpy/issues/5)
**Fixed bugs:**
- Aerofoil data associated to the nodes instead of the elements [\#6](https://github.com/ImperialCollegeLondon/sharpy/issues/6)
**Merged pull requests:**
- Trimming routine working [\#4](https://github.com/ImperialCollegeLondon/sharpy/pull/4) ([fonsocarre](https://github.com/fonsocarre))
- Feature coupled dynamic [\#3](https://github.com/ImperialCollegeLondon/sharpy/pull/3) ([fonsocarre](https://github.com/fonsocarre))
- Refactored storage finished [\#2](https://github.com/ImperialCollegeLondon/sharpy/pull/2) ([fonsocarre](https://github.com/fonsocarre))
- Settings files are ConfigObjs now, not ConfigParser anymore [\#1](https://github.com/ImperialCollegeLondon/sharpy/pull/1) ([fonsocarre](https://github.com/fonsocarre))
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.9)
project(sharpy)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
add_subdirectory(lib)
================================================
FILE: Dockerfile
================================================
FROM centos:8
ENV PYTHONDONTWRITEBYTECODE=true
ENV BASH_ENV ~/.bashrc
SHELL ["/bin/bash", "-c"]
ENV PATH=${PATH}:/mamba/bin
# CENTOS 8 has reached end of life - Not yet an updated Docker base for CentOS stream
# Point to the CentOS 8 vault in order to download dependencies
RUN cd /etc/yum.repos.d/ && \
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* && \
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* && \
cd /
# Development tools including compilers
RUN yum groupinstall "Development Tools" -y --nogpgcheck && \
yum install dnf-plugins-core && \
yum config-manager --set-enabled powertools && \
yum install -y --nogpgcheck mesa-libGL libXt libXt-devel wget gcc-gfortran lapack vim tmux eigen3-devel && \
yum clean all
# Install Mamba - swapped from Conda to Mamba due to Github runner memory constraint
# Mambaforge is deprecated in latest miniforge https://github.com/conda-forge/miniforge/pull/704
RUN wget --no-check-certificate https://github.com/conda-forge/miniforge/releases/download/24.7.1-0/Mambaforge-Linux-x86_64.sh -O /mamba.sh && \
chmod +x /mamba.sh && \
/mamba.sh -b -p /mamba/ && \
rm /mamba.sh && hash -r
ADD / /sharpy_dir/
# Initialise mamba installation
RUN mamba init bash && \
mamba update -q conda && \
mamba env create -f /sharpy_dir/utils/environment.yml && \
find /mamba/ -follow -type f -name '*.a' -delete && \
find /mamba/ -follow -type f -name '*.pyc' -delete && \
find /mamba/ -follow -type f -name '*.js.map' -delete
RUN ln -s /sharpy_dir/utils/docker/* /root/
RUN cd sharpy_dir && \
mamba activate sharpy && \
git submodule update --init --recursive && \
mkdir build && \
cd build && \
CXX=g++ FC=gfortran cmake .. && make install -j 4 && \
cd .. && \
pip install . && \
rm -rf build
ENTRYPOINT ["/bin/bash", "--init-file", "/root/bashrc"]
================================================
FILE: LICENSE
================================================
BSD 3-Clause License
Copyright (c) 2019, Loads Control and Aeroelastics, Imperial College London
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
================================================
FILE: README.md
================================================
# Simulation of High Aspect Ratio aeroplanes in Python [SHARPy]


[](https://ic-sharpy.readthedocs.io/en/main/?badge=main)
[](https://codecov.io/gh/ImperialCollegeLondon/sharpy)
[](https://opensource.org/licenses/BSD-3-Clause)
[](https://joss.theoj.org/papers/f7ccd562160f1a54f64a81e90f5d9af9)
[](https://doi.org/10.5281/zenodo.3531965)
SHARPy is a nonlinear aeroelastic analysis package originally developed at the Department of Aeronautics, Imperial
College London. It can be used for the structural, aerodynamic and aeroelastic analysis of flexible wings, aircraft and wind turbines. It is shared here under a BSD 3-Clause permissive license.

### Contact
For more information on the [research team](http://www.imperial.ac.uk/aeroelastics/software/) developing SHARPy or to get
in touch, [visit our homepage](http://www.imperial.ac.uk/aeroelastics).
## Physical Models
SHARPy is a modular aeroelastic solver that currently uses two specific models for the structural and aerodynamic response of the system.
For the structural model, SHARPy employs a geometrically-exact displacement-based composite beam formulation,
augmented with Lagrange multipliers for additional kinematic constraints.
This model has the advantage of providing the solution directly in the physical problem's degrees of freedom, making the
coupling with the aerodynamic solver simple and not requiring any post-processing. The 1D beam formulation used limits
the analyses that can be done by SHARPy to slender structures, such as high aspect ratio wings.
The aerodynamic model utilises the Unsteady Vortex Lattice Method (UVLM). The aerodynamic surfaces are modelled as a thin
vortex ring lattice with the boundary conditions enforced at the collocation points in the middle of the vortex rings.
The Kutta condition is also enforced at the trailing edge. The wake can be simulated by either additional vortex rings
or by infinitely long horseshoe vortices, which are ideally suited for steady simulations only.
The aerodynamic model has recently been extended by a linear source panel method (SPM) to model nonlifting bodies for example fuselages. The SPM and UVLM can be coupled to model fuselage-wing configuration and a junction handling approach, based on phantom panels and circulation interpolation, has been added.
The input problems can be structural, aerodynamic or coupled, yielding an aeroelastic system.
## [Capabilities](http://ic-sharpy.readthedocs.io/en/latest/content/capabilities.html)
The base solver SHARPy is a nonlinear aeroelastic analysis package that can be used on free-flying flexible aircraft,
wings and wind turbines. In addition, it supports linearisation of these nonlinear systems about
arbitrary conditions and includes various tools such as: model reduction or frequency analysis.
In short, SHARPy offers (amongst others) the following solutions to the user:
* Static aerodynamic, structural and aeroelastic solutions including fuselage effects
* Finding trim conditions for aeroelastic configurations
* Nonlinear, dynamic time domain simulations under a large number of conditions such as:
+ Prescribed trajectories.
+ Free flight.
+ Dynamic follower forces.
+ Control inputs in thrust, control surface deflection...
+ Arbitrary time-domain gusts, including non span-constant ones.
+ Full 3D turbulent fields.
* Multibody dynamics with hinges, articulations and prescribed nodal motions:
+ Applicable to wind turbines.
+ Hinged aircraft.
+ Catapult assisted takeoffs.
* Linear analysis:
+ Linearisation around a nonlinear equilibrium.
+ Frequency response analysis.
+ Asymptotic stability analysis.
* Model order reduction:
+ Krylov-subspace reduction methods.
+ Several balancing reduction methods.
## Documentation
The documentation for SHARPy can be found [here](http://ic-sharpy.readthedocs.io).
## Installing SHARPy
For the latest documentation, see the
[installation docs](https://ic-sharpy.readthedocs.io/en/latest/content/installation.html).
SHARPy can also be obtained from Docker Hub to avoid compilation
and platform-dependant issues. If you are interested, make sure you check
the [SHARPy Docker distribution docs](https://ic-sharpy.readthedocs.io/en/latest/content/installation.html#using-sharpy-from-a-docker-container).
## Contributing and Bug reports
If you think you can add a useful feature to SHARPy, want to write documentation or you encounter a bug, by all means,
check out the [collaboration guide](https://ic-sharpy.readthedocs.io/en/latest/content/contributing.html).
## Citing SHARPy
SHARPy has been published in the Journal of Open Source Software (JOSS) and the relevant paper can be found
[here](https://joss.theoj.org/papers/10.21105/joss.01885).
If you are using SHARPy for your work, please remember to cite it using the paper in JOSS as:
`del Carre et al., (2019). SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind
turbines. Journal of Open Source Software, 4(44), 1885, https://doi.org/10.21105/joss.01885`
The bibtex entry for this citation is:
```
@Article{delCarre2019,
doi = {10.21105/joss.01885},
url = {https://doi.org/10.21105/joss.01885},
year = {2019},
month = dec,
publisher = {The Open Journal},
volume = {4},
number = {44},
pages = {1885},
author = {Alfonso del Carre and Arturo Mu{\~{n}}oz-Sim\'on and Norberto Goizueta and Rafael Palacios},
title = {{SHARPy}: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines},
journal = {Journal of Open Source Software}
}
```
## Continuous Integration Status
SHARPy uses Continuous Integration to control the integrity of its code. The status in the release and develop branches
is:
Main


Develop

================================================
FILE: docs/.nojekyll
================================================
================================================
FILE: docs/JOSS/codemeta.json
================================================
{
"@context": "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
"@type": "Code",
"author": [
"Alfonso del Carre",
"Arturo Muñoz-Simón",
"Norberto Goizueta",
"Rafael Palacios"
],
"identifier": "",
"codeRepository": "https://github.com/imperialcollegelondon/sharpy",
"datePublished": "2019-11-04",
"dateModified": "2019-11-04",
"dateCreated": "2019-11-04",
"description": "A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines",
"keywords": "aeroelasticity, structural dynamics, aerodynamics, solar flight, perpetual flight, wing energy",
"license": "BSD-3",
"title": "SHARPy",
"version": "v1.0.0-rc1"
}
================================================
FILE: docs/JOSS/generate.rb
================================================
#!/usr/bin/ruby
# For an OO language, this is distinctly procedural. Should probably fix that.
require 'json'
details = Hash.new({})
capture_params = [
{ :name => "title", :message => "Enter project name." },
{ :name => "url", :message => "Enter the URL of the project repository." },
{ :name => "description", :message => "Enter the (short) project description." },
{ :name => "license", :message => "Enter the license this software shared under. (hit enter to skip)\nFor example MIT, BSD, GPL v3.0, Apache 2.0" },
{ :name => "doi", :message => "Enter the DOI of the archived version of this code. (hit enter to skip)\nFor example http://dx.doi.org/10.6084/m9.figshare.828487" },
{ :name => "keywords", :message => "Enter keywords that should be associated with this project (hit enter to skip)\nComma-separated, for example: turkey, chicken, pot pie" },
{ :name => "version", :message => "Enter the version of your software (hit enter to skip)\nSEMVER preferred: http://semver.org e.g. v1.0.0" }
]
puts "I'm going to try and help you prepare some things for your JOSS submission"
puts "If all goes well then we'll have a nice codemeta.json file soon..."
puts ""
puts "************************************"
puts "* First, some basic details *"
puts "************************************"
puts ""
# Loop through the desired captures and print out for clarity
capture_params.each do |param|
puts param[:message]
print "> "
input = gets
details[param[:name]] = input.chomp
puts ""
puts "OK, your project has #{param[:name]}: #{input}"
puts ""
end
puts ""
puts "************************************"
puts "* Experimental stuff *"
puts "************************************"
puts ""
puts "Would you like me to try and build a list of authors for you?"
puts "(You need to be running this script in a git repository for this to work)"
print "> (Y/N)"
answer = gets.chomp
case answer.downcase
when "y", "yes"
# Use git shortlog to extract a list of author names and commit counts.
# Note we don't extract emails here as there's often different emails for
# each user. Instead we capture emails at the end.
git_log = `git shortlog --summary --numbered --no-merges`
# ["252\tMichael Jackson", "151\tMC Hammer"]
authors_and_counts = git_log.split("\n").map(&:strip)
authors_and_counts.each do |author_count|
count, author = author_count.split("\t").map(&:strip)
puts "Looks like #{author} made #{count} commits"
puts "Add them to the output?"
print "> (Y/N)"
answer = gets.chomp
# If a user chooses to add this author to the output then we ask for some
# additional information including their email, ORCID and affiliation.
case answer.downcase
when "y", "yes"
puts "What is #{author}'s email address? (hit enter to skip)"
print "> "
email = gets.chomp
puts "What is #{author}'s ORCID? (hit enter to skip)"
puts "For example: http://orcid.org/0000-0000-0000-0000"
print "> "
orcid = gets.chomp
puts "What is #{author}'s affiliation? (hit enter to skip)"
print "> "
affiliation = gets.chomp
details['authors'].merge!(author => { 'commits' => count,
'email' => email,
'orcid' => orcid,
'affiliation' => affiliation })
when "n", "no"
puts "OK boss..."
puts ""
end
end
when "n", "no"
puts "OK boss..."
puts ""
end
puts "Reticulating splines"
5.times do
print "."
sleep 0.5
end
puts ""
puts "Generating some JSON goodness..."
# TODO: work out how to use some kind of JSON template here.
# Build the output list of authors from the inputs we've collected.
output_authors = []
details['authors'].each do |author_name, values|
entry = {
"@id" => values['orcid'],
"@type" => "Person",
"email" => values['email'],
"name" => author_name,
"affiliation" => values['affiliation']
}
output_authors << entry
end
# TODO: this is currently a static template (written out here). It would be good
# to do something smarter here.
output = {
"@context" => "https://raw.githubusercontent.com/codemeta/codemeta/master/codemeta.jsonld",
"@type" => "Code",
"author" => output_authors,
"identifier" => details['doi'],
"codeRepository" => details['url'],
"datePublished" => Time.now.strftime("%Y-%m-%d"),
"dateModified" => Time.now.strftime("%Y-%m-%d"),
"dateCreated" => Time.now.strftime("%Y-%m-%d"),
"description" => details['description'],
"keywords" => details['keywords'],
"license" => details['license'],
"title" => details['title'],
"version" => details['version']
}
File.open('codemeta.json', 'w') {|f| f.write(JSON.pretty_generate(output)) }
================================================
FILE: docs/JOSS/paper.bib
================================================
% Encoding: UTF-7
@Article{Patil2001,
author = {Mayuresh J. Patil and Dewey H. Hodges and Carlos E. S. Cesnik},
title = {Nonlinear Aeroelasticity and Flight Dynamics of High-Altitude Long-Endurance Aircraft},
journal = {Journal of Aircraft},
year = {2001},
volume = {38},
number = {1},
pages = {88--94},
month = {jan},
doi = {10.2514/2.2738},
groups = {IFASD 2019},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@InProceedings{Simpson2013,
author = {Robert J. Simpson and Rafael Palacios},
title = {Numerical aspects of nonlinear flexible aircraft flight dynamics modeling},
booktitle = {54th {AIAA}/{ASME}/{ASCE}/{AHS}/{ASC} Structures, Structural Dynamics, and Materials Conference},
year = {2013},
month = {apr},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2013-1634},
groups = {IFASD 2019},
}
@Article{Jones2015,
author = {J. R. Jones and C. E. S. Cesnik},
title = {Preliminary flight test correlations of the {X-HALE} aeroelastic experiment},
journal = {The Aeronautical Journal},
year = {2015},
volume = {119},
number = {1217},
pages = {855--870},
month = {jul},
doi = {10.1017/s0001924000010952},
groups = {IFASD 2019},
publisher = {Cambridge University Press ({CUP})},
}
@PhdThesis{Jones2017,
author = {Jessica Renee Jones},
title = {Development of a Very Flexible Testbed Aircraft for the Validation of Nonlinear Aeroelastic Codes},
school = {University of Michigan},
year = {2017},
groups = {IFASD 2019},
}
@InProceedings{Cesnik2011,
author = {Carlos Cesnik and Weihua Su},
title = {Nonlinear Aeroelastic Simulation of X-{HALE}: a Very Flexible {UAV}},
booktitle = {49th {AIAA} Aerospace Sciences Meeting including the New Horizons Forum and Aerospace Exposition},
year = {2011},
month = {jan},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2011-1226},
groups = {IFASD 2019},
}
@inproceedings{Drela1999,
doi = {10.2514/6.1999-1394},
url = {https://doi.org/10.2514/6.1999-1394},
year = {1999},
month = apr,
publisher = {American Institute of Aeronautics and Astronautics},
author = {Mark Drela},
title = {Integrated simulation model for preliminary aerodynamic, structural, and control-law design of aircraft},
booktitle = {{40th Structures, Structural Dynamics, and Materials Conference and Exhibit}}
}
@PhdThesis{Shearer2006,
author = {Christopher M. Shearer},
title = {Coupled nonlinear flight dynamics, aeroelasticity, and control of very flexible aircraft},
school = {University of Michigan},
year = {2006},
groups = {IFASD 2019},
}
@Article{Cesnik2012,
author = {Carlos E. S. Cesnik and Patrick J. Senatore and Weihua Su and Ella M. Atkins and Christopher M. Shearer},
title = {X-{HALE}: A Very Flexible Unmanned Aerial Vehicle for Nonlinear Aeroelastic Tests},
journal = {{AIAA} Journal},
year = {2012},
volume = {50},
number = {12},
pages = {2820--2833},
month = {dec},
doi = {10.2514/1.j051392},
groups = {IFASD 2019},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@Article{Cesnik2014,
author = {Carlos E. S. Cesnik and Rafael Palacios and Eric Y. Reichenbach},
title = {Reexamined Structural Design Procedures for Very Flexible Aircraft},
journal = {Journal of Aircraft},
year = {2014},
volume = {51},
number = {5},
pages = {1580--1591},
month = {sep},
doi = {10.2514/1.c032464},
groups = {IFASD 2019},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@Article{Su2011,
author = {Weihua Su and Carlos E. S. Cesnik},
title = {Dynamic Response of Highly Flexible Flying Wings},
journal = {{AIAA} Journal},
year = {2011},
volume = {49},
number = {2},
pages = {324--339},
month = {feb},
doi = {10.2514/1.j050496},
groups = {IFASD 2019},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@InProceedings{Dillsaver2013,
author = {Matthew Dillsaver and Carlos E. S. Cesnik and Ilya Kolmanovsky},
title = {Trajectory Control of Very Flexible Aircraft with Gust Disturbance},
booktitle = {{AIAA} Atmospheric Flight Mechanics ({AFM}) Conference},
year = {2013},
month = {aug},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2013-4745},
groups = {IFASD 2019},
}
@article{Murua2012a,
author = {Murua, Joseba and Palacios, Rafael and Graham, J. Michael R.},
doi = {10.1016/j.paerosci.2012.06.001},
journal = {Progress in Aerospace Sciences},
month = {nov},
pages = {46--72},
title = {{Applications of the unsteady vortex-lattice method in aircraft aeroelasticity and flight dynamics}},
volume = {55},
year = {2012}
}
@ARTICLE{deskos2019,
author = {{Deskos}, Georgios and {del Carre}, Alfonso and {Palacios}, Rafael},
title = "{Assessment of low-altitude atmospheric turbulence models for aircraft aeroelasticity}",
journal = {arXiv e-prints},
keywords = {Physics - Fluid Dynamics},
year = "2019",
month = "Aug",
eid = {arXiv:1908.00372},
pages = {arXiv:1908.00372},
archivePrefix = {arXiv},
eprint = {1908.00372},
primaryClass = {physics.flu-dyn},
adsurl = {https://ui.adsabs.harvard.edu/abs/2019arXiv190800372D},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
@Article{Palacios2010,
author = {Rafael Palacios and Joseba Murua and Robert Cook},
title = {Structural and Aerodynamic Models in Nonlinear Flight Dynamics of Very Flexible Aircraft},
journal = {{AIAA} Journal},
year = {2010},
volume = {48},
number = {11},
pages = {2648--2659},
month = {nov},
doi = {10.2514/1.j050513},
groups = {IFASD 2019},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@InProceedings{Teixeira2018,
author = {Patricia Teixeira and Carlos E. S. Cesnik},
title = {Propeller Effects on the Dynamic Response of {HALE} Aircraft},
booktitle = {2018 {AIAA}/{ASCE}/{AHS}/{ASC} Structures, Structural Dynamics, and Materials Conference},
year = {2018},
month = {jan},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2018-1202},
groups = {IFASD 2019},
}
@Article{Cook2013,
author = {Robert G. Cook and Rafael Palacios and Paul Goulart},
title = {Robust Gust Alleviation and Stabilization of Very Flexible Aircraft},
journal = {{AIAA} Journal},
year = {2013},
volume = {51},
number = {2},
pages = {330--340},
month = {feb},
doi = {10.2514/1.j051697},
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
}
@InProceedings{Patil2006,
author = {Mayuresh Patil and Dana Taylor},
title = {Gust Response of Highly Flexible Aircraft},
booktitle = {47th AIAA/ASME/ASCE/AHS/ASC Structures, Structural Dynamics, and Materials Conference Newport, Rhode Island},
year = {2006},
month = {may},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2002-1719},
}
@InProceedings{Cesnik2005,
author = {Cesnik, Carlos E. S. and Brown, Eric L.},
title = {Modelling of High Aspect Ratio Active Flexible Wings for Roll Control},
booktitle = {43rd Structures, Structural Dynamics, and Material Conference},
year = {2002},
month = {apr},
publisher = {American Institute of Aeronautics and Astronautics},
doi = {10.2514/6.2006-1638},
address = {Denver, CO},
}
@article{Hesse2014a,
abstract = {This paper investigates the linearization, using perturbation methods, of the structural deformations in the nonlinear flight dynamic response of aircraft with slender, flexible wings. The starting point is the coupling of a displacement-based geometrically nonlinear flexible-body dynamics formulation with a three-dimensional unsteady vortex lattice method. This is followed by a linearization of the structural degrees of freedom, which are assumed to be small in a body-fixed reference frame. The translations and rotations of that reference frame and their time derivatives, which describe the vehicle flight dynamics, can still be arbitrarily large. The resulting system preserves all couplings between rigid and elastic motions and can be projected onto a few vibration modes of the unconstrained aircraft with geometrically nonlinear static deflections at a trim condition. Equally, the unsteady aerodynamics can be approximated on a fixed lattice defined by the deformed static geometry. Numerical studies on a representative highaltitude long-endurance aircraft are presented to illustrate the approach. The results show an improvement compared to those obtained using the mean-axes approximation. {\textcopyright} 2013 by Henrik Hesse, Rafael Palacios, and Joseba Murua.},
author = {Hesse, Henrik and Palacios, Rafael and Murua, Joseba},
doi = {10.2514/1.J052316},
journal = {AIAA Journal},
month = {mar},
number = {3},
pages = {528--538},
title = {Consistent Structural Linearization in Flexible Aircraft Dynamics with Large Rigid-Body Motion},
volume = {52},
year = {2014}
}
@article{Su2011b,
abstract = {},
author = {Su, Weihua and Cesnik, Carlos E. S.},
doi = {10.1016/j.ijsolstr.2011.04.012},
journal = {International Journal of Solids and Structures},
pages = {2349–-2360},
title = {{Strain-based Geometrically Nonlinear Beam Formulation for Modeling Very Flexible Aircraft}},
url = {http://arc.aiaa.org/doi/10.2514/1.C032477},
volume = {48},
year = {2012}
}
@article{Su2012,
abstract = {A strain-based geometrically nonlinear beam formulation for structural dynamic and aeroelastic analysis of slender beams and wings has been successfully applied to study the coupled nonlinear aeroelasticity and flight dynamics of different very flexible aircraft. As an extension to the solution technique based on the nonlinear finite element developed by the authors, a modal-based approach is discussed in this paper to solve the strain-based nonlinear beam equations. The modal approach is applied to study geometrically nonlinear static and transient problems of constrained and free slender beams, subject to external structural or aero-dynamic excitations. The efficiency of the modal solution is also compared to that of the finite-element approach.},
author = {Su, Weihua and Cesnik, Carlos E. S.},
doi = {10.2514/1.C032477},
isbn = {9781600869372 (ISBN)},
issn = {0021-8669},
journal = {Journal of Aircraft},
number = {3},
pages = {890--903},
title = {{Strain-Based Analysis for Geometrically Nonlinear Beams: A Modal Approach}},
url = {http://arc.aiaa.org/doi/10.2514/1.C032477},
volume = {51},
year = {2012}
}
@article{Su2010,
abstract = {Blended-wing-body (BWB) aircraft with high-aspect-ratio wings is an important configu- ration for high-altitude long-endurance unmanned aerial vehicles (HALE UAV). Recently, Northrop Grumann created a wind tunnel model under the Air Force's High Lift over Drag Active (HiLDA) Wing program to study the aeroelastic characteristics of blended-wing-body for a potential Sensorcraft concept. This paper presents a study on the coupled aeroelastic / flight dynamics stability and response of a BWB aircraft that is modified from the HiLDA experimental model. An effective method is used to model very flexible BWB vehicles based on a low-order aeroelastic formulation that is capable of capturing the important structural nonlinear effects and couplings with the flight dynamics degrees of freedom. A nonlinear strain-based beam finite element formulation is used. Finite-state unsteady subsonic aerodynamic loads are incorporated to be coupled with all lifting surfaces, including the flexible body. Based on the proposed model, body-freedom flutter is studied, and is compared with the flutter results with all or partial rigid-body degrees of freedom constrained. The applicability of wind tunnel aeroelastic results (where the rigid-body motion is limited) is discussed in view of the free flight conditions (with all 6 rigid-body degrees of freedom). Furthermore, effects of structural and aerodynamic nonlinearities as well as wing bending/torsion rigidity coupling on the stability and gust response are also studied in this paper. I.},
author = {Su, Weihua and Cesnik, Carlos E. S.},
doi = {10.2514/1.47317},
isbn = {9781563479731},
issn = {0021-8669},
journal = {Journal of Aircraft},
number = {5},
pages = {1539--1553},
title = {{Nonlinear Aeroelasticity of a Very Flexible Blended-Wing-Body Aircraft}},
url = {http://arc.aiaa.org/doi/10.2514/1.47317},
volume = {47},
year = {2010}
}
@article{Shearer2007,
author = {Shearer, Christopher M. and Cesnik, Carlos E.S.},
doi = {10.2514/1.27606},
isbn = {0021-8669},
issn = {0021-8669},
journal = {Journal of Aircraft},
number = {5},
pages = {1528--1545},
title = {{Nonlinear Flight Dynamics of Very Flexible Aircraft}},
url = {http://arc.aiaa.org/doi/10.2514/1.27606},
volume = {44},
year = {2007}
}
@article{Teixeira2017,
author = {Teixeira, Patr{\'{i}}cia C and Cesnik, Carlos E S},
journal = {International Forum on Aeroelasticity and Structural Dynamics (IFASD)},
keywords = {abstract,aerodynamic propeller effects,aerovironments helios,aircraft,although propeller propulsion is,coupled nonlinear,e,etc,g,long-endurance,of such vehicles for,of the propeller slipstream,on the aeroelastic behavior,particle vortex aerodynamics,present in many high-altitude,s x-hale uas,the effect,university of michigan,very flexible wing},
number = {June},
pages = {1--18},
title = {{Inclusion of Propeller Effects on Aeroelastic Behavior of Very Flexible Aircraft}},
year = {2017}
}
@article{Peters1994,
author = {A. Peters, David and J. Johnson, Mark},
year = {1994},
month = {01},
pages = {1-28},
title = {Finite-state airloads for deformable airfoils on fixed and rotating wings},
volume = {44},
booktitle = {American Society of Mechanical Engineers, Aerospace Division (Publication) AD}
}
@phdthesis{Skujins2012,
address = {Ann Arbor, MI},
author = {Skujins, Torstens},
booktitle = {Aerospace Engineering},
publisher = {University of Michigan},
title = {{Reduced-Order Modeling of Unsteady Aerodynamics Across Multiple Mach Regimes}},
volume = {Ph. D.},
year = {2012}
}
@book{geradin2001,
title={Flexible multibody dynamics: a finite element approach},
author={G{\'e}radin, M. and Cardona, A.},
isbn={9780471489900},
lccn={00043685},
year={2001},
publisher={John Wiley}
}
@phdthesis{Murua2012,
title={Flexible aircraft dynamics with a geometrically-nonlinear description of the unsteady aerodynamics},
author={Murua, Joseba},
year={2012},
school={Imperial College London}
}
@MISC{eigenweb,
author = {Ga\"{e}l Guennebaud and Beno\^{i}t Jacob and others},
title = {Eigen v3},
howpublished = {http://eigen.tuxfamily.org},
year = {2010}
}
@article{Hesse2016,
doi = {10.2514/1.g000715},
url = {https://doi.org/10.2514/1.g000715},
year = {2016},
month = apr,
publisher = {American Institute of Aeronautics and Astronautics ({AIAA})},
volume = {39},
number = {4},
pages = {801--813},
author = {Henrik Hesse and Rafael Palacios},
title = {Dynamic Load Alleviation in Wake Vortex Encounters},
journal = {Journal of Guidance, Control, and Dynamics}
}
@inproceedings{del2019efficient,
title={Low-Altitude Dynamics of Very Flexible Aircraft},
author={Del Carre, Alfonso and Palacios, Rafael},
address={San Diego, California},
year={2019},
publisher = {American Institute of Aeronautics and Astronautics},
doi={10.2514/6.2019-2038},
crossref={scitech19}
}
@proceedings{scitech19,
title={{AIAA SciTech 2019 Forum}},
publisher = {American Institute of Aeronautics and Astronautics},
venue={San Diego, California},
year={2019}
}
@article{melin2013tornado,
title={Tornado},
author={Melin, Tomas},
journal={KTH, Stockholm, Sweden, Masters Thesis and continued development. {http://www.flyg.kth.se/divisions/aero/software/tornado}},
year={2013}
}
@article{Murua2012-2,
author = {Murua, Joseba and Palacios, Rafael and R. Graham, J. Michael},
title = {Assessment of Wake-Tail Interference Effects on the Dynamics of Flexible Aircraft},
journal = {AIAA Journal},
volume = {50},
number = {7},
pages = {1575-1585},
year = {2012},
doi = {10.2514/1.J051543},
URL = {
https://doi.org/10.2514/1.J051543
},
eprint = {
https://doi.org/10.2514/1.J051543
}
}
@article{Simpson2013-2,
author = {Simpson, Robert J. S. and Palacios, Rafael and Murua, Joseba},
title = {Induced-Drag Calculations in the Unsteady Vortex Lattice Method},
journal = {AIAA Journal},
volume = {51},
number = {7},
pages = {1775-1779},
year = {2013},
doi = {10.2514/1.J052136},
URL = {
https://doi.org/10.2514/1.J052136
},
eprint = {
https://doi.org/10.2514/1.J052136
}
}
@book{Katz2001,
title={Low-Speed Aerodynamics},
author={Katz, J. and Plotkin, A.},
isbn={9781107717428},
series={{Cambridge Aerospace Series}},
year={2001},
publisher={Cambridge University Press}
}
@book{etkin1982dynamics,
title={Dynamics of flight: stability and control},
author={Etkin, B.},
isbn={9780471089360},
lccn={81013058},
url={https://books.google.co.uk/books?id=4n5TAAAAMAAJ},
year={1982},
publisher={John Wiley \& Sons Australia, Limited}
}
@inbook{DeMarco2007,
author = {Agostino De Marco and Eugene Duke and Jon Berndt},
title = {A General Solution to the Aircraft Trim Problem},
booktitle = {AIAA Modeling and Simulation Technologies Conference and Exhibit},
chapter = {},
year={2007},
pages = {},
doi = {10.2514/6.2007-6703},
URL = {https://arc.aiaa.org/doi/abs/10.2514/6.2007-6703},
eprint = {https://arc.aiaa.org/doi/pdf/10.2514/6.2007-6703}
}
@book{wiener1950,
title={Extrapolation, interpolation, and smoothing of stationary time series: with engineering applications},
author={Wiener, Norbert and Mass.) Massachusetts Institute of Technology (Cambridge},
year={1950},
publisher={Technology Press}
}
@article{broyden1965class,
title={A class of methods for solving nonlinear simultaneous equations},
author={Broyden, Charles G},
journal={Mathematics of computation},
volume={19},
number={92},
pages={577--593},
year={1965},
publisher={JSTOR}
}
@Article{faa,
title = {Dynamic Gust Loads - {AC 25.341-1}},
author={{FAA}},
journal = {{FAA} Advisory Circular},
year = {2014}
}
@inproceedings{del2019ifasd,
title={Nonlinear response of a very flexible aircraft under lateal gust},
author={Del Carre, Alfonso and Teixeira, Patricia, and Cesnik, Carlos E. S. and Palacios, Rafael},
booktitle={{IFASD 2019 Forum}},
address={Savannah, Georgia},
year={2019},
publisher = {},
doi={}
}
@Article{vonKarman1948,
author = {von K{\'a}rm{\'a}n, Theodore},
title = {Progress in the Statistical Theory of Turbulence.},
journal = {Proceedings of the National Academy of Sciences of the United States of America},
year = {1948},
volume = {11},
number = {34},
pages = {530-539},
issn = {0027-8424},
}
@article{KaimalEtAl1972,
author = {Kaimal, J. C. and Wyngaard, J. C. and Izumi, Y. and Coté, O. R.},
title = {Spectral characteristics of surface-layer turbulence},
journal = {Quarterly Journal of the Royal Meteorological Society},
volume = {98},
number = {417},
pages = {563-589},
doi = {10.1002/qj.49709841707},
abstract = {Abstract The behaviour of spectra and cospectra of turbulence in the surface layer is described within the framework of similarity theory using wind and temperature fluctuation data obtained in the 1968 AFCRL Kansas experiments. With appropriate normalization, the spectra and cospectra are each reduced to a family of curves which spread out according to z/L at low frequencies but converge to a single universal curve in the inertial subrange. The paper compares these results with data obtained by other investigators over both land and water. Spectral constants for velocity and temperature are determined and the variability in the recent estimates of the constants is discussed. The high-frequency behaviour is consistent with local isotropy. In the inertial subrange, where the spectra fall as n−5/3, the cospectra fall faster: uω and ωθ as n−7/3, and uθ, on the average, as n−5/2. The 4/3 ratio between the transverse and longitudinal spectral levels is observed at wavelengths of the order of the height above ground under unstable conditions and at wavelengths of the order of L/10 under stable conditions. This lower isotropic limit is shown to be governed by the combined effects of shear and buoyancy on small-scale eddies.},
year = {1972}
}
@Article{GonzaleEtAl2018,
author = {Jes\'{u}s Gonzalo and Deibi L\'{o}pez and Diego Dom\'{i}nguez and Adri\'{a}n Garc\'{i}a and Alberto Escapa},
title = {On the capabilities and limitations of high altitude pseudo-satellites},
journal = {Progress in Aerospace Sciences},
year = {2018},
volume = {98},
pages = {37 - 56},
issn = {0376-0421},
doi = {https://doi.org/10.1016/j.paerosci.2018.03.006},
abstract = {The idea of self-sustaining air vehicles that excited engineers in the seventies has nowadays become a reality as proved by several initiatives worldwide. High altitude platforms, or Pseudo-satellites (HAPS), are unmanned vehicles that take advantage of weak stratospheric winds and solar energy to operate without interfering with current commercial aviation and with enough endurance to provide long-term services as satellites do. Target applications are communications, Earth observation, positioning and science among others. This paper reviews the major characteristics of stratospheric flight, where airplanes and airships will compete for best performance. The careful analysis of involved technologies and their trends allow budget models to shed light on the capabilities and limitations of each solution. Aerodynamics and aerostatics, structures and materials, propulsion, energy management, thermal control, flight management and ground infrastructures are the critical elements revisited to assess current status and expected short-term evolutions. Stratospheric airplanes require very light wing loading, which has been demonstrated to be feasible but currently limits their payload mass to few tenths of kilograms. On the other hand, airships need to be large and operationally complex but their potential to hover carrying hundreds of kilograms with reasonable power supply make them true pseudo-satellites with enormous commercial interest. This paper provides useful information on the relative importance of the technology evolutions, as well as on the selection of the proper platform for each application or set of payload requirements. The authors envisage prompt availability of both types of HAPS, aerodynamic and aerostatic, providing unprecedented services.},
keywords = {High altitude platforms, Pseudo-satellite, HAPS, Stratospheric flight, Long endurance, Solar-powered},
}
@article{Maraniello2019,
title = {State-Space Realizations and Internal Balancing in Potential-Flow Aerodynamics with Arbitrary Kinematics},
year = {2019},
journal = {AIAA Journal},
author = {Maraniello, Salvatore and Palacios, Rafael},
number = {6},
pages = {1--14},
volume = {57},
url = {https://arc.aiaa.org/doi/10.2514/1.J058153},
doi = {10.2514/1.J058153},
issn = {0001-1452}
}
@misc{openfast,
title = {{NWTC Information Portal (OpenFAST)}},
author = {{National Wind Technology Center (NWTC)}},
url = {https://nwtc.nrel.gov/OpenFAST},
note = {Accessed: 2019-11-25}}
================================================
FILE: docs/JOSS/paper.md
================================================
---
title: 'SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraft and wind turbines'
tags:
- aeroelasticity
- structural dynamics
- aerodynamics
- solar flight
- wind energy
authors:
- name: Alfonso del Carre
orcid: 0000-0002-8133-9481
affiliation: 1
- name: Arturo Muñoz-Simón
orcid: 0000-0003-4840-5392
affiliation: 1
- name: Norberto Goizueta
orcid: 0000-0001-7445-5970
affiliation: 1
- name: Rafael Palacios
orcid: 0000-0002-6706-3220
affiliation: 1
affiliations:
- name: Department of Aeronautics, Imperial College London. London, UK.
index: 1
date: 13 August 2019
bibliography: paper.bib
---
# Summary
Aeroelasticity is the study of the dynamic interaction between unsteady aerodynamics
and structural dynamics on flexible streamlined bodies, which may include
rigid-body dynamics. Industry standard solutions in aeronautics and wind energy
are built on the assumption of small structural displacements, which lead to linear
or quasi-linear theories. However, advances in areas such as energy storage and generation,
and composite material manufacturing have fostered a new kind of aeroelastic
structures that may undergo large displacements under aerodynamic forces.
In particular, solar-powered High-Altitude Long-Endurance (HALE) aircraft
have recently seen very significant progress. New configurations
are now able
to stay airborne for longer than three weeks at a time.
Extreme efficiency is achieved by reducing the total weight of the aircraft while
increasing the lifting surfaces' aspect ratio.
In a similar quest for extreme efficiency, the wind energy industry
is also trending towards longer and more slender blades, specially for off-shore
applications, where the largest blades are now close to 100-m long.
These longer and more slender structures can present large deflections and have relatively low frequency structural
modes which, in the case of aircraft, can interact with the flight dynamics modes with potentially unstable couplings.
In the case of offshore wind turbines, platform movement may generate important rotor excursions that cause complex
aeroelastic phenomena which conventional quasi-linear methods may not accurately capture.
``SHARPy`` (Simulation of High-Aspect Ratio aeroplanes in Python) is a dynamic aeroelasticity simulation toolbox for
aircraft and wind turbines. It features a versatile interface and core code written in Python 3, while computationally
expensive routines are included in libraries coded in C++ and Modern Fortran. SHARPy is easily extended through a
modular object-oriented design, and includes tools for linear and nonlinear analysis of the time-domain aeroelastic
response of flexible bodies in a large number of cases, such as 3-D discrete gust [@del2019ifasd], turbulent field
input [@Hesse2016; @deskos2019], control surface deflection and prescribed motion [@del2019efficient]. In addition, linearised
state-space models can be obtained for frequency domain analysis, controller design and model reduction.
Few open source options are available for nonlinear aeroelastic analysis. A well known code for wind
energy is OpenFAST [@openfast], developed at NREL and distributed under
Apache 2.0 license. OpenFAST features a Geometrically-Exact Composite Beam structural
model and an actuator-line based aerodynamic solver. The wake is modelled using
quasi-steady Blade Element Momentum theory. To the knowledge of the authors,
no other nonlinear aeroelasticity framework for aircraft is available
under open-source terms. An example of a commonly-used aircraft-oriented software
is ASWING [@Drela1999]. It is based on geometrically nonlinear beams with approximated
rigid body dynamics. Aerodynamic loads are calculated using a lifting-line
theory solver with prescribed coefficients. Lastly, UM/NAST [@del2019ifasd] is a nonlinear
aeroelastic code with GECB and UVLM solvers. However, it is a research code
which has not been released as open source.
``SHARPy`` relies only on freely-available open-source dependencies
such as [Paraview](https://paraview.org) for post-processing
The computationally
expensive routines written in C++ and Fortran have been designed with Fluid-Structure
Interaction (FSI) problems in mind, resulting in minimal overhead between
function calls.
## Features
The [structural model](https://github.com/imperialcollegelondon/xbeam)
included in ``SHARPy`` is a Geometrically-Exact Composite Beam (GECB) [@geradin2001; @Hesse2014a]
supports multibody features
such as hinges, joints and absolute and relative nodal velocity constraints through Lagrange Multipliers.
Rigid body motion can be prescribed or simulated. The structural solver supports
distributed and lumped mass formulation (or a combination of both). Time-integration
is carried out using a Newmark-$\beta$ scheme.
The [aerodynamic solver](https://github.com/imperialcollegelondon/uvlm) is an Unsteady
Vortex Lattice Method (UVLM) [@Katz2001; @Simpson2013-2].
It can simulate an arbitrary number of surfaces together
with their interactions. A non conventional force evaluation scheme is used [@Simpson2013-2] in
order to support large sideslip angles and obtain an induced drag estimation.
In addition to this, added mass effects can be obtained and introduced in the
FSI problem. This can be especially important in the case of very light flexible
aircraft flying at low altitude.
The coupling algorithm included in the code is designed to allow fully coupled
nonlinear simulations, although weakly coupled solutions can be obtained. Independent
structural or aerodynamic simulation are supported natively.
The nonlinear system can also be linearised taking an arbitrary reference condition. The linearised system can be used
for frequency domain analysis, linear model order reduction methods and controller design.
![Aerodynamic grid and forces in the static aeroelastic equilibrium configuration on the XHALE aircraft [@del2019ifasd]](https://github.com/ImperialCollegeLondon/sharpy/raw/main/docs/source/_static/XHALE-render.jpg)
# Acknowledgements
A. Carre gratefully acknowledges the support provided by Airbus Defence and Space. Norberto Goizueta's acknowledges and
thanks the Department of Aeronautics at Imperial College for sponsoring his research.
Arturo Muñoz-Simón's research has received funding from the EU's H2020 research and innovation programme
under the Marie Sklodowska-Curie grant agreement 765579.
# References
================================================
FILE: docs/Makefile
================================================
# Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help
help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " epub3 to make an epub3"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
@echo " dummy to check syntax errors of document sources"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SHARPy.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SHARPy.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/SHARPy"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SHARPy"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: epub3
epub3:
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
@echo
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
.PHONY: dummy
dummy:
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
@echo
@echo "Build finished. Dummy builder generates no files."
================================================
FILE: docs/docignore.yml
================================================
# Docs to build list
# once this is fully implemented this will become the file that specifies which packages are to be ignored for the
# purposes of building documentation
packages:
- folder: 'sharpy/controllers'
docs_folder: 'controllers'
- folder: 'sharpy/rom'
docs_folder: 'rom'
modules:
- 'sharpy/postproc'
- 'sharpy/solvers'
- 'sharpy/linear/dev'
- 'sharpy/linear/src/uvlmutils.py'
- 'sharpy/aero/utils/uvlmlib.py'
- 'sharpy/aero/utils/utils.py'
- 'sharpy/utils/plot_utils.py'
- 'sharpy/utils/solver_interface.py'
- 'sharpy/linear/test'
- 'sharpy/linear/utils'
# - 'sharpy/generators'
- 'sharpy/presharpy'
- 'sharpy/lib'
- 'sharpy/__pycache__'
================================================
FILE: docs/requirements_rtd
================================================
sphinx>=3.0,<7
ipykernel
nbsphinx
sphinx-rtd-theme>=1.2.2
recommonmark
================================================
FILE: docs/source/_static/.placeholder
================================================
================================================
FILE: docs/source/_static/sharpy_guide/sharpy_intro.html
================================================
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" />
<title>sharpy_intro</title><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<style type="text/css">
/*!
*
* Twitter Bootstrap
*
*/
/*!
* Bootstrap v3.3.7 (http://getbootstrap.com)
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
html {
font-family: sans-serif;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
body {
margin: 0;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
vertical-align: baseline;
}
audio:not([controls]) {
display: none;
height: 0;
}
[hidden],
template {
display: none;
}
a {
background-color: transparent;
}
a:active,
a:hover {
outline: 0;
}
abbr[title] {
border-bottom: 1px dotted;
}
b,
strong {
font-weight: bold;
}
dfn {
font-style: italic;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
mark {
background: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sup {
top: -0.5em;
}
sub {
bottom: -0.25em;
}
img {
border: 0;
}
svg:not(:root) {
overflow: hidden;
}
figure {
margin: 1em 40px;
}
hr {
box-sizing: content-box;
height: 0;
}
pre {
overflow: auto;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
button,
input,
optgroup,
select,
textarea {
color: inherit;
font: inherit;
margin: 0;
}
button {
overflow: visible;
}
button,
select {
text-transform: none;
}
button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
-webkit-appearance: button;
cursor: pointer;
}
button[disabled],
html input[disabled] {
cursor: default;
}
button::-moz-focus-inner,
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input {
line-height: normal;
}
input[type="checkbox"],
input[type="radio"] {
box-sizing: border-box;
padding: 0;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
height: auto;
}
input[type="search"] {
-webkit-appearance: textfield;
box-sizing: content-box;
}
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
border: 0;
padding: 0;
}
textarea {
overflow: auto;
}
optgroup {
font-weight: bold;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
td,
th {
padding: 0;
}
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
@media print {
*,
*:before,
*:after {
background: transparent !important;
color: #000 !important;
box-shadow: none !important;
text-shadow: none !important;
}
a,
a:visited {
text-decoration: underline;
}
a[href]:after {
content: " (" attr(href) ")";
}
abbr[title]:after {
content: " (" attr(title) ")";
}
a[href^="#"]:after,
a[href^="javascript:"]:after {
content: "";
}
pre,
blockquote {
border: 1px solid #999;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
tr,
img {
page-break-inside: avoid;
}
img {
max-width: 100% !important;
}
p,
h2,
h3 {
orphans: 3;
widows: 3;
}
h2,
h3 {
page-break-after: avoid;
}
.navbar {
display: none;
}
.btn > .caret,
.dropup > .btn > .caret {
border-top-color: #000 !important;
}
.label {
border: 1px solid #000;
}
.table {
border-collapse: collapse !important;
}
.table td,
.table th {
background-color: #fff !important;
}
.table-bordered th,
.table-bordered td {
border: 1px solid #ddd !important;
}
}
@font-face {
font-family: 'Glyphicons Halflings';
src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');
src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
.glyphicon {
position: relative;
top: 1px;
display: inline-block;
font-family: 'Glyphicons Halflings';
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.glyphicon-asterisk:before {
content: "\002a";
}
.glyphicon-plus:before {
content: "\002b";
}
.glyphicon-euro:before,
.glyphicon-eur:before {
content: "\20ac";
}
.glyphicon-minus:before {
content: "\2212";
}
.glyphicon-cloud:before {
content: "\2601";
}
.glyphicon-envelope:before {
content: "\2709";
}
.glyphicon-pencil:before {
content: "\270f";
}
.glyphicon-glass:before {
content: "\e001";
}
.glyphicon-music:before {
content: "\e002";
}
.glyphicon-search:before {
content: "\e003";
}
.glyphicon-heart:before {
content: "\e005";
}
.glyphicon-star:before {
content: "\e006";
}
.glyphicon-star-empty:before {
content: "\e007";
}
.glyphicon-user:before {
content: "\e008";
}
.glyphicon-film:before {
content: "\e009";
}
.glyphicon-th-large:before {
content: "\e010";
}
.glyphicon-th:before {
content: "\e011";
}
.glyphicon-th-list:before {
content: "\e012";
}
.glyphicon-ok:before {
content: "\e013";
}
.glyphicon-remove:before {
content: "\e014";
}
.glyphicon-zoom-in:before {
content: "\e015";
}
.glyphicon-zoom-out:before {
content: "\e016";
}
.glyphicon-off:before {
content: "\e017";
}
.glyphicon-signal:before {
content: "\e018";
}
.glyphicon-cog:before {
content: "\e019";
}
.glyphicon-trash:before {
content: "\e020";
}
.glyphicon-home:before {
content: "\e021";
}
.glyphicon-file:before {
content: "\e022";
}
.glyphicon-time:before {
content: "\e023";
}
.glyphicon-road:before {
content: "\e024";
}
.glyphicon-download-alt:before {
content: "\e025";
}
.glyphicon-download:before {
content: "\e026";
}
.glyphicon-upload:before {
content: "\e027";
}
.glyphicon-inbox:before {
content: "\e028";
}
.glyphicon-play-circle:before {
content: "\e029";
}
.glyphicon-repeat:before {
content: "\e030";
}
.glyphicon-refresh:before {
content: "\e031";
}
.glyphicon-list-alt:before {
content: "\e032";
}
.glyphicon-lock:before {
content: "\e033";
}
.glyphicon-flag:before {
content: "\e034";
}
.glyphicon-headphones:before {
content: "\e035";
}
.glyphicon-volume-off:before {
content: "\e036";
}
.glyphicon-volume-down:before {
content: "\e037";
}
.glyphicon-volume-up:before {
content: "\e038";
}
.glyphicon-qrcode:before {
content: "\e039";
}
.glyphicon-barcode:before {
content: "\e040";
}
.glyphicon-tag:before {
content: "\e041";
}
.glyphicon-tags:before {
content: "\e042";
}
.glyphicon-book:before {
content: "\e043";
}
.glyphicon-bookmark:before {
content: "\e044";
}
.glyphicon-print:before {
content: "\e045";
}
.glyphicon-camera:before {
content: "\e046";
}
.glyphicon-font:before {
content: "\e047";
}
.glyphicon-bold:before {
content: "\e048";
}
.glyphicon-italic:before {
content: "\e049";
}
.glyphicon-text-height:before {
content: "\e050";
}
.glyphicon-text-width:before {
content: "\e051";
}
.glyphicon-align-left:before {
content: "\e052";
}
.glyphicon-align-center:before {
content: "\e053";
}
.glyphicon-align-right:before {
content: "\e054";
}
.glyphicon-align-justify:before {
content: "\e055";
}
.glyphicon-list:before {
content: "\e056";
}
.glyphicon-indent-left:before {
content: "\e057";
}
.glyphicon-indent-right:before {
content: "\e058";
}
.glyphicon-facetime-video:before {
content: "\e059";
}
.glyphicon-picture:before {
content: "\e060";
}
.glyphicon-map-marker:before {
content: "\e062";
}
.glyphicon-adjust:before {
content: "\e063";
}
.glyphicon-tint:before {
content: "\e064";
}
.glyphicon-edit:before {
content: "\e065";
}
.glyphicon-share:before {
content: "\e066";
}
.glyphicon-check:before {
content: "\e067";
}
.glyphicon-move:before {
content: "\e068";
}
.glyphicon-step-backward:before {
content: "\e069";
}
.glyphicon-fast-backward:before {
content: "\e070";
}
.glyphicon-backward:before {
content: "\e071";
}
.glyphicon-play:before {
content: "\e072";
}
.glyphicon-pause:before {
content: "\e073";
}
.glyphicon-stop:before {
content: "\e074";
}
.glyphicon-forward:before {
content: "\e075";
}
.glyphicon-fast-forward:before {
content: "\e076";
}
.glyphicon-step-forward:before {
content: "\e077";
}
.glyphicon-eject:before {
content: "\e078";
}
.glyphicon-chevron-left:before {
content: "\e079";
}
.glyphicon-chevron-right:before {
content: "\e080";
}
.glyphicon-plus-sign:before {
content: "\e081";
}
.glyphicon-minus-sign:before {
content: "\e082";
}
.glyphicon-remove-sign:before {
content: "\e083";
}
.glyphicon-ok-sign:before {
content: "\e084";
}
.glyphicon-question-sign:before {
content: "\e085";
}
.glyphicon-info-sign:before {
content: "\e086";
}
.glyphicon-screenshot:before {
content: "\e087";
}
.glyphicon-remove-circle:before {
content: "\e088";
}
.glyphicon-ok-circle:before {
content: "\e089";
}
.glyphicon-ban-circle:before {
content: "\e090";
}
.glyphicon-arrow-left:before {
content: "\e091";
}
.glyphicon-arrow-right:before {
content: "\e092";
}
.glyphicon-arrow-up:before {
content: "\e093";
}
.glyphicon-arrow-down:before {
content: "\e094";
}
.glyphicon-share-alt:before {
content: "\e095";
}
.glyphicon-resize-full:before {
content: "\e096";
}
.glyphicon-resize-small:before {
content: "\e097";
}
.glyphicon-exclamation-sign:before {
content: "\e101";
}
.glyphicon-gift:before {
content: "\e102";
}
.glyphicon-leaf:before {
content: "\e103";
}
.glyphicon-fire:before {
content: "\e104";
}
.glyphicon-eye-open:before {
content: "\e105";
}
.glyphicon-eye-close:before {
content: "\e106";
}
.glyphicon-warning-sign:before {
content: "\e107";
}
.glyphicon-plane:before {
content: "\e108";
}
.glyphicon-calendar:before {
content: "\e109";
}
.glyphicon-random:before {
content: "\e110";
}
.glyphicon-comment:before {
content: "\e111";
}
.glyphicon-magnet:before {
content: "\e112";
}
.glyphicon-chevron-up:before {
content: "\e113";
}
.glyphicon-chevron-down:before {
content: "\e114";
}
.glyphicon-retweet:before {
content: "\e115";
}
.glyphicon-shopping-cart:before {
content: "\e116";
}
.glyphicon-folder-close:before {
content: "\e117";
}
.glyphicon-folder-open:before {
content: "\e118";
}
.glyphicon-resize-vertical:before {
content: "\e119";
}
.glyphicon-resize-horizontal:before {
content: "\e120";
}
.glyphicon-hdd:before {
content: "\e121";
}
.glyphicon-bullhorn:before {
content: "\e122";
}
.glyphicon-bell:before {
content: "\e123";
}
.glyphicon-certificate:before {
content: "\e124";
}
.glyphicon-thumbs-up:before {
content: "\e125";
}
.glyphicon-thumbs-down:before {
content: "\e126";
}
.glyphicon-hand-right:before {
content: "\e127";
}
.glyphicon-hand-left:before {
content: "\e128";
}
.glyphicon-hand-up:before {
content: "\e129";
}
.glyphicon-hand-down:before {
content: "\e130";
}
.glyphicon-circle-arrow-right:before {
content: "\e131";
}
.glyphicon-circle-arrow-left:before {
content: "\e132";
}
.glyphicon-circle-arrow-up:before {
content: "\e133";
}
.glyphicon-circle-arrow-down:before {
content: "\e134";
}
.glyphicon-globe:before {
content: "\e135";
}
.glyphicon-wrench:before {
content: "\e136";
}
.glyphicon-tasks:before {
content: "\e137";
}
.glyphicon-filter:before {
content: "\e138";
}
.glyphicon-briefcase:before {
content: "\e139";
}
.glyphicon-fullscreen:before {
content: "\e140";
}
.glyphicon-dashboard:before {
content: "\e141";
}
.glyphicon-paperclip:before {
content: "\e142";
}
.glyphicon-heart-empty:before {
content: "\e143";
}
.glyphicon-link:before {
content: "\e144";
}
.glyphicon-phone:before {
content: "\e145";
}
.glyphicon-pushpin:before {
content: "\e146";
}
.glyphicon-usd:before {
content: "\e148";
}
.glyphicon-gbp:before {
content: "\e149";
}
.glyphicon-sort:before {
content: "\e150";
}
.glyphicon-sort-by-alphabet:before {
content: "\e151";
}
.glyphicon-sort-by-alphabet-alt:before {
content: "\e152";
}
.glyphicon-sort-by-order:before {
content: "\e153";
}
.glyphicon-sort-by-order-alt:before {
content: "\e154";
}
.glyphicon-sort-by-attributes:before {
content: "\e155";
}
.glyphicon-sort-by-attributes-alt:before {
content: "\e156";
}
.glyphicon-unchecked:before {
content: "\e157";
}
.glyphicon-expand:before {
content: "\e158";
}
.glyphicon-collapse-down:before {
content: "\e159";
}
.glyphicon-collapse-up:before {
content: "\e160";
}
.glyphicon-log-in:before {
content: "\e161";
}
.glyphicon-flash:before {
content: "\e162";
}
.glyphicon-log-out:before {
content: "\e163";
}
.glyphicon-new-window:before {
content: "\e164";
}
.glyphicon-record:before {
content: "\e165";
}
.glyphicon-save:before {
content: "\e166";
}
.glyphicon-open:before {
content: "\e167";
}
.glyphicon-saved:before {
content: "\e168";
}
.glyphicon-import:before {
content: "\e169";
}
.glyphicon-export:before {
content: "\e170";
}
.glyphicon-send:before {
content: "\e171";
}
.glyphicon-floppy-disk:before {
content: "\e172";
}
.glyphicon-floppy-saved:before {
content: "\e173";
}
.glyphicon-floppy-remove:before {
content: "\e174";
}
.glyphicon-floppy-save:before {
content: "\e175";
}
.glyphicon-floppy-open:before {
content: "\e176";
}
.glyphicon-credit-card:before {
content: "\e177";
}
.glyphicon-transfer:before {
content: "\e178";
}
.glyphicon-cutlery:before {
content: "\e179";
}
.glyphicon-header:before {
content: "\e180";
}
.glyphicon-compressed:before {
content: "\e181";
}
.glyphicon-earphone:before {
content: "\e182";
}
.glyphicon-phone-alt:before {
content: "\e183";
}
.glyphicon-tower:before {
content: "\e184";
}
.glyphicon-stats:before {
content: "\e185";
}
.glyphicon-sd-video:before {
content: "\e186";
}
.glyphicon-hd-video:before {
content: "\e187";
}
.glyphicon-subtitles:before {
content: "\e188";
}
.glyphicon-sound-stereo:before {
content: "\e189";
}
.glyphicon-sound-dolby:before {
content: "\e190";
}
.glyphicon-sound-5-1:before {
content: "\e191";
}
.glyphicon-sound-6-1:before {
content: "\e192";
}
.glyphicon-sound-7-1:before {
content: "\e193";
}
.glyphicon-copyright-mark:before {
content: "\e194";
}
.glyphicon-registration-mark:before {
content: "\e195";
}
.glyphicon-cloud-download:before {
content: "\e197";
}
.glyphicon-cloud-upload:before {
content: "\e198";
}
.glyphicon-tree-conifer:before {
content: "\e199";
}
.glyphicon-tree-deciduous:before {
content: "\e200";
}
.glyphicon-cd:before {
content: "\e201";
}
.glyphicon-save-file:before {
content: "\e202";
}
.glyphicon-open-file:before {
content: "\e203";
}
.glyphicon-level-up:before {
content: "\e204";
}
.glyphicon-copy:before {
content: "\e205";
}
.glyphicon-paste:before {
content: "\e206";
}
.glyphicon-alert:before {
content: "\e209";
}
.glyphicon-equalizer:before {
content: "\e210";
}
.glyphicon-king:before {
content: "\e211";
}
.glyphicon-queen:before {
content: "\e212";
}
.glyphicon-pawn:before {
content: "\e213";
}
.glyphicon-bishop:before {
content: "\e214";
}
.glyphicon-knight:before {
content: "\e215";
}
.glyphicon-baby-formula:before {
content: "\e216";
}
.glyphicon-tent:before {
content: "\26fa";
}
.glyphicon-blackboard:before {
content: "\e218";
}
.glyphicon-bed:before {
content: "\e219";
}
.glyphicon-apple:before {
content: "\f8ff";
}
.glyphicon-erase:before {
content: "\e221";
}
.glyphicon-hourglass:before {
content: "\231b";
}
.glyphicon-lamp:before {
content: "\e223";
}
.glyphicon-duplicate:before {
content: "\e224";
}
.glyphicon-piggy-bank:before {
content: "\e225";
}
.glyphicon-scissors:before {
content: "\e226";
}
.glyphicon-bitcoin:before {
content: "\e227";
}
.glyphicon-btc:before {
content: "\e227";
}
.glyphicon-xbt:before {
content: "\e227";
}
.glyphicon-yen:before {
content: "\00a5";
}
.glyphicon-jpy:before {
content: "\00a5";
}
.glyphicon-ruble:before {
content: "\20bd";
}
.glyphicon-rub:before {
content: "\20bd";
}
.glyphicon-scale:before {
content: "\e230";
}
.glyphicon-ice-lolly:before {
content: "\e231";
}
.glyphicon-ice-lolly-tasted:before {
content: "\e232";
}
.glyphicon-education:before {
content: "\e233";
}
.glyphicon-option-horizontal:before {
content: "\e234";
}
.glyphicon-option-vertical:before {
content: "\e235";
}
.glyphicon-menu-hamburger:before {
content: "\e236";
}
.glyphicon-modal-window:before {
content: "\e237";
}
.glyphicon-oil:before {
content: "\e238";
}
.glyphicon-grain:before {
content: "\e239";
}
.glyphicon-sunglasses:before {
content: "\e240";
}
.glyphicon-text-size:before {
content: "\e241";
}
.glyphicon-text-color:before {
content: "\e242";
}
.glyphicon-text-background:before {
content: "\e243";
}
.glyphicon-object-align-top:before {
content: "\e244";
}
.glyphicon-object-align-bottom:before {
content: "\e245";
}
.glyphicon-object-align-horizontal:before {
content: "\e246";
}
.glyphicon-object-align-left:before {
content: "\e247";
}
.glyphicon-object-align-vertical:before {
content: "\e248";
}
.glyphicon-object-align-right:before {
content: "\e249";
}
.glyphicon-triangle-right:before {
content: "\e250";
}
.glyphicon-triangle-left:before {
content: "\e251";
}
.glyphicon-triangle-bottom:before {
content: "\e252";
}
.glyphicon-triangle-top:before {
content: "\e253";
}
.glyphicon-console:before {
content: "\e254";
}
.glyphicon-superscript:before {
content: "\e255";
}
.glyphicon-subscript:before {
content: "\e256";
}
.glyphicon-menu-left:before {
content: "\e257";
}
.glyphicon-menu-right:before {
content: "\e258";
}
.glyphicon-menu-down:before {
content: "\e259";
}
.glyphicon-menu-up:before {
content: "\e260";
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
html {
font-size: 10px;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
body {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px;
line-height: 1.42857143;
color: #000;
background-color: #fff;
}
input,
button,
select,
textarea {
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
a {
color: #337ab7;
text-decoration: none;
}
a:hover,
a:focus {
color: #23527c;
text-decoration: underline;
}
a:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
figure {
margin: 0;
}
img {
vertical-align: middle;
}
.img-responsive,
.thumbnail > img,
.thumbnail a > img,
.carousel-inner > .item > img,
.carousel-inner > .item > a > img {
display: block;
max-width: 100%;
height: auto;
}
.img-rounded {
border-radius: 3px;
}
.img-thumbnail {
padding: 4px;
line-height: 1.42857143;
background-color: #fff;
border: 1px solid #ddd;
border-radius: 2px;
-webkit-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
display: inline-block;
max-width: 100%;
height: auto;
}
.img-circle {
border-radius: 50%;
}
hr {
margin-top: 18px;
margin-bottom: 18px;
border: 0;
border-top: 1px solid #eeeeee;
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
overflow: hidden;
clip: rect(0, 0, 0, 0);
border: 0;
}
.sr-only-focusable:active,
.sr-only-focusable:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}
[role="button"] {
cursor: pointer;
}
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6 {
font-family: inherit;
font-weight: 500;
line-height: 1.1;
color: inherit;
}
h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small,
.h1 small,
.h2 small,
.h3 small,
.h4 small,
.h5 small,
.h6 small,
h1 .small,
h2 .small,
h3 .small,
h4 .small,
h5 .small,
h6 .small,
.h1 .small,
.h2 .small,
.h3 .small,
.h4 .small,
.h5 .small,
.h6 .small {
font-weight: normal;
line-height: 1;
color: #777777;
}
h1,
.h1,
h2,
.h2,
h3,
.h3 {
margin-top: 18px;
margin-bottom: 9px;
}
h1 small,
.h1 small,
h2 small,
.h2 small,
h3 small,
.h3 small,
h1 .small,
.h1 .small,
h2 .small,
.h2 .small,
h3 .small,
.h3 .small {
font-size: 65%;
}
h4,
.h4,
h5,
.h5,
h6,
.h6 {
margin-top: 9px;
margin-bottom: 9px;
}
h4 small,
.h4 small,
h5 small,
.h5 small,
h6 small,
.h6 small,
h4 .small,
.h4 .small,
h5 .small,
.h5 .small,
h6 .small,
.h6 .small {
font-size: 75%;
}
h1,
.h1 {
font-size: 33px;
}
h2,
.h2 {
font-size: 27px;
}
h3,
.h3 {
font-size: 23px;
}
h4,
.h4 {
font-size: 17px;
}
h5,
.h5 {
font-size: 13px;
}
h6,
.h6 {
font-size: 12px;
}
p {
margin: 0 0 9px;
}
.lead {
margin-bottom: 18px;
font-size: 14px;
font-weight: 300;
line-height: 1.4;
}
@media (min-width: 768px) {
.lead {
font-size: 19.5px;
}
}
small,
.small {
font-size: 92%;
}
mark,
.mark {
background-color: #fcf8e3;
padding: .2em;
}
.text-left {
text-align: left;
}
.text-right {
text-align: right;
}
.text-center {
text-align: center;
}
.text-justify {
text-align: justify;
}
.text-nowrap {
white-space: nowrap;
}
.text-lowercase {
text-transform: lowercase;
}
.text-uppercase {
text-transform: uppercase;
}
.text-capitalize {
text-transform: capitalize;
}
.text-muted {
color: #777777;
}
.text-primary {
color: #337ab7;
}
a.text-primary:hover,
a.text-primary:focus {
color: #286090;
}
.text-success {
color: #3c763d;
}
a.text-success:hover,
a.text-success:focus {
color: #2b542c;
}
.text-info {
color: #31708f;
}
a.text-info:hover,
a.text-info:focus {
color: #245269;
}
.text-warning {
color: #8a6d3b;
}
a.text-warning:hover,
a.text-warning:focus {
color: #66512c;
}
.text-danger {
color: #a94442;
}
a.text-danger:hover,
a.text-danger:focus {
color: #843534;
}
.bg-primary {
color: #fff;
background-color: #337ab7;
}
a.bg-primary:hover,
a.bg-primary:focus {
background-color: #286090;
}
.bg-success {
background-color: #dff0d8;
}
a.bg-success:hover,
a.bg-success:focus {
background-color: #c1e2b3;
}
.bg-info {
background-color: #d9edf7;
}
a.bg-info:hover,
a.bg-info:focus {
background-color: #afd9ee;
}
.bg-warning {
background-color: #fcf8e3;
}
a.bg-warning:hover,
a.bg-warning:focus {
background-color: #f7ecb5;
}
.bg-danger {
background-color: #f2dede;
}
a.bg-danger:hover,
a.bg-danger:focus {
background-color: #e4b9b9;
}
.page-header {
padding-bottom: 8px;
margin: 36px 0 18px;
border-bottom: 1px solid #eeeeee;
}
ul,
ol {
margin-top: 0;
margin-bottom: 9px;
}
ul ul,
ol ul,
ul ol,
ol ol {
margin-bottom: 0;
}
.list-unstyled {
padding-left: 0;
list-style: none;
}
.list-inline {
padding-left: 0;
list-style: none;
margin-left: -5px;
}
.list-inline > li {
display: inline-block;
padding-left: 5px;
padding-right: 5px;
}
dl {
margin-top: 0;
margin-bottom: 18px;
}
dt,
dd {
line-height: 1.42857143;
}
dt {
font-weight: bold;
}
dd {
margin-left: 0;
}
@media (min-width: 541px) {
.dl-horizontal dt {
float: left;
width: 160px;
clear: left;
text-align: right;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.dl-horizontal dd {
margin-left: 180px;
}
}
abbr[title],
abbr[data-original-title] {
cursor: help;
border-bottom: 1px dotted #777777;
}
.initialism {
font-size: 90%;
text-transform: uppercase;
}
blockquote {
padding: 9px 18px;
margin: 0 0 18px;
font-size: inherit;
border-left: 5px solid #eeeeee;
}
blockquote p:last-child,
blockquote ul:last-child,
blockquote ol:last-child {
margin-bottom: 0;
}
blockquote footer,
blockquote small,
blockquote .small {
display: block;
font-size: 80%;
line-height: 1.42857143;
color: #777777;
}
blockquote footer:before,
blockquote small:before,
blockquote .small:before {
content: '\2014 \00A0';
}
.blockquote-reverse,
blockquote.pull-right {
padding-right: 15px;
padding-left: 0;
border-right: 5px solid #eeeeee;
border-left: 0;
text-align: right;
}
.blockquote-reverse footer:before,
blockquote.pull-right footer:before,
.blockquote-reverse small:before,
blockquote.pull-right small:before,
.blockquote-reverse .small:before,
blockquote.pull-right .small:before {
content: '';
}
.blockquote-reverse footer:after,
blockquote.pull-right footer:after,
.blockquote-reverse small:after,
blockquote.pull-right small:after,
.blockquote-reverse .small:after,
blockquote.pull-right .small:after {
content: '\00A0 \2014';
}
address {
margin-bottom: 18px;
font-style: normal;
line-height: 1.42857143;
}
code,
kbd,
pre,
samp {
font-family: monospace;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
background-color: #f9f2f4;
border-radius: 2px;
}
kbd {
padding: 2px 4px;
font-size: 90%;
color: #888;
background-color: transparent;
border-radius: 1px;
box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
}
kbd kbd {
padding: 0;
font-size: 100%;
font-weight: bold;
box-shadow: none;
}
pre {
display: block;
padding: 8.5px;
margin: 0 0 9px;
font-size: 12px;
line-height: 1.42857143;
word-break: break-all;
word-wrap: break-word;
color: #333333;
background-color: #f5f5f5;
border: 1px solid #ccc;
border-radius: 2px;
}
pre code {
padding: 0;
font-size: inherit;
color: inherit;
white-space: pre-wrap;
background-color: transparent;
border-radius: 0;
}
.pre-scrollable {
max-height: 340px;
overflow-y: scroll;
}
.container {
margin-right: auto;
margin-left: auto;
padding-left: 0px;
padding-right: 0px;
}
@media (min-width: 768px) {
.container {
width: 768px;
}
}
@media (min-width: 992px) {
.container {
width: 940px;
}
}
@media (min-width: 1200px) {
.container {
width: 1140px;
}
}
.container-fluid {
margin-right: auto;
margin-left: auto;
padding-left: 0px;
padding-right: 0px;
}
.row {
margin-left: 0px;
margin-right: 0px;
}
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
position: relative;
min-height: 1px;
padding-left: 0px;
padding-right: 0px;
}
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
float: left;
}
.col-xs-12 {
width: 100%;
}
.col-xs-11 {
width: 91.66666667%;
}
.col-xs-10 {
width: 83.33333333%;
}
.col-xs-9 {
width: 75%;
}
.col-xs-8 {
width: 66.66666667%;
}
.col-xs-7 {
width: 58.33333333%;
}
.col-xs-6 {
width: 50%;
}
.col-xs-5 {
width: 41.66666667%;
}
.col-xs-4 {
width: 33.33333333%;
}
.col-xs-3 {
width: 25%;
}
.col-xs-2 {
width: 16.66666667%;
}
.col-xs-1 {
width: 8.33333333%;
}
.col-xs-pull-12 {
right: 100%;
}
.col-xs-pull-11 {
right: 91.66666667%;
}
.col-xs-pull-10 {
right: 83.33333333%;
}
.col-xs-pull-9 {
right: 75%;
}
.col-xs-pull-8 {
right: 66.66666667%;
}
.col-xs-pull-7 {
right: 58.33333333%;
}
.col-xs-pull-6 {
right: 50%;
}
.col-xs-pull-5 {
right: 41.66666667%;
}
.col-xs-pull-4 {
right: 33.33333333%;
}
.col-xs-pull-3 {
right: 25%;
}
.col-xs-pull-2 {
right: 16.66666667%;
}
.col-xs-pull-1 {
right: 8.33333333%;
}
.col-xs-pull-0 {
right: auto;
}
.col-xs-push-12 {
left: 100%;
}
.col-xs-push-11 {
left: 91.66666667%;
}
.col-xs-push-10 {
left: 83.33333333%;
}
.col-xs-push-9 {
left: 75%;
}
.col-xs-push-8 {
left: 66.66666667%;
}
.col-xs-push-7 {
left: 58.33333333%;
}
.col-xs-push-6 {
left: 50%;
}
.col-xs-push-5 {
left: 41.66666667%;
}
.col-xs-push-4 {
left: 33.33333333%;
}
.col-xs-push-3 {
left: 25%;
}
.col-xs-push-2 {
left: 16.66666667%;
}
.col-xs-push-1 {
left: 8.33333333%;
}
.col-xs-push-0 {
left: auto;
}
.col-xs-offset-12 {
margin-left: 100%;
}
.col-xs-offset-11 {
margin-left: 91.66666667%;
}
.col-xs-offset-10 {
margin-left: 83.33333333%;
}
.col-xs-offset-9 {
margin-left: 75%;
}
.col-xs-offset-8 {
margin-left: 66.66666667%;
}
.col-xs-offset-7 {
margin-left: 58.33333333%;
}
.col-xs-offset-6 {
margin-left: 50%;
}
.col-xs-offset-5 {
margin-left: 41.66666667%;
}
.col-xs-offset-4 {
margin-left: 33.33333333%;
}
.col-xs-offset-3 {
margin-left: 25%;
}
.col-xs-offset-2 {
margin-left: 16.66666667%;
}
.col-xs-offset-1 {
margin-left: 8.33333333%;
}
.col-xs-offset-0 {
margin-left: 0%;
}
@media (min-width: 768px) {
.col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
float: left;
}
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
.col-sm-pull-12 {
right: 100%;
}
.col-sm-pull-11 {
right: 91.66666667%;
}
.col-sm-pull-10 {
right: 83.33333333%;
}
.col-sm-pull-9 {
right: 75%;
}
.col-sm-pull-8 {
right: 66.66666667%;
}
.col-sm-pull-7 {
right: 58.33333333%;
}
.col-sm-pull-6 {
right: 50%;
}
.col-sm-pull-5 {
right: 41.66666667%;
}
.col-sm-pull-4 {
right: 33.33333333%;
}
.col-sm-pull-3 {
right: 25%;
}
.col-sm-pull-2 {
right: 16.66666667%;
}
.col-sm-pull-1 {
right: 8.33333333%;
}
.col-sm-pull-0 {
right: auto;
}
.col-sm-push-12 {
left: 100%;
}
.col-sm-push-11 {
left: 91.66666667%;
}
.col-sm-push-10 {
left: 83.33333333%;
}
.col-sm-push-9 {
left: 75%;
}
.col-sm-push-8 {
left: 66.66666667%;
}
.col-sm-push-7 {
left: 58.33333333%;
}
.col-sm-push-6 {
left: 50%;
}
.col-sm-push-5 {
left: 41.66666667%;
}
.col-sm-push-4 {
left: 33.33333333%;
}
.col-sm-push-3 {
left: 25%;
}
.col-sm-push-2 {
left: 16.66666667%;
}
.col-sm-push-1 {
left: 8.33333333%;
}
.col-sm-push-0 {
left: auto;
}
.col-sm-offset-12 {
margin-left: 100%;
}
.col-sm-offset-11 {
margin-left: 91.66666667%;
}
.col-sm-offset-10 {
margin-left: 83.33333333%;
}
.col-sm-offset-9 {
margin-left: 75%;
}
.col-sm-offset-8 {
margin-left: 66.66666667%;
}
.col-sm-offset-7 {
margin-left: 58.33333333%;
}
.col-sm-offset-6 {
margin-left: 50%;
}
.col-sm-offset-5 {
margin-left: 41.66666667%;
}
.col-sm-offset-4 {
margin-left: 33.33333333%;
}
.col-sm-offset-3 {
margin-left: 25%;
}
.col-sm-offset-2 {
margin-left: 16.66666667%;
}
.col-sm-offset-1 {
margin-left: 8.33333333%;
}
.col-sm-offset-0 {
margin-left: 0%;
}
}
@media (min-width: 992px) {
.col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
float: left;
}
.col-md-12 {
width: 100%;
}
.col-md-11 {
width: 91.66666667%;
}
.col-md-10 {
width: 83.33333333%;
}
.col-md-9 {
width: 75%;
}
.col-md-8 {
width: 66.66666667%;
}
.col-md-7 {
width: 58.33333333%;
}
.col-md-6 {
width: 50%;
}
.col-md-5 {
width: 41.66666667%;
}
.col-md-4 {
width: 33.33333333%;
}
.col-md-3 {
width: 25%;
}
.col-md-2 {
width: 16.66666667%;
}
.col-md-1 {
width: 8.33333333%;
}
.col-md-pull-12 {
right: 100%;
}
.col-md-pull-11 {
right: 91.66666667%;
}
.col-md-pull-10 {
right: 83.33333333%;
}
.col-md-pull-9 {
right: 75%;
}
.col-md-pull-8 {
right: 66.66666667%;
}
.col-md-pull-7 {
right: 58.33333333%;
}
.col-md-pull-6 {
right: 50%;
}
.col-md-pull-5 {
right: 41.66666667%;
}
.col-md-pull-4 {
right: 33.33333333%;
}
.col-md-pull-3 {
right: 25%;
}
.col-md-pull-2 {
right: 16.66666667%;
}
.col-md-pull-1 {
right: 8.33333333%;
}
.col-md-pull-0 {
right: auto;
}
.col-md-push-12 {
left: 100%;
}
.col-md-push-11 {
left: 91.66666667%;
}
.col-md-push-10 {
left: 83.33333333%;
}
.col-md-push-9 {
left: 75%;
}
.col-md-push-8 {
left: 66.66666667%;
}
.col-md-push-7 {
left: 58.33333333%;
}
.col-md-push-6 {
left: 50%;
}
.col-md-push-5 {
left: 41.66666667%;
}
.col-md-push-4 {
left: 33.33333333%;
}
.col-md-push-3 {
left: 25%;
}
.col-md-push-2 {
left: 16.66666667%;
}
.col-md-push-1 {
left: 8.33333333%;
}
.col-md-push-0 {
left: auto;
}
.col-md-offset-12 {
margin-left: 100%;
}
.col-md-offset-11 {
margin-left: 91.66666667%;
}
.col-md-offset-10 {
margin-left: 83.33333333%;
}
.col-md-offset-9 {
margin-left: 75%;
}
.col-md-offset-8 {
margin-left: 66.66666667%;
}
.col-md-offset-7 {
margin-left: 58.33333333%;
}
.col-md-offset-6 {
margin-left: 50%;
}
.col-md-offset-5 {
margin-left: 41.66666667%;
}
.col-md-offset-4 {
margin-left: 33.33333333%;
}
.col-md-offset-3 {
margin-left: 25%;
}
.col-md-offset-2 {
margin-left: 16.66666667%;
}
.col-md-offset-1 {
margin-left: 8.33333333%;
}
.col-md-offset-0 {
margin-left: 0%;
}
}
@media (min-width: 1200px) {
.col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
float: left;
}
.col-lg-12 {
width: 100%;
}
.col-lg-11 {
width: 91.66666667%;
}
.col-lg-10 {
width: 83.33333333%;
}
.col-lg-9 {
width: 75%;
}
.col-lg-8 {
width: 66.66666667%;
}
.col-lg-7 {
width: 58.33333333%;
}
.col-lg-6 {
width: 50%;
}
.col-lg-5 {
width: 41.66666667%;
}
.col-lg-4 {
width: 33.33333333%;
}
.col-lg-3 {
width: 25%;
}
.col-lg-2 {
width: 16.66666667%;
}
.col-lg-1 {
width: 8.33333333%;
}
.col-lg-pull-12 {
right: 100%;
}
.col-lg-pull-11 {
right: 91.66666667%;
}
.col-lg-pull-10 {
right: 83.33333333%;
}
.col-lg-pull-9 {
right: 75%;
}
.col-lg-pull-8 {
right: 66.66666667%;
}
.col-lg-pull-7 {
right: 58.33333333%;
}
.col-lg-pull-6 {
right: 50%;
}
.col-lg-pull-5 {
right: 41.66666667%;
}
.col-lg-pull-4 {
right: 33.33333333%;
}
.col-lg-pull-3 {
right: 25%;
}
.col-lg-pull-2 {
right: 16.66666667%;
}
.col-lg-pull-1 {
right: 8.33333333%;
}
.col-lg-pull-0 {
right: auto;
}
.col-lg-push-12 {
left: 100%;
}
.col-lg-push-11 {
left: 91.66666667%;
}
.col-lg-push-10 {
left: 83.33333333%;
}
.col-lg-push-9 {
left: 75%;
}
.col-lg-push-8 {
left: 66.66666667%;
}
.col-lg-push-7 {
left: 58.33333333%;
}
.col-lg-push-6 {
left: 50%;
}
.col-lg-push-5 {
left: 41.66666667%;
}
.col-lg-push-4 {
left: 33.33333333%;
}
.col-lg-push-3 {
left: 25%;
}
.col-lg-push-2 {
left: 16.66666667%;
}
.col-lg-push-1 {
left: 8.33333333%;
}
.col-lg-push-0 {
left: auto;
}
.col-lg-offset-12 {
margin-left: 100%;
}
.col-lg-offset-11 {
margin-left: 91.66666667%;
}
.col-lg-offset-10 {
margin-left: 83.33333333%;
}
.col-lg-offset-9 {
margin-left: 75%;
}
.col-lg-offset-8 {
margin-left: 66.66666667%;
}
.col-lg-offset-7 {
margin-left: 58.33333333%;
}
.col-lg-offset-6 {
margin-left: 50%;
}
.col-lg-offset-5 {
margin-left: 41.66666667%;
}
.col-lg-offset-4 {
margin-left: 33.33333333%;
}
.col-lg-offset-3 {
margin-left: 25%;
}
.col-lg-offset-2 {
margin-left: 16.66666667%;
}
.col-lg-offset-1 {
margin-left: 8.33333333%;
}
.col-lg-offset-0 {
margin-left: 0%;
}
}
table {
background-color: transparent;
}
caption {
padding-top: 8px;
padding-bottom: 8px;
color: #777777;
text-align: left;
}
th {
text-align: left;
}
.table {
width: 100%;
max-width: 100%;
margin-bottom: 18px;
}
.table > thead > tr > th,
.table > tbody > tr > th,
.table > tfoot > tr > th,
.table > thead > tr > td,
.table > tbody > tr > td,
.table > tfoot > tr > td {
padding: 8px;
line-height: 1.42857143;
vertical-align: top;
border-top: 1px solid #ddd;
}
.table > thead > tr > th {
vertical-align: bottom;
border-bottom: 2px solid #ddd;
}
.table > caption + thead > tr:first-child > th,
.table > colgroup + thead > tr:first-child > th,
.table > thead:first-child > tr:first-child > th,
.table > caption + thead > tr:first-child > td,
.table > colgroup + thead > tr:first-child > td,
.table > thead:first-child > tr:first-child > td {
border-top: 0;
}
.table > tbody + tbody {
border-top: 2px solid #ddd;
}
.table .table {
background-color: #fff;
}
.table-condensed > thead > tr > th,
.table-condensed > tbody > tr > th,
.table-condensed > tfoot > tr > th,
.table-condensed > thead > tr > td,
.table-condensed > tbody > tr > td,
.table-condensed > tfoot > tr > td {
padding: 5px;
}
.table-bordered {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > tbody > tr > th,
.table-bordered > tfoot > tr > th,
.table-bordered > thead > tr > td,
.table-bordered > tbody > tr > td,
.table-bordered > tfoot > tr > td {
border: 1px solid #ddd;
}
.table-bordered > thead > tr > th,
.table-bordered > thead > tr > td {
border-bottom-width: 2px;
}
.table-striped > tbody > tr:nth-of-type(odd) {
background-color: #f9f9f9;
}
.table-hover > tbody > tr:hover {
background-color: #f5f5f5;
}
table col[class*="col-"] {
position: static;
float: none;
display: table-column;
}
table td[class*="col-"],
table th[class*="col-"] {
position: static;
float: none;
display: table-cell;
}
.table > thead > tr > td.active,
.table > tbody > tr > td.active,
.table > tfoot > tr > td.active,
.table > thead > tr > th.active,
.table > tbody > tr > th.active,
.table > tfoot > tr > th.active,
.table > thead > tr.active > td,
.table > tbody > tr.active > td,
.table > tfoot > tr.active > td,
.table > thead > tr.active > th,
.table > tbody > tr.active > th,
.table > tfoot > tr.active > th {
background-color: #f5f5f5;
}
.table-hover > tbody > tr > td.active:hover,
.table-hover > tbody > tr > th.active:hover,
.table-hover > tbody > tr.active:hover > td,
.table-hover > tbody > tr:hover > .active,
.table-hover > tbody > tr.active:hover > th {
background-color: #e8e8e8;
}
.table > thead > tr > td.success,
.table > tbody > tr > td.success,
.table > tfoot > tr > td.success,
.table > thead > tr > th.success,
.table > tbody > tr > th.success,
.table > tfoot > tr > th.success,
.table > thead > tr.success > td,
.table > tbody > tr.success > td,
.table > tfoot > tr.success > td,
.table > thead > tr.success > th,
.table > tbody > tr.success > th,
.table > tfoot > tr.success > th {
background-color: #dff0d8;
}
.table-hover > tbody > tr > td.success:hover,
.table-hover > tbody > tr > th.success:hover,
.table-hover > tbody > tr.success:hover > td,
.table-hover > tbody > tr:hover > .success,
.table-hover > tbody > tr.success:hover > th {
background-color: #d0e9c6;
}
.table > thead > tr > td.info,
.table > tbody > tr > td.info,
.table > tfoot > tr > td.info,
.table > thead > tr > th.info,
.table > tbody > tr > th.info,
.table > tfoot > tr > th.info,
.table > thead > tr.info > td,
.table > tbody > tr.info > td,
.table > tfoot > tr.info > td,
.table > thead > tr.info > th,
.table > tbody > tr.info > th,
.table > tfoot > tr.info > th {
background-color: #d9edf7;
}
.table-hover > tbody > tr > td.info:hover,
.table-hover > tbody > tr > th.info:hover,
.table-hover > tbody > tr.info:hover > td,
.table-hover > tbody > tr:hover > .info,
.table-hover > tbody > tr.info:hover > th {
background-color: #c4e3f3;
}
.table > thead > tr > td.warning,
.table > tbody > tr > td.warning,
.table > tfoot > tr > td.warning,
.table > thead > tr > th.warning,
.table > tbody > tr > th.warning,
.table > tfoot > tr > th.warning,
.table > thead > tr.warning > td,
.table > tbody > tr.warning > td,
.table > tfoot > tr.warning > td,
.table > thead > tr.warning > th,
.table > tbody > tr.warning > th,
.table > tfoot > tr.warning > th {
background-color: #fcf8e3;
}
.table-hover > tbody > tr > td.warning:hover,
.table-hover > tbody > tr > th.warning:hover,
.table-hover > tbody > tr.warning:hover > td,
.table-hover > tbody > tr:hover > .warning,
.table-hover > tbody > tr.warning:hover > th {
background-color: #faf2cc;
}
.table > thead > tr > td.danger,
.table > tbody > tr > td.danger,
.table > tfoot > tr > td.danger,
.table > thead > tr > th.danger,
.table > tbody > tr > th.danger,
.table > tfoot > tr > th.danger,
.table > thead > tr.danger > td,
.table > tbody > tr.danger > td,
.table > tfoot > tr.danger > td,
.table > thead > tr.danger > th,
.table > tbody > tr.danger > th,
.table > tfoot > tr.danger > th {
background-color: #f2dede;
}
.table-hover > tbody > tr > td.danger:hover,
.table-hover > tbody > tr > th.danger:hover,
.table-hover > tbody > tr.danger:hover > td,
.table-hover > tbody > tr:hover > .danger,
.table-hover > tbody > tr.danger:hover > th {
background-color: #ebcccc;
}
.table-responsive {
overflow-x: auto;
min-height: 0.01%;
}
@media screen and (max-width: 767px) {
.table-responsive {
width: 100%;
margin-bottom: 13.5px;
overflow-y: hidden;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #ddd;
}
.table-responsive > .table {
margin-bottom: 0;
}
.table-responsive > .table > thead > tr > th,
.table-responsive > .table > tbody > tr > th,
.table-responsive > .table > tfoot > tr > th,
.table-responsive > .table > thead > tr > td,
.table-responsive > .table > tbody > tr > td,
.table-responsive > .table > tfoot > tr > td {
white-space: nowrap;
}
.table-responsive > .table-bordered {
border: 0;
}
.table-responsive > .table-bordered > thead > tr > th:first-child,
.table-responsive > .table-bordered > tbody > tr > th:first-child,
.table-responsive > .table-bordered > tfoot > tr > th:first-child,
.table-responsive > .table-bordered > thead > tr > td:first-child,
.table-responsive > .table-bordered > tbody > tr > td:first-child,
.table-responsive > .table-bordered > tfoot > tr > td:first-child {
border-left: 0;
}
.table-responsive > .table-bordered > thead > tr > th:last-child,
.table-responsive > .table-bordered > tbody > tr > th:last-child,
.table-responsive > .table-bordered > tfoot > tr > th:last-child,
.table-responsive > .table-bordered > thead > tr > td:last-child,
.table-responsive > .table-bordered > tbody > tr > td:last-child,
.table-responsive > .table-bordered > tfoot > tr > td:last-child {
border-right: 0;
}
.table-responsive > .table-bordered > tbody > tr:last-child > th,
.table-responsive > .table-bordered > tfoot > tr:last-child > th,
.table-responsive > .table-bordered > tbody > tr:last-child > td,
.table-responsive > .table-bordered > tfoot > tr:last-child > td {
border-bottom: 0;
}
}
fieldset {
padding: 0;
margin: 0;
border: 0;
min-width: 0;
}
legend {
display: block;
width: 100%;
padding: 0;
margin-bottom: 18px;
font-size: 19.5px;
line-height: inherit;
color: #333333;
border: 0;
border-bottom: 1px solid #e5e5e5;
}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
input[type="search"] {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
input[type="radio"],
input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9;
line-height: normal;
}
input[type="file"] {
display: block;
}
input[type="range"] {
display: block;
width: 100%;
}
select[multiple],
select[size] {
height: auto;
}
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
output {
display: block;
padding-top: 7px;
font-size: 13px;
line-height: 1.42857143;
color: #555555;
}
.form-control {
display: block;
width: 100%;
height: 32px;
padding: 6px 12px;
font-size: 13px;
line-height: 1.42857143;
color: #555555;
background-color: #fff;
background-image: none;
border: 1px solid #ccc;
border-radius: 2px;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
-webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
}
.form-control:focus {
border-color: #66afe9;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
}
.form-control::-moz-placeholder {
color: #999;
opacity: 1;
}
.form-control:-ms-input-placeholder {
color: #999;
}
.form-control::-webkit-input-placeholder {
color: #999;
}
.form-control::-ms-expand {
border: 0;
background-color: transparent;
}
.form-control[disabled],
.form-control[readonly],
fieldset[disabled] .form-control {
background-color: #eeeeee;
opacity: 1;
}
.form-control[disabled],
fieldset[disabled] .form-control {
cursor: not-allowed;
}
textarea.form-control {
height: auto;
}
input[type="search"] {
-webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
input[type="date"].form-control,
input[type="time"].form-control,
input[type="datetime-local"].form-control,
input[type="month"].form-control {
line-height: 32px;
}
input[type="date"].input-sm,
input[type="time"].input-sm,
input[type="datetime-local"].input-sm,
input[type="month"].input-sm,
.input-group-sm input[type="date"],
.input-group-sm input[type="time"],
.input-group-sm input[type="datetime-local"],
.input-group-sm input[type="month"] {
line-height: 30px;
}
input[type="date"].input-lg,
input[type="time"].input-lg,
input[type="datetime-local"].input-lg,
input[type="month"].input-lg,
.input-group-lg input[type="date"],
.input-group-lg input[type="time"],
.input-group-lg input[type="datetime-local"],
.input-group-lg input[type="month"] {
line-height: 45px;
}
}
.form-group {
margin-bottom: 15px;
}
.radio,
.checkbox {
position: relative;
display: block;
margin-top: 10px;
margin-bottom: 10px;
}
.radio label,
.checkbox label {
min-height: 18px;
padding-left: 20px;
margin-bottom: 0;
font-weight: normal;
cursor: pointer;
}
.radio input[type="radio"],
.radio-inline input[type="radio"],
.checkbox input[type="checkbox"],
.checkbox-inline input[type="checkbox"] {
position: absolute;
margin-left: -20px;
margin-top: 4px \9;
}
.radio + .radio,
.checkbox + .checkbox {
margin-top: -5px;
}
.radio-inline,
.checkbox-inline {
position: relative;
display: inline-block;
padding-left: 20px;
margin-bottom: 0;
vertical-align: middle;
font-weight: normal;
cursor: pointer;
}
.radio-inline + .radio-inline,
.checkbox-inline + .checkbox-inline {
margin-top: 0;
margin-left: 10px;
}
input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"].disabled,
input[type="checkbox"].disabled,
fieldset[disabled] input[type="radio"],
fieldset[disabled] input[type="checkbox"] {
cursor: not-allowed;
}
.radio-inline.disabled,
.checkbox-inline.disabled,
fieldset[disabled] .radio-inline,
fieldset[disabled] .checkbox-inline {
cursor: not-allowed;
}
.radio.disabled label,
.checkbox.disabled label,
fieldset[disabled] .radio label,
fieldset[disabled] .checkbox label {
cursor: not-allowed;
}
.form-control-static {
padding-top: 7px;
padding-bottom: 7px;
margin-bottom: 0;
min-height: 31px;
}
.form-control-static.input-lg,
.form-control-static.input-sm {
padding-left: 0;
padding-right: 0;
}
.input-sm {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
select.input-sm {
height: 30px;
line-height: 30px;
}
textarea.input-sm,
select[multiple].input-sm {
height: auto;
}
.form-group-sm .form-control {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.form-group-sm select.form-control {
height: 30px;
line-height: 30px;
}
.form-group-sm textarea.form-control,
.form-group-sm select[multiple].form-control {
height: auto;
}
.form-group-sm .form-control-static {
height: 30px;
min-height: 30px;
padding: 6px 10px;
font-size: 12px;
line-height: 1.5;
}
.input-lg {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
select.input-lg {
height: 45px;
line-height: 45px;
}
textarea.input-lg,
select[multiple].input-lg {
height: auto;
}
.form-group-lg .form-control {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
.form-group-lg select.form-control {
height: 45px;
line-height: 45px;
}
.form-group-lg textarea.form-control,
.form-group-lg select[multiple].form-control {
height: auto;
}
.form-group-lg .form-control-static {
height: 45px;
min-height: 35px;
padding: 11px 16px;
font-size: 17px;
line-height: 1.3333333;
}
.has-feedback {
position: relative;
}
.has-feedback .form-control {
padding-right: 40px;
}
.form-control-feedback {
position: absolute;
top: 0;
right: 0;
z-index: 2;
display: block;
width: 32px;
height: 32px;
line-height: 32px;
text-align: center;
pointer-events: none;
}
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback,
.form-group-lg .form-control + .form-control-feedback {
width: 45px;
height: 45px;
line-height: 45px;
}
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback,
.form-group-sm .form-control + .form-control-feedback {
width: 30px;
height: 30px;
line-height: 30px;
}
.has-success .help-block,
.has-success .control-label,
.has-success .radio,
.has-success .checkbox,
.has-success .radio-inline,
.has-success .checkbox-inline,
.has-success.radio label,
.has-success.checkbox label,
.has-success.radio-inline label,
.has-success.checkbox-inline label {
color: #3c763d;
}
.has-success .form-control {
border-color: #3c763d;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-success .form-control:focus {
border-color: #2b542c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
.has-success .input-group-addon {
color: #3c763d;
border-color: #3c763d;
background-color: #dff0d8;
}
.has-success .form-control-feedback {
color: #3c763d;
}
.has-warning .help-block,
.has-warning .control-label,
.has-warning .radio,
.has-warning .checkbox,
.has-warning .radio-inline,
.has-warning .checkbox-inline,
.has-warning.radio label,
.has-warning.checkbox label,
.has-warning.radio-inline label,
.has-warning.checkbox-inline label {
color: #8a6d3b;
}
.has-warning .form-control {
border-color: #8a6d3b;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-warning .form-control:focus {
border-color: #66512c;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
.has-warning .input-group-addon {
color: #8a6d3b;
border-color: #8a6d3b;
background-color: #fcf8e3;
}
.has-warning .form-control-feedback {
color: #8a6d3b;
}
.has-error .help-block,
.has-error .control-label,
.has-error .radio,
.has-error .checkbox,
.has-error .radio-inline,
.has-error .checkbox-inline,
.has-error.radio label,
.has-error.checkbox label,
.has-error.radio-inline label,
.has-error.checkbox-inline label {
color: #a94442;
}
.has-error .form-control {
border-color: #a94442;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
.has-error .form-control:focus {
border-color: #843534;
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
.has-error .input-group-addon {
color: #a94442;
border-color: #a94442;
background-color: #f2dede;
}
.has-error .form-control-feedback {
color: #a94442;
}
.has-feedback label ~ .form-control-feedback {
top: 23px;
}
.has-feedback label.sr-only ~ .form-control-feedback {
top: 0;
}
.help-block {
display: block;
margin-top: 5px;
margin-bottom: 10px;
color: #404040;
}
@media (min-width: 768px) {
.form-inline .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.form-inline .form-control-static {
display: inline-block;
}
.form-inline .input-group {
display: inline-table;
vertical-align: middle;
}
.form-inline .input-group .input-group-addon,
.form-inline .input-group .input-group-btn,
.form-inline .input-group .form-control {
width: auto;
}
.form-inline .input-group > .form-control {
width: 100%;
}
.form-inline .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio,
.form-inline .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.form-inline .radio label,
.form-inline .checkbox label {
padding-left: 0;
}
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.form-inline .has-feedback .form-control-feedback {
top: 0;
}
}
.form-horizontal .radio,
.form-horizontal .checkbox,
.form-horizontal .radio-inline,
.form-horizontal .checkbox-inline {
margin-top: 0;
margin-bottom: 0;
padding-top: 7px;
}
.form-horizontal .radio,
.form-horizontal .checkbox {
min-height: 25px;
}
.form-horizontal .form-group {
margin-left: 0px;
margin-right: 0px;
}
@media (min-width: 768px) {
.form-horizontal .control-label {
text-align: right;
margin-bottom: 0;
padding-top: 7px;
}
}
.form-horizontal .has-feedback .form-control-feedback {
right: 0px;
}
@media (min-width: 768px) {
.form-horizontal .form-group-lg .control-label {
padding-top: 11px;
font-size: 17px;
}
}
@media (min-width: 768px) {
.form-horizontal .form-group-sm .control-label {
padding-top: 6px;
font-size: 12px;
}
}
.btn {
display: inline-block;
margin-bottom: 0;
font-weight: normal;
text-align: center;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
padding: 6px 12px;
font-size: 13px;
line-height: 1.42857143;
border-radius: 2px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.btn:focus,
.btn:active:focus,
.btn.active:focus,
.btn.focus,
.btn:active.focus,
.btn.active.focus {
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn:hover,
.btn:focus,
.btn.focus {
color: #333;
text-decoration: none;
}
.btn:active,
.btn.active {
outline: 0;
background-image: none;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn.disabled,
.btn[disabled],
fieldset[disabled] .btn {
cursor: not-allowed;
opacity: 0.65;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
box-shadow: none;
}
a.btn.disabled,
fieldset[disabled] a.btn {
pointer-events: none;
}
.btn-default {
color: #333;
background-color: #fff;
border-color: #ccc;
}
.btn-default:focus,
.btn-default.focus {
color: #333;
background-color: #e6e6e6;
border-color: #8c8c8c;
}
.btn-default:hover {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
color: #333;
background-color: #e6e6e6;
border-color: #adadad;
}
.btn-default:active:hover,
.btn-default.active:hover,
.open > .dropdown-toggle.btn-default:hover,
.btn-default:active:focus,
.btn-default.active:focus,
.open > .dropdown-toggle.btn-default:focus,
.btn-default:active.focus,
.btn-default.active.focus,
.open > .dropdown-toggle.btn-default.focus {
color: #333;
background-color: #d4d4d4;
border-color: #8c8c8c;
}
.btn-default:active,
.btn-default.active,
.open > .dropdown-toggle.btn-default {
background-image: none;
}
.btn-default.disabled:hover,
.btn-default[disabled]:hover,
fieldset[disabled] .btn-default:hover,
.btn-default.disabled:focus,
.btn-default[disabled]:focus,
fieldset[disabled] .btn-default:focus,
.btn-default.disabled.focus,
.btn-default[disabled].focus,
fieldset[disabled] .btn-default.focus {
background-color: #fff;
border-color: #ccc;
}
.btn-default .badge {
color: #fff;
background-color: #333;
}
.btn-primary {
color: #fff;
background-color: #337ab7;
border-color: #2e6da4;
}
.btn-primary:focus,
.btn-primary.focus {
color: #fff;
background-color: #286090;
border-color: #122b40;
}
.btn-primary:hover {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
color: #fff;
background-color: #286090;
border-color: #204d74;
}
.btn-primary:active:hover,
.btn-primary.active:hover,
.open > .dropdown-toggle.btn-primary:hover,
.btn-primary:active:focus,
.btn-primary.active:focus,
.open > .dropdown-toggle.btn-primary:focus,
.btn-primary:active.focus,
.btn-primary.active.focus,
.open > .dropdown-toggle.btn-primary.focus {
color: #fff;
background-color: #204d74;
border-color: #122b40;
}
.btn-primary:active,
.btn-primary.active,
.open > .dropdown-toggle.btn-primary {
background-image: none;
}
.btn-primary.disabled:hover,
.btn-primary[disabled]:hover,
fieldset[disabled] .btn-primary:hover,
.btn-primary.disabled:focus,
.btn-primary[disabled]:focus,
fieldset[disabled] .btn-primary:focus,
.btn-primary.disabled.focus,
.btn-primary[disabled].focus,
fieldset[disabled] .btn-primary.focus {
background-color: #337ab7;
border-color: #2e6da4;
}
.btn-primary .badge {
color: #337ab7;
background-color: #fff;
}
.btn-success {
color: #fff;
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success:focus,
.btn-success.focus {
color: #fff;
background-color: #449d44;
border-color: #255625;
}
.btn-success:hover {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
color: #fff;
background-color: #449d44;
border-color: #398439;
}
.btn-success:active:hover,
.btn-success.active:hover,
.open > .dropdown-toggle.btn-success:hover,
.btn-success:active:focus,
.btn-success.active:focus,
.open > .dropdown-toggle.btn-success:focus,
.btn-success:active.focus,
.btn-success.active.focus,
.open > .dropdown-toggle.btn-success.focus {
color: #fff;
background-color: #398439;
border-color: #255625;
}
.btn-success:active,
.btn-success.active,
.open > .dropdown-toggle.btn-success {
background-image: none;
}
.btn-success.disabled:hover,
.btn-success[disabled]:hover,
fieldset[disabled] .btn-success:hover,
.btn-success.disabled:focus,
.btn-success[disabled]:focus,
fieldset[disabled] .btn-success:focus,
.btn-success.disabled.focus,
.btn-success[disabled].focus,
fieldset[disabled] .btn-success.focus {
background-color: #5cb85c;
border-color: #4cae4c;
}
.btn-success .badge {
color: #5cb85c;
background-color: #fff;
}
.btn-info {
color: #fff;
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info:focus,
.btn-info.focus {
color: #fff;
background-color: #31b0d5;
border-color: #1b6d85;
}
.btn-info:hover {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
color: #fff;
background-color: #31b0d5;
border-color: #269abc;
}
.btn-info:active:hover,
.btn-info.active:hover,
.open > .dropdown-toggle.btn-info:hover,
.btn-info:active:focus,
.btn-info.active:focus,
.open > .dropdown-toggle.btn-info:focus,
.btn-info:active.focus,
.btn-info.active.focus,
.open > .dropdown-toggle.btn-info.focus {
color: #fff;
background-color: #269abc;
border-color: #1b6d85;
}
.btn-info:active,
.btn-info.active,
.open > .dropdown-toggle.btn-info {
background-image: none;
}
.btn-info.disabled:hover,
.btn-info[disabled]:hover,
fieldset[disabled] .btn-info:hover,
.btn-info.disabled:focus,
.btn-info[disabled]:focus,
fieldset[disabled] .btn-info:focus,
.btn-info.disabled.focus,
.btn-info[disabled].focus,
fieldset[disabled] .btn-info.focus {
background-color: #5bc0de;
border-color: #46b8da;
}
.btn-info .badge {
color: #5bc0de;
background-color: #fff;
}
.btn-warning {
color: #fff;
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning:focus,
.btn-warning.focus {
color: #fff;
background-color: #ec971f;
border-color: #985f0d;
}
.btn-warning:hover {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
color: #fff;
background-color: #ec971f;
border-color: #d58512;
}
.btn-warning:active:hover,
.btn-warning.active:hover,
.open > .dropdown-toggle.btn-warning:hover,
.btn-warning:active:focus,
.btn-warning.active:focus,
.open > .dropdown-toggle.btn-warning:focus,
.btn-warning:active.focus,
.btn-warning.active.focus,
.open > .dropdown-toggle.btn-warning.focus {
color: #fff;
background-color: #d58512;
border-color: #985f0d;
}
.btn-warning:active,
.btn-warning.active,
.open > .dropdown-toggle.btn-warning {
background-image: none;
}
.btn-warning.disabled:hover,
.btn-warning[disabled]:hover,
fieldset[disabled] .btn-warning:hover,
.btn-warning.disabled:focus,
.btn-warning[disabled]:focus,
fieldset[disabled] .btn-warning:focus,
.btn-warning.disabled.focus,
.btn-warning[disabled].focus,
fieldset[disabled] .btn-warning.focus {
background-color: #f0ad4e;
border-color: #eea236;
}
.btn-warning .badge {
color: #f0ad4e;
background-color: #fff;
}
.btn-danger {
color: #fff;
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger:focus,
.btn-danger.focus {
color: #fff;
background-color: #c9302c;
border-color: #761c19;
}
.btn-danger:hover {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
color: #fff;
background-color: #c9302c;
border-color: #ac2925;
}
.btn-danger:active:hover,
.btn-danger.active:hover,
.open > .dropdown-toggle.btn-danger:hover,
.btn-danger:active:focus,
.btn-danger.active:focus,
.open > .dropdown-toggle.btn-danger:focus,
.btn-danger:active.focus,
.btn-danger.active.focus,
.open > .dropdown-toggle.btn-danger.focus {
color: #fff;
background-color: #ac2925;
border-color: #761c19;
}
.btn-danger:active,
.btn-danger.active,
.open > .dropdown-toggle.btn-danger {
background-image: none;
}
.btn-danger.disabled:hover,
.btn-danger[disabled]:hover,
fieldset[disabled] .btn-danger:hover,
.btn-danger.disabled:focus,
.btn-danger[disabled]:focus,
fieldset[disabled] .btn-danger:focus,
.btn-danger.disabled.focus,
.btn-danger[disabled].focus,
fieldset[disabled] .btn-danger.focus {
background-color: #d9534f;
border-color: #d43f3a;
}
.btn-danger .badge {
color: #d9534f;
background-color: #fff;
}
.btn-link {
color: #337ab7;
font-weight: normal;
border-radius: 0;
}
.btn-link,
.btn-link:active,
.btn-link.active,
.btn-link[disabled],
fieldset[disabled] .btn-link {
background-color: transparent;
-webkit-box-shadow: none;
box-shadow: none;
}
.btn-link,
.btn-link:hover,
.btn-link:focus,
.btn-link:active {
border-color: transparent;
}
.btn-link:hover,
.btn-link:focus {
color: #23527c;
text-decoration: underline;
background-color: transparent;
}
.btn-link[disabled]:hover,
fieldset[disabled] .btn-link:hover,
.btn-link[disabled]:focus,
fieldset[disabled] .btn-link:focus {
color: #777777;
text-decoration: none;
}
.btn-lg,
.btn-group-lg > .btn {
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
.btn-sm,
.btn-group-sm > .btn {
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.btn-xs,
.btn-group-xs > .btn {
padding: 1px 5px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
.btn-block {
display: block;
width: 100%;
}
.btn-block + .btn-block {
margin-top: 5px;
}
input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
width: 100%;
}
.fade {
opacity: 0;
-webkit-transition: opacity 0.15s linear;
-o-transition: opacity 0.15s linear;
transition: opacity 0.15s linear;
}
.fade.in {
opacity: 1;
}
.collapse {
display: none;
}
.collapse.in {
display: block;
}
tr.collapse.in {
display: table-row;
}
tbody.collapse.in {
display: table-row-group;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-property: height, visibility;
transition-property: height, visibility;
-webkit-transition-duration: 0.35s;
transition-duration: 0.35s;
-webkit-transition-timing-function: ease;
transition-timing-function: ease;
}
.caret {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle;
border-top: 4px dashed;
border-top: 4px solid \9;
border-right: 4px solid transparent;
border-left: 4px solid transparent;
}
.dropup,
.dropdown {
position: relative;
}
.dropdown-toggle:focus {
outline: 0;
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
display: none;
float: left;
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0;
list-style: none;
font-size: 13px;
text-align: left;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.15);
border-radius: 2px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
background-clip: padding-box;
}
.dropdown-menu.pull-right {
right: 0;
left: auto;
}
.dropdown-menu .divider {
height: 1px;
margin: 8px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.dropdown-menu > li > a {
display: block;
padding: 3px 20px;
clear: both;
font-weight: normal;
line-height: 1.42857143;
color: #333333;
white-space: nowrap;
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
text-decoration: none;
color: #262626;
background-color: #f5f5f5;
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
color: #fff;
text-decoration: none;
outline: 0;
background-color: #337ab7;
}
.dropdown-menu > .disabled > a,
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
color: #777777;
}
.dropdown-menu > .disabled > a:hover,
.dropdown-menu > .disabled > a:focus {
text-decoration: none;
background-color: transparent;
background-image: none;
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
cursor: not-allowed;
}
.open > .dropdown-menu {
display: block;
}
.open > a {
outline: 0;
}
.dropdown-menu-right {
left: auto;
right: 0;
}
.dropdown-menu-left {
left: 0;
right: auto;
}
.dropdown-header {
display: block;
padding: 3px 20px;
font-size: 12px;
line-height: 1.42857143;
color: #777777;
white-space: nowrap;
}
.dropdown-backdrop {
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: 990;
}
.pull-right > .dropdown-menu {
right: 0;
left: auto;
}
.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
border-top: 0;
border-bottom: 4px dashed;
border-bottom: 4px solid \9;
content: "";
}
.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
top: auto;
bottom: 100%;
margin-bottom: 2px;
}
@media (min-width: 541px) {
.navbar-right .dropdown-menu {
left: auto;
right: 0;
}
.navbar-right .dropdown-menu-left {
left: 0;
right: auto;
}
}
.btn-group,
.btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle;
}
.btn-group > .btn,
.btn-group-vertical > .btn {
position: relative;
float: left;
}
.btn-group > .btn:hover,
.btn-group-vertical > .btn:hover,
.btn-group > .btn:focus,
.btn-group-vertical > .btn:focus,
.btn-group > .btn:active,
.btn-group-vertical > .btn:active,
.btn-group > .btn.active,
.btn-group-vertical > .btn.active {
z-index: 2;
}
.btn-group .btn + .btn,
.btn-group .btn + .btn-group,
.btn-group .btn-group + .btn,
.btn-group .btn-group + .btn-group {
margin-left: -1px;
}
.btn-toolbar {
margin-left: -5px;
}
.btn-toolbar .btn,
.btn-toolbar .btn-group,
.btn-toolbar .input-group {
float: left;
}
.btn-toolbar > .btn,
.btn-toolbar > .btn-group,
.btn-toolbar > .input-group {
margin-left: 5px;
}
.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
border-radius: 0;
}
.btn-group > .btn:first-child {
margin-left: 0;
}
.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.btn-group > .btn:last-child:not(:first-child),
.btn-group > .dropdown-toggle:not(:first-child) {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.btn-group > .btn-group {
float: left;
}
.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
outline: 0;
}
.btn-group > .btn + .dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
.btn-group.open .dropdown-toggle {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-group.open .dropdown-toggle.btn-link {
-webkit-box-shadow: none;
box-shadow: none;
}
.btn .caret {
margin-left: 0;
}
.btn-lg .caret {
border-width: 5px 5px 0;
border-bottom-width: 0;
}
.dropup .btn-lg .caret {
border-width: 0 5px 5px;
}
.btn-group-vertical > .btn,
.btn-group-vertical > .btn-group,
.btn-group-vertical > .btn-group > .btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
.btn-group-vertical > .btn-group > .btn {
float: none;
}
.btn-group-vertical > .btn + .btn,
.btn-group-vertical > .btn + .btn-group,
.btn-group-vertical > .btn-group + .btn,
.btn-group-vertical > .btn-group + .btn-group {
margin-top: -1px;
margin-left: 0;
}
.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
border-radius: 0;
}
.btn-group-vertical > .btn:first-child:not(:last-child) {
border-top-right-radius: 2px;
border-top-left-radius: 2px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn:last-child:not(:first-child) {
border-top-right-radius: 0;
border-top-left-radius: 0;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 2px;
}
.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
border-radius: 0;
}
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.btn-group-justified {
display: table;
width: 100%;
table-layout: fixed;
border-collapse: separate;
}
.btn-group-justified > .btn,
.btn-group-justified > .btn-group {
float: none;
display: table-cell;
width: 1%;
}
.btn-group-justified > .btn-group .btn {
width: 100%;
}
.btn-group-justified > .btn-group .dropdown-menu {
left: auto;
}
[data-toggle="buttons"] > .btn input[type="radio"],
[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
[data-toggle="buttons"] > .btn input[type="checkbox"],
[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none;
}
.input-group {
position: relative;
display: table;
border-collapse: separate;
}
.input-group[class*="col-"] {
float: none;
padding-left: 0;
padding-right: 0;
}
.input-group .form-control {
position: relative;
z-index: 2;
float: left;
width: 100%;
margin-bottom: 0;
}
.input-group .form-control:focus {
z-index: 3;
}
.input-group-lg > .form-control,
.input-group-lg > .input-group-addon,
.input-group-lg > .input-group-btn > .btn {
height: 45px;
padding: 10px 16px;
font-size: 17px;
line-height: 1.3333333;
border-radius: 3px;
}
select.input-group-lg > .form-control,
select.input-group-lg > .input-group-addon,
select.input-group-lg > .input-group-btn > .btn {
height: 45px;
line-height: 45px;
}
textarea.input-group-lg > .form-control,
textarea.input-group-lg > .input-group-addon,
textarea.input-group-lg > .input-group-btn > .btn,
select[multiple].input-group-lg > .form-control,
select[multiple].input-group-lg > .input-group-addon,
select[multiple].input-group-lg > .input-group-btn > .btn {
height: auto;
}
.input-group-sm > .form-control,
.input-group-sm > .input-group-addon,
.input-group-sm > .input-group-btn > .btn {
height: 30px;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 1px;
}
select.input-group-sm > .form-control,
select.input-group-sm > .input-group-addon,
select.input-group-sm > .input-group-btn > .btn {
height: 30px;
line-height: 30px;
}
textarea.input-group-sm > .form-control,
textarea.input-group-sm > .input-group-addon,
textarea.input-group-sm > .input-group-btn > .btn,
select[multiple].input-group-sm > .form-control,
select[multiple].input-group-sm > .input-group-addon,
select[multiple].input-group-sm > .input-group-btn > .btn {
height: auto;
}
.input-group-addon,
.input-group-btn,
.input-group .form-control {
display: table-cell;
}
.input-group-addon:not(:first-child):not(:last-child),
.input-group-btn:not(:first-child):not(:last-child),
.input-group .form-control:not(:first-child):not(:last-child) {
border-radius: 0;
}
.input-group-addon,
.input-group-btn {
width: 1%;
white-space: nowrap;
vertical-align: middle;
}
.input-group-addon {
padding: 6px 12px;
font-size: 13px;
font-weight: normal;
line-height: 1;
color: #555555;
text-align: center;
background-color: #eeeeee;
border: 1px solid #ccc;
border-radius: 2px;
}
.input-group-addon.input-sm {
padding: 5px 10px;
font-size: 12px;
border-radius: 1px;
}
.input-group-addon.input-lg {
padding: 10px 16px;
font-size: 17px;
border-radius: 3px;
}
.input-group-addon input[type="radio"],
.input-group-addon input[type="checkbox"] {
margin-top: 0;
}
.input-group .form-control:first-child,
.input-group-addon:first-child,
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group > .btn,
.input-group-btn:first-child > .dropdown-toggle,
.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
border-bottom-right-radius: 0;
border-top-right-radius: 0;
}
.input-group-addon:first-child {
border-right: 0;
}
.input-group .form-control:last-child,
.input-group-addon:last-child,
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group > .btn,
.input-group-btn:last-child > .dropdown-toggle,
.input-group-btn:first-child > .btn:not(:first-child),
.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
border-bottom-left-radius: 0;
border-top-left-radius: 0;
}
.input-group-addon:last-child {
border-left: 0;
}
.input-group-btn {
position: relative;
font-size: 0;
white-space: nowrap;
}
.input-group-btn > .btn {
position: relative;
}
.input-group-btn > .btn + .btn {
margin-left: -1px;
}
.input-group-btn > .btn:hover,
.input-group-btn > .btn:focus,
.input-group-btn > .btn:active {
z-index: 2;
}
.input-group-btn:first-child > .btn,
.input-group-btn:first-child > .btn-group {
margin-right: -1px;
}
.input-group-btn:last-child > .btn,
.input-group-btn:last-child > .btn-group {
z-index: 2;
margin-left: -1px;
}
.nav {
margin-bottom: 0;
padding-left: 0;
list-style: none;
}
.nav > li {
position: relative;
display: block;
}
.nav > li > a {
position: relative;
display: block;
padding: 10px 15px;
}
.nav > li > a:hover,
.nav > li > a:focus {
text-decoration: none;
background-color: #eeeeee;
}
.nav > li.disabled > a {
color: #777777;
}
.nav > li.disabled > a:hover,
.nav > li.disabled > a:focus {
color: #777777;
text-decoration: none;
background-color: transparent;
cursor: not-allowed;
}
.nav .open > a,
.nav .open > a:hover,
.nav .open > a:focus {
background-color: #eeeeee;
border-color: #337ab7;
}
.nav .nav-divider {
height: 1px;
margin: 8px 0;
overflow: hidden;
background-color: #e5e5e5;
}
.nav > li > a > img {
max-width: none;
}
.nav-tabs {
border-bottom: 1px solid #ddd;
}
.nav-tabs > li {
float: left;
margin-bottom: -1px;
}
.nav-tabs > li > a {
margin-right: 2px;
line-height: 1.42857143;
border: 1px solid transparent;
border-radius: 2px 2px 0 0;
}
.nav-tabs > li > a:hover {
border-color: #eeeeee #eeeeee #ddd;
}
.nav-tabs > li.active > a,
.nav-tabs > li.active > a:hover,
.nav-tabs > li.active > a:focus {
color: #555555;
background-color: #fff;
border: 1px solid #ddd;
border-bottom-color: transparent;
cursor: default;
}
.nav-tabs.nav-justified {
width: 100%;
border-bottom: 0;
}
.nav-tabs.nav-justified > li {
float: none;
}
.nav-tabs.nav-justified > li > a {
text-align: center;
margin-bottom: 5px;
}
.nav-tabs.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-tabs.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs.nav-justified > li > a {
margin-right: 0;
border-radius: 2px;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media (min-width: 768px) {
.nav-tabs.nav-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 2px 2px 0 0;
}
.nav-tabs.nav-justified > .active > a,
.nav-tabs.nav-justified > .active > a:hover,
.nav-tabs.nav-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.nav-pills > li {
float: left;
}
.nav-pills > li > a {
border-radius: 2px;
}
.nav-pills > li + li {
margin-left: 2px;
}
.nav-pills > li.active > a,
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
background-color: #337ab7;
}
.nav-stacked > li {
float: none;
}
.nav-stacked > li + li {
margin-top: 2px;
margin-left: 0;
}
.nav-justified {
width: 100%;
}
.nav-justified > li {
float: none;
}
.nav-justified > li > a {
text-align: center;
margin-bottom: 5px;
}
.nav-justified > .dropdown .dropdown-menu {
top: auto;
left: auto;
}
@media (min-width: 768px) {
.nav-justified > li {
display: table-cell;
width: 1%;
}
.nav-justified > li > a {
margin-bottom: 0;
}
}
.nav-tabs-justified {
border-bottom: 0;
}
.nav-tabs-justified > li > a {
margin-right: 0;
border-radius: 2px;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border: 1px solid #ddd;
}
@media (min-width: 768px) {
.nav-tabs-justified > li > a {
border-bottom: 1px solid #ddd;
border-radius: 2px 2px 0 0;
}
.nav-tabs-justified > .active > a,
.nav-tabs-justified > .active > a:hover,
.nav-tabs-justified > .active > a:focus {
border-bottom-color: #fff;
}
}
.tab-content > .tab-pane {
display: none;
}
.tab-content > .active {
display: block;
}
.nav-tabs .dropdown-menu {
margin-top: -1px;
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.navbar {
position: relative;
min-height: 30px;
margin-bottom: 18px;
border: 1px solid transparent;
}
@media (min-width: 541px) {
.navbar {
border-radius: 2px;
}
}
@media (min-width: 541px) {
.navbar-header {
float: left;
}
}
.navbar-collapse {
overflow-x: visible;
padding-right: 0px;
padding-left: 0px;
border-top: 1px solid transparent;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
-webkit-overflow-scrolling: touch;
}
.navbar-collapse.in {
overflow-y: auto;
}
@media (min-width: 541px) {
.navbar-collapse {
width: auto;
border-top: 0;
box-shadow: none;
}
.navbar-collapse.collapse {
display: block !important;
height: auto !important;
padding-bottom: 0;
overflow: visible !important;
}
.navbar-collapse.in {
overflow-y: visible;
}
.navbar-fixed-top .navbar-collapse,
.navbar-static-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
padding-left: 0;
padding-right: 0;
}
}
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
max-height: 340px;
}
@media (max-device-width: 540px) and (orientation: landscape) {
.navbar-fixed-top .navbar-collapse,
.navbar-fixed-bottom .navbar-collapse {
max-height: 200px;
}
}
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: 0px;
margin-left: 0px;
}
@media (min-width: 541px) {
.container > .navbar-header,
.container-fluid > .navbar-header,
.container > .navbar-collapse,
.container-fluid > .navbar-collapse {
margin-right: 0;
margin-left: 0;
}
}
.navbar-static-top {
z-index: 1000;
border-width: 0 0 1px;
}
@media (min-width: 541px) {
.navbar-static-top {
border-radius: 0;
}
}
.navbar-fixed-top,
.navbar-fixed-bottom {
position: fixed;
right: 0;
left: 0;
z-index: 1030;
}
@media (min-width: 541px) {
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
}
.navbar-fixed-top {
top: 0;
border-width: 0 0 1px;
}
.navbar-fixed-bottom {
bottom: 0;
margin-bottom: 0;
border-width: 1px 0 0;
}
.navbar-brand {
float: left;
padding: 6px 0px;
font-size: 17px;
line-height: 18px;
height: 30px;
}
.navbar-brand:hover,
.navbar-brand:focus {
text-decoration: none;
}
.navbar-brand > img {
display: block;
}
@media (min-width: 541px) {
.navbar > .container .navbar-brand,
.navbar > .container-fluid .navbar-brand {
margin-left: 0px;
}
}
.navbar-toggle {
position: relative;
float: right;
margin-right: 0px;
padding: 9px 10px;
margin-top: -2px;
margin-bottom: -2px;
background-color: transparent;
background-image: none;
border: 1px solid transparent;
border-radius: 2px;
}
.navbar-toggle:focus {
outline: 0;
}
.navbar-toggle .icon-bar {
display: block;
width: 22px;
height: 2px;
border-radius: 1px;
}
.navbar-toggle .icon-bar + .icon-bar {
margin-top: 4px;
}
@media (min-width: 541px) {
.navbar-toggle {
display: none;
}
}
.navbar-nav {
margin: 3px 0px;
}
.navbar-nav > li > a {
padding-top: 10px;
padding-bottom: 10px;
line-height: 18px;
}
@media (max-width: 540px) {
.navbar-nav .open .dropdown-menu {
position: static;
float: none;
width: auto;
margin-top: 0;
background-color: transparent;
border: 0;
box-shadow: none;
}
.navbar-nav .open .dropdown-menu > li > a,
.navbar-nav .open .dropdown-menu .dropdown-header {
padding: 5px 15px 5px 25px;
}
.navbar-nav .open .dropdown-menu > li > a {
line-height: 18px;
}
.navbar-nav .open .dropdown-menu > li > a:hover,
.navbar-nav .open .dropdown-menu > li > a:focus {
background-image: none;
}
}
@media (min-width: 541px) {
.navbar-nav {
float: left;
margin: 0;
}
.navbar-nav > li {
float: left;
}
.navbar-nav > li > a {
padding-top: 6px;
padding-bottom: 6px;
}
}
.navbar-form {
margin-left: 0px;
margin-right: 0px;
padding: 10px 0px;
border-top: 1px solid transparent;
border-bottom: 1px solid transparent;
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
margin-top: -1px;
margin-bottom: -1px;
}
@media (min-width: 768px) {
.navbar-form .form-group {
display: inline-block;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .form-control {
display: inline-block;
width: auto;
vertical-align: middle;
}
.navbar-form .form-control-static {
display: inline-block;
}
.navbar-form .input-group {
display: inline-table;
vertical-align: middle;
}
.navbar-form .input-group .input-group-addon,
.navbar-form .input-group .input-group-btn,
.navbar-form .input-group .form-control {
width: auto;
}
.navbar-form .input-group > .form-control {
width: 100%;
}
.navbar-form .control-label {
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio,
.navbar-form .checkbox {
display: inline-block;
margin-top: 0;
margin-bottom: 0;
vertical-align: middle;
}
.navbar-form .radio label,
.navbar-form .checkbox label {
padding-left: 0;
}
.navbar-form .radio input[type="radio"],
.navbar-form .checkbox input[type="checkbox"] {
position: relative;
margin-left: 0;
}
.navbar-form .has-feedback .form-control-feedback {
top: 0;
}
}
@media (max-width: 540px) {
.navbar-form .form-group {
margin-bottom: 5px;
}
.navbar-form .form-group:last-child {
margin-bottom: 0;
}
}
@media (min-width: 541px) {
.navbar-form {
width: auto;
border: 0;
margin-left: 0;
margin-right: 0;
padding-top: 0;
padding-bottom: 0;
-webkit-box-shadow: none;
box-shadow: none;
}
}
.navbar-nav > li > .dropdown-menu {
margin-top: 0;
border-top-right-radius: 0;
border-top-left-radius: 0;
}
.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
margin-bottom: 0;
border-top-right-radius: 2px;
border-top-left-radius: 2px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.navbar-btn {
margin-top: -1px;
margin-bottom: -1px;
}
.navbar-btn.btn-sm {
margin-top: 0px;
margin-bottom: 0px;
}
.navbar-btn.btn-xs {
margin-top: 4px;
margin-bottom: 4px;
}
.navbar-text {
margin-top: 6px;
margin-bottom: 6px;
}
@media (min-width: 541px) {
.navbar-text {
float: left;
margin-left: 0px;
margin-right: 0px;
}
}
@media (min-width: 541px) {
.navbar-left {
float: left !important;
float: left;
}
.navbar-right {
float: right !important;
float: right;
margin-right: 0px;
}
.navbar-right ~ .navbar-right {
margin-right: 0;
}
}
.navbar-default {
background-color: #f8f8f8;
border-color: #e7e7e7;
}
.navbar-default .navbar-brand {
color: #777;
}
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
color: #5e5e5e;
background-color: transparent;
}
.navbar-default .navbar-text {
color: #777;
}
.navbar-default .navbar-nav > li > a {
color: #777;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus {
color: #333;
background-color: transparent;
}
.navbar-default .navbar-nav > .active > a,
.navbar-default .navbar-nav > .active > a:hover,
.navbar-default .navbar-nav > .active > a:focus {
color: #555;
background-color: #e7e7e7;
}
.navbar-default .navbar-nav > .disabled > a,
.navbar-default .navbar-nav > .disabled > a:hover,
.navbar-default .navbar-nav > .disabled > a:focus {
color: #ccc;
background-color: transparent;
}
.navbar-default .navbar-toggle {
border-color: #ddd;
}
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: #ddd;
}
.navbar-default .navbar-toggle .icon-bar {
background-color: #888;
gitextract__e84dmdr/
├── .codecov.yml
├── .coveragerc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.md
│ └── workflows/
│ ├── docker_build.yaml
│ ├── docker_build_test.yaml
│ ├── pypi_build.yaml
│ ├── readme.md
│ ├── sharpy_no_test_needed.yaml
│ └── sharpy_tests.yaml
├── .github_changelog_generator
├── .gitignore
├── .gitmodules
├── .readthedocs.yaml
├── .version.json
├── .zenodo.json
├── CHANGELOG.md
├── CMakeLists.txt
├── Dockerfile
├── LICENSE
├── README.md
├── docs/
│ ├── .nojekyll
│ ├── JOSS/
│ │ ├── codemeta.json
│ │ ├── generate.rb
│ │ ├── paper.bib
│ │ └── paper.md
│ ├── Makefile
│ ├── docignore.yml
│ ├── requirements_rtd
│ └── source/
│ ├── _static/
│ │ ├── .placeholder
│ │ └── sharpy_guide/
│ │ └── sharpy_intro.html
│ ├── conf.py
│ ├── content/
│ │ ├── capabilities.md
│ │ ├── casefiles.rst
│ │ ├── contributing.md
│ │ ├── debug.rst
│ │ ├── example_notebooks/
│ │ │ ├── UDP_control/
│ │ │ │ ├── control_design_script.m
│ │ │ │ ├── get_settings_udp.py
│ │ │ │ ├── matlab_functions/
│ │ │ │ │ ├── PID_linear_model.slx
│ │ │ │ │ ├── adjust_state_space_system.m
│ │ │ │ │ ├── get_1minuscosine_gust_input.m
│ │ │ │ │ ├── read_SHARPy_state_space_system.m
│ │ │ │ │ └── set_input_parameters.m
│ │ │ │ ├── parameter_UDP_control_pazy_udp_closed_loop_gust_response.json
│ │ │ │ ├── pazy_PID_controller_UDP.py
│ │ │ │ ├── pazy_network_info.yml
│ │ │ │ ├── pid_controller.py
│ │ │ │ └── tutorial_udp_control.ipynb
│ │ │ ├── cantilever/
│ │ │ │ ├── model_static_cantilever.py
│ │ │ │ └── static_cantilever.ipynb
│ │ │ ├── cantilever_wing.ipynb
│ │ │ ├── linear_goland_flutter.ipynb
│ │ │ ├── linear_horten.ipynb
│ │ │ ├── nonlinear_t-tail_HALE.ipynb
│ │ │ ├── source/
│ │ │ │ └── type04_db_nrel5mw_oc3_v06.xlsx
│ │ │ └── wind_turbine.ipynb
│ │ ├── examples.rst
│ │ ├── faqs.md
│ │ ├── installation.md
│ │ ├── postproc.rst
│ │ ├── publications.md
│ │ ├── solvers.rst
│ │ └── test_cases.rst
│ ├── includes/
│ │ ├── aero/
│ │ │ ├── index.rst
│ │ │ ├── models/
│ │ │ │ ├── aerogrid/
│ │ │ │ │ ├── AeroTimeStepInfo.rst
│ │ │ │ │ ├── Aerogrid.rst
│ │ │ │ │ ├── generate_strip.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── airfoilpolars/
│ │ │ │ ├── Polar.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── mapping/
│ │ │ ├── aero2struct_force_mapping.rst
│ │ │ ├── index.rst
│ │ │ └── total_forces_moments.rst
│ │ ├── cases/
│ │ │ ├── coupled/
│ │ │ │ ├── X-HALE/
│ │ │ │ │ ├── generate_xhale/
│ │ │ │ │ │ ├── generate_naca_camber.rst
│ │ │ │ │ │ ├── generate_solver_file.rst
│ │ │ │ │ │ ├── index.rst
│ │ │ │ │ │ └── read_beam_data.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ ├── hangar/
│ │ │ │ ├── horten_wing/
│ │ │ │ │ ├── HortenWing.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── richards_wing/
│ │ │ │ │ ├── HortenWing.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── swept_flying_wing/
│ │ │ │ ├── SweptWing.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── templates/
│ │ │ ├── Ttail/
│ │ │ │ ├── Ttail_3beams.rst
│ │ │ │ ├── Ttail_canonical.rst
│ │ │ │ └── index.rst
│ │ │ ├── flying_wings/
│ │ │ │ ├── FlyingWing.rst
│ │ │ │ ├── Goland.rst
│ │ │ │ ├── Pazy.rst
│ │ │ │ ├── QuasiInfinite.rst
│ │ │ │ ├── Smith.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── template_wt/
│ │ │ ├── create_blade_coordinates.rst
│ │ │ ├── create_node_radial_pos_from_elem_centres.rst
│ │ │ ├── generate_from_excel_type03.rst
│ │ │ ├── index.rst
│ │ │ ├── rotor_from_excel_type03.rst
│ │ │ └── spar_from_excel_type04.rst
│ │ ├── controllers/
│ │ │ ├── controlsurfacepidcontroller/
│ │ │ │ ├── ControlSurfacePidController.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── takeofftrajectorycontroller/
│ │ │ ├── TakeOffTrajectoryController.rst
│ │ │ └── index.rst
│ │ ├── generators/
│ │ │ ├── bumpvelocityfield/
│ │ │ │ ├── BumpVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── dynamiccontrolsurface/
│ │ │ │ ├── DynamicControlSurface.rst
│ │ │ │ └── index.rst
│ │ │ ├── floatingforces/
│ │ │ │ ├── FloatingForces.rst
│ │ │ │ ├── change_of_to_sharpy.rst
│ │ │ │ ├── compute_equiv_hd_added_mass.rst
│ │ │ │ ├── compute_jacobian.rst
│ │ │ │ ├── compute_xf_zf.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── jonswap_spectrum.rst
│ │ │ │ ├── matrix_from_rf.rst
│ │ │ │ ├── noise_freq_1s.rst
│ │ │ │ ├── quasisteady_mooring.rst
│ │ │ │ ├── rename_terms.rst
│ │ │ │ ├── response_freq_dep_matrix.rst
│ │ │ │ ├── rfval.rst
│ │ │ │ ├── time_wave_forces.rst
│ │ │ │ └── wave_radiation_damping.rst
│ │ │ ├── gridbox/
│ │ │ │ ├── GridBox.rst
│ │ │ │ └── index.rst
│ │ │ ├── gustvelocityfield/
│ │ │ │ ├── DARPA.rst
│ │ │ │ ├── GustVelocityField.rst
│ │ │ │ ├── continuous_sin.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── lateral_one_minus_cos.rst
│ │ │ │ ├── one_minus_cos.rst
│ │ │ │ ├── span_sine.rst
│ │ │ │ ├── time_varying.rst
│ │ │ │ └── time_varying_global.rst
│ │ │ ├── helicoidalwake/
│ │ │ │ ├── HelicoidalWake.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── modifystructure/
│ │ │ │ ├── ChangeLumpedMass.rst
│ │ │ │ ├── ChangedVariable.rst
│ │ │ │ ├── LumpedMassControl.rst
│ │ │ │ ├── ModifyStructure.rst
│ │ │ │ └── index.rst
│ │ │ ├── polaraeroforces/
│ │ │ │ ├── EfficiencyCorrection.rst
│ │ │ │ ├── PolarCorrection.rst
│ │ │ │ ├── get_aoacl0_from_camber.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── local_stability_axes.rst
│ │ │ │ ├── magnitude_and_direction_of_relative_velocity.rst
│ │ │ │ └── span_chord.rst
│ │ │ ├── shearvelocityfield/
│ │ │ │ ├── ShearVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── steadyvelocityfield/
│ │ │ │ ├── SteadyVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ ├── straightwake/
│ │ │ │ ├── StraightWake.rst
│ │ │ │ └── index.rst
│ │ │ ├── trajectorygenerator/
│ │ │ │ ├── TrajectoryGenerator.rst
│ │ │ │ └── index.rst
│ │ │ ├── turbvelocityfield/
│ │ │ │ ├── TurbVelocityField.rst
│ │ │ │ └── index.rst
│ │ │ └── turbvelocityfieldbts/
│ │ │ ├── TurbVelocityFieldBts.rst
│ │ │ └── index.rst
│ │ ├── index.rst
│ │ ├── io/
│ │ │ ├── index.rst
│ │ │ ├── inout_variables/
│ │ │ │ ├── SetOfVariables.rst
│ │ │ │ └── index.rst
│ │ │ └── network_interface/
│ │ │ ├── InNetwork.rst
│ │ │ ├── Network.rst
│ │ │ ├── NetworkLoader.rst
│ │ │ ├── OutNetwork.rst
│ │ │ └── index.rst
│ │ ├── linear/
│ │ │ ├── assembler/
│ │ │ │ ├── index.rst
│ │ │ │ ├── lincontrolsurfacedeflector/
│ │ │ │ │ ├── LinControlSurfaceDeflector.rst
│ │ │ │ │ ├── der_R_arbitrary_axis_times_v.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── linearaeroelastic/
│ │ │ │ │ ├── LinearAeroelastic.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── linearbeam/
│ │ │ │ │ ├── LinearBeam.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── lineargustassembler/
│ │ │ │ │ ├── LeadingEdge.rst
│ │ │ │ │ ├── MultiLeadingEdge.rst
│ │ │ │ │ ├── campbell.rst
│ │ │ │ │ ├── gust_from_string.rst
│ │ │ │ │ ├── index.rst
│ │ │ │ │ └── spanwise_interpolation.rst
│ │ │ │ └── linearuvlm/
│ │ │ │ ├── LinearUVLM.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ └── src/
│ │ │ ├── assembly/
│ │ │ │ ├── AICs.rst
│ │ │ │ ├── dfqsdgamma_vrel0.rst
│ │ │ │ ├── dfqsduinput.rst
│ │ │ │ ├── dfqsdvind_gamma.rst
│ │ │ │ ├── dfqsdvind_zeta.rst
│ │ │ │ ├── dfqsdzeta_omega.rst
│ │ │ │ ├── dfqsdzeta_vrel0.rst
│ │ │ │ ├── dfunstdgamma_dot.rst
│ │ │ │ ├── dvinddzeta.rst
│ │ │ │ ├── dvinddzeta_cpp.rst
│ │ │ │ ├── eval_panel_cpp.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── nc_domegazetadzeta.rst
│ │ │ │ ├── nc_dqcdzeta.rst
│ │ │ │ ├── nc_dqcdzeta_Sin_to_Sout.rst
│ │ │ │ ├── test_wake_prop_term.rst
│ │ │ │ ├── uc_dncdzeta.rst
│ │ │ │ ├── wake_prop.rst
│ │ │ │ └── wake_prop_from_dimensions.rst
│ │ │ ├── gridmapping/
│ │ │ │ ├── AeroGridMap.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── interp/
│ │ │ │ ├── get_Wnv_vector.rst
│ │ │ │ ├── get_Wvc_scalar.rst
│ │ │ │ ├── get_panel_wcv.rst
│ │ │ │ └── index.rst
│ │ │ ├── lib_dbiot/
│ │ │ │ ├── Dvcross_by_skew3d.rst
│ │ │ │ ├── eval_panel_comp.rst
│ │ │ │ ├── eval_panel_cpp.rst
│ │ │ │ ├── eval_panel_exp.rst
│ │ │ │ ├── eval_panel_fast.rst
│ │ │ │ ├── eval_panel_fast_coll.rst
│ │ │ │ ├── eval_seg_comp_loop.rst
│ │ │ │ ├── eval_seg_exp.rst
│ │ │ │ ├── eval_seg_exp_loop.rst
│ │ │ │ └── index.rst
│ │ │ ├── lib_ucdncdzeta/
│ │ │ │ ├── eval.rst
│ │ │ │ └── index.rst
│ │ │ ├── libfit/
│ │ │ │ ├── fitfrd.rst
│ │ │ │ ├── get_rfa_res.rst
│ │ │ │ ├── get_rfa_res_norm.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── poly_fit.rst
│ │ │ │ ├── rfa.rst
│ │ │ │ ├── rfa_fit_dev.rst
│ │ │ │ ├── rfa_mimo.rst
│ │ │ │ └── rfader.rst
│ │ │ ├── libsparse/
│ │ │ │ ├── block_dot.rst
│ │ │ │ ├── block_matrix_dot_vector.rst
│ │ │ │ ├── block_sum.rst
│ │ │ │ ├── csc_matrix.rst
│ │ │ │ ├── dense.rst
│ │ │ │ ├── dot.rst
│ │ │ │ ├── eye_as.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── solve.rst
│ │ │ │ └── zeros_as.rst
│ │ │ ├── libss/
│ │ │ │ ├── Hnorm_from_freq_resp.rst
│ │ │ │ ├── SSconv.rst
│ │ │ │ ├── SSderivative.rst
│ │ │ │ ├── SSintegr.rst
│ │ │ │ ├── StateSpace.rst
│ │ │ │ ├── addGain.rst
│ │ │ │ ├── adjust_phase.rst
│ │ │ │ ├── build_SS_poly.rst
│ │ │ │ ├── butter.rst
│ │ │ │ ├── compare_ss.rst
│ │ │ │ ├── couple.rst
│ │ │ │ ├── disc2cont.rst
│ │ │ │ ├── eigvals.rst
│ │ │ │ ├── freqresp.rst
│ │ │ │ ├── get_freq_from_eigs.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── join.rst
│ │ │ │ ├── join2.rst
│ │ │ │ ├── parallel.rst
│ │ │ │ ├── project.rst
│ │ │ │ ├── random_ss.rst
│ │ │ │ ├── retain_inout_channels.rst
│ │ │ │ ├── scale_SS.rst
│ │ │ │ ├── series.rst
│ │ │ │ ├── simulate.rst
│ │ │ │ ├── ss_block.rst
│ │ │ │ ├── ss_to_scipy.rst
│ │ │ │ └── sum_ss.rst
│ │ │ ├── lin_aeroelastic/
│ │ │ │ ├── LinAeroEla.rst
│ │ │ │ └── index.rst
│ │ │ ├── lin_utils/
│ │ │ │ ├── Info.rst
│ │ │ │ ├── comp_tot_force.rst
│ │ │ │ ├── extract_from_data.rst
│ │ │ │ ├── index.rst
│ │ │ │ └── solve_linear.rst
│ │ │ ├── lingebm/
│ │ │ │ ├── FlexDynamic.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── newmark_ss.rst
│ │ │ │ └── sort_eigvals.rst
│ │ │ ├── linuvlm/
│ │ │ │ ├── Dynamic.rst
│ │ │ │ ├── DynamicBlock.rst
│ │ │ │ ├── Frequency.rst
│ │ │ │ ├── Static.rst
│ │ │ │ ├── get_Cw_cpx.rst
│ │ │ │ └── index.rst
│ │ │ ├── multisurfaces/
│ │ │ │ ├── MultiAeroGridSurfaces.rst
│ │ │ │ └── index.rst
│ │ │ └── surface/
│ │ │ ├── AeroGridGeo.rst
│ │ │ ├── AeroGridSurface.rst
│ │ │ ├── get_aic3_cpp.rst
│ │ │ └── index.rst
│ │ ├── postprocs/
│ │ │ ├── AeroForcesCalculator.rst
│ │ │ ├── AerogridPlot.rst
│ │ │ ├── AsymptoticStability.rst
│ │ │ ├── BeamLoads.rst
│ │ │ ├── BeamPlot.rst
│ │ │ ├── Cleanup.rst
│ │ │ ├── FrequencyResponse.rst
│ │ │ ├── LiftDistribution.rst
│ │ │ ├── PickleData.rst
│ │ │ ├── PlotFlowField.rst
│ │ │ ├── SaveData.rst
│ │ │ ├── SaveParametricCase.rst
│ │ │ ├── StabilityDerivatives.rst
│ │ │ ├── StallCheck.rst
│ │ │ ├── UDPout.rst
│ │ │ └── WriteVariablesTime.rst
│ │ ├── rom/
│ │ │ ├── balanced/
│ │ │ │ ├── Balanced.rst
│ │ │ │ ├── Direct.rst
│ │ │ │ ├── FrequencyLimited.rst
│ │ │ │ ├── Iterative.rst
│ │ │ │ └── index.rst
│ │ │ ├── index.rst
│ │ │ ├── krylov/
│ │ │ │ ├── Krylov.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── index.rst
│ │ │ ├── krylovutils/
│ │ │ │ ├── check_eye.rst
│ │ │ │ ├── construct_krylov.rst
│ │ │ │ ├── evec.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── lu_factor.rst
│ │ │ │ ├── lu_solve.rst
│ │ │ │ ├── mgs_ortho.rst
│ │ │ │ ├── remove_a12.rst
│ │ │ │ └── schur_ordered.rst
│ │ │ ├── librom/
│ │ │ │ ├── balfreq.rst
│ │ │ │ ├── balreal_direct_py.rst
│ │ │ │ ├── balreal_iter.rst
│ │ │ │ ├── balreal_iter_old.rst
│ │ │ │ ├── check_stability.rst
│ │ │ │ ├── eigen_dec.rst
│ │ │ │ ├── get_gauss_weights.rst
│ │ │ │ ├── get_trapz_weights.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── low_rank_smith.rst
│ │ │ │ ├── modred.rst
│ │ │ │ ├── res_discrete_lyap.rst
│ │ │ │ ├── smith_iter.rst
│ │ │ │ └── tune_rom.rst
│ │ │ └── librom_interp/
│ │ │ ├── FLB_transfer_function.rst
│ │ │ ├── InterpROM.rst
│ │ │ ├── index.rst
│ │ │ └── transfer_function.rst
│ │ ├── solvers/
│ │ │ ├── aero/
│ │ │ │ ├── DynamicUVLM.rst
│ │ │ │ ├── NoAero.rst
│ │ │ │ ├── PrescribedUvlm.rst
│ │ │ │ ├── StaticUvlm.rst
│ │ │ │ ├── StepLinearUVLM.rst
│ │ │ │ └── StepUvlm.rst
│ │ │ ├── aero_solvers.rst
│ │ │ ├── coupled/
│ │ │ │ ├── DynamicCoupled.rst
│ │ │ │ ├── LinDynamicSim.rst
│ │ │ │ ├── StaticCoupled.rst
│ │ │ │ └── StaticCoupledRBM.rst
│ │ │ ├── coupled_solvers.rst
│ │ │ ├── flight dynamics/
│ │ │ │ ├── StaticTrim.rst
│ │ │ │ └── Trim.rst
│ │ │ ├── flight dynamics_solvers.rst
│ │ │ ├── linear/
│ │ │ │ ├── LinearAssembler.rst
│ │ │ │ └── Modal.rst
│ │ │ ├── linear_solvers.rst
│ │ │ ├── loader/
│ │ │ │ ├── AerogridLoader.rst
│ │ │ │ ├── BeamLoader.rst
│ │ │ │ └── PreSharpy.rst
│ │ │ ├── loader_solvers.rst
│ │ │ ├── structural/
│ │ │ │ ├── NonLinearDynamic.rst
│ │ │ │ ├── NonLinearDynamicCoupledStep.rst
│ │ │ │ ├── NonLinearDynamicMultibody.rst
│ │ │ │ ├── NonLinearDynamicPrescribedStep.rst
│ │ │ │ ├── NonLinearStatic.rst
│ │ │ │ ├── RigidDynamicCoupledStep.rst
│ │ │ │ └── RigidDynamicPrescribedStep.rst
│ │ │ ├── structural_solvers.rst
│ │ │ ├── time_integrator/
│ │ │ │ ├── GeneralisedAlpha.rst
│ │ │ │ └── NewmarkBeta.rst
│ │ │ └── time_integrator_solvers.rst
│ │ ├── structure/
│ │ │ ├── index.rst
│ │ │ ├── models/
│ │ │ │ ├── beam/
│ │ │ │ │ ├── StructTimeStepInfo.rst
│ │ │ │ │ └── index.rst
│ │ │ │ ├── beamstructures/
│ │ │ │ │ ├── Element.rst
│ │ │ │ │ └── index.rst
│ │ │ │ └── index.rst
│ │ │ └── utils/
│ │ │ ├── index.rst
│ │ │ ├── lagrangeconstraints/
│ │ │ │ ├── BaseLagrangeConstraint.rst
│ │ │ │ ├── constant_rot_vel_FoR.rst
│ │ │ │ ├── constant_vel_FoR.rst
│ │ │ │ ├── def_rot_axis_FoR_wrt_node_general.rst
│ │ │ │ ├── def_rot_axis_FoR_wrt_node_xyz.rst
│ │ │ │ ├── def_rot_vect_FoR_wrt_node.rst
│ │ │ │ ├── def_rot_vel_FoR_wrt_node.rst
│ │ │ │ ├── define_FoR_dof.rst
│ │ │ │ ├── define_node_dof.rst
│ │ │ │ ├── define_num_LM_eq.rst
│ │ │ │ ├── equal_lin_vel_node_FoR.rst
│ │ │ │ ├── equal_pos_node_FoR.rst
│ │ │ │ ├── free.rst
│ │ │ │ ├── fully_constrained_node_FoR.rst
│ │ │ │ ├── generate_lagrange_matrix.rst
│ │ │ │ ├── hinge_FoR.rst
│ │ │ │ ├── hinge_FoR_wrtG.rst
│ │ │ │ ├── hinge_node_FoR.rst
│ │ │ │ ├── hinge_node_FoR_constant_vel.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── initialise_lc.rst
│ │ │ │ ├── lagrangeconstraint.rst
│ │ │ │ ├── lc_from_string.rst
│ │ │ │ ├── lin_vel_node_wrtA.rst
│ │ │ │ ├── lin_vel_node_wrtG.rst
│ │ │ │ ├── postprocess.rst
│ │ │ │ ├── print_available_lc.rst
│ │ │ │ ├── remove_constraint.rst
│ │ │ │ ├── spherical_FoR.rst
│ │ │ │ └── spherical_node_FoR.rst
│ │ │ ├── modalutils/
│ │ │ │ ├── assert_modes_mass_normalised.rst
│ │ │ │ ├── assert_orthogonal_eigenvectors.rst
│ │ │ │ ├── free_modes_principal_axes.rst
│ │ │ │ ├── get_mode_zeta.rst
│ │ │ │ ├── index.rst
│ │ │ │ ├── mode_sign_convention.rst
│ │ │ │ ├── modes_to_cg_ref.rst
│ │ │ │ ├── principal_axes_inertia.rst
│ │ │ │ ├── scale_mass_normalised_modes.rst
│ │ │ │ ├── scale_mode.rst
│ │ │ │ ├── write_modes_vtk.rst
│ │ │ │ └── write_zeta_vtk.rst
│ │ │ └── xbeamlib/
│ │ │ ├── Xbopts.rst
│ │ │ ├── cbeam3_asbly_dynamic.rst
│ │ │ ├── cbeam3_asbly_static.rst
│ │ │ ├── cbeam3_correct_gravity_forces.rst
│ │ │ ├── cbeam3_loads.rst
│ │ │ ├── cbeam3_solv_modal.rst
│ │ │ ├── cbeam3_solv_nlnstatic.rst
│ │ │ ├── index.rst
│ │ │ └── xbeam3_asbly_dynamic.rst
│ │ └── utils/
│ │ ├── algebra/
│ │ │ ├── cross3.rst
│ │ │ ├── crv2quat.rst
│ │ │ ├── crv2rotation.rst
│ │ │ ├── crv2tan.rst
│ │ │ ├── crv_bounds.rst
│ │ │ ├── der_CcrvT_by_v.rst
│ │ │ ├── der_Ccrv_by_v.rst
│ │ │ ├── der_Ceuler_by_v.rst
│ │ │ ├── der_Ceuler_by_v_NED.rst
│ │ │ ├── der_CquatT_by_v.rst
│ │ │ ├── der_Cquat_by_v.rst
│ │ │ ├── der_Peuler_by_v.rst
│ │ │ ├── der_TanT_by_xv.rst
│ │ │ ├── der_Tan_by_xv.rst
│ │ │ ├── der_Teuler_by_w.rst
│ │ │ ├── der_Teuler_by_w_NED.rst
│ │ │ ├── der_quat_wrt_crv.rst
│ │ │ ├── der_skewp_skewp_v.rst
│ │ │ ├── deuler_dt.rst
│ │ │ ├── deuler_dt_NED.rst
│ │ │ ├── euler2quat.rst
│ │ │ ├── euler2rot.rst
│ │ │ ├── get_transformation_matrix.rst
│ │ │ ├── get_triad.rst
│ │ │ ├── index.rst
│ │ │ ├── mat2quat.rst
│ │ │ ├── multiply_matrices.rst
│ │ │ ├── norm3d.rst
│ │ │ ├── normsq3d.rst
│ │ │ ├── panel_area.rst
│ │ │ ├── quadskew.rst
│ │ │ ├── quat2euler.rst
│ │ │ ├── quat2rotation.rst
│ │ │ ├── quat_bound.rst
│ │ │ ├── rotation2crv.rst
│ │ │ ├── rotation2quat.rst
│ │ │ ├── rotation3d_x.rst
│ │ │ ├── rotation3d_y.rst
│ │ │ ├── rotation3d_z.rst
│ │ │ ├── skew.rst
│ │ │ ├── tangent_vector.rst
│ │ │ ├── triad2rotation.rst
│ │ │ └── unit_vector.rst
│ │ ├── analytical/
│ │ │ ├── flat_plate_analytical.rst
│ │ │ ├── garrick_drag_pitch.rst
│ │ │ ├── garrick_drag_plunge.rst
│ │ │ ├── index.rst
│ │ │ ├── nc_derivs.rst
│ │ │ ├── qs_derivs.rst
│ │ │ ├── sears_CL_freq_resp.rst
│ │ │ ├── sears_fun.rst
│ │ │ ├── sears_lift_sin_gust.rst
│ │ │ ├── theo_CL_freq_resp.rst
│ │ │ ├── theo_CM_freq_resp.rst
│ │ │ ├── theo_fun.rst
│ │ │ ├── theo_lift.rst
│ │ │ └── wagner_imp_start.rst
│ │ ├── control_utils/
│ │ │ ├── PID.rst
│ │ │ └── index.rst
│ │ ├── datastructures/
│ │ │ ├── AeroTimeStepInfo.rst
│ │ │ ├── Linear.rst
│ │ │ ├── LinearTimeStepInfo.rst
│ │ │ ├── StructTimeStepInfo.rst
│ │ │ └── index.rst
│ │ ├── docutils/
│ │ │ ├── check_folder_in_ignore.rst
│ │ │ ├── generate_documentation.rst
│ │ │ ├── index.rst
│ │ │ ├── output_documentation_module_page.rst
│ │ │ ├── write_file.rst
│ │ │ └── write_folder.rst
│ │ ├── exceptions/
│ │ │ ├── DocumentationError.rst
│ │ │ ├── NotConvergedSolver.rst
│ │ │ ├── NotRecognisedSetting.rst
│ │ │ ├── NotValidSetting.rst
│ │ │ └── index.rst
│ │ ├── frequencyutils/
│ │ │ ├── find_limits.rst
│ │ │ ├── find_target_system.rst
│ │ │ ├── freqresp_relative_error.rst
│ │ │ ├── frobenius_norm.rst
│ │ │ ├── h_infinity_norm.rst
│ │ │ ├── hamiltonian.rst
│ │ │ ├── index.rst
│ │ │ ├── l2norm.rst
│ │ │ └── max_eigs.rst
│ │ ├── generate_cases/
│ │ │ ├── AerodynamicInformation.rst
│ │ │ ├── AeroelasticInformation.rst
│ │ │ ├── SimulationInformation.rst
│ │ │ ├── StructuralInformation.rst
│ │ │ ├── clean_test_files.rst
│ │ │ ├── from_node_array_to_elem_matrix.rst
│ │ │ ├── from_node_list_to_elem_matrix.rst
│ │ │ ├── get_airfoil_camber.rst
│ │ │ ├── get_aoacl0_from_camber.rst
│ │ │ ├── get_factor_geometric_progression.rst
│ │ │ ├── get_mu0_from_camber.rst
│ │ │ ├── index.rst
│ │ │ └── read_column_sheet_type01.rst
│ │ ├── generator_interface/
│ │ │ ├── index.rst
│ │ │ └── output_documentation.rst
│ │ ├── geo_utils/
│ │ │ ├── generate_naca_camber.rst
│ │ │ ├── index.rst
│ │ │ └── interpolate_naca_camber.rst
│ │ ├── h5utils/
│ │ │ ├── add_array_to_grp.rst
│ │ │ ├── add_as_grp.rst
│ │ │ ├── check_file_exists.rst
│ │ │ ├── index.rst
│ │ │ ├── read_group.rst
│ │ │ ├── readh5.rst
│ │ │ ├── save_list_as_array.rst
│ │ │ └── saveh5.rst
│ │ ├── index.rst
│ │ ├── model_utils/
│ │ │ ├── index.rst
│ │ │ └── mass_matrix_generator.rst
│ │ ├── multibody/
│ │ │ ├── disp_and_accel2state.rst
│ │ │ ├── get_elems_nodes_list.rst
│ │ │ ├── index.rst
│ │ │ ├── merge_multibody.rst
│ │ │ ├── split_multibody.rst
│ │ │ ├── state2disp_and_accel.rst
│ │ │ └── update_mb_dB_before_merge.rst
│ │ ├── plotutils/
│ │ │ ├── index.rst
│ │ │ ├── plot_timestep.rst
│ │ │ └── set_axes_equal.rst
│ │ └── settings/
│ │ ├── SettingsTable.rst
│ │ ├── check_settings_in_options.rst
│ │ ├── index.rst
│ │ └── load_config_file.rst
│ └── index.rst
├── environment.yml
├── environment_arm64.yml
├── lib/
│ ├── .placeholder
│ └── CMakeLists.txt
├── pyproject.toml
├── scripts/
│ ├── __init__.py
│ ├── optimiser/
│ │ ├── __init__.py
│ │ ├── base_case/
│ │ │ └── generate.py
│ │ ├── optimiser.py
│ │ └── optimiser_input.yaml
│ └── xplaneUDPout/
│ ├── HALE_varDIe.acf
│ ├── __init__.py
│ ├── variables.yaml
│ └── xplaneUDP.py
├── setup.py
├── sharpy/
│ ├── __init__.py
│ ├── aero/
│ │ ├── __init__.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── aerogrid.py
│ │ │ ├── grid.py
│ │ │ └── nonliftingbodygrid.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── airfoilpolars.py
│ │ ├── mapping.py
│ │ ├── utils.py
│ │ └── uvlmlib.py
│ ├── cases/
│ │ ├── __init__.py
│ │ ├── coupled/
│ │ │ ├── WindTurbine/
│ │ │ │ ├── __init__.py
│ │ │ │ └── generate_rotor.py
│ │ │ ├── X-HALE/
│ │ │ │ ├── generate_xhale.py
│ │ │ │ └── inputs/
│ │ │ │ ├── EMX-07_camber.txt
│ │ │ │ ├── aero_properties.xlsx
│ │ │ │ ├── beam_properties.xlsx
│ │ │ │ └── lumped_mass.xlsx
│ │ │ ├── __init__.py
│ │ │ ├── hinged_controlled_wing/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── generate_hinged_controlled_wing.py
│ │ │ │ └── generate_hinged_roll_controlled_wing.py
│ │ │ ├── linear_horten/
│ │ │ │ └── __init__.py
│ │ │ ├── multibody_takeoff/
│ │ │ │ ├── __init__.py
│ │ │ │ └── generate_hale.py
│ │ │ └── simple_HALE/
│ │ │ ├── __init__.py
│ │ │ └── generate_hale.py
│ │ ├── hangar/
│ │ │ ├── __init__.py
│ │ │ ├── horten_wing.py
│ │ │ ├── richards_wing.py
│ │ │ └── swept_flying_wing.py
│ │ └── templates/
│ │ ├── Ttail.py
│ │ ├── __init__.py
│ │ ├── flying_wings.py
│ │ ├── fuselage_wing_configuration/
│ │ │ ├── __init__.py
│ │ │ ├── fuselage_wing_configuration.py
│ │ │ ├── fwc_aero.py
│ │ │ ├── fwc_fuselage.py
│ │ │ ├── fwc_get_settings.py
│ │ │ └── fwc_structure.py
│ │ └── template_wt.py
│ ├── controllers/
│ │ ├── __init__.py
│ │ ├── bladepitchpid.py
│ │ ├── controlsurfacepidcontroller.py
│ │ ├── multibodycontroller.py
│ │ └── takeofftrajectorycontroller.py
│ ├── generators/
│ │ ├── __init__.py
│ │ ├── bumpvelocityfield.py
│ │ ├── dynamiccontrolsurface.py
│ │ ├── floatingforces.py
│ │ ├── gridbox.py
│ │ ├── gustvelocityfield.py
│ │ ├── helicoidalwake.py
│ │ ├── modifystructure.py
│ │ ├── polaraeroforces.py
│ │ ├── shearvelocityfield.py
│ │ ├── steadyvelocityfield.py
│ │ ├── straightwake.py
│ │ ├── trajectorygenerator.py
│ │ ├── turbvelocityfield.py
│ │ └── turbvelocityfieldbts.py
│ ├── io/
│ │ ├── __init__.py
│ │ ├── inout_variables.py
│ │ ├── logger_utils.py
│ │ ├── message_interface.py
│ │ └── network_interface.py
│ ├── linear/
│ │ ├── __init__.py
│ │ ├── assembler/
│ │ │ ├── __init__.py
│ │ │ ├── lincontrolsurfacedeflector.py
│ │ │ ├── linearaeroelastic.py
│ │ │ ├── linearbeam.py
│ │ │ ├── linearcustom.py
│ │ │ ├── lineargustassembler.py
│ │ │ └── linearuvlm.py
│ │ ├── dev/
│ │ │ ├── __init__.py
│ │ │ ├── linfunc.py
│ │ │ ├── linsym_biot_segment.py
│ │ │ ├── linsym_uc_dncdzeta.py
│ │ │ └── sym_dev_dbiot.py
│ │ ├── src/
│ │ │ ├── __init__.py
│ │ │ ├── assembly.py
│ │ │ ├── gridmapping.py
│ │ │ ├── interp.py
│ │ │ ├── lib_dbiot.py
│ │ │ ├── lib_ucdncdzeta.py
│ │ │ ├── libfit.py
│ │ │ ├── libsparse.py
│ │ │ ├── libss.py
│ │ │ ├── lin_aeroelastic.py
│ │ │ ├── lin_utils.py
│ │ │ ├── lingebm.py
│ │ │ ├── linuvlm.py
│ │ │ ├── multisurfaces.py
│ │ │ ├── surface.py
│ │ │ └── uvlmutils.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── derivatives.py
│ │ ├── ss_interface.py
│ │ └── sselements.py
│ ├── postproc/
│ │ ├── __init__.py
│ │ ├── aeroforcescalculator.py
│ │ ├── aerogridplot.py
│ │ ├── asymptoticstability.py
│ │ ├── beamloads.py
│ │ ├── beamplot.py
│ │ ├── cleanup.py
│ │ ├── frequencyresponse.py
│ │ ├── liftdistribution.py
│ │ ├── pickledata.py
│ │ ├── plotflowfield.py
│ │ ├── savedata.py
│ │ ├── saveparametriccase.py
│ │ ├── stabilityderivatives.py
│ │ ├── stallcheck.py
│ │ ├── udpout.py
│ │ └── writevariablestime.py
│ ├── presharpy/
│ │ ├── __init__.py
│ │ └── presharpy.py
│ ├── rom/
│ │ ├── __init__.py
│ │ ├── balanced.py
│ │ ├── krylov.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── krylovutils.py
│ │ ├── librom.py
│ │ └── librom_interp.py
│ ├── sharpy_main.py
│ ├── solvers/
│ │ ├── __init__.py
│ │ ├── _basestructural.py
│ │ ├── aerogridloader.py
│ │ ├── beamloader.py
│ │ ├── dynamiccoupled.py
│ │ ├── dynamicuvlm.py
│ │ ├── gridloader.py
│ │ ├── initialaeroelasticloader.py
│ │ ├── lindynamicsim.py
│ │ ├── linearassembler.py
│ │ ├── modal.py
│ │ ├── noaero.py
│ │ ├── nonliftingbodygridloader.py
│ │ ├── nonlineardynamic.py
│ │ ├── nonlineardynamiccoupledstep.py
│ │ ├── nonlineardynamicmultibody.py
│ │ ├── nonlineardynamicmultibodyjax.py
│ │ ├── nonlineardynamicprescribedstep.py
│ │ ├── nonlinearstatic.py
│ │ ├── nostructural.py
│ │ ├── prescribeduvlm.py
│ │ ├── rigiddynamiccoupledstep.py
│ │ ├── rigiddynamicprescribedstep.py
│ │ ├── staticcoupled.py
│ │ ├── statictrim.py
│ │ ├── staticuvlm.py
│ │ ├── steplinearuvlm.py
│ │ ├── stepuvlm.py
│ │ ├── timeintegrators.py
│ │ ├── timeintegratorsjax.py
│ │ ├── trim.py
│ │ └── updatepickle.py
│ ├── structure/
│ │ ├── __init__.py
│ │ ├── basestructure.py
│ │ ├── models/
│ │ │ ├── __init__.py
│ │ │ ├── beam.py
│ │ │ └── beamstructures.py
│ │ └── utils/
│ │ ├── __init__.py
│ │ ├── lagrangeconstraints.py
│ │ ├── lagrangeconstraintsjax.py
│ │ ├── modalutils.py
│ │ └── xbeamlib.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── algebra.py
│ │ ├── analytical.py
│ │ ├── constants.py
│ │ ├── control_utils.py
│ │ ├── controller_interface.py
│ │ ├── cout_utils.py
│ │ ├── ctypes_utils.py
│ │ ├── datastructures.py
│ │ ├── docutils.py
│ │ ├── exceptions.py
│ │ ├── frequencyutils.py
│ │ ├── generate_cases.py
│ │ ├── generator_interface.py
│ │ ├── geo_utils.py
│ │ ├── h5utils.py
│ │ ├── input_arg.py
│ │ ├── linearutils.py
│ │ ├── model_utils.py
│ │ ├── multibody.py
│ │ ├── multibodyjax.py
│ │ ├── num_utils.py
│ │ ├── plotutils.py
│ │ ├── rom_interface.py
│ │ ├── settings.py
│ │ ├── sharpydir.py
│ │ └── solver_interface.py
│ └── version.py
├── tests/
│ ├── __init__.py
│ ├── coupled/
│ │ ├── __init__.py
│ │ ├── dynamic/
│ │ │ ├── __init__.py
│ │ │ ├── hale/
│ │ │ │ └── generate_hale.py
│ │ │ └── test_dynamic.py
│ │ ├── multibody/
│ │ │ ├── __init__.py
│ │ │ ├── double_pendulum/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_double_pendulum_geradin.py
│ │ │ ├── double_prescribed_pendulum/
│ │ │ │ └── test_double_prescribed_pendulum.py
│ │ │ ├── double_slanted_pendulum/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_double_pendulum_slanted.py
│ │ │ ├── fix_node_velocity_wrtA/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_fix_node_velocity_wrtA.py
│ │ │ ├── fix_node_velocity_wrtG/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_fix_node_velocity_wrtG.py
│ │ │ ├── floating_forces/
│ │ │ │ └── test_floatingforces.py
│ │ │ └── floating_wind_turbine/
│ │ │ ├── oc3_cs_v07.floating.h5
│ │ │ └── test_floating_wind_turbine.py
│ │ ├── prescribed/
│ │ │ ├── WindTurbine/
│ │ │ │ ├── __init__.py
│ │ │ │ └── test_rotor.py
│ │ │ ├── __init__.py
│ │ │ ├── gamma_dot_test/
│ │ │ │ └── test_gamma_dot.py
│ │ │ ├── rotating_wing/
│ │ │ │ └── generate_rotating_wing.py
│ │ │ └── test_prescribed.py
│ │ └── static/
│ │ ├── __init__.py
│ │ ├── pazy/
│ │ │ └── generate_pazy.py
│ │ ├── smith_g_2deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_g_2deg.py
│ │ ├── smith_g_4deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_g_4deg.py
│ │ ├── smith_nog_2deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_nog_2deg.py
│ │ ├── smith_nog_4deg/
│ │ │ ├── __init__.py
│ │ │ └── generate_smith_nog_4deg.py
│ │ ├── test_pazy_static.py
│ │ └── test_static.py
│ ├── docs/
│ │ ├── __init__.py
│ │ └── test_docs.py
│ ├── io/
│ │ ├── Example_simple_hale/
│ │ │ ├── Client_HALE.py
│ │ │ ├── __init__.py
│ │ │ ├── generate_hale_io.py
│ │ │ └── variables_hale.yaml
│ │ ├── __init__.py
│ │ ├── generate_pazy_udpout.py
│ │ ├── sample_udp_inout/
│ │ │ ├── __init__.py
│ │ │ ├── client.py
│ │ │ ├── generate_pazy_test_io_local.py
│ │ │ └── variables_coarse.yaml
│ │ ├── test_pazy_udpout.py
│ │ └── variables.yaml
│ ├── linear/
│ │ ├── __init__.py
│ │ ├── assembly/
│ │ │ ├── __init__.py
│ │ │ └── test_assembly.py
│ │ ├── control_surfaces/
│ │ │ ├── __init__.py
│ │ │ └── test_control_surfaces.py
│ │ ├── derivatives/
│ │ │ ├── __init__.py
│ │ │ ├── test_ders.py
│ │ │ └── test_stabilityderivatives.py
│ │ ├── frequencyutils/
│ │ │ ├── __init__.py
│ │ │ ├── src/
│ │ │ │ ├── a.npy
│ │ │ │ ├── b.npy
│ │ │ │ ├── c.npy
│ │ │ │ └── d.npy
│ │ │ └── test_frequency_utils.py
│ │ ├── goland_wing/
│ │ │ ├── __init__.py
│ │ │ └── test_goland_flutter.py
│ │ ├── gusts/
│ │ │ ├── __init__.py
│ │ │ ├── test_external_gust.py
│ │ │ └── test_linear_gusts.py
│ │ ├── horten/
│ │ │ ├── __init__.py
│ │ │ └── test_horten.py
│ │ ├── rom/
│ │ │ ├── __init__.py
│ │ │ ├── src/
│ │ │ │ ├── A.mat
│ │ │ │ ├── B.mat
│ │ │ │ └── C.mat
│ │ │ ├── test_balancing.py
│ │ │ ├── test_krylov.py
│ │ │ ├── test_rom_framework.py
│ │ │ ├── test_schur.py
│ │ │ └── test_springmasssystem.py
│ │ ├── statespace/
│ │ │ ├── __init__.py
│ │ │ ├── test_statespace.py
│ │ │ └── test_variable_tracker.py
│ │ └── uvlm/
│ │ ├── __init__.py
│ │ └── test_infinite_span.py
│ ├── sourcepanelmethod/
│ │ ├── __init__.py
│ │ ├── geometry_parameter_models.json
│ │ ├── test_data/
│ │ │ ├── results_low_wing_coupled_0.csv
│ │ │ └── results_low_wing_coupled_1.csv
│ │ ├── test_source_panel_method.py
│ │ └── test_vlm_coupled_spm.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── test_algebra.py
│ │ ├── test_generate_cases.py
│ │ └── test_settings.py
│ ├── uvlm/
│ │ ├── __init__.py
│ │ ├── dynamic/
│ │ │ └── test_wake_cfl_n1.py
│ │ └── static/
│ │ ├── __init__.py
│ │ ├── big_wake_planarwing/
│ │ │ └── generate_big_wake_planarwing.py
│ │ ├── planarwing/
│ │ │ ├── __init__.py
│ │ │ └── generate_planarwing.py
│ │ └── polars/
│ │ ├── __init__.py
│ │ ├── generate_wing.py
│ │ ├── test_polars.py
│ │ └── xf-naca0018-il-50000.txt
│ └── xbeam/
│ ├── __init__.py
│ ├── geradin/
│ │ ├── __init__.py
│ │ └── generate_geradin.py
│ ├── modal/
│ │ └── rotating_beam/
│ │ └── generate_bielawa_baromega2_1e3.py
│ └── test_xbeam.py
└── utils/
├── docker/
│ └── bashrc
└── environment.yml
SYMBOL INDEX (2387 symbols across 218 files)
FILE: docs/source/content/example_notebooks/UDP_control/get_settings_udp.py
function get_settings_udp (line 5) | def get_settings_udp(model, flow, **kwargs):
FILE: docs/source/content/example_notebooks/UDP_control/pazy_PID_controller_UDP.py
function create_and_bind_client (line 33) | def create_and_bind_client(ip_addr, port):
function setup_udp_network (line 41) | def setup_udp_network(dict_parameters):
function init_logger (line 63) | def init_logger():
function write_data_to_file (line 68) | def write_data_to_file(data, file_path, init_file=False):
function receive_sensor_measurements (line 77) | def receive_sensor_measurements(logger, out_sock, msg_len, num_sensors):
function send_control_input (line 98) | def send_control_input(logger, in_sock, sharpy_in_network, control_input...
function run_controller (line 109) | def run_controller(case_name):
FILE: docs/source/content/example_notebooks/UDP_control/pid_controller.py
class PID_Controller (line 1) | class PID_Controller(object):
method __init__ (line 2) | def __init__(self, P_gain, I_gain, D_gain, target=0):
method generate_control_input (line 13) | def generate_control_input(self, sensor_measurement, dt):
FILE: docs/source/content/example_notebooks/cantilever/model_static_cantilever.py
function clean_test_files (line 5) | def clean_test_files(route, case_name):
function generate_fem_file (line 15) | def generate_fem_file(route, case_name, num_elem, deadforce=600e3, follo...
function generate_solver_file (line 127) | def generate_solver_file (route, case_name):
FILE: scripts/optimiser/base_case/generate.py
function generate (line 10) | def generate(x_dict={}, case_name=None):
FILE: scripts/optimiser/optimiser.py
function driver (line 73) | def driver():
function parse_inputs (line 94) | def parse_inputs():
function read_yaml (line 107) | def read_yaml(file_name):
function optimiser (line 120) | def optimiser(in_dict, previous_x, previous_y):
function local_optimisation (line 268) | def local_optimisation(opt, yaml_dict=None, min_method='Powell'):
function gp_constrained (line 300) | def gp_constrained(x_in, opt, yaml_dict):
function rbf_constrained (line 332) | def rbf_constrained(x_in, rbf, yaml_dict, opt):
function create_rbf_surrogate (line 364) | def create_rbf_surrogate(X, Y):
function case_id (line 369) | def case_id(case, x_dict):
function evaluate (line 378) | def evaluate(x_dict, yaml_dict):
function wrapper (line 410) | def wrapper(x, yaml_dict):
function set_case (line 416) | def set_case(case_name, base_dict, x_dict, settings_dict, case_dict):
function run_case (line 435) | def run_case(files):
function cost_function (line 446) | def cost_function(data,
function loads_cost (line 531) | def loads_cost(data, cost_loads_dict):
function get_ground_clearance (line 575) | def get_ground_clearance(data):
function cost_sigmoid (line 595) | def cost_sigmoid(z, z_min, z_0, x_offset=0.5, offset=0.0, scale=1.):
function unfold_x (line 608) | def unfold_x(x, parameters_dict):
function process_previous_cases (line 616) | def process_previous_cases(yaml_dict):
function x_vec_from_data (line 640) | def x_vec_from_data(data, param_dict):
FILE: scripts/xplaneUDPout/xplaneUDP.py
class XPlaneIpNotFound (line 12) | class XPlaneIpNotFound(Exception):
class XPlaneTimeout (line 16) | class XPlaneTimeout(Exception):
class XPlaneUdp (line 20) | class XPlaneUdp:
method __init__ (line 43) | def __init__(self, pklFile):
method run (line 100) | def run(self):
method get_struct_value (line 166) | def get_struct_value(self, data, timestep_index=-1):
method encode_dref (line 180) | def encode_dref(self, drefPath, idx, lstOfVals=np.asarray([])):
method encode_dvis (line 244) | def encode_dvis(self, lstOfVals):
method convert_to_lat_lon (line 283) | def convert_to_lat_lon(self, values):
method convert_tip_disp_to_angle (line 310) | def convert_tip_disp_to_angle(self, lstOfVals, indices, arm):
method find_deflection_ratio (line 331) | def find_deflection_ratio(self, lstOfVals, indices, limits):
method find_local_ip (line 353) | def find_local_ip(self):
method find_ip_xplane (line 377) | def find_ip_xplane(self):
FILE: setup.py
class CMakeBuildExt (line 9) | class CMakeBuildExt(build_ext):
method finalize_options (line 16) | def finalize_options(self):
method run (line 21) | def run(self):
function run (line 40) | def run():
class BuildCommand (line 58) | class BuildCommand(Command):
method initialize_options (line 66) | def initialize_options(self):
method finalize_options (line 69) | def finalize_options(self):
method run (line 72) | def run(self):
FILE: sharpy/aero/models/aerogrid.py
class Aerogrid (line 20) | class Aerogrid(Grid):
method __init__ (line 28) | def __init__(self):
method generate (line 40) | def generate(self, data_dict, beam, settings, ts):
method output_info (line 130) | def output_info(self):
method calculate_dimensions (line 148) | def calculate_dimensions(self):
method generate_zeta_timestep_info (line 154) | def generate_zeta_timestep_info(self, structure_tstep, aero_tstep, bea...
method generate_phantom_panels_at_junction (line 325) | def generate_phantom_panels_at_junction(self, aero_tstep):
method compute_gamma_dot (line 330) | def compute_gamma_dot(dt, tstep, previous_tsteps):
function generate_strip (line 377) | def generate_strip(node_info, airfoil_db, aligned_grid,
FILE: sharpy/aero/models/grid.py
class Grid (line 14) | class Grid(object):
method __init__ (line 22) | def __init__(self):
method generate (line 44) | def generate(self, data_dict, beam, aero_settings, ts):
method calculate_dimensions (line 73) | def calculate_dimensions(self):
method add_timestep (line 106) | def add_timestep(self):
method generate_zeta_timestep_info (line 112) | def generate_zeta_timestep_info(self, structure_tstep, aero_tstep, bea...
method generate_zeta (line 117) | def generate_zeta(self, beam, aero_settings, ts=-1, beam_ts=-1):
method generate_mapping (line 123) | def generate_mapping(self):
method update_orientation (line 172) | def update_orientation(self, quat, ts=-1):
FILE: sharpy/aero/models/nonliftingbodygrid.py
class NonliftingBodyGrid (line 12) | class NonliftingBodyGrid(Grid):
method __init__ (line 19) | def __init__(self):
method generate (line 24) | def generate(self, data_dict, beam, nonlifting_body_settings, ts):
method generate_zeta_timestep_info (line 34) | def generate_zeta_timestep_info(self, structure_tstep, nonlifting_body...
method get_zeta_and_zeta_dot (line 41) | def get_zeta_and_zeta_dot(self,i_surf, structure_tstep):
method get_elment_and_local_node_id (line 106) | def get_elment_and_local_node_id(self, i_surf, i_global_node):
FILE: sharpy/aero/utils/airfoilpolars.py
class Polar (line 7) | class Polar:
method __init__ (line 12) | def __init__(self):
method initialise (line 20) | def initialise(self, table):
method get_coefs (line 58) | def get_coefs(self, aoa_deg):
method get_aoa_deg_from_cl_2pi (line 66) | def get_aoa_deg_from_cl_2pi(self, cl):
method redefine_aoa (line 71) | def redefine_aoa(self, new_aoa):
method get_cdcm_from_cl (line 87) | def get_cdcm_from_cl(self, cl):
function interpolate (line 121) | def interpolate(polar1, polar2, coef=0.5):
FILE: sharpy/aero/utils/mapping.py
function aero2struct_force_mapping (line 6) | def aero2struct_force_mapping(aero_forces,
function total_forces_moments (line 90) | def total_forces_moments(forces_nodes_a,
FILE: sharpy/aero/utils/utils.py
function flightcon_file_parser (line 7) | def flightcon_file_parser(fc_dict):
function alpha_beta_to_direction (line 17) | def alpha_beta_to_direction(alpha, beta):
function magnitude_and_direction_of_relative_velocity (line 25) | def magnitude_and_direction_of_relative_velocity(displacement, displacem...
function local_stability_axes (line 64) | def local_stability_axes(dir_urel, dir_chord):
function span_chord (line 95) | def span_chord(i_node_surf, zeta):
function find_aerodynamic_solver_settings (line 133) | def find_aerodynamic_solver_settings(settings):
function find_velocity_generator (line 160) | def find_velocity_generator(settings):
FILE: sharpy/aero/utils/uvlmlib.py
class VMopts (line 16) | class VMopts(ct.Structure):
method __init__ (line 65) | def __init__(self):
method set_options (line 93) | def set_options(self, options, n_surfaces = 0, n_surfaces_nonlifting =...
class UVMopts (line 115) | class UVMopts(ct.Structure):
method __init__ (line 141) | def __init__(self):
method set_options (line 163) | def set_options(self,
class FlightConditions (line 200) | class FlightConditions(ct.Structure):
method __init__ (line 206) | def __init__(self, rho, vec_u_inf):
method set_flight_conditions (line 210) | def set_flight_conditions(self, rho, vec_u_inf):
function vlm_solver (line 219) | def vlm_solver(ts_info, options):
function vlm_solver_nonlifting_body (line 245) | def vlm_solver_nonlifting_body(ts_info, options):
function vlm_solver_lifting_and_nonlifting_bodies (line 264) | def vlm_solver_lifting_and_nonlifting_bodies(ts_info_lifting, ts_info_no...
function uvlm_solver (line 301) | def uvlm_solver(i_iter, ts_info, struct_ts_info, options, convect_wake=T...
function uvlm_solver_lifting_and_nonlifting (line 340) | def uvlm_solver_lifting_and_nonlifting(i_iter, ts_info, ts_info_nonlifti...
function uvlm_calculate_unsteady_forces (line 389) | def uvlm_calculate_unsteady_forces(ts_info,
function uvlm_calculate_incidence_angle (line 435) | def uvlm_calculate_incidence_angle(ts_info,
function uvlm_calculate_total_induced_velocity_at_points (line 455) | def uvlm_calculate_total_induced_velocity_at_points(ts_info,
function biot_panel_cpp (line 525) | def biot_panel_cpp(zeta_point, zeta_panel, vortex_radius, gamma=1.0):
function eval_panel_cpp (line 560) | def eval_panel_cpp(zeta_point, zeta_panel,
function get_induced_velocity_cpp (line 607) | def get_induced_velocity_cpp(maps, zeta, gamma, zeta_target,
function get_aic3_cpp (line 647) | def get_aic3_cpp(maps, zeta, zeta_target, vortex_radius):
function dvinddzeta_cpp (line 683) | def dvinddzeta_cpp(zetac, surf_in, is_bound,
function get_ctype_pointer_of_rbm_vel_in_G_frame (line 740) | def get_ctype_pointer_of_rbm_vel_in_G_frame(rbm_vel, cga):
FILE: sharpy/cases/coupled/X-HALE/generate_xhale.py
function clean_test_files (line 323) | def clean_test_files():
function read_beam_data (line 344) | def read_beam_data(filename=route + '/inputs/beam_properties.xlsx'):
function read_lumped_mass_data (line 398) | def read_lumped_mass_data(filename=route + '/inputs/lumped_mass.xlsx'):
function generate_fem (line 446) | def generate_fem():
function read_aero_data (line 1136) | def read_aero_data(filename=route + '/inputs/aero_properties.xlsx'):
function generate_aero_file (line 1151) | def generate_aero_file():
function load_airfoil (line 1610) | def load_airfoil(filename):
function generate_naca_camber (line 1615) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 1635) | def generate_solver_file():
FILE: sharpy/cases/coupled/hinged_controlled_wing/generate_hinged_controlled_wing.py
function clean_test_files (line 63) | def clean_test_files():
function generate_dyn_file (line 85) | def generate_dyn_file():
function generate_fem_file (line 135) | def generate_fem_file():
function generate_aero_file (line 277) | def generate_aero_file():
function generate_naca_camber (line 357) | def generate_naca_camber(M=0, P=0):
function generate_multibody_file (line 373) | def generate_multibody_file():
function generate_solver_file (line 396) | def generate_solver_file(horseshoe=False):
FILE: sharpy/cases/coupled/hinged_controlled_wing/generate_hinged_roll_controlled_wing.py
function clean_test_files (line 66) | def clean_test_files():
function generate_dyn_file (line 88) | def generate_dyn_file():
function generate_fem_file (line 138) | def generate_fem_file():
function generate_aero_file (line 280) | def generate_aero_file():
function generate_naca_camber (line 361) | def generate_naca_camber(M=0, P=0):
function generate_multibody_file (line 377) | def generate_multibody_file():
function generate_solver_file (line 400) | def generate_solver_file(horseshoe=False):
FILE: sharpy/cases/coupled/multibody_takeoff/generate_hale.py
function clean_test_files (line 205) | def clean_test_files():
function generate_dyn_file (line 226) | def generate_dyn_file():
function generate_fem (line 279) | def generate_fem():
function generate_aero_file (line 455) | def generate_aero_file():
function generate_naca_camber (line 627) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 644) | def generate_solver_file():
FILE: sharpy/cases/coupled/simple_HALE/generate_hale.py
function clean_test_files (line 212) | def clean_test_files():
function generate_dyn_file (line 234) | def generate_dyn_file():
function generate_fem (line 291) | def generate_fem():
function generate_aero_file (line 468) | def generate_aero_file():
function generate_naca_camber (line 641) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 658) | def generate_solver_file():
FILE: sharpy/cases/hangar/horten_wing.py
class HortenWing (line 15) | class HortenWing:
method __init__ (line 26) | def __init__(self,
method initialise (line 184) | def initialise(self):
method dynamic_control_surface (line 257) | def dynamic_control_surface(self, *delta):
method planform_area (line 273) | def planform_area(self):
method update_mass_stiffness (line 278) | def update_mass_stiffness(self, sigma=1.):
method update_fem_prop (line 496) | def update_fem_prop(self):
method generate_fem_file (line 680) | def generate_fem_file(self):
method create_linear_simulation (line 726) | def create_linear_simulation(self, delta_e=None, delta_dot=None):
method generate_linear_sim_files (line 750) | def generate_linear_sim_files(self, x0, input_vec):
method clean_test_files (line 760) | def clean_test_files(self):
method update_aero_properties (line 801) | def update_aero_properties(self):
method generate_aero_file (line 980) | def generate_aero_file(self, route=None, case_name=None):
method set_default_config_dict (line 1052) | def set_default_config_dict(self, route=None, case_name=None):
FILE: sharpy/cases/hangar/richards_wing.py
class Baseline (line 12) | class Baseline(HortenWing):
method set_properties (line 14) | def set_properties(self):
method update_mass_stiffness (line 54) | def update_mass_stiffness(self, sigma=1., sigma_mass=1., payload=0):
class CrossSection (line 209) | class CrossSection(object):
method __init__ (line 210) | def __init__(self):
method mass (line 220) | def mass(self):
method ixx (line 227) | def ixx(self):
method elem_length (line 232) | def elem_length(self):
method elem_cm_y (line 237) | def elem_cm_y(self):
method elem_cm_z (line 243) | def elem_cm_z(self):
method centre_mass (line 249) | def centre_mass(self):
method iyy (line 256) | def iyy(self):
method izz (line 267) | def izz(self):
method n_node (line 279) | def n_node(self):
method n_elem (line 283) | def n_elem(self):
method build (line 286) | def build(self, y, z, t):
class IBeam (line 292) | class IBeam(CrossSection):
method build (line 294) | def build(self, c_root):
class Airfoil (line 315) | class Airfoil(CrossSection):
method build (line 317) | def build(self, c_root):
class WingCrossSection (line 335) | class WingCrossSection:
method __init__ (line 337) | def __init__(self, chord):
method mass (line 349) | def mass(self):
method centre_mass (line 353) | def centre_mass(self):
method ixx (line 359) | def ixx(self):
method iyy (line 363) | def iyy(self):
method izz (line 367) | def izz(self):
FILE: sharpy/cases/hangar/swept_flying_wing.py
class SweptWing (line 15) | class SweptWing:
method __init__ (line 26) | def __init__(self,
method update_mass_stiffness (line 180) | def update_mass_stiffness(self, sigma=1.):
method update_fem_prop (line 320) | def update_fem_prop(self):
method generate_fem_file (line 515) | def generate_fem_file(self):
method clean_test_files (line 563) | def clean_test_files(self):
method update_aero_properties (line 599) | def update_aero_properties(self):
method generate_aero_file (line 778) | def generate_aero_file(self, route=None, case_name=None):
method set_default_config_dict (line 850) | def set_default_config_dict(self, route=None, case_name=None):
FILE: sharpy/cases/templates/Ttail.py
class Ttail_3beams (line 20) | class Ttail_3beams():
method __init__ (line 78) | def __init__(self,
method update_fem_prop (line 178) | def update_fem_prop(self):
method update_aero_prop (line 303) | def update_aero_prop(self):
method update_mass_stiff (line 395) | def update_mass_stiff(self):
method update_derived_params (line 411) | def update_derived_params(self):
method generate_fem_file (line 420) | def generate_fem_file(self):
method set_default_config_dict (line 458) | def set_default_config_dict(self):
method generate_aero_file (line 570) | def generate_aero_file(self):
method clean_test_files (line 601) | def clean_test_files(self):
class Ttail_canonical (line 620) | class Ttail_canonical(Ttail_3beams):
method __init__ (line 627) | def __init__(self,
method update_mass_stiff (line 663) | def update_mass_stiff(self):
FILE: sharpy/cases/templates/flying_wings.py
class FlyingWing (line 25) | class FlyingWing():
method __init__ (line 64) | def __init__(self,
method settings_to_config (line 160) | def settings_to_config(self, settings):
method update_mass_stiff (line 170) | def update_mass_stiff(self):
method load_polar (line 196) | def load_polar(self, file):
method update_derived_params (line 209) | def update_derived_params(self):
method update_fem_prop (line 260) | def update_fem_prop(self):
method update_aero_prop (line 354) | def update_aero_prop(self):
method set_default_config_dict (line 404) | def set_default_config_dict(self):
method generate_aero_file (line 662) | def generate_aero_file(self, airfoil_efficiency=None):
method generate_fem_file (line 711) | def generate_fem_file(self):
method generate_rom_files (line 754) | def generate_rom_files(self, left_tangent, right_tangent, ro, rc, fo, ...
method clean_test_files (line 765) | def clean_test_files(self):
class Smith (line 790) | class Smith(FlyingWing):
method __init__ (line 797) | def __init__(self,
method update_mass_stiff (line 830) | def update_mass_stiff(self):
class Goland (line 848) | class Goland(FlyingWing):
method __init__ (line 855) | def __init__(self,
method update_mass_stiff (line 899) | def update_mass_stiff(self):
class GolandControlSurface (line 936) | class GolandControlSurface(Goland):
method __init__ (line 938) | def __init__(self,
method update_aero_prop (line 994) | def update_aero_prop(self):
method create_linear_files (line 1064) | def create_linear_files(self, x0, input_vec):
class QuasiInfinite (line 1071) | class QuasiInfinite(FlyingWing):
method __init__ (line 1078) | def __init__(self,
method update_mass_stiff (line 1115) | def update_mass_stiff(self):
class Pazy (line 1133) | class Pazy(FlyingWing):
method __init__ (line 1142) | def __init__(self,
method update_mass_stiff (line 1191) | def update_mass_stiff(self):
class PazyControlSurface (line 1293) | class PazyControlSurface(Pazy):
method __init__ (line 1295) | def __init__(self,
method update_aero_prop (line 1354) | def update_aero_prop(self):
method create_linear_files (line 1423) | def create_linear_files(self, x0, input_vec):
FILE: sharpy/cases/templates/fuselage_wing_configuration/fuselage_wing_configuration.py
class Fuselage_Wing_Configuration (line 9) | class Fuselage_Wing_Configuration:
method __init__ (line 17) | def __init__(self, case_name, case_route, output_route):
method init_aeroelastic (line 28) | def init_aeroelastic(self, **kwargs):
method init_structure (line 35) | def init_structure(self, **kwargs):
method init_aero (line 38) | def init_aero(self, **kwargs):
method init_fuselage (line 41) | def init_fuselage(self, **kwargs):
method generate (line 43) | def generate(self):
method create_settings (line 51) | def create_settings(self, settings):
method clean (line 60) | def clean(self):
method run (line 67) | def run(self):
FILE: sharpy/cases/templates/fuselage_wing_configuration/fwc_aero.py
class FWC_Aero (line 5) | class FWC_Aero:
method __init__ (line 9) | def __init__(self, structure, case_name, case_route, **kwargs):
method generate (line 28) | def generate(self):
method initialize_attributes (line 39) | def initialize_attributes(self):
method get_y_junction (line 56) | def get_y_junction(self):
method set_wing_properties (line 61) | def set_wing_properties(self):
method set_junction_boundary_conditions (line 77) | def set_junction_boundary_conditions(self):
method write_input_file (line 87) | def write_input_file(self):
method generate_naca_camber (line 115) | def generate_naca_camber(self,M=0, P=0):
FILE: sharpy/cases/templates/fuselage_wing_configuration/fwc_fuselage.py
class FWC_Fuselage (line 7) | class FWC_Fuselage:
method __init__ (line 12) | def __init__(self, structure, case_name, case_route, **kwargs):
method generate (line 27) | def generate(self):
method initialize_parameters (line 47) | def initialize_parameters(self):
method get_fuselage_geometry (line 57) | def get_fuselage_geometry(self):
method get_values_at_fuselage_nodes (line 74) | def get_values_at_fuselage_nodes(self, array):
method plot_fuselage_radius (line 77) | def plot_fuselage_radius(self, x, radius):
method write_fuselage_input_file (line 86) | def write_fuselage_input_file(self):
method get_radius_ellipsoid (line 94) | def get_radius_ellipsoid(self, x_coordinates, a, b):
method find_index_of_closest_entry (line 99) | def find_index_of_closest_entry(self, array_values, target_value):
method create_fuselage_geometry (line 103) | def create_fuselage_geometry(self, x_coord_fuselage, x_nose_end, x_tai...
method get_nose_shape (line 121) | def get_nose_shape(self, x_coord, radius):
FILE: sharpy/cases/templates/fuselage_wing_configuration/fwc_get_settings.py
function define_simulation_settings (line 4) | def define_simulation_settings(flow, model, alpha_deg, u_inf,
FILE: sharpy/cases/templates/fuselage_wing_configuration/fwc_structure.py
class FWC_Structure (line 5) | class FWC_Structure:
method __init__ (line 11) | def __init__(self, case_name, case_route, **kwargs):
method generate (line 40) | def generate(self):
method set_element_and_nodes (line 57) | def set_element_and_nodes(self):
method initialize_parameters (line 78) | def initialize_parameters(self):
method set_stiffness_and_mass_propoerties (line 99) | def set_stiffness_and_mass_propoerties(self):
method generate_mass_matrix (line 122) | def generate_mass_matrix(self, m_bar, j_bar):
method set_beam_properties_right_wing (line 126) | def set_beam_properties_right_wing(self):
method mirror_wing_beam (line 144) | def mirror_wing_beam(self):
method set_x_coordinate_fuselage (line 162) | def set_x_coordinate_fuselage(self):
method adjust_fuselage_connectivities (line 185) | def adjust_fuselage_connectivities(self):
method add_additional_element_for_low_wing (line 196) | def add_additional_element_for_low_wing(self):
method set_beam_properties_fuselage (line 208) | def set_beam_properties_fuselage(self):
method find_index_of_closest_entry (line 226) | def find_index_of_closest_entry(self, array_values, target_value):
method set_thrust (line 229) | def set_thrust(self, value):
method write_input_file (line 232) | def write_input_file(self):
FILE: sharpy/cases/templates/template_wt.py
function create_node_radial_pos_from_elem_centres (line 32) | def create_node_radial_pos_from_elem_centres(root_elem_centres_tip, num_...
function create_blade_coordinates (line 68) | def create_blade_coordinates(num_node, node_r, node_y, node_z):
function spar_from_excel_type04 (line 94) | def spar_from_excel_type04(op_params,
function rotor_from_excel_type03 (line 371) | def rotor_from_excel_type03(in_op_params,
function generate_from_excel_type03 (line 781) | def generate_from_excel_type03(op_params,
function rotor_from_excel_type02 (line 1046) | def rotor_from_excel_type02(chord_panels,
function generate_from_excel_type02 (line 1106) | def generate_from_excel_type02(chord_panels,
FILE: sharpy/controllers/bladepitchpid.py
class BladePitchPid (line 14) | class BladePitchPid(controller_interface.BaseController):
method __init__ (line 157) | def __init__(self):
method initialise (line 170) | def initialise(self, data, in_dict, controller_id=None, restart=False):
method control (line 214) | def control(self, data, controlled_state):
method compute_prescribed_sp (line 366) | def compute_prescribed_sp(self, time):
method compute_system_pv (line 381) | def compute_system_pv(self, struct_tstep, beam, **kwargs):
method controller_wrapper (line 398) | def controller_wrapper(self,
method __exit__ (line 407) | def __exit__(self, *args):
method drive_train_model (line 411) | def drive_train_model(self, aero_torque, ini_rot_vel, ini_rot_acc):
method compute_aero_torque (line 424) | def compute_aero_torque(self, beam, struct_tstep):
method compute_blade_pitch (line 446) | def compute_blade_pitch(beam, struct_tstep, tower_ibody=0, blade_ibody...
FILE: sharpy/controllers/controlsurfacepidcontroller.py
class ControlSurfacePidController (line 11) | class ControlSurfacePidController(controller_interface.BaseController):
method __init__ (line 72) | def __init__(self):
method initialise (line 95) | def initialise(self, data, in_dict, controller_id=None, restart=False):
method control (line 157) | def control(self, data, controlled_state):
method extract_time_history (line 201) | def extract_time_history(self, controlled_state):
method controller_wrapper (line 228) | def controller_wrapper(self,
method __exit__ (line 237) | def __exit__(self, *args):
FILE: sharpy/controllers/multibodycontroller.py
class MultibodyController (line 9) | class MultibodyController(controller_interface.BaseController):
method __init__ (line 47) | def __init__(self):
method initialise (line 66) | def initialise(self, data, in_dict, controller_id=None, restart=False):
method control (line 129) | def control(self, data, controlled_state):
method controller_wrapper (line 168) | def controller_wrapper(
method __exit__ (line 177) | def __exit__(self, *args):
FILE: sharpy/controllers/takeofftrajectorycontroller.py
class TakeOffTrajectoryController (line 14) | class TakeOffTrajectoryController(controller_interface.BaseController):
method __init__ (line 76) | def __init__(self):
method initialise (line 91) | def initialise(self, data, in_dict, controller_id=None, restart=False):
method control (line 121) | def control(self, data, controlled_state):
method process_trajectory (line 191) | def process_trajectory(self, dxdt=True):
method controller_wrapper (line 212) | def controller_wrapper(self, t):
method __exit__ (line 231) | def __exit__(self, *args):
FILE: sharpy/generators/bumpvelocityfield.py
class BumpVelocityField (line 9) | class BumpVelocityField(generator_interface.BaseGenerator):
method __init__ (line 74) | def __init__(self):
method initialise (line 81) | def initialise(self, in_dict, restart=False):
method generate (line 89) | def generate(self, params, uext):
FILE: sharpy/generators/dynamiccontrolsurface.py
class DynamicControlSurface (line 9) | class DynamicControlSurface(generator_interface.BaseGenerator):
method __init__ (line 65) | def __init__(self):
method initialise (line 71) | def initialise(self, in_dict, restart=False):
method generate (line 90) | def generate(self, params):
method __call__ (line 94) | def __call__(self, params):
FILE: sharpy/generators/floatingforces.py
function compute_xf_zf (line 18) | def compute_xf_zf(hf, vf, l, w, EA, cb):
function compute_jacobian (line 44) | def compute_jacobian(hf, vf, l, w, EA, cb):
function rename_terms (line 102) | def rename_terms(vf, hf, w, l):
function quasisteady_mooring (line 113) | def quasisteady_mooring(xf, zf, l, w, EA, cb, hf0=None, vf0=None):
function wave_radiation_damping (line 159) | def wave_radiation_damping(K, qdot, it, dt):
function change_of_to_sharpy (line 170) | def change_of_to_sharpy(matrix_of):
function rfval (line 187) | def rfval(num, den, z):
function matrix_from_rf (line 195) | def matrix_from_rf(dict_rf, w):
function response_freq_dep_matrix (line 208) | def response_freq_dep_matrix(H, omega_H, q, it_, dt):
function compute_equiv_hd_added_mass (line 247) | def compute_equiv_hd_added_mass(f, q):
function jonswap_spectrum (line 279) | def jonswap_spectrum(Tp, Hs, w):
function noise_freq_1s (line 314) | def noise_freq_1s(w):
class FloatingForces (line 334) | class FloatingForces(generator_interface.BaseGenerator):
method __init__ (line 464) | def __init__(self):
method initialise (line 494) | def initialise(self, in_dict=None, data=None, restart=False):
method write_output (line 642) | def write_output(self, ts, k, mooring, mooring_yaw, hydrostatic,
method update_dof_vector (line 687) | def update_dof_vector(self, beam, struct_tstep, it, k):
method freq_wave_forces_variables (line 709) | def freq_wave_forces_variables(self, Tp, Hs, dt, time, xi, w_xi):
method time_wave_forces (line 743) | def time_wave_forces(self, dx, grav):
method generate (line 770) | def generate(self, params):
FILE: sharpy/generators/gridbox.py
class GridBox (line 11) | class GridBox(generator_interface.BaseGenerator):
method __init__ (line 44) | def __init__(self):
method initialise (line 48) | def initialise(self, in_dict, restart=False):
method generate (line 63) | def generate(self, params):
FILE: sharpy/generators/gustvelocityfield.py
function gust (line 30) | def gust(arg):
class BaseGust (line 41) | class BaseGust(metaclass=ABCMeta):
method __init__ (line 47) | def __init__(self):
method u_inf (line 53) | def u_inf(self):
method u_inf (line 57) | def u_inf(self, value):
method u_inf_direction (line 61) | def u_inf_direction(self):
method u_inf_direction (line 65) | def u_inf_direction(self, value):
class one_minus_cos (line 70) | class one_minus_cos(BaseGust):
method initialise (line 100) | def initialise(self, in_dict, restart=False):
method gust_shape (line 104) | def gust_shape(self, x, y, z, time=0):
class DARPA (line 117) | class DARPA(BaseGust):
method initialise (line 151) | def initialise(self, in_dict, restart=False):
method gust_shape (line 155) | def gust_shape(self, x, y, z, time=0):
class continuous_sin (line 170) | class continuous_sin(BaseGust):
method initialise (line 200) | def initialise(self, in_dict, restart=False):
method gust_shape (line 204) | def gust_shape(self, x, y, z, time=0):
class time_varying_global (line 217) | class time_varying_global(BaseGust):
method __init__ (line 242) | def __init__(self):
method initialise (line 247) | def initialise(self, in_dict, restart=False):
method initialise_interpolation_functions (line 254) | def initialise_interpolation_functions(self):
method gust_shape (line 259) | def gust_shape(self, x, y, z, time=0):
class time_varying (line 267) | class time_varying(time_varying_global):
method initialise_interpolation_functions (line 277) | def initialise_interpolation_functions(self):
method gust_shape (line 282) | def gust_shape(self, x, y, z, time=0):
class span_sine (line 291) | class span_sine(BaseGust):
method initialise (line 329) | def initialise(self, in_dict, restart=False):
method gust_shape (line 336) | def gust_shape(self, x, y, z, time=0):
class GustVelocityField (line 348) | class GustVelocityField(generator_interface.BaseGenerator):
method __init__ (line 402) | def __init__(self):
method initialise (line 411) | def initialise(self, in_dict, restart=False):
method generate (line 430) | def generate(self, params, uext):
FILE: sharpy/generators/helicoidalwake.py
class HelicoidalWake (line 9) | class HelicoidalWake(generator_interface.BaseGenerator):
method __init__ (line 80) | def __init__(self):
method initialise (line 98) | def initialise(self, data, in_dict, restart=False):
method generate (line 126) | def generate(self, params):
method get_dphi (line 169) | def get_dphi(i, dphi1, ndphi1, r, dphimax):
FILE: sharpy/generators/modifystructure.py
class ModifyStructure (line 7) | class ModifyStructure(generator_interface.BaseGenerator):
method __init__ (line 40) | def __init__(self):
method initialise (line 47) | def initialise(self, in_dict, **kwargs):
method generate (line 76) | def generate(self, params):
class ChangedVariable (line 94) | class ChangedVariable:
method __init__ (line 105) | def __init__(self, name, var_index, file):
method initialise (line 114) | def initialise(self, structure):
method __call__ (line 121) | def __call__(self, structure, ts):
method get_original (line 124) | def get_original(self, structure):
method load_file (line 128) | def load_file(self):
class ChangeLumpedMass (line 132) | class ChangeLumpedMass(ChangedVariable):
method __init__ (line 156) | def __init__(self, var_index, file):
method __call__ (line 159) | def __call__(self, structure, ts):
method load_file (line 179) | def load_file(self):
method get_original (line 204) | def get_original(self, structure):
class LumpedMassControl (line 212) | class LumpedMassControl:
method __init__ (line 223) | def __init__(self):
method set_unchanged_vars_to_zero (line 226) | def set_unchanged_vars_to_zero(self, structure):
method execute_change (line 243) | def execute_change(structure):
method append (line 252) | def append(self, i):
FILE: sharpy/generators/polaraeroforces.py
class PolarCorrection (line 11) | class PolarCorrection(generator_interface.BaseGenerator):
method __init__ (line 104) | def __init__(self):
method initialise (line 117) | def initialise(self, in_dict, **kwargs):
method generate (line 137) | def generate(self, **params):
method correct_surface_area (line 285) | def correct_surface_area(self, inode, struct2aero_mapping, zeta_ts, ar...
method check_for_special_cases (line 311) | def check_for_special_cases(self, aerogrid):
method write_induced_aoa_of_each_node (line 331) | def write_induced_aoa_of_each_node(self,ts, list_aoa_induced):
method compute_aoa_cl0_from_airfoil_data (line 350) | def compute_aoa_cl0_from_airfoil_data(self, aerogrid):
class EfficiencyCorrection (line 360) | class EfficiencyCorrection(generator_interface.BaseGenerator):
method __init__ (line 382) | def __init__(self):
method initialise (line 386) | def initialise(self, in_dict, **kwargs):
method generate (line 390) | def generate(self, **params):
FILE: sharpy/generators/shearvelocityfield.py
class ShearVelocityField (line 8) | class ShearVelocityField(generator_interface.BaseGenerator):
method __init__ (line 54) | def __init__(self):
method initialise (line 64) | def initialise(self, in_dict, restart=False):
method generate (line 75) | def generate(self, params, uext):
FILE: sharpy/generators/steadyvelocityfield.py
class SteadyVelocityField (line 8) | class SteadyVelocityField(generator_interface.BaseGenerator):
method __init__ (line 50) | def __init__(self):
method initialise (line 56) | def initialise(self, in_dict, restart=False):
method generate (line 65) | def generate(self, params, uext):
FILE: sharpy/generators/straightwake.py
class StraightWake (line 10) | class StraightWake(generator_interface.BaseGenerator):
method __init__ (line 63) | def __init__(self):
method initialise (line 70) | def initialise(self, data, in_dict=None, restart=False):
method generate (line 127) | def generate(self, params):
method get_deltax (line 159) | def get_deltax(i, dx1, ndx1, r, dxmax):
method get_surface_parameter (line 168) | def get_surface_parameter(parameter, i_surf):
method get_all_surface_parameters (line 174) | def get_all_surface_parameters(self,i_surf):
FILE: sharpy/generators/trajectorygenerator.py
class TrajectoryGenerator (line 12) | class TrajectoryGenerator(generator_interface.BaseGenerator):
method __init__ (line 74) | def __init__(self):
method initialise (line 90) | def initialise(self, in_dict, restart=False):
method print_info (line 108) | def print_info(self):
method plot (line 114) | def plot(self):
method get_n_steps (line 126) | def get_n_steps(self):
method __call__ (line 129) | def __call__(self, params):
method generate (line 132) | def generate(self, params):
method calculate_trajectory (line 143) | def calculate_trajectory(self):
method diff_trajectory (line 205) | def diff_trajectory(self):
function linear_curve_length (line 212) | def linear_curve_length(shape_polynomial, coords_end):
function quadratic_curve_length (line 219) | def quadratic_curve_length(shape_polynomial, coords_end):
function constant_acceleration_position_coeffs (line 233) | def constant_acceleration_position_coeffs(s_e, s_dot_e):
function linear_acceleration_position_coeffs (line 238) | def linear_acceleration_position_coeffs(s_e, s_dot_e):
function constant_acceleration_travel_time (line 244) | def constant_acceleration_travel_time(s_e, s_dot_e):
function linear_acceleration_travel_time (line 248) | def linear_acceleration_travel_time(s_e, s_dot_e):
FILE: sharpy/generators/turbvelocityfield.py
class TurbVelocityField (line 13) | class TurbVelocityField(generator_interface.BaseGenerator):
method __init__ (line 83) | def __init__(self):
method initialise (line 109) | def initialise(self, in_dict, restart=False):
method interpolator_wrapper0 (line 130) | def interpolator_wrapper0(self, coords, i_dim=0):
method interpolator_wrapper1 (line 133) | def interpolator_wrapper1(self, coords, i_dim=1):
method interpolator_wrapper2 (line 136) | def interpolator_wrapper2(self, coords, i_dim=2):
method get_coeff (line 140) | def get_coeff(self):
method init_interpolator (line 143) | def init_interpolator(self):
method read_btl (line 154) | def read_btl(self, in_file):
method read_xdmf (line 160) | def read_xdmf(self, in_file):
method generate (line 261) | def generate(self, params, uext):
method update_cache (line 275) | def update_cache(self, t):
method update_coeff (line 320) | def update_coeff(self, t):
method time_2_timestep (line 328) | def time_2_timestep(self, t):
method timestep_2_time (line 331) | def timestep_2_time(self, it):
method get_field_bbox (line 334) | def get_field_bbox(self, x_grid, y_grid, z_grid, frame='G'):
method create_interpolator (line 344) | def create_interpolator(self, data, x_grid, y_grid, z_grid, i_dim):
method interpolate_zeta (line 352) | def interpolate_zeta(self, zeta, for_pos, u_ext, interpolator=None, of...
method periodicity (line 371) | def periodicity(x, bbox):
method apply_periodicity (line 379) | def apply_periodicity(self, coord):
method linear_coeff (line 440) | def linear_coeff(t_vec, t):
method read_grid (line 445) | def read_grid(self, i_grid, i_cache=0):
method g_2_gstar (line 507) | def g_2_gstar(coord_g):
method gstar_2_g (line 511) | def gstar_2_g(coord_star):
FILE: sharpy/generators/turbvelocityfieldbts.py
function interp_rectgrid_vectorfield (line 9) | def interp_rectgrid_vectorfield(points, grid, vector_field, out_value, r...
class TurbVelocityFieldBts (line 86) | class TurbVelocityFieldBts(generator_interface.BaseGenerator):
method __init__ (line 151) | def __init__(self):
method initialise (line 165) | def initialise(self, in_dict, restart=False):
method init_interpolator (line 191) | def init_interpolator(self, x_grid, y_grid, z_grid, vel):
method generate (line 200) | def generate(self, params, uext):
method interpolate_zeta (line 257) | def interpolate_zeta(self, zeta, for_pos, u_ext, interpolator=None, of...
method read_turbsim_bts (line 288) | def read_turbsim_bts(fname, case_with_tower=False):
method change_orientation (line 384) | def change_orientation(old_xgrid, old_ygrid, old_zgrid, old_vel, new_o...
method get_field_bbox (line 465) | def get_field_bbox(self, x_grid, y_grid, z_grid):
FILE: sharpy/io/inout_variables.py
class Variable (line 9) | class Variable:
method __init__ (line 12) | def __init__(self, name, inout, **kwargs):
method get_variable_value (line 47) | def get_variable_value(self, data, timestep_index=-1):
method set_variable_value (line 141) | def set_variable_value(self, value):
method set_in_timestep (line 153) | def set_in_timestep(self, data):
method set_dref_name (line 207) | def set_dref_name(self):
class SetOfVariables (line 228) | class SetOfVariables:
method __init__ (line 235) | def __init__(self):
method set_byte_ordering (line 244) | def set_byte_ordering(self, value):
method load_variables_from_yaml (line 247) | def load_variables_from_yaml(self, path_to_yaml):
method set_input_file (line 259) | def set_input_file(self, filename):
method input_msg_len (line 271) | def input_msg_len(self):
method __iter__ (line 275) | def __iter__(self):
method __getitem__ (line 278) | def __getitem__(self, item):
method __len__ (line 281) | def __len__(self):
method encode (line 284) | def encode(self):
method get_value (line 303) | def get_value(self, data, timestep_index=-1):
method set_value (line 316) | def set_value(self, values):
method update_timestep (line 331) | def update_timestep(self, data, values):
method save_to_file (line 338) | def save_to_file(self, input_variables):
class VariableIterator (line 349) | class VariableIterator:
method __init__ (line 351) | def __init__(self, set_of_variables):
method __next__ (line 355) | def __next__(self):
FILE: sharpy/io/logger_utils.py
function load_logger_settings (line 4) | def load_logger_settings(**kwargs):
function get_logger_level (line 28) | def get_logger_level(level):
FILE: sharpy/io/message_interface.py
function decoder (line 9) | def decoder(msg, byte_ordering='<'):
FILE: sharpy/io/network_interface.py
class NetworkLoader (line 16) | class NetworkLoader:
method __init__ (line 139) | def __init__(self):
method initialise (line 144) | def initialise(self, in_settings):
method get_inout_variables (line 161) | def get_inout_variables(self):
method get_networks (line 171) | def get_networks(self, networks='inout'):
class Network (line 197) | class Network:
method __init__ (line 219) | def __init__(self, host=None, port=None): # remove args when this is ...
method set_byte_ordering (line 234) | def set_byte_ordering(self, value):
method set_client_list (line 237) | def set_client_list(self, list_of_clients):
method set_selector_events_mask (line 249) | def set_selector_events_mask(self, mode):
method initialise (line 255) | def initialise(self, mode, in_settings):
method send (line 268) | def send(self, msg, dest_addr):
method set_queue (line 275) | def set_queue(self, queue):
method _sendto (line 278) | def _sendto(self, msg, address):
method receive (line 283) | def receive(self, msg_length=1024):
method process_events (line 291) | def process_events(self, mask): # should only have the relevant queue
method add_client (line 295) | def add_client(self, client_addr):
method _add_client (line 302) | def _add_client(self, client_addr):
method close (line 307) | def close(self):
class OutNetwork (line 314) | class OutNetwork(Network):
method initialise (line 354) | def initialise(self, mode, in_settings):
method process_events (line 363) | def process_events(self, mask):
class InNetwork (line 385) | class InNetwork(Network):
method __init__ (line 404) | def __init__(self):
method set_message_length (line 409) | def set_message_length(self, value):
method process_events (line 413) | def process_events(self, mask):
function get_events (line 429) | def get_events(mode):
FILE: sharpy/linear/assembler/lincontrolsurfacedeflector.py
class LinControlSurfaceDeflector (line 13) | class LinControlSurfaceDeflector(object):
method __init__ (line 31) | def __init__(self):
method initialise (line 49) | def initialise(self, data, linuvlm):
method generate (line 58) | def generate(self):
method apply (line 212) | def apply(self, ss):
function der_Cx_by_v (line 254) | def der_Cx_by_v(delta, v):
function der_Cy_by_v (line 261) | def der_Cy_by_v(delta, v):
function der_R_arbitrary_axis_times_v (line 269) | def der_R_arbitrary_axis_times_v(u, theta, v):
FILE: sharpy/linear/assembler/linearaeroelastic.py
class LinearAeroelastic (line 16) | class LinearAeroelastic(ss_interface.BaseElement):
method __init__ (line 62) | def __init__(self):
method initialise (line 91) | def initialise(self, data):
method assemble (line 135) | def assemble(self):
method update (line 316) | def update(self, u_infty):
method runrom_rbm (line 345) | def runrom_rbm(self, uvlm):
method get_gebm2uvlm_gains (line 405) | def get_gebm2uvlm_gains(self, data):
method to_nodal_coordinates (line 936) | def to_nodal_coordinates(self):
method load_uvlm (line 991) | def load_uvlm(filename):
FILE: sharpy/linear/assembler/linearbeam.py
class LinearBeam (line 18) | class LinearBeam(BaseElement):
method __init__ (line 148) | def __init__(self):
method initialise (line 158) | def initialise(self, data, custom_settings=None):
method assemble (line 201) | def assemble(self, t_ref=None):
method remove_rigid_states (line 245) | def remove_rigid_states(self):
method x0 (line 284) | def x0(self):
method trim_nodes (line 288) | def trim_nodes(self, trim_list=list):
method remove_symmetric_modes (line 312) | def remove_symmetric_modes(self):
method unpack_ss_vector (line 372) | def unpack_ss_vector(self, x_n, u_n, struct_tstep):
method unpack_flex_dof (line 505) | def unpack_flex_dof(self, eta, eta_dot=None):
method recover_accelerations (line 549) | def recover_accelerations(self, full_ss):
method save_reduced_order_bases (line 599) | def save_reduced_order_bases(self, file_name):
method save_structural_matrices (line 603) | def save_structural_matrices(self, file_name):
FILE: sharpy/linear/assembler/linearcustom.py
class LinearCustom (line 7) | class LinearCustom(ssinterface.BaseElement):
method __init__ (line 10) | def __init__(self):
method initialise (line 32) | def initialise(self, data, custom_settings=None):
method assemble (line 46) | def assemble(self):
FILE: sharpy/linear/assembler/lineargustassembler.py
function linear_gust (line 12) | def linear_gust(arg):
function gust_from_string (line 22) | def gust_from_string(gust_name):
class LinearGust (line 35) | class LinearGust(metaclass=ABCMeta):
method __init__ (line 43) | def __init__(self):
method initialise (line 61) | def initialise(self, aero, linuvlm, tsaero0, u_ext, custom_settings=No...
method get_x_max (line 87) | def get_x_max(self):
method assemble (line 108) | def assemble(self):
method apply (line 117) | def apply(self, ssuvlm):
method assemble_gust_statespace (line 174) | def assemble_gust_statespace(self, a_i, b_i, c_i, d_i):
method discretise_domain (line 207) | def discretise_domain(self):
class LeadingEdge (line 224) | class LeadingEdge(LinearGust):
method assemble (line 233) | def assemble(self):
class MultiLeadingEdge (line 289) | class MultiLeadingEdge(LinearGust):
method __init__ (line 309) | def __init__(self):
method initialise (line 315) | def initialise(self, aero, linuvlm, tsaero0, u_ext, custom_settings=No...
method assemble (line 323) | def assemble(self):
function get_freestream_velocity (line 362) | def get_freestream_velocity(data):
function linear_interpolation_weights (line 395) | def linear_interpolation_weights(x_vertex, x_domain):
function chordwise_interpolation (line 406) | def chordwise_interpolation(x_vertex, x_domain):
function spanwise_interpolation (line 417) | def spanwise_interpolation(y_vertex, span_loc, x_vertex, x_domain):
function campbell (line 483) | def campbell(sigma_w, length_scale, velocity, dt=None):
class TestInterpolation (line 525) | class TestInterpolation(unittest.TestCase):
method test_interpolation (line 527) | def test_interpolation(self):
FILE: sharpy/linear/assembler/linearuvlm.py
class LinearUVLM (line 18) | class LinearUVLM(ss_interface.BaseElement):
method __init__ (line 174) | def __init__(self):
method initialise (line 196) | def initialise(self, data, custom_settings=None):
method assemble (line 268) | def assemble(self, track_body=False, wake_prop_settings=None):
method remove_inputs (line 313) | def remove_inputs(self, remove_list=list):
method unpack_ss_vector (line 325) | def unpack_ss_vector(self, data, x_n, u_aero, aero_tstep, track_body=F...
method unpack_input_vector (line 470) | def unpack_input_vector(self, u_n, u_ext_gust, input_variables):
method connect_input (line 529) | def connect_input(self, element):
method connect_output (line 545) | def connect_output(self, element):
method unpack (line 560) | def unpack(self, u):
FILE: sharpy/linear/dev/linfunc.py
function scalar_product (line 14) | def scalar_product(Av,Bv):
function matrix_product (line 29) | def matrix_product(Asm,Bsm):
function skew (line 44) | def skew(Av):
function cross_product (line 61) | def cross_product(Av,Bv):
function norm2 (line 68) | def norm2(Av):
function simplify (line 75) | def simplify(Av):
function subs (line 99) | def subs(Av,expr_old,expr_new):
function scalar_deriv (line 123) | def scalar_deriv(a,xList):
FILE: sharpy/linear/src/assembly.py
function AICs (line 37) | def AICs(Surfs, Surfs_star, target='collocation', Project=True):
function nc_dqcdzeta_Sin_to_Sout (line 74) | def nc_dqcdzeta_Sin_to_Sout(Surf_in, Surf_out, Der_coll, Der_vert, Surf_...
function nc_dqcdzeta (line 161) | def nc_dqcdzeta(Surfs, Surfs_star, Merge=False):
function nc_domegazetadzeta (line 241) | def nc_domegazetadzeta(Surfs, Surfs_star):
function uc_dncdzeta (line 300) | def uc_dncdzeta(Surf):
function dfqsdgamma_vrel0 (line 375) | def dfqsdgamma_vrel0(Surfs, Surfs_star):
function dfqsdzeta_vrel0 (line 474) | def dfqsdzeta_vrel0(Surfs, Surfs_star):
function dfqsduinput (line 559) | def dfqsduinput(Surfs, Surfs_star):
function dfqsdzeta_omega (line 644) | def dfqsdzeta_omega(Surfs, Surfs_star):
function dfqsdvind_gamma (line 727) | def dfqsdvind_gamma(Surfs, Surfs_star):
function dvinddzeta (line 846) | def dvinddzeta(zetac, Surf_in, IsBound, M_in_bound=None):
function dfqsdvind_zeta (line 954) | def dfqsdvind_zeta(Surfs, Surfs_star):
function dfunstdgamma_dot (line 1110) | def dfunstdgamma_dot(Surfs):
function wake_prop (line 1159) | def wake_prop(MS, use_sparse=False, sparse_format='lil', settings=None):
function wake_prop_from_dimensions (line 1266) | def wake_prop_from_dimensions(dimensions, dimensions_star, use_sparse=Fa...
function test_wake_prop_term (line 1312) | def test_wake_prop_term(M, N, M_star, N_star, use_sparse, sparse_format=...
FILE: sharpy/linear/src/gridmapping.py
class AeroGridMap (line 10) | class AeroGridMap():
method __init__ (line 39) | def __init__(self, M: 'number of chord-wise', N: 'number of span-wise'):
method map_all (line 92) | def map_all(self):
method map_panels_to_vertices_1D_scalar (line 99) | def map_panels_to_vertices_1D_scalar(self):
method map_panels_to_vertices (line 129) | def map_panels_to_vertices(self):
method from_panel_to_vertices (line 143) | def from_panel_to_vertices(self, m: 'chordwise index', n: 'spanwise in...
method map_vertices_to_panels_1D_scalar (line 159) | def map_vertices_to_panels_1D_scalar(self):
method map_vertices_to_panels (line 192) | def map_vertices_to_panels(self):
method from_vertex_to_panel (line 214) | def from_vertex_to_panel(self, m: 'chordwise index', n: 'spanwise inde...
method map_panels_to_segments (line 235) | def map_panels_to_segments(self):
method from_panel_to_segments (line 250) | def from_panel_to_segments(self, m: 'chordwise index', n: 'spanwise in...
FILE: sharpy/linear/src/interp.py
function get_panel_wcv (line 12) | def get_panel_wcv(aM=0.5,aN=0.5):
function get_Wvc_scalar (line 28) | def get_Wvc_scalar(Map,aM=0.5,aN=0.5):
function get_Wvc_vector (line 63) | def get_Wvc_vector(Wvc_scalar):
function get_Wnv_vector (line 74) | def get_Wnv_vector(SurfGeo,aM=0.5,aN=0.5):
FILE: sharpy/linear/src/lib_dbiot.py
function eval_panel_cpp_coll (line 30) | def eval_panel_cpp_coll(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):
function eval_seg_exp (line 35) | def eval_seg_exp(ZetaP, ZetaA, ZetaB, vortex_radius, gamma_seg=1.0):
function eval_seg_exp_loop (line 53) | def eval_seg_exp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg,
function eval_panel_exp (line 164) | def eval_panel_exp(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):
function Dvcross_by_skew3d (line 191) | def Dvcross_by_skew3d(Dvcross, rv):
function der_runit (line 233) | def der_runit(r, rinv, minus_rinv3):
function eval_seg_comp (line 249) | def eval_seg_comp(ZetaP, ZetaA, ZetaB, vortex_radius, gamma_seg=1.0):
function eval_seg_comp_loop (line 258) | def eval_seg_comp_loop(DerP, DerA, DerB, ZetaP, ZetaA, ZetaB, gamma_seg,...
function eval_panel_comp (line 321) | def eval_panel_comp(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):
function eval_panel_fast (line 343) | def eval_panel_fast(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):
function eval_panel_fast_coll (line 422) | def eval_panel_fast_coll(zetaP, ZetaPanel, vortex_radius, gamma_pan=1.0):
function run_eval_panel_cpp (line 530) | def run_eval_panel_cpp():
function run_eval_panel_fast (line 535) | def run_eval_panel_fast(vortex_radius=vortex_radius_def):
function run_eval_panel_fast_coll (line 541) | def run_eval_panel_fast_coll(vortex_radius=vortex_radius_def):
function run_eval_panel_comp (line 547) | def run_eval_panel_comp():
function run_eval_panel_exp (line 552) | def run_eval_panel_exp():
FILE: sharpy/linear/src/lib_ucdncdzeta.py
function eval (line 20) | def eval(Zeta00, Zeta01, Zeta02, Zeta03, Uc):
function get_panel_normal (line 70) | def get_panel_normal(zetav_here):
FILE: sharpy/linear/src/libfit.py
function fpoly (line 17) | def fpoly(kv, B0, B1, B2, dyv, ddyv):
function fpade (line 21) | def fpade(kv, Cv, B0, B1a, B1b, B2, dyv, ddyv):
function getC (line 26) | def getC(kv, Yv, B0, B1a, B1b, B2, dyv, ddyv):
function rfa (line 36) | def rfa(cnum, cden, kv, ds=None):
function rfader (line 58) | def rfader(cnum, cden, kv, m=1, ds=None):
function fitfrd (line 89) | def fitfrd(kv, yv, N, dt=None, mag=0, eng=None):
function get_rfa_res (line 105) | def get_rfa_res(xv, kv, Yv, Nnum, Nden, ds=None):
function get_rfa_res_norm (line 123) | def get_rfa_res_norm(xv, kv, Yv, Nnum, Nden, ds=None, method='mix'):
function rfa_fit_dev (line 142) | def rfa_fit_dev(kv, Yv, Nnum, Nden, TolAbs, ds=None, Stability=True,
function poly_fit (line 313) | def poly_fit(kv, Yv, dyv, ddyv, method='leastsq', Bup=None):
function rfa_mimo (line 371) | def rfa_mimo(Yfull, kv, ds, tolAbs, Nnum, Nden, Dmatrix=None, NtrialMax=...
FILE: sharpy/linear/src/libsparse.py
class csc_matrix (line 43) | class csc_matrix(sparse.csc_matrix):
method __init__ (line 58) | def __init__(self,arg1, shape=None, dtype=None, copy=False):
method todense (line 61) | def todense(self):
method _add_dense (line 65) | def _add_dense(self, other):
function block_dot (line 84) | def block_dot(A, B):
function block_matrix_dot_vector (line 123) | def block_matrix_dot_vector(A, v):
function block_sum (line 148) | def block_sum(A, B, factA = None, factB = None):
function dot (line 203) | def dot(A,B,type_out=None):
function solve (line 249) | def solve(A,b):
function dense (line 281) | def dense(M):
function eye_as (line 290) | def eye_as(M):
function zeros_as (line 307) | def zeros_as(M):
class Test_module (line 328) | class Test_module(unittest.TestCase):
method setUp (line 331) | def setUp(self):
method test_dense_plus_csc_matrix_type (line 335) | def test_dense_plus_csc_matrix_type(self):
method test_zeros_as (line 354) | def test_zeros_as(self):
method test_eye_as (line 361) | def test_eye_as(self):
method test_dot (line 369) | def test_dot(self):
method test_solve (line 380) | def test_solve(self):
FILE: sharpy/linear/src/libss.py
class StateSpace (line 71) | class StateSpace:
method __init__ (line 87) | def __init__(self, A, B, C, D, dt=None):
method inputs (line 115) | def inputs(self):
method outputs (line 123) | def outputs(self):
method states (line 128) | def states(self):
method input_variables (line 133) | def input_variables(self):
method input_variables (line 137) | def input_variables(self, variables):
method output_variables (line 147) | def output_variables(self):
method output_variables (line 151) | def output_variables(self, variables):
method state_variables (line 161) | def state_variables(self):
method state_variables (line 165) | def state_variables(self, variables):
method initialise_variables (line 174) | def initialise_variables(self, *variable_tuple, var_type='in'):
method __repr__ (line 197) | def __repr__(self):
method check_types (line 215) | def check_types(self):
method get_mats (line 225) | def get_mats(self):
method freqresp (line 228) | def freqresp(self, wv):
method addGain (line 239) | def addGain(self, K, where):
method scale (line 279) | def scale(self, input_scal=1., output_scal=1., state_scal=1.):
method project (line 300) | def project(self, wt, v):
method truncate (line 330) | def truncate(self, N):
method max_eig (line 340) | def max_eig(self):
method eigvals (line 352) | def eigvals(self):
method disc2cont (line 363) | def disc2cont(self):
method retain_inout_channels (line 373) | def retain_inout_channels(self, retain_channels, where):
method summary (line 383) | def summary(self):
method transfer_function_evaluation (line 387) | def transfer_function_evaluation(self, s):
method save (line 403) | def save(self, path):
method load_from_h5 (line 419) | def load_from_h5(cls, h5_file_name):
method remove_inputs (line 452) | def remove_inputs(self, *input_remove_list):
method remove_outputs (line 487) | def remove_outputs(self, *output_remove_list):
method from_scipy (line 526) | def from_scipy(cls, scipy_ss):
class Gain (line 545) | class Gain:
method __init__ (line 547) | def __init__(self, value, input_vars=None, output_vars=None):
method input_variables (line 558) | def input_variables(self):
method input_variables (line 562) | def input_variables(self, variables):
method output_variables (line 572) | def output_variables(self):
method output_variables (line 576) | def output_variables(self, variables):
method inputs (line 586) | def inputs(self):
method outputs (line 594) | def outputs(self):
method dot (line 598) | def dot(self, elem):
method __repr__ (line 617) | def __repr__(self):
method transpose (line 630) | def transpose(self):
method T (line 649) | def T(self):
method copy (line 652) | def copy(self):
method save (line 658) | def save(self, path):
method add_as_group_to_h5 (line 667) | def add_as_group_to_h5(self, h5_file_handle, group_name):
method load_from_h5 (line 684) | def load_from_h5(cls, h5_file_name):
method load_from_dict (line 700) | def load_from_dict(cls, data_dict):
method save_multiple_gains (line 726) | def save_multiple_gains(cls, h5_file_name, *gains_names_tuple):
method load_multiple_gains (line 741) | def load_multiple_gains(cls, h5_file_name):
class ss_block (line 761) | class ss_block():
method __init__ (line 775) | def __init__(self, A, B, C, D, S_states, S_inputs, S_outputs, dt=None):
method check_sizes (line 809) | def check_sizes(self):
method remove_block (line 812) | def remove_block(self, where, index):
method addGain (line 834) | def addGain(self, K, where):
method get_sizes (line 867) | def get_sizes(self, M):
method project (line 895) | def project(self, WT, V, by_arrays=True, overwrite=False):
method solve_step (line 939) | def solve_step(self, xn, un):
method get_mats (line 948) | def get_mats(self):
function project (line 1008) | def project(ss_here, WT, V):
function couple (line 1030) | def couple(ss01, ss02, K12, K21, out_sparse=False):
function disc2cont (line 1130) | def disc2cont(sys):
function retain_inout_channels (line 1177) | def retain_inout_channels(sys, retain_channels, where):
function freqresp (line 1232) | def freqresp(SS, wv, dlti=True):
function series (line 1280) | def series(SS01, SS02):
function parallel (line 1352) | def parallel(SS01, SS02):
function SSconv (line 1396) | def SSconv(A, B0, B1, C, D, Bm1=None):
function addGain (line 1475) | def addGain(SShere, Kmat, where):
function join2 (line 1527) | def join2(SS1, SS2):
function join (line 1616) | def join(SS_list, wv=None):
function sum_ss (line 1656) | def sum_ss(SS1, SS2, negative=False):
function scale_SS (line 1713) | def scale_SS(SSin, input_scal=1., output_scal=1., state_scal=1., byref=T...
function simulate (line 1802) | def simulate(SShere, U, x0=None):
function Hnorm_from_freq_resp (line 1833) | def Hnorm_from_freq_resp(gv, method):
function adjust_phase (line 1858) | def adjust_phase(y, deg=True):
function SSderivative (line 1888) | def SSderivative(ds):
function SSintegr (line 1908) | def SSintegr(ds, method='trap'):
function build_SS_poly (line 1945) | def build_SS_poly(Acf, ds, negative=False):
function butter (line 1983) | def butter(order, Wn, N=1, btype='lowpass'):
function get_freq_from_eigs (line 2009) | def get_freq_from_eigs(eigs, dlti=True):
function eigvals (line 2025) | def eigvals(a, dlti=False):
function random_ss (line 2049) | def random_ss(Nx, Nu, Ny, dt=None, use_sparse=False, stable=True):
function compare_ss (line 2094) | def compare_ss(SS1, SS2, tol=1e-10, Print=False):
function ss_to_scipy (line 2123) | def ss_to_scipy(ss):
FILE: sharpy/linear/src/lin_aeroelastic.py
class LinAeroEla (line 16) | class LinAeroEla():
method __init__ (line 49) | def __init__(self, data, custom_settings_linear=None, uvlm_block=False...
method reshape_struct_input (line 155) | def reshape_struct_input(self):
method assemble_ss (line 206) | def assemble_ss(self, beam_num_modes=None, wake_prop_settings=None):
method get_gebm2uvlm_gains (line 259) | def get_gebm2uvlm_gains(self):
FILE: sharpy/linear/src/lin_utils.py
function comp_tot_force (line 14) | def comp_tot_force(forces, zeta, zeta_pole=np.zeros((3,))):
class Info (line 29) | class Info():
method __init__ (line 32) | def __init__(self, zeta, zeta_dot, u_ext, ftot, mtot, q, qdot,
function solve_linear (line 53) | def solve_linear(Ref, Pert, solve_beam=True):
function extract_from_data (line 112) | def extract_from_data(data, assemble=True,
FILE: sharpy/linear/src/lingebm.py
class FlexDynamic (line 20) | class FlexDynamic():
method __init__ (line 100) | def __init__(self, tsinfo, structure=None, custom_settings=dict()):
method reshape_struct_input (line 190) | def reshape_struct_input(self):
method num_modes (line 242) | def num_modes(self):
method num_modes (line 246) | def num_modes(self, value):
method num_flex_dof (line 251) | def num_flex_dof(self):
method num_rig_dof (line 255) | def num_rig_dof(self):
method sort_repeated_evecs (line 258) | def sort_repeated_evecs(self, evecs, evals):
method euler_propagation_equations (line 271) | def euler_propagation_equations(self, tsstr):
method num_dof (line 318) | def num_dof(self):
method num_dof (line 324) | def num_dof(self, value):
method linearise_gravity_forces (line 328) | def linearise_gravity_forces(self, tsstr=None):
method linearise_applied_forces (line 689) | def linearise_applied_forces(self, tsstr=None):
method assemble (line 872) | def assemble(self, Nmodes=None):
method freqresp (line 1110) | def freqresp(self, wv=None, bode=True):
method converge_modal (line 1129) | def converge_modal(self, wv=None, tol=None, Yref=None, Print=False):
method tune_newmark_damp (line 1171) | def tune_newmark_damp(self, amplification_factor=0.999):
method update_modal (line 1194) | def update_modal(self):
method update_truncated_modes (line 1246) | def update_truncated_modes(self, nmodes):
method scale_system_normalised_time (line 1273) | def scale_system_normalised_time(self, time_ref):
method update_matrices_time_scale (line 1313) | def update_matrices_time_scale(self, time_ref):
method cont2disc (line 1329) | def cont2disc(self, dt=None):
function newmark_ss (line 1349) | def newmark_ss(M, C, K, dt, num_damp=1e-4, M_is_SPD=False):
function sort_eigvals (line 1573) | def sort_eigvals(eigv, eigabsv, tol=1e-6):
FILE: sharpy/linear/src/linuvlm.py
class Static (line 79) | class Static():
method __init__ (line 82) | def __init__(self, tsdata, custom_settings=None, for_vel=np.zeros((6,))):
method assemble_profiling (line 135) | def assemble_profiling(self):
method assemble (line 147) | def assemble(self):
method solve (line 233) | def solve(self):
method reshape (line 272) | def reshape(self):
method total_forces (line 298) | def total_forces(self, zeta_pole=np.zeros((3,))):
method get_total_forces_gain (line 320) | def get_total_forces_gain(self, zeta_pole=np.zeros((3,))):
method get_sect_forces_gain (line 355) | def get_sect_forces_gain(self):
method get_rigid_motion_gains (line 397) | def get_rigid_motion_gains(self, zeta_rotation=np.zeros((3,))):
class Dynamic (line 510) | class Dynamic(Static):
method __init__ (line 571) | def __init__(self, tsdata, dt=None, dynamic_settings=None, integr_orde...
method Nu (line 656) | def Nu(self):
method Nu (line 666) | def Nu(self, value):
method Nx (line 670) | def Nx(self):
method Nx (line 677) | def Nx(self, value):
method Ny (line 681) | def Ny(self):
method Ny (line 688) | def Ny(self, value):
method nondimss (line 691) | def nondimss(self):
method dimss (line 720) | def dimss(self):
method assemble_ss (line 743) | def assemble_ss(self, wake_prop_settings=None):
method freqresp (line 985) | def freqresp(self, kv, wake_prop_settings=None):
method get_Cw_cpx (line 1074) | def get_Cw_cpx(self, zval, settings=None):
method balfreq (line 1093) | def balfreq(self, DictBalFreq, wake_prop_settings=None):
method balfreq_profiling (line 1411) | def balfreq_profiling(self, wake_prop_settings=None):
method assemble_ss_profiling (line 1435) | def assemble_ss_profiling(self):
method solve_steady (line 1447) | def solve_steady(self, usta, method='direct'):
method solve_step (line 1585) | def solve_step(self, x_n, u_n, u_n1=None, transform_state=False):
method unpack_state (line 1662) | def unpack_state(self, xvec):
class DynamicBlock (line 1695) | class DynamicBlock(Dynamic):
method __init__ (line 1750) | def __init__(self, tsdata, dt=None,
method nondimss (line 1778) | def nondimss(self):
method dimss (line 1814) | def dimss(self):
method assemble_ss (line 1851) | def assemble_ss(self, wake_prop_settings=None):
method freqresp (line 2083) | def freqresp(self, kv, wake_prop_settings=None):
method balfreq (line 2139) | def balfreq(self, DictBalFreq, wake_prop_settings=None):
method solve_step (line 2453) | def solve_step(self, x_n, u_n, u_n1=None, transform_state=False):
class Frequency (line 2569) | class Frequency(Static):
method __init__ (line 2640) | def __init__(self, tsdata, dt, integr_order=2,
method nondimss (line 2678) | def nondimss(self):
method dimss (line 2698) | def dimss(self):
method assemble (line 2715) | def assemble(self):
method addGain (line 2842) | def addGain(self, K, where):
method freqresp (line 2862) | def freqresp(self, kv, wake_prop_settings=None):
method get_Cw_cpx (line 2914) | def get_Cw_cpx(self, zval, settings=None):
method assemble_profiling (line 2932) | def assemble_profiling(self):
function get_Cw_cpx (line 2945) | def get_Cw_cpx(MS, K, K_star, zval, settings=None):
function get_Cw_cpx_coef_cfl_n1 (line 3046) | def get_Cw_cpx_coef_cfl_n1(cfl, zval):
class Test_linuvlm_Sta_vs_Dyn (line 3078) | class Test_linuvlm_Sta_vs_Dyn(unittest.TestCase):
method setUp (line 3081) | def setUp(self):
method test_force_gains (line 3104) | def test_force_gains(self):
method test_Dyn_steady_state (line 3112) | def test_Dyn_steady_state(self):
method test_nondimss_dimss (line 3220) | def test_nondimss_dimss(self):
method test_freqresp (line 3255) | def test_freqresp(self):
method test_solve_step (line 3310) | def test_solve_step(self):
FILE: sharpy/linear/src/multisurfaces.py
class MultiAeroGridSurfaces (line 13) | class MultiAeroGridSurfaces():
method __init__ (line 18) | def __init__(self, tsdata, vortex_radius, for_vel=np.zeros((6,))):
method get_ind_velocities_at_target_collocation_points (line 91) | def get_ind_velocities_at_target_collocation_points(self, target):
method get_ind_velocities_at_collocation_points (line 109) | def get_ind_velocities_at_collocation_points(self):
method get_normal_ind_velocities_at_collocation_points (line 125) | def get_normal_ind_velocities_at_collocation_points(self):
method get_input_velocities_at_collocation_points (line 162) | def get_input_velocities_at_collocation_points(self):
method get_ind_velocities_at_segments (line 170) | def get_ind_velocities_at_segments(self, overwrite=False):
method get_input_velocities_at_segments (line 199) | def get_input_velocities_at_segments(self, overwrite=False):
method get_joukovski_qs (line 208) | def get_joukovski_qs(self, overwrite=False):
method verify_non_penetration (line 229) | def verify_non_penetration(self, print_info=False):
method verify_aic_coll (line 260) | def verify_aic_coll(self, print_info=False):
method verify_joukovski_qs (line 309) | def verify_joukovski_qs(self, print_info=False):
FILE: sharpy/linear/src/surface.py
class AeroGridGeo (line 19) | class AeroGridGeo():
method __init__ (line 39) | def __init__(self,
method get_panel_vertices_coords (line 56) | def get_panel_vertices_coords(self, m, n):
method generate_normals (line 80) | def generate_normals(self):
method generate_areas (line 92) | def generate_areas(self):
method get_panel_wcv (line 104) | def get_panel_wcv(self):
method get_panel_collocation (line 125) | def get_panel_collocation(self, zetav_here):
method generate_collocations (line 145) | def generate_collocations(self):
method get_panel_wsv (line 159) | def get_panel_wsv(self):
method get_panel_midsegments (line 162) | def get_panel_midsegments(self, zetav_here):
method generate_midsegments (line 165) | def generate_midsegments():
method generate_Wsv (line 168) | def generate_Wsv():
method interp_vertex_to_coll (line 173) | def interp_vertex_to_coll(self, q_vert):
method project_coll_to_normal (line 211) | def project_coll_to_normal(self, q_coll):
method plot (line 231) | def plot(self, plot_normals=False):
class AeroGridSurface (line 257) | class AeroGridSurface(AeroGridGeo):
method __init__ (line 288) | def __init__(self, Map, zeta, gamma,
method get_input_velocities_at_collocation_points (line 329) | def get_input_velocities_at_collocation_points(self):
method get_normal_input_velocities_at_collocation_points (line 357) | def get_normal_input_velocities_at_collocation_points(self):
method get_input_velocities_at_segments (line 368) | def get_input_velocities_at_segments(self):
method get_induced_velocity (line 452) | def get_induced_velocity(self, zeta_target):
method get_aic3 (line 472) | def get_aic3(self, zeta_target):
method get_induced_velocity_over_surface (line 494) | def get_induced_velocity_over_surface(self, Surf_target,
method get_aic_over_surface (line 604) | def get_aic_over_surface(self, Surf_target,
method get_joukovski_qs (line 725) | def get_joukovski_qs(self, gammaw_TE=None, recompute_velocities=True):
method get_joukovski_unsteady (line 798) | def get_joukovski_unsteady(self):
FILE: sharpy/linear/src/uvlmutils.py
function joukovski_qs_segment (line 17) | def joukovski_qs_segment(zetaA, zetaB, v_mid, gamma=1.0, fact=0.5):
function biot_segment (line 31) | def biot_segment(zetaP, zetaA, zetaB, vortex_radius, gamma=1.0):
function biot_panel (line 55) | def biot_panel(zetaC, ZetaPanel, vortex_radius, gamma=1.0):
function biot_panel_fast (line 70) | def biot_panel_fast(zetaC, ZetaPanel, vortex_radius, gamma=1.0):
function panel_normal (line 97) | def panel_normal(ZetaPanel):
function panel_area (line 113) | def panel_area(ZetaPanel):
function run_biot_panel_cpp (line 169) | def run_biot_panel_cpp():
function run_biot_panel_fast (line 174) | def run_biot_panel_fast():
function run_biot_panel_ref (line 179) | def run_biot_panel_ref():
FILE: sharpy/linear/utils/derivatives.py
class Derivatives (line 7) | class Derivatives:
method __init__ (line 11) | def __init__(self, reference_dimensions, static_state, target_system=N...
method initialise_derivatives (line 44) | def initialise_derivatives(self, state_space, steady_forces, quat, v0,...
method save (line 105) | def save(self, output_route):
method savetxt (line 112) | def savetxt(self, folder):
method new_derivative (line 169) | def new_derivative(self, frame_of_reference, derivative_calculation=No...
class DerivativeSet (line 190) | class DerivativeSet:
method __init__ (line 213) | def __init__(self, frame_of_reference, derivative_calculation=None, na...
method print (line 237) | def print(self, derivative_filename=None):
method save (line 252) | def save(self, derivative_name, output_name):
method angle_derivatives (line 256) | def angle_derivatives(self):
method angle_derivatives_tb (line 316) | def angle_derivatives_tb(self):
method body_derivatives (line 349) | def body_derivatives(self):
method control_surface_derivatives (line 363) | def control_surface_derivatives(self):
method apply_coefficients (line 387) | def apply_coefficients(self):
FILE: sharpy/linear/utils/ss_interface.py
function linear_system (line 15) | def linear_system(arg):
class BaseElement (line 27) | class BaseElement(metaclass=ABCMeta):
method sys_id (line 30) | def sys_id(self):
method initialise (line 34) | def initialise(self, data, custom_settings=None):
method assemble (line 38) | def assemble(self):
function sys_list_from_path (line 46) | def sys_list_from_path(cwd):
function sys_from_string (line 72) | def sys_from_string(string):
function initialise_system (line 76) | def initialise_system(sys_id):
function dictionary_of_systems (line 83) | def dictionary_of_systems():
class VectorVariable (line 92) | class VectorVariable:
method __init__ (line 94) | def __init__(self, name, size, index, var_system=None):
method cols_loc (line 107) | def cols_loc(self):
method index (line 111) | def index(self):
method index (line 115) | def index(self, value):
method first_position (line 119) | def first_position(self):
method first_position (line 123) | def first_position(self, position):
method end_position (line 127) | def end_position(self):
method rows_loc (line 131) | def rows_loc(self):
method __repr__ (line 134) | def __repr__(self):
method copy (line 143) | def copy(self):
method save (line 146) | def save(self):
class OutputVariable (line 154) | class OutputVariable(VectorVariable):
method cols_loc (line 157) | def cols_loc(self):
method cols_loc (line 161) | def cols_loc(self, value=None):
method rows_loc (line 166) | def rows_loc(self):
class InputVariable (line 171) | class InputVariable(VectorVariable):
method rows_loc (line 174) | def rows_loc(self):
method rows_loc (line 178) | def rows_loc(self, value=None):
method cols_loc (line 183) | def cols_loc(self):
class StateVariable (line 187) | class StateVariable(VectorVariable):
class LinearVector (line 191) | class LinearVector:
method __init__ (line 193) | def __init__(self, list_of_vector_variables):
method num_variables (line 206) | def num_variables(self):
method size (line 210) | def size(self):
method remove (line 213) | def remove(self, *variable_name_list):
method __remove_variable (line 224) | def __remove_variable(self, index):
method modify (line 228) | def modify(self, variable_name, **kwargs):
method add (line 248) | def add(self, vector_variable, **kwargs):
method append (line 260) | def append(self, vector_variable, **kwargs):
method __add_vector_variable (line 274) | def __add_vector_variable(self, vector_variable):
method update_indices (line 283) | def update_indices(self):
method update_locations (line 300) | def update_locations(self):
method check_sametype_vars_full_vector (line 308) | def check_sametype_vars_full_vector(self):
method merge (line 316) | def merge(cls, vec1, vec2):
method transform (line 340) | def transform(cls, linear_vector, to_type):
method check_connection (line 353) | def check_connection(output_vector, input_vector):
method check_same_vectors (line 383) | def check_same_vectors(vec1, vec2):
method differentiate (line 401) | def differentiate(self):
method get_variable_from_name (line 405) | def get_variable_from_name(self, name):
method __call__ (line 414) | def __call__(self, variable_name):
method copy (line 425) | def copy(self):
method add_to_h5_file (line 428) | def add_to_h5_file(self, file_handle):
method load_from_h5_file (line 456) | def load_from_h5_file(cls, variable_type, variables_data):
method __iter__ (line 486) | def __iter__(self):
method __getitem__ (line 489) | def __getitem__(self, item):
method __repr__ (line 492) | def __repr__(self):
class SetIterator (line 504) | class SetIterator:
method __init__ (line 506) | def __init__(self, linear_vector):
method __next__ (line 510) | def __next__(self):
FILE: sharpy/linear/utils/sselements.py
class Element (line 6) | class Element(object):
method __init__ (line 11) | def __init__(self):
method initialise (line 20) | def initialise(self, data, sys_id):
method assemble (line 33) | def assemble(self):
FILE: sharpy/postproc/aeroforcescalculator.py
class AeroForcesCalculator (line 13) | class AeroForcesCalculator(BaseSolver):
method __init__ (line 73) | def __init__(self):
method initialise (line 86) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 105) | def run(self, **kwargs):
method calculate_forces (line 126) | def calculate_forces(self, ts):
method calculate_forces_for_isurf_in_g_frame (line 204) | def calculate_forces_for_isurf_in_g_frame(self, force, unsteady_force=...
method map_forces_beam_dof (line 223) | def map_forces_beam_dof(self, aero_data, ts, force):
method calculate_coefficients (line 235) | def calculate_coefficients(self, fx, fy, fz, mx, my, mz):
method screen_output (line 240) | def screen_output(self, ts):
method file_output (line 255) | def file_output(self, filename):
FILE: sharpy/postproc/aerogridplot.py
class AerogridPlot (line 15) | class AerogridPlot(BaseSolver):
method __init__ (line 94) | def __init__(self):
method initialise (line 105) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 131) | def run(self, **kwargs):
method plot_body (line 154) | def plot_body(self):
method plot_wake (line 223) | def plot_wake(self):
method plot_nonlifting_surfaces (line 252) | def plot_nonlifting_surfaces(self):
FILE: sharpy/postproc/asymptoticstability.py
class AsymptoticStability (line 17) | class AsymptoticStability(BaseSolver):
method __init__ (line 95) | def __init__(self):
method initialise (line 108) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 140) | def run(self, **kwargs):
method compute_eigenvalues (line 169) | def compute_eigenvalues(self, ss, system_name_list=None, not_scaled=Tr...
method convert_to_continuoustime (line 242) | def convert_to_continuoustime(self, dt, discrete_time_eigenvalues, not...
method export_eigenvalues (line 278) | def export_eigenvalues(self, num_evals, eigenvalues, eigenvectors, fil...
method velocity_analysis (line 323) | def velocity_analysis(self):
method display_root_locus (line 393) | def display_root_locus(eigenvalues):
method plot_modes (line 422) | def plot_modes(self, eigenvectors):
method sort_eigenvalues (line 488) | def sort_eigenvalues(eigenvalues, eigenvectors, frequency_cutoff=0, nu...
FILE: sharpy/postproc/beamloads.py
class BeamLoads (line 10) | class BeamLoads(BaseSolver):
method __init__ (line 33) | def __init__(self):
method initialise (line 41) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 54) | def run(self, **kwargs):
method print_loads (line 63) | def print_loads(self, online):
method calculate_loads (line 102) | def calculate_loads(self, online):
method calculate_coords_a (line 112) | def calculate_coords_a(self, timestep_info):
function timestep_add_loads (line 119) | def timestep_add_loads(structure, timestep):
FILE: sharpy/postproc/beamplot.py
class BeamPlot (line 17) | class BeamPlot(BaseSolver):
method __init__ (line 59) | def __init__(self):
method initialise (line 69) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 90) | def run(self, **kwargs):
method write (line 100) | def write(self):
method plot (line 111) | def plot(self, online):
method write_beam (line 124) | def write_beam(self, it):
method write_for (line 343) | def write_for(self, it):
FILE: sharpy/postproc/cleanup.py
class Cleanup (line 6) | class Cleanup(BaseSolver):
method __init__ (line 32) | def __init__(self):
method initialise (line 37) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 48) | def run(self, **kwargs):
method clean (line 59) | def clean(self, series, n_steps):
FILE: sharpy/postproc/frequencyresponse.py
class FrequencyResponse (line 15) | class FrequencyResponse(solver_interface.BaseSolver):
method __init__ (line 102) | def __init__(self):
method initialise (line 114) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 160) | def run(self, **kwargs):
method save_freq_resp (line 220) | def save_freq_resp(self, wv, Yfreq, system_name=None, hinf=None):
method quick_plot (line 259) | def quick_plot(self, y_freq_fom=None, subfolder=None):
FILE: sharpy/postproc/liftdistribution.py
class LiftDistribution (line 13) | class LiftDistribution(BaseSolver):
method __init__ (line 41) | def __init__(self):
method initialise (line 47) | def initialise(self, data, custom_settings=None, restart=False, caller...
method run (line 56) | def run(self, **kwargs):
method lift_distribution (line 61) | def lift_distribution(self, struct_tstep, aero_tstep):
FILE: sharpy/postproc/pickledata.py
class PickleData (line 15) | class PickleData(BaseSolver):
method __init__ (line 39) | def __init__(self):
method initialise (line 47) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 63) | def run(self, **kwargs):
FILE: sharpy/postproc/plotflowfield.py
class PlotFlowField (line 12) | class PlotFlowField(BaseSolver):
method __init__ (line 68) | def __init__(self):
method initialise (line 74) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method output_velocity_field (line 102) | def output_velocity_field(self, ts):
method run (line 185) | def run(self, **kwargs):
FILE: sharpy/postproc/savedata.py
class SaveData (line 13) | class SaveData(BaseSolver):
method __init__ (line 105) | def __init__(self):
method initialise (line 119) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method remove_file_if_exist (line 205) | def remove_file_if_exist(self, filepath):
method run (line 209) | def run(self, **kwargs):
method save_timestep (line 321) | def save_timestep(data, settings, ts, hdfile):
FILE: sharpy/postproc/saveparametriccase.py
class SaveParametricCase (line 10) | class SaveParametricCase(BaseSolver):
method __init__ (line 77) | def __init__(self):
method initialise (line 83) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 98) | def run(self, **kwargs):
method save_aero_rom_bases (line 146) | def save_aero_rom_bases(self):
method save_structural_modal_matrix (line 156) | def save_structural_modal_matrix(self):
method save_state_space (line 162) | def save_state_space(self):
method save_structural_matrices (line 165) | def save_structural_matrices(self):
method save_aero_state_space (line 169) | def save_aero_state_space(self):
method base_name (line 173) | def base_name(self):
FILE: sharpy/postproc/stabilityderivatives.py
class StabilityDerivatives (line 10) | class StabilityDerivatives(solver_interface.BaseSolver):
method __init__ (line 46) | def __init__(self):
method initialise (line 60) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 107) | def run(self, **kwargs):
method get_freestream_velocity (line 168) | def get_freestream_velocity(self):
method get_state_space (line 200) | def get_state_space(self, target_system):
method steady_aero_forces (line 210) | def steady_aero_forces(self):
FILE: sharpy/postproc/stallcheck.py
class StallCheck (line 10) | class StallCheck(BaseSolver):
method __init__ (line 49) | def __init__(self):
method initialise (line 58) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 68) | def run(self, **kwargs):
method check_stall (line 81) | def check_stall(self):
FILE: sharpy/postproc/udpout.py
class UDPout (line 8) | class UDPout(BaseSolver):
method __init__ (line 42) | def __init__(self):
method initialise (line 54) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 72) | def run(self, **kwargs):
method shutdown (line 91) | def shutdown(self):
FILE: sharpy/postproc/writevariablestime.py
class WriteVariablesTime (line 8) | class WriteVariablesTime(BaseSolver):
method __init__ (line 114) | def __init__(self):
method initialise (line 124) | def initialise(self, data, custom_settings=None, caller=None, restart=...
method run (line 223) | def run(self, **kwargs):
method write (line 236) | def write(self, it):
method write_nparray_to_file (line 373) | def write_nparray_to_file(self, fid, ts, nparray, delimiter):
method write_value_to_file (line 386) | def write_value_to_file(self, fid, ts, value, delimiter):
FILE: sharpy/presharpy/presharpy.py
class PreSharpy (line 11) | class PreSharpy(object):
method __init__ (line 78) | def __init__(self, in_settings=None):
method initialise (line 114) | def initialise(self):
method update_settings (line 117) | def update_settings(self, new_settings):
method save_settings (line 134) | def save_settings(self):
method load_config_file (line 145) | def load_config_file(file_name):
FILE: sharpy/rom/balanced.py
function bal_rom (line 28) | def bal_rom(arg):
class BaseBalancedRom (line 38) | class BaseBalancedRom(metaclass=ABCMeta):
method initialise (line 42) | def initialise(self, in_settings=None):
method run (line 45) | def run(self, ss):
class Direct (line 50) | class Direct(BaseBalancedRom):
method __init__ (line 89) | def __init__(self):
method initialise (line 92) | def initialise(self, in_settings=None):
method run (line 99) | def run(self, ss):
class FrequencyLimited (line 149) | class FrequencyLimited(BaseBalancedRom):
method __init__ (line 224) | def __init__(self):
method initialise (line 227) | def initialise(self, in_settings=None):
method run (line 239) | def run(self, ss):
class Iterative (line 247) | class Iterative(BaseBalancedRom):
method __init__ (line 274) | def __init__(self):
method initialise (line 277) | def initialise(self, in_settings=None):
method run (line 284) | def run(self, ss):
class Balanced (line 302) | class Balanced(rom_interface.BaseRom):
method __init__ (line 339) | def __init__(self):
method initialise (line 346) | def initialise(self, in_settings=None):
method run (line 360) | def run(self, ss):
FILE: sharpy/rom/krylov.py
class Krylov (line 17) | class Krylov(rom_interface.BaseRom):
method __init__ (line 100) | def __init__(self):
method initialise (line 118) | def initialise(self, in_settings=None):
method save (line 145) | def save(self, filename):
method save_reduced_order_bases (line 168) | def save_reduced_order_bases(self, file_name):
method run (line 192) | def run(self, ss):
method print_header (line 260) | def print_header(self):
method one_sided_arnoldi (line 272) | def one_sided_arnoldi(self, frequency, r):
method two_sided_arnoldi (line 329) | def two_sided_arnoldi(self, frequency, r):
method real_rational_arnoldi (line 386) | def real_rational_arnoldi(self, frequency, r):
method dual_rational_arnoldi (line 508) | def dual_rational_arnoldi(self, frequency, r):
method mimo_rational_arnoldi (line 644) | def mimo_rational_arnoldi(self, frequency, r):
method mimo_block_arnoldi (line 758) | def mimo_block_arnoldi(self, frequency, r):
method check_stability (line 790) | def check_stability(self, restart_arnoldi=False):
method load_tangent_vectors (line 872) | def load_tangent_vectors(self):
method stable_realisation (line 889) | def stable_realisation(self, *args, **kwargs):
method restart (line 958) | def restart(self):
function reduction_checks (line 1033) | def reduction_checks(T, Tinv):
function check_eye (line 1040) | def check_eye(T, Tinv, msg=''):
function check_rank (line 1051) | def check_rank(V, W):
FILE: sharpy/rom/utils/krylovutils.py
function block_arnoldi_krylov (line 9) | def block_arnoldi_krylov(r, F, G, approx_type='Pade', side='controllabil...
function mgs_ortho (line 42) | def mgs_ortho(X):
function construct_krylov (line 75) | def construct_krylov(r, lu_A, B, approx_type='Pade', side='b'):
function lu_factor (line 194) | def lu_factor(sigma, A):
function lu_solve (line 216) | def lu_solve(lu_A, b, trans=0):
function construct_mimo_krylov (line 249) | def construct_mimo_krylov(r, lu_A_input, B, approx_type='Pade', side='co...
function build_krylov_space (line 348) | def build_krylov_space(frequency, r, side, a, b):
function evec (line 372) | def evec(j):
function schur_ordered (line 393) | def schur_ordered(A, ct=False):
function remove_a12 (line 440) | def remove_a12(As, n_stable):
function check_eye (line 486) | def check_eye(T, Tinv, msg='', eps=-6):
FILE: sharpy/rom/utils/librom.py
function balreal_direct_py (line 14) | def balreal_direct_py(A, B, C, DLTI=True, Schur=False, full_outputs=False):
function balreal_iter (line 177) | def balreal_iter(A, B, C, lowrank=True, tolSmith=1e-10, tolSVD=1e-6, kmi...
function balreal_iter_old (line 337) | def balreal_iter_old(A, B, C, lowrank=True, tolSmith=1e-10, tolSVD=1e-6,...
function smith_iter (line 488) | def smith_iter(S, T, tol=1e-8, Square=True):
function res_discrete_lyap (line 563) | def res_discrete_lyap(A, Q, Z, Factorised=True):
function low_rank_smith (line 586) | def low_rank_smith(A, Q, tol=1e-10, Square=True, tolSVD=1e-12, tolAbs=Fa...
function get_trapz_weights (line 700) | def get_trapz_weights(k0, kend, Nk, knyq=False):
function get_gauss_weights (line 726) | def get_gauss_weights(k0, kend, Npart, order):
function balfreq (line 763) | def balfreq(SS, DictBalFreq):
function modred (line 1002) | def modred(SSb, N, method='residualisation'):
function tune_rom (line 1046) | def tune_rom(SSb, kv, tol, gv, method='realisation', convergence='all', ...
function eigen_dec (line 1128) | def eigen_dec(A, B, C, dlti=True, N=None, eigs=None, UR=None, URinv=None,
function check_stability (line 1288) | def check_stability(A, dt=True):
FILE: sharpy/rom/utils/librom_interp.py
function transfer_function (line 41) | def transfer_function(SS_list, wv):
function FLB_transfer_function (line 72) | def FLB_transfer_function(SS_list, wv, U_list, VT_list, hsv_list=None, M...
class InterpROM (line 206) | class InterpROM:
method __init__ (line 290) | def __init__(self, SS, VV=None, WWT=None,
method __call__ (line 326) | def __call__(self, wv):
method project (line 347) | def project(self):
class Test_librom_inter (line 498) | class Test_librom_inter(unittest.TestCase):
method setUp (line 501) | def setUp(self):
FILE: sharpy/sharpy_main.py
function main (line 11) | def main(args=None, sharpy_input_dict=None):
function sharpy_run (line 173) | def sharpy_run():
FILE: sharpy/solvers/_basestructural.py
class _BaseStructural (line 5) | class _BaseStructural(BaseSolver):
method initialise (line 70) | def initialise(self, data, restart=False):
method run (line 73) | def run(self, **kwargs):
FILE: sharpy/solvers/aerogridloader.py
class AerogridLoader (line 13) | class AerogridLoader(GridLoader):
method __init__ (line 100) | def __init__(self):
method initialise (line 106) | def initialise(self, data, restart=False):
method run (line 116) | def run(self, **kwargs):
FILE: sharpy/solvers/beamloader.py
class BeamLoader (line 11) | class BeamLoader(BaseSolver):
method __init__ (line 65) | def __init__(self):
method initialise (line 78) | def initialise(self, data, restart=False):
method read_files (line 88) | def read_files(self):
method validate_fem_file (line 127) | def validate_fem_file(self):
method validate_dyn_file (line 130) | def validate_dyn_file(self):
method run (line 133) | def run(self, **kwargs):
FILE: sharpy/solvers/dynamiccoupled.py
class DynamicCoupled (line 24) | class DynamicCoupled(BaseSolver):
method __init__ (line 188) | def __init__(self):
method get_g (line 226) | def get_g(self):
method set_g (line 232) | def set_g(self, new_g):
method get_rho (line 238) | def get_rho(self):
method set_rho (line 244) | def set_rho(self, new_rho):
method initialise (line 250) | def initialise(self, data, custom_settings=None, restart=False):
method cleanup_timestep_info (line 370) | def cleanup_timestep_info(self):
method remove_old_timestep_info (line 379) | def remove_old_timestep_info(self, tstep_info):
method process_controller_output (line 386) | def process_controller_output(self, controlled_state):
method run (line 448) | def run(self, **kwargs):
method network_loop (line 487) | def network_loop(self, in_queue, out_queue, finish_event):
method time_loop (line 517) | def time_loop(self, in_queue=None, out_queue=None, finish_event=None, ...
method convergence (line 739) | def convergence(self, k, tstep, previous_tstep,
method map_forces (line 812) | def map_forces(self, aero_kstep, structural_kstep, nl_body_kstep = Non...
method relaxation_factor (line 875) | def relaxation_factor(self, k):
method interpolate_timesteps (line 888) | def interpolate_timesteps(step0, step1, out_step, coeff):
method teardown (line 924) | def teardown(self):
function relax (line 939) | def relax(beam, timestep, previous_timestep, coeff):
function normalise_quaternion (line 950) | def normalise_quaternion(tstep):
FILE: sharpy/solvers/dynamicuvlm.py
class DynamicUVLM (line 12) | class DynamicUVLM(BaseSolver):
method __init__ (line 77) | def __init__(self):
method initialise (line 89) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 118) | def run(self, **kwargs):
FILE: sharpy/solvers/gridloader.py
class GridLoader (line 10) | class GridLoader(BaseSolver):
method __init__ (line 38) | def __init__(self):
method initialise (line 44) | def initialise(self, data, restart=False):
method read_input_files (line 54) | def read_input_files(self):
FILE: sharpy/solvers/initialaeroelasticloader.py
class InitialAeroelasticLoader (line 8) | class InitialAeroelasticLoader(BaseSolver):
method __init__ (line 35) | def __init__(self):
method initialise (line 40) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 54) | def run(self, **kwargs):
FILE: sharpy/solvers/lindynamicsim.py
class LinDynamicSim (line 16) | class LinDynamicSim(BaseSolver):
method __init__ (line 79) | def __init__(self):
method initialise (line 91) | def initialise(self, data, custom_settings=None, restart=False):
method input_vector (line 117) | def input_vector(self, ss):
method run (line 152) | def run(self, **kwargs):
method read_files (line 248) | def read_files(self):
function state_to_timestep (line 262) | def state_to_timestep(data, x, u=None, y=None):
FILE: sharpy/solvers/linearassembler.py
class LinearAssembler (line 15) | class LinearAssembler(BaseSolver):
method __init__ (line 112) | def __init__(self):
method initialise (line 117) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 151) | def run(self, **kwargs):
FILE: sharpy/solvers/modal.py
class Modal (line 16) | class Modal(BaseSolver):
method __init__ (line 101) | def __init__(self):
method initialise (line 112) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 154) | def run(self, **kwargs):
method scale_modes_unit_mass_matrix (line 459) | def scale_modes_unit_mass_matrix(self, eigenvectors, FullMglobal, eige...
method free_free_modes (line 473) | def free_free_modes(self, phi, M):
FILE: sharpy/solvers/noaero.py
class NoAero (line 6) | class NoAero(BaseSolver):
method __init__ (line 34) | def __init__(self):
method initialise (line 38) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 52) | def run(self, **kwargs):
method add_step (line 66) | def add_step(self):
method update_grid (line 69) | def update_grid(self, beam):
method update_custom_grid (line 77) | def update_custom_grid(self, structure_tstep, aero_tstep, nl_body_tste...
method update_step (line 86) | def update_step(self):
method next_step (line 95) | def next_step(self):
FILE: sharpy/solvers/nonliftingbodygridloader.py
class NonliftingbodygridLoader (line 8) | class NonliftingbodygridLoader(GridLoader):
method __init__ (line 31) | def __init__(self):
method run (line 38) | def run(self, **kwargs):
FILE: sharpy/solvers/nonlineardynamic.py
class NonLinearDynamic (line 15) | class NonLinearDynamic(_BaseStructural):
method __init__ (line 41) | def __init__(self):
method initialise (line 45) | def initialise(self, data, restart=False):
method run (line 61) | def run(self, **kwargs):
FILE: sharpy/solvers/nonlineardynamiccoupledstep.py
class NonLinearDynamicCoupledStep (line 16) | class NonLinearDynamicCoupledStep(_BaseStructural):
method __init__ (line 53) | def __init__(self):
method initialise (line 57) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 77) | def run(self, **kwargs):
method add_step (line 93) | def add_step(self):
method next_step (line 96) | def next_step(self):
method extract_resultants (line 99) | def extract_resultants(self, tstep=None):
FILE: sharpy/solvers/nonlineardynamicmultibody.py
class NonLinearDynamicMultibody (line 21) | class NonLinearDynamicMultibody(_BaseStructural):
method __init__ (line 68) | def __init__(self):
method initialise (line 89) | def initialise(self, data, custom_settings=None, restart=False):
method add_step (line 143) | def add_step(self):
method next_step (line 146) | def next_step(self):
method define_sys_size (line 149) | def define_sys_size(self):
method define_rigid_dofs (line 163) | def define_rigid_dofs(self, MB_beam):
method assembly_MB_eq_system (line 177) | def assembly_MB_eq_system(self, MB_beam, MB_tstep, ts, dt, Lambda, Lam...
method integrate_position (line 262) | def integrate_position(self, MB_beam, MB_tstep, dt):
method extract_resultants (line 285) | def extract_resultants(self, tstep):
method compute_forces_constraints (line 289) | def compute_forces_constraints(self, MB_beam, MB_tstep, ts, dt, Lambda...
method write_lm_cond_num (line 330) | def write_lm_cond_num(self, iteration, Lambda, Lambda_dot, Lambda_ddot...
method run (line 352) | def run(self, **kwargs):
FILE: sharpy/solvers/nonlineardynamicmultibodyjax.py
class NonLinearDynamicMultibodyJAX (line 15) | class NonLinearDynamicMultibodyJAX(_BaseStructural):
method __init__ (line 83) | def __init__(self):
method initialise (line 108) | def initialise(self, data, custom_settings=None, restart=False):
method assembly_mb_eq_system (line 177) | def assembly_mb_eq_system(self, mb_beam, mb_tstep, ts, dt, lambda_h, l...
method call_lm_generate (line 247) | def call_lm_generate(self, *args):
method integrate_position (line 250) | def integrate_position(self, mb_beam, mb_tstep, dt):
method extract_resultants (line 271) | def extract_resultants(self, tstep):
method run (line 279) | def run(self, **kwargs):
method add_step (line 364) | def add_step(self):
method next_step (line 367) | def next_step(self):
FILE: sharpy/solvers/nonlineardynamicprescribedstep.py
class NonLinearDynamicPrescribedStep (line 13) | class NonLinearDynamicPrescribedStep(_BaseStructural):
method __init__ (line 35) | def __init__(self):
method initialise (line 39) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 50) | def run(self, **kwargs):
method add_step (line 71) | def add_step(self):
method next_step (line 74) | def next_step(self):
method extract_resultants (line 77) | def extract_resultants(self, tstep=None):
method update (line 85) | def update(self, tstep=None):
method create_q_vector (line 88) | def create_q_vector(self, tstep=None):
FILE: sharpy/solvers/nonlinearstatic.py
class NonLinearStatic (line 10) | class NonLinearStatic(_BaseStructural):
method __init__ (line 38) | def __init__(self):
method initialise (line 42) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 50) | def run(self, **kwargs):
method next_step (line 57) | def next_step(self):
method extract_resultants (line 60) | def extract_resultants(self, tstep=None):
method update (line 67) | def update(self, tstep=None):
method create_q_vector (line 70) | def create_q_vector(self, tstep=None):
FILE: sharpy/solvers/nostructural.py
class NoStructural (line 9) | class NoStructural(_BaseStructural):
method __init__ (line 34) | def __init__(self):
method initialise (line 38) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 46) | def run(self, **kwargs):
method next_step (line 51) | def next_step(self):
method extract_resultants (line 54) | def extract_resultants(self, tstep=None):
method update (line 61) | def update(self, tstep=None):
method create_q_vector (line 64) | def create_q_vector(self, tstep=None):
FILE: sharpy/solvers/prescribeduvlm.py
class PrescribedUvlm (line 9) | class PrescribedUvlm(BaseSolver):
method __init__ (line 72) | def __init__(self):
method initialise (line 84) | def initialise(self, data, restart=False):
method cleanup_timestep_info (line 113) | def cleanup_timestep_info(self):
method increase_ts (line 123) | def increase_ts(self):
method run (line 127) | def run(self, **kwargs):
FILE: sharpy/solvers/rigiddynamiccoupledstep.py
class RigidDynamicCoupledStep (line 9) | class RigidDynamicCoupledStep(_BaseStructural):
method __init__ (line 37) | def __init__(self):
method initialise (line 41) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 55) | def run(self, **kwargs):
method add_step (line 72) | def add_step(self):
method next_step (line 75) | def next_step(self):
method extract_resultants (line 78) | def extract_resultants(self, tstep=None):
FILE: sharpy/solvers/rigiddynamicprescribedstep.py
class RigidDynamicPrescribedStep (line 15) | class RigidDynamicPrescribedStep(BaseSolver):
method __init__ (line 34) | def __init__(self):
method initialise (line 38) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 50) | def run(self, **kwargs):
method add_step (line 71) | def add_step(self):
method next_step (line 74) | def next_step(self):
method extract_resultants (line 77) | def extract_resultants(self, tstep=None):
method update (line 85) | def update(self, tstep=None):
method create_q_vector (line 88) | def create_q_vector(self, tstep=None):
FILE: sharpy/solvers/staticcoupled.py
class StaticCoupled (line 13) | class StaticCoupled(BaseSolver):
method __init__ (line 85) | def __init__(self):
method initialise (line 102) | def initialise(self, data, input_dict=None, restart=False):
method increase_ts (line 149) | def increase_ts(self):
method cleanup_timestep_info (line 154) | def cleanup_timestep_info(self):
method remove_old_timestep_info (line 163) | def remove_old_timestep_info(self, tstep_info):
method run (line 170) | def run(self, **kwargs):
method convergence (line 274) | def convergence(self, i_iter, i_step):
method change_trim (line 329) | def change_trim(self, alpha, thrust, thrust_nodes, tail_deflection, ta...
method extract_resultants (line 373) | def extract_resultants(self, tstep=None):
method teardown (line 377) | def teardown(self):
FILE: sharpy/solvers/statictrim.py
class StaticTrim (line 11) | class StaticTrim(BaseSolver):
method __init__ (line 96) | def __init__(self):
method initialise (line 117) | def initialise(self, data, restart=False):
method increase_ts (line 133) | def increase_ts(self):
method run (line 138) | def run(self, **kwargs):
method convergence (line 158) | def convergence(self, fz, m, fx):
method trim_algorithm (line 172) | def trim_algorithm(self):
method evaluate (line 318) | def evaluate(self, alpha, deflection_gamma, thrust):
FILE: sharpy/solvers/staticuvlm.py
class StaticUvlm (line 11) | class StaticUvlm(BaseSolver):
method __init__ (line 133) | def __init__(self):
method initialise (line 139) | def initialise(self, data, custom_settings=None, restart=False):
method add_step (line 155) | def add_step(self):
method update_grid (line 161) | def update_grid(self, beam):
method update_custom_grid (line 174) | def update_custom_grid(self, structure_tstep, aero_tstep, nonlifting_t...
method run (line 186) | def run(self, **kwargs):
method next_step (line 238) | def next_step(self):
method update_step (line 246) | def update_step(self):
FILE: sharpy/solvers/steplinearuvlm.py
class StepLinearUVLM (line 16) | class StepLinearUVLM(BaseSolver):
method __init__ (line 141) | def __init__(self):
method initialise (line 147) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 260) | def run(self, **kwargs):
method add_step (line 379) | def add_step(self):
method update_grid (line 382) | def update_grid(self, beam):
method update_custom_grid (line 385) | def update_custom_grid(self, structure_tstep, aero_tstep):
method unpack_ss_vectors (line 389) | def unpack_ss_vectors(self, y_n, x_n, u_n, aero_tstep):
method pack_input_vector (line 499) | def pack_input_vector(self):
method pack_state_vector (line 563) | def pack_state_vector(aero_tstep, aero_tstep_m1, dt, integr_order):
FILE: sharpy/solvers/stepuvlm.py
class StepUvlm (line 14) | class StepUvlm(BaseSolver):
method __init__ (line 161) | def __init__(self):
method initialise (line 166) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 209) | def run(self, **kwargs):
method add_step (line 298) | def add_step(self):
method update_grid (line 303) | def update_grid(self, beam):
method update_custom_grid (line 314) | def update_custom_grid(self, structure_tstep, aero_tstep, nl_body_tste...
method filter_gamma_dot (line 330) | def filter_gamma_dot(tstep, history, filter_param):
FILE: sharpy/solvers/timeintegrators.py
class _BaseTimeIntegrator (line 9) | class _BaseTimeIntegrator():
method __init__ (line 22) | def __init__(self):
method initialise (line 26) | def initialise(self, data, custom_settings=None, restart=False):
method predictor (line 30) | def predictor(self, q, dqdt, dqddt):
method build_matrix (line 34) | def build_matrix(self, M, C, K):
method corrector (line 38) | def corrector(self, q, dqdt, dqddt, Dq):
class NewmarkBeta (line 43) | class NewmarkBeta(_BaseTimeIntegrator):
method __init__ (line 72) | def __init__(self):
method initialise (line 80) | def initialise(self, data, custom_settings=None, restart=False):
method predictor (line 98) | def predictor(self, q, dqdt, dqddt):
method build_matrix (line 108) | def build_matrix(self, M, C, K, Q, kBnh, LM_Q):
method corrector (line 126) | def corrector(self, q, dqdt, dqddt, Dq):
class GeneralisedAlpha (line 138) | class GeneralisedAlpha(_BaseTimeIntegrator):
method __init__ (line 171) | def __init__(self):
method initialise (line 183) | def initialise(self, data, custom_settings=None, restart=False):
method predictor (line 207) | def predictor(self, q, dqdt, dqddt):
method build_matrix (line 216) | def build_matrix(self, M, C, K, Q, kBnh, LM_Q):
method corrector (line 237) | def corrector(self, q, dqdt, dqddt, Dq):
FILE: sharpy/solvers/timeintegratorsjax.py
class _BaseTimeIntegrator (line 12) | class _BaseTimeIntegrator:
method __init__ (line 25) | def __init__(self):
method initialise (line 29) | def initialise(self, data, custom_settings=None, restart=False):
method predictor (line 33) | def predictor(self, q: arr, dqdt: arr, dqddt: arr):
method build_matrix (line 37) | def build_matrix(self, m: arr, c: arr, k: arr):
method corrector (line 41) | def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr):
class NewmarkBetaJAX (line 46) | class NewmarkBetaJAX(_BaseTimeIntegrator):
method __init__ (line 75) | def __init__(self):
method initialise (line 84) | def initialise(self, data, custom_settings=None, restart=False) -> None:
method predictor (line 102) | def predictor(self, q, dqdt, dqddt):
method build_matrix (line 108) | def build_matrix(self, m: arr, c: arr, k: arr) -> arr:
method corrector (line 116) | def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr) -> None:
class GeneralisedAlphaJAX (line 124) | class GeneralisedAlphaJAX(_BaseTimeIntegrator):
method __init__ (line 157) | def __init__(self):
method initialise (line 169) | def initialise(self, data, custom_settings=None, restart=False) -> None:
method predictor (line 190) | def predictor(self, q: arr, dqdt: arr, dqddt: arr):
method build_matrix (line 196) | def build_matrix(self, m: arr, c: arr, k: arr) -> arr:
method corrector (line 205) | def corrector(self, q: arr, dqdt: arr, dqddt: arr, dq: arr) -> None:
FILE: sharpy/solvers/trim.py
class Trim (line 12) | class Trim(BaseSolver):
method __init__ (line 89) | def __init__(self):
method initialise (line 99) | def initialise(self, data, restart=False):
method increase_ts (line 203) | def increase_ts(self):
method cleanup_timestep_info (line 208) | def cleanup_timestep_info(self):
method run (line 221) | def run(self):
method trim_algorithm (line 225) | def trim_algorithm(self):
method optimise (line 240) | def optimise(self, func, tolerance, print_info, method, refine):
function solver_wrapper (line 266) | def solver_wrapper(x, x_info, solver_data, i_dim=-1):
FILE: sharpy/solvers/updatepickle.py
class UpdatePickle (line 7) | class UpdatePickle(BaseSolver):
method __init__ (line 20) | def __init__(self):
method initialise (line 24) | def initialise(self, data, custom_settings=None, restart=False):
method run (line 35) | def run(self, **kwargs):
FILE: sharpy/structure/basestructure.py
class BaseStructure (line 6) | class BaseStructure(metaclass=ABCMeta):
method generate (line 8) | def generate(self, in_data, settings):
FILE: sharpy/structure/models/beam.py
class Beam (line 12) | class Beam(BaseStructure):
method __init__ (line 13) | def __init__(self):
method generate (line 71) | def generate(self, in_data, settings):
method generate_psi (line 212) | def generate_psi(self):
method add_unsteady_information (line 218) | def add_unsteady_information(self, dyn_dict, num_steps):
method generate_dof_arrays (line 251) | def generate_dof_arrays(self):
method generate_mass_matrix (line 272) | def generate_mass_matrix(self, mass, position, inertia):
method lump_masses (line 283) | def lump_masses(self):
method add_lumped_mass_to_element (line 303) | def add_lumped_mass_to_element(self, i_lumped_node, inertia_tensor, re...
method generate_master_structure (line 319) | def generate_master_structure(self):
method add_timestep (line 339) | def add_timestep(self, timestep_info):
method next_step (line 346) | def next_step(self):
method generate_node_master_elem (line 349) | def generate_node_master_elem(self):
method generate_fortran (line 369) | def generate_fortran(self):
method integrate_position (line 415) | def integrate_position(self, ts, dt):
method nodal_premultiply_inv_T_transpose (line 425) | def nodal_premultiply_inv_T_transpose(self, nodal, tstep, filter=np.ar...
method get_body (line 441) | def get_body(self, ibody):
FILE: sharpy/structure/models/beamstructures.py
class Element (line 7) | class Element(object):
method __init__ (line 15) | def __init__(self,
method update (line 52) | def update(self, coordinates_def, psi_def=None):
method calculate_length (line 71) | def calculate_length(self):
method add_attributes (line 75) | def add_attributes(self, dictionary):
method generate_curve (line 79) | def generate_curve(self, n_elem_curve, defor=False):
method get_triad (line 93) | def get_triad(self):
method deformed_triad (line 132) | def deformed_triad(self, psi=None):
FILE: sharpy/structure/utils/lagrangeconstraints.py
function lagrangeconstraint (line 54) | def lagrangeconstraint(arg):
function print_available_lc (line 67) | def print_available_lc():
function lc_from_string (line 76) | def lc_from_string(string):
function lc_list_from_path (line 83) | def lc_list_from_path(cwd):
function initialise_lc (line 99) | def initialise_lc(lc_name, print_info=True):
class BaseLagrangeConstraint (line 110) | class BaseLagrangeConstraint(metaclass=ABCMeta):
method __init__ (line 123) | def __init__(self):
method get_n_eq (line 131) | def get_n_eq(self):
method initialise (line 139) | def initialise(self, MBdict_entry, ieq):
method staticmat (line 148) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 158) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 168) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 176) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
function define_node_dof (line 186) | def define_node_dof(MB_beam, node_body, num_node):
function define_FoR_dof (line 209) | def define_FoR_dof(MB_beam, FoR_body):
function equal_pos_node_FoR (line 235) | def equal_pos_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, inode_in_...
function equal_lin_vel_node_FoR (line 309) | def equal_lin_vel_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, node_...
function rel_rot_vel_node_FoR (line 786) | def rel_rot_vel_node_FoR(MB_tstep, MB_beam, FoR_body, node_body, node_nu...
function def_rot_axis_FoR_wrt_node_general (line 852) | def def_rot_axis_FoR_wrt_node_general(MB_tstep, MB_beam, FoR_body, node_...
function def_rot_axis_FoR_wrt_node_xyz (line 1259) | def def_rot_axis_FoR_wrt_node_xyz(MB_tstep, MB_beam, FoR_body, node_body...
function def_rot_vel_mod_FoR_wrt_node (line 1375) | def def_rot_vel_mod_FoR_wrt_node(MB_tstep, MB_beam, FoR_body, node_body,...
function def_rot_vect_FoR_wrt_node (line 1437) | def def_rot_vect_FoR_wrt_node(MB_tstep, MB_beam, FoR_body, node_body, no...
class hinge_node_FoR (line 1492) | class hinge_node_FoR(BaseLagrangeConstraint):
method __init__ (line 1509) | def __init__(self):
method get_n_eq (line 1513) | def get_n_eq(self):
method initialise (line 1516) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 1542) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1546) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1566) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1569) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class hinge_node_FoR_constant_vel (line 1577) | class hinge_node_FoR_constant_vel(BaseLagrangeConstraint):
method __init__ (line 1595) | def __init__(self):
method get_n_eq (line 1599) | def get_n_eq(self):
method initialise (line 1602) | def initialise(self, MBdict_entry, ieq, print_info=True):
method set_rot_vel (line 1632) | def set_rot_vel(self, rot_vel):
method staticmat (line 1635) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1639) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1661) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1664) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class hinge_node_FoR_pitch (line 1676) | class hinge_node_FoR_pitch(BaseLagrangeConstraint):
method __init__ (line 1694) | def __init__(self):
method get_n_eq (line 1698) | def get_n_eq(self):
method initialise (line 1701) | def initialise(self, MBdict_entry, ieq, print_info=True):
method set_rotor_vel (line 1717) | def set_rotor_vel(self, rotor_vel):
method set_pitch_vel (line 1720) | def set_pitch_vel(self, pitch_vel):
method staticmat (line 1723) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1727) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1754) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1757) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class spherical_node_FoR (line 1769) | class spherical_node_FoR(BaseLagrangeConstraint):
method __init__ (line 1784) | def __init__(self):
method get_n_eq (line 1788) | def get_n_eq(self):
method initialise (line 1791) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 1801) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1805) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1820) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1823) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class free (line 1831) | class free(BaseLagrangeConstraint):
method __init__ (line 1835) | def __init__(self):
method get_n_eq (line 1839) | def get_n_eq(self):
method initialise (line 1842) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 1846) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1850) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1854) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1857) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class spherical_FoR (line 1862) | class spherical_FoR(BaseLagrangeConstraint):
method __init__ (line 1875) | def __init__(self):
method get_n_eq (line 1879) | def get_n_eq(self):
method initialise (line 1882) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 1890) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1894) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 1916) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 1919) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class hinge_FoR (line 1924) | class hinge_FoR(BaseLagrangeConstraint):
method __init__ (line 1938) | def __init__(self):
method get_n_eq (line 1942) | def get_n_eq(self):
method initialise (line 1945) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 1967) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 1971) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2023) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2026) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class hinge_FoR_wrtG (line 2031) | class hinge_FoR_wrtG(BaseLagrangeConstraint):
method __init__ (line 2045) | def __init__(self):
method get_n_eq (line 2049) | def get_n_eq(self):
method initialise (line 2052) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2062) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2066) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2111) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2114) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class fully_constrained_node_FoR (line 2119) | class fully_constrained_node_FoR(BaseLagrangeConstraint):
method __init__ (line 2135) | def __init__(self):
method get_n_eq (line 2139) | def get_n_eq(self):
method initialise (line 2142) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2153) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2157) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2175) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2178) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class constant_rot_vel_FoR (line 2189) | class constant_rot_vel_FoR(BaseLagrangeConstraint):
method __init__ (line 2202) | def __init__(self):
method get_n_eq (line 2206) | def get_n_eq(self):
method initialise (line 2209) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2218) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2222) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2243) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2246) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class constant_vel_FoR (line 2251) | class constant_vel_FoR(BaseLagrangeConstraint):
method __init__ (line 2265) | def __init__(self):
method get_n_eq (line 2269) | def get_n_eq(self):
method initialise (line 2272) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2281) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2285) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2306) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2309) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class zero_lin_vel_sine_rot_vel_FoR (line 2314) | class zero_lin_vel_sine_rot_vel_FoR(BaseLagrangeConstraint):
method __init__ (line 2330) | def __init__(self):
method get_n_eq (line 2334) | def get_n_eq(self):
method initialise (line 2337) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2356) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2360) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2384) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2387) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class lin_vel_node_wrtA (line 2392) | class lin_vel_node_wrtA(BaseLagrangeConstraint):
method __init__ (line 2408) | def __init__(self):
method get_n_eq (line 2412) | def get_n_eq(self):
method initialise (line 2415) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2426) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2449) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2476) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2479) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
class lin_vel_node_wrtG (line 2484) | class lin_vel_node_wrtG(BaseLagrangeConstraint):
method __init__ (line 2500) | def __init__(self):
method get_n_eq (line 2504) | def get_n_eq(self):
method initialise (line 2507) | def initialise(self, MBdict_entry, ieq, print_info=True):
method staticmat (line 2518) | def staticmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method dynamicmat (line 2545) | def dynamicmat(self, LM_C, LM_K, LM_Q, MB_beam, MB_tstep, ts, num_LM_eq,
method staticpost (line 2593) | def staticpost(self, lc_list, MB_beam, MB_tstep):
method dynamicpost (line 2596) | def dynamicpost(self, lc_list, MB_beam, MB_tstep):
function initialize_constraints (line 2603) | def initialize_constraints(MBdict):
function define_num_LM_eq (line 2621) | def define_num_LM_eq(lc_list):
function generate_lagrange_matrix (line 2648) | def generate_lagrange_matrix(lc_list, MB_beam, MB_tstep, ts, num_LM_eq, ...
function postprocess (line 2691) | def postprocess(lc_list, MB_beam, MB_tstep, dynamic_or_static):
function remove_constraint (line 2704) | def remove_constraint(MBdict, constraint):
FILE: sharpy/structure/utils/lagrangeconstraintsjax.py
class Rot (line 24) | class Rot(jax.scipy.spatial.transform.Rotation):
method from_quat (line 26) | def from_quat(cls, quat: jarr):
method as_quat (line 29) | def as_quat(self, canonical=True) -> jarr:
function constraint (line 34) | def constraint(constraint_):
function skew (line 44) | def skew(vec: jarr) -> jarr:
function crv2rot (line 53) | def crv2rot(crv: jarr) -> jarr:
function crv2tan (line 63) | def crv2tan(psi: jarr) -> jarr:
class Constraint (line 73) | class Constraint(ABC):
method __init__ (line 91) | def __init__(self, data, i_lm: int, constraint_settings: dict): # case...
method postprocess (line 175) | def postprocess(self, mb_beam, mb_tstep) -> None:
method get_n_lm (line 180) | def get_n_lm(cls) -> int:
method create_index (line 183) | def create_index(self) -> None:
method create_bh (line 220) | def create_bh(self) -> func_type:
method create_bn (line 229) | def create_bn(self) -> func_type:
method create_gn (line 239) | def create_gn(self) -> func_type:
method create_run (line 249) | def create_run(self):
function combine_constraints (line 282) | def combine_constraints(csts: list[Constraint]) -> Callable:
class BaseFunc (line 298) | class BaseFunc(ABC):
class CstFuncs (line 302) | class CstFuncs(ABC):
class EqualNodeFoR (line 303) | class EqualNodeFoR(BaseFunc):
method b_lin_vel (line 305) | def b_lin_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
method b_ang_vel (line 318) | def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
class ControlFoR (line 327) | class ControlFoR(BaseFunc):
method b_ang_vel (line 329) | def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
method g_ang_vel (line 334) | def g_ang_vel(constraint_: Constraint, i_lm: slice, g: jarr, q: jarr...
class ControlNodeFoR (line 338) | class ControlNodeFoR(EqualNodeFoR):
method g_ang_vel (line 340) | def g_ang_vel(constraint_: Constraint, i_lm: slice, g: jarr, q: jarr...
class ZeroFoR (line 344) | class ZeroFoR(BaseFunc):
method b_lin_vel (line 346) | def b_lin_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
method b_ang_vel (line 351) | def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
class HingeNodeFoR (line 355) | class HingeNodeFoR(BaseFunc):
method b_ang_vel (line 359) | def b_ang_vel(constraint_: Constraint, i_lm: slice, b: jarr, q: jarr...
class HingeFoR (line 382) | class HingeFoR(BaseFunc):
method b_ang_vel (line 386) | def b_ang_vel(cls, constraint_: Constraint, i_lm: slice, b: jarr, q:...
function move_for_to_node (line 400) | def move_for_to_node(constraint_: Constraint, mb_beam, mb_tstep) -> None:
class FullyConstrainedNodeFoR (line 415) | class FullyConstrainedNodeFoR(Constraint):
class FullyConstrainedFoR (line 425) | class FullyConstrainedFoR(Constraint):
class SphericalFoR (line 434) | class SphericalFoR(Constraint):
class Free (line 443) | class Free(Constraint):
class ControlledRotNodeFoR (line 448) | class ControlledRotNodeFoR(Constraint):
class ControlledRotFoR (line 458) | class ControlledRotFoR(Constraint):
class HingeFoR (line 467) | class HingeFoR(Constraint):
class SphericalNodeFor (line 476) | class SphericalNodeFor(Constraint):
class HingeNodeFoR (line 486) | class HingeNodeFoR(Constraint):
FILE: sharpy/structure/utils/modalutils.py
function frequency_damping (line 7) | def frequency_damping(eigenvalue):
class EigenvalueTable (line 22) | class EigenvalueTable(cout.TablePrinter):
method __init__ (line 23) | def __init__(self, filename=None):
method print_evals (line 29) | def print_evals(self, eigenvalues):
function cg (line 36) | def cg(M, use_euler=False):
function scale_mode (line 44) | def scale_mode(data, eigenvector, rot_max_deg=15.0, perc_max=0.15):
function get_mode_zeta (line 105) | def get_mode_zeta(data, eigvect):
function write_zeta_vtk (line 183) | def write_zeta_vtk(zeta, zeta_ref, filename_root):
function write_modes_vtk (line 211) | def write_modes_vtk(data, eigenvectors, num_lambda, filename_root,
function free_modes_principal_axes (line 237) | def free_modes_principal_axes(phi, mass_matrix, use_euler=False, **kwargs):
function principal_axes_inertia (line 295) | def principal_axes_inertia(j_a, r_cg, m):
function mode_sign_convention (line 328) | def mode_sign_convention(bocos, eigenvectors, rigid_body_motion=False, u...
function order_rigid_body_modes (line 398) | def order_rigid_body_modes(eigenvectors, use_euler):
function order_eigenvectors (line 418) | def order_eigenvectors(eigenvectors, eigenvalues):
function scale_mass_normalised_modes (line 436) | def scale_mass_normalised_modes(eigenvectors, mass_matrix):
function assert_orthogonal_eigenvectors (line 460) | def assert_orthogonal_eigenvectors(u, v, decimal, raise_error=False):
function assert_modes_mass_normalised (line 484) | def assert_modes_mass_normalised(phi, m, tolerance, raise_error=False):
function modes_to_cg_ref (line 510) | def modes_to_cg_ref(phi, M, rigid_body_motion=False, use_euler=False):
FILE: sharpy/structure/utils/xbeamlib.py
class Xbopts (line 25) | class Xbopts(ct.Structure):
method __init__ (line 52) | def __init__(self):
function cbeam3_solv_nlnstatic (line 77) | def cbeam3_solv_nlnstatic(beam, settings, ts):
function cbeam3_loads (line 138) | def cbeam3_loads(beam, timestep):
function cbeam3_solv_nlndyn (line 174) | def cbeam3_solv_nlndyn(beam, settings):
function cbeam3_step_nlndyn (line 265) | def cbeam3_step_nlndyn(beam, settings, ts, tstep=None, dt=None):
function xbeam_solv_couplednlndyn (line 350) | def xbeam_solv_couplednlndyn(beam, settings):
function xbeam_step_couplednlndyn (line 472) | def xbeam_step_couplednlndyn(beam, settings, ts, tstep=None, dt=None):
function xbeam_init_couplednlndyn (line 551) | def xbeam_init_couplednlndyn(beam, settings, ts, dt=None):
function xbeam_solv_state2disp (line 622) | def xbeam_solv_state2disp(beam, tstep, cbeam3=False):
function xbeam_solv_state2accel (line 631) | def xbeam_solv_state2accel(beam, tstep, cbeam3=False):
function cbeam3_solv_state2disp (line 637) | def cbeam3_solv_state2disp(beam, tstep):
function cbeam3_solv_state2accel (line 664) | def cbeam3_solv_state2accel(beam, tstep):
function xbeam_solv_disp2state (line 697) | def xbeam_solv_disp2state(beam, tstep):
function xbeam_solv_accel2state (line 707) | def xbeam_solv_accel2state(beam, tstep):
function cbeam3_solv_disp2state (line 712) | def cbeam3_solv_disp2state(beam, tstep):
function cbeam3_solv_accel2state (line 735) | def cbeam3_solv_accel2state(beam, tstep):
function cbeam3_solv_modal (line 763) | def cbeam3_solv_modal(beam, settings, ts, FullMglobal, FullCglobal, Full...
function cbeam3_asbly_dynamic (line 857) | def cbeam3_asbly_dynamic(beam, tstep, settings):
function xbeam3_asbly_dynamic (line 961) | def xbeam3_asbly_dynamic(beam, tstep, settings):
function cbeam3_correct_gravity_forces (line 1066) | def cbeam3_correct_gravity_forces(beam, tstep, settings):
function cbeam3_asbly_static (line 1110) | def cbeam3_asbly_static(beam, tstep, settings, iLoadStep):
function xbeam_step_coupledrigid (line 1199) | def xbeam_step_coupledrigid(beam, settings, ts, tstep=None, dt=None):
FILE: sharpy/utils/algebra.py
function quat2rot (line 16) | def quat2rot(quat):
function crv2rot (line 21) | def crv2rot(psi):
function rot2crv (line 26) | def rot2crv(rot):
function triad2rot (line 31) | def triad2rot(xb, yb, zb):
function mat2quat (line 36) | def mat2quat(rot):
function tangent_vector (line 54) | def tangent_vector(in_coord, ordering=None):
function get_polyfit (line 123) | def get_polyfit(in_coord, ordering):
function unit_vector (line 146) | def unit_vector(vector):
function rotation_matrix_around_axis (line 164) | def rotation_matrix_around_axis(axis, angle):
function skew (line 172) | def skew(vector):
function quadskew (line 205) | def quadskew(vector):
function triad2rotation (line 233) | def triad2rotation(xb, yb, zb):
function rot_matrix_2d (line 246) | def rot_matrix_2d(angle):
function angle_between_vectors (line 250) | def angle_between_vectors(vec_a, vec_b):
function angle_between_vectors_sign (line 255) | def angle_between_vectors_sign(vec_a, vec_b, plane_normal=np.array([0, 0...
function angle_between_vector_and_plane (line 262) | def angle_between_vector_and_plane(vector, plane_normal):
function panel_area (line 268) | def panel_area(A, B, C, D):
function rotation2quat (line 293) | def rotation2quat(Cab):
function quat_bound (line 358) | def quat_bound(quat):
function matrix2skewvec (line 386) | def matrix2skewvec(matrix):
function quat2crv (line 393) | def quat2crv(quat):
function crv2quat (line 405) | def crv2quat(psi):
function crv_bounds (line 445) | def crv_bounds(crv_ini):
function triad2crv (line 479) | def triad2crv(xb, yb, zb):
function crv2triad (line 483) | def crv2triad(psi):
function crv2rotation (line 488) | def crv2rotation(psi):
function rotation2crv (line 531) | def rotation2crv(Cab):
function crv2tan (line 568) | def crv2tan(psi):
function crv2invtant (line 611) | def crv2invtant(psi):
function triad2crv_vec (line 616) | def triad2crv_vec(v1, v2, v3):
function crv2triad_vec (line 625) | def crv2triad_vec(crv_vec):
function quat2rotation (line 635) | def quat2rotation(q1):
function rot_skew (line 694) | def rot_skew(vec):
function rotation3d_x (line 700) | def rotation3d_x(angle):
function rotation3d_y (line 730) | def rotation3d_y(angle):
function rotation3d_z (line 760) | def rotation3d_z(angle):
function rotate_crv (line 788) | def rotate_crv(crv_in, axis, angle):
function euler2rot (line 796) | def euler2rot(euler):
function euler2quat (line 823) | def euler2quat(euler):
function quat2euler (line 837) | def quat2euler(quat):
function crv_dot2omega (line 887) | def crv_dot2omega(crv, crv_dot):
function crv_dot2Omega (line 891) | def crv_dot2Omega(crv, crv_dot):
function quaternion_product (line 895) | def quaternion_product(q, r):
function omegadt2quat (line 904) | def omegadt2quat(omegadt):
function rotate_quaternion (line 913) | def rotate_quaternion(quat, omegadt):
function get_triad (line 917) | def get_triad(coordinates_def, frame_of_reference_delta, twist=None, n_n...
function der_Cquat_by_v (line 953) | def der_Cquat_by_v(q, v):
function der_CquatT_by_v (line 978) | def der_CquatT_by_v(q, v):
function der_Tan_by_xv (line 1035) | def der_Tan_by_xv(fv0, xv):
function der_TanT_by_xv (line 1151) | def der_TanT_by_xv(fv0, xv):
function der_Ccrv_by_v (line 1230) | def der_Ccrv_by_v(fv0, v):
function der_CcrvT_by_v (line 1251) | def der_CcrvT_by_v(fv0, v):
function der_quat_wrt_crv (line 1271) | def der_quat_wrt_crv(quat0):
function der_Ceuler_by_v (line 1305) | def der_Ceuler_by_v(euler, v):
function der_Peuler_by_v (line 1396) | def der_Peuler_by_v(euler, v):
function der_Ceuler_by_v_NED (line 1498) | def der_Ceuler_by_v_NED(euler, v):
function cross3 (line 1595) | def cross3(v, w):
function deuler_dt (line 1608) | def deuler_dt(euler):
function deuler_dt_NED (line 1647) | def deuler_dt_NED(euler):
function der_Teuler_by_w (line 1694) | def der_Teuler_by_w(euler, w):
function der_Teuler_by_w_NED (line 1760) | def der_Teuler_by_w_NED(euler, w):
function norm3d (line 1831) | def norm3d(v):
function normsq3d (line 1847) | def normsq3d(v):
function get_transformation_matrix (line 1860) | def get_transformation_matrix(transformation):
function der_skewp_skewp_v (line 1928) | def der_skewp_skewp_v(p, v):
function der_skewpT_v (line 1951) | def der_skewpT_v(p, v):
function der_skewp_v (line 1960) | def der_skewp_v(p, v):
FILE: sharpy/utils/analytical.py
function theo_fun (line 25) | def theo_fun(k):
function qs_derivs (line 48) | def qs_derivs(x_ea_perc, x_fh_perc):
function nc_derivs (line 79) | def nc_derivs(x_ea_perc, x_fh_perc):
function theo_CL_freq_resp (line 112) | def theo_CL_freq_resp(k, x_ea_perc, x_fh_perc):
function theo_CM_freq_resp (line 165) | def theo_CM_freq_resp(k, x_ea_perc, x_fh_perc):
function theo_lift (line 205) | def theo_lift(w, A, H, c, rhoinf, uinf, x12):
function garrick_drag_plunge (line 241) | def garrick_drag_plunge(w, H, c, rhoinf, uinf, time):
function garrick_drag_pitch (line 272) | def garrick_drag_pitch(w, A, c, rhoinf, uinf, x12, time):
function sears_fun (line 317) | def sears_fun(kg):
function sears_lift_sin_gust (line 328) | def sears_lift_sin_gust(w0, L, Uinf, chord, tv):
function sears_CL_freq_resp (line 357) | def sears_CL_freq_resp(k):
function wagner_imp_start (line 377) | def wagner_imp_start(aeff, Uinf, chord, tv):
function flat_plate_analytical (line 389) | def flat_plate_analytical(kv, x_ea_perc, x_fh_perc, input_seq, output_seq,
FILE: sharpy/utils/control_utils.py
function second_order_fd (line 5) | def second_order_fd(history, n_calls, dt):
class PID (line 26) | class PID(object):
method __init__ (line 46) | def __init__(self, gain_p, gain_i, gain_d, dt):
method set_point (line 66) | def set_point(self, point):
method set_anti_windup_lim (line 69) | def set_anti_windup_lim(self, lim):
method reset_integrator (line 72) | def reset_integrator(self):
method __call__ (line 75) | def __call__(self, state):
FILE: sharpy/utils/controller_interface.py
function controller (line 10) | def controller(arg):
function print_available_controllers (line 21) | def print_available_controllers():
class BaseController (line 27) | class BaseController(metaclass=ABCMeta):
method teardown (line 29) | def teardown(self):
function controller_from_string (line 33) | def controller_from_string(string):
function controller_list_from_path (line 37) | def controller_list_from_path(cwd):
function initialise_controller (line 53) | def initialise_controller(controller_name, print_info=True):
function dictionary_of_controllers (line 60) | def dictionary_of_controllers(print_info=True):
FILE: sharpy/utils/cout_utils.py
class Writer (line 11) | class Writer(object):
method __init__ (line 36) | def __init__(self):
method initialise (line 43) | def initialise(self, print_screen, print_file, file_route=None, file_n...
method print_welcome_message (line 62) | def print_welcome_message(self):
method cout_quiet (line 74) | def cout_quiet(self):
method cout_talk (line 77) | def cout_talk(self):
method print_separator (line 80) | def print_separator(self, level=0):
method __call__ (line 83) | def __call__(self, in_line, level=0):
method close (line 114) | def close(self):
method __del__ (line 119) | def __del__(self):
function start_writer (line 126) | def start_writer():
function finish_writer (line 132) | def finish_writer():
class TablePrinter (line 139) | class TablePrinter(object):
method __init__ (line 145) | def __init__(self, n_fields=3, field_length=12, field_types=[['g']]*10...
method print_header (line 168) | def print_header(self, field_names):
method print_line (line 203) | def print_line(self, line_data):
method close_file (line 222) | def close_file(self):
method print_divider_line (line 227) | def print_divider_line(self):
method character_return (line 233) | def character_return(self, n_lines=1):
function get_git_revision_hash (line 241) | def get_git_revision_hash(di=sharpydir.SharpyDir):
function get_git_revision_short_hash (line 245) | def get_git_revision_short_hash(di=sharpydir.SharpyDir):
function get_git_revision_branch (line 249) | def get_git_revision_branch(di=sharpydir.SharpyDir):
function get_git_tag (line 253) | def get_git_tag(di=sharpydir.SharpyDir):
function print_git_status (line 257) | def print_git_status():
function check_running_unittest (line 261) | def check_running_unittest():
FILE: sharpy/utils/ctypes_utils.py
function import_ctypes_lib (line 6) | def import_ctypes_lib(route, libname):
FILE: sharpy/utils/datastructures.py
class TimeStepInfo (line 14) | class TimeStepInfo(object):
method __init__ (line 59) | def __init__(self, dimensions):
method copy (line 121) | def copy(self):
method create_placeholder (line 127) | def create_placeholder(self, copied):
method generate_ctypes_pointers (line 162) | def generate_ctypes_pointers(self):
method remove_ctypes_pointers (line 233) | def remove_ctypes_pointers(self):
class NonliftingBodyTimeStepInfo (line 250) | class NonliftingBodyTimeStepInfo(TimeStepInfo):
method __init__ (line 301) | def __init__(self, dimensions): #remove dimensions_star as input
method copy (line 322) | def copy(self):
method create_placeholder (line 328) | def create_placeholder(self, copied):
method generate_ctypes_pointers (line 345) | def generate_ctypes_pointers(self):
class AeroTimeStepInfo (line 374) | class AeroTimeStepInfo(TimeStepInfo):
method __init__ (line 439) | def __init__(self, dimensions, dimensions_star):
method copy (line 497) | def copy(self):
method create_placeholder (line 500) | def create_placeholder(self, copied):
method generate_ctypes_pointers (line 533) | def generate_ctypes_pointers(self):
function init_matrix_structure (line 592) | def init_matrix_structure(dimensions, with_dim_dimension, added_size=0):
function standalone_ctypes_pointer (line 607) | def standalone_ctypes_pointer(matrix):
class StructTimeStepInfo (line 629) | class StructTimeStepInfo(object):
method __init__ (line 692) | def __init__(self, num_node, num_elem, num_node_elem=3, num_dof=None, ...
method copy (line 744) | def copy(self):
method glob_pos (line 802) | def glob_pos(self, include_rbm=True):
method cga (line 814) | def cga(self):
method cag (line 817) | def cag(self):
method euler_angles (line 820) | def euler_angles(self):
method get_body (line 830) | def get_body(self, beam, num_dof_ibody, ibody):
method compute_psi_local_AFoR (line 902) | def compute_psi_local_AFoR(self, for0_pos, for0_vel, quat0):
method change_to_local_AFoR (line 924) | def change_to_local_AFoR(self, for0_pos, for0_vel, quat0):
method change_to_global_AFoR (line 961) | def change_to_global_AFoR(self, for0_pos, for0_vel, quat0):
method nodal_b_for_2_a_for (line 1007) | def nodal_b_for_2_a_for(self, nodal, beam, filter=np.array([True]*6), ...
method nodal_type_b_for_2_a_for (line 1033) | def nodal_type_b_for_2_a_for(self, beam,
method extract_resultants (line 1049) | def extract_resultants(self, beam, force_type=['steady', 'unsteady', '...
class LinearTimeStepInfo (line 1070) | class LinearTimeStepInfo(object):
method __init__ (line 1075) | def __init__(self):
method copy (line 1081) | def copy(self):
class Linear (line 1089) | class Linear(object):
method __init__ (line 1103) | def __init__(self, tsaero0, tsstruct0):
FILE: sharpy/utils/docutils.py
function generate_documentation (line 19) | def generate_documentation():
function write_folder (line 52) | def write_folder(folder, ignore_list):
function write_file (line 79) | def write_file(file):
function check_folder_in_ignore (line 101) | def check_folder_in_ignore(folder, ignore_list):
function output_documentation_module_page (line 120) | def output_documentation_module_page(path_to_module, docs_folder_name):
function output_documentation (line 197) | def output_documentation(package_path, docs_folder_name):
function module_from_path (line 245) | def module_from_path(package_path, filename):
function create_index_files (line 266) | def create_index_files(docs_folder, folder_title=None, folder_body=None):
function get_module_title_and_body (line 300) | def get_module_title_and_body(module):
function get_sharpy_folders (line 325) | def get_sharpy_folders():
function open_folder (line 336) | def open_folder(folder_path):
function module_title (line 349) | def module_title(file):
FILE: sharpy/utils/exceptions.py
class DefaultValueBaseException (line 6) | class DefaultValueBaseException(Exception):
method __init__ (line 7) | def __init__(self, variable, value, message=''):
method output_message (line 10) | def output_message(self, message, color_id=3):
class NoDefaultValueException (line 19) | class NoDefaultValueException(DefaultValueBaseException):
method __init__ (line 20) | def __init__(self, variable, value=None, message=''):
class NotValidInputFile (line 25) | class NotValidInputFile(Exception):
method __init__ (line 26) | def __init__(self, message):
class NotImplementedSolver (line 30) | class NotImplementedSolver(Exception):
method __init__ (line 31) | def __init__(self, solver_name, message=''):
class NotConvergedStructuralSolver (line 42) | class NotConvergedStructuralSolver(Exception):
method __init__ (line 43) | def __init__(self, solver_name, n_iter=None, message=''):
class DocumentationError (line 48) | class DocumentationError(Exception):
class NotConvergedSolver (line 58) | class NotConvergedSolver(Exception):
class NotValidSetting (line 67) | class NotValidSetting(DefaultValueBaseException):
method __init__ (line 72) | def __init__(self, setting, variable, options, value=None, message=''):
class NotValidSettingType (line 78) | class NotValidSettingType(DefaultValueBaseException):
method __init__ (line 83) | def __init__(self, setting, variable, data_types, value=None, message=...
class SolverNotFound (line 89) | class SolverNotFound(Exception):
method __init__ (line 90) | def __init__(self, solver_name):
class NotRecognisedSetting (line 96) | class NotRecognisedSetting(DefaultValueBaseException):
method __init__ (line 101) | def __init__(self, setting, value=None, message=''):
FILE: sharpy/utils/frequencyutils.py
function frequency_error (line 13) | def frequency_error(Y_fom, Y_rom, wv):
function error_between_signals (line 34) | def error_between_signals(sig1, sig2, wv, sig_title=''):
function freqresp_relative_error (line 53) | def freqresp_relative_error(y1, y2, wv=None, **kwargs):
function find_limits (line 104) | def find_limits(wv, **kwargs):
function frobenius_norm (line 138) | def frobenius_norm(a):
function l2norm (line 165) | def l2norm(y_freq, wv, **kwargs):
function hamiltonian (line 207) | def hamiltonian(gamma, ss):
function h_infinity_norm (line 240) | def h_infinity_norm(ss, **kwargs):
function max_eigs (line 360) | def max_eigs(eigs):
function find_target_system (line 389) | def find_target_system(data, target_system):
FILE: sharpy/utils/generate_cases.py
function get_airfoil_camber (line 46) | def get_airfoil_camber(x, y, n_points_camber):
function from_node_list_to_elem_matrix (line 102) | def from_node_list_to_elem_matrix(node_list, connectivities):
function from_node_array_to_elem_matrix (line 131) | def from_node_array_to_elem_matrix(node_array, connectivities):
function read_column_sheet_type01 (line 149) | def read_column_sheet_type01(excel_file_name, excel_sheet, column_name):
function get_factor_geometric_progression (line 200) | def get_factor_geometric_progression(a0, Sn_target, n):
function get_ielem_inode (line 243) | def get_ielem_inode(connectivities, inode):
function get_aoacl0_from_camber (line 255) | def get_aoacl0_from_camber(x, y):
function get_mu0_from_camber (line 278) | def get_mu0_from_camber(x, y):
function list_methods (line 301) | def list_methods(class_instance, print_info=True, clean=True):
function set_variable_dict (line 320) | def set_variable_dict(dictionary, variable, set_value):
function define_or_concatenate (line 330) | def define_or_concatenate(variable, value, axis=0):
class StructuralInformation (line 346) | class StructuralInformation():
method __init__ (line 353) | def __init__(self):
method copy (line 384) | def copy(self):
method set_to_zero (line 421) | def set_to_zero(self, num_node_elem, num_node, num_elem,
method generate_full_structure (line 472) | def generate_full_structure(self,
method generate_1to1_from_vectors (line 546) | def generate_1to1_from_vectors(self,
method create_frame_of_reference_delta (line 583) | def create_frame_of_reference_delta(self, y_BFoR='y_AFoR'):
method create_mass_db_from_vector (line 614) | def create_mass_db_from_vector(self,
method create_stiff_db_from_vector (line 651) | def create_stiff_db_from_vector(self,
method create_simple_connectivities (line 688) | def create_simple_connectivities(self):
method rotate_around_origin (line 701) | def rotate_around_origin(self, axis, angle):
method compute_basic_num_elem (line 720) | def compute_basic_num_elem(self):
method compute_basic_num_node (line 731) | def compute_basic_num_node(self):
method generate_uniform_sym_beam (line 739) | def generate_uniform_sym_beam(self,
method generate_uniform_beam (line 785) | def generate_uniform_beam(self,
method add_lumped_mass (line 859) | def add_lumped_mass(self, node, mass=None, inertia=None, pos=None, mat...
method assembly_structures (line 891) | def assembly_structures(self, *args):
method check_StructuralInformation (line 954) | def check_StructuralInformation(self):
method generate_fem_file (line 991) | def generate_fem_file(self, route, case_name):
class AerodynamicInformation (line 1035) | class AerodynamicInformation():
method __init__ (line 1045) | def __init__(self):
method copy (line 1072) | def copy(self):
method set_to_zero (line 1100) | def set_to_zero(self, num_node_elem, num_node, num_elem,
method generate_full_aerodynamics (line 1131) | def generate_full_aerodynamics(self,
method create_aerodynamics_from_vec (line 1174) | def create_aerodynamics_from_vec(self,
method create_one_uniform_aerodynamics (line 1228) | def create_one_uniform_aerodynamics(self,
method change_airfoils_discretezation (line 1280) | def change_airfoils_discretezation(self, airfoils, new_num_nodes):
method assembly_aerodynamics (line 1303) | def assembly_aerodynamics(self, *args):
method interpolate_airfoils_camber (line 1359) | def interpolate_airfoils_camber(self, pure_airfoils_camber, r_pure_air...
method interpolate_airfoils_camber_thickness (line 1397) | def interpolate_airfoils_camber_thickness(self, pure_airfoils_camber, ...
method check_AerodynamicInformation (line 1434) | def check_AerodynamicInformation(self, StructuralInformation):
method generate_aero_file (line 1469) | def generate_aero_file(self, route, case_name, StructuralInformation):
class AeroelasticInformation (line 1520) | class AeroelasticInformation():
method __init__ (line 1527) | def __init__(self):
method generate (line 1536) | def generate(self, StructuralInformation, AerodynamicInformation):
method assembly (line 1549) | def assembly(self, *args):
method remove_duplicated_points (line 1570) | def remove_duplicated_points(self, tol, skip=[]):
method copy (line 1697) | def copy(self):
method check (line 1713) | def check(self):
method generate_h5_files (line 1721) | def generate_h5_files(self, route, case_name):
class SimulationInformation (line 1735) | class SimulationInformation():
method __init__ (line 1742) | def __init__(self):
method set_default_values (line 1758) | def set_default_values(self):
method check (line 1780) | def check(self):
method define_num_steps (line 1791) | def define_num_steps(self, num_steps):
method define_uinf (line 1808) | def define_uinf(self, unit_vector, norm):
method set_variable_all_dicts (line 1833) | def set_variable_all_dicts(self, variable, set_value):
method generate_solver_file (line 1845) | def generate_solver_file(self):
method generate_dyn_file (line 1869) | def generate_dyn_file(self, num_steps):
function clean_test_files (line 1899) | def clean_test_files(route, case_name):
class BodyInformation (line 1938) | class BodyInformation():
method __init__ (line 1940) | def __init__(self):
method copy (line 1949) | def copy(self):
method check (line 1959) | def check(self):
class LagrangeConstraint (line 1968) | class LagrangeConstraint():
method __init__ (line 1970) | def __init__(self):
method check (line 1976) | def check(self):
function generate_multibody_file (line 1997) | def generate_multibody_file(list_LagrangeConstraints, list_Bodies, route...
FILE: sharpy/utils/generator_interface.py
function generator (line 13) | def generator(arg):
function print_available_generators (line 24) | def print_available_generators():
class BaseGenerator (line 30) | class BaseGenerator(metaclass=ABCMeta):
function generator_from_string (line 33) | def generator_from_string(string):
function generator_list_from_path (line 37) | def generator_list_from_path(cwd):
function initialise_generator (line 53) | def initialise_generator(generator_name, print_info=True):
function dictionary_of_generators (line 60) | def dictionary_of_generators(print_info=True):
function output_documentation (line 70) | def output_documentation(route=None):
FILE: sharpy/utils/geo_utils.py
function generate_naca_camber (line 8) | def generate_naca_camber(M=0, P=0):
function interpolate_naca_camber (line 48) | def interpolate_naca_camber(eta, M00, P00, M01, P01):
FILE: sharpy/utils/h5utils.py
function check_file_exists (line 21) | def check_file_exists(file_name):
function load_h5_in_dict (line 38) | def load_h5_in_dict(handle, path='/'):
function load_attributes (line 52) | def load_attributes(handle, path):
function check_fem_dict (line 60) | def check_fem_dict(fem_dict):
function check_data_dict (line 71) | def check_data_dict(data_dict):
function readh5 (line 78) | def readh5(filename, GroupName=None):
function read_group (line 133) | def read_group(Grp):
class ReadInto (line 197) | class ReadInto:
method __init__ (line 198) | def __init__(self, name='ReadInto'):
function saveh5 (line 207) | def saveh5(savedir, h5filename, *class_inst, permission='a', ClassesToSa...
function add_as_grp (line 229) | def add_as_grp(obj, grpParent,
function add_array_to_grp (line 359) | def add_array_to_grp(data, name, grp, compress_float=False):
function save_list_as_array (line 372) | def save_list_as_array(list_obj, grp_target, compress_float=False):
FILE: sharpy/utils/input_arg.py
function read_settings (line 8) | def read_settings(args):
function parse_settings (line 16) | def parse_settings(file):
FILE: sharpy/utils/linearutils.py
function structural_vector_to_timestep (line 6) | def structural_vector_to_timestep(vector, tstruct, structure, phi=None, ...
FILE: sharpy/utils/model_utils.py
function mass_matrix_generator (line 8) | def mass_matrix_generator(m, xcg, inertia):
FILE: sharpy/utils/multibody.py
function split_multibody (line 16) | def split_multibody(beam, tstep, mb_data_dict, ts):
function merge_multibody (line 63) | def merge_multibody(MB_tstep, MB_beam, beam, tstep, mb_data_dict, dt):
function update_mb_dB_before_merge (line 138) | def update_mb_dB_before_merge(tstep, MB_tstep):
function disp_and_accel2state (line 159) | def disp_and_accel2state(MB_beam, MB_tstep, Lambda, Lambda_dot, sys_size...
function state2disp_and_accel (line 210) | def state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq):
function get_elems_nodes_list (line 261) | def get_elems_nodes_list(beam, ibody):
FILE: sharpy/utils/multibodyjax.py
function split_multibody (line 12) | def split_multibody(beam, tstep, mb_data_dict, ts):
function merge_multibody (line 58) | def merge_multibody(MB_tstep, MB_beam, beam, tstep, mb_data_dict, dt):
function update_mb_dB_before_merge (line 144) | def update_mb_dB_before_merge(tstep, MB_tstep):
function disp_and_accel2state (line 164) | def disp_and_accel2state(MB_beam, MB_tstep, Lambda, Lambda_dot, sys_size...
function state2disp_and_accel (line 239) | def state2disp_and_accel(q, dqdt, dqddt, MB_beam, MB_tstep, num_LM_eq):
function get_elems_nodes_list (line 305) | def get_elems_nodes_list(beam, ibody):
FILE: sharpy/utils/num_utils.py
function check_symmetric (line 6) | def check_symmetric(mat):
FILE: sharpy/utils/plotutils.py
function plot_frame_to_vtk (line 14) | def plot_frame_to_vtk(
function set_axes_equal (line 104) | def set_axes_equal(ax):
function plot_timestep (line 133) | def plot_timestep(data, tstep=-1, minus_mstar=0, plotly=False, custom_sc...
FILE: sharpy/utils/rom_interface.py
function rom (line 11) | def rom(arg):
function print_available_solvers (line 22) | def print_available_solvers():
class BaseRom (line 28) | class BaseRom(metaclass=ABCMeta):
method rom_id (line 32) | def rom_id(self):
method initialise (line 37) | def initialise(self):
method run (line 42) | def run(self, ss):
method compare_fom_rom (line 46) | def compare_fom_rom(y1, y2, wv=None, **kwargs):
method save (line 50) | def save(self, filename):
function rom_from_string (line 53) | def rom_from_string(string):
function initialise_rom (line 56) | def initialise_rom(rom_name):
function dictionary_of_solvers (line 63) | def dictionary_of_solvers():
FILE: sharpy/utils/settings.py
class DictConfigParser (line 12) | class DictConfigParser(configparser.ConfigParser):
method as_dict (line 13) | def as_dict(self):
function cast (line 21) | def cast(k, v, pytype, ctype, default):
function to_custom_types (line 36) | def to_custom_types(dictionary, types, default, options=dict(), no_ctype...
function get_data_type_for_several_options (line 62) | def get_data_type_for_several_options(dict_value, list_settings_types, s...
function get_default_value (line 81) | def get_default_value(default_value, k, v, data_type = None, py_type = N...
function get_custom_type (line 93) | def get_custom_type(dictionary, v, k, default, no_ctype):
function check_settings_in_options (line 224) | def check_settings_in_options(settings, settings_types, settings_options):
function load_config_file (line 260) | def load_config_file(file_name: str) -> dict:
function str2bool (line 278) | def str2bool(string):
function notify_default_value (line 293) | def notify_default_value(k, v):
class SettingsTable (line 298) | class SettingsTable:
method __init__ (line 327) | def __init__(self):
method generate (line 343) | def generate(self, settings_types, settings_default, settings_descript...
method process_options (line 399) | def process_options(self):
method set_field_length (line 407) | def set_field_length(self):
method print_divider_line (line 428) | def print_divider_line(self):
method print_setting (line 435) | def print_setting(self, setting):
method print_header (line 446) | def print_header(self):
method setting_line_format (line 450) | def setting_line_format(self):
function set_value_or_default (line 457) | def set_value_or_default(dictionary, key, default_val):
FILE: sharpy/utils/solver_interface.py
function solver (line 14) | def solver(arg):
function print_available_solvers (line 29) | def print_available_solvers():
class BaseSolver (line 35) | class BaseSolver(metaclass=ABCMeta):
method solver_id (line 44) | def solver_id(self):
method initialise (line 49) | def initialise(self, data, restart=False):
method run (line 54) | def run(self, **kwargs):
method __doc__ (line 58) | def __doc__(self):
method teardown (line 65) | def teardown(self):
function solver_from_string (line 69) | def solver_from_string(string):
function solver_list_from_path (line 77) | def solver_list_from_path(cwd):
function initialise_solver (line 93) | def initialise_solver(solver_name, print_info=True):
function dictionary_of_solvers (line 101) | def dictionary_of_solvers(print_info=True):
function output_documentation (line 115) | def output_documentation(route=None):
FILE: tests/coupled/dynamic/hale/generate_hale.py
function clean_test_files (line 199) | def clean_test_files():
function generate_fem (line 220) | def generate_fem():
function generate_aero_file (line 397) | def generate_aero_file():
function generate_naca_camber (line 570) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 587) | def generate_solver_file():
FILE: tests/coupled/dynamic/test_dynamic.py
class TestCoupledDynamic (line 6) | class TestCoupledDynamic(unittest.TestCase):
method test_hale_dynamic (line 15) | def test_hale_dynamic(self):
method tearDown (line 50) | def tearDown(self):
FILE: tests/coupled/multibody/double_pendulum/test_double_pendulum_geradin.py
class TestDoublePendulum (line 116) | class TestDoublePendulum(unittest.TestCase):
method setUp (line 123) | def setUp(self):
method run_and_assert (line 368) | def run_and_assert(self, name):
method test_doublependulum_hinge (line 381) | def test_doublependulum_hinge(self):
method test_doublependulum_spherical (line 384) | def test_doublependulum_spherical(self):
method test_doublependulum_ga (line 387) | def test_doublependulum_ga(self):
method tearDown (line 407) | def tearDown(self):
FILE: tests/coupled/multibody/double_prescribed_pendulum/test_double_prescribed_pendulum.py
class TestDoublePrescribedPendulum (line 12) | class TestDoublePrescribedPendulum(unittest.TestCase):
method run_and_assert (line 16) | def run_and_assert():
method test_double_prescribed_pendulum (line 355) | def test_double_prescribed_pendulum(self):
method tearDown (line 358) | def tearDown(self):
method teardown_method (line 364) | def teardown_method(self):
FILE: tests/coupled/multibody/double_slanted_pendulum/test_double_pendulum_slanted.py
class TestDoublePendulumSlanted (line 8) | class TestDoublePendulumSlanted(unittest.TestCase):
method _setUp (line 15) | def _setUp(self, lateral):
method run_and_assert (line 264) | def run_and_assert(self, name, lateral):
method test_doublependulum_hinge_slanted (line 286) | def test_doublependulum_hinge_slanted(self):
method test_doublependulum_hinge_slanted_pen (line 291) | def test_doublependulum_hinge_slanted_pen(self):
method test_doublependulum_hinge_slanted_lateralrot (line 296) | def test_doublependulum_hinge_slanted_lateralrot(self):
method tearDown (line 301) | def tearDown(self):
FILE: tests/coupled/multibody/fix_node_velocity_wrtA/test_fix_node_velocity_wrtA.py
class TestFixNodeVelocitywrtA (line 9) | class TestFixNodeVelocitywrtA(unittest.TestCase):
method setUp (line 11) | def setUp(self):
method test_testfixnodevelocitywrta (line 164) | def test_testfixnodevelocitywrta(self):
method tearDown (line 191) | def tearDown(self):
FILE: tests/coupled/multibody/fix_node_velocity_wrtG/test_fix_node_velocity_wrtG.py
class TestFixNodeVelocitywrtG (line 12) | class TestFixNodeVelocitywrtG(unittest.TestCase):
method setUp (line 16) | def setUp(self):
method test_testfixnodevelocitywrtg (line 167) | def test_testfixnodevelocitywrtg(self):
method tearDown (line 181) | def tearDown(self):
FILE: tests/coupled/multibody/floating_forces/test_floatingforces.py
class TestFloatingForces (line 9) | class TestFloatingForces(unittest.TestCase):
method test_compute_xf_zf (line 15) | def test_compute_xf_zf(self):
method test_generate_mooringlinefd (line 50) | def test_generate_mooringlinefd(self):
method test_change_system (line 88) | def test_change_system(self):
method test_time_wave_forces (line 105) | def test_time_wave_forces(self):
FILE: tests/coupled/multibody/floating_wind_turbine/test_floating_wind_turbine.py
class TestFloatingWindTrubine (line 20) | class TestFloatingWindTrubine(unittest.TestCase):
method generate_floating_wind_turbine (line 24) | def generate_floating_wind_turbine(self, restart=False):
method test_floating_wind_turbine (line 365) | def test_floating_wind_turbine(self):
method clean_files (line 377) | def clean_files(self, case):
FILE: tests/coupled/prescribed/WindTurbine/test_rotor.py
class TestRotor (line 11) | class TestRotor(unittest.TestCase):
method setUp (line 19) | def setUp(self):
method test_rotor (line 113) | def test_rotor(self):
method tearDown (line 132) | def tearDown(self):
FILE: tests/coupled/prescribed/gamma_dot_test/test_gamma_dot.py
function x_dot (line 9) | def x_dot(x, dt, integration_order=2):
class TestGammaDot (line 24) | class TestGammaDot(unittest.TestCase):
method set_up_test_case (line 26) | def set_up_test_case(self, aero_type, predictor, sparse, integration_o...
method run_test (line 120) | def run_test(self, aero_type, predictor, sparse, integration_order):
method setUp (line 162) | def setUp(self):
method test_gammadot (line 165) | def test_gammadot(self):
method tearDown (line 187) | def tearDown(self):
FILE: tests/coupled/prescribed/rotating_wing/generate_rotating_wing.py
function clean_test_files (line 53) | def clean_test_files():
function generate_dyn_file (line 75) | def generate_dyn_file():
function generate_fem_file (line 131) | def generate_fem_file():
function generate_aero_file (line 266) | def generate_aero_file():
function generate_naca_camber (line 350) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 367) | def generate_solver_file(horseshoe=False):
FILE: tests/coupled/prescribed/test_prescribed.py
class TestCoupledPrescribed (line 12) | class TestCoupledPrescribed(unittest.TestCase):
method setUpClass (line 17) | def setUpClass(cls):
method tearDownClass (line 26) | def tearDownClass(cls):
method test_rotating_wing (line 40) | def test_rotating_wing(self):
FILE: tests/coupled/static/pazy/generate_pazy.py
function generate_pazy (line 5) | def generate_pazy(u_inf, case_name, output_folder='/output/', cases_fold...
FILE: tests/coupled/static/smith_g_2deg/generate_smith_g_2deg.py
function clean_test_files (line 45) | def clean_test_files():
function generate_fem_file (line 63) | def generate_fem_file():
function generate_aero_file (line 186) | def generate_aero_file():
function generate_naca_camber (line 245) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 262) | def generate_solver_file(horseshoe=False):
FILE: tests/coupled/static/smith_g_4deg/generate_smith_g_4deg.py
function clean_test_files (line 44) | def clean_test_files():
function generate_fem_file (line 62) | def generate_fem_file():
function generate_aero_file (line 183) | def generate_aero_file():
function generate_naca_camber (line 242) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 259) | def generate_solver_file(horseshoe=False):
FILE: tests/coupled/static/smith_nog_2deg/generate_smith_nog_2deg.py
function clean_test_files (line 44) | def clean_test_files():
function generate_fem_file (line 62) | def generate_fem_file():
function generate_aero_file (line 182) | def generate_aero_file():
function generate_naca_camber (line 239) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 256) | def generate_solver_file(horseshoe=False):
FILE: tests/coupled/static/smith_nog_4deg/generate_smith_nog_4deg.py
function clean_test_files (line 44) | def clean_test_files():
function generate_fem_file (line 62) | def generate_fem_file():
function generate_aero_file (line 181) | def generate_aero_file():
function generate_naca_camber (line 238) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 255) | def generate_solver_file(horseshoe=False):
FILE: tests/coupled/static/test_pazy_static.py
class TestPazyCoupledStatic (line 7) | class TestPazyCoupledStatic(unittest.TestCase):
method test_static_aoa (line 17) | def test_static_aoa(self):
method tearDown (line 47) | def tearDown(self):
FILE: tests/coupled/static/test_static.py
class TestCoupledStatic (line 7) | class TestCoupledStatic(unittest.TestCase):
method setUpClass (line 12) | def setUpClass(cls):
method tearDownClass (line 24) | def tearDownClass(cls):
method test_smith2deg_nog (line 27) | def test_smith2deg_nog(self):
method test_smith2deg_g (line 61) | def test_smith2deg_g(self):
method test_smith4deg_g (line 74) | def test_smith4deg_g(self):
method test_smith4deg_nog (line 106) | def test_smith4deg_nog(self):
FILE: tests/docs/test_docs.py
class DocTest (line 8) | class DocTest(unittest.TestCase):
method test_html_documentation (line 19) | def test_html_documentation(self):
method test_text_documentation (line 31) | def test_text_documentation(self):
method tearDown (line 44) | def tearDown(self):
FILE: tests/io/Example_simple_hale/generate_hale_io.py
function clean_test_files (line 214) | def clean_test_files():
function generate_dyn_file (line 236) | def generate_dyn_file():
function generate_fem (line 293) | def generate_fem():
function generate_aero_file (line 470) | def generate_aero_file():
function generate_naca_camber (line 643) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 660) | def generate_solver_file():
FILE: tests/io/generate_pazy_udpout.py
function generate_pazy_udp (line 8) | def generate_pazy_udp(u_inf, case_name, output_folder='/output/', cases_...
FILE: tests/io/sample_udp_inout/generate_pazy_test_io_local.py
function generate_pazy (line 8) | def generate_pazy(u_inf, case_name, output_folder='/output/', cases_fold...
FILE: tests/io/test_pazy_udpout.py
class TestPazyCoupledStatic (line 6) | class TestPazyCoupledStatic(unittest.TestCase):
method test_dynamic_aoa (line 15) | def test_dynamic_aoa(self):
method tearDown (line 34) | def tearDown(self):
FILE: tests/linear/assembly/test_assembly.py
function max_error_tensor (line 27) | def max_error_tensor(Pder_an, Pder_num):
class Test_assembly (line 63) | class Test_assembly(unittest.TestCase):
method setUp (line 68) | def setUp(self):
method test_nc_dqcdzeta (line 91) | def test_nc_dqcdzeta(self):
method test_uc_dncdzeta (line 227) | def test_uc_dncdzeta(self, PlotFlag=False):
method test_nc_domegazetadzeta (line 305) | def test_nc_domegazetadzeta(self):
method test_dfqsdgamma_vrel0 (line 395) | def test_dfqsdgamma_vrel0(self):
method test_dfqsdzeta_vrel0 (line 476) | def test_dfqsdzeta_vrel0(self):
method test_dfqsdzeta_omega (line 525) | def test_dfqsdzeta_omega(self):
method test_dfqsduinput (line 591) | def test_dfqsduinput(self):
method test_dfqsdvind_gamma (line 645) | def test_dfqsdvind_gamma(self):
method test_dvinddzeta (line 760) | def test_dvinddzeta(self):
method test_dfqsdvind_zeta (line 880) | def test_dfqsdvind_zeta(self):
method test_dfunstdgamma_dot (line 986) | def test_dfunstdgamma_dot(self):
method test_wake_prop (line 1041) | def test_wake_prop(self):
method start_writer (line 1068) | def start_writer(self):
method tearDown (line 1077) | def tearDown(self):
FILE: tests/linear/control_surfaces/test_control_surfaces.py
class TestGolandControlSurface (line 10) | class TestGolandControlSurface(unittest.TestCase):
method setup (line 13) | def setup(self):
method test_control_surface (line 227) | def test_control_surface(self):
method tearDown (line 251) | def tearDown(self):
FILE: tests/linear/derivatives/test_ders.py
class Test_ders (line 17) | class Test_ders(unittest.TestCase):
method setUp (line 23) | def setUp(self):
method test_dbiot_segment (line 31) | def test_dbiot_segment(self):
method test_dbiot_segment_mid (line 76) | def test_dbiot_segment_mid(self):
method test_dbiot_panel (line 122) | def test_dbiot_panel(self):
method test_dbiot_panel_mid_segment (line 202) | def test_dbiot_panel_mid_segment(self):
FILE: tests/linear/derivatives/test_stabilityderivatives.py
class TestLinearDerivatives (line 12) | class TestLinearDerivatives(unittest.TestCase):
method run_sharpy (line 16) | def run_sharpy(self, alpha_deg, flow, target_system, not_run=False):
method test_derivatives (line 285) | def test_derivatives(self):
method run_case (line 293) | def run_case(self, target_system):
method tearDown (line 503) | def tearDown(self):
FILE: tests/linear/frequencyutils/test_frequency_utils.py
class TestFrequencyUtils (line 10) | class TestFrequencyUtils(unittest.TestCase):
method setUp (line 14) | def setUp(self):
method test_hinfinity_norm (line 28) | def test_hinfinity_norm(self):
FILE: tests/linear/goland_wing/test_goland_flutter.py
class TestGolandFlutter (line 8) | class TestGolandFlutter(unittest.TestCase):
method setup (line 10) | def setup(self):
method run_rom_stable (line 232) | def run_rom_stable(self):
method run_flutter (line 240) | def run_flutter(self):
method test_flutter (line 268) | def test_flutter(self):
method tearDown (line 273) | def tearDown(self):
FILE: tests/linear/gusts/test_external_gust.py
function generate_sharpy (line 10) | def generate_sharpy(alpha=0., case_name='hale_static', case_route='./', ...
function run_case (line 270) | def run_case(case_file, pickle_file=None):
class TestGustAssembly (line 283) | class TestGustAssembly(unittest.TestCase):
method setUpClass (line 298) | def setUpClass(cls):
method tearDownClass (line 307) | def tearDownClass(cls):
method linear_response (line 312) | def linear_response(self):
method nonlinear_response (line 324) | def nonlinear_response(self):
method test_gust (line 330) | def test_gust(self):
method wingtip_timeseries (line 347) | def wingtip_timeseries(self, data):
method gamma_timeseries (line 357) | def gamma_timeseries(self, data):
method run_sharpy_nonlinear (line 367) | def run_sharpy_nonlinear(self, **kwargs):
method run_sharpy_linear (line 407) | def run_sharpy_linear(self, **kwargs):
method assert_gust_propagation (line 458) | def assert_gust_propagation(self, path_to_input, output_route):
method tearDown (line 464) | def tearDown(self):
FILE: tests/linear/gusts/test_linear_gusts.py
class TestGolandControlSurface (line 10) | class TestGolandControlSurface(unittest.TestCase):
method setUp (line 12) | def setUp(self):
method run_sharpy (line 15) | def run_sharpy(self, flow, **kwargs):
method run_linear_sharpy (line 220) | def run_linear_sharpy(self, **kwargs):
method extract_u_inf (line 236) | def extract_u_inf(self, data):
method test_linear_gust (line 245) | def test_linear_gust(self):
method tearDown (line 270) | def tearDown(self):
class TestGusts (line 278) | class TestGusts(unittest.TestCase):
method test_campbell (line 280) | def test_campbell(self):
FILE: tests/linear/horten/test_horten.py
function run_rom_convergence (line 13) | def run_rom_convergence(case_name, case_route='./cases/', output_folder=...
class TestHortenWing (line 316) | class TestHortenWing(unittest.TestCase):
method test_horten (line 319) | def test_horten(self):
method tearDown (line 353) | def tearDown(self):
FILE: tests/linear/rom/test_balancing.py
class TestBalancing (line 10) | class TestBalancing(unittest.TestCase):
method test_balreal_direct_py (line 16) | def test_balreal_direct_py(self):
FILE: tests/linear/rom/test_krylov.py
class TestKrylov (line 18) | class TestKrylov(unittest.TestCase):
method setUp (line 22) | def setUp(self):
method run_test (line 41) | def run_test(self, test_settings):
method test_krylov (line 71) | def test_krylov(self):
method tearDown (line 87) | def tearDown(self):
FILE: tests/linear/rom/test_rom_framework.py
class TestROMFramework (line 8) | class TestROMFramework(unittest.TestCase):
method setUp (line 14) | def setUp(self):
method test_roms (line 210) | def test_roms(self):
method tearDown (line 241) | def tearDown(self):
FILE: tests/linear/rom/test_schur.py
class TestSchurDecomposition (line 12) | class TestSchurDecomposition(unittest.TestCase):
method setUp (line 18) | def setUp(self):
method test_dt (line 21) | def test_dt(self):
method test_ct (line 39) | def test_ct(self):
method tearDown (line 57) | def tearDown(self):
FILE: tests/linear/rom/test_springmasssystem.py
class TestKrylovRom (line 19) | class TestKrylovRom(unittest.TestCase):
method test_siso_ct (line 24) | def test_siso_ct(self):
method test_siso_dt (line 44) | def test_siso_dt(self):
method test_siso_dt_multipoint (line 64) | def test_siso_dt_multipoint(self):
method build_system (line 84) | def build_system(self, system_inputs, system_time):
method run_rom (line 151) | def run_rom(self, system, algorithm, r, interpolation_point):
method compare_freq_resp (line 163) | def compare_freq_resp(self, rom, wv, interpolation_frequency, show_plo...
method tearDown (line 183) | def tearDown(self):
FILE: tests/linear/statespace/test_statespace.py
class Test_dlti (line 12) | class Test_dlti(unittest.TestCase):
method setUp (line 15) | def setUp(self):
method test_SSconv (line 36) | def test_SSconv(self):
method test_scale_SS (line 58) | def test_scale_SS(self):
method test_addGain (line 77) | def test_addGain(self):
method test_freqresp (line 101) | def test_freqresp(self):
method test_couple (line 119) | def test_couple(self):
method test_join (line 149) | def test_join(self):
method test_disc2cont (line 167) | def test_disc2cont(self):
method test_remove_inputs (line 177) | def test_remove_inputs(self):
method test_series (line 217) | def test_series(self):
class TestStateSpaceManipulation (line 239) | class TestStateSpaceManipulation(unittest.TestCase):
method setUp (line 244) | def setUp(self):
method test_remove_outputs (line 263) | def test_remove_outputs(self):
method test_retain_channels (line 269) | def test_retain_channels(self):
method test_input_output (line 288) | def test_input_output(self):
method tearDownClass (line 312) | def tearDownClass(cls):
class TestGains (line 318) | class TestGains(unittest.TestCase):
method test_dot (line 323) | def test_dot(self):
method test_fail_connection (line 347) | def test_fail_connection(self):
method test_input_output_gains (line 376) | def test_input_output_gains(self):
method check_gains_equal (line 412) | def check_gains_equal(gain1, gain2):
method tearDownClass (line 420) | def tearDownClass(cls):
FILE: tests/linear/statespace/test_variable_tracker.py
class TestVariables (line 9) | class TestVariables(unittest.TestCase):
method setUp (line 14) | def setUp(self):
method test_initialisation (line 23) | def test_initialisation(self):
method test_remove (line 36) | def test_remove(self):
method test_modify (line 43) | def test_modify(self):
method test_add (line 53) | def test_add(self):
method test_append (line 84) | def test_append(self):
method test_merge (line 104) | def test_merge(self):
method test_copy (line 115) | def test_copy(self):
method test_transform (line 121) | def test_transform(self):
method test_save_to_h5 (line 141) | def test_save_to_h5(self):
method tearDown (line 161) | def tearDown(self):
FILE: tests/linear/uvlm/test_infinite_span.py
class Test_infinite_span (line 24) | class Test_infinite_span(unittest.TestCase):
method setUp_from_params (line 31) | def setUp_from_params(self, Nsurf, integr_ord, RemovePred, UseSparse, ...
method test_wagner (line 136) | def test_wagner(self):
method run_wagner (line 166) | def run_wagner(self, Nsurf, integr_ord, RemovePred, UseSparse, RollNod...
method start_writer (line 436) | def start_writer(self):
method tearDown (line 444) | def tearDown(self):
FILE: tests/sourcepanelmethod/test_source_panel_method.py
class TestSourcePanelMethod (line 9) | class TestSourcePanelMethod(unittest.TestCase):
method test_ellipsoid (line 13) | def test_ellipsoid(self):
method load_pressure_distribution (line 81) | def load_pressure_distribution(self, output_folder, n_collocation_poin...
method get_analytical_pressure_distribution (line 90) | def get_analytical_pressure_distribution(self, radius, x_coordinates):
method tearDown (line 102) | def tearDown(self):
FILE: tests/sourcepanelmethod/test_vlm_coupled_spm.py
class TestUvlmCoupledWithSourcePanelMethod (line 8) | class TestUvlmCoupledWithSourcePanelMethod(unittest.TestCase):
method test_phantom_panels (line 11) | def test_phantom_panels(self):
method test_fuselage_wing_configuration (line 114) | def test_fuselage_wing_configuration(self):
method get_test_name (line 185) | def get_test_name(self, base_name, dynamic=False, static_coupled=False):
method get_geometry_parameters (line 194) | def get_geometry_parameters(self, model_name,fuselage_length=10):
method generate_model (line 214) | def generate_model(self,
method generate_simulation_settings (line 230) | def generate_simulation_settings(self,
method get_timestep (line 262) | def get_timestep(self, model, u_inf):
method define_folder (line 265) | def define_folder(self):
method load_lift_distribution (line 276) | def load_lift_distribution(self, output_folder, n_node_wing, n_tsteps=0):
method tearDown (line 283) | def tearDown(self):
FILE: tests/utils/test_algebra.py
class TestAlgebra (line 7) | class TestAlgebra(unittest.TestCase):
method test_unit_vector (line 12) | def test_unit_vector(self):
method test_rotation_vectors_conversions (line 41) | def test_rotation_vectors_conversions(self):
method test_rotation_matrices (line 65) | def test_rotation_matrices(self):
method test_rotation_matrices_derivatives (line 145) | def test_rotation_matrices_derivatives(self):
method test_crv_tangential_operator (line 256) | def test_crv_tangential_operator(self):
method test_crv_tangetial_operator_derivative (line 293) | def test_crv_tangetial_operator_derivative(self):
method test_crv_tangetial_operator_transpose_derivative (line 332) | def test_crv_tangetial_operator_transpose_derivative(self):
method test_quat_wrt_rot (line 373) | def test_quat_wrt_rot(self):
method test_rotation_about_axis (line 496) | def test_rotation_about_axis(self):
method test_rotation_G_to_A (line 533) | def test_rotation_G_to_A(self):
FILE: tests/utils/test_generate_cases.py
class TestGenerateCases (line 11) | class TestGenerateCases(unittest.TestCase):
method setUp (line 17) | def setUp(self):
method test_generatecases (line 186) | def test_generatecases(self):
method tearDown (line 193) | def tearDown(self):
FILE: tests/utils/test_settings.py
class TestSettings (line 11) | class TestSettings(unittest.TestCase):
method setUp (line 18) | def setUp(self):
method tearDown (line 21) | def tearDown(self):
method test_settings_to_custom_types (line 24) | def test_settings_to_custom_types(self):
method test_multiple_setting_option (line 154) | def test_multiple_setting_option(self):
method tearDown (line 173) | def tearDown(self):
FILE: tests/uvlm/dynamic/test_wake_cfl_n1.py
class TestWakeCFLn1 (line 54) | class TestWakeCFLn1(unittest.TestCase):
method generate_geometry (line 85) | def generate_geometry(self):
method generate_files (line 165) | def generate_files(self, case_header, airfoil):
method run_test (line 385) | def run_test(self, case_header):
method test_traditional (line 410) | def test_traditional(self):
method test_new_nonlinear (line 414) | def test_new_nonlinear(self):
method test_new_linear (line 418) | def test_new_linear(self):
method test_statespace (line 421) | def test_statespace(self):
method run_statespace (line 427) | def run_statespace(self, case_header):
method tearDownClass (line 435) | def tearDownClass(cls):
FILE: tests/uvlm/static/big_wake_planarwing/generate_big_wake_planarwing.py
function clean_test_files (line 41) | def clean_test_files():
function generate_fem_file (line 59) | def generate_fem_file():
function generate_aero_file (line 195) | def generate_aero_file():
function generate_naca_camber (line 256) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 273) | def generate_solver_file(horseshoe=False):
FILE: tests/uvlm/static/planarwing/generate_planarwing.py
function clean_test_files (line 41) | def clean_test_files():
function generate_fem_file (line 59) | def generate_fem_file():
function generate_aero_file (line 195) | def generate_aero_file():
function generate_naca_camber (line 256) | def generate_naca_camber(M=0, P=0):
function generate_solver_file (line 273) | def generate_solver_file(horseshoe=False):
FILE: tests/uvlm/static/polars/generate_wing.py
function generate_infinite_wing (line 7) | def generate_infinite_wing(case_name, alpha, **kwargs):
function get_case_header (line 182) | def get_case_header(polar, infinite_wing, compute_uind, high_re, main_ea...
function run (line 205) | def run(infinite_wing, compute_uind, main_ea, high_re, case_route_root, ...
function all_iter (line 243) | def all_iter(case_route_root, output_route_root):
FILE: tests/uvlm/static/polars/test_polars.py
class InfiniteWing (line 12) | class InfiniteWing:
method force_coef (line 16) | def force_coef(self, rho, uinf):
method moment_coef (line 19) | def moment_coef(self, rho, uinf):
class TestAirfoilPolars (line 23) | class TestAirfoilPolars(unittest.TestCase):
method test_infinite_wing (line 28) | def test_infinite_wing(self):
method tearDown (line 71) | def tearDown(self):
function postprocess (line 78) | def postprocess(output_folder):
function process_case (line 94) | def process_case(path_to_case):
class TestStab (line 107) | class TestStab(unittest.TestCase):
method test_stability (line 109) | def test_stability(self):
FILE: tests/xbeam/geradin/generate_geradin.py
function clean_test_files (line 10) | def clean_test_files():
function generate_fem_file (line 20) | def generate_fem_file(route, case_name, num_elem, num_node_elem=3):
function generate_solver_file (line 129) | def generate_solver_file():
FILE: tests/xbeam/modal/rotating_beam/generate_bielawa_baromega2_1e3.py
function clean_test_files (line 35) | def clean_test_files():
function generate_fem_file (line 53) | def generate_fem_file(route, case_name, num_elem, num_node_elem=3):
function generate_dyn_file (line 189) | def generate_dyn_file():
function generate_aero_file (line 206) | def generate_aero_file():
function generate_solver_file (line 237) | def generate_solver_file():
FILE: tests/xbeam/test_xbeam.py
class TestGeradinXbeam (line 9) | class TestGeradinXbeam(unittest.TestCase):
method setUpClass (line 19) | def setUpClass(cls):
method test_geradin (line 24) | def test_geradin(self):
method tearDown (line 40) | def tearDown(self):
Copy disabled (too large)
Download .json
Condensed preview — 895 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,168K chars).
[
{
"path": ".codecov.yml",
"chars": 24,
"preview": "ignore:\n - '*/tests/*'\n"
},
{
"path": ".coveragerc",
"chars": 564,
"preview": "# this file controls the execution of coverage.py\n[run]\nomit=\n ./tests/*\n ./docs/*\n ./dev/*\n ./scripts/*\n\n[r"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 780,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: potential bug\nassignees: ''\n\n---\n\n**Des"
},
{
"path": ".github/workflows/docker_build.yaml",
"chars": 1040,
"preview": "name: Create and publish Docker image\n\non:\n push:\n branches: \n - develop\n - main\n tags:\n - 'v*'\n\ne"
},
{
"path": ".github/workflows/docker_build_test.yaml",
"chars": 1145,
"preview": "name: Test Docker image build\n\non:\n pull_request:\n branches:\n - main\n - develop\n - 'rc*'\n push:\n "
},
{
"path": ".github/workflows/pypi_build.yaml",
"chars": 2611,
"preview": "name: Create and publish pypi image\n\non:\n # only runs when there is a new published release\n # and for testing, pull r"
},
{
"path": ".github/workflows/readme.md",
"chars": 1555,
"preview": "# SHARPy GitHub Workflows\r\n\r\nThere are 4(+1 experimental) automated workflows for SHARPy's CI/CD.\r\n\r\n## SHARPy Tests\r\n\r\n"
},
{
"path": ".github/workflows/sharpy_no_test_needed.yaml",
"chars": 324,
"preview": "name: SHARPy Tests\n\non:\n pull_request:\n branches:\n - main\n - develop\n - 'rc*'\n paths-ignore:\n "
},
{
"path": ".github/workflows/sharpy_tests.yaml",
"chars": 1284,
"preview": "name: SHARPy Tests\n\non:\n push:\n paths:\n - '*.py'\n - 'lib/*'\n - '.github/workflows/sharpy*'\n pull_req"
},
{
"path": ".github_changelog_generator",
"chars": 15,
"preview": "since-tag=1.0.0"
},
{
"path": ".gitignore",
"chars": 1444,
"preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packagi"
},
{
"path": ".gitmodules",
"chars": 187,
"preview": "[submodule \"lib/UVLM\"]\n\tpath = lib/UVLM\n\turl = http://github.com/imperialcollegelondon/UVLM\n[submodule \"lib/xbeam\"]\n\tpat"
},
{
"path": ".readthedocs.yaml",
"chars": 646,
"preview": "# .readthedocs.yaml\n# Read the Docs configuration file\n# See https://docs.readthedocs.io/en/stable/config-file/v2.html f"
},
{
"path": ".version.json",
"chars": 95,
"preview": "{\n \"schemaVersion\": 1,\n \"label\": \"release version\",\n \"message\": \"2.4\",\n \"color\": \"green\"\n}\n"
},
{
"path": ".zenodo.json",
"chars": 880,
"preview": "{\n \"license\": \"other-open\", \n \"title\": \"SHARPy: A dynamic aeroelastic simulation toolbox for very flexible aircraf"
},
{
"path": "CHANGELOG.md",
"chars": 34476,
"preview": "# Changelog\n\n## [2.4](https://github.com/imperialcollegelondon/sharpy/tree/2.4) (2025-03-20)\n\n[Full Changelog](https://g"
},
{
"path": "CMakeLists.txt",
"chars": 141,
"preview": "cmake_minimum_required(VERSION 3.9)\nproject(sharpy)\n\nif(NOT CMAKE_BUILD_TYPE)\n set(CMAKE_BUILD_TYPE Release)\nendif()\n\na"
},
{
"path": "Dockerfile",
"chars": 1953,
"preview": "FROM centos:8\n\nENV PYTHONDONTWRITEBYTECODE=true\nENV BASH_ENV ~/.bashrc\nSHELL [\"/bin/bash\", \"-c\"]\nENV PATH=${PATH}:/mamba"
},
{
"path": "LICENSE",
"chars": 1563,
"preview": "BSD 3-Clause License\n\nCopyright (c) 2019, Loads Control and Aeroelastics, Imperial College London\nAll rights reserved.\n\n"
},
{
"path": "README.md",
"chars": 6811,
"preview": "# Simulation of High Aspect Ratio aeroplanes in Python [SHARPy]\n\n\n addpath(strcat(route_directory,'/matlab_functions/'));\n "
},
{
"path": "docs/source/content/example_notebooks/UDP_control/get_settings_udp.py",
"chars": 13342,
"preview": "\"\"\"\r\n Script to set the required SHARPy settings for all cases within\r\n the UDP Control example notebook. \r\n\"\"\"\r\n"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/adjust_state_space_system.m",
"chars": 2322,
"preview": "function state_space_converted = adjust_state_space_system(state_space_system, input_settings)\n%convert_state_space_for_"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/get_1minuscosine_gust_input.m",
"chars": 700,
"preview": "function gust_time_series = get_1minuscosine_gust_input(gust_length, gust_intensity, dt, u_inf, simulation_time)\n%get_1m"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/read_SHARPy_state_space_system.m",
"chars": 1122,
"preview": "function [state_space_system, eta_ref] = read_SHARPy_state_space_system(file_name_sharpy, folder, complex)\r\n%read_SHARPy"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/matlab_functions/set_input_parameters.m",
"chars": 1208,
"preview": "function input = set_input_parameters(u_inf, ...\n dt, ...\n "
},
{
"path": "docs/source/content/example_notebooks/UDP_control/parameter_UDP_control_pazy_udp_closed_loop_gust_response.json",
"chars": 377,
"preview": "{\"server_ip_addr\": \"127.0.0.1\", \"client_ip_addr\": \"127.0.0.1\", \"port_in_network\": 64017, \"port_out_network_server\": 5901"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/pazy_PID_controller_UDP.py",
"chars": 7232,
"preview": "import socket\r\nimport logging\r\nimport struct\r\nimport sharpy.io.message_interface as message_interface\r\nimport numpy as n"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/pazy_network_info.yml",
"chars": 271,
"preview": "---\n- name: 'control_surface_deflection'\n var_type: 'control_surface'\n inout: 'in'\n position: 0\n- name: 'control_surf"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/pid_controller.py",
"chars": 755,
"preview": "class PID_Controller(object):\r\n def __init__(self, P_gain, I_gain, D_gain, target=0):\r\n self.P_gain = P_gain\r\n"
},
{
"path": "docs/source/content/example_notebooks/UDP_control/tutorial_udp_control.ipynb",
"chars": 419656,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# \"\n ]\n },\n {\n \"cell_type\": \""
},
{
"path": "docs/source/content/example_notebooks/cantilever/model_static_cantilever.py",
"chars": 5793,
"preview": "import h5py as h5\nimport numpy as np\nimport os\n\ndef clean_test_files(route, case_name):\n fem_file_name = route + '/' "
},
{
"path": "docs/source/content/example_notebooks/cantilever/static_cantilever.ipynb",
"chars": 141872,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# A prismatic cantilever beam under"
},
{
"path": "docs/source/content/example_notebooks/cantilever_wing.ipynb",
"chars": 4971591,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"tags\": []\n },\n \"source\": [\n \"# A first test c"
},
{
"path": "docs/source/content/example_notebooks/linear_goland_flutter.ipynb",
"chars": 116535,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {\n \"tags\": []\n },\n \"source\": [\n \"\\n\",\n \"# Flut"
},
{
"path": "docs/source/content/example_notebooks/linear_horten.ipynb",
"chars": 106673,
"preview": "{\n\t\"cells\": [\n\t\t{\n\t\t\t\"cell_type\": \"markdown\",\n\t\t\t\"metadata\": {},\n\t\t\t\"source\": [\n\t\t\t\t\"# Asymptotic Stability of a Flying "
},
{
"path": "docs/source/content/example_notebooks/nonlinear_t-tail_HALE.ipynb",
"chars": 628147,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"execution_count\": 1,\n \"metadata\": {},\n \"outputs\": [],\n \"source\": [\n "
},
{
"path": "docs/source/content/example_notebooks/wind_turbine.ipynb",
"chars": 148889,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# Simulation NREL 5MW wind turbine\""
},
{
"path": "docs/source/content/examples.rst",
"chars": 1703,
"preview": "Examples\n========\n\nA set of SHARPy examples created with Jupyter Notebooks is provided for users to interact and modify\n"
},
{
"path": "docs/source/content/faqs.md",
"chars": 3077,
"preview": "# Frequently Asked Questions [FAQs]\n\nOver the years, we have gathered a valuable experience running SHARPy so we would l"
},
{
"path": "docs/source/content/installation.md",
"chars": 19555,
"preview": "# SHARPy v2.3 Installation Guide\n__Last revision 10 June 2024__\n\nThe following step by step tutorial will guide you thro"
},
{
"path": "docs/source/content/postproc.rst",
"chars": 85,
"preview": "Post-Processing\n---------------\n\n.. toctree::\n :glob:\n\n ../includes/postprocs/*"
},
{
"path": "docs/source/content/publications.md",
"chars": 6336,
"preview": "# Publications\n\nSHARPy has been used in many technical papers that have been both published in Journals and presented at"
},
{
"path": "docs/source/content/solvers.rst",
"chars": 420,
"preview": "SHARPy Solvers\n------------------\n\nThe available SHARPy solvers are listed below. Attending to SHARPy's modular structur"
},
{
"path": "docs/source/content/test_cases.rst",
"chars": 389,
"preview": "``SHARPy`` Test Cases\n---------------------\n\nThe following test cases are provided as a tutorial and introduction to ``S"
},
{
"path": "docs/source/includes/aero/index.rst",
"chars": 103,
"preview": "Aerodynamic Packages\n--------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./models/index\n\t./utils/index\n"
},
{
"path": "docs/source/includes/aero/models/aerogrid/AeroTimeStepInfo.rst",
"chars": 105,
"preview": "AeroTimeStepInfo\n----------------\n\n.. autoclass:: sharpy.aero.models.aerogrid.AeroTimeStepInfo\n\t:members:"
},
{
"path": "docs/source/includes/aero/models/aerogrid/Aerogrid.rst",
"chars": 81,
"preview": "Aerogrid\n--------\n\n.. autoclass:: sharpy.aero.models.aerogrid.Aerogrid\n\t:members:"
},
{
"path": "docs/source/includes/aero/models/aerogrid/generate_strip.rst",
"chars": 89,
"preview": "generate_strip\n--------------\n\n.. automodule:: sharpy.aero.models.aerogrid.generate_strip"
},
{
"path": "docs/source/includes/aero/models/aerogrid/index.rst",
"chars": 204,
"preview": "Aerogrid\n++++++++\n\n\nAerogrid contains all the necessary routines to generate an aerodynamic\ngrid based on the input dict"
},
{
"path": "docs/source/includes/aero/models/index.rst",
"chars": 61,
"preview": "Models\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./aerogrid/index\n"
},
{
"path": "docs/source/includes/aero/utils/airfoilpolars/Polar.rst",
"chars": 76,
"preview": "Polar\n-----\n\n.. autoclass:: sharpy.aero.utils.airfoilpolars.Polar\n\t:members:"
},
{
"path": "docs/source/includes/aero/utils/airfoilpolars/index.rst",
"chars": 31,
"preview": ".. toctree::\n\t:glob:\n\n\t./Polar\n"
},
{
"path": "docs/source/includes/aero/utils/index.rst",
"chars": 114,
"preview": "Aerodynamic Utilities\n---------------------\n\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./airfoilpolars/index\n\t./mapping/index\n"
},
{
"path": "docs/source/includes/aero/utils/mapping/aero2struct_force_mapping.rst",
"chars": 120,
"preview": "aero2struct_force_mapping\n-------------------------\n\n.. automodule:: sharpy.aero.utils.mapping.aero2struct_force_mapping"
},
{
"path": "docs/source/includes/aero/utils/mapping/index.rst",
"chars": 126,
"preview": "Force Mapping Utilities\n+++++++++++++++++++++++\n\n\n\n.. toctree::\n\t:glob:\n\n\t./aero2struct_force_mapping\n\t./total_forces_mo"
},
{
"path": "docs/source/includes/aero/utils/mapping/total_forces_moments.rst",
"chars": 105,
"preview": "total_forces_moments\n--------------------\n\n.. automodule:: sharpy.aero.utils.mapping.total_forces_moments"
},
{
"path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/generate_naca_camber.rst",
"chars": 122,
"preview": "generate_naca_camber\n--------------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.generate_naca_camb"
},
{
"path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/generate_solver_file.rst",
"chars": 122,
"preview": "generate_solver_file\n--------------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.generate_solver_fi"
},
{
"path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/index.rst",
"chars": 88,
"preview": ".. toctree::\n\t:glob:\n\n\t./generate_naca_camber\n\t./generate_solver_file\n\t./read_beam_data\n"
},
{
"path": "docs/source/includes/cases/coupled/X-HALE/generate_xhale/read_beam_data.rst",
"chars": 104,
"preview": "read_beam_data\n--------------\n\n.. automodule:: sharpy.cases.coupled.X-HALE.generate_xhale.read_beam_data"
},
{
"path": "docs/source/includes/cases/coupled/X-HALE/index.rst",
"chars": 67,
"preview": "X-hale\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./generate_xhale/index\n"
},
{
"path": "docs/source/includes/cases/coupled/index.rst",
"chars": 61,
"preview": "Coupled\n-------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./X-HALE/index\n"
},
{
"path": "docs/source/includes/cases/hangar/horten_wing/HortenWing.rst",
"chars": 91,
"preview": "HortenWing\n----------\n\n.. autoclass:: sharpy.cases.hangar.horten_wing.HortenWing\n\t:members:"
},
{
"path": "docs/source/includes/cases/hangar/horten_wing/index.rst",
"chars": 141,
"preview": "Horten Wing Class Generator\n+++++++++++++++++++++++++++\n\nHorten Wing Class Generator\nN Goizueta Nov 18\n\n\n.. toctree::\n\t:"
},
{
"path": "docs/source/includes/cases/hangar/index.rst",
"chars": 114,
"preview": "Hangar\n------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./horten_wing/index\n\t./richards_wing/index\n\t./swept_flying_wing/index\n"
},
{
"path": "docs/source/includes/cases/hangar/richards_wing/HortenWing.rst",
"chars": 93,
"preview": "HortenWing\n----------\n\n.. autoclass:: sharpy.cases.hangar.richards_wing.HortenWing\n\t:members:"
},
{
"path": "docs/source/includes/cases/hangar/richards_wing/index.rst",
"chars": 476,
"preview": "Simple Horten Wing as used by Richards. Baseline and simplified models\n+++++++++++++++++++++++++++++++++++++++++++++++++"
},
{
"path": "docs/source/includes/cases/hangar/swept_flying_wing/SweptWing.rst",
"chars": 94,
"preview": "SweptWing\n---------\n\n.. autoclass:: sharpy.cases.hangar.swept_flying_wing.SweptWing\n\t:members:"
},
{
"path": "docs/source/includes/cases/hangar/swept_flying_wing/index.rst",
"chars": 182,
"preview": "Generic Swept Flying Wing Class Generator\n+++++++++++++++++++++++++++++++++++++++++\n\nGeneric Swept Flying Wing Class Gen"
},
{
"path": "docs/source/includes/cases/index.rst",
"chars": 93,
"preview": "Cases\n-----\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./coupled/index\n\t./hangar/index\n\t./templates/index\n"
},
{
"path": "docs/source/includes/cases/templates/Ttail/Ttail_3beams.rst",
"chars": 94,
"preview": "Ttail_3beams\n------------\n\n.. autoclass:: sharpy.cases.templates.Ttail.Ttail_3beams\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/Ttail/Ttail_canonical.rst",
"chars": 103,
"preview": "Ttail_canonical\n---------------\n\n.. autoclass:: sharpy.cases.templates.Ttail.Ttail_canonical\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/Ttail/index.rst",
"chars": 373,
"preview": "Templates to build T-tail models\n++++++++++++++++++++++++++++++++\n\nTemplates to build T-tail models\nS. Maraniello, Oct 2"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/FlyingWing.rst",
"chars": 95,
"preview": "FlyingWing\n----------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.FlyingWing\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/Goland.rst",
"chars": 83,
"preview": "Goland\n------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Goland\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/Pazy.rst",
"chars": 77,
"preview": "Pazy\n----\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Pazy\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/QuasiInfinite.rst",
"chars": 104,
"preview": "QuasiInfinite\n-------------\n\n.. autoclass:: sharpy.cases.templates.flying_wings.QuasiInfinite\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/Smith.rst",
"chars": 80,
"preview": "Smith\n-----\n\n.. autoclass:: sharpy.cases.templates.flying_wings.Smith\n\t:members:"
},
{
"path": "docs/source/includes/cases/templates/flying_wings/index.rst",
"chars": 520,
"preview": "Templates to build flying wing models\n+++++++++++++++++++++++++++++++++++++\n\nTemplates to build flying wing models\nS. Ma"
},
{
"path": "docs/source/includes/cases/templates/index.rst",
"chars": 107,
"preview": "Templates\n---------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./Ttail/index\n\t./flying_wings/index\n\t./template_wt/index\n"
},
{
"path": "docs/source/includes/cases/templates/template_wt/create_blade_coordinates.rst",
"chars": 126,
"preview": "create_blade_coordinates\n------------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.create_blade_coord"
},
{
"path": "docs/source/includes/cases/templates/template_wt/create_node_radial_pos_from_elem_centres.rst",
"chars": 174,
"preview": "create_node_radial_pos_from_elem_centres\n----------------------------------------\n\n.. automodule:: sharpy.cases.template"
},
{
"path": "docs/source/includes/cases/templates/template_wt/generate_from_excel_type03.rst",
"chars": 132,
"preview": "generate_from_excel_type03\n--------------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.generate_from_"
},
{
"path": "docs/source/includes/cases/templates/template_wt/index.rst",
"chars": 346,
"preview": "template_wt\n+++++++++++\n\ntemplate_wt\n\nFunctions needed to generate a wind turbines\n\nNotes:\n To load this library: imp"
},
{
"path": "docs/source/includes/cases/templates/template_wt/rotor_from_excel_type03.rst",
"chars": 123,
"preview": "rotor_from_excel_type03\n-----------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.rotor_from_excel_typ"
},
{
"path": "docs/source/includes/cases/templates/template_wt/spar_from_excel_type04.rst",
"chars": 120,
"preview": "spar_from_excel_type04\n----------------------\n\n.. automodule:: sharpy.cases.templates.template_wt.spar_from_excel_type04"
},
{
"path": "docs/source/includes/controllers/controlsurfacepidcontroller/ControlSurfacePidController.rst",
"chars": 157,
"preview": "ControlSurfacePidController\n---------------------------\n\n.. autoclass:: sharpy.controllers.controlsurfacepidcontroller.C"
},
{
"path": "docs/source/includes/controllers/controlsurfacepidcontroller/index.rst",
"chars": 53,
"preview": ".. toctree::\n\t:glob:\n\n\t./ControlSurfacePidController\n"
},
{
"path": "docs/source/includes/controllers/index.rst",
"chars": 127,
"preview": "Controllers\n-----------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./controlsurfacepidcontroller/index\n\t./takeofftrajectorycontroller"
},
{
"path": "docs/source/includes/controllers/takeofftrajectorycontroller/TakeOffTrajectoryController.rst",
"chars": 157,
"preview": "TakeOffTrajectoryController\n---------------------------\n\n.. autoclass:: sharpy.controllers.takeofftrajectorycontroller.T"
},
{
"path": "docs/source/includes/controllers/takeofftrajectorycontroller/index.rst",
"chars": 53,
"preview": ".. toctree::\n\t:glob:\n\n\t./TakeOffTrajectoryController\n"
},
{
"path": "docs/source/includes/generators/bumpvelocityfield/BumpVelocityField.rst",
"chars": 116,
"preview": "BumpVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.bumpvelocityfield.BumpVelocityField\n\t:members:"
},
{
"path": "docs/source/includes/generators/bumpvelocityfield/index.rst",
"chars": 43,
"preview": ".. toctree::\n\t:glob:\n\n\t./BumpVelocityField\n"
},
{
"path": "docs/source/includes/generators/dynamiccontrolsurface/DynamicControlSurface.rst",
"chars": 132,
"preview": "DynamicControlSurface\n---------------------\n\n.. autoclass:: sharpy.generators.dynamiccontrolsurface.DynamicControlSurfac"
},
{
"path": "docs/source/includes/generators/dynamiccontrolsurface/index.rst",
"chars": 47,
"preview": ".. toctree::\n\t:glob:\n\n\t./DynamicControlSurface\n"
},
{
"path": "docs/source/includes/generators/floatingforces/FloatingForces.rst",
"chars": 104,
"preview": "FloatingForces\n--------------\n\n.. autoclass:: sharpy.generators.floatingforces.FloatingForces\n\t:members:"
},
{
"path": "docs/source/includes/generators/floatingforces/change_of_to_sharpy.rst",
"chars": 109,
"preview": "change_of_to_sharpy\n-------------------\n\n.. automodule:: sharpy.generators.floatingforces.change_of_to_sharpy"
},
{
"path": "docs/source/includes/generators/floatingforces/compute_equiv_hd_added_mass.rst",
"chars": 133,
"preview": "compute_equiv_hd_added_mass\n---------------------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_equiv_"
},
{
"path": "docs/source/includes/generators/floatingforces/compute_jacobian.rst",
"chars": 100,
"preview": "compute_jacobian\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_jacobian"
},
{
"path": "docs/source/includes/generators/floatingforces/compute_xf_zf.rst",
"chars": 91,
"preview": "compute_xf_zf\n-------------\n\n.. automodule:: sharpy.generators.floatingforces.compute_xf_zf"
},
{
"path": "docs/source/includes/generators/floatingforces/index.rst",
"chars": 308,
"preview": ".. toctree::\n\t:glob:\n\n\t./FloatingForces\n\t./change_of_to_sharpy\n\t./compute_equiv_hd_added_mass\n\t./compute_jacobian\n\t./com"
},
{
"path": "docs/source/includes/generators/floatingforces/jonswap_spectrum.rst",
"chars": 100,
"preview": "jonswap_spectrum\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.jonswap_spectrum"
},
{
"path": "docs/source/includes/generators/floatingforces/matrix_from_rf.rst",
"chars": 94,
"preview": "matrix_from_rf\n--------------\n\n.. automodule:: sharpy.generators.floatingforces.matrix_from_rf"
},
{
"path": "docs/source/includes/generators/floatingforces/noise_freq_1s.rst",
"chars": 91,
"preview": "noise_freq_1s\n-------------\n\n.. automodule:: sharpy.generators.floatingforces.noise_freq_1s"
},
{
"path": "docs/source/includes/generators/floatingforces/quasisteady_mooring.rst",
"chars": 109,
"preview": "quasisteady_mooring\n-------------------\n\n.. automodule:: sharpy.generators.floatingforces.quasisteady_mooring"
},
{
"path": "docs/source/includes/generators/floatingforces/rename_terms.rst",
"chars": 88,
"preview": "rename_terms\n------------\n\n.. automodule:: sharpy.generators.floatingforces.rename_terms"
},
{
"path": "docs/source/includes/generators/floatingforces/response_freq_dep_matrix.rst",
"chars": 124,
"preview": "response_freq_dep_matrix\n------------------------\n\n.. automodule:: sharpy.generators.floatingforces.response_freq_dep_ma"
},
{
"path": "docs/source/includes/generators/floatingforces/rfval.rst",
"chars": 67,
"preview": "rfval\n-----\n\n.. automodule:: sharpy.generators.floatingforces.rfval"
},
{
"path": "docs/source/includes/generators/floatingforces/time_wave_forces.rst",
"chars": 100,
"preview": "time_wave_forces\n----------------\n\n.. automodule:: sharpy.generators.floatingforces.time_wave_forces"
},
{
"path": "docs/source/includes/generators/floatingforces/wave_radiation_damping.rst",
"chars": 118,
"preview": "wave_radiation_damping\n----------------------\n\n.. automodule:: sharpy.generators.floatingforces.wave_radiation_damping"
},
{
"path": "docs/source/includes/generators/gridbox/GridBox.rst",
"chars": 76,
"preview": "GridBox\n-------\n\n.. autoclass:: sharpy.generators.gridbox.GridBox\n\t:members:"
},
{
"path": "docs/source/includes/generators/gridbox/index.rst",
"chars": 33,
"preview": ".. toctree::\n\t:glob:\n\n\t./GridBox\n"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/DARPA.rst",
"chars": 80,
"preview": "DARPA\n-----\n\n.. autoclass:: sharpy.generators.gustvelocityfield.DARPA\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/GustVelocityField.rst",
"chars": 116,
"preview": "GustVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.GustVelocityField\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/continuous_sin.rst",
"chars": 107,
"preview": "continuous_sin\n--------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.continuous_sin\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/index.rst",
"chars": 991,
"preview": "Gust Velocity Field Generators\n++++++++++++++++++++++++++++++\n\n\nThese generators are used to create a gust velocity fiel"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/lateral_one_minus_cos.rst",
"chars": 128,
"preview": "lateral_one_minus_cos\n---------------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.lateral_one_minus_cos\n\t:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/one_minus_cos.rst",
"chars": 104,
"preview": "one_minus_cos\n-------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.one_minus_cos\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/span_sine.rst",
"chars": 92,
"preview": "span_sine\n---------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.span_sine\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/time_varying.rst",
"chars": 101,
"preview": "time_varying\n------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.time_varying\n\t:members:"
},
{
"path": "docs/source/includes/generators/gustvelocityfield/time_varying_global.rst",
"chars": 122,
"preview": "time_varying_global\n-------------------\n\n.. autoclass:: sharpy.generators.gustvelocityfield.time_varying_global\n\t:member"
},
{
"path": "docs/source/includes/generators/helicoidalwake/HelicoidalWake.rst",
"chars": 104,
"preview": "HelicoidalWake\n--------------\n\n.. autoclass:: sharpy.generators.helicoidalwake.HelicoidalWake\n\t:members:"
},
{
"path": "docs/source/includes/generators/helicoidalwake/index.rst",
"chars": 40,
"preview": ".. toctree::\n\t:glob:\n\n\t./HelicoidalWake\n"
},
{
"path": "docs/source/includes/generators/index.rst",
"chars": 794,
"preview": "Generators\n----------\n\n\nVelocity field generators prescribe the flow conditions for your problem. For instance, you can "
},
{
"path": "docs/source/includes/generators/modifystructure/ChangeLumpedMass.rst",
"chars": 111,
"preview": "ChangeLumpedMass\n----------------\n\n.. autoclass:: sharpy.generators.modifystructure.ChangeLumpedMass\n\t:members:"
},
{
"path": "docs/source/includes/generators/modifystructure/ChangedVariable.rst",
"chars": 108,
"preview": "ChangedVariable\n---------------\n\n.. autoclass:: sharpy.generators.modifystructure.ChangedVariable\n\t:members:"
},
{
"path": "docs/source/includes/generators/modifystructure/LumpedMassControl.rst",
"chars": 114,
"preview": "LumpedMassControl\n-----------------\n\n.. autoclass:: sharpy.generators.modifystructure.LumpedMassControl\n\t:members:"
},
{
"path": "docs/source/includes/generators/modifystructure/ModifyStructure.rst",
"chars": 108,
"preview": "ModifyStructure\n---------------\n\n.. autoclass:: sharpy.generators.modifystructure.ModifyStructure\n\t:members:"
},
{
"path": "docs/source/includes/generators/modifystructure/index.rst",
"chars": 101,
"preview": ".. toctree::\n\t:glob:\n\n\t./ChangeLumpedMass\n\t./ChangedVariable\n\t./LumpedMassControl\n\t./ModifyStructure\n"
},
{
"path": "docs/source/includes/generators/polaraeroforces/EfficiencyCorrection.rst",
"chars": 123,
"preview": "EfficiencyCorrection\n--------------------\n\n.. autoclass:: sharpy.generators.polaraeroforces.EfficiencyCorrection\n\t:membe"
},
{
"path": "docs/source/includes/generators/polaraeroforces/PolarCorrection.rst",
"chars": 108,
"preview": "PolarCorrection\n---------------\n\n.. autoclass:: sharpy.generators.polaraeroforces.PolarCorrection\n\t:members:"
},
{
"path": "docs/source/includes/generators/polaraeroforces/get_aoacl0_from_camber.rst",
"chars": 119,
"preview": "get_aoacl0_from_camber\n----------------------\n\n.. automodule:: sharpy.generators.polaraeroforces.get_aoacl0_from_camber"
},
{
"path": "docs/source/includes/generators/polaraeroforces/index.rst",
"chars": 177,
"preview": ".. toctree::\n\t:glob:\n\n\t./EfficiencyCorrection\n\t./PolarCorrection\n\t./get_aoacl0_from_camber\n\t./local_stability_axes\n\t./ma"
},
{
"path": "docs/source/includes/generators/polaraeroforces/local_stability_axes.rst",
"chars": 113,
"preview": "local_stability_axes\n--------------------\n\n.. automodule:: sharpy.generators.polaraeroforces.local_stability_axes"
},
{
"path": "docs/source/includes/generators/polaraeroforces/magnitude_and_direction_of_relative_velocity.rst",
"chars": 185,
"preview": "magnitude_and_direction_of_relative_velocity\n--------------------------------------------\n\n.. automodule:: sharpy.genera"
},
{
"path": "docs/source/includes/generators/polaraeroforces/span_chord.rst",
"chars": 83,
"preview": "span_chord\n----------\n\n.. automodule:: sharpy.generators.polaraeroforces.span_chord"
},
{
"path": "docs/source/includes/generators/shearvelocityfield/ShearVelocityField.rst",
"chars": 120,
"preview": "ShearVelocityField\n------------------\n\n.. autoclass:: sharpy.generators.shearvelocityfield.ShearVelocityField\n\t:members:"
},
{
"path": "docs/source/includes/generators/shearvelocityfield/index.rst",
"chars": 44,
"preview": ".. toctree::\n\t:glob:\n\n\t./ShearVelocityField\n"
},
{
"path": "docs/source/includes/generators/steadyvelocityfield/SteadyVelocityField.rst",
"chars": 124,
"preview": "SteadyVelocityField\n-------------------\n\n.. autoclass:: sharpy.generators.steadyvelocityfield.SteadyVelocityField\n\t:memb"
},
{
"path": "docs/source/includes/generators/steadyvelocityfield/index.rst",
"chars": 45,
"preview": ".. toctree::\n\t:glob:\n\n\t./SteadyVelocityField\n"
},
{
"path": "docs/source/includes/generators/straightwake/StraightWake.rst",
"chars": 96,
"preview": "StraightWake\n------------\n\n.. autoclass:: sharpy.generators.straightwake.StraightWake\n\t:members:"
},
{
"path": "docs/source/includes/generators/straightwake/index.rst",
"chars": 38,
"preview": ".. toctree::\n\t:glob:\n\n\t./StraightWake\n"
},
{
"path": "docs/source/includes/generators/trajectorygenerator/TrajectoryGenerator.rst",
"chars": 124,
"preview": "TrajectoryGenerator\n-------------------\n\n.. autoclass:: sharpy.generators.trajectorygenerator.TrajectoryGenerator\n\t:memb"
},
{
"path": "docs/source/includes/generators/trajectorygenerator/index.rst",
"chars": 45,
"preview": ".. toctree::\n\t:glob:\n\n\t./TrajectoryGenerator\n"
},
{
"path": "docs/source/includes/generators/turbvelocityfield/TurbVelocityField.rst",
"chars": 116,
"preview": "TurbVelocityField\n-----------------\n\n.. autoclass:: sharpy.generators.turbvelocityfield.TurbVelocityField\n\t:members:"
},
{
"path": "docs/source/includes/generators/turbvelocityfield/index.rst",
"chars": 43,
"preview": ".. toctree::\n\t:glob:\n\n\t./TurbVelocityField\n"
},
{
"path": "docs/source/includes/generators/turbvelocityfieldbts/TurbVelocityFieldBts.rst",
"chars": 128,
"preview": "TurbVelocityFieldBts\n--------------------\n\n.. autoclass:: sharpy.generators.turbvelocityfieldbts.TurbVelocityFieldBts\n\t:"
},
{
"path": "docs/source/includes/generators/turbvelocityfieldbts/index.rst",
"chars": 46,
"preview": ".. toctree::\n\t:glob:\n\n\t./TurbVelocityFieldBts\n"
},
{
"path": "docs/source/includes/index.rst",
"chars": 655,
"preview": "SHARPy Source Code\n------------------\n\nThe core SHARPy documentation is found herein.\n\n.. note::\n\n\tThe docs are still a "
},
{
"path": "docs/source/includes/io/index.rst",
"chars": 291,
"preview": "UDP Input/Output\n----------------\n\n\n\nThis package contains the routines for the SHARPy input and output via UDP.\n\nThe ma"
},
{
"path": "docs/source/includes/io/inout_variables/SetOfVariables.rst",
"chars": 97,
"preview": "SetOfVariables\n--------------\n\n.. autoclass:: sharpy.io.inout_variables.SetOfVariables\n\t:members:"
},
{
"path": "docs/source/includes/io/inout_variables/index.rst",
"chars": 40,
"preview": ".. toctree::\n\t:glob:\n\n\t./SetOfVariables\n"
},
{
"path": "docs/source/includes/io/network_interface/InNetwork.rst",
"chars": 84,
"preview": "InNetwork\n---------\n\n.. autoclass:: sharpy.io.network_interface.InNetwork\n\t:members:"
},
{
"path": "docs/source/includes/io/network_interface/Network.rst",
"chars": 78,
"preview": "Network\n-------\n\n.. autoclass:: sharpy.io.network_interface.Network\n\t:members:"
},
{
"path": "docs/source/includes/io/network_interface/NetworkLoader.rst",
"chars": 96,
"preview": "NetworkLoader\n-------------\n\n.. autoclass:: sharpy.io.network_interface.NetworkLoader\n\t:members:"
},
{
"path": "docs/source/includes/io/network_interface/OutNetwork.rst",
"chars": 87,
"preview": "OutNetwork\n----------\n\n.. autoclass:: sharpy.io.network_interface.OutNetwork\n\t:members:"
},
{
"path": "docs/source/includes/io/network_interface/index.rst",
"chars": 77,
"preview": ".. toctree::\n\t:glob:\n\n\t./InNetwork\n\t./Network\n\t./NetworkLoader\n\t./OutNetwork\n"
},
{
"path": "docs/source/includes/linear/assembler/index.rst",
"chars": 181,
"preview": "Assembler\n---------\n\n.. toctree::\n\t:maxdepth: 1\n\n\t./lincontrolsurfacedeflector/index\n\t./linearaeroelastic/index\n\t./linea"
},
{
"path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/LinControlSurfaceDeflector.rst",
"chars": 158,
"preview": "LinControlSurfaceDeflector\n--------------------------\n\n.. autoclass:: sharpy.linear.assembler.lincontrolsurfacedeflector"
},
{
"path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/der_R_arbitrary_axis_times_v.rst",
"chars": 154,
"preview": "der_R_arbitrary_axis_times_v\n----------------------------\n\n.. automodule:: sharpy.linear.assembler.lincontrolsurfacedefl"
},
{
"path": "docs/source/includes/linear/assembler/lincontrolsurfacedeflector/index.rst",
"chars": 222,
"preview": "Control surface deflector for linear systems\n++++++++++++++++++++++++++++++++++++++++++++\n\nControl surface deflector for"
},
{
"path": "docs/source/includes/linear/assembler/linearaeroelastic/LinearAeroelastic.rst",
"chars": 122,
"preview": "LinearAeroelastic\n-----------------\n\n.. autoclass:: sharpy.linear.assembler.linearaeroelastic.LinearAeroelastic\n\t:member"
},
{
"path": "docs/source/includes/linear/assembler/linearaeroelastic/index.rst",
"chars": 43,
"preview": ".. toctree::\n\t:glob:\n\n\t./LinearAeroelastic\n"
},
{
"path": "docs/source/includes/linear/assembler/linearbeam/LinearBeam.rst",
"chars": 94,
"preview": "LinearBeam\n----------\n\n.. autoclass:: sharpy.linear.assembler.linearbeam.LinearBeam\n\t:members:"
},
{
"path": "docs/source/includes/linear/assembler/linearbeam/index.rst",
"chars": 136,
"preview": "Linear State Beam Element Class\n+++++++++++++++++++++++++++++++\n\nLinear State Beam Element Class\n\n\n\n.. toctree::\n\t:glob:"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/LeadingEdge.rst",
"chars": 106,
"preview": "LeadingEdge\n-----------\n\n.. autoclass:: sharpy.linear.assembler.lineargustassembler.LeadingEdge\n\t:members:"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/MultiLeadingEdge.rst",
"chars": 121,
"preview": "MultiLeadingEdge\n----------------\n\n.. autoclass:: sharpy.linear.assembler.lineargustassembler.MultiLeadingEdge\n\t:members"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/campbell.rst",
"chars": 87,
"preview": "campbell\n--------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.campbell"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/gust_from_string.rst",
"chars": 111,
"preview": "gust_from_string\n----------------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.gust_from_string"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/index.rst",
"chars": 115,
"preview": ".. toctree::\n\t:glob:\n\n\t./LeadingEdge\n\t./MultiLeadingEdge\n\t./campbell\n\t./gust_from_string\n\t./spanwise_interpolation\n"
},
{
"path": "docs/source/includes/linear/assembler/lineargustassembler/spanwise_interpolation.rst",
"chars": 129,
"preview": "spanwise_interpolation\n----------------------\n\n.. automodule:: sharpy.linear.assembler.lineargustassembler.spanwise_inte"
},
{
"path": "docs/source/includes/linear/assembler/linearuvlm/LinearUVLM.rst",
"chars": 94,
"preview": "LinearUVLM\n----------\n\n.. autoclass:: sharpy.linear.assembler.linearuvlm.LinearUVLM\n\t:members:"
},
{
"path": "docs/source/includes/linear/assembler/linearuvlm/index.rst",
"chars": 132,
"preview": "Linear UVLM State Space System\n++++++++++++++++++++++++++++++\n\nLinear UVLM State Space System\n\n\n.. toctree::\n\t:glob:\n\n\t."
},
{
"path": "docs/source/includes/linear/index.rst",
"chars": 746,
"preview": "Linear SHARPy\n-------------\n\n\nThe code included herein enables the assembly of linearised state-space systems based on t"
},
{
"path": "docs/source/includes/linear/src/assembly/AICs.rst",
"chars": 58,
"preview": "AICs\n----\n\n.. automodule:: sharpy.linear.src.assembly.AICs"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsdgamma_vrel0.rst",
"chars": 94,
"preview": "dfqsdgamma_vrel0\n----------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdgamma_vrel0"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsduinput.rst",
"chars": 79,
"preview": "dfqsduinput\n-----------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsduinput"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsdvind_gamma.rst",
"chars": 91,
"preview": "dfqsdvind_gamma\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdvind_gamma"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsdvind_zeta.rst",
"chars": 88,
"preview": "dfqsdvind_zeta\n--------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdvind_zeta"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsdzeta_omega.rst",
"chars": 91,
"preview": "dfqsdzeta_omega\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdzeta_omega"
},
{
"path": "docs/source/includes/linear/src/assembly/dfqsdzeta_vrel0.rst",
"chars": 91,
"preview": "dfqsdzeta_vrel0\n---------------\n\n.. automodule:: sharpy.linear.src.assembly.dfqsdzeta_vrel0"
},
{
"path": "docs/source/includes/linear/src/assembly/dfunstdgamma_dot.rst",
"chars": 94,
"preview": "dfunstdgamma_dot\n----------------\n\n.. automodule:: sharpy.linear.src.assembly.dfunstdgamma_dot"
},
{
"path": "docs/source/includes/linear/src/assembly/dvinddzeta.rst",
"chars": 76,
"preview": "dvinddzeta\n----------\n\n.. automodule:: sharpy.linear.src.assembly.dvinddzeta"
},
{
"path": "docs/source/includes/linear/src/assembly/dvinddzeta_cpp.rst",
"chars": 88,
"preview": "dvinddzeta_cpp\n--------------\n\n.. automodule:: sharpy.linear.src.assembly.dvinddzeta_cpp"
}
]
// ... and 695 more files (download for full content)
About this extraction
This page contains the full source code of the ImperialCollegeLondon/sharpy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 895 files (13.9 MB), approximately 3.7M tokens, and a symbol index with 2387 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.