The OptFiberLocalError class solves the scalar and vector generalized nonlinear Schroedinger equation (NLSE) and the Manakov-PMD equation for propagation of an optical signal in optical fibers. It also solves the scalar Haus master equation (HME) for propagation in lasers. Users are encouraged to first read the document On the use and validation of the OptFiberLocalError class in PhoSSiL More...
#include <ocsOptFiberLocalError.hh>
Public Member Functions | |
OptFiberLocalError (string InFileName, OptSignal *oOptSignal, RanNumGen *RNG2, string Job2) | |
Constructor. | |
void | SetRamanAmpPointer (RamanAmp *oRaman2) |
~OptFiberLocalError (void) | |
Destructor. | |
void | Propagate (double *PropagatedLength, int *ZStepNum) |
Propagates OptSignal object through an optical fiber. | |
void | PropagateWithRaman (double *PropagatedLength, int *ZStepNum, double RamanStartingLength2) |
string | WriteTypeSolver (void) |
string | WriteTypeStepSizes (void) |
string | WriteTypeFiberLossGain (void) |
string | WriteTypeFiberAmplifierNoise (void) |
string | WriteTypeFiberAmplifierGain (void) |
void | OpenStepSizesFile (string StepSizesFileName, int Mode) |
void | WriteStepSizes (double PropagatedLength) |
void | WriteAveragePowerdBm (double PropagatedLength2) |
double | GetFirstOrderDispersion () |
double | GetSecondOrderDispersion () |
double | GetFiberLength () |
double | GetNepperAttenuationFiber () |
double | GetNonLinIndexFiber () |
double | GetGamma () |
double | GetDeltaZ () |
int | GetNumStepsBetweenScatterings () |
void | SetNumStepsBetweenScatterings (int value) |
double | GetDispersion (double Wavelength) |
Returns value of Dispersion in s/m^2 at Wavelength in m. | |
void | SetTypeStepSizes (int TypeStepSizes2) |
void | SetWalkOffParameter (double WalkOffParameter2) |
void | SetConstantDeltaZ (double DeltaZValue) |
void | SetOutputStepSizesFlag (int OutputStepSizesFlag2) |
void | SetRelativeErrorGoal (double RelativeErrorGoal2) |
void | SetFstOrDispFiber (double FstOrDispFiber2) |
void | SetSndOrDispFiber (double SndOrDispFiber2) |
void | RecoverSndOrDispFiber () |
void | SetDispersion (double DispersionFiberRefWavelength, double DispSlopeFiberRefWavelength) |
void | SetGammaFiber (double gamma2) |
void | RecoverGammaFiber () |
void | SetAttenuationdB (double AttenuationFiber2) |
void | SetNepperAttenuation (double NepperAttenuation2) |
void | SetFiberAmplifierUnsaturatedNepperGain (double FiberAmplifierUnsaturatedNepperGain2) |
Enables user to set unsaturated Nepper gain. | |
void | ComputeDeltaZMax (void) |
void | SetWriteAveragePowerdBmFlag (int Value) |
void | SetWritePulseWidthFlag (int Value) |
void | SetFiberLength (double Value) |
void | SetScatteringStepSize (double Value) |
void | GetNewFiberRealization (void) |
void | SetFiberRealization (int SectionNumber, double Theta2, double Phi2, double Psi2) |
void | ApplyPMDCompleteScatteringFreqDomainOperator (int ScatteringSectionIndex) |
void | ComputeEulerMatrixAndUpdateOutputPDVector (int ScatteringSectionIndex) |
void | GetEulerMatrix (double theta, double phi, double psi) |
void | SetFiberLengthsForPMD (void) |
void | SetMeanDGDPerSqrtLength (double MeanDGDPerSqrtLength2) |
void | SetPMD (double PMD2) |
double | GetFreqDerivativeOfBirefringence (void) |
double | GetDGD (void) |
Returns the Differential Group Delay. | |
void | PropagateOutputPDVector (double Freq, double theta, double phi, double psi) |
double | GetExpectedDGD () |
double | GetExpectedSndOrderDGD () |
double | GetMeanDGD_SqrtLength (void) |
void | UpdateJonesMatrixAfterBiregringence (double StepSizeZ) |
OptFiberLocalError (string InFileName, OptSignal *oOptSignal, RanNumGen *RNG2, string Job2) | |
Constructor. | |
void | SetRamanAmpPointer (RamanAmp *oRaman2) |
~OptFiberLocalError (void) | |
Destructor. | |
void | Propagate (double *PropagatedLength, int *ZStepNum) |
Propagates OptSignal object through an optical fiber. | |
void | PropagateWithRaman (double *PropagatedLength, int *ZStepNum, double RamanStartingLength2) |
string | WriteTypeSolver (void) |
string | WriteTypeStepSizes (void) |
string | WriteTypeFiberLossGain (void) |
string | WriteTypeFiberAmplifierNoise (void) |
string | WriteTypeFiberAmplifierGain (void) |
void | OpenStepSizesFile (string StepSizesFileName, int Mode) |
void | WriteStepSizes (double PropagatedLength) |
void | WriteAveragePowerdBm (double PropagatedLength2) |
double | GetFirstOrderDispersion () |
double | GetSecondOrderDispersion () |
double | GetFiberLength () |
double | GetNepperAttenuationFiber () |
double | GetNonLinIndexFiber () |
double | GetGamma () |
double | GetDeltaZ () |
int | GetNumStepsBetweenScatterings () |
void | SetNumStepsBetweenScatterings (int value) |
double | GetDispersion (double Wavelength) |
Returns value of Dispersion in s/m^2 at Wavelength in m. | |
void | SetTypeStepSizes (int TypeStepSizes2) |
void | SetWalkOffParameter (double WalkOffParameter2) |
void | SetConstantDeltaZ (double DeltaZValue) |
void | SetOutputStepSizesFlag (int OutputStepSizesFlag2) |
void | SetRelativeErrorGoal (double RelativeErrorGoal2) |
void | SetFstOrDispFiber (double FstOrDispFiber2) |
void | SetSndOrDispFiber (double SndOrDispFiber2) |
void | RecoverSndOrDispFiber () |
void | SetDispersion (double DispersionFiberRefWavelength, double DispSlopeFiberRefWavelength) |
void | SetGammaFiber (double gamma2) |
void | RecoverGammaFiber () |
void | SetAttenuationdB (double AttenuationFiber2) |
void | SetNepperAttenuation (double NepperAttenuation2) |
void | SetFiberAmplifierUnsaturatedNepperGain (double FiberAmplifierUnsaturatedNepperGain2) |
Enables user to set unsaturated Nepper gain. | |
void | ComputeDeltaZMax (void) |
void | SetWriteAveragePowerdBmFlag (int Value) |
void | SetWritePulseWidthFlag (int Value) |
void | SetFiberLength (double Value) |
void | SetScatteringStepSize (double Value) |
void | GetNewFiberRealization (void) |
void | SetFiberRealization (int SectionNumber, double Theta2, double Phi2, double Psi2) |
void | ApplyPMDCompleteScatteringFreqDomainOperator (int ScatteringSectionIndex) |
void | ComputeEulerMatrixAndUpdateOutputPDVector (int ScatteringSectionIndex) |
void | GetEulerMatrix (double theta, double phi, double psi) |
void | SetFiberLengthsForPMD (void) |
void | SetMeanDGDPerSqrtLength (double MeanDGDPerSqrtLength2) |
void | SetPMD (double PMD2) |
double | GetFreqDerivativeOfBirefringence (void) |
double | GetDGD (void) |
void | PropagateOutputPDVector (double Freq, double theta, double phi, double psi) |
double | GetExpectedDGD () |
double | GetExpectedSndOrderDGD () |
double | GetMeanDGD_SqrtLength (void) |
void | UpdateJonesMatrixAfterBiregringence (double StepSizeZ) |
OptFiberLocalError (string InFileName, OptSignal *oOptSignal, RanNumGen *RNG2, string Job2) | |
Constructor. | |
void | SetRamanAmpPointer (RamanAmp *oRaman2) |
~OptFiberLocalError (void) | |
Destructor. | |
void | Propagate (double *PropagatedLength, int *ZStepNum) |
Propagates OptSignal object through an optical fiber. | |
void | PropagateWithRaman (double *PropagatedLength, int *ZStepNum, double RamanStartingLength2) |
string | WriteTypeSolver (void) |
string | WriteTypeStepSizes (void) |
string | WriteTypeFiberLossGain (void) |
string | WriteTypeFiberAmplifierNoise (void) |
string | WriteTypeFiberAmplifierGain (void) |
void | OpenStepSizesFile (string StepSizesFileName, int Mode) |
void | WriteStepSizes (double PropagatedLength) |
void | WriteAveragePowerdBm (double PropagatedLength2) |
double | GetFirstOrderDispersion () |
double | GetSecondOrderDispersion () |
double | GetFiberLength () |
double | GetNepperAttenuationFiber () |
double | GetNonLinIndexFiber () |
double | GetGamma () |
double | GetDeltaZ () |
int | GetNumStepsBetweenScatterings () |
void | SetNumStepsBetweenScatterings (int value) |
double | GetDispersion (double Wavelength) |
Returns value of Dispersion in s/m^2 at Wavelength in m. | |
void | SetTypeStepSizes (int TypeStepSizes2) |
void | SetWalkOffParameter (double WalkOffParameter2) |
void | SetConstantDeltaZ (double DeltaZValue) |
void | SetOutputStepSizesFlag (int OutputStepSizesFlag2) |
void | SetRelativeErrorGoal (double RelativeErrorGoal2) |
void | SetFstOrDispFiber (double FstOrDispFiber2) |
void | SetSndOrDispFiber (double SndOrDispFiber2) |
void | RecoverSndOrDispFiber () |
void | SetDispersion (double DispersionFiberRefWavelength, double DispSlopeFiberRefWavelength) |
void | SetGammaFiber (double gamma2) |
void | RecoverGammaFiber () |
void | SetAttenuationdB (double AttenuationFiber2) |
void | SetNepperAttenuation (double NepperAttenuation2) |
void | SetFiberAmplifierUnsaturatedNepperGain (double FiberAmplifierUnsaturatedNepperGain2) |
Enables user to set unsaturated Nepper gain. | |
void | ComputeDeltaZMax (void) |
void | SetWriteAveragePowerdBmFlag (int Value) |
void | SetWritePulseWidthFlag (int Value) |
void | SetFiberLength (double Value) |
void | SetScatteringStepSize (double Value) |
void | GetNewFiberRealization (void) |
void | SetFiberRealization (int SectionNumber, double Theta2, double Phi2, double Psi2) |
void | ApplyPMDCompleteScatteringFreqDomainOperator (int ScatteringSectionIndex) |
void | ComputeEulerMatrixAndUpdateOutputPDVector (int ScatteringSectionIndex) |
void | GetEulerMatrix (double theta, double phi, double psi) |
void | SetFiberLengthsForPMD (void) |
void | SetMeanDGDPerSqrtLength (double MeanDGDPerSqrtLength2) |
void | SetPMD (double PMD2) |
double | GetFreqDerivativeOfBirefringence (void) |
double | GetDGD (void) |
void | PropagateOutputPDVector (double Freq, double theta, double phi, double psi) |
double | GetExpectedDGD () |
double | GetExpectedSndOrderDGD () |
double | GetMeanDGD_SqrtLength (void) |
void | UpdateJonesMatrixAfterBiregringence (double StepSizeZ) |
Public Attributes | |
RamanAmp * | oRaman |
Private Member Functions | |
void | PropagateWithPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateWithoutPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateLocalError (double *PropagatedLength, int *ZStepNum) |
void | PropagateConstStepSizeOrWalkOff (double *PropagatedLength, int *ZStepNum) |
void | ResetVolatileVariables (void) |
void | UpdateFreq (void) |
void | UpdateTime (void) |
void | ComputeWalkOffStepSize (void) |
void | ComputeDispersionOperator (double StepSizeZ) |
void | ApplyDispersionOperator (bool ApplyTwiceFlag) |
void | ApplySaturableGainOperator (double StepSizeZ) |
void | ApplyFreqDomainOperator (bool ApplyDispersionTwiceFlag, double GainSatStepSizeZ) |
void | ApplyRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyTimeDomainOperator (double StepSizeZ) |
void | ApplyKerrNonlinearityOperator (double StepSizeZ) |
void | ApplyFastSaturableAbsorptionOperator (double StepSizeZ) |
void | ApplyFastSaturableAbsorptionQuadraticAnalytic (double StepSizeZ) |
void | ApplyFastSaturableAbsorptionHeunsMethod (double StepSizeZ) |
cplx | FastSaturableAbsorptionFunction (cplx u) |
double | ComputeMaxPower (void) |
void | CopyFftMatricesFreqData (fftMatrices *OrigData, fftMatrices *CopyOfData) |
double | ComputeThirdOrderSolutionAndRelativeError (void) |
double | ComputeThirdOrderSolutionAndRelativeErrorOLD (void) |
void | UpdateAccumulatedFirstOrderDispersion (double StepSize) |
void | UpdateAccumulatedSecondOrderDispersion (double StepSize) |
void | FiberAmplifierComputeSaturableGain (void) |
double | FiberAmplifierComputeSaturableGainForHeunsMethod (bool FirstStep) |
double | FiberAmplifierGetEnergyForHeunsMethod (bool FirstStep) |
void | FiberAmplifierComputeNoiseAmplitudeFactor (double StepSize) |
void | FiberAmplifierAddMonteCarloNoise (double StepSize) |
void | AllocateMemoryForEulerAngles (void) |
void | ApplySimpleRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyFullRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | PropagateWithPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateWithoutPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateLocalError (double *PropagatedLength, int *ZStepNum) |
void | PropagateConstStepSizeOrWalkOff (double *PropagatedLength, int *ZStepNum) |
void | ResetVolatileVariables (void) |
void | UpdateFreq (void) |
void | UpdateTime (void) |
void | ComputeWalkOffStepSize (void) |
void | ComputeFreqDomainOperator (double StepSizeZ) |
void | ApplyFreqDomainOperator (bool ApplyTwiceFlag) |
void | ApplyRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyTimeDomainOperator (double StepSizeZ) |
double | ComputeMaxPower (void) |
void | CopyFftMatricesFreqData (fftMatrices *OrigData, fftMatrices *CopyOfData) |
double | ComputeThirdOrderSolutionAndRelativeError (void) |
double | ComputeThirdOrderSolutionAndRelativeErrorOLD (void) |
void | UpdateAccumulatedFirstOrderDispersion (double StepSize) |
void | UpdateAccumulatedSecondOrderDispersion (double StepSize) |
void | FiberAmplifierComputeSaturableGain (void) |
void | FiberAmplifierComputeNoiseAmplitudeFactor (double StepSize) |
void | FiberAmplifierAddMonteCarloNoise (double StepSize) |
void | AllocateMemoryForEulerAngles (void) |
void | ApplySimpleRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyFullRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | PropagateWithPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateWithoutPMD (double *PropagatedLength, int *ZStepNum) |
void | PropagateLocalError (double *PropagatedLength, int *ZStepNum) |
void | PropagateConstStepSizeOrWalkOff (double *PropagatedLength, int *ZStepNum) |
void | ResetVolatileVariables (void) |
void | UpdateFreq (void) |
void | UpdateTime (void) |
void | ComputeWalkOffStepSize (void) |
void | ComputeDispersionOperator (double StepSizeZ) |
void | ApplyDispersionOperator (bool ApplyTwiceFlag) |
void | ApplySaturableParabolicGainOperator (double StepSizeZ) |
void | ApplyFreqDomainOperator (bool ApplyDispersionTwiceFlag, double GainSatStepSizeZ) |
void | ApplyRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyTimeDomainOperator (double StepSizeZ) |
double | ComputeMaxPower (void) |
void | CopyFftMatricesFreqData (fftMatrices *OrigData, fftMatrices *CopyOfData) |
double | ComputeThirdOrderSolutionAndRelativeError (void) |
double | ComputeThirdOrderSolutionAndRelativeErrorOLD (void) |
void | UpdateAccumulatedFirstOrderDispersion (double StepSize) |
void | UpdateAccumulatedSecondOrderDispersion (double StepSize) |
void | FiberAmplifierComputeSaturableGain (void) |
double | FiberAmplifierComputeSaturableGainForHeunsMethod (bool FirstStep) |
double | FiberAmplifierGetEnergyForHeunsMethod (bool FirstStep) |
void | FiberAmplifierComputeNoiseAmplitudeFactor (double StepSize) |
void | FiberAmplifierAddMonteCarloNoise (double StepSize) |
void | AllocateMemoryForEulerAngles (void) |
void | ApplySimpleRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
void | ApplyFullRamanOperator (double CurrentZValueWithinFiber2, double ZStep2) |
Private Attributes | |
ofstream | StepSizesFile |
int | OutputStepSizesFlag |
int | StepSizesFileMode |
string | Job |
typeSimulation | TypeSimulation |
typeSolver | TypeSolver |
Specifies precisely which PDE is to be solved. | |
typeStepSizes | TypeStepSizes |
typeFiberLossGain | TypeFiberLossGain |
typeFiberAmplifierNoise | TypeFiberAmplifierNoise |
double | FiberAmplifierSpontaneousEmissionFactor |
double | FiberAmplifierNoiseMaxStepSizeFactor |
The max step size for a fiber amplifier. | |
double | FiberAmplifierGainSaturationMaxGainPerStep |
Used to control maximum step size for saturable gain. | |
double | FiberAmplifierNoiseAmplitudeFactor |
Analogous to OptAmplifier::NoiseAmplitudeFactor. | |
typeFiberAmplifierGain | TypeFiberAmplifierGain |
See enum typeFiberAmplifierGain. | |
double | FiberAmplifierSuperGaussFiltGainCoefficient |
int | FiberAmplifierSuperGaussFiltOrder |
double | FiberAmplifierUnsaturatedNepperGain |
double | FiberAmplifierSaturationEnergy |
double | FiberAmplifierSaturableGainPerLength |
Internal parameter for FiberAmplifier with saturable gain. | |
typeFastSaturableAbsorption | TypeFastSaturableAbsorption |
double | FastSaturableAbsorptionCoefficient |
Coefficient for FastSaturableAbsorption. | |
bool | DoFastSaturableAbsorptionFlag |
bool | DoTimeOperatorExactlyFlag |
Input variable used in method ApplyTimeDomainOperator. | |
bool | DispersionOperatorValid |
Flag that controls when to recompute DispersionOperator. | |
int | ScalarSolverEightNinthsFlag |
OptSignal * | oOptSignal |
RanNumGen * | RNG |
cfftw * | fft |
fftMatrices | sfftM |
cplx * | FreqDomainOperatorX |
cplx * | FreqDomainOperatorY |
cplx * | SqFreqDomainOperatorX |
cplx * | SqFreqDomainOperatorY |
fftMatrices | sfftM_Start |
fftMatrices | sfftM_Coarse |
cplx * | LaserWorkX |
cplx * | LaserWorkY |
double | LengthFiber |
double | RamanStartingLength |
double | PropagatedLengthStartFiber |
int | NumStepsBetweenScatterings |
double | ReferenceFreq |
double | ReferenceWavelength |
double | DispersionFiberCenterWavelength |
double | DispSlopeFiberCenterWavelength |
bool | SetFstSndOrDispDirectlyFlag |
double | FstOrDispFiber |
double | SndOrDispFiber |
double | SndOrDispFiber_Save |
double | NonLinIndexFiber |
int | WithNonLin |
double | EffectAreaFiber |
double | AttenuationFiber |
The fiber optical power attenuation (or gain) parameter in dB/m. | |
double | NepperAttenuationFiber |
typeRamanAmplification | TypeRamanAmplification |
double | RamanOnOffGaindB |
double | NepperRamanGain |
double | NepperRamanPumpLoss |
double | CenterFreq |
int | qtPoints |
double | DeltaFreq |
double | gamma |
double | gamma_Save |
double | CurrentZValueWithinFiber |
double | DeltaZ |
The step size taken in each step. | |
double | DeltaZMaxInfile |
double | DeltaZMax |
double | DeltaZInitial |
Used to set initial step size for the fiber when using Local Error method. | |
bool | InitializedDeltaZInitialFlag |
double | WalkOffStepSize |
double | WalkOffLastStepSize |
int | WalkOffNumSteps |
double | WalkOffParameter |
double | MaxPower |
double | FWHM_Pulse |
bool | TimeDataValid |
bool | FreqDataValid |
double | RelativeError |
double | RelativeErrorGoal |
int | LocalErrorFreqLimit |
int | WriteAveragePowerdBmFlag |
int | WritePulseWidthFlag |
double * | OutputPDVector |
double * | InputPDVector |
double | PMD |
double | MeanDGDPerSqrtLength |
double | ScatteringStepSize |
cplx | EulerMatrix [2][2] |
int | NumberScatterings |
double | TotalLengthFiber |
double | LengthFiberExceptLast |
double | LengthFiberLast |
double * | Theta |
double * | Phi |
double * | Psi |
double * | PDVectorHai |
cplx * | JonesMatrix |
int | NumberOfChannels |
double * | FreqChannels |
double | FiberAmplifierParabolicGainCoefficient |
bool | FreqDomainOperatorValid |
Flag that controls when to recompute FreqDomainOperator. |
The OptFiberLocalError class solves the scalar and vector generalized nonlinear Schroedinger equation (NLSE) and the Manakov-PMD equation for propagation of an optical signal in optical fibers. It also solves the scalar Haus master equation (HME) for propagation in lasers. Users are encouraged to first read the document On the use and validation of the OptFiberLocalError class in PhoSSiL
This class is used to propagate an optical signal through a fiber with first- and second-order chromatic dispersion, Kerr nonlinearity, fiber loss, fiber amplification (with optional saturable gain, parabolic gain shape and noise), fast saturable absorption, polarization-mode dispersion (PMD), and Raman amplification.
The class allows for SCALAR or VECTOR signals, although not all physical effects are verified/implemented for VECTOR signals.
This class was written by John Zweck, based on the following references:
The files linked below are an application code with input parameter files for a simple application of the OptFiberLocalError class. This application solves the Haus Master Equation using an initial chirped sech pulse. In the references above Haus gives an analytical formula for the solution which we have coded up in the matlab files below. The agreement with PhoSSiL is excellent. The matlab code should first be used to determine the parameters of the input chirped sech pulse for a given choice of fiber parameters.
Input parameter files [.tar.gz]
The files linked below show how to model a realistic optical fiber communications system, loosely based on a WDM system of Tyco's from about 1998.
The file LinearnTyco.cc contains several functions. The simplest is the first, TycoNoiseFree().
Input parameter files [.tar.gz]
To explain the step-size selection algorithms used we first consider the case that there is no PMD, ie when OptFiberLocalError::TypeSolver = SCALAR_NLS, or OptFiberLocalError::TypeSolver = VECTOR_MANAKOV_NO_PMD. We use the second-order symmetric split-step scheme to solve the PDE, as explained in Agrawal's book and in Oleg Sinkin's JLT paper referenced above.
The input parameter OptFiberLocalError::TypeStepSizes specifies which step size selection algorithm to use.
The WALK_OFF and CONSTANT step size algorithms are explained in OptFiberLocalError::TypeStepSizes.
We now explain the LOCAL_ERROR_3RD and LOCAL_ERROR_2ND step size selection criteria. We assume the user has read Oleg Sinkin's JLT paper on these algorithms referenced above.
The most important feature of the algorithm is that for each step along the fiber the step size is automatically chosen to satisfy a local error bound.
We first take a coarse split-step step of size OptFiberLocalError::DeltaZ, which we compare to the result of taking two fine steps each of size DeltaZ/2 starting from the same point that we started the coarse step from.
We compare the coarse step and fine step solutions and compute the local L^2 error of that step which is
OptFiberLocalError::RelativeError = sqrt( integral | coarse - fine | ^2 \ integral | fine | ^2 ).
The integral is done in the frequency domain over the number of modes OptSignal::RelevantNumModesOFLE, which is computed in void OptSignal::ComputeRelevantNumModesOFLE(void)
If TypeStepSizes == LOCAL_ERROR_3RD then the solution at the end of the step is set to be:
third-order solution = 4/3 coarse solution - 1/2 fine solution.
If TypeStepSizes == LOCAL_ERROR_2ND then the solution at the end of the step is set to be the fine solution.
The step sizes are controlled using a single input parameter OptFiberLocalError::RelativeErrorGoal.
The value of RelativeError is used to decide whether to accept the step or reject it.
If RelativeError > 2.0*RelativeErrorGoal
Else
Each time we propagate through a particular fiber, we first try to take a step of size OptFiberLocalError::DeltaZInitial. (A step with this size may or may not be accepted.)
We set DeltaZInitial as follows. The very first time through the fiber the first step size we try is
DeltaZInitial = 0.5*OptFiberLocalErrorDeltaZMax. (This is very ad-hoc).
At the end of the first step we actually take in the fiber, DeltaZInitial is set to the coarse step size that we actually took.
The next time through the fiber we try a coarse step of size DeltaZInitial.
One final point. At the start of each step we make sure that the coarse-step step size DeltaZ does not exceed the input parameter OptFiberLocalError::DeltaZMax. We also make sure that the total propagation distance does not exceed OptFiberLocalError::LengthFiber.
Overall, we need 6 FFTs per step: 2 for the coarse step plus 4 for the fine step, plus 1 to update the time domain when the end of the fiber leg is reached.
For simulations with PMD (TypeSolver = VECTOR_MANAKOV_PMD) we use the following adaptation by Zweck and Marks of the coarse-step algorithm of Marcuse, Menyuk and Wai (and others).
The basic idea is to divide up the fiber into sections. Within each section we propagate as in the case of TypeSolver = VECTOR_MANAKOV_NO_PMD as described above, using one of the four options for TypeStepSizes. At the start of each section we randomly rotate light on the Poincar'e sphere.
Also, if TypeSolver = VECTOR_MANAKOV_PMD, we model the birefringence as follows. In each step of the split-step algorithm we implement this walk-off between orthogonal polarization states in the frequency domain in the method OptFiberLocalError::ComputeFreqDomainOperator().
For a single section without a random rotation the X-polarization state is the fast axis and the Y-polarization the slow axis. This means that if we launch with Stokes parameters (1,0,0), i.e, X-polarized, then the signal is shifted left by PMD/2. Why left? Well we work with retarded time, t_ret = t - v_g z. If we launch in the fast axis, then v_g is larger and so t_ret of the center of a pulse will be smaller than would be the case without PMD.
We introduce a new parameter OptFiberLocalError::TotalLengthFiber = OptFiberLocalError::LengthFiber. The lengths of the sections are determined from the input parameter OptFiberLocalError::ScatteringStepSize in the method OptFiberLocalError::SetFiberLengthsForPMD(). This method sets the lengths of the sections using the variables
OptFiberLocalError::SetFiberLengthsForPMD() also allocates memory to store the Euler angles parametrizing the random rotation for each section, and calls OptFiberLocalError::GetNewFiberRealization() to get a new realization of the fiber rotations. We choose the Euler angles randomly so that the rotations are uniformily distributed on the Poincar'e sphere, as in the method OptFiber::GetFiberSampleCompleteScatt().
For propagation through each of the NumberScatterings sections we set OptFiberLocalError::LengthFiber using either LengthFiberExceptLast or LengthFiberLast. We then call the methods
For the two LOCAL_ERROR step size selection methods, for the first section of fiber we choose DeltaZInitial as in the case of no PMD. For subsequent sections, we choose DeltaZInitial to be the size of the last step in the previous section. In this way, if there the PMD was negligible we would get the same distribution of step sizes as when we would run VECTOR_MANAKOV_NO_PMD.
In addition to doing propagation the code solves the concatenation equations for the output polarization dispersion vector in the method OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector() which is called from OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator().
To compute the OutputPDVector for propagation through an entire system, not just through a single fiber, the OutputPDVector is really a variable in the OptSignal class, OptSignal::OutputPDVectorOFLE.
The total DGD up to the present point in the system can be obtained by calling OptFiberLocalError::GetDGD(), which just computes the length of the OutputPDVector. When you regenerate the optical signal for a new pass through the system in OptSignal::RegenerateSignalString(), the OutputPDVector and InputPDVectors are reset by calling OptSignal::ResetPDVectorOFLE().
This class is used to propagate an optical signal through a fiber with first- and second-order chromatic dispersion, Kerr nonlinearity, fiber loss, fiber amplification (with optional saturable gain, parabolic gain shape and noise), fast saturable absorption, polarization-mode dispersion (PMD), and Raman amplification.
The class allows for SCALAR or VECTOR signals, although not all physical effects are implemented for VECTOR signals.
This class was written by John Zweck, based on the following references:
The files linked below are an application code with input parameter files for a simple application of the OptFiberLocalError class. This application solves the Haus Master Equation using an initial chirped sech pulse. In the references above Haus gives an analytical formula for the solution which we have coded up in the matlab files below. The agreement with PhoSSiL is excellent. The matlab code should first be used to determine the parameters of the input chirped sech pulse for a given choice of fiber parameters.
Input parameter files [.tar.gz]
The files linked below show how to model a realistic optical fiber communications system, loosely based on a WDM system of Tyco's from about 1998.
The file LinearnTyco.cc contains several functions. The simplest is the first, TycoNoiseFree().
Input parameter files [.tar.gz]
To explain the step-size selection algorithms used we first consider the case that there is no PMD, ie when OptFiberLocalError::TypeSolver = SCALAR_NLS, or OptFiberLocalError::TypeSolver = VECTOR_MANAKOV_NO_PMD. We use the second-order symmetric split-step scheme to solve the PDE, as explained in Agrawal's book and in Oleg Sinkin's JLT paper referenced above.
The input parameter OptFiberLocalError::TypeStepSizes specifies which step size selection algorithm to use.
The WALK_OFF and CONSTANT step size algorithms are explained in OptFiberLocalError::TypeStepSizes.
We now explain the LOCAL_ERROR_3RD and LOCAL_ERROR_2ND step size selection criteria. We assume the user has read Oleg Sinkin's JLT paper on these algorithms referenced above.
The most important feature of the algorithm is that for each step along the fiber the step size is automatically chosen to satisfy a local error bound.
We first take a coarse split-step step of size OptFiberLocalError::DeltaZ, which we compare to the result of taking two fine steps each of size DeltaZ/2 starting from the same point that we started the coarse step from.
We compare the coarse step and fine step solutions and compute the local L^2 error of that step which is
OptFiberLocalError::RelativeError = sqrt( integral | coarse - fine | ^2 \ integral | fine | ^2 ).
The integral is done in the frequency domain over the number of modes OptSignal::RelevantNumModesOFLE, which is computed in void OptSignal::ComputeRelevantNumModesOFLE(void)
If TypeStepSizes == LOCAL_ERROR_3RD then the solution at the end of the step is set to be:
third-order solution = 4/3 coarse solution - 1/2 fine solution.
If TypeStepSizes == LOCAL_ERROR_2ND then the solution at the end of the step is set to be the fine solution.
The step sizes are controlled using a single input parameter OptFiberLocalError::RelativeErrorGoal.
The value of RelativeError is used to decide whether to accept the step or reject it.
If RelativeError > 2.0*RelativeErrorGoal
Else
Each time we propagate through a particular fiber, we first try to take a step of size OptFiberLocalError::DeltaZInitial. (A step with this size may or may not be accepted.)
We set DeltaZInitial as follows. The very first time through the fiber the first step size we try is
DeltaZInitial = 0.5*OptFiberLocalErrorDeltaZMax. (This is very ad-hoc).
At the end of the first step we actually take in the fiber, DeltaZInitial is set to the coarse step size that we actually took.
The next time through the fiber we try a coarse step of size DeltaZInitial.
One final point. At the start of each step we make sure that the coarse-step step size DeltaZ does not exceed the input parameter OptFiberLocalError::DeltaZMax. We also make sure that the total propagation distance does not exceed OptFiberLocalError::LengthFiber.
Overall, we need 6 FFTs per step: 2 for the coarse step plus 4 for the fine step, plus 1 to update the time domain when the end of the fiber leg is reached.
For simulations with PMD (TypeSolver = VECTOR_MANAKOV_PMD) we use the following adaptation by Zweck and Marks of the coarse-step algorithm of Marcuse, Menyuk and Wai (and others).
The basic idea is to divide up the fiber into sections. Within each section we propagate as in the case of TypeSolver = VECTOR_MANAKOV_NO_PMD as described above, using one of the four options for TypeStepSizes. At the start of each section we randomly rotate light on the Poincar'e sphere.
Also, if TypeSolver = VECTOR_MANAKOV_PMD, we model the birefringence as follows. In each step of the split-step algorithm we implement this walk-off between orthogonal polarization states in the frequency domain in the method OptFiberLocalError::ComputeFreqDomainOperator().
For a single section without a random rotation the X-polarization state is the fast axis and the Y-polarization the slow axis. This means that if we launch with Stokes parameters (1,0,0), i.e, X-polarized, then the signal is shifted left by PMD/2. Why left? Well we work with retarded time, t_ret = t - v_g z. If we launch in the fast axis, then v_g is larger and so t_ret of the center of a pulse will be smaller than would be the case without PMD.
We introduce a new parameter OptFiberLocalError::TotalLengthFiber = OptFiberLocalError::LengthFiber. The lengths of the sections are determined from the input parameter OptFiberLocalError::ScatteringStepSize in the method OptFiberLocalError::SetFiberLengthsForPMD(). This method sets the lengths of the sections using the variables
OptFiberLocalError::SetFiberLengthsForPMD() also allocates memory to store the Euler angles parametrizing the random rotation for each section, and calls OptFiberLocalError::GetNewFiberRealization() to get a new realization of the fiber rotations. We choose the Euler angles randomly so that the rotations are uniformily distributed on the Poincar'e sphere, as in the method OptFiber::GetFiberSampleCompleteScatt().
For propagation through each of the NumberScatterings sections we set OptFiberLocalError::LengthFiber using either LengthFiberExceptLast or LengthFiberLast. We then call the methods
For the two LOCAL_ERROR step size selection methods, for the first section of fiber we choose DeltaZInitial as in the case of no PMD. For subsequent sections, we choose DeltaZInitial to be the size of the last step in the previous section. In this way, if there the PMD was negligible we would get the same distribution of step sizes as when we would run VECTOR_MANAKOV_NO_PMD.
In addition to doing propagation the code solves the concatenation equations for the output polarization dispersion vector in the method OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector() which is called from OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator().
To compute the OutputPDVector for propagation through an entire system, not just through a single fiber, the OutputPDVector is really a variable in the OptSignal class, OptSignal::OutputPDVectorOFLE.
The total DGD up to the present point in the system can be obtained by calling OptFiberLocalError::GetDGD(), which just computes the length of the OutputPDVector. When you regenerate the optical signal for a new pass through the system in OptSignal::RegenerateSignalString(), the OutputPDVector and InputPDVectors are reset by calling OptSignal::ResetPDVectorOFLE().
This class is used to propagate an optical signal through a fiber with first- and second-order chromatic dispersion, Kerr nonlinearity, fiber loss, fiber amplification (with optional saturable gain, parabolic gain shape and noise), fast saturable absorption, polarization-mode dispersion (PMD), and Raman amplification.
The class allows for SCALAR or VECTOR signals, although not all physical effects are implemented for VECTOR signals.
This class was written by John Zweck, based on the following references:
The files linked below are an application code with input parameter files for a simple application of the OptFiberLocalError class. This application solves the Haus Master Equation using an initial chirped sech pulse. In the references above Haus gives an analytical formula for the solution which we have coded up in the matlab files below. The agreement with PhoSSiL is excellent. The matlab code should first be used to determine the parameters of the input chirped sech pulse for a given choice of fiber parameters.
Input parameter files [.tar.gz]
The files linked below show how to model a realistic optical fiber communications system, loosely based on a WDM system of Tyco's from about 1998.
The file LinearnTyco.cc contains several functions. The simplest is the first, TycoNoiseFree().
Input parameter files [.tar.gz]
To explain the step-size selection algorithms used we first consider the case that there is no PMD, ie when OptFiberLocalError::TypeSolver = SCALAR_NLS, or OptFiberLocalError::TypeSolver = VECTOR_MANAKOV_NO_PMD. We use the second-order symmetric split-step scheme to solve the PDE, as explained in Agrawal's book and in Oleg Sinkin's JLT paper referenced above.
The input parameter OptFiberLocalError::TypeStepSizes specifies which step size selection algorithm to use.
The WALK_OFF and CONSTANT step size algorithms are explained in OptFiberLocalError::TypeStepSizes.
We now explain the LOCAL_ERROR_3RD and LOCAL_ERROR_2ND step size selection criteria. We assume the user has read Oleg Sinkin's JLT paper on these algorithms referenced above.
The most important feature of the algorithm is that for each step along the fiber the step size is automatically chosen to satisfy a local error bound.
We first take a coarse split-step step of size OptFiberLocalError::DeltaZ, which we compare to the result of taking two fine steps each of size DeltaZ/2 starting from the same point that we started the coarse step from.
We compare the coarse step and fine step solutions and compute the local L^2 error of that step which is
OptFiberLocalError::RelativeError = sqrt( integral | coarse - fine | ^2 \ integral | fine | ^2 ).
The integral is done in the frequency domain over the number of modes OptSignal::RelevantNumModesOFLE, which is computed in void OptSignal::ComputeRelevantNumModesOFLE(void)
If TypeStepSizes == LOCAL_ERROR_3RD then the solution at the end of the step is set to be:
third-order solution = 4/3 coarse solution - 1/2 fine solution.
If TypeStepSizes == LOCAL_ERROR_2ND then the solution at the end of the step is set to be the fine solution.
The step sizes are controlled using a single input parameter OptFiberLocalError::RelativeErrorGoal.
The value of RelativeError is used to decide whether to accept the step or reject it.
If RelativeError > 2.0*RelativeErrorGoal
Else
Each time we propagate through a particular fiber, we first try to take a step of size OptFiberLocalError::DeltaZInitial. (A step with this size may or may not be accepted.)
We set DeltaZInitial as follows. The very first time through the fiber the first step size we try is
DeltaZInitial = 0.5*OptFiberLocalErrorDeltaZMax. (This is very ad-hoc).
At the end of the first step we actually take in the fiber, DeltaZInitial is set to the coarse step size that we actually took.
The next time through the fiber we try a coarse step of size DeltaZInitial.
One final point. At the start of each step we make sure that the coarse-step step size DeltaZ does not exceed the input parameter OptFiberLocalError::DeltaZMax. We also make sure that the total propagation distance does not exceed OptFiberLocalError::LengthFiber.
Overall, we need 6 FFTs per step: 2 for the coarse step plus 4 for the fine step, plus 1 to update the time domain when the end of the fiber leg is reached.
For simulations with PMD (TypeSolver = VECTOR_MANAKOV_PMD) we use the following adaptation by Zweck and Marks of the coarse-step algorithm of Marcuse, Menyuk and Wai (and others).
The basic idea is to divide up the fiber into sections. Within each section we propagate as in the case of TypeSolver = VECTOR_MANAKOV_NO_PMD as described above, using one of the four options for TypeStepSizes. At the start of each section we randomly rotate light on the Poincar'e sphere.
Also, if TypeSolver = VECTOR_MANAKOV_PMD, we model the birefringence as follows. In each step of the split-step algorithm we implement this walk-off between orthogonal polarization states in the frequency domain in the method OptFiberLocalError::ComputeFreqDomainOperator().
For a single section without a random rotation the X-polarization state is the fast axis and the Y-polarization the slow axis. This means that if we launch with Stokes parameters (1,0,0), i.e, X-polarized, then the signal is shifted left by PMD/2. Why left? Well we work with retarded time, t_ret = t - v_g z. If we launch in the fast axis, then v_g is larger and so t_ret of the center of a pulse will be smaller than would be the case without PMD.
We introduce a new parameter OptFiberLocalError::TotalLengthFiber = OptFiberLocalError::LengthFiber. The lengths of the sections are determined from the input parameter OptFiberLocalError::ScatteringStepSize in the method OptFiberLocalError::SetFiberLengthsForPMD(). This method sets the lengths of the sections using the variables
OptFiberLocalError::SetFiberLengthsForPMD() also allocates memory to store the Euler angles parametrizing the random rotation for each section, and calls OptFiberLocalError::GetNewFiberRealization() to get a new realization of the fiber rotations. We choose the Euler angles randomly so that the rotations are uniformily distributed on the Poincar'e sphere, as in the method OptFiber::GetFiberSampleCompleteScatt().
For propagation through each of the NumberScatterings sections we set OptFiberLocalError::LengthFiber using either LengthFiberExceptLast or LengthFiberLast. We then call the methods
For the two LOCAL_ERROR step size selection methods, for the first section of fiber we choose DeltaZInitial as in the case of no PMD. For subsequent sections, we choose DeltaZInitial to be the size of the last step in the previous section. In this way, if there the PMD was negligible we would get the same distribution of step sizes as when we would run VECTOR_MANAKOV_NO_PMD.
In addition to doing propagation the code solves the concatenation equations for the output polarization dispersion vector in the method OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector() which is called from OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator().
To compute the OutputPDVector for propagation through an entire system, not just through a single fiber, the OutputPDVector is really a variable in the OptSignal class, OptSignal::OutputPDVectorOFLE.
The total DGD up to the present point in the system can be obtained by calling OptFiberLocalError::GetDGD(), which just computes the length of the OutputPDVector. When you regenerate the optical signal for a new pass through the system in OptSignal::RegenerateSignalString(), the OutputPDVector and InputPDVectors are reset by calling OptSignal::ResetPDVectorOFLE().
OptFiberLocalError::OptFiberLocalError | ( | string | InFileName, | |
OptSignal * | oOptSignal, | |||
RanNumGen * | RNG2, | |||
string | Job2 | |||
) |
Constructor.
References AttenuationFiber, CenterFreq, ComputeDeltaZMax(), CONSTANT, cfftw::delta_f, DeltaFreq, DeltaZ, DeltaZInitial, DeltaZMaxInfile, DoFastSaturableAbsorptionFlag, DoTimeOperatorExactlyFlag, EffectAreaFiber, FastSaturableAbsorptionCoefficient, OptSignal::fft, fft, FIBER_AMP_NOISE_OFF, FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FIBER_AMPLIFIER, FiberAmplifierGainSaturationMaxGainPerStep, FiberAmplifierNoiseMaxStepSizeFactor, FiberAmplifierSaturationEnergy, FiberAmplifierSpontaneousEmissionFactor, FiberAmplifierSuperGaussFiltGainCoefficient, FiberAmplifierSuperGaussFiltOrder, FiberAmplifierUnsaturatedNepperGain, fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, FreqChannels, OptFiberLocalErrorWorkSpace::FreqDomainOperatorX, FreqDomainOperatorX, OptFiberLocalErrorWorkSpace::FreqDomainOperatorY, FreqDomainOperatorY, Frequency2Wavelength(), FstOrDispFiber, FULL_RAMAN, FWHM_Pulse, gamma, OptSignal::GetCenterFreq(), OptSignal::GetFrequency(), OptSignal::GetFWHM_Pulse(), OptSignal::GetNumChannels(), OptSignal::GetRelevantNumModesOFLE(), OptSignal::GetTypeSimulation(), OptSignal::GetUsingOptFiberLocalError(), cfftw::give_N(), InitializedDeltaZInitialFlag, Job, JonesMatrix, OptSignal::JonesMatrixChannel, OptFiberLocalErrorWorkSpace::LaserWorkX, LaserWorkX, OptFiberLocalErrorWorkSpace::LaserWorkY, LaserWorkY, LengthFiber, LightSpeed, LOCAL_ERROR_3RD, LocalErrorFreqLimit, log(), LogFile, LogFileSeparator(), LOWER_AND_UPPER, LOWER_ONLY, MANDATORY, MeanDGDPerSqrtLength, NepperAttenuationFiber, NepperRamanGain, NepperRamanPumpLoss, NO_BOUNDS, NO_RAMAN, NonLinIndexFiber, NumberOfChannels, NumStepsBetweenScatterings, OptSignal::OFLEWork, oOptSignal, OPTIONAL_NO_WARNING, OPTIONAL_WARNING, OutputPDVector, OptSignal::OutputPDVectorOFLE, OutputStepSizesFlag, PDVectorHai, Phi, pi, PMD, Psi, qtPoints, RamanOnOffGaindB, ReadDouble(), ReadInt(), ReferenceFreq, ReferenceWavelength, RelativeErrorGoal, ResetVolatileVariables(), RNG, SCALAR, SCALAR_NLS, ScalarSolverEightNinthsFlag, ScatteringStepSize, SetAttenuationdB(), SetDispersion(), SetFiberLengthsForPMD(), SetFstSndOrDispDirectlyFlag, SetGammaFiber(), SetMeanDGDPerSqrtLength(), SetNepperAttenuation(), SetPMD(), OptSignal::sfftM, sfftM, OptFiberLocalErrorWorkSpace::sfftM_Coarse, sfftM_Coarse, OptFiberLocalErrorWorkSpace::sfftM_Start, sfftM_Start, SIMPLE_RAMAN, SndOrDispFiber, OptFiberLocalErrorWorkSpace::SqFreqDomainOperatorX, SqFreqDomainOperatorX, OptFiberLocalErrorWorkSpace::SqFreqDomainOperatorY, SqFreqDomainOperatorY, sqrt(), StepSizesFileMode, Theta, TypeFastSaturableAbsorption, TypeFiberAmplifierGain, TypeFiberAmplifierNoise, TypeFiberLossGain, TypeRamanAmplification, TypeSimulation, TypeSolver, TypeStepSizes, VECTOR, VECTOR_MANAKOV_NO_PMD, VECTOR_MANAKOV_PMD, WALK_OFF, WalkOffParameter, Wavelength2Frequency(), WithNonLin, WriteAveragePowerdBmFlag, WritePulseWidthFlag, WriteTypeFiberAmplifierGain(), WriteTypeFiberAmplifierNoise(), WriteTypeFiberLossGain(), WriteTypeSolver(), and WriteTypeStepSizes().
OptFiberLocalError::~OptFiberLocalError | ( | void | ) |
Destructor.
OptFiberLocalError::OptFiberLocalError | ( | string | InFileName, | |
OptSignal * | oOptSignal, | |||
RanNumGen * | RNG2, | |||
string | Job2 | |||
) |
Constructor.
OptFiberLocalError::~OptFiberLocalError | ( | void | ) |
Destructor.
OptFiberLocalError::OptFiberLocalError | ( | string | InFileName, | |
OptSignal * | oOptSignal, | |||
RanNumGen * | RNG2, | |||
string | Job2 | |||
) |
Constructor.
OptFiberLocalError::~OptFiberLocalError | ( | void | ) |
Destructor.
void OptFiberLocalError::AllocateMemoryForEulerAngles | ( | void | ) | [private] |
References cerror(), NumberScatterings, Phi, Psi, and Theta.
Referenced by SetFiberLengthsForPMD().
void OptFiberLocalError::AllocateMemoryForEulerAngles | ( | void | ) | [private] |
void OptFiberLocalError::AllocateMemoryForEulerAngles | ( | void | ) | [private] |
void OptFiberLocalError::ApplyDispersionOperator | ( | bool | ApplyTwiceFlag | ) | [private] |
void OptFiberLocalError::ApplyDispersionOperator | ( | bool | ApplyTwiceFlag | ) | [private] |
void OptFiberLocalError::ApplyFastSaturableAbsorptionHeunsMethod | ( | double | StepSizeZ | ) | [private] |
Scalar Case:
du/dz = F(u)*u
where in QUADRATIC case F(x)= sq(abs(x))
with Heun's Method (aka Modified Euler, RK2) is
v_{n+1} = u_n + h*F(u_n)*u_n u_{n+1}= u_n + 0.5*h*(F(u_n)+F(v_{n+1}).
Vector Case:
U=(u_X,u_Y)^T
dU/dz = F(U)*U
where in QUADRATIC case F(U) = F(u_X) + F(u_Y)
References FastSaturableAbsorptionFunction(), LaserWorkX, LaserWorkY, qtPoints, SCALAR_NLS, sfftM, fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyFastSaturableAbsorptionOperator().
void OptFiberLocalError::ApplyFastSaturableAbsorptionOperator | ( | double | StepSizeZ | ) | [private] |
void OptFiberLocalError::ApplyFastSaturableAbsorptionQuadraticAnalytic | ( | double | StepSizeZ | ) | [private] |
References FastSaturableAbsorptionCoefficient, qtPoints, SCALAR_NLS, sfftM, sq(), fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyFastSaturableAbsorptionOperator().
void OptFiberLocalError::ApplyFreqDomainOperator | ( | bool | ApplyDispersionTwiceFlag, | |
double | GainSatStepSizeZ | |||
) | [private] |
void OptFiberLocalError::ApplyFreqDomainOperator | ( | bool | ApplyTwiceFlag | ) | [private] |
void OptFiberLocalError::ApplyFreqDomainOperator | ( | bool | ApplyDispersionTwiceFlag, | |
double | GainSatStepSizeZ | |||
) | [private] |
void OptFiberLocalError::ApplyFullRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplyFullRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
References fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, RamanAmp::GetRamanPowerFreqIndex(), oRaman, qtPoints, RamanStartingLength, SCALAR_NLS, sfftM, sqrt(), TimeDataValid, TypeSolver, UpdateFreq(), VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyRamanOperator().
void OptFiberLocalError::ApplyFullRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplyKerrNonlinearityOperator | ( | double | StepSizeZ | ) | [private] |
References DoTimeOperatorExactlyFlag, exp_jc_real(), FreqDataValid, gamma, qtPoints, SCALAR_NLS, ScalarSolverEightNinthsFlag, sfftM, sq(), fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyTimeDomainOperator().
void OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator | ( | int | ScatteringSectionIndex | ) |
void OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator | ( | int | ScatteringSectionIndex | ) |
References SCALAR_NLS, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by PropagateWithPMD().
void OptFiberLocalError::ApplyPMDCompleteScatteringFreqDomainOperator | ( | int | ScatteringSectionIndex | ) |
void OptFiberLocalError::ApplyRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
References ApplyFullRamanOperator(), ApplySimpleRamanOperator(), FULL_RAMAN, NO_RAMAN, SIMPLE_RAMAN, TypeRamanAmplification, TypeSolver, and VECTOR_MANAKOV_PMD.
Referenced by PropagateLocalError().
void OptFiberLocalError::ApplyRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplyRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplySaturableGainOperator | ( | double | StepSizeZ | ) | [private] |
References fft, FiberAmplifierComputeSaturableGainForHeunsMethod(), FiberAmplifierSuperGaussFiltGainCoefficient, FiberAmplifierSuperGaussFiltOrder, fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, cfftw::freq(), LaserWorkX, LaserWorkY, pi, qtPoints, SCALAR_NLS, sfftM, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyFreqDomainOperator().
void OptFiberLocalError::ApplySaturableParabolicGainOperator | ( | double | StepSizeZ | ) | [private] |
void OptFiberLocalError::ApplySimpleRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplySimpleRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplySimpleRamanOperator | ( | double | CurrentZValueWithinFiber2, | |
double | ZStep2 | |||
) | [private] |
void OptFiberLocalError::ApplyTimeDomainOperator | ( | double | StepSizeZ | ) | [private] |
References ApplyFastSaturableAbsorptionOperator(), ApplyKerrNonlinearityOperator(), DoFastSaturableAbsorptionFlag, FreqDataValid, and UpdateTime().
Referenced by PropagateLocalError().
void OptFiberLocalError::ApplyTimeDomainOperator | ( | double | StepSizeZ | ) | [private] |
void OptFiberLocalError::ApplyTimeDomainOperator | ( | double | StepSizeZ | ) | [private] |
void OptFiberLocalError::ComputeDeltaZMax | ( | void | ) |
The value of DeltaZmax is determined in this method from input parameter DeltaZMaxInfile and, if TypeFiberLossGain == FIBER_AMPLIFIER, from the gain and noise parameters of the fiber amplifier.
References DeltaZMax, DeltaZMaxInfile, FIBER_AMP_NOISE_OFF, FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FIBER_AMP_UNSATURATED_FLAT_GAIN, FIBER_AMPLIFIER, FiberAmplifierGainSaturationMaxGainPerStep, FiberAmplifierNoiseMaxStepSizeFactor, FiberAmplifierUnsaturatedNepperGain, log(), LogFile, min(), NepperAttenuationFiber, TypeFiberAmplifierGain, TypeFiberAmplifierNoise, and TypeFiberLossGain.
Referenced by OptFiberLocalError(), SetAttenuationdB(), SetFiberAmplifierUnsaturatedNepperGain(), and SetNepperAttenuation().
void OptFiberLocalError::ComputeDeltaZMax | ( | void | ) |
The value of DeltaZmax is determined in this method from input parameter DeltaZMaxInfile and, if TypeFiberLossGain == FIBER_AMPLIFIER, from the gain and noise parameters of the fiber amplifier.
void OptFiberLocalError::ComputeDeltaZMax | ( | void | ) |
The value of DeltaZmax is determined in this method from input parameter DeltaZMaxInfile and, if TypeFiberLossGain == FIBER_AMPLIFIER, from the gain and noise parameters of the fiber amplifier.
void OptFiberLocalError::ComputeDispersionOperator | ( | double | StepSizeZ | ) | [private] |
References CenterFreq, DispersionOperatorValid, exp_jc_real(), fft, FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FIBER_AMPLIFIER, cfftw::freq(), FreqDomainOperatorX, FreqDomainOperatorY, FstOrDispFiber, GetFreqDerivativeOfBirefringence(), LOCAL_ERROR_2ND, LOCAL_ERROR_3RD, NepperAttenuationFiber, pi, qtPoints, SCALAR_NLS, SndOrDispFiber, sq(), SqFreqDomainOperatorX, SqFreqDomainOperatorY, TypeFiberAmplifierGain, TypeFiberLossGain, TypeSolver, TypeStepSizes, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by PropagateLocalError().
void OptFiberLocalError::ComputeDispersionOperator | ( | double | StepSizeZ | ) | [private] |
void OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector | ( | int | ScatteringSectionIndex | ) |
void OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector | ( | int | ScatteringSectionIndex | ) |
References GetEulerMatrix(), OptSignal::GetFreqForPDVectorOFLE(), oOptSignal, Phi, PropagateOutputPDVector(), Psi, and Theta.
void OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector | ( | int | ScatteringSectionIndex | ) |
void OptFiberLocalError::ComputeFreqDomainOperator | ( | double | StepSizeZ | ) | [private] |
References CenterFreq, exp_jc_real(), fft, FIBER_AMP_SATURABLE_PARABOLIC_GAIN, FIBER_AMP_UNSATURATED_FLAT_GAIN, FIBER_AMPLIFIER, FiberAmplifierParabolicGainCoefficient, FiberAmplifierSaturableGainPerLength, cfftw::freq(), FreqDomainOperatorValid, FreqDomainOperatorX, FreqDomainOperatorY, FstOrDispFiber, GetFreqDerivativeOfBirefringence(), LOCAL_ERROR_2ND, LOCAL_ERROR_3RD, LOSSY_FIBER, pi, qtPoints, SCALAR_NLS, SndOrDispFiber, sq(), SqFreqDomainOperatorX, SqFreqDomainOperatorY, TypeFiberAmplifierGain, TypeFiberLossGain, TypeSolver, TypeStepSizes, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
double OptFiberLocalError::ComputeMaxPower | ( | void | ) | [private] |
References MaxPower, qtPoints, SCALAR_NLS, sfftM, sq(), fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, UpdateTime(), VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by WriteStepSizes().
double OptFiberLocalError::ComputeMaxPower | ( | void | ) | [private] |
double OptFiberLocalError::ComputeMaxPower | ( | void | ) | [private] |
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeError | ( | void | ) | [private] |
References fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, OptSignal::GetRelevantNumModesOFLE(), LOCAL_ERROR_3RD, LocalErrorFreqLimit, oOptSignal, qtPoints, RelativeError, SCALAR_NLS, sfftM, sfftM_Coarse, sq(), sqrt(), TimeDataValid, TypeSolver, TypeStepSizes, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by PropagateLocalError().
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeError | ( | void | ) | [private] |
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeError | ( | void | ) | [private] |
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeErrorOLD | ( | void | ) | [private] |
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeErrorOLD | ( | void | ) | [private] |
double OptFiberLocalError::ComputeThirdOrderSolutionAndRelativeErrorOLD | ( | void | ) | [private] |
void OptFiberLocalError::ComputeWalkOffStepSize | ( | void | ) | [private] |
void OptFiberLocalError::ComputeWalkOffStepSize | ( | void | ) | [private] |
void OptFiberLocalError::ComputeWalkOffStepSize | ( | void | ) | [private] |
For the WALK_OFF method we choose the step size to be constant within each fiber as follows.
OptFiberLocalError::DeltaZ = OptFiberLocalError::WalkOffParameter / abs( D_1 - D_2 )
where D_1 and D_2 are the dispersions in ps/nm-km at wavelengths and .
We choose ,2 as follows:
WDM Case: ,2 are the central wavelengths of the edge channels
Single Channel Case: ,2 correspond to frequencies
,2 = CenterFreq +- RootMeanSquare spectral width of signal.
Of course for the last step we may need to choose a smaller step size so that the overall propagation distance is correct.
Note: For simulations with PMD, we recompute WalkOff step size for each section. For single channel simulations since RootMeanSquare spectral width of signal may change slightly it's possible that the different sections of the same fiber have different step sizes.
References OptSignal::ComputeRMSSpectralWidth(), DeltaZMax, DispersionOperatorValid, FIBER_AMP_NOISE_OFF, FIBER_AMPLIFIER, Frequency2Wavelength(), OptSignal::GetCenterFreq(), GetDispersion(), OptSignal::GetFrequency(), OptSignal::GetNumChannels(), LengthFiber, oOptSignal, TypeFiberAmplifierNoise, TypeFiberLossGain, WalkOffLastStepSize, WalkOffNumSteps, WalkOffParameter, and WalkOffStepSize.
void OptFiberLocalError::CopyFftMatricesFreqData | ( | fftMatrices * | OrigData, | |
fftMatrices * | CopyOfData | |||
) | [private] |
void OptFiberLocalError::CopyFftMatricesFreqData | ( | fftMatrices * | OrigData, | |
fftMatrices * | CopyOfData | |||
) | [private] |
References fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, qtPoints, SCALAR_NLS, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by PropagateLocalError().
void OptFiberLocalError::CopyFftMatricesFreqData | ( | fftMatrices * | OrigData, | |
fftMatrices * | CopyOfData | |||
) | [private] |
Fast Saturable Absortion is du/dz = F(u)u where F=FastSaturableAbsorptionFunction
References FastSaturableAbsorptionCoefficient, QUADRATIC, sq(), and TypeFastSaturableAbsorption.
Referenced by ApplyFastSaturableAbsorptionHeunsMethod().
void OptFiberLocalError::FiberAmplifierAddMonteCarloNoise | ( | double | StepSize | ) | [private] |
Adds random noise realization at beginning of current split step in a FIBER_AMPLIFIER
void OptFiberLocalError::FiberAmplifierAddMonteCarloNoise | ( | double | StepSize | ) | [private] |
Adds random noise realization at beginning of current split step in a FIBER_AMPLIFIER
References CenterFreq, fft, FIBER_AMP_NOISE_GAUSSIAN_WHITE, FIBER_AMP_NOISE_OFF, FIBER_AMPLIFIER, FiberAmplifierComputeNoiseAmplitudeFactor(), FiberAmplifierNoiseAmplitudeFactor, fftMatrices::fOptSignalX, cfftw::freq(), RanNumGen::GetGaussianDeviate(), jc, qtPoints, RNG, SCALAR_NLS, sfftM, sqrt(), TimeDataValid, TypeFiberAmplifierNoise, TypeFiberLossGain, TypeSolver, and UpdateFreq().
Referenced by PropagateLocalError().
void OptFiberLocalError::FiberAmplifierAddMonteCarloNoise | ( | double | StepSize | ) | [private] |
Adds random noise realization at beginning of current split step in a FIBER_AMPLIFIER
void OptFiberLocalError::FiberAmplifierComputeNoiseAmplitudeFactor | ( | double | StepSize | ) | [private] |
Computes the noise amplitude factor for SCALAR signals that are to be propagated through a z-step of size StepSize in a FIBER_AMPLIFIER. Called by OptFiberLocalError::FiberAmplifierAddMonteCarloNoise()
When we have a saturable amplifier with parabolic gain shape we compute the noise amplitude factor at point z along the fiber using the gain g(z) at that point. Hence we ignore both the parabolic gain shape (FIX THIS!) and any loss in this computation.
For a flat gain amplifier we compute the noise amplitude factor from the flat gain parameter, which is specified by a negative fiber attenuation.
void OptFiberLocalError::FiberAmplifierComputeNoiseAmplitudeFactor | ( | double | StepSize | ) | [private] |
Computes the noise amplitude factor for SCALAR signals that are to be propagated through a z-step of size StepSize in a FIBER_AMPLIFIER. Called by OptFiberLocalError::FiberAmplifierAddMonteCarloNoise()
When we have a saturable amplifier with parabolic gain shape we compute the noise amplitude factor at point z along the fiber using the gain g(z) at that point. Hence we ignore both the parabolic gain shape (FIX THIS!) and any loss in this computation.
For a flat gain amplifier we compute the noise amplitude factor from the flat gain parameter, which is specified by a negative fiber attenuation.
References DeltaFreq, FIBER_AMP_NOISE_OFF, FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FIBER_AMP_UNSATURATED_FLAT_GAIN, FIBER_AMPLIFIER, FiberAmplifierNoiseAmplitudeFactor, FiberAmplifierSaturableGainPerLength, FiberAmplifierSpontaneousEmissionFactor, hPlanck, NepperAttenuationFiber, SCALAR_NLS, sqrt(), TypeFiberAmplifierGain, TypeFiberAmplifierNoise, TypeFiberLossGain, and TypeSolver.
Referenced by FiberAmplifierAddMonteCarloNoise().
void OptFiberLocalError::FiberAmplifierComputeNoiseAmplitudeFactor | ( | double | StepSize | ) | [private] |
Computes the noise amplitude factor for SCALAR signals that are to be propagated through a z-step of size StepSize in a FIBER_AMPLIFIER. Called by OptFiberLocalError::FiberAmplifierAddMonteCarloNoise()
When we have a saturable amplifier with parabolic gain shape we compute the noise amplitude factor at point z along the fiber using the gain g(z) at that point. Hence we ignore both the parabolic gain shape (FIX THIS!) and any loss in this computation.
For a flat gain amplifier we compute the noise amplitude factor from the flat gain parameter, which is specified by a negative fiber attenuation.
void OptFiberLocalError::FiberAmplifierComputeSaturableGain | ( | void | ) | [private] |
Computes the saturable gain per unit length at start of step. Used by FiberAmplifierComputeNoiseAmplitudeFactor and ComputeFreqDomainOperator.
void OptFiberLocalError::FiberAmplifierComputeSaturableGain | ( | void | ) | [private] |
Computes the saturable gain per unit length at start of step. Used by FiberAmplifierComputeNoiseAmplitudeFactor and ComputeFreqDomainOperator.
References FiberAmplifierSaturableGainPerLength, FiberAmplifierSaturationEnergy, FiberAmplifierUnsaturatedNepperGain, OptSignal::GetTotalEnergy(), and oOptSignal.
Referenced by PropagateLocalError().
void OptFiberLocalError::FiberAmplifierComputeSaturableGain | ( | void | ) | [private] |
Computes the saturable gain per unit length at start of step. Used by FiberAmplifierComputeNoiseAmplitudeFactor and ComputeFreqDomainOperator.
double OptFiberLocalError::FiberAmplifierComputeSaturableGainForHeunsMethod | ( | bool | FirstStep | ) | [private] |
Computes the saturable gain per unit length in first and second steps of Heun's method discretization implemented in ApplySaturableGainOperator.
References FiberAmplifierGetEnergyForHeunsMethod(), FiberAmplifierSaturationEnergy, and FiberAmplifierUnsaturatedNepperGain.
Referenced by ApplySaturableGainOperator().
double OptFiberLocalError::FiberAmplifierComputeSaturableGainForHeunsMethod | ( | bool | FirstStep | ) | [private] |
Computes the saturable gain per unit length in first and second steps of Heun's method discretization implemented in ApplySaturableParabolicGainOperator.
double OptFiberLocalError::FiberAmplifierGetEnergyForHeunsMethod | ( | bool | FirstStep | ) | [private] |
Computes energy in frequency domain, called by FiberAmplifierComputeSaturableGainForHeunsMethod
References fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, OptSignal::GetTimeWindow(), LaserWorkX, LaserWorkY, oOptSignal, qtPoints, sfftM, sq(), TypeSimulation, and VECTOR.
Referenced by FiberAmplifierComputeSaturableGainForHeunsMethod().
double OptFiberLocalError::FiberAmplifierGetEnergyForHeunsMethod | ( | bool | FirstStep | ) | [private] |
Computes energy in frequency domain, called by FiberAmplifierComputeSaturableGainForHeunsMethod
double OptFiberLocalError::GetDeltaZ | ( | ) | [inline] |
References DeltaZ.
double OptFiberLocalError::GetDeltaZ | ( | ) | [inline] |
References DeltaZ.
double OptFiberLocalError::GetDeltaZ | ( | ) | [inline] |
References DeltaZ.
double OptFiberLocalError::GetDGD | ( | void | ) |
double OptFiberLocalError::GetDGD | ( | void | ) |
double OptFiberLocalError::GetDGD | ( | void | ) |
Returns the Differential Group Delay.
Computes the DGD at the absolute frequency given in oOptSignal::FreqForPDVectorOFLE for propagation over all fibers from where oOptSignal::ResetPDVectorOFLE() was called to the current position.
The method simply returns the length of the vector given by OptFiberLocalError::OutputPDVector.
See also OptFiberLocalError::PropagateOutputPDVector
References OutputPDVector, PDVectorHai, sq(), and sqrt().
double OptFiberLocalError::GetDispersion | ( | double | Wavelength | ) |
Returns value of Dispersion in s/m^2 at Wavelength in m.
References CenterFreq, DispersionFiberCenterWavelength, DispSlopeFiberCenterWavelength, and Frequency2Wavelength().
Referenced by ComputeWalkOffStepSize().
double OptFiberLocalError::GetDispersion | ( | double | Wavelength | ) |
Returns value of Dispersion in s/m^2 at Wavelength in m.
double OptFiberLocalError::GetDispersion | ( | double | Wavelength | ) |
Returns value of Dispersion in s/m^2 at Wavelength in m.
void OptFiberLocalError::GetEulerMatrix | ( | double | theta, | |
double | phi, | |||
double | psi | |||
) |
void OptFiberLocalError::GetEulerMatrix | ( | double | theta, | |
double | phi, | |||
double | psi | |||
) |
References EulerMatrix, and jc.
Referenced by ComputeEulerMatrixAndUpdateOutputPDVector().
void OptFiberLocalError::GetEulerMatrix | ( | double | theta, | |
double | phi, | |||
double | psi | |||
) |
double OptFiberLocalError::GetExpectedDGD | ( | void | ) | [inline] |
References LengthFiber, pi, PMD, and sqrt().
double OptFiberLocalError::GetExpectedDGD | ( | void | ) | [inline] |
References LengthFiber, pi, PMD, and sqrt().
Referenced by GetExpectedSndOrderDGD().
double OptFiberLocalError::GetExpectedDGD | ( | void | ) | [inline] |
References LengthFiber, pi, PMD, and sqrt().
double OptFiberLocalError::GetExpectedSndOrderDGD | ( | void | ) | [inline] |
References GetExpectedDGD(), sq(), and sqrt().
double OptFiberLocalError::GetExpectedSndOrderDGD | ( | void | ) | [inline] |
References GetExpectedDGD(), sq(), and sqrt().
double OptFiberLocalError::GetExpectedSndOrderDGD | ( | void | ) | [inline] |
References GetExpectedDGD(), sq(), and sqrt().
double OptFiberLocalError::GetFiberLength | ( | ) | [inline] |
References LengthFiber.
Referenced by NoiseCovariance::PropagateAnalyticCWSignalNoLossNoDispersion(), and NoiseCovariance::Propagator().
double OptFiberLocalError::GetFiberLength | ( | ) | [inline] |
References LengthFiber.
double OptFiberLocalError::GetFiberLength | ( | ) | [inline] |
References LengthFiber.
double OptFiberLocalError::GetFirstOrderDispersion | ( | ) | [inline] |
References FstOrDispFiber.
double OptFiberLocalError::GetFirstOrderDispersion | ( | ) | [inline] |
References FstOrDispFiber.
double OptFiberLocalError::GetFirstOrderDispersion | ( | ) | [inline] |
References FstOrDispFiber.
Referenced by NoiseCovariance::Propagator().
double OptFiberLocalError::GetFreqDerivativeOfBirefringence | ( | void | ) |
double OptFiberLocalError::GetFreqDerivativeOfBirefringence | ( | void | ) |
References PMD, ScatteringStepSize, and sqrt().
Referenced by ComputeDispersionOperator(), ComputeFreqDomainOperator(), PropagateOutputPDVector(), and UpdateJonesMatrixAfterBiregringence().
double OptFiberLocalError::GetFreqDerivativeOfBirefringence | ( | void | ) |
double OptFiberLocalError::GetGamma | ( | ) | [inline] |
References gamma.
Referenced by NoiseCovariance::PropagateAnalyticCWSignalNoLossNoDispersion().
double OptFiberLocalError::GetGamma | ( | ) | [inline] |
References gamma.
double OptFiberLocalError::GetGamma | ( | ) | [inline] |
References gamma.
double OptFiberLocalError::GetMeanDGD_SqrtLength | ( | void | ) | [inline] |
References MeanDGDPerSqrtLength, and sqrt().
double OptFiberLocalError::GetMeanDGD_SqrtLength | ( | void | ) | [inline] |
References MeanDGDPerSqrtLength, and sqrt().
double OptFiberLocalError::GetMeanDGD_SqrtLength | ( | void | ) | [inline] |
References MeanDGDPerSqrtLength, and sqrt().
double OptFiberLocalError::GetNepperAttenuationFiber | ( | ) | [inline] |
References NepperAttenuationFiber.
double OptFiberLocalError::GetNepperAttenuationFiber | ( | ) | [inline] |
References NepperAttenuationFiber.
double OptFiberLocalError::GetNepperAttenuationFiber | ( | ) | [inline] |
References NepperAttenuationFiber.
void OptFiberLocalError::GetNewFiberRealization | ( | void | ) |
void OptFiberLocalError::GetNewFiberRealization | ( | void | ) |
References RanNumGen::GetRanNum(), NumberScatterings, Phi, pi, Psi, RNG, and Theta.
Referenced by SetFiberLengthsForPMD().
void OptFiberLocalError::GetNewFiberRealization | ( | void | ) |
double OptFiberLocalError::GetNonLinIndexFiber | ( | ) | [inline] |
References NonLinIndexFiber.
double OptFiberLocalError::GetNonLinIndexFiber | ( | ) | [inline] |
References NonLinIndexFiber.
double OptFiberLocalError::GetNonLinIndexFiber | ( | ) | [inline] |
References NonLinIndexFiber.
int OptFiberLocalError::GetNumStepsBetweenScatterings | ( | ) | [inline] |
References NumStepsBetweenScatterings.
int OptFiberLocalError::GetNumStepsBetweenScatterings | ( | ) | [inline] |
References NumStepsBetweenScatterings.
int OptFiberLocalError::GetNumStepsBetweenScatterings | ( | ) | [inline] |
References NumStepsBetweenScatterings.
double OptFiberLocalError::GetSecondOrderDispersion | ( | ) | [inline] |
References SndOrDispFiber.
double OptFiberLocalError::GetSecondOrderDispersion | ( | ) | [inline] |
References SndOrDispFiber.
double OptFiberLocalError::GetSecondOrderDispersion | ( | ) | [inline] |
References SndOrDispFiber.
Referenced by NoiseCovariance::Propagator().
void OptFiberLocalError::OpenStepSizesFile | ( | string | StepSizesFileName, | |
int | Mode | |||
) |
void OptFiberLocalError::OpenStepSizesFile | ( | string | StepSizesFileName, | |
int | Mode | |||
) |
void OptFiberLocalError::OpenStepSizesFile | ( | string | StepSizesFileName, | |
int | Mode | |||
) |
References FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, OutputStepSizesFlag, StepSizesFile, TypeFiberAmplifierGain, and WritePulseWidthFlag.
Referenced by PropagateLocalError().
void OptFiberLocalError::Propagate | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) |
Propagates OptSignal object through an optical fiber.
References FULL_RAMAN, OptSignal::GainOfAccumulatedTotalNoiseSpectralDensityGaussianStatistics(), LengthFiber, NepperAttenuationFiber, oOptSignal, PropagateWithoutPMD(), PropagateWithPMD(), RamanStartingLength, SCALAR_NLS, SIMPLE_RAMAN, TypeRamanAmplification, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by PostDispCompSubSystem::ApplyPostDispCompUMBCCienaLoopApr2001(), PostDispCompSubSystem::ApplyPostDispCompUMBCCienaLoopJuly2001(), PulseEvolutionAnalyzer::LinearlyCompressPulses(), NoiseCovariance::Perturb(), NoiseCovariance::Propagate(), PropagateWithRaman(), and NoiseCovariance::Propagator().
void OptFiberLocalError::Propagate | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) |
Propagates OptSignal object through an optical fiber.
void OptFiberLocalError::Propagate | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) |
Propagates OptSignal object through an optical fiber.
void OptFiberLocalError::PropagateConstStepSizeOrWalkOff | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateConstStepSizeOrWalkOff | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
References APPLY_ONCE, CONSTANT, FIBER_AMP_NOISE_OFF, FIBER_AMP_UNSATURATED_FLAT_GAIN, NO_RAMAN, and WALK_OFF.
Referenced by PropagateWithoutPMD().
void OptFiberLocalError::PropagateConstStepSizeOrWalkOff | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateLocalError | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateLocalError | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateLocalError | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
References APPLY_ONCE, APPLY_TWICE, ApplyFreqDomainOperator(), ApplyRamanOperator(), ApplyTimeDomainOperator(), ComputeDispersionOperator(), ComputeThirdOrderSolutionAndRelativeError(), CopyFftMatricesFreqData(), CurrentZValueWithinFiber, DeltaZ, DeltaZInitial, DeltaZMax, DispersionOperatorValid, FIBER_AMP_NOISE_OFF, FIBER_AMP_UNSATURATED_FLAT_GAIN, FiberAmplifierAddMonteCarloNoise(), FiberAmplifierComputeSaturableGain(), FreqDataValid, InitializedDeltaZInitialFlag, Job, LengthFiber, NO_RAMAN, OpenStepSizesFile(), OutputStepSizesFlag, PropagatedLengthStartFiber, RelativeError, RelativeErrorGoal, ResetVolatileVariables(), sfftM, sfftM_Coarse, sfftM_Start, sqrt(), StepSizesFile, StepSizesFileMode, TimeDataValid, TypeFiberAmplifierGain, TypeFiberAmplifierNoise, TypeRamanAmplification, UpdateAccumulatedFirstOrderDispersion(), UpdateAccumulatedSecondOrderDispersion(), UpdateFreq(), UpdateTime(), WithNonLin, WriteAveragePowerdBm(), and WriteStepSizes().
Referenced by PropagateWithoutPMD().
void OptFiberLocalError::PropagateOutputPDVector | ( | double | Freq, | |
double | theta, | |||
double | phi, | |||
double | psi | |||
) |
void OptFiberLocalError::PropagateOutputPDVector | ( | double | Freq, | |
double | theta, | |||
double | phi, | |||
double | psi | |||
) |
Propagates output polarization dispersion vector through a single step of the coarse-step method for PMD.
Input parameters are
Algorithm:
Let PDV_{n} denote the polarization dispersion vector after the n-th section in the coarse step method. From Gordon and Kogelnick's review paper on PMD in Proc. Nat. Acad. Sci., we have that
PDV_{n} = DeltaPDV + T_{n} PDV_{n-1}
where DeltaPDV is the PDV due to the n-th section and T_{n} is the matrix which transforms the Stokes vector at the input to the n-th section to the Stokes vector at the output of the n-th section.
For the case we have of a random rotation given by an Euler matrix followed by a birefringence rotation in Stokes space we have
DeltaPDV = -2*b'*2*pi*Freq*ScatteringStepSize, where b' = OptFiberLocalError::GetFreqDerivativeOfBirefringence()
and
T_{n} = R_x(2b'ScatteringStepSize*Freq) R_x(Psi)R_y(-Theta)R_x(Phi)
where the first factor in the product is the birefringence rotation and the other three factors are the rotation by the Euler angles in Stokes space.
At the start of the system (z=0) we have OutputPDVector = (0,0,0) since there DGD = length(OutputPDVector) = 0.
OptFiberLocalError::PropagateOutputPDVector is called by OptFiberLocalError::ComputeEulerMatrixAndUpdateOutputPDVector(int ScatteringSectionIndex) which is called by OptFiberLocalError::PropagateWithPMD().
The method OptSignal::ResetPDVectorOFLE() resets the PDVectors to (0,0,0). This method is called by OptSignal::RegenerateSignalString();
References GetFreqDerivativeOfBirefringence(), OutputPDVector, pi, RotatesAboutX(), RotatesAboutY(), and ScatteringStepSize.
Referenced by ComputeEulerMatrixAndUpdateOutputPDVector().
void OptFiberLocalError::PropagateOutputPDVector | ( | double | Freq, | |
double | theta, | |||
double | phi, | |||
double | psi | |||
) |
void OptFiberLocalError::PropagateWithoutPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateWithoutPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateWithoutPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
References CONSTANT, LengthFiber, LOCAL_ERROR_2ND, LOCAL_ERROR_3RD, PropagateConstStepSizeOrWalkOff(), PropagateLocalError(), TotalLengthFiber, TypeStepSizes, and WALK_OFF.
Referenced by Propagate(), and PropagateWithPMD().
void OptFiberLocalError::PropagateWithPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateWithPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
void OptFiberLocalError::PropagateWithPMD | ( | double * | PropagatedLength, | |
int * | ZStepNum | |||
) | [private] |
References ApplyPMDCompleteScatteringFreqDomainOperator(), CONSTANT, DeltaZ, DeltaZInitial, LengthFiber, LengthFiberExceptLast, LengthFiberLast, NumberScatterings, NumStepsBetweenScatterings, PropagateWithoutPMD(), ScatteringStepSize, TotalLengthFiber, TypeStepSizes, and UpdateJonesMatrixAfterBiregringence().
Referenced by Propagate().
void OptFiberLocalError::PropagateWithRaman | ( | double * | PropagatedLength, | |
int * | ZStepNum, | |||
double | RamanStartingLength2 | |||
) |
Propagates OptSignal object through an optical fiber with Raman amplification
References Propagate(), PropagatedLengthStartFiber, and RamanStartingLength.
void OptFiberLocalError::PropagateWithRaman | ( | double * | PropagatedLength, | |
int * | ZStepNum, | |||
double | RamanStartingLength2 | |||
) |
Propagates OptSignal object through an optical fiber with Raman amplification
void OptFiberLocalError::PropagateWithRaman | ( | double * | PropagatedLength, | |
int * | ZStepNum, | |||
double | RamanStartingLength2 | |||
) |
Propagates OptSignal object through an optical fiber with Raman amplification
void OptFiberLocalError::RecoverGammaFiber | ( | ) |
References gamma, gamma_Save, and WithNonLin.
void OptFiberLocalError::RecoverGammaFiber | ( | ) |
void OptFiberLocalError::RecoverGammaFiber | ( | ) |
void OptFiberLocalError::RecoverSndOrDispFiber | ( | ) |
void OptFiberLocalError::RecoverSndOrDispFiber | ( | ) |
void OptFiberLocalError::RecoverSndOrDispFiber | ( | ) |
References SndOrDispFiber, and SndOrDispFiber_Save.
void OptFiberLocalError::ResetVolatileVariables | ( | void | ) | [private] |
void OptFiberLocalError::ResetVolatileVariables | ( | void | ) | [private] |
void OptFiberLocalError::ResetVolatileVariables | ( | void | ) | [private] |
References CurrentZValueWithinFiber, DispersionOperatorValid, FreqDataValid, RelativeError, and TimeDataValid.
Referenced by OptFiberLocalError(), and PropagateLocalError().
void OptFiberLocalError::SetAttenuationdB | ( | double | AttenuationFiber2 | ) |
Sets optical power attenuation parameter in dB/m.
void OptFiberLocalError::SetAttenuationdB | ( | double | AttenuationFiber2 | ) |
Sets optical power attenuation parameter in dB/m.
References AttenuationFiber, ComputeDeltaZMax(), log(), and NepperAttenuationFiber.
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetAttenuationdB | ( | double | AttenuationFiber2 | ) |
Sets optical power attenuation parameter in dB/m.
void OptFiberLocalError::SetConstantDeltaZ | ( | double | DeltaZValue | ) |
void OptFiberLocalError::SetConstantDeltaZ | ( | double | DeltaZValue | ) |
void OptFiberLocalError::SetConstantDeltaZ | ( | double | DeltaZValue | ) |
References DeltaZ, and LengthFiber.
void OptFiberLocalError::SetDispersion | ( | double | DispersionFiberRefWavelength, | |
double | DispSlopeFiberRefWavelength | |||
) |
void OptFiberLocalError::SetDispersion | ( | double | DispersionFiberRefWavelength, | |
double | DispSlopeFiberRefWavelength | |||
) |
References CenterFreq, cube(), DispersionFiberCenterWavelength, DispSlopeFiberCenterWavelength, Frequency2Wavelength(), FstOrDispFiber, LightSpeed, LogFile, pi, ReferenceFreq, ReferenceWavelength, SetFstSndOrDispDirectlyFlag, SndOrDispFiber, and sq().
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetDispersion | ( | double | DispersionFiberRefWavelength, | |
double | DispSlopeFiberRefWavelength | |||
) |
void OptFiberLocalError::SetFiberAmplifierUnsaturatedNepperGain | ( | double | FiberAmplifierUnsaturatedNepperGain2 | ) |
Enables user to set unsaturated Nepper gain.
References ComputeDeltaZMax(), and FiberAmplifierUnsaturatedNepperGain.
void OptFiberLocalError::SetFiberAmplifierUnsaturatedNepperGain | ( | double | FiberAmplifierUnsaturatedNepperGain2 | ) |
Enables user to set unsaturated Nepper gain.
void OptFiberLocalError::SetFiberAmplifierUnsaturatedNepperGain | ( | double | FiberAmplifierUnsaturatedNepperGain2 | ) |
Enables user to set unsaturated Nepper gain.
void OptFiberLocalError::SetFiberLength | ( | double | Value | ) |
void OptFiberLocalError::SetFiberLength | ( | double | Value | ) |
References LengthFiber, and SetFiberLengthsForPMD().
Referenced by PulseEvolutionAnalyzer::PulseEvolutionAnalyzer(), and PostDispCompSubSystem::SetAmountPostDispCompJuly2001().
void OptFiberLocalError::SetFiberLength | ( | double | Value | ) |
void OptFiberLocalError::SetFiberLengthsForPMD | ( | void | ) |
Sets the lengths of each section in the coarse-step method for propagation with PMD.
We divide the fiber into lengths of size ScatteringStepSize. The method
void OptFiberLocalError::PropagateWithoutPMD(double * PropagatedLength, int * ZStepNum)
will be applied to each section of length OptFiberLocalError::ScatteringStepSize. For each ScatteringStep before calling PropagateWithoutPMD the Signal will undergo a random rotation on the Poincare sphere.
If TotalLengthFiber < ScatteringStepSize
If TotalLengthFiber >= ScatteringStepSize
References AllocateMemoryForEulerAngles(), CONSTANT, DeltaZ, GetNewFiberRealization(), LengthFiber, LengthFiberExceptLast, LengthFiberLast, LogFile, NumberScatterings, NumStepsBetweenScatterings, ScatteringStepSize, TotalLengthFiber, TypeSolver, TypeStepSizes, and VECTOR_MANAKOV_PMD.
Referenced by OptFiberLocalError(), SetFiberLength(), SetNumStepsBetweenScatterings(), SetScatteringStepSize(), and SetTypeStepSizes().
void OptFiberLocalError::SetFiberLengthsForPMD | ( | void | ) |
void OptFiberLocalError::SetFiberLengthsForPMD | ( | void | ) |
void OptFiberLocalError::SetFiberRealization | ( | int | SectionNumber, | |
double | Theta2, | |||
double | Phi2, | |||
double | Psi2 | |||
) |
void OptFiberLocalError::SetFiberRealization | ( | int | SectionNumber, | |
double | Theta2, | |||
double | Phi2, | |||
double | Psi2 | |||
) |
void OptFiberLocalError::SetFiberRealization | ( | int | SectionNumber, | |
double | Theta2, | |||
double | Phi2, | |||
double | Psi2 | |||
) |
References NumberScatterings, Phi, Psi, and Theta.
void OptFiberLocalError::SetFstOrDispFiber | ( | double | FstOrDispFiber2 | ) |
Sets First order dispersion, i.e., Beta'', in s^2/m. Note that X ps^2/km = X*1e-27 s^2/m
void OptFiberLocalError::SetFstOrDispFiber | ( | double | FstOrDispFiber2 | ) |
Sets First order dispersion, i.e., Beta'', in s^2/m. Note that X ps^2/km = X*1e-27 s^2/m
void OptFiberLocalError::SetFstOrDispFiber | ( | double | FstOrDispFiber2 | ) |
Sets First order dispersion, i.e., Beta'', in s^2/m. Note that X ps^2/km = X*1e-27 s^2/m
References FstOrDispFiber.
Referenced by PulseEvolutionAnalyzer::LinearlyCompressPulses().
void OptFiberLocalError::SetGammaFiber | ( | double | gamma2 | ) |
Sets nonlinear coefficient gamma in m^(-1)W^(-1). X km^(-1)W^(-1) = X*1e-3 m^(-1)W^(-1)
void OptFiberLocalError::SetGammaFiber | ( | double | gamma2 | ) |
Sets nonlinear coefficient gamma in m^(-1)W^(-1). X km^(-1)W^(-1) = X*1e-3 m^(-1)W^(-1)
void OptFiberLocalError::SetGammaFiber | ( | double | gamma2 | ) |
Sets nonlinear coefficient gamma in m^(-1)W^(-1). X km^(-1)W^(-1) = X*1e-3 m^(-1)W^(-1)
References gamma, gamma_Save, and WithNonLin.
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetMeanDGDPerSqrtLength | ( | double | MeanDGDPerSqrtLength2 | ) |
void OptFiberLocalError::SetMeanDGDPerSqrtLength | ( | double | MeanDGDPerSqrtLength2 | ) |
References MeanDGDPerSqrtLength, pi, PMD, and sqrt().
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetMeanDGDPerSqrtLength | ( | double | MeanDGDPerSqrtLength2 | ) |
void OptFiberLocalError::SetNepperAttenuation | ( | double | NepperAttenuation2 | ) |
Sets linear optical power attenuation parameter in m^(-1). This is attenuation parameter in NLSE and HME (up to a sign)
void OptFiberLocalError::SetNepperAttenuation | ( | double | NepperAttenuation2 | ) |
Sets linear optical power attenuation parameter in m^(-1). This is attenuation parameter in NLSE and HME (up to a sign)
void OptFiberLocalError::SetNepperAttenuation | ( | double | NepperAttenuation2 | ) |
Sets linear optical power attenuation parameter in m^(-1). This is attenuation parameter in NLSE and HME (up to a sign)
References AttenuationFiber, ComputeDeltaZMax(), log(), and NepperAttenuationFiber.
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetNumStepsBetweenScatterings | ( | int | value | ) | [inline] |
References NumStepsBetweenScatterings, and SetFiberLengthsForPMD().
void OptFiberLocalError::SetNumStepsBetweenScatterings | ( | int | value | ) | [inline] |
References NumStepsBetweenScatterings, and SetFiberLengthsForPMD().
void OptFiberLocalError::SetNumStepsBetweenScatterings | ( | int | value | ) | [inline] |
References NumStepsBetweenScatterings, and SetFiberLengthsForPMD().
void OptFiberLocalError::SetOutputStepSizesFlag | ( | int | OutputStepSizesFlag2 | ) |
void OptFiberLocalError::SetOutputStepSizesFlag | ( | int | OutputStepSizesFlag2 | ) |
References OutputStepSizesFlag.
Referenced by PostDispCompSubSystem::ApplyPostDispCompUMBCCienaLoopApr2001().
void OptFiberLocalError::SetOutputStepSizesFlag | ( | int | OutputStepSizesFlag2 | ) |
void OptFiberLocalError::SetPMD | ( | double | PMD2 | ) |
void OptFiberLocalError::SetPMD | ( | double | PMD2 | ) |
References MeanDGDPerSqrtLength, pi, PMD, and sqrt().
Referenced by OptFiberLocalError().
void OptFiberLocalError::SetPMD | ( | double | PMD2 | ) |
void OptFiberLocalError::SetRamanAmpPointer | ( | RamanAmp * | oRaman2 | ) |
void OptFiberLocalError::SetRamanAmpPointer | ( | RamanAmp * | oRaman2 | ) |
void OptFiberLocalError::SetRelativeErrorGoal | ( | double | RelativeErrorGoal2 | ) |
void OptFiberLocalError::SetRelativeErrorGoal | ( | double | RelativeErrorGoal2 | ) |
void OptFiberLocalError::SetRelativeErrorGoal | ( | double | RelativeErrorGoal2 | ) |
References RelativeErrorGoal.
void OptFiberLocalError::SetScatteringStepSize | ( | double | Value | ) |
void OptFiberLocalError::SetScatteringStepSize | ( | double | Value | ) |
void OptFiberLocalError::SetScatteringStepSize | ( | double | Value | ) |
References ScatteringStepSize, and SetFiberLengthsForPMD().
void OptFiberLocalError::SetSndOrDispFiber | ( | double | SndOrDispFiber2 | ) |
Sets Second order dispersion, i.e., Beta''', in s^3/m. Note that X ps^3/km = X*1e-39 s^2/m
void OptFiberLocalError::SetSndOrDispFiber | ( | double | SndOrDispFiber2 | ) |
Sets Second order dispersion, i.e., Beta''', in s^3/m. Note that X ps^3/km = X*1e-39 s^2/m
void OptFiberLocalError::SetSndOrDispFiber | ( | double | SndOrDispFiber2 | ) |
Sets Second order dispersion, i.e., Beta''', in s^3/m. Note that X ps^3/km = X*1e-39 s^2/m
References SndOrDispFiber, and SndOrDispFiber_Save.
Referenced by PulseEvolutionAnalyzer::LinearlyCompressPulses().
void OptFiberLocalError::SetTypeStepSizes | ( | int | TypeStepSizes2 | ) |
void OptFiberLocalError::SetTypeStepSizes | ( | int | TypeStepSizes2 | ) |
References LogFile, SetFiberLengthsForPMD(), TypeStepSizes, and WriteTypeStepSizes().
void OptFiberLocalError::SetTypeStepSizes | ( | int | TypeStepSizes2 | ) |
void OptFiberLocalError::SetWalkOffParameter | ( | double | WalkOffParameter2 | ) |
void OptFiberLocalError::SetWalkOffParameter | ( | double | WalkOffParameter2 | ) |
References WalkOffParameter.
void OptFiberLocalError::SetWalkOffParameter | ( | double | WalkOffParameter2 | ) |
void OptFiberLocalError::SetWriteAveragePowerdBmFlag | ( | int | Value | ) |
void OptFiberLocalError::SetWriteAveragePowerdBmFlag | ( | int | Value | ) |
References WriteAveragePowerdBmFlag.
void OptFiberLocalError::SetWriteAveragePowerdBmFlag | ( | int | Value | ) |
void OptFiberLocalError::SetWritePulseWidthFlag | ( | int | Value | ) | [inline] |
References WritePulseWidthFlag.
Referenced by PostDispCompSubSystem::ApplyPostDispCompUMBCCienaLoopApr2001().
void OptFiberLocalError::SetWritePulseWidthFlag | ( | int | Value | ) | [inline] |
References WritePulseWidthFlag.
void OptFiberLocalError::SetWritePulseWidthFlag | ( | int | Value | ) | [inline] |
References WritePulseWidthFlag.
void OptFiberLocalError::UpdateAccumulatedFirstOrderDispersion | ( | double | StepSize | ) | [private] |
References FstOrDispFiber, OptSignal::GetAccumulatedFirstOrderDispersion(), oOptSignal, and OptSignal::SetAccumulatedFirstOrderDispersion().
Referenced by PropagateLocalError().
void OptFiberLocalError::UpdateAccumulatedFirstOrderDispersion | ( | double | StepSize | ) | [private] |
void OptFiberLocalError::UpdateAccumulatedFirstOrderDispersion | ( | double | StepSize | ) | [private] |
void OptFiberLocalError::UpdateAccumulatedSecondOrderDispersion | ( | double | StepSize | ) | [private] |
void OptFiberLocalError::UpdateAccumulatedSecondOrderDispersion | ( | double | StepSize | ) | [private] |
void OptFiberLocalError::UpdateAccumulatedSecondOrderDispersion | ( | double | StepSize | ) | [private] |
Referenced by PropagateLocalError().
void OptFiberLocalError::UpdateFreq | ( | void | ) | [inline, private] |
void OptFiberLocalError::UpdateFreq | ( | void | ) | [inline, private] |
References cfftw::FFT(), fft, fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, FreqDataValid, sfftM, TimeDataValid, fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyFreqDomainOperator(), ApplyFullRamanOperator(), ApplySimpleRamanOperator(), FiberAmplifierAddMonteCarloNoise(), and PropagateLocalError().
void OptFiberLocalError::UpdateFreq | ( | void | ) | [inline, private] |
void OptFiberLocalError::UpdateJonesMatrixAfterBiregringence | ( | double | StepSizeZ | ) |
References exp_jc_real(), FreqChannels, GetFreqDerivativeOfBirefringence(), JonesMatrix, NumberOfChannels, and pi.
Referenced by PropagateWithPMD().
void OptFiberLocalError::UpdateJonesMatrixAfterBiregringence | ( | double | StepSizeZ | ) |
void OptFiberLocalError::UpdateJonesMatrixAfterBiregringence | ( | double | StepSizeZ | ) |
void OptFiberLocalError::UpdateTime | ( | void | ) | [inline, private] |
void OptFiberLocalError::UpdateTime | ( | void | ) | [inline, private] |
void OptFiberLocalError::UpdateTime | ( | void | ) | [inline, private] |
References fft, fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, FreqDataValid, cfftw::IFFT(), sfftM, TimeDataValid, fftMatrices::tOptSignalX, fftMatrices::tOptSignalY, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by ApplyTimeDomainOperator(), ComputeMaxPower(), and PropagateLocalError().
void OptFiberLocalError::WriteAveragePowerdBm | ( | double | PropagatedLength2 | ) |
void OptFiberLocalError::WriteAveragePowerdBm | ( | double | PropagatedLength2 | ) |
void OptFiberLocalError::WriteAveragePowerdBm | ( | double | PropagatedLength2 | ) |
References Job, oOptSignal, WriteAveragePowerdBmFlag, and OptSignal::WritePowerdBmChannel().
Referenced by PropagateLocalError().
void OptFiberLocalError::WriteStepSizes | ( | double | PropagatedLength | ) |
void OptFiberLocalError::WriteStepSizes | ( | double | PropagatedLength | ) |
References ComputeMaxPower(), DeltaZ, DispersionFiberCenterWavelength, FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FiberAmplifierSaturableGainPerLength, fftMatrices::fOptSignalX, fftMatrices::fOptSignalY, OptSignal::GetAccumulatedFirstOrderDispersion(), OptSignal::GetAccumulatedSecondOrderDispersion(), OptSignal::GetSigmaSqOptSignal(), OptSignal::GetTotalEnergy(), LOCAL_ERROR_2ND, LOCAL_ERROR_3RD, MaxPower, oOptSignal, OutputStepSizesFlag, RelativeError, sfftM, sq(), sqrt(), StepSizesFile, TypeFiberAmplifierGain, TypeStepSizes, and WritePulseWidthFlag.
Referenced by PropagateLocalError().
void OptFiberLocalError::WriteStepSizes | ( | double | PropagatedLength | ) |
string OptFiberLocalError::WriteTypeFiberAmplifierGain | ( | void | ) |
string OptFiberLocalError::WriteTypeFiberAmplifierGain | ( | void | ) |
string OptFiberLocalError::WriteTypeFiberAmplifierGain | ( | void | ) |
References FIBER_AMP_SATURABLE_SUPERGAUSSFILT_GAIN, FIBER_AMP_UNSATURATED_FLAT_GAIN, and TypeFiberAmplifierGain.
Referenced by OptFiberLocalError().
string OptFiberLocalError::WriteTypeFiberAmplifierNoise | ( | void | ) |
References FIBER_AMP_NOISE_GAUSSIAN_WHITE, FIBER_AMP_NOISE_OFF, and TypeFiberAmplifierNoise.
Referenced by OptFiberLocalError().
string OptFiberLocalError::WriteTypeFiberAmplifierNoise | ( | void | ) |
string OptFiberLocalError::WriteTypeFiberAmplifierNoise | ( | void | ) |
string OptFiberLocalError::WriteTypeFiberLossGain | ( | void | ) |
References FIBER_AMPLIFIER, LOSSY_FIBER, and TypeFiberLossGain.
Referenced by OptFiberLocalError().
string OptFiberLocalError::WriteTypeFiberLossGain | ( | void | ) |
string OptFiberLocalError::WriteTypeFiberLossGain | ( | void | ) |
string OptFiberLocalError::WriteTypeSolver | ( | void | ) |
string OptFiberLocalError::WriteTypeSolver | ( | void | ) |
References SCALAR_NLS, TypeSolver, VECTOR_MANAKOV_NO_PMD, and VECTOR_MANAKOV_PMD.
Referenced by OptFiberLocalError().
string OptFiberLocalError::WriteTypeSolver | ( | void | ) |
string OptFiberLocalError::WriteTypeStepSizes | ( | void | ) |
References CONSTANT, LOCAL_ERROR_2ND, LOCAL_ERROR_3RD, TypeStepSizes, and WALK_OFF.
Referenced by OptFiberLocalError(), and SetTypeStepSizes().
string OptFiberLocalError::WriteTypeStepSizes | ( | void | ) |
string OptFiberLocalError::WriteTypeStepSizes | ( | void | ) |
double OptFiberLocalError::AttenuationFiber [private] |
The fiber optical power attenuation (or gain) parameter in dB/m.
This parameter plays several differetn rols depending on the context.
This parameter plays several differetn rols depending on the context.
Referenced by OptFiberLocalError(), SetAttenuationdB(), and SetNepperAttenuation().
double OptFiberLocalError::CenterFreq [private] |
double OptFiberLocalError::CurrentZValueWithinFiber [private] |
Referenced by PropagateLocalError(), and ResetVolatileVariables().
double OptFiberLocalError::DeltaFreq [private] |
Referenced by FiberAmplifierComputeNoiseAmplitudeFactor(), and OptFiberLocalError().
double OptFiberLocalError::DeltaZ [private] |
The step size taken in each step.
For the LOCAL_ERROR methods DeltaZ is the size of a coarse step The solution is actually the one taken using the fine steps of size DeltaZ/2.
Referenced by GetDeltaZ(), OptFiberLocalError(), PropagateLocalError(), PropagateWithPMD(), SetConstantDeltaZ(), SetFiberLengthsForPMD(), and WriteStepSizes().
double OptFiberLocalError::DeltaZInitial [private] |
Used to set initial step size for the fiber when using Local Error method.
Referenced by OptFiberLocalError(), PropagateLocalError(), and PropagateWithPMD().
double OptFiberLocalError::DeltaZMax [private] |
Referenced by ComputeDeltaZMax(), ComputeWalkOffStepSize(), and PropagateLocalError().
double OptFiberLocalError::DeltaZMaxInfile [private] |
Referenced by ComputeDeltaZMax(), and OptFiberLocalError().
double OptFiberLocalError::DispersionFiberCenterWavelength [private] |
Referenced by GetDispersion(), SetDispersion(), and WriteStepSizes().
bool OptFiberLocalError::DispersionOperatorValid [private] |
Flag that controls when to recompute DispersionOperator.
We only compute the DispersionOperator at the start of each call to the PropagateLocalError() and PropagateWalkOffOrConst() methods and if DeltaZ changes. At the start of these methods and whenever DeltaZ changes we set DispersionOperatorValid = false.
Referenced by ComputeDispersionOperator(), ComputeWalkOffStepSize(), PropagateLocalError(), and ResetVolatileVariables().
double OptFiberLocalError::DispSlopeFiberCenterWavelength [private] |
Referenced by GetDispersion(), and SetDispersion().
bool OptFiberLocalError::DoFastSaturableAbsorptionFlag [private] |
Internal variable that is set to 1 whenever FastSaturableAbsorptionCoefficient is nonzero
Referenced by ApplyTimeDomainOperator(), and OptFiberLocalError().
bool OptFiberLocalError::DoTimeOperatorExactlyFlag [private] |
Input variable used in method ApplyTimeDomainOperator.
Flag to do time operator exactly by multiplying by exp(arg) rather than by approximating exp(arg) by a 4th-order Taylor polynomial. Input variable used in method ApplyTimeDomainOperator.
In constructor we set DoTimeOperatorExactlyFlag = 1 when DoFastSaturableAbsorptionFlag == 1. (Could change this)
Referenced by ApplyKerrNonlinearityOperator(), and OptFiberLocalError().
double OptFiberLocalError::EffectAreaFiber [private] |
Referenced by OptFiberLocalError().
cplx OptFiberLocalError::EulerMatrix [private] |
Referenced by GetEulerMatrix().
double OptFiberLocalError::FastSaturableAbsorptionCoefficient [private] |
Coefficient for FastSaturableAbsorption.
Coefficient in Haus's master equation for fast saturable absorption.
In case TypeFastSaturableAbsorption is QUADRATIC or QUADRATIC_ANALYTIC we add a term of the form
u_z = FastSaturableAbsorptionCoefficient*|u|^2*u
to the standard NLS. FastSaturableAbsorptionCoefficient should be positive and is typically a small compared to the nonlinear Kerr coefficient, gamma.
Flag to do time operator exactly by multiplying by exp(arg) rather than by approximating exp(arg) by a 4th-order Taylor polynomial
We add a term of the form
u_z = FastSaturableAbsorptionCoefficient*|u|^2*u
to the standard NLS. FastSaturableAbsorptionCoefficient should be positive and is typically a small compared to the nonlinear Kerr coefficient, gamma.
Referenced by ApplyFastSaturableAbsorptionQuadraticAnalytic(), FastSaturableAbsorptionFunction(), and OptFiberLocalError().
cfftw * OptFiberLocalError::fft [private] |
double OptFiberLocalError::FiberAmplifierGainSaturationMaxGainPerStep [private] |
Used to control maximum step size for saturable gain.
Referenced by ComputeDeltaZMax(), and OptFiberLocalError().
double OptFiberLocalError::FiberAmplifierNoiseAmplitudeFactor [private] |
Analogous to OptAmplifier::NoiseAmplitudeFactor.
Referenced by FiberAmplifierAddMonteCarloNoise(), and FiberAmplifierComputeNoiseAmplitudeFactor().
double OptFiberLocalError::FiberAmplifierNoiseMaxStepSizeFactor [private] |
The max step size for a fiber amplifier.
When TypeFiberLossGain = FIBER_AMPLIFIER and TypeFiberAmplifierNoise != FIBER_AMP_NOISE_OFF the max step size is given by
DeltaZMax = FiberAmplifierNoiseMaxStepSizeFactor/(abs(NepperAttenuationFiber))
Default value is FiberAmplifierNoiseMaxStepSizeFactor = 0.1
Referenced by ComputeDeltaZMax(), and OptFiberLocalError().
double OptFiberLocalError::FiberAmplifierParabolicGainCoefficient [private] |
ParaboicGainCoefficient for FiberAmplifier. See enum typeFiberAmplifierGain.
Referenced by ComputeFreqDomainOperator().
double OptFiberLocalError::FiberAmplifierSaturableGainPerLength [private] |
Internal parameter for FiberAmplifier with saturable gain.
Referenced by ComputeFreqDomainOperator(), FiberAmplifierComputeNoiseAmplitudeFactor(), FiberAmplifierComputeSaturableGain(), and WriteStepSizes().
double OptFiberLocalError::FiberAmplifierSaturationEnergy [private] |
Saturation energy in Joules for saturable gain FiberAmplifier
Referenced by FiberAmplifierComputeSaturableGain(), FiberAmplifierComputeSaturableGainForHeunsMethod(), and OptFiberLocalError().
double OptFiberLocalError::FiberAmplifierSpontaneousEmissionFactor [private] |
The spontaneous emission factor when TypeFiberLossGain = FIBER_AMPLIFIER and TypeFiberAmplifierNoise != NO_NOISE
Referenced by FiberAmplifierComputeNoiseAmplitudeFactor(), and OptFiberLocalError().
double OptFiberLocalError::FiberAmplifierSuperGaussFiltGainCoefficient [private] |
SuperGaussFiltGainCoefficient for FiberAmplifier. Determines filter width. See enum typeFiberAmplifierGain.
Referenced by ApplySaturableGainOperator(), and OptFiberLocalError().
int OptFiberLocalError::FiberAmplifierSuperGaussFiltOrder [private] |
SuperGaussFiltOrder for FiberAmplifier. Value of 1 gives standard Gaussian filtering. The higher the value, the more flat-topped the filter.
Referenced by ApplySaturableGainOperator(), and OptFiberLocalError().
double OptFiberLocalError::FiberAmplifierUnsaturatedNepperGain [private] |
Unsaturated linear power gain coefficient for saturable gain FiberAmplifier
Referenced by ComputeDeltaZMax(), FiberAmplifierComputeSaturableGain(), FiberAmplifierComputeSaturableGainForHeunsMethod(), OptFiberLocalError(), and SetFiberAmplifierUnsaturatedNepperGain().
double * OptFiberLocalError::FreqChannels [private] |
Referenced by OptFiberLocalError(), and UpdateJonesMatrixAfterBiregringence().
bool OptFiberLocalError::FreqDataValid [private] |
bool OptFiberLocalError::FreqDomainOperatorValid [private] |
Flag that controls when to recompute FreqDomainOperator.
We only compute the FreqDomainOperator at the start of each call to the PropagateLocalError() and PropagateWalkOffOrConst() methods and if DeltaZ changes. At the start of these methods and whenever DeltaZ changes we set FreqDomainOperatorValid = false.
Referenced by ComputeFreqDomainOperator().
cplx * OptFiberLocalError::FreqDomainOperatorX [private] |
cplx * OptFiberLocalError::FreqDomainOperatorY [private] |
double OptFiberLocalError::FstOrDispFiber [private] |
double OptFiberLocalError::FWHM_Pulse [private] |
Referenced by OptFiberLocalError().
double OptFiberLocalError::gamma [private] |
Referenced by ApplyKerrNonlinearityOperator(), GetGamma(), OptFiberLocalError(), RecoverGammaFiber(), and SetGammaFiber().
double OptFiberLocalError::gamma_Save [private] |
Referenced by RecoverGammaFiber(), and SetGammaFiber().
bool OptFiberLocalError::InitializedDeltaZInitialFlag [private] |
Referenced by OptFiberLocalError(), and PropagateLocalError().
double * OptFiberLocalError::InputPDVector [private] |
string OptFiberLocalError::Job [private] |
Referenced by OptFiberLocalError(), PropagateLocalError(), and WriteAveragePowerdBm().
cplx * OptFiberLocalError::JonesMatrix [private] |
Referenced by OptFiberLocalError(), and UpdateJonesMatrixAfterBiregringence().
cplx * OptFiberLocalError::LaserWorkX [private] |
cplx * OptFiberLocalError::LaserWorkY [private] |
double OptFiberLocalError::LengthFiber [private] |
double OptFiberLocalError::LengthFiberExceptLast [private] |
Referenced by PropagateWithPMD(), and SetFiberLengthsForPMD().
double OptFiberLocalError::LengthFiberLast [private] |
Referenced by PropagateWithPMD(), and SetFiberLengthsForPMD().
int OptFiberLocalError::LocalErrorFreqLimit [private] |
double OptFiberLocalError::MaxPower [private] |
Referenced by ComputeMaxPower(), and WriteStepSizes().
double OptFiberLocalError::MeanDGDPerSqrtLength [private] |
Referenced by GetMeanDGD_SqrtLength(), OptFiberLocalError(), SetMeanDGDPerSqrtLength(), and SetPMD().
double OptFiberLocalError::NepperAttenuationFiber [private] |
The fiber optical power attenuation (or gain) parameter in m^(-1) The terms of the NLS or Master equation that involve this parameter are of the form u_z = -0.5*NepperAttenuationFiber*u
Referenced by ComputeDeltaZMax(), ComputeDispersionOperator(), FiberAmplifierComputeNoiseAmplitudeFactor(), GetNepperAttenuationFiber(), OptFiberLocalError(), Propagate(), SetAttenuationdB(), and SetNepperAttenuation().
double OptFiberLocalError::NepperRamanGain [private] |
Referenced by ApplySimpleRamanOperator(), and OptFiberLocalError().
double OptFiberLocalError::NepperRamanPumpLoss [private] |
Referenced by ApplySimpleRamanOperator(), and OptFiberLocalError().
double OptFiberLocalError::NonLinIndexFiber [private] |
Referenced by GetNonLinIndexFiber(), and OptFiberLocalError().
int OptFiberLocalError::NumberOfChannels [private] |
Referenced by OptFiberLocalError(), and UpdateJonesMatrixAfterBiregringence().
int OptFiberLocalError::NumberScatterings [private] |
int OptFiberLocalError::NumStepsBetweenScatterings [private] |
OptSignal * OptFiberLocalError::oOptSignal [private] |
Referenced by ComputeEulerMatrixAndUpdateOutputPDVector(), ComputeThirdOrderSolutionAndRelativeError(), ComputeThirdOrderSolutionAndRelativeErrorOLD(), ComputeWalkOffStepSize(), FiberAmplifierComputeSaturableGain(), FiberAmplifierGetEnergyForHeunsMethod(), OptFiberLocalError(), Propagate(), UpdateAccumulatedFirstOrderDispersion(), WriteAveragePowerdBm(), and WriteStepSizes().
Referenced by ApplyFullRamanOperator(), and SetRamanAmpPointer().
double * OptFiberLocalError::OutputPDVector [private] |
Referenced by GetDGD(), OptFiberLocalError(), and PropagateOutputPDVector().
int OptFiberLocalError::OutputStepSizesFlag [private] |
Referenced by OpenStepSizesFile(), OptFiberLocalError(), PropagateLocalError(), SetOutputStepSizesFlag(), and WriteStepSizes().
double * OptFiberLocalError::PDVectorHai [private] |
Referenced by GetDGD(), and OptFiberLocalError().
double * OptFiberLocalError::Phi [private] |
double OptFiberLocalError::PMD [private] |
Referenced by GetExpectedDGD(), GetFreqDerivativeOfBirefringence(), OptFiberLocalError(), SetMeanDGDPerSqrtLength(), and SetPMD().
double OptFiberLocalError::PropagatedLengthStartFiber [private] |
Referenced by PropagateLocalError(), and PropagateWithRaman().
double * OptFiberLocalError::Psi [private] |
int OptFiberLocalError::qtPoints [private] |
Referenced by ApplyDispersionOperator(), ApplyFastSaturableAbsorptionHeunsMethod(), ApplyFastSaturableAbsorptionQuadraticAnalytic(), ApplyFreqDomainOperator(), ApplyFullRamanOperator(), ApplyKerrNonlinearityOperator(), ApplySaturableGainOperator(), ApplySimpleRamanOperator(), ComputeDispersionOperator(), ComputeFreqDomainOperator(), ComputeMaxPower(), ComputeThirdOrderSolutionAndRelativeError(), ComputeThirdOrderSolutionAndRelativeErrorOLD(), CopyFftMatricesFreqData(), FiberAmplifierAddMonteCarloNoise(), FiberAmplifierGetEnergyForHeunsMethod(), and OptFiberLocalError().
double OptFiberLocalError::RamanOnOffGaindB [private] |
Referenced by OptFiberLocalError().
double OptFiberLocalError::RamanStartingLength [private] |
Referenced by ApplyFullRamanOperator(), ApplySimpleRamanOperator(), Propagate(), and PropagateWithRaman().
double OptFiberLocalError::ReferenceFreq [private] |
Referenced by OptFiberLocalError(), and SetDispersion().
double OptFiberLocalError::ReferenceWavelength [private] |
Referenced by OptFiberLocalError(), and SetDispersion().
double OptFiberLocalError::RelativeError [private] |
double OptFiberLocalError::RelativeErrorGoal [private] |
Referenced by OptFiberLocalError(), PropagateLocalError(), and SetRelativeErrorGoal().
RanNumGen * OptFiberLocalError::RNG [private] |
Referenced by FiberAmplifierAddMonteCarloNoise(), GetNewFiberRealization(), and OptFiberLocalError().
int OptFiberLocalError::ScalarSolverEightNinthsFlag [private] |
Set to 1 if want the scalar NLS solver to have 8/9 factor with nonlinearity, Set to 0 if want factor of 1. The factor of 8/9 is appropriate when you are modeling fiber with rapidly and randomly varying birefringence but in which the the characteristic length over which PMD becomes important is larger than the system length so that one can use a scalar model. The equation with the 8/9 factor in it is a scalar reduction of the vector Manakov-PMD equation. See Menyuk, J. Eng. Math. Vol 36, pp 113-136, 1999, and in particular p 132 of that paper. Also see Wai Menyuk and Chen, Optics Letters Vol 16 No 16, 1991 p 1231-1233; Wai and Menyuk, JLT Vol 14 No 2, 1996 pp 148-157, especially pages 154-155; and Marcuse Menyuk and Wai, JLT Vol 15 No 9 1997, pp 1735-1746. The factor 1 is appropriate when are modeling fiber with zero birefringence.
Referenced by ApplyKerrNonlinearityOperator(), and OptFiberLocalError().
double OptFiberLocalError::ScatteringStepSize [private] |
bool OptFiberLocalError::SetFstSndOrDispDirectlyFlag [private] |
If true read in FstOrDispFiber and SndOrDispFiber from infile rather than reading in Dispersion and DispersionSlope at Ref Freq.
Referenced by OptFiberLocalError(), and SetDispersion().
fftMatrices OptFiberLocalError::sfftM [private] |
Referenced by ApplyDispersionOperator(), ApplyFastSaturableAbsorptionHeunsMethod(), ApplyFastSaturableAbsorptionQuadraticAnalytic(), ApplyFreqDomainOperator(), ApplyFullRamanOperator(), ApplyKerrNonlinearityOperator(), ApplySaturableGainOperator(), ApplySimpleRamanOperator(), ComputeMaxPower(), ComputeThirdOrderSolutionAndRelativeError(), ComputeThirdOrderSolutionAndRelativeErrorOLD(), FiberAmplifierAddMonteCarloNoise(), FiberAmplifierGetEnergyForHeunsMethod(), OptFiberLocalError(), PropagateLocalError(), UpdateFreq(), UpdateTime(), and WriteStepSizes().
fftMatrices OptFiberLocalError::sfftM_Coarse [private] |
fftMatrices OptFiberLocalError::sfftM_Start [private] |
Referenced by OptFiberLocalError(), and PropagateLocalError().
double OptFiberLocalError::SndOrDispFiber [private] |
double OptFiberLocalError::SndOrDispFiber_Save [private] |
Referenced by RecoverSndOrDispFiber(), and SetSndOrDispFiber().
cplx * OptFiberLocalError::SqFreqDomainOperatorX [private] |
cplx * OptFiberLocalError::SqFreqDomainOperatorY [private] |
ofstream OptFiberLocalError::StepSizesFile [private] |
Referenced by OpenStepSizesFile(), PropagateLocalError(), and WriteStepSizes().
int OptFiberLocalError::StepSizesFileMode [private] |
Referenced by OptFiberLocalError(), and PropagateLocalError().
double * OptFiberLocalError::Theta [private] |
bool OptFiberLocalError::TimeDataValid [private] |
Referenced by ApplyFreqDomainOperator(), ApplyFullRamanOperator(), ApplySimpleRamanOperator(), ComputeThirdOrderSolutionAndRelativeError(), ComputeThirdOrderSolutionAndRelativeErrorOLD(), FiberAmplifierAddMonteCarloNoise(), PropagateLocalError(), ResetVolatileVariables(), UpdateFreq(), and UpdateTime().
double OptFiberLocalError::TotalLengthFiber [private] |
Referenced by ApplySimpleRamanOperator(), PropagateWithoutPMD(), PropagateWithPMD(), and SetFiberLengthsForPMD().
Referenced by ApplyFastSaturableAbsorptionOperator(), FastSaturableAbsorptionFunction(), and OptFiberLocalError().
See enum typeFiberAmplifierGain.
Referenced by ApplyFreqDomainOperator(), ComputeDeltaZMax(), ComputeDispersionOperator(), ComputeFreqDomainOperator(), FiberAmplifierComputeNoiseAmplitudeFactor(), OpenStepSizesFile(), OptFiberLocalError(), PropagateLocalError(), WriteStepSizes(), and WriteTypeFiberAmplifierGain().
Referenced by ApplyRamanOperator(), OptFiberLocalError(), Propagate(), and PropagateLocalError().
Referenced by FiberAmplifierGetEnergyForHeunsMethod(), and OptFiberLocalError().
typeSolver OptFiberLocalError::TypeSolver [private] |
Specifies precisely which PDE is to be solved.
Referenced by ApplyDispersionOperator(), ApplyFastSaturableAbsorptionHeunsMethod(), ApplyFastSaturableAbsorptionQuadraticAnalytic(), ApplyFreqDomainOperator(), ApplyFullRamanOperator(), ApplyKerrNonlinearityOperator(), ApplyRamanOperator(), ApplySaturableGainOperator(), ApplySimpleRamanOperator(), ComputeDispersionOperator(), ComputeFreqDomainOperator(), ComputeMaxPower(), ComputeThirdOrderSolutionAndRelativeError(), ComputeThirdOrderSolutionAndRelativeErrorOLD(), CopyFftMatricesFreqData(), FiberAmplifierAddMonteCarloNoise(), FiberAmplifierComputeNoiseAmplitudeFactor(), OptFiberLocalError(), Propagate(), SetFiberLengthsForPMD(), UpdateFreq(), UpdateTime(), and WriteTypeSolver().
double OptFiberLocalError::WalkOffLastStepSize [private] |
Referenced by ComputeWalkOffStepSize().
int OptFiberLocalError::WalkOffNumSteps [private] |
Referenced by ComputeWalkOffStepSize().
double OptFiberLocalError::WalkOffParameter [private] |
Referenced by ComputeWalkOffStepSize(), OptFiberLocalError(), and SetWalkOffParameter().
double OptFiberLocalError::WalkOffStepSize [private] |
Referenced by ComputeWalkOffStepSize().
int OptFiberLocalError::WithNonLin [private] |
Flag that takes value 1 if at least one of NonLinIndex or FastSaturableAbsorptionCoefficient is nonzero
Referenced by OptFiberLocalError(), PropagateLocalError(), RecoverGammaFiber(), and SetGammaFiber().
int OptFiberLocalError::WriteAveragePowerdBmFlag [private] |
Referenced by OptFiberLocalError(), SetWriteAveragePowerdBmFlag(), and WriteAveragePowerdBm().
int OptFiberLocalError::WritePulseWidthFlag [private] |
Referenced by OpenStepSizesFile(), OptFiberLocalError(), SetWritePulseWidthFlag(), and WriteStepSizes().