Beispiel #1
0
 public FDTDPropagator(DiscretisationInfo discretisationInfo, ComplexField EField, ComplexField HField, IStructure structure)
 {
     this.discretisationInfo = discretisationInfo;
     this.EField             = EField;
     this.HField             = HField;
     Structure = structure;
 }
Beispiel #2
0
 public Structure(UnitCellDetails unitCellDetails, DiscretisationInfo discretisationInfo)
 {
     this.unitCellDetails    = unitCellDetails;
     this.discretisationInfo = discretisationInfo;
     XCells = SpaceTimeDiscretiser.CalculateDiscreteQuantity(unitCellDetails.XPeriod, discretisationInfo.Dx);
     YCells = SpaceTimeDiscretiser.CalculateDiscreteQuantity(unitCellDetails.YPeriod, discretisationInfo.Dy);
     InitialiseStructure();
 }
Beispiel #3
0
        private static Source CreateSource(DiscretisationInfo discretisationInfo, int timeSteps)
        {
            Func <double, double> timeFunction = GetTimeFunction();
            var sourceFunc = new Source(discretisationInfo.Dt, timeSteps, timeFunction);

            //filename = @"D:\data\sourceCss.dat";
            //WriteLine("Saving the source in " + filename);
            //Save(source.TimeVariation, filename);
            return(sourceFunc);
        }
Beispiel #4
0
 public UnitCellDetails(
     double xPeriod,
     double yPeriod,
     double dielectricBackground,
     double rodholeDielectric,
     double rodHoleRadius,
     DiscretisationInfo discretisationInfo)
 {
     XPeriod = xPeriod;
     YPeriod = yPeriod;
     DielectricBackground = dielectricBackground;
     RodHoleDielectric    = rodholeDielectric;
     RodHoleRadius        = rodHoleRadius;
     DiscretisationInfo   = discretisationInfo;
 }
Beispiel #5
0
        static void Main(string[] args)
        {
            var dx = 0.58652 * u / 40.0;
            var dy = 0.58652 * u / 40.0;
            //calculating the time step using Corant Limit formula
            var dt = 0.9 * CalculateTimeStepUsingCourantLimit(dx, dy);
            var discretisationInfo = new DiscretisationInfo(dx, dy, dt);

            var unitCellDetails = new UnitCellDetails(
                xPeriod: 0.58652 * u,
                yPeriod: 0.58652 * u,
                dielectricBackground: Eps0,
                rodholeDielectric: 3.4 * 3.4 * Eps0,
                rodHoleRadius: 0.2 * 0.58652 * u,
                discretisationInfo: discretisationInfo);


            //creating the structure to be simulated
            var structure = CreateAndSaveStructure(unitCellDetails, discretisationInfo);

            //creating the source to be used to excite the structure
            int    timeSteps = 200000;
            Source source    = CreateSource(discretisationInfo, timeSteps);

            var EField         = new ComplexField(structure.XCells, structure.YCells);
            var HField         = new ComplexField(structure.XCells, structure.YCells);
            var fdtdPropagator = new FDTDPropagator(discretisationInfo, EField, HField, structure);

            fdtdPropagator.OnMultipleReached += (t) => Messenger.SimulationTimeInfos(timeSteps, t);
            var detector1 = new Detector(20, 20);
            var detector2 = new Detector(unitCellDetails.XPeriod / 3.0, unitCellDetails.YPeriod * 0.8, discretisationInfo.Dx, discretisationInfo.Dy);
            var detectors = new List <Detector> {
                detector1, detector2
            };

            WriteLine();
            Messenger.PrintSimulationRunDetails(timeSteps, timeSteps * discretisationInfo.Dt);
            var watch = Stopwatch.StartNew();

            fdtdPropagator.Propagate(timeSteps, source, detectors);
            Messenger.ElapsedTime(watch);
            WriteLine();

            SaveDetectors(detectors);

            WriteLine("Press Enter to terminate");
            ReadLine();
        }
Beispiel #6
0
        private static IStructure CreateAndSaveStructure(UnitCellDetails unitCellDetails, DiscretisationInfo discretisationInfo)
        {
            var    structure         = new Structure(unitCellDetails, discretisationInfo);
            string structureFilename = @"D:\data\structureCss.csv";

            WriteLine("Saving the structure in " + structureFilename);
            Save(structure.Permittivity, structure.XCells, structure.YCells, structureFilename);
            return(structure);
        }