[16:19:08] NASSP Logging has been started by thymo [16:19:13] Guenter! [17:27:15] Guenter's back! yay. [17:28:38] morning! [17:32:36] hey Mike [17:47:53] what's up? [17:52:22] just work. haven't been up to much apollo stuff recently [17:52:24] what about you? [17:55:37] what about you? [18:21:24] not too much. I've got a bunch of projects that I'm kind of taking a break from. mostly focusing on small things at the moment [18:24:35] one of my work projects is taking me very close to some real-time C programming, which is quite fun. [18:25:34] oh nice :D [13:01:48] good morning [13:02:47] hey [13:03:16] have you checked your PR after CM/SM sep? [13:03:47] in my sensor update I had to "unwire" the sensors for that case [13:04:11] because the SM systems aren't really getting deleted [13:04:14] just disconnected [13:05:35] that's possibly missing from your previous PR, too [13:05:47] CheckSMSystemsState in satsystems.cpp [13:05:58] that's where a lot of stuff is disconnected [13:06:02] at CM/SM sep [13:11:19] previously in GetTankQuantities it checked [13:11:24] if (stage >= CM_STAGE) [13:33:04] ahh. I seem to have missed that [13:46:20] I'm also not sure about your [13:46:22] dt *= oapiGetTimeAcceleration(); [13:46:24] addition [13:46:41] wouldn't it be better to replace oapiGetSysTime with oapiGetSimTime [13:48:11] and why is mass = space.GetMass(); in h_Tank::refresh necessary? [13:48:19] does that mass get desynced somehow? [14:19:18] Thymo, you requested some changes to the "Generalize usage of IsVessel" pull request and I think Gondos did the changes. Was there anything left to do? [14:59:59] I will take a look at both of those in a bit [15:01:01] I'm sure you added the " mass = space.GetMass()" for a reason. I just don't know the reason :D [15:56:08] I think I got confused about that, added it for testing, and forgot to take it out [15:56:36] mass gets updated when the flow functions are called [15:57:00] so not needed [15:58:38] ah ok [16:15:42] okay, the other sensors should be fixed now [16:29:43] oapiGetSimTime definitely works better [17:00:37] https://github.com/orbiternassp/NASSP/commit/af6db62862a4d9951ae8cc7f584db50e94a26c43 [17:00:56] maybe there was some issue with Orbiter 2005 that necessitated that [17:43:22] morning! [18:05:05] hey Mike [18:23:23] hey [18:29:26] yeah strange with the oapiGetSimTime vs oapiGetSysTime [18:31:11] must have been a first timestep thing [18:31:35] if only we could search the old forum for those terms, I bet we would get an answer [18:32:54] but I am happy with that change [18:34:02] I have changed the title of your PR to say that this change is in there [18:34:15] in case we need to track this change down when something is broken with it after all [18:34:37] merged [18:35:42] double digit open pull requests is annoying me slightly haha, I am trying to get it down [19:35:36] I need to work on getting my other 3 cleaned up. [20:00:02] my 2 are a bit hopeless as well [20:00:46] I still don't fully trust the RR inertial thing. it's not just in slew, also when the LGC designates the RR I had it twice that it got stuck [20:01:16] because it must have not expected the RR to move on its own in some way. That needs a lot more digging why it happened [20:02:01] and the cue cards were almost done, but there is a problem with fine tuning positions. Our CSM VC doesn't have the right proportions everywhere [20:02:14] and the only satisfying fix is to change the VC instead of the cue cards [20:02:36] so no idea when we are making progress with those :D [10:48:19] Morning [11:36:26] hey Gondos [11:36:56] I merged your roll indicator update [11:37:22] oh, nice [11:37:29] and for your "Generalize usage of IsVessel" pull request, Thymo was the one looking at that, so I am sure as soon as he has a chance he will merge that as well [11:37:40] did you see a performance impact on your hardware? [11:37:54] ok, thx for the update [11:38:39] I'm looking at the sprintf_s thing [11:39:08] haven't really checked for performance on that actually [11:39:15] but there is a lot of thing that would need changing beside the MS extension [11:39:44] somethime there are sprintf just to have a char * instead of a const char * I think [11:39:46] I am maxed out anyway haha, would have to uncheck V-Sync for performance testing :D [11:39:51] sometimes a const char * would do the job [11:39:57] lol [11:40:27] I am definitely a mass user of sprintf, in the MCC and the MFDs [11:40:40] I always used sprintf, but there were some bugs I couldn't really explain [11:40:54] that I thought might be caused by unsafe char arrays [11:41:07] that's when I started using sprintf_s, but not always [11:41:08] I wonder if doing a sketchpad Text helper to add format support would really lessen the need for sprintfs [11:41:47] yeah, it's really a mess^^ [11:42:19] lots of sprintf where a simpler strcpy would do the job [11:42:56] and lots of places where std::string would be better [11:46:22] std::string can perform memory allocation behind the seen so it would need some profiling [11:47:00] I would be fine with reverting to sprintf actually. The main advantage of using sprintf_s for me was hard crashes when something went wrong, which I could better debug [11:47:13] but it shouldn't be getting in that situation in the first place [11:47:18] yep [12:00:46] addMessage("You can has PAD"); [12:00:48] lol [12:03:04] dseagrav kind of added that as a placeholder. Never felt the need to change it haha [12:05:16] I think there is a dependency issue, sometimes the compilation fails "cannot find PanelSDK.lib" [12:05:31] happens once in a while [12:06:06] I've noticed that. It's rare, maybe only with rebuilds or so, but it does happen yeah [12:11:58] ok [12:16:14] BTW I wanted to try the CueCards branch [12:16:38] tried some scenarios but nothing showed up [12:16:56] is it still too much WIP? [12:17:29] there should be a bunch of clickspots that work [12:17:38] unless I forgot to include some files [12:17:55] also don't forget about the Orbiter clickspot bug when multiple VCs are in the simulation [12:18:04] so you have to switch views once or you can't click anything [12:18:49] but the version on Github should work. Click around on multiple velcro spots, especially around the DSKY [12:20:24] ah so you click the vlecro and the cards pops up? [12:20:33] yes [12:20:45] was expecting the cards to show on the 3D view directly... [12:20:49] in most spots there are multiple cards you can put there [12:20:52] oops^^ [12:20:55] so you cycle through them [12:21:05] ok, I'll try that later [12:21:29] the cue cards were very much up to the crews [12:21:54] some didn't find specific cards very useful and didn't use it much [12:22:25] also, some of the cards are only good for certain mission phases and actually block switches or lights [12:22:42] like the card for SPS burns, it's over the launch vehicle lights [12:24:08] so you definitely don't want to have that card during launch :D [12:25:48] hehe [13:24:54] hey guys [13:29:26] h [13:29:27] i [13:34:29] indy91, did anything change in the telemetry client wrt FC nitrogen pressure scaling with the last update? [14:30:20] uhh [14:30:48] no [14:35:41] re [14:36:13] I.m trying to see if the fmt lib can be used, I did a sample on MCC : https://github.com/orbiternassp/NASSP/commit/e410e6e287845584dd6773416bd550e5adc0c8e1#diff-fbcc682914be9519723bd4e392e3becb13db6714395927976862369bdb5e7eec [14:36:53] what do you think? [14:41:50] looks clean [14:42:54] yeah a bit cleaner, I'm more worried about memory allocations [14:43:21] I don't know if the code is called every frame or just when the PAD changes [14:43:49] when the PAD actually gets drawn [14:43:56] so when it first comes up [14:44:07] and then, if you display it again [14:44:21] so not every timestep [14:44:28] ok so no problem if there are a few allocation then [14:45:14] what is the advantage of this over sprintf? [14:45:23] the shame is that there is an API to use user allocated memory but it's not compatible with printf formated strings... [14:46:05] main advantage is the buffer size is handled by the lib so no memory overflow possible [14:46:57] there are lots of sprintf with MFDs [14:47:10] and those are called not every timestep, but often enough [14:47:15] understatement^^ [14:47:17] usually every 0.1s [14:48:17] maybe we should just go back to the normal sprintf and be careful with memory ourselves [14:48:26] I'm always a bit skeptical with external libraries like this [14:49:01] me too, that's why I wanted to do a test [14:50:56] I have no issue using good old sprintf [14:51:35] as long as the inputs don't come from outside my computer at least :p [14:53:33] also did this as prep work : https://github.com/TheGondos/NASSP/commit/1741882ea17099c27532dbdc3070e759a8428c5e [14:53:52] minor change just to remove a few sprintf calls [15:10:08] that's the kind of change again where I am not comfortable approving it myself, but will ask Thymo or dseagrav to take a look at it [15:10:40] especially in addMessage, I have no idea what that does haha [15:10:53] arf [15:18:27] I understand less sprintf == good [15:18:29] :D [15:18:45] less possibilities for things to go wrong [15:18:56] although, we have some rare MCC PAD CTDs [15:19:15] at this point I want to blame them on the DX9 Client or Orbiter itself more than NASSP [15:19:25] maybe some annotation bug [15:19:48] but in the end it's probably some memory unsafe thing NASSP does... [15:19:57] ok, I'll keep the standard sprintf then [15:20:24] but I think I'll add helpers to remove the clutter around skp->Text [15:20:56] stuff like that is ridiculous : [15:20:58] sprintf_s(Buffer, "%s", GC->rtcc->GOSTDisplayBuffer.err.c_str()); [15:20:59] skp->Text(1 * W / 2, 25 * H / 26, Buffer, strlen(Buffer)); [15:21:40] clutter is basically the definition of my RTCC MFD code [15:21:56] a simple function like that clears up some of the mess: [15:21:58] it's so easy to just copy and paste things I have already done [15:21:58] void skpText(oapi::Sketchpad* skp, int x, int y, const std::string &str) { [15:21:59] skp->Text(x, y, str.c_str(), str.length()); [15:22:00] } [15:22:08] yeah, that makes a lot of sense [15:22:40] hehe, I understand don't worry [15:23:20] the best thing I have ever done was to add generic input methods for double, integer and GET [15:23:44] before that I had to add three(!) functions for every MFD button that inputs some number [15:24:47] And that was even with the MFD buttons class from the LaunchMFD [15:25:14] Orbiter MFD code doesn't scale that well on its own if you get to 100+ MFD pages... [15:26:42] lol, I don't think it was intented to do that [15:48:28] there are several senses in which Orbiter MFDs don't scale well haha [16:02:20] https://github.com/TheGondos/NASSP/commit/e22de8b2b81334f2bc590f565b7908c00e47437d#diff-67b1fa4a7b00f8a3489a4f8013a550bdf300dcef0d62281a179607fd09c4fb67 [16:03:16] dry run looks like that [17:16:14] Gondos_, yeah I think that is a change I was considering doing at some point as well, don't know why I never did it [17:16:49] just cutting down on the number of lines of code would be good [17:18:00] ok, I'll do it for the MFD, we'll see from there if it's worth doing it elsewhere [18:42:16] man, so many ft/s NM comversion [18:42:47] crazy Americans with their imperial metrics, a miracle they didn't ran out of fuel halfway to the moon^^ [15:49:50] hey [17:24:48] morning! [17:29:52] what's up? [17:30:33] should be getting a LM-2 AOH vol 1 today [17:30:56] hoping it has more DFI / progamer stuff than the LM-3 one :) [17:31:43] Spider: "What's a programer?" [17:31:57] heheh [17:35:24] what are you up to? [18:00:42] eating dinner, preventing me from answering you immediately [18:00:56] haha [18:00:59] I actually reorganized the code of my AGC padload generator a bit [18:01:23] the only remaining things to do is making the GUI a bit prettier and figuring out license stuff [18:01:50] I am using Orbiter code, but that's what I all pushed into one file, with the same MIT license header as Open Orbiter [18:02:19] the old code from Jarmonik is a bit more tricky [18:02:25] I did a total rewrite really [18:02:44] oh nice :D [18:04:05] I didn't think much of the GUI when I had to quickly add support for the flown Luminary 131 [18:04:21] when I realized that we are actually getting that first [18:04:40] before Comanche 67 [18:12:21] hehehe [18:12:30] man I really hope Comanche 67 is only like a month or so away [18:15:05] by then our checklists might be done [18:15:19] and then I'll fly to check out Comanche 67 [18:15:23] the mission* [18:15:28] :D [18:15:32] so the mission should have good support in NASSP then [18:15:40] excellent [18:15:56] wasn't really my intention to support 12, but I guess that's what we get by not progressing quickly towards a NASSP 8 release [18:16:15] man depending on timing I might have a perfect storm of software to deal with soon. 3 LVDC listings and Comanche 67 all showing up at roughly the same time [18:16:17] hah yeah [18:16:37] it's been a while since 7 now [18:16:49] how long was it between 6 and 7? [18:17:27] uhh [18:18:00] I think 7 was in early, maybe January 2017 [18:18:18] there were various NASSP 6 release, I think it got up to 6.4.3 or something like that [18:18:53] yeah, looks like NASSP 6.4.3 patch was release in June 2006 [18:19:01] ever since then it was NASSP 7 Beta [18:19:16] oh wow [18:19:35] so we're nowhere near that bad for NASSP 8 taking a while haha [18:19:51] nope lol [18:20:21] I started out in mid 2014, only with the RTCC MFD at first [18:20:36] development was very slow then [18:21:21] the LVDC++ was really coming together, but everything else had stalled for a few years basically, due to Apollo 7 targeting issues mostly [18:21:49] so you could say we are almost as bad, because there was been constant development for 6 years now :D [18:21:54] has* [18:23:09] hahahaha that is a good point [21:41:05] night! [15:57:02] hey Nik [15:57:33] hey [16:23:20] is Ryan having some trouble with your new code for the cryo tanks, or is what he is seeing normal behavior? [16:30:43] did he post anything on Discord since last night? [16:30:52] I don't have it on mobile anymore [16:33:16] since he launched Apollo 12 I mean [16:33:35] the pressure fluctuations, I think he first talked about it 2 days ago or so [16:33:49] maybe when he repressed the LM or so [16:34:58] ahh [16:34:58] I fixed that. [16:35:00] we had the wrong critical pressures in hSystems.h [16:35:02] bad unit conversion between Pascals , Bar, and PSI [16:35:06] aaaah [16:35:13] yeah, that is the part that I missed [16:35:26] I guess I saw the commit for that fix though [16:35:33] I had fixed it in my Matlab code, but not in this branch [16:36:19] oxygen was condensed at like 50 psi [16:38:40] the cryo tanks are more sensitive to temperature than they were before, that's definitely true [16:39:13] but they seem to match the AOH phase plots quite well [16:43:44] as long as we stay below 200ish bar and, 1000K I think this model is a good compromise [16:55:50] I might need to make the "Boiler" class a bit more realistic [16:58:05] right now it's either full throttle or off. maybe adding some simple option for a ramp rate in the config file would probably do it [17:43:42] what is the boiler class used for [17:43:56] heaters and/or fans? [17:58:18] yeah, it's our eSystem generic heater [18:01:23] morning! [18:07:10] hey Mike [18:40:23] hey Mike [19:13:31] .tell indy91 https://gist.github.com/n7275/fdb46bb22eee1d8c3f8100108e9ff798 [16:16:30] evening [16:27:06] hey [16:28:19] I played with the sprintf stuff but the result is quite a ;onster to merge... [16:28:31] https://github.com/orbiternassp/NASSP/compare/Orbiter2016...TheGondos:NASSP:strings_rework [16:29:41] I tried to start replacing the sprintf with strcpy where possible to limit the work but it kinda got out of control... [16:31:09] haha [16:31:12] what is debugString() [16:31:18] I only know oapiDebugString() [16:33:41] not sure the strcpy stuff is worth it, it makes a lot of noise [16:34:02] in some cases you changed char array to string [16:34:03] harder to focus on the real changes [16:34:07] yes [16:34:09] but in other cases [16:34:13] char PGNS_Veh[8]; [16:34:18] to [16:34:20] const char *PGNS_Veh; [16:34:44] const char * when the string is only "driven" by code [16:35:05] so cannot take other values [16:35:33] so doing [16:35:36] res.PGNS_Veh = "CSM"; [16:35:39] is fine memory wise [16:35:44] even when done multiple times? [16:36:07] yes, "CSM" is just a pointer to readonly memory segment [16:36:35] ok. I'm never trusting myself with pointers enough to do it that way haha [16:37:12] how do you like rtcc.h, the world record holder of the most structs defined in a single file lol [16:39:33] lol [16:39:34] most of these changes are quite simple, will just be very time consuming to verify for no bugs [16:39:45] yeah, that is my fear [16:39:49] and I still have to learn how your fmt code works [16:40:55] it's basically an snprintf which returns a pointer to the buffer so you can do things like this : [16:40:57] annotation += fmt(buffer, "%02o %05d\n", i+2, form->Data[0][i]); [16:41:08] what I already don't like is that skpTextFmt does a "char buf[512]" [16:41:31] skpTextFmt would be called a lot of times possibly per MFD display timestep [16:41:41] hehe [16:41:43] in the current code it only has to define such an array once [16:41:57] it's in the stack [16:42:16] so it's just an "add esp,512" in the end [16:42:37] you will have to dumb that down for me [16:43:01] does it no reserve a fresh char array of size 512 every time you call the function? [16:43:05] not* [16:43:21] no, it's allocated in the stack [16:43:34] how [16:44:04] it reserves the space in the stack by adjusted the stack pointer (esp on x86 CPU) [16:44:26] and when the function returns, the stack pointer is set back to its original value before calling the function [16:44:27] I can tell you for sure that I have managed to make NASSP come to a crawl by accidentally defining a large char array every timestep [16:45:02] in the stack? [16:45:08] stack doesn't mean much to me lol [16:45:37] malloc and new requires heavy memory management [16:45:39] I'm an end user C++ developer, I dont understand what happens behind the curtain [16:46:30] but stack allocation is really fast [16:47:10] only drawback is that it's usually limited, you cannot reserve megabytes like that [16:47:25] and it vanishes when you exit the function [16:48:24] the alternative is passing the Buffer as another parameter [16:48:34] it will start to get messy [16:49:32] back in a bit [17:11:16] hey guys [17:12:11] hi [17:21:49] hey Matt [17:21:59] "passing the Buffer as another parameter" yeah that is what I would usually do [17:45:06] morning! [18:07:41] hey [18:07:56] what's up? [18:08:14] my AOH folder is getting too large [18:08:49] the worst one by far is the Apollo 13 one for the LM, from the AFJ [18:08:54] 650 MB [18:09:50] yeah that is excessive :D [18:11:41] and not even OCRed [18:12:29] waaaaaaait a minute [18:12:35] it's not Volume 2 [18:12:37] but [18:12:49] it has more FP7 addresses than I knew before, I think [18:13:57] oh nice :D [18:14:32] yeah I was going to mention, the LM-2 one has some AEA addresses for whatever flight program existed when it was written [18:17:50] sadly it is FP6 addresses [18:17:57] despite the change date of 1 February 1970 [18:18:18] oh that's lame [18:18:20] one features they added in FP7 is the second descent abort phase [18:18:23] feature* [18:18:32] and 673 became one of the numbers for it [18:18:40] but the AOH still says it is the FP6 one [18:19:40] the AOH lists the padloaded scaling factors [18:19:48] which were not in the G&N Dictionary [18:19:58] those addresses are quite crucial for a possible FP7 reconstruction [18:20:04] at least for the erasable memory part of that [18:20:13] but yeah, they are still like FP6 [18:21:20] in the AOH, in FP7 something has to have changed there [21:45:39] night! [14:51:37] hey [14:52:28] hey Matt [14:53:28] we don't have too many Boilers, do we? [14:53:56] always being concerned about performance I don't want to add too many "exp" that run on every timestep haha [14:54:04] just a few [14:55:01] yeah that's totally fine [14:55:06] I checked your script, nice graph [14:55:23] I guess the behavior makes sense, heating up taking time and such [15:02:07] and that should only run on Boilers that are explicitly told to in the config [15:04:12] ah [16:26:13] what projects are you working on these days? [16:32:39] hi [16:34:42] hi Gondos [16:36:49] I've reconsidered the sprintf_s thing, I may as well provide an sprintf_s clone function when compiling on linux since the fmt one is almost that already [16:37:31] that leaves only sscanf_s which is quite trivial to handle [16:41:15] hey [16:41:24] oh I barely added any sscanf_s, I think [16:43:07] yes it's less extensive a change [16:43:11] n7275, nothing for NASSP really at the moment. The AGC padload generator is basically done and my XRSound branch is what I should take a look at. It works, but it has compiler warnings I don't fully understand [16:43:33] cue cards are stuck [16:43:49] also creating a clone of sprintf_s is much easier than cloning sscanf_s [16:43:52] RR inertial slew is stuck until I do a deep dive into why RR coarse align sometimes fails now [16:44:18] in that branch [16:45:49] for the cue cards, we need some mesh changes to the VC right? [16:46:40] yeah a bunch of them don't fit because the VC doesn't have the right dimensions everywhere [16:47:32] and I think if we do a VC update now the texture update from Jordan becomes kind of unmergable. Or at least there could be problems [16:48:06] that branch has a lot of changes to the VC mesh, too, I didn't quite understand why [16:48:59] I should just withdraw into the RTCC world, I don't understand enough about the rest anyway :D [16:49:01] probably a case where we need to be very careful about the order in which things are done [17:02:54] Gondos, I guess %15s limits the input to 15 characters? [17:03:25] it should read all the characters but truncate when writing to the buffer [17:04:05] ah ok [17:04:17] I'm checking, but I think the valid inputs there are all 3 characters [17:04:22] so that will be fine [17:04:44] twas doing that already with sscanf_s :p [17:05:18] no? [17:05:38] not according to the diff [17:05:43] https://github.com/orbiternassp/NASSP/pull/912/files [17:06:26] I don't remember at all using countof, but I guess it must be standard with sscan_f [17:06:45] sprintf_s as an extra argument (unsigned)_countof(buff) to specify the buffer size [17:07:47] but I stand corrected, the man page states this : "The input string stops at white space or at the maximum field width, whichever occurs first0,00" [17:09:04] so it will stop reading and the next arguments will probably be crap [17:09:15] but no buffer overflow^^ [17:12:57] that static_assert doesn't hurt I guess, but probably not that necessary [17:13:45] I've put it because the buffer is declared far away from the sscanf [17:13:58] right [17:14:07] the other cases it's defined just above [17:14:35] text I/O is so much fun... [17:15:11] this seems simple enough, I can merge it [17:16:42] done [17:16:51] not the sprintf_s kind of breakthrough yet, but still a good step haha [17:22:34] hehe [17:40:27] Hi [17:40:48] hi [17:42:27] Gondos Have you given up working on the Linux Orbiter port? [17:49:21] nope [17:49:54] but right now I'm concentrating on NASSP [17:50:03] to limit the difference between the two [17:50:14] I cannot maintain a fork by myself [17:50:36] morning! [17:51:20] hi [17:51:21] evening :-D [17:51:56] Gondos https://github.com/Jordan-64/NASSP/tree/CaseSensitiveFileNames Can you check this? [17:52:38] hey Mike and Jordan [17:53:23] Hi Indy [17:54:15] kind of a monster to merge^^ [17:54:50] that's the specialty of you two, monsters to merge :P [18:06:54] This is a step that must be done sooner or later. No matter how monstrous it is. This will not be an small step for mankind :-D [18:34:06] thewonderidiot, https://www.ibiblio.org/apollo/Documents/LMA790-3-LM-4.4.pdf last page [18:34:11] getting my hopes up Part II [18:34:37] oh do you think those are FP7? [18:34:51] let me check... [18:36:13] well it seems like yes [18:36:20] I have to dig into it [18:36:27] I thought for sure the scaling factors had to move [18:36:58] hell yeah :D [18:39:11] I forget so quickly... [18:51:33] hmm yeah, I don't really know yet [18:51:42] less has changed than I thought [18:56:05] hmmm [18:56:21] so do you think this was written for some intermediary between FP6 and FP7 or something? [18:56:34] or just that FP7 is more similar to FP6 than anticipated? [18:57:30] the second [18:57:41] less erasable reshuffle required than I thought [19:03:09] not sure if there is a page missing or if they had to squeeze in an extra page [19:08:02] or two pages missing, there is a jump in erasable addresses [19:08:08] of course where things get really interesting [19:09:48] but that the scaling factors haven't shifted is already a good discovery [19:14:18] oh no... [19:14:40] LM-11 AOH has another curveball [19:14:45] it has an error [19:14:57] variable name vs. variable description doesn't fit [19:15:05] but it could hint at something in FP7 [19:15:16] could :D [19:18:59] oh man [19:24:58] and yeah, I am pretty sure there are two missing pages there [19:25:11] which would hold the key for where the covariance matrix has partially shifted [19:25:13] sigh [19:25:30] because I know now that the last third of it hasn't shifted [19:25:34] in FP8 it's all over the place [19:25:39] in FP6 it's still all together [19:26:33] ah wait, I talk nonsense [19:26:44] in FP8 it has just shifted somewhere else entirely [19:26:51] I was thinking of the scaling factors [19:27:03] those are together in FP6 and all over the place in FP8 [19:27:12] but apparently still all the same as FP6 in FP7... [19:34:55] the links page says Fabrizio sent those in... you could try emailing him and asking if he still has access to that document, and if those pages are really missing [20:00:10] ah yeah, I might try that [20:01:16] even if I don't figure this out, I could probably create a FP7ish eventually [20:01:58] it's just specific locations of erasables you never access manually anyway [20:02:29] the stuff in "fixed" memory needs to be shifted around as I had some overflow warnings when building [20:02:39] but it has the code that needs to be there, probably [04:09:36] .tell Max-Q hi we're usually most active between late morning and 5pm ish, east coast US time. [14:19:58] hey [14:28:12] hey Matt [15:09:54] every time I try tuneing [15:10:02] valve size [15:10:19] s/tuneing/tuning [15:17:24] I forget that they get saved in the scenerios [15:18:27] aaaaah [15:18:34] yeah that's annoying [15:18:42] we have variable size valves, so... [15:18:45] not much you can do [15:21:14] I had a thought this morning. when we make the jump to OpenOrbiter, most of our users are likely going to make a new install...so they won't be in the middle of a mission [15:21:39] might be a good opportunity to push through a bunch of breaking changes [15:22:56] yeah but what about my scenarios? :D [15:29:32] I wouldn't want any changes that make old scenarios unable to load [15:29:53] but I am fine with doing a bunch of updates that break them like your systems change [15:31:31] yeah, that's all I'm talking about. I'll even make update scripts, like last time. [15:33:09] sounds good [15:33:19] I think this weekend I will look at the XRSound branch again [15:47:23] cool [16:31:17] hey Ryan [16:45:14] evening [16:46:40] hello [16:47:12] hey [16:57:14] trying to get rid of GetModuleHandle using but there is this debugString thing [16:57:19] is it still useful? [16:58:02] looks like it's used to output debug messages in the MFD [17:01:11] I've never really looked at that [17:01:19] I only see 2 GetModuleHandle in all of NASSP, is that right? [17:02:47] it's used to GetRenderViewportIsWideScreen [17:03:13] for some 2D panels we have different bitmaps for different aspect ratios [17:05:05] for the debug thing, it just checks of the PAMFD is enabled and if not it shows that message? [17:05:10] if* [17:06:33] getrenderviewportiswidescreen can be computed with an oapi call : https://github.com/orbiternassp/NASSP/commit/fc0246a2e038e2610c784b2b1f2eb5abefac922b [17:06:42] (from my linux branch) [17:08:14] probably old code [17:08:24] oapiGetViewportSize might have been a thing when this was implemented [17:08:26] the debugString is shown somewhere in the PAMFD [17:08:54] it's shown in the Saturn class [17:08:59] if you don't have the PAMFD enabled [17:09:22] it's mostly in csm_telecom when there are invalid measures : sprintf(sat->debugString(),"MEASURE: UNKNOWN 11-A-%d",ccode); [17:09:42] oh [17:10:26] it shows in the MFD instead of an overlay as with oapiDebugString [17:30:10] lol, I tried compiling with /Wall, it crashed visual studio^^ [17:41:58] Hum, in LOITargeting.cpp there is a warning on this : if (opt.psi_DS = opt.psi_mn && opt.psi_DS == opt.psi_mx) [17:42:20] shouldn't it be opt.psi_DS == opt.psi_mn? [17:45:47] uhhhhhhhh [17:46:07] absolutely [17:46:49] that's a mistake that I do way too often [17:46:51] I'm doing a pass with warning enabled, I'll do a PR if there are stuff like that... [17:47:00] sure [17:47:10] doesn't look like there was much harm, as opt.psi_DS isn't used afterwards [17:47:26] but definitely needs to be fixed [17:48:59] https://i.imgur.com/7qxaVLp.png [17:49:14] does that look like anything gets assigned? No :D [17:49:53] what is the effect of that? [17:50:10] nothing luckily [17:50:23] this is in the last step of the LOI calculation, some numbers for display [17:50:35] opt.psi_DS isn't used afterwards [17:50:36] ahh [17:50:46] and you are rarely changing these numbers anyway [17:51:02] lol [17:52:03] LOI_psi_DS is loaded from a RTCC configuration file [17:52:21] and the min/max values are automatically assigned 1 degree less and more than it [17:52:47] and the LOI options are being copied [17:53:02] so next time you call the function the psi_DS value is as was input again [18:02:22] the LOI targeting is my RTCC crown jewel. Full implementation using the original documentation. Display looks exactly the same, too. Can't have any bugs in there, even small ones :D [18:21:54] :) [19:25:13] good news, haven't found other such bugs in the projects [19:47:55] great [21:42:56] night! [15:18:31] hey [15:58:42] hey hey [19:17:24] I seem to remember having a bunch of trouble, cooling the fuel cells with a glycol loop back when I was working on that in early 2021...for the life of me I can't remember what my issue was though [19:20:31] a large number of tanks in a loop seems to be a problem, iirc. I think I want to avoid doing that again for performance reasons. [19:36:34] maybe the chatlog remembers? [19:36:51] tanks in a loop with large valves between them is certainly a problem [19:50:36] yeah, I'll do some searching [15:29:26] hello [15:51:31] hey Matt [15:59:55] ECS is always trouble... [16:13:07] Yeah...I suspect that my changes are partly to blame here too. It's very possible that I've overlooked something [16:13:40] the dumber the bug, the easier the fix [16:41:41] our repress package is a little over 16 litres, I think my first project is going to be tracking down a source for that [21:33:51] needless to say, I didn't quite get to look at the XRSound branch after all.. [21:33:55] good night! [15:57:53] hey [17:40:20] morning! [17:43:34] what's up? [17:44:33] not a whole lot. I've been taking it easy recently, anticipating a ton of upcoming work between Comanche 67 and the LVDC listings [17:44:46] what about you? [17:45:50] Ryan keeping me on my toes with Apollo 12 and flying a bit of SSV :D [17:45:59] those other LVDC listings, are they for sure listings? [17:46:11] I think you mentioned you don't really know what it is? [17:46:17] or they don't [17:46:26] yeah, I don't know what they are [17:46:40] they're LVDC-related and on fanfold paper, is all I know [17:47:03] so could be listings, could be simulation printouts, could be some sort of documentation... [17:47:14] listing is the most likely scenario I think, but it is hard to say [17:47:15] probably something interesting in any case [17:47:24] yeah for sure [17:47:33] and the Comanche 67 timeline is that there is no timeline yet, is that correct [17:48:20] correct. it will probably be done before May [17:48:35] hopefully sooner but no guarantees [17:48:42] alright [17:49:00] so definitely after Ryan finishes Apollo 12 checklists [17:49:14] I guess the necessary changes for C67 aren't too extensive [17:49:27] yeah :/ [17:49:33] I'll just do them in one pass when I fly the mission to test the rope [17:49:58] or Ryan flies the mission yet again, his choice :D [17:50:43] they are probably doing some V79 orb rate and not just PTC [17:51:32] so testing isn't fully finished until lunar orbit [17:54:54] yeah there are some V79 after the LM comes back from the surface, before TEI [17:58:43] jarmoniks AGC ephemeris code is MIT license. Orbiter is MIT license. I guess for simplicity that decides what my padload generator has to be... [17:58:52] hehehe [17:59:50] MIT is only fitting for something AGC-related :D [17:59:58] yeah haha [18:00:13] just have to figure out if there is any restriction with distributing the ephemeris data that Orbiter uses and the associated code. But I guess if Orbiter was allowed to do it as freeware there should be no problem [18:24:12] oh no [18:24:54] somehow I screwed up the build stuff in the padload generator [18:24:59] VS very unhappy now [18:25:02] uh oh [18:25:12] something with precompiled headers [18:25:58] it was only building in debug mode, not release [18:26:12] changed some settings, got rid of code I thought I could safely get rid of [18:26:15] any now nothing works :D [18:27:33] before I changed my VS to English language any automatically created code and comments were in German [18:27:39] tried to get rid of that stuff [18:29:45] builds again, but I think worse than before. Had to disable precompiled headers and my include structure is probably a bit bad. But luckily it builds [18:32:08] maybe I should re-create the VS project in English [19:53:35] cya! [15:27:37] hey Niklas [15:27:55] hey hey [15:33:09] discovered another fun feature of our systems SDK last night [15:33:32] tanks have two separate Q values [15:34:21] because hVolume and hSubstance both have one [15:34:26] Q and energy, right? [15:35:47] they are nominally the same value [15:36:04] and when you load a scenerio they are equal [15:36:36] but probably drift apart over time from roundoff [15:38:25] it's mostly just confusing to work with [15:38:40] tanks have: [15:39:25] tank.temp, tank.space.temp, tank.space->composition.temp [15:40:29] and tank.setTemp() and tank.space->composition.setTemp() are both valid calls [15:40:46] but neither seem to work [15:42:17] oddly, boilAllAndSetTemp seems to work as advertised... [15:43:25] ouch... [15:45:15] there are many signs in our code, of how some of this confusion has lead to messy "Rube Goldberg" solutions, haha [15:45:46] I'm going to try to untangle some of it [21:45:51] night! [16:01:22] hey [17:48:07] hi [17:50:45] morning! [17:57:13] hey guys [17:58:37] hi indy91, in LEM.cpp and saturn.cpp, what is the reason for using DllMain instead of InitModule? [17:58:45] hahahaha [17:58:50] like I know [17:58:54] lol [17:59:02] :P [17:59:03] maybe that is from before there even was a InitModule [17:59:12] ah, thast would be a good reason [17:59:25] every other module is using InitModule though... [17:59:38] if you see any strange code in NASSP the answer is more often "bad 2005 code" than "someone had a great reason to implement it that way" [17:59:47] hehe [18:00:26] if there is no good reason, I will replace it with InitModule since it would be more portable [18:01:27] I can look for a good reason, but I wouldn't know any better than you [18:03:31] if it still builds and loads correct then it's probably fine [18:04:00] yeah, I'll give it a shot and see what happens [18:11:12] ok, so when there is a problem the 2D cockpit is not available [18:11:55] InitModule is not called even though it's linked against orbitersdk.lib... [18:13:11] oh, Apollo7 is not using a saturnV? [18:14:04] https://upload.wikimedia.org/wikipedia/commons/2/2e/Saturn_IB_at_launch_complex_34.jpg [18:14:30] not quite a Saturn V, no :D [18:16:42] hehe [18:17:49] ahh, 2D panel is back [18:17:53] #define ORBITER_MODULE to the rescue^^ [18:18:14] yeah you need to do that I guess [18:18:59] having made Orbiter modules from scratch I at least knew that, from the API guide :D [18:21:10] ^^ [18:23:04] your date estimate is not too bad, looks like code from 2006 : g_Param.hDLL = hModule; // DS20060413 Save for later [18:23:49] it should be history now [18:26:06] how is the xrsound front BTW? [18:38:14] didn't really have much of a chance to continue with that yet [18:38:24] I have some build warnings I wanted to get rid of [18:38:45] something with missing pdb files for XRSound? [18:39:23] maybe you know something about that? Can we even properly get rid of that or do we have to suppress those warnings because XRSound doesn't come with the right files [18:40:18] I have to check what the warnings were again [18:45:15] this is the symbol file, you don't need it [18:45:21] only for debugging [18:46:04] but I don't see where it could generate a warning during the build [18:56:56] linker warning actually [18:57:01] LNK4099 [18:57:10] Severity Code Description Project File Line Suppression State [18:57:13] Warning LNK4099 PDB 'XRSoundLib.pdb' was not found with 'XRSound.lib(XRSound.obj)' or at 'D:\Orbiter2016\Orbitersdk\samples\ProjectApollo\Build\VC2017\Release\Crawler\XRSoundLib.pdb'; linking object as if no debug info Crawler D:\Orbiter2016\Orbitersdk\samples\ProjectApollo\Build\VC2017\XRSound.lib(XRSound.obj) 1 [19:01:29] also [19:01:36] LNK4098 defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library [19:01:58] but I think that is because CaptainSwag messed around with build settings for Open Orbiter [19:02:05] and my XRSound branch is based on that [19:02:25] oh [19:02:40] yeah the build flags have been changed a lot [19:03:00] I think I took back most of those changes in this branch [19:08:13] you are using the lib from XRSound-2.0.zip? [19:08:34] yes [19:12:11] I'm feeling a bit off, I'll rest for the evening. Cya! [12:39:47] hey [12:42:12] hey Matt [12:53:11] how are the cryogenic substances behaving these days? [13:00:45] I think they're doing okay...our ECS on the other hand is having none of it [13:01:19] hahaha [13:02:14] is the problem there still in the way we use the Systems SDK? [13:02:21] Or the CSM specific code in ecs.cpp [13:06:07] I'm 100% sure yet. [13:06:47] probably the way we are plugging our tanks together [13:06:54] in doubt the issue is always valve sizes... [13:07:00] it could be [13:07:41] valve sizes govern flow in l/Pa/sec [13:08:12] and any instability is numerical breakdown when tanks are being emptied too much on a timestep [13:08:33] small tanks + large vale sizes = even larger issues [13:08:50] emptied or filled too quickly [13:09:20] yeah because the flowrate on a timestep is determined by the pressure difference of two tanks [13:09:40] so the numerical stability problem is like. Tank 1 has 1 PSI, Tank 2 has 10 PSI. [13:09:47] large valve means large flow [13:09:57] next timestep has Tank 1 at 10 PSI, tank 2 at 1 PSI [13:10:09] very simplified example, but I'm sure you understand what I want to say [13:10:18] yep [13:10:21] these are the kinds of things we discovered when implementing the LM ECS [13:10:27] specifically the suit loop [13:25:40] I think what I need to do, is go through tank by tank with the debug strings and look at what's happening. [13:26:38] I've definitely lost months of time to drawing the wrong conclusion in the past [13:31:50] I've been thinking about better debugging tools. [13:35:00] absolutely. Debug strings are helpful, but sometimes we could really use an easy method to generate graphs from a sim session [13:36:36] MFD sounds like the way to go [14:29:26] it's been a solid 10years since I looked at the MFD api stuff. this should be interesting haha [17:06:05] morning! [18:33:14] hey Mike [14:51:28] hey [15:24:15] hey Niklas [15:24:26] what's up? [15:25:29] I was looking at how they calculated steerable antenna angles for pointing at the Earth [15:25:47] seems to be another kind of calculation that they didn't really have in the RTCC, only the RTACF [15:26:09] they had a display from the RTCC that showed the current best omni antenna [15:26:22] but not with an input state vector and atttiude [15:27:19] uhh [15:27:29] how am I calculating that right now for the Apollo 9 HGA test :D [15:27:57] ah, no attitude required [15:28:11] that and the antenna angles were fixed as part of the procedure [15:28:14] is that the "CSM look angle" display? for the omnis [15:29:31] yeah [15:29:37] and LM [15:29:44] which they have in the restored MOCR [15:29:51] not sure they already had it for Apollo 11 though [15:29:58] need to check the MSK [15:31:01] https://cdn.arstechnica.net/wp-content/uploads/2019/06/console-row3-wide-procedures.jpg [15:31:04] this has both [15:31:11] 1474 and 1475 [15:31:33] not yet in the RTCC Operations Support Plan [15:31:58] so probably added some time in 1969 or later, but definitely not earlier [15:35:14] those displays are probably telemetry driven, but I guess they could in theory also take inputs [15:35:49] hard to tell [15:37:29] would be kind of fun to have those displays, but it's definitely a case where I would want a system for background slides [15:37:43] drawing all of this in MFD code would be quite a lot of code :D [15:40:24] yeah, I've looked at that MFD code, haha [15:42:08] some "layers" would be good [15:46:47] I know the static characters and lines and boxes were stored on a display format tape, but the background images must've been some kind of TV compositing [15:47:13] it was an actual slide [15:47:16] with projector [15:47:52] display format tape was just one part of the process of generating the slides [15:48:17] because there were so many formats and they had like 5 of each slide for a mission they had to manufacture 1000s of them [15:52:50] I think the projectors were the limit for the number of active TV channels you could have [15:54:56] makes sense [15:56:36] I also know the displays could also be output to teletypes, and some IBM terminals as text-only. [17:51:22] hey Niklas [17:55:45] hey [17:55:52] morning! [18:01:28] what's up? [18:02:12] do you need me to write a Saturn ascent simulator already to go with the LVDC emulator? :D [18:07:45] hahaha no it will be a bit [18:08:05] I only have 1 out of 7 of the major elements implemented [18:08:18] making progress on the Memory Control Element, but it's a big one [18:10:37] more triple redundancy? [18:10:56] not in this breadboard version [18:11:35] they actually did have a ton of voters integrated [18:11:42] but no real triple redundancy [18:11:57] so what they did is they ran their single copy of a single into a voter [18:12:17] and then tied one of the other inputs to "1" and the other to "0", to simulate a vote disagreement [18:12:29] but what this means for the simulator is that I can essentially just delete all of the voter cards [18:12:40] and tie the input and output signals directly together [18:12:45] which will save a lot of time haha [18:13:02] sounds like elections in East Germany [18:13:07] hehehe [18:19:11] I'm definitely proud of some of my "relay by relay" implementations but where I stopped was when there were two relays or transistors doing exactly the same job, just in case on fails [18:19:20] that would have been one step too far :D [18:19:56] it's already bad enough, in EDA, the box controlling what the CSM FDAI is showing, I am doing separate logic for the three axes and the two FDAI [18:20:01] in the EDA* [18:20:31] there is a tiny difference for roll because of a special reentry mode [18:20:38] but otherwise the axes are the same [18:20:56] if I was doing it all again I would not do it separately for each axis [18:21:08] haha [18:21:21] yeah that definitely makes sense [18:21:58] you can always write a comment in code "this bool does the job of these 3 relays" [18:22:10] for future reference [18:22:37] yep: https://github.com/thewonderidiot/lvdc_simulation/blob/main/lvdc.v#L73 [18:27:28] ha yeah, those "assign" probably save all that work [18:40:28] https://docs.google.com/spreadsheets/d/1AajhuzI9Ucngz82VwuxtpU-Ax2TrEML2ypZ7XJiNwgM/edit?usp=sharing [18:40:34] yeah, lots of work saved [18:40:52] this is a little index into the logic diagrams [18:41:27] lines highlighted red are ones that I don't need to implement -- either because they're purely analog (decoupling caps) or because they're contained inside the memory module (which I'll be simulating just at the interface level) [18:41:41] and yellow are pages I don't have to do because they're filled with "unused" voters [18:41:57] green is what's fully done so far [18:42:41] "multiply-divide element" 12 pages [18:42:50] yeah that's getting done last lol [18:42:55] divide is always fun [18:42:58] yup [21:22:32] indy91 https://gist.github.com/n7275/809381f4c8225b27e5aa191f89578d27 [21:28:43] ah interesting [21:28:55] RK4 would certainly make things more stable, if it is feasible for us :D [21:30:27] ill try implimenting it. I don't think higher orders would make sense. [21:37:01] definitely not [21:37:22] I was going to be happy with RK2/Heun :D [21:56:53] night! [21:56:59] night [18:37:39] hey [18:49:17] hey [19:14:21] I'm looking at your RK4FlowSolver function [19:14:27] can't say I understand it yet :D [19:15:14] but your script probably helps with that [19:23:22] it should. you can adjust valve size, dt, and the solver method and see the difference [19:26:26] it helps that we have an extraordinarily simple differential equation [19:31:45] ok, I still don't get it. Flow is a function of the pressure difference [19:32:17] How does your calculation "simulate" the updated pressure difference after a flow? [19:32:56] does that not depend on more factors than the theoretical flow you get normally? [19:38:17] it's just an estimation of the flow rate at the midpoint. all of our flow rates will trend to 0 over time [19:43:48] it helps to think about it in reverse [19:57:54] pressure, in our case is rather complicated to calculate, but over the course of a half timestep we can treat it as a simple relationship between how much was moved between tanks [19:58:18] the current method, had this built into it as an implicit assumption [20:17:25] hmm I found a small error [20:22:25] try running this one https://gist.github.com/n7275/3197085a94841ec760bbb8d9a992f8d8 [20:25:28] ah yeah, that is the Euler method in all its terrible glory [20:27:16] it looks like this will give us a ~30% improvement in dt, or valve size [20:27:23] before the chaos starts [20:34:24] I have one little fix to push this evening. [20:35:54] ok [20:36:13] I'll take the better stability [20:36:25] if we can then make some valve sizes more realistic, all the better [20:38:58] I think we definitely can make some of these smaller too [20:53:00] I forgot I could edit things directly through github [20:53:04] should be good now [21:05:58] ok, I get it now. Your estimation for the next step is that flowrate will be half of the "current" one [21:06:35] hmm [21:10:53] nope, still don't get it :D [21:11:06] RK4IntegrationScratch[0] = size * dP * dt; [21:11:09] that's the flow [21:11:19] RK4IntegrationScratch[1] = size * (dP - RK4IntegrationScratch[0] / size / 2) * dt; [21:11:32] thats a predicted flow for RK [21:11:37] dP - RK4IntegrationScratch[0] / size / 2 [21:11:44] this has to be the updated dP for that [21:14:30] how can "RK4IntegrationScratch[0] / size / 2" have the same unit as dP [21:27:59] I think I need to think through that a bit more.... [21:28:26] I'm fairly certain that it works right, but I want a good explanation to go with it [21:29:39] something is escaping me in the simplicity of this, because of a "y = dy/dt" thing going on here [21:34:51] "it's not you, it's me" I am sure it makes sense haha [21:39:34] if I actually work through the algebra, I'm fairly certain that there is a dt/dt that just got lost along the way [21:40:07] which is okay as long as we stay in C++ land [21:51:41] okay, don't merge yet. I want to look at this a bit more first. [21:54:03] yeah I do want to understand it first before I'll merge it [22:36:54] good night! [17:04:27] hello [17:24:35] hello hello [17:57:31] I looked a little more into my RK4 project last night [17:58:59] I think what I have right now is a crude finite difference approximation [17:59:14] of the derivative [18:00:07] just trying to make a vague estimate what pressure would be, one half timestep later [18:04:34] I think it can be better [18:11:16] Nik, I just had a crazy idea [18:12:23] what if the dt that we pass down to all the refresh functions gets passed through something that looks like: systemdt = sinh(dt) - cosh(dt) + 1 [18:21:50] uhh [18:22:23] I mean for some flow through pipes maybe. But wouldn't that mess a lot with e.g. how something is warming up or cooling down? [18:39:03] or was that meant to replace the current system, how many systems steps are done in one Orbiter timestep? [18:48:23] I think I may have a flawed premise [18:48:26] not everything is some e^(t [18:48:55] s/e^(t/e^(-t) [18:49:06] system [19:02:37] many things are [19:02:41] others have steady flow [19:07:27] that method would be a problem for steady flow [19:13:23] a real RK4 solver isn't going to get around calling exp() a few times per valve unfortunately [19:40:41] now I'm onto looking up how exp() is implimented in Intel processors... [19:44:15] noooo stoooop [19:45:12] why exp specifically actually [19:45:38] a real RK4 solver would just have to do the pressure calculation of tanks more often, no? [20:26:33] a bit more complicated [20:26:59] but yes essentially [20:30:18] my interest exp() was an attempt to estimate how pressure would evolve over a timestep given some non zero dP [20:31:15] which seems to have an analytical form of Ae^(-Bt) [20:38:38] I think a "real" solution would also necessitate the pipe or valve calling the refresh or thermalComps function of the tank to which they're attached [20:39:17] and that sounds dangerous. [20:45:45] absolutely [20:50:32] that's why I always thought a real fix for all this require s alot of rewriting [20:56:21] I have a rework of my demo, which seems to work fairly well. I'm going to add some notes and graphs to the PR. if we don't end up merging it, it can be a reference for future activity. [21:02:09] I'd feel really bad if this is another dead end, so I am sure we can make it happen [21:06:49] oh, I've spent far more time on far less worthwhile things before haha. no worries [21:08:09] dead ends are always a learning experience [21:12:28] I can agree with that [21:34:59] night! [17:34:39] hello [17:35:33] morning! [17:36:15] hey guys [17:39:28] what's up? [17:40:31] I want to delete some more old RTCC code [17:40:36] how is the LVDC [17:40:42] causing delay lines in your brain yet? [17:41:50] I think my brain has recovered from the delay line incident lol [17:42:04] I'm adding the arithmetic module now to give the delay lines something to transmit [17:42:29] because the accumulator and everything go through the delay lines, the LVDC of course only has a one-bit adder [17:49:36] n7275, I am looking at your PR again [17:51:21] I think I should try to measure the improvement in sim as well. not super confident that my Matlab script reflects the realities of our pressure calculation. [17:51:28] I am sorry to say that something is still ringing alarm bells there... [17:51:55] uh oh [17:51:59] what did I do [17:52:22] not implement what you think you implemented? I think? :D [17:53:44] I have to study it a bit [17:56:19] it wouldn't surprise me. I'm on somewhat unsteady ground, from a mathematical justification standpoint [17:56:31] even if the graphs look right [18:09:35] I think my first feeling is that you basically have a closed form solution imitating a Runge-Kutta method [18:09:46] so doing this whole RK4 thing seems a bit pointless then [18:10:10] because it isn't updating the flow based on what "could have been" with Euler [18:11:47] there is no kind of feedback from the intermediate steps, which is what RK usually takes advantage of to calculate a more accurate solution [18:13:39] also, how is e.g. integrationTemp(3) another midpoint estimation [18:13:54] it uses integrationTemp(2) and then just does another exponential function on top [18:18:50] mathematically it is assuming an exponential function, and then does some averaging between 0.5*dt, dt and 2*dt [18:18:58] and 0 [18:23:48] but I am still studying it, maybe I am totally wrong [18:27:41] it might be more worthwhile to figure out how to make things more efficient, so we can run more timesteps [18:28:07] rather than replacing Euler [18:28:24] this definitely makes things more stable though [18:28:35] one thing I was wondering with the assumption that flow goes down over time [18:28:43] we sometimes have regulated pressures [18:28:53] where pressure on both sides of a pipe are quite stable [18:29:04] I'm sure the supply to the fuel cells is a case like that [18:29:32] so you would expect a pretty constant flowrate [18:29:44] wouldn't this scheme cause the flowrate to be lower at higher dts? [18:29:58] because it assumes the flowrate goes down in the future [18:30:15] I think it would... [18:30:55] that could technically cause instability as dt fluctuates [18:31:31] even with stable dt, I think it would always give a lower flowrate than normal [18:31:40] because this method would artificially "throttle" the flowrate [18:31:46] with small dt it's probably neglectable [18:31:52] but still lower [18:32:00] you are correct [18:33:51] oh I think that's actually quite easy mathematically [18:34:05] if the Euler flowrate is 1 [18:34:20] then at 14 Hz this gives me 99.4% of expected stable flow [18:34:23] 144* [18:34:29] at 60 Hz it's 98.6% [18:34:46] 6 hz it's 87.5% [18:35:00] basically 10x time acceleration at 60 Hz [18:35:17] although I am not sure our systems timestep would allow steps that large [18:35:45] and again, this is just for the case where you expect a stable flow [18:36:12] at sudden pressure changes, like a valve opening, your PR would give a nice improvement in behavior [18:36:20] the systems timestep adds substeps. but it doesn't exactly keep a constant dt for the systems [18:36:29] ah true [18:37:43] we could change that. it would have performance implications though. we'd have to weigh the cost vs benefits of that to see if it makes sense [18:39:15] here's another crazy idea: does the system timestep need to be the same for all systems? [18:40:09] theoretically we could tell some of the smaller tanks to refresh at 2x or 3x the rate of the rest of the system [18:41:41] only the tanks you mean? [18:42:36] so not breaking physics for flow by changing the pipes [18:43:58] my crazy idea would be to make copies of tanks to be used for intermediate solutions for some true RK [18:45:02] yeah. only for tanks [18:45:26] changing refresh rates alone doesn't fix much [18:46:17] what your PR is trying to fix still needs some RK like scheme to not do weird things when a valve opens [18:47:36] before you started with your current PR I had the idea to save the past flowrate in pipes [18:47:55] and then make the actual flowrate the average of demanded and past flowrate [18:48:00] which is basically Heun [18:48:18] well, kind of [18:48:41] in a way it would simulate valves opening in finite time [18:49:03] which the valve class already does I think [18:49:06] just super fast [18:50:16] or actually [18:50:29] it simulates a delay for valve opening [18:50:35] but it doesn't affect valve size [18:50:39] maybe it should [18:51:12] I tried simulating that in Matlab [18:52:12] it causes oscillations, but over multiple timestep, rather than between just two steps [18:52:32] making valves have variable size? [18:53:43] ok, the current system in the valve class causes a 0.1 second delay for opening/closing valves [18:53:48] no no not that [18:53:53] just averaging [18:53:57] ah [18:54:19] but that valve delay only affects if it's open or closed [18:54:31] so it only has the states 0% or 100% [18:54:56] simulating valve opening could make things better [18:55:10] it would give any pressure regulating system the chance to react [18:55:59] and would be a very non-invasive change [18:56:14] like at 60 fps it would then take 6 timesteps for a valve to open [18:56:48] in my PLSS fill case that would be enough to prevent an overshoot of the pressure [19:00:38] wait, don't valves already have the ability do do that? [19:01:01] I think they only delay the opening [19:01:11] is instead of going from 0% to 100% instantly it stays 0.1 seconds at 0% [19:01:15] and then goes to 100% open [19:01:20] so* [19:02:15] my idea was to use that same logic but give it intermediate steps for the valve size [19:02:20] which then gets used for flow [19:03:17] I think it could be a quite small change and maybe help with these cases where you have too much flow in one timestep with large pressure differences [19:03:32] ahh [19:04:47] I'm going to close my pull request for the time being. maybe we can revisit some ideas from it another time. [19:06:04] sounds good [19:06:19] sorry for taking it apart a bit haha, there are definitely some good ideas [19:14:18] no problem, it needed a better perspective [21:26:25] night! [13:50:25] hey [13:53:02] hey Matt [13:53:30] want to do a bunch of FOIA requests on my behalf lol [14:21:01] sure! [14:21:07] send me a list [14:23:24] haha ok. How do I want to approach this... maybe a small number of documents that I know for sure will be a great benefit for NASSP [14:34:43] lol to be honest, a lot of it mostly applies to Skylab [14:35:51] but there is definitely some amazing stuff in this list that we don't have [14:35:59] some of which would also be at NARA, but not all [14:39:37] "LGC INTERPRETER USING RAYTHEON 520" I wonder what this is [14:47:26] oooo interesting [15:51:46] I think my next systems projects are mostly going to focus on code cleanup. [16:45:15] that is always a good thing haha [16:45:25] I'm doing that in the RTCC as well