@@ -31,45 +31,92 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
3131use strict;
3232use warnings;
3333use PDL;
34+ use PDL::Constants qw( PI) ;
3435use Photonic::WE::S::Haydock;
3536use Photonic::WE::S::Metric;
3637use Photonic::WE::S::Field;
3738
38- use Test::More tests => 2 ;
39+ use Test::More tests => 4 ;
3940use lib ' t/lib' ;
4041use TestUtils;
4142
4243my $ea =r2C(1);
4344my $eb =3+4*i;
4445
45- # Check field for simple 1D system. Longitudinal case
46- my $B =zeroes(11)-> xvals<5; # 1D system
47- my $epsilon =$ea *(1-$B )+$eb *$B ;
48- my $gl =Photonic::Geometry::FromB-> new(B => $B ); # long
49- my $ml =Photonic::WE::S::Metric-> new(geometry => $gl , epsilon => pdl(1),
50- wavenumber => pdl(1), wavevector => pdl([0.01]));
51- my $haydock =Photonic::WE::S::Haydock-> new(
52- metric => $ml , nh => 10, keepStates => 1, polarization => pdl([1])-> r2C,
53- epsilon => $epsilon );
54- my $flo =Photonic::WE::S::Field-> new(haydock => $haydock , nh => 10);
55- my $flv =$flo -> field;
56- my $fla =1/$ea ;
57- my $flb =1/$eb ;
58- my $fproml =$fla *(1-$gl -> f)+$flb *($gl -> f);
59- ($fla , $flb )=map {$_ /$fproml } ($fla , $flb );
60- my $flx =($fla *(1-$B )+$flb *$B )-> transpose;
61- ok(Cagree($flv , $flx ), " 1D long field" );
46+ # Check field for simple 1D system.
47+ {
48+ # Longitudinal case
49+ my $B =zeroes(11)-> xvals<5; # 1D system
50+ my $epsilon =$ea *(1-$B )+$eb *$B ;
51+ my $gl =Photonic::Geometry::FromB-> new(B => $B ); # long
52+ my $ml =Photonic::WE::S::Metric-> new(geometry => $gl , epsilon => pdl(1),
53+ wavenumber => pdl(1), wavevector => pdl([0.01]));
54+ my $haydock =Photonic::WE::S::Haydock-> new(
55+ metric => $ml , nh => 10, keepStates => 1, polarization => pdl([1])-> r2C,
56+ epsilon => $epsilon );
57+ my $flo =Photonic::WE::S::Field-> new(haydock => $haydock , nh => 10);
58+ my $flv =$flo -> field;
59+ my $fla =1/$ea ;
60+ my $flb =1/$eb ;
61+ my $fproml =$fla *(1-$gl -> f)+$flb *($gl -> f);
62+ ($fla , $flb )=map {$_ /$fproml } ($fla , $flb );
63+ my $flx =($fla *(1-$B )+$flb *$B )-> transpose;
64+ ok(Cagree($flv , $flx ), " 1D long field" );
65+ }
66+
67+ {
68+ # View 2D from 1D superlattice. Long wavelength transverse case
69+ my $Bt =zeroes(1,11)-> yvals<5; # 2D flat system
70+ my $epsilont =$ea *(1-$Bt )+$eb *$Bt ;
71+ my $gt =Photonic::Geometry::FromB-> new(B => $Bt ); # trans
72+ my $mt =Photonic::WE::S::Metric-> new(geometry => $gt , epsilon => pdl(1),
73+ wavenumber => pdl(0.001), wavevector => pdl([0,0.0001]));
74+ my $nt =Photonic::WE::S::Haydock-> new(
75+ metric => $mt , nh => 10, keepStates => 1, polarization => pdl([1,0])-> r2C,
76+ epsilon => $epsilont );
77+ my $fto =Photonic::WE::S::Field-> new(haydock => $nt , nh => 10);
78+ my $ftv =$fto -> field;
79+ my $ftx =r2C(pdl [1, 0]);
80+ ok(Cagree($ftv , $ftx ), " 1D trans field" );
81+ }
82+
83+ # Check rawfields for simple 1D system.
84+ # Longitudinal case
85+ {
86+ my $B =zeroes(11)-> xvals<5; # 1D system
87+ my $epsilon =$ea *(1-$B )+$eb *$B ;
88+ my $gl =Photonic::Geometry::FromB-> new(B => $B ); # long
89+ my $ml =Photonic::WE::S::Metric-> new(geometry => $gl , epsilon => pdl(1),
90+ wavenumber => pdl(1), wavevector => pdl([0.01]));
91+ my $haydock =Photonic::WE::S::Haydock-> new(
92+ metric => $ml , nh => 10, keepStates => 1, polarization => pdl([1])-> r2C,
93+ epsilon => $epsilon );
94+ my $flo =Photonic::WE::S::Field-> new(haydock => $haydock , nh => 10);
95+ my $flv =$flo -> rawfield;
96+ my $fla =1/$ea ;
97+ my $flb =1/$eb ;
98+ # my $fproml=$fla*(1-$gl->f)+$flb*($gl->f);
99+ # ($fla, $flb)=map {$_/$fproml} ($fla, $flb);
100+ my $flx =-4*PI*($fla *(1-$B )+$flb *$B )-> transpose;
101+ ok(Cagree($flv , $flx ), " 1D long rawfield" );
102+ }
62103
63104# View 2D from 1D superlattice. Long wavelength transverse case
64- my $Bt =zeroes(1,11)-> yvals<5; # 2D flat system
65- my $epsilont =$ea *(1-$Bt )+$eb *$Bt ;
66- my $gt =Photonic::Geometry::FromB-> new(B => $Bt ); # trans
67- my $mt =Photonic::WE::S::Metric-> new(geometry => $gt , epsilon => pdl(1),
68- wavenumber => pdl(0.001), wavevector => pdl([0,0.0001]));
69- my $nt =Photonic::WE::S::Haydock-> new(
70- metric => $mt , nh => 10, keepStates => 1, polarization => pdl([1,0])-> r2C,
71- epsilon => $epsilont );
72- my $fto =Photonic::WE::S::Field-> new(haydock => $nt , nh => 10);
73- my $ftv =$fto -> field;
74- my $ftx =r2C(pdl [1, 0]);
75- ok(Cagree($ftv , $ftx ), " 1D trans field" );
105+ {
106+ my $Bt =zeroes(1,11)-> yvals<5; # 2D flat system
107+ my $epsilont =$ea *(1-$Bt )+$eb *$Bt ;
108+ my $gt =Photonic::Geometry::FromB-> new(B => $Bt ); # trans
109+ my $q =pdl(0.0001);
110+ my $k =pdl([0,0.0002]);
111+ my $mt =Photonic::WE::S::Metric-> new(geometry => $gt , epsilon => pdl(1),
112+ wavenumber => $q , wavevector => $k );
113+ my $nt =Photonic::WE::S::Haydock-> new(
114+ metric => $mt , nh => 10, keepStates => 1, polarization => pdl([1,0])-> r2C,
115+ epsilon => $epsilont );
116+ my $fto =Photonic::WE::S::Field-> new(haydock => $nt , nh => 10);
117+ my $ftv =$fto -> rawfield;
118+ my $f =$gt -> f;
119+ my $epsM =(1-$f )*$ea +$f *$eb ;
120+ my $ftx =-4*PI*r2C(pdl [1, 0])-> dummy(2,11)*$q **2/($epsM *$q **2-($k **2)-> sumover);
121+ ok(Cagree($ftv , $ftx ), " 1D trans rawfield" );
122+ }
0 commit comments