Transcript
Page 1: Modeling Physical Systems with Modern Object Oriented Perl

Modeling Physical Systemswith Modern Object Oriented Perl

YAPC::NA 2012

Joel Berger

University of Illinois at Chicago

June 15, 2012

Joel Berger (UIC) OO Physical Modeling June 15, 2012 1 / 15

Page 2: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Physical Simulations

Differential Equations

A set of rules that define how variables change with some parameter

x(t2) = x(t1) + dt ∗ dxdt

(x, f(t1, t2))

Example: Exponential Growth

dM

dt= rM =⇒ M(t) = P exp(rt)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15

Page 3: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Physical Simulations

Differential Equations

A set of rules that define how variables change with some parameter

x(t2) = x(t1) + dt ∗ dxdt

(x, f(t1, t2))

Example: Exponential Growth

dM

dt= rM =⇒ M(t) = P exp(rt)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15

Page 4: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Physical Simulations

Differential Equations

A set of rules that define how variables change with some parameter

x(t2) = x(t1) + dt ∗ dxdt

(x, f(t1, t2))

Example: Exponential Growth

dM

dt= rM =⇒ M(t) = P exp(rt)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15

Page 5: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

My Research: Ultrafast Electron Microscopy

Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15

Page 6: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

My Research: Ultrafast Electron Microscopy

Photocathode Magnetic Lenses Detector

Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15

Page 7: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

My Research: Ultrafast Electron Microscopy

Photocathode Magnetic Lenses DetectorLaser

Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15

Page 8: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

My Research: Ultrafast Electron Microscopy

Electron Beam

Photocathode Magnetic Lenses DetectorLaser

Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15

Page 9: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

My Research: Ultrafast Electron Microscopy

Electron Beam

Photocathode Magnetic Lenses DetectorLaser

RF Cavity

Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15

Page 10: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The Challenge: A Flexible Interface to a Complex Model

w

l

Electron Pulse

~v = vz

Magnetic Lens

RF Cavity“z lens”

Magnetic Lens

Need: Compute dynamics of electron pulse (w(t), l(t))

Note: Generation and optical elements add terms to DE

Want: Representitive OO user-level interface

Joel Berger (UIC) OO Physical Modeling June 15, 2012 4 / 15

Page 11: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The Challenge: A Flexible Interface to a Complex Model

w

l

Electron Pulse

~v = vz

Magnetic Lens

RF Cavity“z lens”

Magnetic Lens

Need: Compute dynamics of electron pulse (w(t), l(t))

Note: Generation and optical elements add terms to DE

Want: Representitive OO user-level interface

Joel Berger (UIC) OO Physical Modeling June 15, 2012 4 / 15

Page 12: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The Challenge: A Flexible Interface to a Complex Model

w

l

Electron Pulse

~v = vz

Magnetic Lens

RF Cavity“z lens”

Magnetic Lens

Need: Compute dynamics of electron pulse (w(t), l(t))

Note: Generation and optical elements add terms to DE

Want: Representitive OO user-level interface

Joel Berger (UIC) OO Physical Modeling June 15, 2012 4 / 15

Page 13: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The Challenge: A Flexible Interface to a Complex Model

w

l

Electron Pulse

~v = vz

Magnetic Lens

RF Cavity“z lens”

Magnetic Lens

Need: Compute dynamics of electron pulse (w(t), l(t))

Note: Generation and optical elements add terms to DE

Want: Representitive OO user-level interface

Joel Berger (UIC) OO Physical Modeling June 15, 2012 4 / 15

Page 14: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The “State of the Art”

Old codes are

lacking full 6D dynamics

optimized for performance vs usablilty

hard to customize

near impossible to comprehend

http://laacg.lanl.gov/laacg/services/download_sf.phtml

Getting Started with Poisson Superfish. . . We do not recommend trying to build an input file “from scratch.”Instead, find an example file that is similar to the problem you are tryingto solve. Make a copy of the file and then make any necessarymodifications to the geometry and options.

Joel Berger (UIC) OO Physical Modeling June 15, 2012 5 / 15

Page 15: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

The “State of the Art”

Old codes are

lacking full 6D dynamics

optimized for performance vs usablilty

hard to customize

near impossible to comprehend

http://laacg.lanl.gov/laacg/services/download_sf.phtml

Getting Started with Poisson Superfish. . . We do not recommend trying to build an input file “from scratch.”Instead, find an example file that is similar to the problem you are tryingto solve. Make a copy of the file and then make any necessarymodifications to the geometry and options.

Joel Berger (UIC) OO Physical Modeling June 15, 2012 5 / 15

Page 16: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Other Attempts

Mathematica:Pros:

Can solve dynamics

Pretty-printing of math forreadability

Cons:

Closed-source and expensive!

No OO and no key-valuedatatypes

Still rather slow ∼2mins/sim

Modelica:Pros:

