-
Notifications
You must be signed in to change notification settings - Fork 112
Simple Mass Component #810
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
szoppelt
wants to merge
170
commits into
OpenMDAO:main
Choose a base branch
from
szoppelt:final_mass_branch_updated
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 161 commits
Commits
Show all changes
170 commits
Select commit
Hold shift + click to select a range
e5c400b
Add files via upload
szoppelt bf0331e
Merge pull request #1 from szoppelt/szoppelt-examples-typos
szoppelt f5403a2
Merge branch 'main' into main
jkirk5 1b09ca1
Merge branch 'main' into main
jkirk5 3a07d3d
Merge branch 'szoppelt-examples-typos' into examples-typos
6874eb8
removed jupyter output cells
bc14ba6
Merge pull request #2 from jkirk5/examples-typos
szoppelt 28386bd
Add files via upload
szoppelt ed26f0c
Add files via upload
szoppelt a8cb4a4
Add files via upload
szoppelt 03ee664
Add files via upload
szoppelt afa6928
Merge pull request #3 from szoppelt/fixing-files
szoppelt 98ce55a
Rename additional_flight_phases.ipynb to aviary/docs/examples/additio…
szoppelt f255033
Create .gitattributes
szoppelt ad19bb0
Delete aviary/docs/examples/additional_flight_phases.ipynb
szoppelt d8f6667
Delete aviary/docs/examples/additional_flight_phases_2.ipynb
szoppelt 74049aa
Add files via upload
szoppelt b579a38
Delete coupled_aircraft_mission_optimization.ipynb
szoppelt 544306b
Delete aviary/docs/examples/coupled_aircraft_mission_optimization.ipynb
szoppelt 1a586cd
Add files via upload
szoppelt 92700d7
Delete aviary/docs/examples/additional_flight_phases.ipynb
szoppelt e342df6
Add files via upload
szoppelt 6e0e6b8
Add files via upload
szoppelt ec9ee45
Delete aviary/docs/examples/additional_flight_phases.ipynb
szoppelt 0304988
Rename additional_flight_phases-2.ipynb to additional_flight_phases.i…
szoppelt f6ac6d2
Add files via upload
szoppelt b8185c1
Delete aviary/docs/examples/coupled_aircraft_mission_optimization.ipynb
szoppelt 19332cc
Rename coupled_aircraft_mission_optimization-3.ipynb to coupled_aircr…
szoppelt 8ef6163
removed local-only filters
6d7468a
Merge branch 'main' into main
jkirk5 31406d3
Testing adding this file for later use.
szoppelt 98ce522
Another test.
szoppelt 381f662
Test.
szoppelt 3164009
Test
szoppelt 9a67145
Test.
szoppelt 11bf0e0
Merge pull request #4 from szoppelt/new-mass-branch
szoppelt dbdee9a
test
szoppelt 93dc6ae
Merge pull request #5 from szoppelt/new-mass-branch
szoppelt 5080065
Create __init__.py
szoppelt a6fe374
new file: aviary/subsystems/mass/simple_mass/__init__.py
szoppelt 133de7b
new file: aviary/subsystems/mass/simple_mass/test_fuselage.py
szoppelt d079930
test
szoppelt 4bb9b25
Merge pull request #6 from szoppelt/new-mass-branch
szoppelt 823228d
renamed: aviary/subsystems/mass/simple_mass/test_fuselage.py -> a…
szoppelt 5dac1cd
Merge pull request #7 from szoppelt/new-mass-branch
szoppelt 5b54053
new file: aviary/subsystems/mass/simple_mass/test/__init__.py
szoppelt ffb0e92
Merge pull request #8 from szoppelt/new-mass-branch
szoppelt a25a59f
Commit.
szoppelt 254547a
Merge pull request #9 from szoppelt/new-mass-branch
szoppelt 0f2bf51
Delete aviary/subsystems/mass/simple_mass/C:UsersszoppeltDesktopwingN2
szoppelt f694d35
Delete aviary/subsystems/mass/simple_mass/# New lump sum payments: $1…
szoppelt 3bcfdf0
Delete aviary/subsystems/mass/simple_mass/import numpy as np.py
szoppelt f89307c
Delete aviary/subsystems/mass/simple_mass/test_quad.py
szoppelt ca8d07d
Delete aviary/subsystems/mass/simple_mass/wingN2
szoppelt 2fb633e
Merge branch 'OpenMDAO:main' into new-mass-branch
szoppelt 476aea3
Merge branch 'main' into new-mass-branch
szoppelt 5d1c940
Merge pull request #10 from szoppelt/new-mass-branch
szoppelt ab07ae7
Merge remote-tracking branch 'upstream/main' into new-mass-branch
szoppelt fabc45b
commit.
szoppelt 3a28290
Merge branch 'main' of https://github.com/szoppelt/Aviary into new-ma…
szoppelt 0f54a13
Merge pull request #11 from szoppelt/new-mass-branch
szoppelt 5b08b4f
Delete aviary/subsystems/mass/simple_mass/test/import os.py
szoppelt a752575
Delete aviary/docs/examples/wingN2.html
szoppelt 8d5d6c7
Delete aviary/docs/examples/wing.py
szoppelt 3a95cf0
Delete aviary/docs/examples/test_wing.py
szoppelt d988607
Delete aviary/docs/examples/tail.py
szoppelt 018d8de
Delete aviary/docs/examples/test_mass_summation.py
szoppelt c9fa3f4
Delete aviary/docs/examples/materials_database.py
szoppelt 53d3016
Delete aviary/docs/examples/Clark_Y.dat
szoppelt bf165f8
Delete aviary/docs/examples/Clark_Y.yaml
szoppelt 2bca1b9
Delete aviary/docs/examples/C:UsersszoppeltDesktop
szoppelt 07004e7
Delete aviary/docs/examples/C:UsersszoppeltDesktoptest.py
szoppelt 3ce8adf
Delete aviary/docs/examples/Custom_Fuselage.dat
szoppelt a0d2e41
Delete aviary/docs/examples/airfoil_data_test.dat
szoppelt 6dfd2d2
Delete aviary/docs/examples/mass_builder.py
szoppelt 860756a
Delete aviary/docs/examples/mass_premission.py
szoppelt da228e4
Delete aviary/docs/examples/fuselage.py
szoppelt 41962bd
Delete aviary/docs/examples/mass_summation.py
szoppelt 33484ad
commit.
szoppelt a13ef2e
Commit.
szoppelt d2ca94c
commit
szoppelt 1b40693
First draft of force resolver.
szoppelt dac43c3
Updates.
szoppelt 2966467
updates.
szoppelt 58eeee6
updates
szoppelt efb7b3c
updates
szoppelt cf33f82
updates.
szoppelt 66d9313
updates.
szoppelt 5cd215d
updates.
szoppelt 6b12740
updates.
szoppelt 886a1ab
Merge remote-tracking branch 'upstream/main' into new-mass-branch
szoppelt 27ae9e7
updates.
szoppelt b514fec
updates.
szoppelt 86a07c4
updates.
szoppelt 6acdcde
updates.
szoppelt 63097e4
updates. test
szoppelt bd62739
test
szoppelt ff491ad
Final updates.
szoppelt 1e44c6a
Final updates.
szoppelt 807a229
Final Updates.
szoppelt b2c9fd3
Delete aviary/subsystems/mass/simple_mass/Clark_Y.dat
szoppelt 966232c
Delete aviary/subsystems/mass/simple_mass/Custom_Fuselage.dat
szoppelt 0abf857
Delete aviary/subsystems/mass/simple_mass/airfoil_data_test.dat
szoppelt faa5486
Delete aviary/subsystems/mass/simple_mass/six_dof_EOM.py
szoppelt ae7b218
Delete aviary/mission/sixdof directory
szoppelt 38c67c5
Updates.
szoppelt a376108
Delete aviary/docs/examples/fuselage_out directory
szoppelt 38e8226
Delete aviary/docs/examples/tail_out directory
szoppelt 1d91038
Delete aviary/docs/examples/wing_out directory
szoppelt 46bc71f
Delete aviary/docs/examples/test_out directory
szoppelt dc00191
Delete aviary/docs/examples/test_wing_out directory
szoppelt efaa013
Delete aviary/docs/examples/test_wing2_out directory
szoppelt 55753ed
Delete aviary/docs/examples/test_fuselage_out directory
szoppelt 8a7bfa9
Delete aviary/docs/examples/test_tail_out directory
szoppelt fa47930
Delete aviary/docs/examples/test_fuselage_dbf_out directory
szoppelt 9560935
Delete aviary/docs/examples/test_tail2_out directory
szoppelt 6205792
Delete aviary/docs/examples/test_fuselage2_out directory
szoppelt 13d3b17
Delete aviary/docs/examples/six_dof_ODE.py
szoppelt a0c5cbe
Delete pyproject_renamed
szoppelt f16ceea
Delete aviary/subsystems/mass/simple_mass/test/test_mass_subsystem.py
szoppelt 35960b8
Delete aviary/subsystems/mass/simple_mass/test/test.py
szoppelt 0a0fbf3
Delete out.txt
szoppelt 9dc278e
Update aviary/subsystems/mass/simple_mass/fuselage.py
szoppelt 5ba6b5b
Update aviary/subsystems/mass/simple_mass/fuselage.py
szoppelt a374579
Update aviary/subsystems/mass/simple_mass/wing.py
szoppelt b8eb933
Update aviary/subsystems/mass/simple_mass/fuselage.py
szoppelt 3ff430b
Update aviary/subsystems/mass/simple_mass/tail.py
szoppelt feaeb88
Update aviary/subsystems/mass/simple_mass/fuselage.py
szoppelt 67f5f76
Update fuselage.py
szoppelt 9e9b1d0
Update aviary/subsystems/mass/simple_mass/mass_summation.py
szoppelt 6fd0d81
Update mass_summation.py
szoppelt 093baa0
Update aviary/subsystems/mass/simple_mass/mass_premission.py
szoppelt 555d280
Update mass_premission.py
szoppelt e3ceffb
Update test_fuselage.py
szoppelt 8c23aab
Update test_mass_summation.py
szoppelt 1a6cc35
Update test_tail.py
szoppelt aff52f2
Update test_wing.py
szoppelt 39f392b
Update aviary/subsystems/mass/simple_mass/mass_builder.py
szoppelt a5baed2
Update aviary/subsystems/mass/simple_mass/mass_builder.py
szoppelt 80c6ffb
Update aviary/subsystems/mass/simple_mass/mass_builder.py
szoppelt 40ad053
Update tail.py
szoppelt ada3042
Update tail.py
szoppelt 8e58ad7
Update tail.py
szoppelt 98de1a2
Update aviary/subsystems/mass/simple_mass/fuselage.py
szoppelt 792327f
Update wing.py
szoppelt 40384a2
Update test_mass_summation.py
szoppelt d2cb426
Update test_tail.py
szoppelt 1f84990
Update fuselage.py
szoppelt 24bf21e
Update tail.py
szoppelt f2123a2
Update wing.py
szoppelt f85f178
Update test_wing.py
szoppelt cc7f7e0
Update tail.py
szoppelt dbce6e6
Update test_tail.py
szoppelt 02308f5
Update test_mass_summation.py
szoppelt 695ec83
Update tail.py
szoppelt 4e6eb13
Update fuselage.py
szoppelt cff723b
Update fuselage.py
szoppelt bbf5b48
Update fuselage.py
szoppelt 96fe4f2
Update tail.py
szoppelt 2aa92ab
Update wing.py
szoppelt 3f0336c
Merge branch 'main' into final_mass_branch_updated
jkirk5 77ab18f
WIP code fixes
jkirk5 9c5c9a6
WIP fixes 2
jkirk5 e0d6530
more bulk fixes
jkirk5 3ccaf6b
docs fixes
jkirk5 dc61d1d
additional docs fix
jkirk5 0c2be8a
more updates to simple_mass components
jkirk5 187410a
wing cleanup
jkirk5 37cd55e
Merge branch 'main' into final_mass_branch_updated
jkirk5 4446a85
Merge branch 'OpenMDAO:main' into final_mass_branch_updated
szoppelt File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,173 @@ | ||
| import openmdao.api as om | ||
| import numpy as np | ||
| from scipy.interpolate import interp1d | ||
|
|
||
| import jax.numpy as jnp | ||
| import openmdao.jax as omj | ||
| import jax.scipy.interpolate as jinterp | ||
|
|
||
| from aviary.variable_info.variables import Aircraft | ||
| from aviary.variable_info.functions import add_aviary_output, add_aviary_input | ||
|
|
||
| try: | ||
| from quadax import quadgk | ||
| except ImportError: | ||
| raise ImportError( | ||
| "quadax package not found. You can install it by running 'pip install quadax'." | ||
| ) | ||
|
|
||
| from aviary.subsystems.mass.simple_mass.materials_database import materials | ||
|
|
||
| from aviary.utils.named_values import get_keys | ||
|
|
||
| Debug = True | ||
|
|
||
| class FuselageMass(om.JaxExplicitComponent): | ||
| def initialize(self): | ||
| self.options.declare('num_sections', | ||
| types=int, | ||
| default=10) | ||
|
|
||
| self.options.declare('material', | ||
| default='Aluminum Oxide', | ||
| values=list(get_keys(materials))) | ||
|
|
||
| self.options.declare('fuselage_data_file', | ||
| types=(Path, str), | ||
| default=None, | ||
| allow_none=True, | ||
| desc='optional data file of fuselage geometry') | ||
|
|
||
| self.options.declare('custom_fuselage_function', | ||
| types=FunctionType, | ||
|
||
| default=None, | ||
| allow_none=True, | ||
| desc='optional custom function generation for fuselage geometry') | ||
|
|
||
| def setup(self): | ||
| self.options['use_jit'] = not(Debug) | ||
|
|
||
| # Inputs | ||
| add_aviary_input(self, | ||
| Aircraft.Fuselage.LENGTH, | ||
| units='m') | ||
|
|
||
| self.add_input('base_diameter', | ||
| val=0.4, | ||
| units='m') # no aviary input | ||
|
|
||
| self.add_input('tip_diameter', | ||
| val=0.2, | ||
| units='m') # no aviary input | ||
|
|
||
| self.add_input('curvature', | ||
| val=0.0, | ||
| units='m') # 0 for straight, positive for upward curve | ||
|
|
||
| self.add_input('thickness', | ||
| val=0.05, | ||
| units='m') # Wall thickness of the fuselage | ||
|
|
||
| # Allow for asymmetry in the y and z axes -- this value acts as a slope for linear variation along these axes | ||
| self.add_input('y_offset', | ||
| val=0.0, | ||
| units='m') | ||
|
|
||
| self.add_input('z_offset', | ||
| val=0.0, | ||
| units='m') | ||
|
|
||
| self.add_input('is_hollow', | ||
| val=True, | ||
| units=None) # Whether the fuselage is hollow or not (default is hollow) | ||
|
|
||
|
|
||
| # Outputs | ||
| add_aviary_output(self, | ||
| Aircraft.Fuselage.MASS, | ||
| units='kg') | ||
|
|
||
| def compute_primal(self, aircraft__fuselage__length, base_diameter, tip_diameter, curvature, thickness, y_offset, z_offset, is_hollow): | ||
| # Input validation checks | ||
| if aircraft__fuselage__length <= 0: | ||
| raise AnalysisError("Length must be greater than zero.") | ||
|
|
||
| if base_diameter <= 0 or tip_diameter <= 0: | ||
| raise AnalysisError("Diameter must be greater than zero.") | ||
|
|
||
| # custom_fuselage_function = getattr(self, 'custom_fuselage_function', None) # Custom fuselage model function -- if provided | ||
| custom_fuselage_function = self.options['custom_fuselage_function'] | ||
|
|
||
| custom_fuselage_data_file = self.options['custom_fuselage_data_file'] | ||
|
|
||
| material = self.options['material'] | ||
| num_sections = self.options['num_sections'] | ||
|
|
||
| self.validate_inputs(aircraft__fuselage__length, base_diameter, thickness, tip_diameter, is_hollow) | ||
|
|
||
| density = materials.get_val(material, 'kg/m**3') | ||
|
|
||
| section_locations = jnp.linspace(0, aircraft__fuselage__length, num_sections) | ||
|
|
||
| aircraft__fuselage__mass = 0 | ||
| total_moment_x = 0 | ||
| total_moment_y = 0 | ||
| total_moment_z = 0 | ||
|
|
||
| interpolate_diameter = self.load_fuselage_data(custom_fuselage_data_file) | ||
|
|
||
| # Loop through each section | ||
| for location in section_locations: | ||
| section_diameter = self.get_section_diameter(location, aircraft__fuselage__length, base_diameter, tip_diameter, interpolate_diameter) | ||
| outer_radius = section_diameter / 2.0 | ||
| inner_radius = jnp.where(is_hollow, omj.smooth_max(0, outer_radius - thickness), 0) | ||
|
|
||
| section_volume = jnp.pi * (outer_radius**2 - inner_radius**2) * (aircraft__fuselage__length / num_sections) | ||
| section_weight = density * section_volume | ||
|
|
||
| centroid_x, centroid_y, centroid_z = self.compute_centroid(location, aircraft__fuselage__length, y_offset, z_offset, curvature, base_diameter, tip_diameter) | ||
|
|
||
| aircraft__fuselage__mass += section_weight | ||
| total_moment_x += centroid_x * section_weight | ||
| total_moment_y += centroid_y * section_weight | ||
| total_moment_z += centroid_z * section_weight | ||
|
|
||
| return aircraft__fuselage__mass | ||
|
|
||
| def validate_inputs(self, length, base_diameter, thickness, tip_diameter, is_hollow): | ||
| if length <= 0 or base_diameter <= 0 or tip_diameter <= 0 or thickness <= 0: | ||
| raise AnalysisError("Length, diameter, and thickness must be positive values.") | ||
| if is_hollow and thickness >= base_diameter / 2: | ||
| raise AnalysisError("Wall thickness is too large for a hollow fuselage.") | ||
|
|
||
| def load_fuselage_data(self, custom_fuselage_data_file): | ||
| if custom_fuselage_data_file: | ||
| try: | ||
| # Load the file | ||
| custom_data = np.loadtxt(custom_fuselage_data_file) | ||
| except FileNotFoundError as e: | ||
| raise FileNotFoundError(f'Fuselage data file {e}') | ||
| else: | ||
| fuselage_locations = custom_data[:, 0] | ||
| fuselage_diameters = custom_data[:, 1] | ||
| return jinterp.RegularGridInterpolator(fuselage_locations, fuselage_diameters, kind='linear', fill_value='extrapolate') | ||
| else: | ||
| return None | ||
|
|
||
| def get_section_diameter(self, location, length, base_diameter, tip_diameter, interpolate_diameter): | ||
| if options['custom_fuselage_function'] is not None: | ||
| return options['custom_fuselage_function'](location) | ||
| elif self.load_fuselage_data and interpolate_diameter is not None: | ||
| return interpolate_diameter(location) | ||
| else: | ||
| return base_diameter + ((tip_diameter - base_diameter) / length) * location | ||
|
|
||
| def compute_centroid(self, location, length, y_offset, z_offset, curvature, base_diameter, tip_diameter): | ||
| centroid_x = jnp.where(tip_diameter / base_diameter != 1, (3/4) * location, location) | ||
| centroid_y = y_offset * (1 - location / length) | ||
| centroid_z = z_offset * (1 - location / length) + curvature * location**2 / length | ||
| return centroid_x, centroid_y, centroid_z | ||
|
|
||
|
|
||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,29 @@ | ||
| from aviary.subsystems.mass.mass_builder import MassBuilderBase | ||
| from aviary.subsystems.mass.simple_mass.mass_premission import MassPremission | ||
|
|
||
|
|
||
| """ | ||
| Define subsystem builder for Aviary simple mass. | ||
|
|
||
| Classes | ||
| -------- | ||
| SimpleMassBuilderBase: the interface for the simple mass subsystem builder. | ||
| """ | ||
|
|
||
| _default_name = 'simple_mass' | ||
|
|
||
| class SimpleMassBuilder(MassBuilderBase): | ||
| """ | ||
| Base mass builder | ||
|
|
||
| """ | ||
|
|
||
| def __init__(self, name=None): | ||
| if name is None: | ||
| name = _default_name | ||
|
|
||
| super().__init__(name=name) | ||
|
|
||
| def build_pre_mission(self, aviary_inputs): | ||
| return MassPremission() | ||
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,31 @@ | ||
| import openmdao.api as om | ||
|
|
||
| from aviary.subsystems.mass.simple_mass.wing import WingMassAndCOG | ||
| from aviary.subsystems.mass.simple_mass.fuselage import FuselageMassAndCOG | ||
| from aviary.subsystems.mass.simple_mass.tail import TailMassAndCOG | ||
|
|
||
| class SimpleMassPremission(om.Group): | ||
| """ | ||
| Pre-mission group of top-level mass estimation groups and components for | ||
| the simple small-scale aircraft mass build-up. | ||
| """ | ||
|
|
||
| def setup(self): | ||
|
|
||
| self.add_subsystem( | ||
| 'Wing', | ||
| WingMass(), | ||
| promotes_inputs=['*'], promotes_outputs=['*'] | ||
| ) | ||
|
|
||
| self.add_subsystem( | ||
| 'Fuselage', | ||
| FuselageMass(), | ||
| promotes_inputs=['*'], promotes_outputs=['*'] | ||
| ) | ||
|
|
||
| self.add_subsystem( | ||
| 'Tail', | ||
| TailMass(tail_type='horizontal'), | ||
| promotes_inputs=['*'], promotes_outputs=['*'] | ||
| ) |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Initial guess for time is now duplicated here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe this can be ignored if possible. This was from way earlier in my fork when there were issues with initial guess time, but they were resolved back in January. Not sure why those changes were still in this commit.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Git merge can get confused sometimes, I haven't figured out exactly what triggers it to think an old version of a file is actually a "new" change it should keep
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since this PR is mostly new files, it might be easiest to just create a new branch from
mainand just copy the new files into it.