All compile errors fixed, but now there's a weird NaN. The wonders never cease
This commit is contained in:
28
app/Main.hs
28
app/Main.hs
@@ -1,15 +1,20 @@
|
||||
module Main where
|
||||
|
||||
import Control.Lens
|
||||
import Criterion.Main
|
||||
import Control.Lens.Unsound (adjoin)
|
||||
import Control.Monad.Writer
|
||||
-- import Criterion.Main
|
||||
import Data.Default
|
||||
import Data.Either
|
||||
import Petzval.Optics
|
||||
import Petzval.Optics.RTM
|
||||
import Petzval.System
|
||||
import Petzval.Merit
|
||||
import Petzval.Trace
|
||||
import Petzval.Calculations
|
||||
import Petzval.Optimization
|
||||
import Petzval.Types
|
||||
import System.Environment (getArgs)
|
||||
import Linear
|
||||
import Numeric.AD.Mode (Scalar, Mode)
|
||||
import qualified Numeric.LinearAlgebra as L
|
||||
@@ -41,13 +46,13 @@ system2 =
|
||||
, Surface{_material=s_sk16, _outsideRadius = 11, _roc=656.66349, _thickness = 4.5}
|
||||
, Surface{_material = air, _outsideRadius = 11, _roc = -33.50754, _thickness = 86.48643}
|
||||
]
|
||||
where s_sk16 = ConstMat 1.620408
|
||||
s_f4 = ConstMat 1.616589
|
||||
where s_sk16 = constMat 1.620408 :: SellemeierMat
|
||||
s_f4 = constMat 1.616589
|
||||
|
||||
merit :: (Material mat, Calcuable a) => [Element mat a] -> a
|
||||
-- merit :: (Material mat) => [Element mat Double] -> Double
|
||||
merit system = result
|
||||
where baked = bake 0.587618 system
|
||||
where baked = bake 0.5875618 system
|
||||
ep = entrancePupil baked
|
||||
result = sum
|
||||
. map (^2)
|
||||
@@ -63,6 +68,17 @@ merit system = result
|
||||
type Id a = a -> a
|
||||
|
||||
|
||||
doOptimize steps = runWriterT $ optimizeDLS cfg vars merit system1
|
||||
where merit = mkMerit [ DynMerit $ TW 50 100 $ BFL Nothing
|
||||
, DynMerit $ TW 0 1 $ SpotSize Nothing
|
||||
]
|
||||
vars :: VariableSet
|
||||
vars = (ix 1 . roc) `adjoin` (ix 2 . roc)
|
||||
vars2 = undefined -- foldl1 adjoin
|
||||
-- [ ix 1.roc , ix 2.roc]
|
||||
cfg = def{maxSteps = steps}
|
||||
|
||||
|
||||
|
||||
main :: IO ()
|
||||
main =
|
||||
@@ -70,10 +86,14 @@ main =
|
||||
ep = (entrancePupil baked){position=20.4747094540}
|
||||
fa = 20
|
||||
in do
|
||||
[arg] <- getArgs
|
||||
let steps = read arg
|
||||
print $ L.norm_2 (L.fromList [3.0 , 4.0] :: L.Vector Double)
|
||||
doOptimize steps >>= print
|
||||
putStrLn $ show ep
|
||||
putStrLn $ show $ rearFocalLength $ lensRTM baked
|
||||
putStrLn $ show $ mconcat (seidel ep fa baked :: [Seidel Double])
|
||||
|
||||
{- defaultMain [
|
||||
bgroup "merit" [ bench "system1" $ nf merit (system1 :: [Element SellemeierMat Double])
|
||||
, bench "system2" $ nf merit (system2 :: [Element ConstMat Double])
|
||||
|
||||
Reference in New Issue
Block a user