Open-source, but behindclose-source variants

Unique OO language forphysical simulation

Classes have DEs as properties

Cons:

Lacks “has-a” relationship

Composing DEs not trivial

User-facing object instantiationnot trivial

Some numerical problems (?)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15

Page 17: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Other Attempts

Mathematica:Pros:

Can solve dynamics

Pretty-printing of math forreadability

Cons:

Closed-source and expensive!

No OO and no key-valuedatatypes

Still rather slow ∼2mins/sim

Modelica:Pros:

Open-source, but behindclose-source variants

Unique OO language forphysical simulation

Classes have DEs as properties

Cons:

Lacks “has-a” relationship

Composing DEs not trivial

User-facing object instantiationnot trivial

Some numerical problems (?)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15

Page 18: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Other Attempts

Mathematica:Pros:

Can solve dynamics

Pretty-printing of math forreadability

Cons:

Closed-source and expensive!

No OO and no key-valuedatatypes

Still rather slow ∼2mins/sim

Modelica:Pros:

Open-source, but behindclose-source variants

Unique OO language forphysical simulation

Classes have DEs as properties

Cons:

Lacks “has-a” relationship

Composing DEs not trivial

User-facing object instantiationnot trivial

Some numerical problems (?)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15

Page 19: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Other Attempts

Mathematica:Pros:

Can solve dynamics

Pretty-printing of math forreadability

Cons:

Closed-source and expensive!

No OO and no key-valuedatatypes

Still rather slow ∼2mins/sim

Modelica:Pros:

Open-source, but behindclose-source variants

Unique OO language forphysical simulation

Classes have DEs as properties

Cons:

Lacks “has-a” relationship

Composing DEs not trivial

User-facing object instantiationnot trivial

Some numerical problems (?)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15

Page 20: Modeling Physical Systems with Modern Object Oriented Perl

The Problems

Other Attempts

Mathematica:Pros:

Can solve dynamics

Pretty-printing of math forreadability

Cons:

Closed-source and expensive!

No OO and no key-valuedatatypes

Still rather slow ∼2mins/sim

Modelica:Pros:

Open-source, but behindclose-source variants

Unique OO language forphysical simulation

Classes have DEs as properties

Cons:

Lacks “has-a” relationship

Composing DEs not trivial

User-facing object instantiationnot trivial

Some numerical problems (?)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15

Page 21: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 22: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 23: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 24: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 25: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 26: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution

. . . But First, Some Bookkeeping

If an object knows where it is, can it remember where it came from?

use MooseX::Declare;

use Method::Signatures::Modifiers;

use MooseX::RememberHistory;

class MyClass {

has ’x’ => (

traits => [’RememberHistory’],

isa => ’Num’, is => ’rw’,

default => 0

);

}

my $obj = MyClass->new;

$obj->x( 1 );

$obj->x( 2 );

print join ’, ’, @{ $obj->x_history };

# 0, 1, 2

use objects as data storage

current data duringsimulationall data afterwards

works for fixed width solvers

adaptive solvers call functionsrepeatedly (i.e. PerlGSL::DiffEq)

Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15

Page 27: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution A Simple OO-DE Example

Physical Classes

use MooseX::RememberHistory;

use MooseX::Declare;

use Method::Signatures::Modifiers;

class MyForce {

has ’strength’ => ( isa => ’Num’, is => ’rw’, default => 0 );

has ’affect’ => ( isa => ’CodeRef’, is => ’ro’, required => 1 );

}

class MyThing {

has ’mass’ => ( isa => ’Num’, is => ’ro’, required => 1 );

has ’x’ => ( traits => [ ’RememberHistory’ ], isa => ’Num’,

is => ’rw’, default => 0 );

has ’vx’ => ( traits => [ ’RememberHistory’ ], isa => ’Num’,

is => ’rw’, default => 0 );

}

Joel Berger (UIC) OO Physical Modeling June 15, 2012 8 / 15

Page 28: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution A Simple OO-DE Example

The Solver: Attributes

class MySim {

use List::Util ’sum’;

has ’start’ => ( isa => ’Num’, is => ’ro’, default => 0 );

has ’end’ => ( isa => ’Num’, is => ’ro’, default => 1 );

has ’steps’ => ( isa => ’Num’, is => ’ro’, default => 100 );

has ’step’ => ( isa => ’Num’, is => ’ro’, lazy => 1, builder => ’init_step’);

has ’time’ => ( traits => [ ’RememberHistory’ ], isa => ’Num’, is => ’rw’,

lazy => 1, builder => ’init_time’ );

has ’things’ => ( isa => ’ArrayRef[MyThing]’, is => ’rw’, default => sub{[]} );

has ’forces’ => ( isa => ’ArrayRef[MyForce]’, is => ’rw’, default => sub{[]} );

method init_step () {

my $step = ($self->end - $self->start) / $self->steps;

return $step;

}

method init_time () { return $self->start }

Joel Berger (UIC) OO Physical Modeling June 15, 2012 9 / 15

Page 29: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution A Simple OO-DE Example

The Solver: Methods

method evolve ( MyThing $thing ) {

my $dt = $self->step;

my $vx = $thing->vx;

my $force = sum map { $_->affect->($_, $thing) } @{ $self->forces };

my $acc = $force / ($thing->mass);

$thing->vx( $vx + $acc * $dt );

$thing->x( $thing->x + $vx * $dt );

}

method run () {

while ($self->time < $self->end) {

$self->evolve( $_ ) for @{ $self->things };

$self->time( $self->time + $self->step );

}

}

} # end of class MySim

