All compile errors fixed, but now there's a weird NaN. The wonders never cease

This commit is contained in:
2023-01-30 21:40:58 +01:00
parent e45fab1389
commit cf300f3f88
7 changed files with 179 additions and 37 deletions

View File

@@ -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])