/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { context.Nodes.CheckNodes(4); // Get configurations BaseConfiguration = context.GetSimulationParameterSet <BiasingParameters>(); // Get states Iteration = context.GetState <IIterationSimulationState>(); CollectorPrime = BiasingState.GetSharedVariable(context.Nodes[0]); BasePrime = BiasingState.GetSharedVariable(context.Nodes[1]); EmitterPrime = BiasingState.GetSharedVariable(context.Nodes[2]); _collectorNode = BiasingState.Map[CollectorPrime]; _baseNode = BiasingState.Map[BasePrime]; _emitterNode = BiasingState.Map[EmitterPrime]; // Add a series collector node if necessary if (ModelParameters.CollectorResistance > 0) { CollectorPrime = BiasingState.CreatePrivateVariable(Name.Combine("col"), Units.Volt); } _collectorPrimeNode = BiasingState.Map[CollectorPrime]; // Add a series base node if necessary if (ModelParameters.BaseResist > 0) { BasePrime = BiasingState.CreatePrivateVariable(Name.Combine("base"), Units.Volt); } _basePrimeNode = BiasingState.Map[BasePrime]; // Add a series emitter node if necessary if (ModelParameters.EmitterResistance > 0) { EmitterPrime = BiasingState.CreatePrivateVariable(Name.Combine("emit"), Units.Volt); } _emitterPrimeNode = BiasingState.Map[EmitterPrime]; // Get solver pointers _elements = new ElementSet <double>(BiasingState.Solver, new[] { new MatrixLocation(_collectorNode, _collectorNode), new MatrixLocation(_baseNode, _baseNode), new MatrixLocation(_emitterNode, _emitterNode), new MatrixLocation(_collectorPrimeNode, _collectorPrimeNode), new MatrixLocation(_basePrimeNode, _basePrimeNode), new MatrixLocation(_emitterPrimeNode, _emitterPrimeNode), new MatrixLocation(_collectorNode, _collectorPrimeNode), new MatrixLocation(_baseNode, _basePrimeNode), new MatrixLocation(_emitterNode, _emitterPrimeNode), new MatrixLocation(_collectorPrimeNode, _collectorNode), new MatrixLocation(_collectorPrimeNode, _basePrimeNode), new MatrixLocation(_collectorPrimeNode, _emitterPrimeNode), new MatrixLocation(_basePrimeNode, _baseNode), new MatrixLocation(_basePrimeNode, _collectorPrimeNode), new MatrixLocation(_basePrimeNode, _emitterPrimeNode), new MatrixLocation(_emitterPrimeNode, _emitterNode), new MatrixLocation(_emitterPrimeNode, _collectorPrimeNode), new MatrixLocation(_emitterPrimeNode, _basePrimeNode) }, new[] { _collectorPrimeNode, _basePrimeNode, _emitterPrimeNode }); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { context.Nodes.CheckNodes(2); var state = context.GetState <IBiasingSimulationState>(); _iteration = context.GetState <IIterationSimulationState>(); Variables = new DiodeVariables <double>(Name, state, context); Elements = new ElementSet <double>(state.Solver, Variables.GetMatrixLocations(state.Map), Variables.GetRhsIndicies(state.Map)); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing" /> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(ISwitchBindingContext context) : base(context) { context.ThrowIfNull(nameof(context)); _iteration = context.GetState <IIterationSimulationState>(); _controller = context.ControlValue; ModelTemperature = context.ModelBehaviors.GetValue <ModelTemperature>(); Parameters = context.GetParameterSet <Parameters>(); var state = context.GetState <IBiasingSimulationState>(); _variables = new OnePort <double>(state.GetSharedVariable(context.Nodes[0]), state.GetSharedVariable(context.Nodes[1])); _elements = new ElementSet <double>(state.Solver, _variables.GetMatrixLocations(state.Map)); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The binding context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { var state = context.GetState <IBiasingSimulationState>(); _config = context.GetSimulationParameterSet <BiasingParameters>(); _iteration = context.GetState <IIterationSimulationState>(); _args = new MosfetContributionEventArgs(_contributions); context.TryGetState(out _time); context.TryGetState(out _method); _variables = new MosfetVariables <double>(context, state); // Get matrix pointers _elements = new ElementSet <double>(state.Solver, _variables.GetMatrixLocations(state.Map), _variables.GetRhsIndices(state.Map)); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { context.Nodes.CheckNodes(3); BiasingParameters = context.GetSimulationParameterSet <BiasingParameters>(); _iteration = context.GetState <IIterationSimulationState>(); context.TryGetState(out _time); context.TryGetState(out _method); DrainPrime = BiasingState.GetSharedVariable(context.Nodes[0]); _drainNode = BiasingState.Map[DrainPrime]; _gateNode = BiasingState.Map[BiasingState.GetSharedVariable(context.Nodes[1])]; SourcePrime = BiasingState.GetSharedVariable(context.Nodes[2]); _sourceNode = BiasingState.Map[SourcePrime]; if (ModelParameters.DrainResistance > 0) { DrainPrime = BiasingState.CreatePrivateVariable(Name.Combine("drain"), Units.Volt); } _drainPrimeNode = BiasingState.Map[DrainPrime]; if (ModelParameters.SourceResistance > 0) { SourcePrime = BiasingState.CreatePrivateVariable(Name.Combine("source"), Units.Volt); } _sourcePrimeNode = BiasingState.Map[SourcePrime]; _elements = new ElementSet <double>(BiasingState.Solver, new[] { new MatrixLocation(_drainNode, _drainPrimeNode), new MatrixLocation(_gateNode, _drainPrimeNode), new MatrixLocation(_gateNode, _sourcePrimeNode), new MatrixLocation(_sourceNode, _sourcePrimeNode), new MatrixLocation(_drainPrimeNode, _drainNode), new MatrixLocation(_drainPrimeNode, _gateNode), new MatrixLocation(_drainPrimeNode, _sourcePrimeNode), new MatrixLocation(_sourcePrimeNode, _gateNode), new MatrixLocation(_sourcePrimeNode, _sourceNode), new MatrixLocation(_sourcePrimeNode, _drainPrimeNode), new MatrixLocation(_drainNode, _drainNode), new MatrixLocation(_gateNode, _gateNode), new MatrixLocation(_sourceNode, _sourceNode), new MatrixLocation(_drainPrimeNode, _drainPrimeNode), new MatrixLocation(_sourcePrimeNode, _sourcePrimeNode) }, new[] { _gateNode, _drainPrimeNode, _sourcePrimeNode }); }
/// <summary> /// Initializes a new instance of the <see cref="BiasingBehavior"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public BiasingBehavior(IComponentBindingContext context) : base(context) { context.ThrowIfNull(nameof(context)); Parameters = context.GetParameterSet <IndependentSourceParameters>(); _iteration = context.GetState <IIterationSimulationState>(); context.TryGetState(out _method); Waveform = Parameters.Waveform?.Create(_method); if (!Parameters.DcValue.Given) { // No DC value: either have a transient value or none if (Waveform != null) { SpiceSharpWarning.Warning(this, Properties.Resources.IndependentSources_NoDcUseWaveform.FormatString(Name)); Parameters.DcValue = new GivenParameter <double>(Waveform.Value, false); } else { SpiceSharpWarning.Warning(this, Properties.Resources.IndependentSources_NoDc.FormatString(Name)); } } // Connections _biasing = context.GetState <IBiasingSimulationState>(); context.TryGetState(out _method); _variables = new OnePort <double>(_biasing, context); Branch = _biasing.CreatePrivateVariable(Name.Combine("branch"), Units.Ampere); var pos = _biasing.Map[_variables.Positive]; var neg = _biasing.Map[_variables.Negative]; var br = _biasing.Map[Branch]; _elements = new ElementSet <double>(_biasing.Solver, new[] { new MatrixLocation(pos, br), new MatrixLocation(br, pos), new MatrixLocation(neg, br), new MatrixLocation(br, neg) }, new[] { br }); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The binding context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { var state = context.GetState <IBiasingSimulationState>(); _config = context.GetSimulationParameterSet <BiasingParameters>(); _iteration = context.GetState <IIterationSimulationState>(); _args = new MosfetContributionEventArgs(_contributions); context.TryGetState(out _time); context.TryGetState(out _method); _variables = new MosfetVariables <double>(Name, state, context.Nodes, !ModelParameters.DrainResistance.Equals(0.0) || !ModelParameters.SheetResistance.Equals(0.0) && Parameters.DrainSquares > 0, !ModelParameters.SourceResistance.Equals(0.0) || !ModelParameters.SheetResistance.Equals(0.0) && Parameters.SourceSquares > 0); // Get matrix pointers _elements = new ElementSet <double>(state.Solver, _variables.GetMatrixLocations(state.Map), _variables.GetRhsIndices(state.Map)); }
/// <summary> /// Initializes a new instance of the <see cref="Biasing"/> class. /// </summary> /// <param name="context">The context.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception> public Biasing(IComponentBindingContext context) : base(context) { context.ThrowIfNull(nameof(context)); Parameters = context.GetParameterSet <Parameters>(); _biasing = context.GetState <IBiasingSimulationState>(); _iteration = context.GetState <IIterationSimulationState>(); _variables = new OnePort <double>(_biasing, context); context.TryGetState <IIntegrationMethod>(out _method); Waveform = Parameters.Waveform?.Create(context); // Give some warnings if no value is given if (!Parameters.DcValue.Given) { // no DC value - either have a transient value or none SpiceSharpWarning.Warning(this, Waveform != null ? Properties.Resources.IndependentSources_NoDcUseWaveform.FormatString(Name) : Properties.Resources.IndependentSources_NoDc.FormatString(Name)); } _elements = new ElementSet <double>(_biasing.Solver, null, _variables.GetRhsIndices(_biasing.Map)); }
/// <summary> /// Initializes a new instance of the <see cref="IterationSimulationState"/> class. /// </summary> /// <param name="parent">The parent.</param> /// <exception cref="ArgumentNullException">Thrown if <paramref name="parent"/> is <c>null</c>.</exception> public IterationSimulationState(IIterationSimulationState parent) { _parent = parent.ThrowIfNull(nameof(parent)); }