Joel Berger (UIC) OO Physical Modeling June 15, 2012 10 / 15

Page 30: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution A Simple OO-DE Example

The Script

#!/usr/bin/env perl

use strict; use warnings;

use MySim;

use PDL;

use PDL::Graphics::Prima::Simple;

my $thing = MyThing->new( mass => 2 );

my $acc = MyForce->new(

strength => 2,

affect => sub {shift->strength},

);

my $dec = MyForce->new(

strength => -30,

affect => sub {

my ($self, $thing) = @_;

return 0 if ($thing->x < 0.1);

return $self->strength;

},

);

my $sim = MySim->new(

end => 5,

things => [ $thing ],

forces => [ $acc, $dec ],

);

$sim->run;

my $time = pdl $sim->time_history;

my $x = pdl $thing->x_history;

line_plot($time, $x);

Joel Berger (UIC) OO Physical Modeling June 15, 2012 11 / 15

Page 31: Modeling Physical Systems with Modern Object Oriented Perl

Perl Solution A Simple OO-DE Example

The Script

#!/usr/bin/env perl

use strict; use warnings;

use MySim;

use PDL;

use PDL::Graphics::Prima::Simple;

my $thing = MyThing->new( mass => 2 );

my $acc = MyForce->new(

strength => 2,

affect => sub {shift->strength},

);

my $dec = MyForce->new(

strength => -30,

affect => sub {

my ($self, $thing) = @_;

return 0 if ($thing->x < 0.1);

return $self->strength;

},

);

my $sim = MySim->new(

end => 5,

things => [ $thing ],

forces => [ $acc, $dec ],

);

$sim->run;

my $time = pdl $sim->time_history;

my $x = pdl $thing->x_history;

line_plot($time, $x);

Joel Berger (UIC) OO Physical Modeling June 15, 2012 11 / 15

Page 32: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter

(Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 33: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter (Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 34: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter (Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 35: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter (Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 36: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter (Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 37: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

Unit Handling (The Implied Covenant)

Mars Surveyor ’98 Orbiter (Sorry Larry!)

Software used force in Newtons

Users entered force in Foot-Pounds

The Covenant:

Between programmer and user

“Use the same units!”

Unexpected and possibly undocumented action at a distance

With Perl and Moose we can do better . . .

Joel Berger (UIC) OO Physical Modeling June 15, 2012 12 / 15

Page 38: Modeling Physical Systems with Modern Object Oriented Perl

Units Handling

MooseX::Types::NumUnit

Str to Num coercions

convert unit if needed

use MooseX::Declare;

use Method::Signatures::Modifiers;

class SphericalCow {

use MooseX::Types::NumUnit qw/num_of_unit/;

has ’radius’ => ( isa => num_of_unit(’m’), is => ’rw’, default => 1 );

has ’velocity’ => ( isa => num_of_unit(’m/s’), is => ’rw’, default => 0 );

}

use strict; use warnings;

my $cow = SphericalCow->new(

radius => ’1 ft’,

);

print $cow->radius . "\n"; # 0.3048

Joel Berger (UIC) OO Physical Modeling June 15, 2012 13 / 15

Page 39: Modeling Physical Systems with Modern Object Oriented Perl

Real World Example

Example of Physics::UEMColumn

Back to Electron Column Modeling

w

l

Electron Pulse

~v = vz

Magnetic Lens

RF Cavity“z lens”

Magnetic Lens

As yet unreleased Physics::UEMColumn

https://github.com/jberger/Physics-UEMColumn

Uses: PerlGSL::DiffEq on CPAN

C-level solver of Perl-level DE closures

Joel Berger (UIC) OO Physical Modeling June 15, 2012 14 / 15

Page 40: Modeling Physical Systems with Modern Object Oriented Perl

Finally

Acknowledgements

Graduate College Dean’s Fellowship (Major Student Funding)

LAS Ph.D. Travel Award (Conference Funding)

Department of Energy #DE-FG52-09NA29451(UEM Research Grant)

https://github.com/jberger/YAPCNA2012

Joel Berger (UIC) OO Physical Modeling June 15, 2012 15 / 15


Top Related