2 ms·
Thank you so much for the detailed reply! I've worked a lot with Rust, and a decent bit of C, but pretty much no C++ or GPU programming. Do you have a sense of
by smj-edison 1y ago
Thank you so much for the detailed reply!
I've worked a lot with Rust, and a decent bit of C, but pretty much no C++ or GPU programming. Do you have a sense of whether it would be better to pursue CUDA or JAX?
That's also encouraging to know that there's openings for computational simulation—I've been a little worried that there wouldn't be any openings for computational simulation since it seems like a rather small field.
Off the top of your head do you know of any resources for learning FEM? Happy to look for it myself but it's always nice to have pointers.
- moralestapia 1y agoIf I had to choose I would choose CUDA. I recently got myself into JAX, I think it has a fair chance of being the dominant framework in 5-10 years; but also, a native version of CUDA is coming to Python so ... idk. deal.ii has a bunch of tutorials worth gold [1]. I learned by following them and that's why I ended up using deal.ii for almost everything. If you know C well, moving to C++ won't be quite difficult. deal.ii uses a lot of templates, that would prob. be the most unusual thing to you, coming from C, but you'll get used to the syntax. Pay special care to the heat equation [2], tutorial #26. Diffusion is modeled by a trivially modified version of it; heat uses a constant diffusion coefficient, in molecular diffusion this can vary. Roughly speaking, about 50% of what you'll model will be derived from effects related to diffusion, another 40% will have to do with "tangible" mechanical effects (think of pressure, structure, tension), the remaining 10% has to do with parametrizing the model properly for the Biology and Chemistry involved. Although, 90/90 rules applies and you'll end up spending a lot of time on this "last" parametrization. A lot of these constants are unknown, you'll have to guesstimate them based on whatever plausible theory you can come up with. But this is not a bad thing, recall that we are doing simulations in silico, so, you could (and should) try all ranges of parameters and study the results. You might find something that makes a lot of sense and then you can work backwards and make a prediction on the operative range of these unknown parameters. I did that with my plant model, there was a hormone transporter for which the rate of transport had not been determined. So, I tried a wide range of values and measured the viability of the phenotypes over it; it very clearly showed that only a narrow window of values allowed it, on a very specific time during plant development, derived from the geometrical configuration of that specific spot at that moment. We then devised an experiment for that, measured it, and it was bullseye over what I predicted. See [3]. That would have made for a killer paper if I had been rigorous enough to publish it, but I got my M.Sc. out of it and kind of forgot about it. Don't do that, publish everything you find! 1: https://dealii.org/current/doxygen/deal.II/Tutorial.html https://dealii.org/current/doxygen/deal.II/Tutorial.html 2: https://en.wikipedia.org/wiki/Heat_equation https://en.wikipedia.org/wiki/Heat_equation 3: https://moralestapia.com/img/Fig.19.png https://moralestapia.com/img/Fig.19.png 3 Footnote: PIN1,4,7 are hormone transporters in Arabidopsis thaliana (a model plant). A specific balance of transporter activity is required to recover phenotype. In the plot, the darker the region, the most likely it is to reproduce the phenotype. The red dot is the optimal value, but anything in the black area is also really good, which is what we measured and found to be within it.