Skip to content

Commit d368fac

Browse files
committed
changed Lorenz example, etc
1 parent 811a710 commit d368fac

File tree

5 files changed

+74
-17
lines changed

5 files changed

+74
-17
lines changed

.appveyor.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ environment:
22
matrix:
33
- julia_version: 1
44
- julia_version: 1.6
5-
- julia_version: 1.7
6-
- julia_version: 1.8
7-
- julia_version: 1.9
5+
- julia_version: 1.10
86
- julia_version: nightly
97

108
platform:

Project.toml

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
name = "Adapode"
22
uuid = "0750cfb5-909a-49d7-927e-29b6595444bf"
33
authors = ["Michael Reed"]
4-
version = "0.2.8"
4+
version = "0.2.9"
55

66
[deps]
77
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
8-
DirectSum = "22fd7b30-a8c0-5bf2-aabe-97783860d07c"
98
Grassmann = "4df31cd9-4c27-5bea-88d0-e6a7146666d8"
109
TensorFields = "86e2b4fd-d9c8-44dc-a03f-e0a387f3b4e6"
1110
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1211
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
13-
AbstractTensors = "a8e43f4a-99b7-5565-8bf1-0165161caaea"
1412

1513
[compat]
1614
julia = "1"
1715
Requires = "1"
18-
AbstractTensors = "0.7"
1916
TensorFields = "0.1"
20-
DirectSum = "0.8"
2117
Grassmann = "0.8"
2218

2319
[extras]

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ This Julia project originally started as a FORTRAN 95 project called [adapode](h
1717
```julia
1818
using Grassmann, Adapode, Makie
1919
x0 = Chain(10.0,10.0,10.0)
20-
Lorenz(x) = Chain(
21-
10.0(x[2]-x[1]),
22-
x[1]*(28.0-x[3])-x[2],
23-
x[1]*x[2]-(8/3)*x[3])
24-
lines(odesolve(Lorenz,x0))
20+
Lorenz(σ,r,b) = x -> Chain(
21+
σ*(x[2]-x[1]),
22+
x[1]*(r-x[3])-x[2],
23+
x[1]*x[2]-b*x[3])
24+
lines(odesolve(Lorenz(10.0,28.0,8/3),x0))
2525
```
2626
Supported ODE solvers include:
2727
explicit Euler,

examples/chaos.jl

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
2+
3+
using Grassmann, Adapode, Makie
4+
x0 = Chain(10.0,10.0,10.0)
5+
6+
Lorenz(σ,r,b) = x -> Chain(
7+
σ*(x[2]-x[1]),
8+
x[1]*(r-x[3])-x[2],
9+
x[1]*x[2]-b*x[3])
10+
lines(odesolve(Lorenz(10.0,28.0,8/3),Chain(10.0,10.0,10.0)))
11+
lines(odesolve(Lorenz(10.0,60.0,8/3),Chain(10.0,10.0,10.0)))
12+
13+
DiskDynamo(a,b,c) = x -> Chain(
14+
a*(x[2]-x[1]),
15+
x[3]*x[1]-x[2],
16+
b-x[1]*x[2]-c*x[3])
17+
lines(odesolve(DiskDynamo(14.625,1.0,5.0),Chain(10.0,10.0,10.0)))
18+
19+
Rossler(a,b,c) = x -> Chain(
20+
-(x[2]+x[3]),
21+
x[1]+a*x[2],
22+
b+x[3]*(x[1]-c))
23+
lines(odesolve(Rossler(1/5,1/5,2.4),x0))
24+
lines(odesolve(Rossler(1/5,1/5,3.5),x0))
25+
lines(odesolve(Rossler(1/5,1/5,4.0),x0))
26+
lines(odesolve(Rossler(1/5,1/5,4.23),x0))
27+
lines(odesolve(Rossler(1/5,1/5,4.3),x0))
28+
lines(odesolve(Rossler(1/5,1/5,5.0),x0))
29+
lines(odesolve(Rossler(1/5,1/5,5.7),x0))
30+
lines(odesolve(Rossler(0.0,0.0,12.0),x0))
31+
lines(odesolve(Rossler(0.0,0.0,25.0),x0))
32+
lines(odesolve(Rossler(0.343,1.82,9.75),x0))
33+
34+
ChemicalKinetics(a1,a2,a3,a4,a5,k1,k2) = x -> Chain(
35+
x[1]*(a1-k1*x[1]-x[3]-x[2])+k2*x[2]*x[2]+a3,
36+
x[2]*(x[1]-k2*x[2]-a5)+a2,
37+
x[3]*(a4-x[1]-k5*x[3])+a3)
38+
lines(odesolve(ChemicalKinetics(30.0,0.01,0.01,16.5,10.0,0.25,0.001,0.5),x0))
39+
40+
Rossler4(a,b,c,d) = x -> Chain(
41+
-(x[2]+x[3]),
42+
x[1]+a*x[2]+x[4],
43+
b+x[3]*x[1],
44+
d*x[4]-c*x[3])
45+
lines(odesolve(Rossler4(1/4,3.0,0.5,0.05),x0))
46+
47+

src/Adapode.jl

+20-4
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ module Adapode
1818
# |___|___||_____||___._|| __||_____||_____||_____|
1919
# |__|
2020

21-
using SparseArrays, LinearAlgebra
22-
using AbstractTensors, DirectSum, Grassmann, TensorFields, Requires
21+
using SparseArrays, LinearAlgebra, Grassmann, TensorFields, Requires
2322
import Grassmann: value, vector, valuetype, tangent, list
23+
import Grassmann: Values, Variables, FixedVector
24+
import Grassmann: Scalar, GradedVector, Bivector, Trivector
2425
import Base: @pure
25-
import AbstractTensors: Values, Variables, FixedVector
26-
import AbstractTensors: Scalar, GradedVector, Bivector, Trivector
2726

2827
export Values, odesolve, odesolve2
2928
export initmesh, pdegrad
@@ -67,6 +66,7 @@ function weights(c,fx)
6766
return cfx
6867
end
6968
@pure shift(::Val{m},::Val{k}=Val(1)) where {m,k} = Values{m,Int}(list(k,m+k-1))
69+
#@pure shift(M::Val{m},i) where m = ((shift(M,Val{0}()).+i).%m).+1
7070
@pure shift(::Val{m},l::Val,i) where m = ((shift(l,Val(0)).+i).%m).+1
7171
function explicit(x,h,c,fx)
7272
l = length(c)
@@ -270,6 +270,22 @@ function odesolve2(f,x0,tmax=2π,tol=15,M::Val{m}=Val(1),B::Val{o}=Val(4)) where
270270
return x
271271
end
272272

273+
function integrate(f::TensorField,x,tmax=2π,tol=15,M::Val{m}=Val(1),B::Val{o}=Val(4)) where {m,o}
274+
x0,t = init(x),TimeStep(2.0^-tol)
275+
if m == 0 # Improved Euler, Heun's Method
276+
x = initsteps(x0,t,tmax,M)
277+
for i 2:length(x)
278+
@inbounds x[i] = heun(x[i-1],f,t.h)
279+
end
280+
elseif m == 3 # Multistep
281+
x,fx = initsteps(x0,t,tmax,f,M,B)
282+
for i o+1:length(x)
283+
@inbounds x[i] = predictcorrect(x,f,fx,t,B)
284+
end
285+
end
286+
return x
287+
end
288+
273289
function timeloop!(x,t,tmax,::Val{m}=Val(1)) where m
274290
if t.e < t.emin
275291
t.h *= 2

0 commit comments

Comments
 (0)