Review index · Download raw source
reference/legacy/run_grid.jl
1include("photometer_model.jl")2ENV["CLOUDSCAT_DEBUG_REDUCTION"]="1"3const OUT=joinpath(MCROOT,"results")4mkpath(OUT)56function validate()7 io=open(joinpath(OUT,"validation.txt"),"w")8 for θ in (0.,20.,40.)9 Z=534000.10 r,secs,_,_,_=makecase(N=5000,beta=0.,ray=false,xsrc=Z*tand(θ))11 measured=sum(r.photo)*DT12 expected=θ<=30 ? cosd(θ)^3/(4π*Z^2) : 0.13 @assert isapprox(measured,expected;rtol=1e-10,atol=1e-28)14 println(io,"Vacuum angle=",θ," expected=",expected," measured=",measured," PASS")15 end16 r,_,direct,_,_=makecase(N=5000,beta=3/2000,ray=false,albedo=0.)17 @assert isapprox(sum(r.photo)*DT,direct;rtol=1e-10)18 @assert all(==(0.),r.photo[2:end])19 println(io,"Zero-albedo cloud tau=3: direct-only test PASS")20 println(io,"Binning: 2 us excess delay; 12 ms record. Debug reduction=1.")21 println(io,"Mie g=",ICE.g," albedo=",ICE.ω0," Qext=",ICE.Qext)22 close(io)23 println("VALIDATION PASS"); flush(stdout)24end2526function rungrid()27 cases=NamedTuple[]28 for τ in (0.,.1,.3,1.,3.,10.,30.,100.)29 push!(cases,(id="tau_"*replace(string(τ),'.'=>'p'),group="tau_grid",30 config=(beta=τ/2000,),N=τ>=100 ? 25000 : 50000))31 end32 for d in (200.,1000.,3000.)33 push!(cases,(id="depth_"*string(Int(d)),group="same_tau10",34 config=(zsrc=18000-d,beta=10/d),N=50000))35 end36 push!(cases,(id="top",group="top_above",config=(zsrc=18000.,beta=.005),N=50000))37 push!(cases,(id="above_1km",group="top_above",config=(zsrc=18000.,ztop=17000.,zbottom=11000.,beta=.005),N=50000))38 for τ in (0.,3.,10.,30.)39 push!(cases,(id="noray_"*string(Int(τ)),group="ray_test",config=(beta=τ/2000,ray=false),N=50000))40 end41 for g in (.75,.95)42 push!(cases,(id="g_"*replace(string(g),'.'=>'p'),group="phase_test",config=(beta=.005,g=g),N=50000))43 end44 for τ in (0.,10.,30.)45 push!(cases,(id="domain_"*string(Int(τ)),group="domain_test",46 config=(beta=τ/2000,domainradius=200000.,domaintop=120000.),N=50000))47 end48 push!(cases,(id="radius40_tau30",group="radius_test",config=(beta=.015,cloudradius=40000.,domainradius=100000.),N=50000))49 push!(cases,(id="fov90_tau10",group="fov_test",config=(beta=.005,halfangle=45.),N=50000))50 # Fine near-top case tests that small overlying tau is not necessarily a pure direct pulse.51 push!(cases,(id="near_top50m",group="top_above",config=(zsrc=17950.,beta=.005),N=50000))52 open(joinpath(OUT,"batch_summary.csv"),"w") do io53 println(io,"case_id,group,batch,N,seed,zsrc_m,ztop_m,zbottom_m,beta_m-1,g,albedo,ray,cloudradius_m,domainradius_m,domaintop_m,full_fov_deg,tau_over,tau_cloud_total,tau_ray,direct_fluence_m-2,total_fluence_12ms_m-2,elapsed_s")54 for (i,c) in enumerate(cases)55 for batch in 1:456 seed=20261021+100*i+batch57 kw=merge((zsrc=16000.,ztop=18000.,zbottom=12000.,beta=.001,g=ICE.g,albedo=ICE.ω0,ray=true,cloudradius=20000.,domainradius=60000.,domaintop=80000.,halfangle=30.),c.config)58 r,secs,direct,τover,τray=makecase(;N=c.N,seed=seed,kw...)59 filename=c.id*"_batch"*string(batch)*".csv"60 writecurve(joinpath(OUT,filename),r)61 fields=(c.id,c.group,batch,c.N,seed,kw.zsrc,kw.ztop,kw.zbottom,kw.beta,kw.g,kw.albedo,kw.ray,kw.cloudradius,kw.domainradius,kw.domaintop,2kw.halfangle,τover,kw.beta*(kw.ztop-kw.zbottom),τray,direct,sum(r.photo)*DT,secs)62 println(io,join(string.(fields),',')); flush(io)63 println("DONE ",c.id," batch",batch," N=",c.N," seconds=",round(secs;digits=2)," total/vac=",sum(r.photo)*DT*4π*(550000-kw.zsrc)^2); flush(stdout)64 end65 end66 end67end6869validate()70rungrid()71