juliaphysics.github.io
juliaphysics.github.io copied to clipboard
Ecosystem overview
- Physics packages: JuliaPhysics
- Dealing with units: Unitful, Measurements, et al
- Differential equations: DiffEq and friends
- Short tutorial with common physics problems
- Overview of DiffEqPhysics and FDM with DiffEq
- how to use ModellingToolkit by @ChrisRackauckas and @HarrisonGrodin if possible...with special reference to constructing systems of diffeq programatically
- DynamicalSystems et al
- Astronomy: JuliaAstro et al
- Quantum: Yao.jl et al, QuantumOptics.jl
- Finite element: JuAFEM, JuliaFEM, FENiCS
- JuliaDynamics
- JuliaAtoms (@jagot, @mortenpi)
- ITensors.jl (CC: @emstoudenmire, @mtfishman, @kshyatt)
- Plotting: Plots, Makie, PyPlot If anyone needs cool looking mind maps or graphs message on slack, I'll be back home 10 PM IST.
First of all, great idea to make a website guys! Unfortunately I couldn't attend JuliaCon this year. :(
- Short tutorial with common physics problems
I've recently created a small example: Machine Learning the Ising Transition. The Monte Carlo configurations can be downloaded here or created with this simple notebook. A Flux#zygote based version is here but is currently much slower, see this issue.
Also I took @kshyatt's Quantum Ising chain example and updated it to Julia 1.1 (and rewrote parts/sllimmed it down), see here.
We should also mention the various sparse eigenvalue solvers in the ecosystem, in particular the pure Julia implementations aside from ARPACK, since ED of sparse matrices is, of course, very common. I mention a couple in the context of free fermions here.
I feel that if we polish what is already available across many of our repos we'll have a set of great resources, which will definitely help people orientate themselves.
What do you think about including more general or basic tools like things for linear fitting or least squares, Monte Carlo, or even root finding, integration (pick one), interpolation...?
These are tools I need quite often (even just to make something else happen) and I think a list of those might be helpful, especially to students (who don't have a need for the advanced stuff yet) or beginners of Julia (who might not know where to find all of this/which to pick).
What do you think about including more general or basic tools like things for linear fitting or least squares, Monte Carlo, or even root finding, integration (pick one), interpolation...?
Good question. My feeling is that we should start with proper physics applications first, since this is what you expect from a JuliaPhysics organization and information about basic tools can be found elsewhere already. Providing an overview of more specialized physics organizations through small examples could be our unique sellingpoint.
By the way, the Monte Carlo package you linked (MonteCarloMeasurements.jl) isn't really a Monte Carlo package for simulating physical systems but rather similar to Measurements.jl in that it lets you propagate uncertainties. I created MonteCarlo.jl at some point for lattice physics Monte Carlo. However, to be honest, I'm not so sure anymore whether such a package makes that much sense, since physicists tend to implement their own Monte Carlo codes anyways and small helper packages would presumably much more useful. That's why I'm currently not devoting any time on it, but it's out there and should be functional.
Note that there is also the lightweight package BinningAnalysis.jl which provides a couple of tools for estimating the standard errors of Monte Carlo observables (logarithmic binning, jackknife, etc.).
Good question. My feeling is that we should start with proper physics applications first, since this is what you expect from a JuliaPhysics organization and information about basic tools can be found elsewhere already.
Sure. I think there is also some benefit to include that information with the rest listed above ("if you are here already, let me give you the full package"), and it doesn't have to be as prominent. It shouldn't really hurt to include that somewhere?
I guess my argument is mostly for newer users. When I started out with Julia, these were the things I needed first, and right now there are (for example, and if I counted correctly) 4 interpolation and integration packages each and it can be hard to tell which is the right one for you. But maybe the situation has gotten better with the knew ways to search for packages, it's hard for me to tell since by now I know where to get what I need.
By the way, the Monte Carlo package you linked (MonteCarloMeasurements.jl) isn't really a Monte Carlo package for simulating physical systems but rather similar to Measurements.jl in that it lets you propagate uncertainties.
Yes, I'm aware, I should have clarified. I happen to do "that kind" of Monte Carlo more often and I thought it would fit with the Measurements
package mentioned before.
Note that I created JuliaPhysics/PhysicsTutorials to collect physics related tutorials/instructive showcases.
Would it make sense to store those as Literate/Weave notebooks instead, so that they can be included in this website?
That sounds like a good idea.
Would it make sense to store those as Literate/Weave notebooks instead, so that they can be included in this website?
I think the tutorials in https://github.com/JuliaDiffEq/DiffEqTutorials.jl are done with Weave.jl
, right? I really like how they're rendered now.
Reading over the current ecosystem overview I realized that we absolutely have to elaborate a couple of general principles according to which we add and categorize packages on the ecosystem page.
First, I think we need to define a notion of "minimal maturity" and "minimal relevance" for packages to be on the list. In particular, the "Solid State" section around JuliaAtom is, in my opinion, too fine grained for an overview page. There are packages like CoulombIntegrals.jl which has failing tests, no stars, a single contributor, and no documentation.
- Should we only consider registered packages?
- Should we only consider general purpose (Unitful.jl, Measurements.jl, etc.) and "big" packages (DifferentialEquations.jl, DynamicalSystems.jl, Yao.jl, QuantumOptics.jl, etc.) and drop "small" ones?
- Should we have a complementary second list that lists them all, i.e. liberately accepting PRs?
A somewhat orthogonal issue is where we want to draw the line between relevant for physics or not. For example, currently we also list plotting packages.
- Do we want to present physics packages or physics workflow packages?
If the latter it feels like we should include HDF5.jl and things like that as well.
I'm curious to hear your thoughts on this guys.
Answering my own questions I'd currently lean towards the following answers:
Yes, Yes, Yes, Separate section for workflow like packages.
There are packages like CoulombIntegrals.jl which has failing tests, no stars, a single contributor, and no documentation.
Yes, I agree that a certain quality control would be valuable. For this case in particular, I shamelessly took all packages listed in JuliaAtom website, if I remember correctly.
Yes, Yes, Yes, Separate section for workflow like packages.
I'd answer the same and I guess something like that workflow/tools list is what I had in mind.
To be fair, I only mentioned in the Slack physics channel that I was working on a suite for Hartree–Fock calculations for atoms. Although the HF calculations do work, the usability is somewhat limited at the moment and nothing can really be released yet, since I am depending on ContinuumArrays.jl which is very much in flux still.
Furthermore, JuliaAtoms is not really solid state physics, right now, it's only atomic physics :)
EDIT: Actually, I think I preferred it as it was before (i.e. a few days ago), where it only listed the JuliaAtoms organization page, not the individual packages.
Inspired by DiffEqTutorials.jl, PhysicsTutorials.jl now holds all tutorials (currently only a single basic one) in PDF, HTML, Markdown, and Jupyter notebook format.
@giordano , to have the HTML versions rendered nicely as webpages, I believe they must be placed on a webserver (someone correct me if I'm wrong). GitHub doesn't render them, see https://github.com/JuliaPhysics/PhysicsTutorials.jl/blob/master/tutorials/general/matrix_types.html.
UPDATE: Rendered version can be found here: https://juliaphysics.github.io/PhysicsTutorials.jl/tutorials/general/matrix_types.html