public FDTDPropagator(DiscretisationInfo discretisationInfo, ComplexField EField, ComplexField HField, IStructure structure) { this.discretisationInfo = discretisationInfo; this.EField = EField; this.HField = HField; Structure = structure; }
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(); }
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); }
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; }
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(); }
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); }