0
Upcoming SlideShare
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Standard text messaging rates apply

Modeling Physical Systems with Modern Object Oriented Perl

623

Published on

Presented at YAPC::NA 2012. Conference site: http://act.yapcna.org/2012/talk/79 github repo: https://github.com/jberger/YAPCNA2012/tree/master/NumSim

Presented at YAPC::NA 2012. Conference site: http://act.yapcna.org/2012/talk/79 github repo: https://github.com/jberger/YAPCNA2012/tree/master/NumSim

0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

Views
Total Views
623
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
6
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript

• 1. Modeling Physical Systems with Modern Object Oriented Perl YAPC::NA 2012 Joel Berger University of Illinois at Chicago June 15, 2012Joel Berger (UIC) OO Physical Modeling June 15, 2012 1 / 15
• 2. The ProblemsPhysical SimulationsDi&#xFB00;erential EquationsA set of rules that de&#xFB01;ne how variables change with some parameter dx x(t2 ) = x(t1 ) + dt &#x2217; dtExample: Exponential Growth dM = rM =&#x21D2; M (t) = P exp(rt) dt Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15
• 3. The ProblemsPhysical SimulationsDi&#xFB00;erential EquationsA set of rules that de&#xFB01;ne how variables change with some parameter dx x(t2 ) = x(t1 ) + dt &#x2217; (x, f (t1, t2)) dtExample: Exponential Growth dM = rM =&#x21D2; M (t) = P exp(rt) dt Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15
• 4. The ProblemsPhysical SimulationsDi&#xFB00;erential EquationsA set of rules that de&#xFB01;ne how variables change with some parameter dx x(t2 ) = x(t1 ) + dt &#x2217; (x, f (t1, t2)) dtExample: Exponential Growth dM = rM =&#x21D2; M (t) = P exp(rt) dt Joel Berger (UIC) OO Physical Modeling June 15, 2012 2 / 15
• 5. The ProblemsMy Research: Ultrafast Electron Microscopy Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15
• 6. The ProblemsMy Research: Ultrafast Electron Microscopy Photocathode Magnetic Lenses Detector Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15
• 7. The ProblemsMy Research: Ultrafast Electron Microscopy Laser Photocathode Magnetic Lenses Detector Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15
• 8. The ProblemsMy Research: Ultrafast Electron Microscopy Electron Beam Laser Photocathode Magnetic Lenses Detector Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15
• 9. The ProblemsMy Research: Ultrafast Electron Microscopy RF Cavity Electron Beam Laser Photocathode Magnetic Lenses Detector Joel Berger (UIC) OO Physical Modeling June 15, 2012 3 / 15
• 10. The ProblemsThe Challenge: A Flexible Interface to a Complex Model Magnetic Lens Magnetic LensElectron Pulse v = v&#x2C6; z w l RF Cavity &#x201C;z lens&#x201D; 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
• 11. The ProblemsThe Challenge: A Flexible Interface to a Complex Model Magnetic Lens Magnetic LensElectron Pulse v = v&#x2C6; z w l RF Cavity &#x201C;z lens&#x201D; 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
• 12. The ProblemsThe Challenge: A Flexible Interface to a Complex Model Magnetic Lens Magnetic LensElectron Pulse v = v&#x2C6; z w l RF Cavity &#x201C;z lens&#x201D; 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
• 13. The ProblemsThe Challenge: A Flexible Interface to a Complex Model Magnetic Lens Magnetic LensElectron Pulse v = v&#x2C6; z w l RF Cavity &#x201C;z lens&#x201D; 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
• 14. The ProblemsThe &#x201C;State of the Art&#x201D;Old codes are lacking full 6D dynamics optimized for performance vs usablilty hard to customize near impossible to comprehendhttp://laacg.lanl.gov/laacg/services/download_sf.phtmlGetting Started with Poisson Super&#xFB01;sh. . . We do not recommend trying to build an input &#xFB01;le &#x201C;from scratch.&#x201D;Instead, &#xFB01;nd an example &#xFB01;le that is similar to the problem you are tryingto solve. Make a copy of the &#xFB01;le and then make any necessarymodi&#xFB01;cations to the geometry and options. Joel Berger (UIC) OO Physical Modeling June 15, 2012 5 / 15
• 15. The ProblemsThe &#x201C;State of the Art&#x201D;Old codes are lacking full 6D dynamics optimized for performance vs usablilty hard to customize near impossible to comprehendhttp://laacg.lanl.gov/laacg/services/download_sf.phtmlGetting Started with Poisson Super&#xFB01;sh. . . We do not recommend trying to build an input &#xFB01;le &#x201C;from scratch.&#x201D;Instead, &#xFB01;nd an example &#xFB01;le that is similar to the problem you are tryingto solve. Make a copy of the &#xFB01;le and then make any necessarymodi&#xFB01;cations to the geometry and options. Joel Berger (UIC) OO Physical Modeling June 15, 2012 5 / 15
• 16. The ProblemsOther Attempts Modelica: Pros:Mathematica: Open-source, but behindPros: close-source variants Can solve dynamics Unique OO language for Pretty-printing of math for physical simulation readability Classes have DEs as propertiesCons: Cons: Closed-source and expensive! Lacks &#x201C;has-a&#x201D; relationship No OO and no key-value Composing DEs not trivial datatypes User-facing object instantiation Still rather slow &#x223C;2mins/sim not trivial Some numerical problems (?) Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15
• 17. The ProblemsOther Attempts Modelica: Pros:Mathematica: Open-source, but behindPros: close-source variants Can solve dynamics Unique OO language for Pretty-printing of math for physical simulation readability Classes have DEs as propertiesCons: Cons: Closed-source and expensive! Lacks &#x201C;has-a&#x201D; relationship No OO and no key-value Composing DEs not trivial datatypes User-facing object instantiation Still rather slow &#x223C;2mins/sim not trivial Some numerical problems (?) Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15
• 18. The ProblemsOther Attempts Modelica: Pros:Mathematica: Open-source, but behindPros: close-source variants Can solve dynamics Unique OO language for Pretty-printing of math for physical simulation readability Classes have DEs as propertiesCons: Cons: Closed-source and expensive! Lacks &#x201C;has-a&#x201D; relationship No OO and no key-value Composing DEs not trivial datatypes User-facing object instantiation Still rather slow &#x223C;2mins/sim not trivial Some numerical problems (?) Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15
• 19. The ProblemsOther Attempts Modelica: Pros:Mathematica: Open-source, but behindPros: close-source variants Can solve dynamics Unique OO language for Pretty-printing of math for physical simulation readability Classes have DEs as propertiesCons: Cons: Closed-source and expensive! Lacks &#x201C;has-a&#x201D; relationship No OO and no key-value Composing DEs not trivial datatypes User-facing object instantiation Still rather slow &#x223C;2mins/sim not trivial Some numerical problems (?) Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15
• 20. The ProblemsOther Attempts Modelica: Pros:Mathematica: Open-source, but behindPros: close-source variants Can solve dynamics Unique OO language for Pretty-printing of math for physical simulation readability Classes have DEs as propertiesCons: Cons: Closed-source and expensive! Lacks &#x201C;has-a&#x201D; relationship No OO and no key-value Composing DEs not trivial datatypes User-facing object instantiation Still rather slow &#x223C;2mins/sim not trivial Some numerical problems (?) Joel Berger (UIC) OO Physical Modeling June 15, 2012 6 / 15
• 21. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 22. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 23. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 24. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 25. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 26. Perl Solution. . . But First, Some BookkeepingIf 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 { use objects as data storage has &#x2019;x&#x2019; =&gt; ( traits =&gt; [&#x2019;RememberHistory&#x2019;], current data during isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, simulation default =&gt; 0 all data afterwards );} works for &#xFB01;xed width solversmy \$obj = MyClass-&gt;new; adaptive solvers call functions\$obj-&gt;x( 1 ); repeatedly (i.e. PerlGSL::DiffEq)\$obj-&gt;x( 2 );print join &#x2019;, &#x2019;, @{ \$obj-&gt;x_history };# 0, 1, 2 Joel Berger (UIC) OO Physical Modeling June 15, 2012 7 / 15
• 27. Perl Solution A Simple OO-DE ExamplePhysical Classesuse MooseX::RememberHistory;use MooseX::Declare;use Method::Signatures::Modifiers;class MyForce { has &#x2019;strength&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, default =&gt; 0 ); has &#x2019;affect&#x2019; =&gt; ( isa =&gt; &#x2019;CodeRef&#x2019;, is =&gt; &#x2019;ro&#x2019;, required =&gt; 1 );}class MyThing { has &#x2019;mass&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;ro&#x2019;, required =&gt; 1 ); has &#x2019;x&#x2019; =&gt; ( traits =&gt; [ &#x2019;RememberHistory&#x2019; ], isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, default =&gt; 0 ); has &#x2019;vx&#x2019; =&gt; ( traits =&gt; [ &#x2019;RememberHistory&#x2019; ], isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, default =&gt; 0 );} Joel Berger (UIC) OO Physical Modeling June 15, 2012 8 / 15
• 28. Perl Solution A Simple OO-DE ExampleThe Solver: Attributesclass MySim { use List::Util &#x2019;sum&#x2019;; has &#x2019;start&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;ro&#x2019;, default =&gt; 0 ); has &#x2019;end&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;ro&#x2019;, default =&gt; 1 ); has &#x2019;steps&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;ro&#x2019;, default =&gt; 100 ); has &#x2019;step&#x2019; =&gt; ( isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;ro&#x2019;, lazy =&gt; 1, builder =&gt; &#x2019;init_step&#x2019;); has &#x2019;time&#x2019; =&gt; ( traits =&gt; [ &#x2019;RememberHistory&#x2019; ], isa =&gt; &#x2019;Num&#x2019;, is =&gt; &#x2019;rw&#x2019;, lazy =&gt; 1, builder =&gt; &#x2019;init_time&#x2019; ); has &#x2019;things&#x2019; =&gt; ( isa =&gt; &#x2019;ArrayRef[MyThing]&#x2019;, is =&gt; &#x2019;rw&#x2019;, default =&gt; sub{[]} ); has &#x2019;forces&#x2019; =&gt; ( isa =&gt; &#x2019;ArrayRef[MyForce]&#x2019;, is =&gt; &#x2019;rw&#x2019;, default =&gt; sub{[]} ); method init_step () { my \$step = (\$self-&gt;end - \$self-&gt;start) / \$self-&gt;steps; return \$step; } method init_time () { return \$self-&gt;start } Joel Berger (UIC) OO Physical Modeling June 15, 2012 9 / 15
• 29. Perl Solution A Simple OO-DE ExampleThe Solver: Methods method evolve ( MyThing \$thing ) { my \$dt = \$self-&gt;step; my \$vx = \$thing-&gt;vx; my \$force = sum map { \$_-&gt;affect-&gt;(\$_, \$thing) } @{ \$self-&gt;forces }; my \$acc = \$force / (\$thing-&gt;mass); \$thing-&gt;vx( \$vx + \$acc * \$dt ); \$thing-&gt;x( \$thing-&gt;x + \$vx * \$dt ); } method run () { while (\$self-&gt;time &lt; \$self-&gt;end) { \$self-&gt;evolve( \$_ ) for @{ \$self-&gt;things }; \$self-&gt;time( \$self-&gt;time + \$self-&gt;step ); } }} # end of class MySim Joel Berger (UIC) OO Physical Modeling June 15, 2012 10 / 15
• 30. Perl Solution A Simple OO-DE ExampleThe Script#!/usr/bin/env perl my \$sim = MySim-&gt;new(use strict; use warnings; end =&gt; 5,use MySim; things =&gt; [ \$thing ],use PDL; forces =&gt; [ \$acc, \$dec ],use PDL::Graphics::Prima::Simple; );my \$thing = MyThing-&gt;new( mass =&gt; 2 ); \$sim-&gt;run;my \$acc = MyForce-&gt;new( my \$time = pdl \$sim-&gt;time_history; strength =&gt; 2, my \$x = pdl \$thing-&gt;x_history; affect =&gt; sub {shift-&gt;strength},); line_plot(\$time, \$x);my \$dec = MyForce-&gt;new( strength =&gt; -30, affect =&gt; sub { my (\$self, \$thing) = @_; return 0 if (\$thing-&gt;x &lt; 0.1); return \$self-&gt;strength; },); Joel Berger (UIC) OO Physical Modeling June 15, 2012 11 / 15
• 31. Perl Solution A Simple OO-DE ExampleThe Script#!/usr/bin/env perl my \$sim = MySim-&gt;new(use strict; use warnings; end =&gt; 5,use MySim; things =&gt; [ \$thing ],use PDL; forces =&gt; [ \$acc, \$dec ],use PDL::Graphics::Prima::Simple; );my \$thing = MyThing-&gt;new( mass =&gt; 2 ); \$sim-&gt;run;my \$acc = MyForce-&gt;new( my \$time = pdl \$sim-&gt;time_history; strength =&gt; 2, my \$x = pdl \$thing-&gt;x_history; affect =&gt; sub {shift-&gt;strength},); line_plot(\$time, \$x);my \$dec = MyForce-&gt;new( strength =&gt; -30, affect =&gt; sub { my (\$self, \$thing) = @_; return 0 if (\$thing-&gt;x &lt; 0.1); return \$self-&gt;strength; },); Joel Berger (UIC) OO Physical Modeling June 15, 2012 11 / 15
• 32. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 33. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter (Sorry Larry!) Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 34. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter (Sorry Larry!) Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 35. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter (Sorry Larry!) Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 36. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter (Sorry Larry!) Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 37. Units HandlingUnit Handling (The Implied Covenant)Mars Surveyor &#x2019;98 Orbiter (Sorry Larry!) Software used force in Newtons Users entered force in Foot-PoundsThe Covenant: Between programmer and user &#x201C;Use the same units!&#x201D; 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
• 38. Units HandlingMooseX::Types::NumUnit Str to Num coercions convert unit if neededuse MooseX::Declare;use Method::Signatures::Modifiers;class SphericalCow { use MooseX::Types::NumUnit qw/num_of_unit/; has &#x2019;radius&#x2019; =&gt; ( isa =&gt; num_of_unit(&#x2019;m&#x2019;), is =&gt; &#x2019;rw&#x2019;, default =&gt; 1 ); has &#x2019;velocity&#x2019; =&gt; ( isa =&gt; num_of_unit(&#x2019;m/s&#x2019;), is =&gt; &#x2019;rw&#x2019;, default =&gt; 0 );}use strict; use warnings;my \$cow = SphericalCow-&gt;new( radius =&gt; &#x2019;1 ft&#x2019;,);print \$cow-&gt;radius . "n"; # 0.3048 Joel Berger (UIC) OO Physical Modeling June 15, 2012 13 / 15
• 39. Real World ExampleExample of Physics::UEMColumnBack to Electron Column Modeling Magnetic Lens Magnetic LensElectron Pulse v = v&#x2C6; z w l RF Cavity &#x201C;z lens&#x201D; 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
• 40. FinallyAcknowledgements Graduate College Dean&#x2019;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