49 #include <Xyce_config.h>
61 #include <N_LAS_Matrix.h>
62 #include <N_LAS_Vector.h>
64 #include <N_UTL_FeatureTest.h>
65 #if defined(HAVE_UNORDERED_MAP)
66 #include <unordered_map>
67 using std::unordered_map;
68 #elif defined(HAVE_TR1_UNORDERED_MAP)
69 #include <tr1/unordered_map>
70 using std::tr1::unordered_map;
72 #error neither unordered_map or tr1/unordered_map found
93 .setExpressionAccess(
NO_DOC)
96 .setDescription(
"Internal-use parameter for setting device instance temperature");
99 .setDescription(
"Device operating temperature")
100 #ifdef Xyce_ADMS_SENSITIVITIES
101 .setAnalyticSensitivityAvailable(
true)
102 .setSensitivityFunctor(&instSens)
103 #endif // Xyce_ADMS_SENSITIVITIES
107 .setDescription(
"Number of emitter fingers");
110 .setDescription(
"Length of emitter fingers")
111 #ifdef Xyce_ADMS_SENSITIVITIES
112 .setAnalyticSensitivityAvailable(
true)
113 .setSensitivityFunctor(&instSens)
114 #endif // Xyce_ADMS_SENSITIVITIES
118 .setDescription(
"Width of emitter fingers")
119 #ifdef Xyce_ADMS_SENSITIVITIES
120 .setAnalyticSensitivityAvailable(
true)
121 .setSensitivityFunctor(&instSens)
122 #endif // Xyce_ADMS_SENSITIVITIES
137 .setExpressionAccess(
NO_DOC)
140 .setDescription(
"Internal-use parameter for setting device model temperature");
147 .setDescription(
"Device operating temperature")
148 #ifdef Xyce_ADMS_SENSITIVITIES
149 .setAnalyticSensitivityAvailable(
true)
150 .setSensitivityFunctor(&modSens)
151 #endif // Xyce_ADMS_SENSITIVITIES
154 #ifdef Xyce_ADMS_SENSITIVITIES
155 .setAnalyticSensitivityAvailable(
true)
156 .setSensitivityFunctor(&modSens)
157 #endif // Xyce_ADMS_SENSITIVITIES
160 #ifdef Xyce_ADMS_SENSITIVITIES
161 .setAnalyticSensitivityAvailable(
true)
162 .setSensitivityFunctor(&modSens)
163 #endif // Xyce_ADMS_SENSITIVITIES
167 .setDescription(
"Number of emitter fingers");
170 .setDescription(
"Length of emitter fingers")
171 #ifdef Xyce_ADMS_SENSITIVITIES
172 .setAnalyticSensitivityAvailable(
true)
173 .setSensitivityFunctor(&modSens)
174 #endif // Xyce_ADMS_SENSITIVITIES
178 .setDescription(
"Width of emitter fingers")
179 #ifdef Xyce_ADMS_SENSITIVITIES
180 .setAnalyticSensitivityAvailable(
true)
181 .setSensitivityFunctor(&modSens)
182 #endif // Xyce_ADMS_SENSITIVITIES
185 #ifdef Xyce_ADMS_SENSITIVITIES
186 .setAnalyticSensitivityAvailable(
true)
187 .setSensitivityFunctor(&modSens)
188 #endif // Xyce_ADMS_SENSITIVITIES
191 #ifdef Xyce_ADMS_SENSITIVITIES
192 .setAnalyticSensitivityAvailable(
true)
193 .setSensitivityFunctor(&modSens)
194 #endif // Xyce_ADMS_SENSITIVITIES
197 #ifdef Xyce_ADMS_SENSITIVITIES
198 .setAnalyticSensitivityAvailable(
true)
199 .setSensitivityFunctor(&modSens)
200 #endif // Xyce_ADMS_SENSITIVITIES
203 #ifdef Xyce_ADMS_SENSITIVITIES
204 .setAnalyticSensitivityAvailable(
true)
205 .setSensitivityFunctor(&modSens)
206 #endif // Xyce_ADMS_SENSITIVITIES
209 #ifdef Xyce_ADMS_SENSITIVITIES
210 .setAnalyticSensitivityAvailable(
true)
211 .setSensitivityFunctor(&modSens)
212 #endif // Xyce_ADMS_SENSITIVITIES
215 #ifdef Xyce_ADMS_SENSITIVITIES
216 .setAnalyticSensitivityAvailable(
true)
217 .setSensitivityFunctor(&modSens)
218 #endif // Xyce_ADMS_SENSITIVITIES
221 #ifdef Xyce_ADMS_SENSITIVITIES
222 .setAnalyticSensitivityAvailable(
true)
223 .setSensitivityFunctor(&modSens)
224 #endif // Xyce_ADMS_SENSITIVITIES
227 #ifdef Xyce_ADMS_SENSITIVITIES
228 .setAnalyticSensitivityAvailable(
true)
229 .setSensitivityFunctor(&modSens)
230 #endif // Xyce_ADMS_SENSITIVITIES
233 #ifdef Xyce_ADMS_SENSITIVITIES
234 .setAnalyticSensitivityAvailable(
true)
235 .setSensitivityFunctor(&modSens)
236 #endif // Xyce_ADMS_SENSITIVITIES
239 #ifdef Xyce_ADMS_SENSITIVITIES
240 .setAnalyticSensitivityAvailable(
true)
241 .setSensitivityFunctor(&modSens)
242 #endif // Xyce_ADMS_SENSITIVITIES
245 #ifdef Xyce_ADMS_SENSITIVITIES
246 .setAnalyticSensitivityAvailable(
true)
247 .setSensitivityFunctor(&modSens)
248 #endif // Xyce_ADMS_SENSITIVITIES
251 #ifdef Xyce_ADMS_SENSITIVITIES
252 .setAnalyticSensitivityAvailable(
true)
253 .setSensitivityFunctor(&modSens)
254 #endif // Xyce_ADMS_SENSITIVITIES
257 #ifdef Xyce_ADMS_SENSITIVITIES
258 .setAnalyticSensitivityAvailable(
true)
259 .setSensitivityFunctor(&modSens)
260 #endif // Xyce_ADMS_SENSITIVITIES
263 #ifdef Xyce_ADMS_SENSITIVITIES
264 .setAnalyticSensitivityAvailable(
true)
265 .setSensitivityFunctor(&modSens)
266 #endif // Xyce_ADMS_SENSITIVITIES
269 #ifdef Xyce_ADMS_SENSITIVITIES
270 .setAnalyticSensitivityAvailable(
true)
271 .setSensitivityFunctor(&modSens)
272 #endif // Xyce_ADMS_SENSITIVITIES
275 #ifdef Xyce_ADMS_SENSITIVITIES
276 .setAnalyticSensitivityAvailable(
true)
277 .setSensitivityFunctor(&modSens)
278 #endif // Xyce_ADMS_SENSITIVITIES
281 #ifdef Xyce_ADMS_SENSITIVITIES
282 .setAnalyticSensitivityAvailable(
true)
283 .setSensitivityFunctor(&modSens)
284 #endif // Xyce_ADMS_SENSITIVITIES
287 #ifdef Xyce_ADMS_SENSITIVITIES
288 .setAnalyticSensitivityAvailable(
true)
289 .setSensitivityFunctor(&modSens)
290 #endif // Xyce_ADMS_SENSITIVITIES
293 #ifdef Xyce_ADMS_SENSITIVITIES
294 .setAnalyticSensitivityAvailable(
true)
295 .setSensitivityFunctor(&modSens)
296 #endif // Xyce_ADMS_SENSITIVITIES
299 #ifdef Xyce_ADMS_SENSITIVITIES
300 .setAnalyticSensitivityAvailable(
true)
301 .setSensitivityFunctor(&modSens)
302 #endif // Xyce_ADMS_SENSITIVITIES
305 #ifdef Xyce_ADMS_SENSITIVITIES
306 .setAnalyticSensitivityAvailable(
true)
307 .setSensitivityFunctor(&modSens)
308 #endif // Xyce_ADMS_SENSITIVITIES
311 #ifdef Xyce_ADMS_SENSITIVITIES
312 .setAnalyticSensitivityAvailable(
true)
313 .setSensitivityFunctor(&modSens)
314 #endif // Xyce_ADMS_SENSITIVITIES
317 #ifdef Xyce_ADMS_SENSITIVITIES
318 .setAnalyticSensitivityAvailable(
true)
319 .setSensitivityFunctor(&modSens)
320 #endif // Xyce_ADMS_SENSITIVITIES
323 #ifdef Xyce_ADMS_SENSITIVITIES
324 .setAnalyticSensitivityAvailable(
true)
325 .setSensitivityFunctor(&modSens)
326 #endif // Xyce_ADMS_SENSITIVITIES
329 #ifdef Xyce_ADMS_SENSITIVITIES
330 .setAnalyticSensitivityAvailable(
true)
331 .setSensitivityFunctor(&modSens)
332 #endif // Xyce_ADMS_SENSITIVITIES
335 #ifdef Xyce_ADMS_SENSITIVITIES
336 .setAnalyticSensitivityAvailable(
true)
337 .setSensitivityFunctor(&modSens)
338 #endif // Xyce_ADMS_SENSITIVITIES
341 #ifdef Xyce_ADMS_SENSITIVITIES
342 .setAnalyticSensitivityAvailable(
true)
343 .setSensitivityFunctor(&modSens)
344 #endif // Xyce_ADMS_SENSITIVITIES
347 #ifdef Xyce_ADMS_SENSITIVITIES
348 .setAnalyticSensitivityAvailable(
true)
349 .setSensitivityFunctor(&modSens)
350 #endif // Xyce_ADMS_SENSITIVITIES
353 #ifdef Xyce_ADMS_SENSITIVITIES
354 .setAnalyticSensitivityAvailable(
true)
355 .setSensitivityFunctor(&modSens)
356 #endif // Xyce_ADMS_SENSITIVITIES
359 #ifdef Xyce_ADMS_SENSITIVITIES
360 .setAnalyticSensitivityAvailable(
true)
361 .setSensitivityFunctor(&modSens)
362 #endif // Xyce_ADMS_SENSITIVITIES
365 #ifdef Xyce_ADMS_SENSITIVITIES
366 .setAnalyticSensitivityAvailable(
true)
367 .setSensitivityFunctor(&modSens)
368 #endif // Xyce_ADMS_SENSITIVITIES
371 #ifdef Xyce_ADMS_SENSITIVITIES
372 .setAnalyticSensitivityAvailable(
true)
373 .setSensitivityFunctor(&modSens)
374 #endif // Xyce_ADMS_SENSITIVITIES
377 #ifdef Xyce_ADMS_SENSITIVITIES
378 .setAnalyticSensitivityAvailable(
true)
379 .setSensitivityFunctor(&modSens)
380 #endif // Xyce_ADMS_SENSITIVITIES
383 #ifdef Xyce_ADMS_SENSITIVITIES
384 .setAnalyticSensitivityAvailable(
true)
385 .setSensitivityFunctor(&modSens)
386 #endif // Xyce_ADMS_SENSITIVITIES
389 #ifdef Xyce_ADMS_SENSITIVITIES
390 .setAnalyticSensitivityAvailable(
true)
391 .setSensitivityFunctor(&modSens)
392 #endif // Xyce_ADMS_SENSITIVITIES
395 #ifdef Xyce_ADMS_SENSITIVITIES
396 .setAnalyticSensitivityAvailable(
true)
397 .setSensitivityFunctor(&modSens)
398 #endif // Xyce_ADMS_SENSITIVITIES
401 #ifdef Xyce_ADMS_SENSITIVITIES
402 .setAnalyticSensitivityAvailable(
true)
403 .setSensitivityFunctor(&modSens)
404 #endif // Xyce_ADMS_SENSITIVITIES
407 #ifdef Xyce_ADMS_SENSITIVITIES
408 .setAnalyticSensitivityAvailable(
true)
409 .setSensitivityFunctor(&modSens)
410 #endif // Xyce_ADMS_SENSITIVITIES
413 #ifdef Xyce_ADMS_SENSITIVITIES
414 .setAnalyticSensitivityAvailable(
true)
415 .setSensitivityFunctor(&modSens)
416 #endif // Xyce_ADMS_SENSITIVITIES
419 #ifdef Xyce_ADMS_SENSITIVITIES
420 .setAnalyticSensitivityAvailable(
true)
421 .setSensitivityFunctor(&modSens)
422 #endif // Xyce_ADMS_SENSITIVITIES
425 #ifdef Xyce_ADMS_SENSITIVITIES
426 .setAnalyticSensitivityAvailable(
true)
427 .setSensitivityFunctor(&modSens)
428 #endif // Xyce_ADMS_SENSITIVITIES
431 #ifdef Xyce_ADMS_SENSITIVITIES
432 .setAnalyticSensitivityAvailable(
true)
433 .setSensitivityFunctor(&modSens)
434 #endif // Xyce_ADMS_SENSITIVITIES
437 #ifdef Xyce_ADMS_SENSITIVITIES
438 .setAnalyticSensitivityAvailable(
true)
439 .setSensitivityFunctor(&modSens)
440 #endif // Xyce_ADMS_SENSITIVITIES
443 #ifdef Xyce_ADMS_SENSITIVITIES
444 .setAnalyticSensitivityAvailable(
true)
445 .setSensitivityFunctor(&modSens)
446 #endif // Xyce_ADMS_SENSITIVITIES
449 #ifdef Xyce_ADMS_SENSITIVITIES
450 .setAnalyticSensitivityAvailable(
true)
451 .setSensitivityFunctor(&modSens)
452 #endif // Xyce_ADMS_SENSITIVITIES
455 #ifdef Xyce_ADMS_SENSITIVITIES
456 .setAnalyticSensitivityAvailable(
true)
457 .setSensitivityFunctor(&modSens)
458 #endif // Xyce_ADMS_SENSITIVITIES
461 #ifdef Xyce_ADMS_SENSITIVITIES
462 .setAnalyticSensitivityAvailable(
true)
463 .setSensitivityFunctor(&modSens)
464 #endif // Xyce_ADMS_SENSITIVITIES
467 #ifdef Xyce_ADMS_SENSITIVITIES
468 .setAnalyticSensitivityAvailable(
true)
469 .setSensitivityFunctor(&modSens)
470 #endif // Xyce_ADMS_SENSITIVITIES
473 #ifdef Xyce_ADMS_SENSITIVITIES
474 .setAnalyticSensitivityAvailable(
true)
475 .setSensitivityFunctor(&modSens)
476 #endif // Xyce_ADMS_SENSITIVITIES
479 #ifdef Xyce_ADMS_SENSITIVITIES
480 .setAnalyticSensitivityAvailable(
true)
481 .setSensitivityFunctor(&modSens)
482 #endif // Xyce_ADMS_SENSITIVITIES
485 #ifdef Xyce_ADMS_SENSITIVITIES
486 .setAnalyticSensitivityAvailable(
true)
487 .setSensitivityFunctor(&modSens)
488 #endif // Xyce_ADMS_SENSITIVITIES
491 #ifdef Xyce_ADMS_SENSITIVITIES
492 .setAnalyticSensitivityAvailable(
true)
493 .setSensitivityFunctor(&modSens)
494 #endif // Xyce_ADMS_SENSITIVITIES
497 #ifdef Xyce_ADMS_SENSITIVITIES
498 .setAnalyticSensitivityAvailable(
true)
499 .setSensitivityFunctor(&modSens)
500 #endif // Xyce_ADMS_SENSITIVITIES
503 #ifdef Xyce_ADMS_SENSITIVITIES
504 .setAnalyticSensitivityAvailable(
true)
505 .setSensitivityFunctor(&modSens)
506 #endif // Xyce_ADMS_SENSITIVITIES
509 #ifdef Xyce_ADMS_SENSITIVITIES
510 .setAnalyticSensitivityAvailable(
true)
511 .setSensitivityFunctor(&modSens)
512 #endif // Xyce_ADMS_SENSITIVITIES
515 #ifdef Xyce_ADMS_SENSITIVITIES
516 .setAnalyticSensitivityAvailable(
true)
517 .setSensitivityFunctor(&modSens)
518 #endif // Xyce_ADMS_SENSITIVITIES
521 #ifdef Xyce_ADMS_SENSITIVITIES
522 .setAnalyticSensitivityAvailable(
true)
523 .setSensitivityFunctor(&modSens)
524 #endif // Xyce_ADMS_SENSITIVITIES
527 #ifdef Xyce_ADMS_SENSITIVITIES
528 .setAnalyticSensitivityAvailable(
true)
529 .setSensitivityFunctor(&modSens)
530 #endif // Xyce_ADMS_SENSITIVITIES
533 #ifdef Xyce_ADMS_SENSITIVITIES
534 .setAnalyticSensitivityAvailable(
true)
535 .setSensitivityFunctor(&modSens)
536 #endif // Xyce_ADMS_SENSITIVITIES
539 #ifdef Xyce_ADMS_SENSITIVITIES
540 .setAnalyticSensitivityAvailable(
true)
541 .setSensitivityFunctor(&modSens)
542 #endif // Xyce_ADMS_SENSITIVITIES
545 #ifdef Xyce_ADMS_SENSITIVITIES
546 .setAnalyticSensitivityAvailable(
true)
547 .setSensitivityFunctor(&modSens)
548 #endif // Xyce_ADMS_SENSITIVITIES
568 if (!(
given(
"Temp")))
595 if ( (!((
Temp >=(-273.15)))) )
597 UserError0(*
this) <<
"ADMSHBT_X: Parameter Temp value " <<
Temp <<
" out of range [ (-273.15), (+inf) [";
603 UserError0(*
this) <<
"ADMSHBT_X: Parameter N value " <<
N <<
" out of range ] 0, (+inf) [";
609 UserError0(*
this) <<
"ADMSHBT_X: Parameter L value " <<
L <<
" out of range ] 0.0, (+inf) [";
615 UserError0(*
this) <<
"ADMSHBT_X: Parameter W value " <<
W <<
" out of range ] 0.0, (+inf) [";
646 :
DeviceInstance(instance_block, configuration.getInstanceParameters(), factory_block),
664 f_bi_Equ_ti_Node_Ptr(0),
665 f_ci_Equ_ti_Node_Ptr(0),
666 f_bi_Equ_bi_Node_Ptr(0),
667 f_bi_Equ_ci_Node_Ptr(0),
668 f_ci_Equ_bi_Node_Ptr(0),
669 f_ci_Equ_ci_Node_Ptr(0),
670 f_bii_Equ_ti_Node_Ptr(0),
671 f_bii_Equ_bii_Node_Ptr(0),
672 f_bii_Equ_ci_Node_Ptr(0),
673 f_ci_Equ_bii_Node_Ptr(0),
674 f_bii_Equ_ei_Node_Ptr(0),
675 f_ci_Equ_ei_Node_Ptr(0),
676 f_ei_Equ_bii_Node_Ptr(0),
677 f_ei_Equ_ci_Node_Ptr(0),
678 f_ei_Equ_ti_Node_Ptr(0),
679 f_ei_Equ_ei_Node_Ptr(0),
680 f_ex_Equ_ti_Node_Ptr(0),
681 f_ex_Equ_ex_Node_Ptr(0),
682 f_ex_Equ_ei_Node_Ptr(0),
683 f_ei_Equ_ex_Node_Ptr(0),
684 f_exx_Equ_ti_Node_Ptr(0),
685 f_exx_Equ_exx_Node_Ptr(0),
686 f_exx_Equ_ei_Node_Ptr(0),
687 f_ei_Equ_exx_Node_Ptr(0),
688 f_cx_Equ_ti_Node_Ptr(0),
689 f_cx_Equ_cx_Node_Ptr(0),
690 f_cx_Equ_ci_Node_Ptr(0),
691 f_ci_Equ_cx_Node_Ptr(0),
692 f_bii_Equ_bi_Node_Ptr(0),
693 f_bi_Equ_bii_Node_Ptr(0),
694 f_ex_Equ_bii_Node_Ptr(0),
695 f_bii_Equ_ex_Node_Ptr(0),
696 f_exx_Equ_bii_Node_Ptr(0),
697 f_bii_Equ_exx_Node_Ptr(0),
698 f_cx_Equ_bii_Node_Ptr(0),
699 f_bii_Equ_cx_Node_Ptr(0),
700 f_b_Equ_b_Node_Ptr(0),
701 f_c_Equ_c_Node_Ptr(0),
702 f_b_Equ_c_Node_Ptr(0),
703 f_c_Equ_b_Node_Ptr(0),
704 f_ti_Equ_bi_Node_Ptr(0),
705 f_ti_Equ_ci_Node_Ptr(0),
706 f_ti_Equ_ei_Node_Ptr(0),
707 f_ti_Equ_bii_Node_Ptr(0),
708 f_ti_Equ_ti_Node_Ptr(0),
709 f_t_Equ_t_Node_Ptr(0),
710 f_t_Equ_ti_Node_Ptr(0),
711 f_ti_Equ_t_Node_Ptr(0),
712 f_c_Equ_BRA_c_ci_Var_Ptr(0),
713 f_b_Equ_BRA_b_bi_Var_Ptr(0),
714 f_e_Equ_BRA_e_ei_Var_Ptr(0),
715 f_ei_Equ_BRA_e_ei_Var_Ptr(0),
716 f_bi_Equ_BRA_b_bi_Var_Ptr(0),
717 f_ci_Equ_BRA_c_ci_Var_Ptr(0),
718 f_BRA_b_bi_Equ_b_Node_Ptr(0),
719 f_BRA_b_bi_Equ_bi_Node_Ptr(0),
720 f_BRA_b_bi_Equ_BRA_b_bi_Var_Ptr(0),
721 f_BRA_e_ei_Equ_e_Node_Ptr(0),
722 f_BRA_e_ei_Equ_ei_Node_Ptr(0),
723 f_BRA_e_ei_Equ_BRA_e_ei_Var_Ptr(0),
724 f_BRA_c_ci_Equ_c_Node_Ptr(0),
725 f_BRA_c_ci_Equ_ci_Node_Ptr(0),
726 f_BRA_c_ci_Equ_BRA_c_ci_Var_Ptr(0),
727 q_bi_Equ_ti_Node_Ptr(0),
728 q_ci_Equ_ti_Node_Ptr(0),
729 q_bi_Equ_bi_Node_Ptr(0),
730 q_bi_Equ_ci_Node_Ptr(0),
731 q_ci_Equ_bi_Node_Ptr(0),
732 q_ci_Equ_ci_Node_Ptr(0),
733 q_bii_Equ_ti_Node_Ptr(0),
734 q_bii_Equ_bii_Node_Ptr(0),
735 q_bii_Equ_ci_Node_Ptr(0),
736 q_ci_Equ_bii_Node_Ptr(0),
737 q_bii_Equ_ei_Node_Ptr(0),
738 q_ci_Equ_ei_Node_Ptr(0),
739 q_ei_Equ_bii_Node_Ptr(0),
740 q_ei_Equ_ci_Node_Ptr(0),
741 q_ei_Equ_ti_Node_Ptr(0),
742 q_ei_Equ_ei_Node_Ptr(0),
743 q_ex_Equ_ti_Node_Ptr(0),
744 q_ex_Equ_ex_Node_Ptr(0),
745 q_ex_Equ_ei_Node_Ptr(0),
746 q_ei_Equ_ex_Node_Ptr(0),
747 q_exx_Equ_ti_Node_Ptr(0),
748 q_exx_Equ_exx_Node_Ptr(0),
749 q_exx_Equ_ei_Node_Ptr(0),
750 q_ei_Equ_exx_Node_Ptr(0),
751 q_cx_Equ_ti_Node_Ptr(0),
752 q_cx_Equ_cx_Node_Ptr(0),
753 q_cx_Equ_ci_Node_Ptr(0),
754 q_ci_Equ_cx_Node_Ptr(0),
755 q_bii_Equ_bi_Node_Ptr(0),
756 q_bi_Equ_bii_Node_Ptr(0),
757 q_ex_Equ_bii_Node_Ptr(0),
758 q_bii_Equ_ex_Node_Ptr(0),
759 q_exx_Equ_bii_Node_Ptr(0),
760 q_bii_Equ_exx_Node_Ptr(0),
761 q_cx_Equ_bii_Node_Ptr(0),
762 q_bii_Equ_cx_Node_Ptr(0),
763 q_b_Equ_b_Node_Ptr(0),
764 q_c_Equ_c_Node_Ptr(0),
765 q_b_Equ_c_Node_Ptr(0),
766 q_c_Equ_b_Node_Ptr(0),
767 q_ti_Equ_bi_Node_Ptr(0),
768 q_ti_Equ_ci_Node_Ptr(0),
769 q_ti_Equ_ei_Node_Ptr(0),
770 q_ti_Equ_bii_Node_Ptr(0),
771 q_ti_Equ_ti_Node_Ptr(0),
772 q_t_Equ_t_Node_Ptr(0),
773 q_t_Equ_ti_Node_Ptr(0),
774 q_ti_Equ_t_Node_Ptr(0),
775 q_c_Equ_BRA_c_ci_Var_Ptr(0),
776 q_b_Equ_BRA_b_bi_Var_Ptr(0),
777 q_e_Equ_BRA_e_ei_Var_Ptr(0),
778 q_ei_Equ_BRA_e_ei_Var_Ptr(0),
779 q_bi_Equ_BRA_b_bi_Var_Ptr(0),
780 q_ci_Equ_BRA_c_ci_Var_Ptr(0),
781 q_BRA_b_bi_Equ_b_Node_Ptr(0),
782 q_BRA_b_bi_Equ_bi_Node_Ptr(0),
783 q_BRA_b_bi_Equ_BRA_b_bi_Var_Ptr(0),
784 q_BRA_e_ei_Equ_e_Node_Ptr(0),
785 q_BRA_e_ei_Equ_ei_Node_Ptr(0),
786 q_BRA_e_ei_Equ_BRA_e_ei_Var_Ptr(0),
787 q_BRA_c_ci_Equ_c_Node_Ptr(0),
788 q_BRA_c_ci_Equ_ci_Node_Ptr(0),
789 q_BRA_c_ci_Equ_BRA_c_ci_Var_Ptr(0),
790 admsTemperature(getDeviceOptions().temp.getImmutableValue<double>())
942 for (
int i=0;i<mapSize;++i)
947 for (
int j=0;j<rowSize;++j)
960 if (!
given(
"XYCEADMSINSTTEMP"))
1002 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1004 Xyce::dout() << std::endl << section_divider << std::endl
1005 <<
"In ADMSHBT_X::Instance::register LIDs\n\n"
1006 <<
"name = " <<
getName() << std::endl
1007 <<
"number of internal variables: " <<
numIntVars << std::endl
1008 <<
"number of external variables: " <<
numExtVars << std::endl;
1018 li_c = extLIDVecRef[i++];
1019 li_b = extLIDVecRef[i++];
1020 li_e = extLIDVecRef[i++];
1021 li_t = extLIDVecRef[i++];
1025 li_ei = intLIDVecRef[i++];
1026 li_bi = intLIDVecRef[i++];
1027 li_bii = intLIDVecRef[i++];
1028 li_ci = intLIDVecRef[i++];
1029 li_ti = intLIDVecRef[i++];
1030 li_ex = intLIDVecRef[i++];
1031 li_exx = intLIDVecRef[i++];
1032 li_cx = intLIDVecRef[i++];
1038 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS))
1040 Xyce::dout() <<
"\nSolution and RHS variables:\n";
1041 Xyce::dout() <<
"\nli_c = " <<
li_c << std::endl;
1042 Xyce::dout() <<
"\nli_b = " <<
li_b << std::endl;
1043 Xyce::dout() <<
"\nli_e = " <<
li_e << std::endl;
1044 Xyce::dout() <<
"\nli_t = " <<
li_t << std::endl;
1045 Xyce::dout() <<
"\nli_ei = " <<
li_ei << std::endl;
1046 Xyce::dout() <<
"\nli_bi = " <<
li_bi << std::endl;
1047 Xyce::dout() <<
"\nli_bii = " <<
li_bii << std::endl;
1048 Xyce::dout() <<
"\nli_ci = " <<
li_ci << std::endl;
1049 Xyce::dout() <<
"\nli_ti = " <<
li_ti << std::endl;
1050 Xyce::dout() <<
"\nli_ex = " <<
li_ex << std::endl;
1051 Xyce::dout() <<
"\nli_exx = " <<
li_exx << std::endl;
1052 Xyce::dout() <<
"\nli_cx = " <<
li_cx << std::endl;
1053 Xyce::dout() <<
"\nli_BRA_b_bi = " <<
li_BRA_b_bi << std::endl;
1054 Xyce::dout() <<
"\nli_BRA_e_ei = " <<
li_BRA_e_ei << std::endl;
1055 Xyce::dout() <<
"\nli_BRA_c_ci = " <<
li_BRA_c_ci << std::endl;
1057 Xyce::dout() <<
"\nEnd of ADMSHBT_X::Instance::register LIDs\n";
1058 Xyce::dout() << section_divider << std::endl;
1097 int numSta = staLIDVecRef.size();
1134 std::vector<int> & map=
jacMap;
1135 std::vector< std::vector<int> > & map2=
jacMap2;
1402 bool bsuccess =
true;
1431 bool bsuccess =
true;
1453 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
1455 Xyce::dout() << std::endl << subsection_divider << std::endl;
1456 Xyce::dout() <<
" In ADMSHBT_X::Instance::updateIntermediateVars\n\n";
1457 Xyce::dout() <<
" name = " <<
getName() << std::endl;
1513 double vbei_orig,vbei_limited,vbei_old;
1514 double vbci_orig,vbci_limited,vbci_old;
1515 double vbcx_orig,vbcx_limited,vbcx_old;
1531 for (
int i=0; i < 12+3 ; ++i)
1539 for (
int i=0; i < 19 ; ++i)
1629 if ((*flagSolVectorPtr)[
li_e] == 0 ||
1630 (*flagSolVectorPtr)[
li_ei] == 0 ||
1631 (*flagSolVectorPtr)[
li_ex] == 0 ||
1632 (*flagSolVectorPtr)[
li_exx] == 0 ||
1633 (*flagSolVectorPtr)[
li_b] == 0 ||
1634 (*flagSolVectorPtr)[
li_bi] == 0 ||
1635 (*flagSolVectorPtr)[
li_bii] == 0 ||
1636 (*flagSolVectorPtr)[
li_c] == 0 ||
1637 (*flagSolVectorPtr)[
li_ci] == 0 ||
1638 (*flagSolVectorPtr)[
li_cx] == 0 ||
1639 (*flagSolVectorPtr)[
li_t] == 0 ||
1640 (*flagSolVectorPtr)[
li_ti] == 0 )
1642 vbcx_limited = vbci_limited = 0;
1643 vbei_limited = tVCrit;
1649 vbcx_limited = vbci_limited = 0;
1650 vbei_limited = tVCrit;
1654 Xyce::dout() <<
" Setting device initial condition to Base-Emitter drop=tVCri (" << tVCrit <<
")" << std::endl;
1668 vbei_old = vbei_limited;
1669 vbci_old = vbci_limited;
1670 vbcx_old = vbcx_limited;
1742 Area = (((
L*
W)*1.0e12)*
N);
1743 FOUR_K = (4*1.3806226e-23);
1744 TWO_Q = (2*1.6021918e-19);
1749 q1 = ((1.0+((AnalogFunctions::charge<AdmsFadType>(vbei,1.0,(
model_.
Vje),(
model_.
mje),1.0)-AnalogFunctions::charge<double>(0.0,1.0,(
model_.
Vje),(
model_.
mje),1.0))/(
model_.
VAR)))+((AnalogFunctions::charge<AdmsFadType>(vbci,1.0,(
model_.
Vjc),(
model_.
mjc),1.0)-AnalogFunctions::charge<double>(0.0,1.0,(
model_.
Vjc),(
model_.
mjc),1.0))/(
model_.
VAF)));
1791 qb = ((q1+sqrt(((q1*q1)+(4.0*q2))))/2.0);
1836 Ib0 = (Ic0a*EdBeta);
1839 Ib1 = (Ib0-AnalogFunctions::diode<AdmsFadType>(((-(
model_.
BVebo))-vbei),(
model_.
Jsf),0.0,1.0,Area,0.0,0.0));
1859 Ibdxx = (vxxe*1e-12);
1869 Ipdiss = ((((Ic1*vcei)+(Ib1*vbei))+(Ib2*vbci))+(Ibx*vbcx));
1877 if ((((
model_.
J0)<=0.0)||(Ic0<0.0)))
1889 if ((((
model_.
J0)<0.0)||(Ic0<0.0)))
1909 qb2 = (qb2med+qbtr);
1929 Ih = (1.0-(AnalogFunctions::ICK<AdmsFadType>(vcei,RCIO,Vlim,InvVpt,(
model_.
Vces))/Ic0));
1933 Ih = (1.0-(AnalogFunctions::Vceff<AdmsFadType>(vcei,(
model_.
Vces))/(RCIO*Ic0)));
1935 Wh = ((Ih+sqrt(((Ih*Ih)+AHC)))/(1.0+sqrt((1.0+AHC))));
2084 contribTemp= (-Ipdiss);
2127 Xyce::dout() <<
" probeVars[admsProbeID_V_t_ti] = "
2129 Xyce::dout() <<
" probeVars[admsProbeID_V_b_c] = "
2131 Xyce::dout() <<
" probeVars[admsProbeID_V_c_GND] = "
2133 Xyce::dout() <<
" probeVars[admsProbeID_V_b_GND] = "
2135 Xyce::dout() <<
" probeVars[admsProbeID_V_cx_bii] = "
2137 Xyce::dout() <<
" probeVars[admsProbeID_V_exx_bii] = "
2139 Xyce::dout() <<
" probeVars[admsProbeID_V_ex_bii] = "
2141 Xyce::dout() <<
" probeVars[admsProbeID_V_bii_bi] = "
2143 Xyce::dout() <<
" probeVars[admsProbeID_I_c_ci] = "
2145 Xyce::dout() <<
" probeVars[admsProbeID_I_e_ei] = "
2147 Xyce::dout() <<
" probeVars[admsProbeID_I_b_bi] = "
2149 Xyce::dout() <<
" probeVars[admsProbeID_V_ti_GND] = "
2151 Xyce::dout() <<
" probeVars[admsProbeID_V_ci_ei] = "
2153 Xyce::dout() <<
" probeVars[admsProbeID_V_exx_ei] = "
2155 Xyce::dout() <<
" probeVars[admsProbeID_V_cx_ci] = "
2157 Xyce::dout() <<
" probeVars[admsProbeID_V_ex_ei] = "
2159 Xyce::dout() <<
" probeVars[admsProbeID_V_bii_ei] = "
2161 Xyce::dout() <<
" probeVars[admsProbeID_V_bii_ci] = "
2163 Xyce::dout() <<
" probeVars[admsProbeID_V_bi_ci] = "
2165 Xyce::dout() <<
" staticContributions[admsNodeID_c] = "
2169 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_c_GND) << std::endl;
2170 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_b_GND) << std::endl;
2179 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2180 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_exx_ei) << std::endl;
2181 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2182 Xyce::dout() <<
" staticContributions[admsNodeID_c].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_c].dx(admsProbeID_V_ex_ei) << std::endl;
2186 Xyce::dout() <<
" dynamicContributions[admsNodeID_c] = "
2190 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_c_GND) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_c_GND) << std::endl;
2191 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_b_GND) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_b_GND) << std::endl;
2200 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ci_ei) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_ci_ei) << std::endl;
2201 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_exx_ei) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_exx_ei) << std::endl;
2202 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_cx_ci) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_cx_ci) << std::endl;
2203 Xyce::dout() <<
" dynamicContributions[admsNodeID_c].dx(admsProbeID_V_ex_ei) = " <<
dynamicContributions[
admsNodeID_c].dx(admsProbeID_V_ex_ei) << std::endl;
2207 Xyce::dout() <<
" Jdxp_static[admsNodeID_c] = "
2209 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_c] = "
2211 Xyce::dout() <<
" staticContributions[admsNodeID_b] = "
2215 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_c_GND) << std::endl;
2216 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_b_GND) << std::endl;
2225 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2226 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_exx_ei) << std::endl;
2227 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2228 Xyce::dout() <<
" staticContributions[admsNodeID_b].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_b].dx(admsProbeID_V_ex_ei) << std::endl;
2232 Xyce::dout() <<
" dynamicContributions[admsNodeID_b] = "
2236 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_c_GND) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_c_GND) << std::endl;
2237 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_b_GND) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_b_GND) << std::endl;
2246 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ci_ei) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_ci_ei) << std::endl;
2247 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_exx_ei) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_exx_ei) << std::endl;
2248 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_cx_ci) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_cx_ci) << std::endl;
2249 Xyce::dout() <<
" dynamicContributions[admsNodeID_b].dx(admsProbeID_V_ex_ei) = " <<
dynamicContributions[
admsNodeID_b].dx(admsProbeID_V_ex_ei) << std::endl;
2253 Xyce::dout() <<
" Jdxp_static[admsNodeID_b] = "
2255 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_b] = "
2257 Xyce::dout() <<
" staticContributions[admsNodeID_e] = "
2261 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_c_GND) << std::endl;
2262 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_b_GND) << std::endl;
2271 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2272 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_exx_ei) << std::endl;
2273 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2274 Xyce::dout() <<
" staticContributions[admsNodeID_e].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_e].dx(admsProbeID_V_ex_ei) << std::endl;
2278 Xyce::dout() <<
" dynamicContributions[admsNodeID_e] = "
2282 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_c_GND) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_c_GND) << std::endl;
2283 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_b_GND) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_b_GND) << std::endl;
2292 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ci_ei) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_ci_ei) << std::endl;
2293 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_exx_ei) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_exx_ei) << std::endl;
2294 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_cx_ci) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_cx_ci) << std::endl;
2295 Xyce::dout() <<
" dynamicContributions[admsNodeID_e].dx(admsProbeID_V_ex_ei) = " <<
dynamicContributions[
admsNodeID_e].dx(admsProbeID_V_ex_ei) << std::endl;
2299 Xyce::dout() <<
" Jdxp_static[admsNodeID_e] = "
2301 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_e] = "
2303 Xyce::dout() <<
" staticContributions[admsNodeID_t] = "
2307 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_c_GND) << std::endl;
2308 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_b_GND) << std::endl;
2317 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_ci_ei) << std::endl;
2318 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_exx_ei) << std::endl;
2319 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_cx_ci) << std::endl;
2320 Xyce::dout() <<
" staticContributions[admsNodeID_t].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_t].dx(admsProbeID_V_ex_ei) << std::endl;
2324 Xyce::dout() <<
" dynamicContributions[admsNodeID_t] = "
2328 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_c_GND) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_c_GND) << std::endl;
2329 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_b_GND) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_b_GND) << std::endl;
2338 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_ci_ei) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_ci_ei) << std::endl;
2339 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_exx_ei) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_exx_ei) << std::endl;
2340 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_cx_ci) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_cx_ci) << std::endl;
2341 Xyce::dout() <<
" dynamicContributions[admsNodeID_t].dx(admsProbeID_V_ex_ei) = " <<
dynamicContributions[
admsNodeID_t].dx(admsProbeID_V_ex_ei) << std::endl;
2345 Xyce::dout() <<
" Jdxp_static[admsNodeID_t] = "
2347 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_t] = "
2349 Xyce::dout() <<
" staticContributions[admsNodeID_ei] = "
2353 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_c_GND) << std::endl;
2354 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_b_GND) << std::endl;
2363 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_ci_ei) << std::endl;
2364 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_exx_ei) << std::endl;
2365 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_cx_ci) << std::endl;
2366 Xyce::dout() <<
" staticContributions[admsNodeID_ei].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_ei].dx(admsProbeID_V_ex_ei) << std::endl;
2370 Xyce::dout() <<
" dynamicContributions[admsNodeID_ei] = "
2391 Xyce::dout() <<
" Jdxp_static[admsNodeID_ei] = "
2393 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_ei] = "
2395 Xyce::dout() <<
" staticContributions[admsNodeID_bi] = "
2399 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_c_GND) << std::endl;
2400 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_b_GND) << std::endl;
2409 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_ci_ei) << std::endl;
2410 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_exx_ei) << std::endl;
2411 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_cx_ci) << std::endl;
2412 Xyce::dout() <<
" staticContributions[admsNodeID_bi].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_bi].dx(admsProbeID_V_ex_ei) << std::endl;
2416 Xyce::dout() <<
" dynamicContributions[admsNodeID_bi] = "
2437 Xyce::dout() <<
" Jdxp_static[admsNodeID_bi] = "
2439 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_bi] = "
2441 Xyce::dout() <<
" staticContributions[admsNodeID_bii] = "
2462 Xyce::dout() <<
" dynamicContributions[admsNodeID_bii] = "
2483 Xyce::dout() <<
" Jdxp_static[admsNodeID_bii] = "
2485 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_bii] = "
2487 Xyce::dout() <<
" staticContributions[admsNodeID_ci] = "
2491 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_c_GND) << std::endl;
2492 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_b_GND) << std::endl;
2501 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_ci_ei) << std::endl;
2502 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_exx_ei) << std::endl;
2503 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_cx_ci) << std::endl;
2504 Xyce::dout() <<
" staticContributions[admsNodeID_ci].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_ci].dx(admsProbeID_V_ex_ei) << std::endl;
2508 Xyce::dout() <<
" dynamicContributions[admsNodeID_ci] = "
2529 Xyce::dout() <<
" Jdxp_static[admsNodeID_ci] = "
2531 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_ci] = "
2533 Xyce::dout() <<
" staticContributions[admsNodeID_ti] = "
2537 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_c_GND) << std::endl;
2538 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_b_GND) << std::endl;
2547 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_ci_ei) << std::endl;
2548 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_exx_ei) << std::endl;
2549 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_cx_ci) << std::endl;
2550 Xyce::dout() <<
" staticContributions[admsNodeID_ti].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_ti].dx(admsProbeID_V_ex_ei) << std::endl;
2554 Xyce::dout() <<
" dynamicContributions[admsNodeID_ti] = "
2575 Xyce::dout() <<
" Jdxp_static[admsNodeID_ti] = "
2577 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_ti] = "
2579 Xyce::dout() <<
" staticContributions[admsNodeID_ex] = "
2583 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_c_GND) << std::endl;
2584 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_b_GND) << std::endl;
2593 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_ci_ei) << std::endl;
2594 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_exx_ei) << std::endl;
2595 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_cx_ci) << std::endl;
2596 Xyce::dout() <<
" staticContributions[admsNodeID_ex].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_ex].dx(admsProbeID_V_ex_ei) << std::endl;
2600 Xyce::dout() <<
" dynamicContributions[admsNodeID_ex] = "
2621 Xyce::dout() <<
" Jdxp_static[admsNodeID_ex] = "
2623 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_ex] = "
2625 Xyce::dout() <<
" staticContributions[admsNodeID_exx] = "
2646 Xyce::dout() <<
" dynamicContributions[admsNodeID_exx] = "
2667 Xyce::dout() <<
" Jdxp_static[admsNodeID_exx] = "
2669 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_exx] = "
2671 Xyce::dout() <<
" staticContributions[admsNodeID_cx] = "
2675 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_c_GND) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_c_GND) << std::endl;
2676 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_b_GND) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_b_GND) << std::endl;
2685 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_ci_ei) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_ci_ei) << std::endl;
2686 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_exx_ei) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_exx_ei) << std::endl;
2687 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_cx_ci) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_cx_ci) << std::endl;
2688 Xyce::dout() <<
" staticContributions[admsNodeID_cx].dx(admsProbeID_V_ex_ei) = " <<
staticContributions[
admsNodeID_cx].dx(admsProbeID_V_ex_ei) << std::endl;
2692 Xyce::dout() <<
" dynamicContributions[admsNodeID_cx] = "
2713 Xyce::dout() <<
" Jdxp_static[admsNodeID_cx] = "
2715 Xyce::dout() <<
" Jdxp_dynamic[admsNodeID_cx] = "
2717 Xyce::dout() <<
" staticContributions[admsBRA_ID_b_bi] = "
2738 Xyce::dout() <<
" dynamicContributions[admsBRA_ID_b_bi] = "
2759 Xyce::dout() <<
" staticContributions[admsBRA_ID_e_ei] = "
2780 Xyce::dout() <<
" dynamicContributions[admsBRA_ID_e_ei] = "
2801 Xyce::dout() <<
" staticContributions[admsBRA_ID_c_ci] = "
2822 Xyce::dout() <<
" dynamicContributions[admsBRA_ID_c_ci] = "
2845 Xyce::dout() <<
"This step was limited by this device." << std::endl;
2861 bool bsuccess =
true;
2864 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2866 Xyce::dout() << subsection_divider << std::endl;
2867 Xyce::dout() <<
"ADMSHBT_X::Instance::loadDAEdFdx (" <<
getName() <<
"):" << std::endl;
2872 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2879 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2886 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2893 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2900 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2907 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2914 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2921 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2928 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2935 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2942 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2949 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2956 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2963 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2970 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2977 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2984 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2991 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
2998 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3005 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3012 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3019 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3026 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3033 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3040 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3047 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3054 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3061 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3068 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3075 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3082 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3089 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3096 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3103 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3110 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3117 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3124 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3131 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3138 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3145 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3152 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3159 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3166 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3173 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3180 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3188 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3196 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3204 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3212 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3220 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3227 (*f_BRA_b_bi_Equ_b_Node_Ptr) += -1;
3229 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3230 { Xyce::dout() <<
" (*f_BRA_b_bi_Equ_b_Node_Ptr) += " << -1<< std::endl;
3234 (*f_BRA_b_bi_Equ_bi_Node_Ptr) += +1;
3236 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3237 { Xyce::dout() <<
" (*f_BRA_b_bi_Equ_bi_Node_Ptr) += " << +1<< std::endl;
3243 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3249 (*f_BRA_e_ei_Equ_e_Node_Ptr) += -1;
3251 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3252 { Xyce::dout() <<
" (*f_BRA_e_ei_Equ_e_Node_Ptr) += " << -1<< std::endl;
3256 (*f_BRA_e_ei_Equ_ei_Node_Ptr) += +1;
3258 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3259 { Xyce::dout() <<
" (*f_BRA_e_ei_Equ_ei_Node_Ptr) += " << +1<< std::endl;
3265 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3271 (*f_BRA_c_ci_Equ_c_Node_Ptr) += -1;
3273 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3274 { Xyce::dout() <<
" (*f_BRA_c_ci_Equ_c_Node_Ptr) += " << -1<< std::endl;
3278 (*f_BRA_c_ci_Equ_ci_Node_Ptr) += +1;
3280 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3281 { Xyce::dout() <<
" (*f_BRA_c_ci_Equ_ci_Node_Ptr) += " << +1<< std::endl;
3287 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3307 bool bsuccess =
true;
3310 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3312 Xyce::dout() << subsection_divider << std::endl;
3313 Xyce::dout() <<
"ADMSHBT_X::Instance::loadDAEdQdx (" <<
getName() <<
"):" << std::endl;
3318 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3325 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3332 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3339 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3346 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3353 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3360 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3367 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3374 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3381 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3388 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3395 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3402 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3409 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3416 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3423 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3430 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3437 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3444 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3451 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3458 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3465 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3472 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3479 if (DEBUG_DEVICE && isActive(Diag::DEVICE_PARAMETERS) &&
getSolverState().debugTimeFlag)
3544 if ( (!((
Mode >=0 &&
Mode <=4 ))) )
3546 UserError0(*
this) <<
"ADMSHBT_X: Parameter Mode value " <<
Mode <<
" out of range [ 0, 4 ]";
3552 UserError0(*
this) <<
"ADMSHBT_X: Parameter Noise value " <<
Noise <<
" out of range [ 0, 4 ]";
3556 if ( (!((
Debug >=0))) )
3558 UserError0(*
this) <<
"ADMSHBT_X: Parameter Debug value " <<
Debug <<
" out of range [ 0, (+inf) [";
3564 UserError0(*
this) <<
"ADMSHBT_X: Parameter DebugPlus value " <<
DebugPlus <<
" out of range [ 0, (+inf) [";
3568 if ( (!((
Temp >=(-273.15)))) )
3570 UserError0(*
this) <<
"ADMSHBT_X: Parameter Temp value " <<
Temp <<
" out of range [ (-273.15), (+inf) [";
3574 if ( (!((
Rth >=0.0))) )
3576 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rth value " <<
Rth <<
" out of range [ 0.0, (+inf) [";
3580 if ( (!((
Cth >=0.0))) )
3582 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cth value " <<
Cth <<
" out of range [ 0.0, (+inf) [";
3588 UserError0(*
this) <<
"ADMSHBT_X: Parameter N value " <<
N <<
" out of range ] 0, (+inf) [";
3592 if ( (!((
L >0.0))) )
3594 UserError0(*
this) <<
"ADMSHBT_X: Parameter L value " <<
L <<
" out of range ] 0.0, (+inf) [";
3598 if ( (!((
W >0.0))) )
3600 UserError0(*
this) <<
"ADMSHBT_X: Parameter W value " <<
W <<
" out of range ] 0.0, (+inf) [";
3604 if ( (!((
Jsf >=0.0))) )
3606 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jsf value " <<
Jsf <<
" out of range [ 0.0, (+inf) [";
3610 if ( (!((
nf >=0.0))) )
3612 UserError0(*
this) <<
"ADMSHBT_X: Parameter nf value " <<
nf <<
" out of range [ 0.0, (+inf) [";
3616 if ( (!((
Vg >=(-2.0)))) )
3618 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vg value " <<
Vg <<
" out of range [ (-2.0), (+inf) [";
3622 if ( (!((
Jse >=0.0))) )
3624 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jse value " <<
Jse <<
" out of range [ 0.0, (+inf) [";
3628 if ( (!((
ne >=0.0))) )
3630 UserError0(*
this) <<
"ADMSHBT_X: Parameter ne value " <<
ne <<
" out of range [ 0.0, (+inf) [";
3634 if ( (!((
Rbxx >0.0))) )
3636 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rbxx value " <<
Rbxx <<
" out of range ] 0.0, (+inf) [";
3640 if ( (!((
Vgb >=0.0))) )
3642 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vgb value " <<
Vgb <<
" out of range [ 0.0, (+inf) [";
3646 if ( (!((
Jsee >=0.0))) )
3648 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jsee value " <<
Jsee <<
" out of range [ 0.0, (+inf) [";
3652 if ( (!((
nee >=0.0))) )
3654 UserError0(*
this) <<
"ADMSHBT_X: Parameter nee value " <<
nee <<
" out of range [ 0.0, (+inf) [";
3658 if ( (!((
Rbbxx >0.0))) )
3660 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rbbxx value " <<
Rbbxx <<
" out of range ] 0.0, (+inf) [";
3664 if ( (!((
Vgbb >=0.0))) )
3666 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vgbb value " <<
Vgbb <<
" out of range [ 0.0, (+inf) [";
3670 if ( (!((
Jsr >=0.0))) )
3672 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jsr value " <<
Jsr <<
" out of range [ 0.0, (+inf) [";
3676 if ( (!((
nr >=0.0))) )
3678 UserError0(*
this) <<
"ADMSHBT_X: Parameter nr value " <<
nr <<
" out of range [ 0.0, (+inf) [";
3682 if ( (!((
Vgr >=0.0))) )
3684 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vgr value " <<
Vgr <<
" out of range [ 0.0, (+inf) [";
3688 if ( (!((
XCjc >=0.0 &&
XCjc <1.0 ))) )
3690 UserError0(*
this) <<
"ADMSHBT_X: Parameter XCjc value " <<
XCjc <<
" out of range [ 0.0, 1.0 [";
3694 if ( (!((
Jsc >=0.0))) )
3696 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jsc value " <<
Jsc <<
" out of range [ 0.0, (+inf) [";
3700 if ( (!((
nc >=0.0))) )
3702 UserError0(*
this) <<
"ADMSHBT_X: Parameter nc value " <<
nc <<
" out of range [ 0.0, (+inf) [";
3706 if ( (!((
Rcxx >0.0))) )
3708 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rcxx value " <<
Rcxx <<
" out of range ] 0.0, (+inf) [";
3712 if ( (!((
Vgc >=0.0))) )
3714 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vgc value " <<
Vgc <<
" out of range [ 0.0, (+inf) [";
3718 if ( (!((
Bf >=0.0))) )
3720 UserError0(*
this) <<
"ADMSHBT_X: Parameter Bf value " <<
Bf <<
" out of range [ 0.0, (+inf) [";
3724 if ( (!((
kBeta >=0.0))) )
3726 UserError0(*
this) <<
"ADMSHBT_X: Parameter kBeta value " <<
kBeta <<
" out of range [ 0.0, (+inf) [";
3730 if ( (!((
Br >=0.0))) )
3732 UserError0(*
this) <<
"ADMSHBT_X: Parameter Br value " <<
Br <<
" out of range [ 0.0, (+inf) [";
3736 if ( (!((
VAF >=0.0))) )
3738 UserError0(*
this) <<
"ADMSHBT_X: Parameter VAF value " <<
VAF <<
" out of range [ 0.0, (+inf) [";
3742 if ( (!((
VAR >=0.0))) )
3744 UserError0(*
this) <<
"ADMSHBT_X: Parameter VAR value " <<
VAR <<
" out of range [ 0.0, (+inf) [";
3748 if ( (!((
IKF >=0.0))) )
3750 UserError0(*
this) <<
"ADMSHBT_X: Parameter IKF value " <<
IKF <<
" out of range [ 0.0, (+inf) [";
3754 if ( (!((
IKR >=0.0))) )
3756 UserError0(*
this) <<
"ADMSHBT_X: Parameter IKR value " <<
IKR <<
" out of range [ 0.0, (+inf) [";
3760 if ( (!((
Mc >=0.0))) )
3762 UserError0(*
this) <<
"ADMSHBT_X: Parameter Mc value " <<
Mc <<
" out of range [ 0.0, (+inf) [";
3766 if ( (!((
BVceo >=0.0))) )
3768 UserError0(*
this) <<
"ADMSHBT_X: Parameter BVceo value " <<
BVceo <<
" out of range [ 0.0, (+inf) [";
3772 if ( (!((
kc >=0.0))) )
3774 UserError0(*
this) <<
"ADMSHBT_X: Parameter kc value " <<
kc <<
" out of range [ 0.0, (+inf) [";
3778 if ( (!((
BVebo >=0.0))) )
3780 UserError0(*
this) <<
"ADMSHBT_X: Parameter BVebo value " <<
BVebo <<
" out of range [ 0.0, (+inf) [";
3784 if ( (!((
Tr >=0.0))) )
3786 UserError0(*
this) <<
"ADMSHBT_X: Parameter Tr value " <<
Tr <<
" out of range [ 0.0, (+inf) [";
3790 if ( (!((
Trx >=0.0))) )
3792 UserError0(*
this) <<
"ADMSHBT_X: Parameter Trx value " <<
Trx <<
" out of range [ 0.0, (+inf) [";
3796 if ( (!((
Tf >=0.0))) )
3798 UserError0(*
this) <<
"ADMSHBT_X: Parameter Tf value " <<
Tf <<
" out of range [ 0.0, (+inf) [";
3802 if ( (!((
Tft >=0.0))) )
3804 UserError0(*
this) <<
"ADMSHBT_X: Parameter Tft value " <<
Tft <<
" out of range [ 0.0, (+inf) [";
3808 if ( (!((
Thcs >=0.0))) )
3810 UserError0(*
this) <<
"ADMSHBT_X: Parameter Thcs value " <<
Thcs <<
" out of range [ 0.0, (+inf) [";
3814 if ( (!((
Ahc >=0.0))) )
3816 UserError0(*
this) <<
"ADMSHBT_X: Parameter Ahc value " <<
Ahc <<
" out of range [ 0.0, (+inf) [";
3820 if ( (!((
Cje >=0.0))) )
3822 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cje value " <<
Cje <<
" out of range [ 0.0, (+inf) [";
3826 if ( (!((
mje >=0.0 &&
mje <1 ))) )
3828 UserError0(*
this) <<
"ADMSHBT_X: Parameter mje value " <<
mje <<
" out of range [ 0.0, 1 [";
3832 if ( (!((
Vje >=0.0))) )
3834 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vje value " <<
Vje <<
" out of range [ 0.0, (+inf) [";
3838 if ( (!((
Cjc >=0.0))) )
3840 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cjc value " <<
Cjc <<
" out of range [ 0.0, (+inf) [";
3844 if ( (!((
mjc >=0.0))) )
3846 UserError0(*
this) <<
"ADMSHBT_X: Parameter mjc value " <<
mjc <<
" out of range [ 0.0, (+inf) [";
3850 if ( (!((
Vjc >=0.0))) )
3852 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vjc value " <<
Vjc <<
" out of range [ 0.0, (+inf) [";
3858 if ( (!((
Cmin >=0.0))) )
3860 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cmin value " <<
Cmin <<
" out of range [ 0.0, (+inf) [";
3864 if ( (!((
J0 >=0.0))) )
3866 UserError0(*
this) <<
"ADMSHBT_X: Parameter J0 value " <<
J0 <<
" out of range [ 0.0, (+inf) [";
3870 if ( (!((
XJ0 >=0.0 &&
XJ0 <=1.0 ))) )
3872 UserError0(*
this) <<
"ADMSHBT_X: Parameter XJ0 value " <<
XJ0 <<
" out of range [ 0.0, 1.0 ]";
3876 if ( (!((
Rci0 >0.0))) )
3878 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rci0 value " <<
Rci0 <<
" out of range ] 0.0, (+inf) [";
3882 if ( (!((
Jk >=0.0))) )
3884 UserError0(*
this) <<
"ADMSHBT_X: Parameter Jk value " <<
Jk <<
" out of range [ 0.0, (+inf) [";
3888 if ( (!((
RJk >=0.0))) )
3890 UserError0(*
this) <<
"ADMSHBT_X: Parameter RJk value " <<
RJk <<
" out of range [ 0.0, (+inf) [";
3894 if ( (!((
Vces >=0.0))) )
3896 UserError0(*
this) <<
"ADMSHBT_X: Parameter Vces value " <<
Vces <<
" out of range [ 0.0, (+inf) [";
3900 if ( (!((
Rc >0.0))) )
3902 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rc value " <<
Rc <<
" out of range ] 0.0, (+inf) [";
3906 if ( (!((
Re >0.0))) )
3908 UserError0(*
this) <<
"ADMSHBT_X: Parameter Re value " <<
Re <<
" out of range ] 0.0, (+inf) [";
3912 if ( (!((
Rb >0.0))) )
3914 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rb value " <<
Rb <<
" out of range ] 0.0, (+inf) [";
3918 if ( (!((
Rb2 >0.0))) )
3920 UserError0(*
this) <<
"ADMSHBT_X: Parameter Rb2 value " <<
Rb2 <<
" out of range ] 0.0, (+inf) [";
3924 if ( (!((
Lc >=0.0))) )
3926 UserError0(*
this) <<
"ADMSHBT_X: Parameter Lc value " <<
Lc <<
" out of range [ 0.0, (+inf) [";
3930 if ( (!((
Le >=0.0))) )
3932 UserError0(*
this) <<
"ADMSHBT_X: Parameter Le value " <<
Le <<
" out of range [ 0.0, (+inf) [";
3936 if ( (!((
Lb >=0.0))) )
3938 UserError0(*
this) <<
"ADMSHBT_X: Parameter Lb value " <<
Lb <<
" out of range [ 0.0, (+inf) [";
3942 if ( (!((
Cq >=0.0))) )
3944 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cq value " <<
Cq <<
" out of range [ 0.0, (+inf) [";
3948 if ( (!((
Cpb >=0.0))) )
3950 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cpb value " <<
Cpb <<
" out of range [ 0.0, (+inf) [";
3954 if ( (!((
Cpc >=0.0))) )
3956 UserError0(*
this) <<
"ADMSHBT_X: Parameter Cpc value " <<
Cpc <<
" out of range [ 0.0, (+inf) [";
3960 if ( (!((
Tnom >=(-273.15)))) )
3962 UserError0(*
this) <<
"ADMSHBT_X: Parameter Tnom value " <<
Tnom <<
" out of range [ (-273.15), (+inf) [";
3968 UserError0(*
this) <<
"ADMSHBT_X: Parameter dtype value " <<
dtype <<
" out of range [ (-1), 1 ] or in excluded range [ 0, 0 ]";
3989 std::vector<Instance*>::iterator iter;
3993 for (iter=first; iter!=last; ++iter)
3995 (*iter)->processParams();
4013 :
DeviceModel(model_block, configuration.getModelParameters(), factory_block),
4098 if (!
given(
"XYCEADMSMODTEMP"))
4129 std::vector<Instance*>::iterator iterI;
4134 for (iterI = firstI; iterI != lastI; ++iterI)
4150 std::vector<Instance*>::const_iterator iter;
4156 os <<
" name model name Parameters" << std::endl;
4157 for (i=0, iter=first; iter!=last; ++iter, ++i)
4159 os <<
" " << i <<
": " << (*iter)->getName() <<
" ";
4163 os <<
"TEMP = " << (*iter)->Temp << std::endl;
4164 os <<
"N = " << (*iter)->N << std::endl;
4165 os <<
"L = " << (*iter)->L << std::endl;
4166 os <<
"W = " << (*iter)->W << std::endl;
4191 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4203 .registerDevice(
"q", 23)
4204 .registerModelType(
"npn", 23)
4205 .registerModelType(
"pnp", 23);
4210 #ifdef Xyce_ADMS_SENSITIVITIES
4219 void evaluateInitialInstance(
4223 bool instancePar_given_Temp,
4225 bool instancePar_given_L,
4227 bool instancePar_given_W,
4230 bool instancePar_given_N,
4234 bool modelPar_given_Temp,
4236 bool modelPar_given_Rth,
4238 bool modelPar_given_Cth,
4240 bool modelPar_given_L,
4242 bool modelPar_given_W,
4244 bool modelPar_given_Jsf,
4246 bool modelPar_given_nf,
4248 bool modelPar_given_Vg,
4250 bool modelPar_given_Jse,
4252 bool modelPar_given_ne,
4254 bool modelPar_given_Rbxx,
4256 bool modelPar_given_Vgb,
4258 bool modelPar_given_Jsee,
4260 bool modelPar_given_nee,
4262 bool modelPar_given_Rbbxx,
4264 bool modelPar_given_Vgbb,
4266 bool modelPar_given_Jsr,
4268 bool modelPar_given_nr,
4270 bool modelPar_given_Vgr,
4272 bool modelPar_given_XCjc,
4274 bool modelPar_given_Jsc,
4276 bool modelPar_given_nc,
4278 bool modelPar_given_Rcxx,
4280 bool modelPar_given_Vgc,
4282 bool modelPar_given_Bf,
4284 bool modelPar_given_kBeta,
4286 bool modelPar_given_Br,
4288 bool modelPar_given_VAF,
4290 bool modelPar_given_VAR,
4292 bool modelPar_given_IKF,
4294 bool modelPar_given_IKR,
4296 bool modelPar_given_Mc,
4298 bool modelPar_given_BVceo,
4300 bool modelPar_given_kc,
4302 bool modelPar_given_BVebo,
4304 bool modelPar_given_Tr,
4306 bool modelPar_given_Trx,
4308 bool modelPar_given_Tf,
4310 bool modelPar_given_Tft,
4312 bool modelPar_given_Thcs,
4314 bool modelPar_given_Ahc,
4316 bool modelPar_given_Cje,
4318 bool modelPar_given_mje,
4320 bool modelPar_given_Vje,
4322 bool modelPar_given_Cjc,
4324 bool modelPar_given_mjc,
4326 bool modelPar_given_Vjc,
4328 bool modelPar_given_kjc,
4330 bool modelPar_given_Cmin,
4332 bool modelPar_given_J0,
4334 bool modelPar_given_XJ0,
4336 bool modelPar_given_Rci0,
4338 bool modelPar_given_Jk,
4340 bool modelPar_given_RJk,
4342 bool modelPar_given_Vces,
4344 bool modelPar_given_Rc,
4346 bool modelPar_given_Re,
4348 bool modelPar_given_Rb,
4350 bool modelPar_given_Rb2,
4352 bool modelPar_given_Lc,
4354 bool modelPar_given_Le,
4356 bool modelPar_given_Lb,
4358 bool modelPar_given_Cq,
4360 bool modelPar_given_Cpb,
4362 bool modelPar_given_Cpc,
4364 bool modelPar_given_Tnom,
4367 bool modelPar_given_Mode,
4369 bool modelPar_given_Noise,
4371 bool modelPar_given_Debug,
4372 int modelPar_DebugPlus,
4373 bool modelPar_given_DebugPlus,
4375 bool modelPar_given_N,
4377 double admsTemperature,
double adms_vt_nom)
4391 void evaluateInitialModel(
4395 bool modelPar_given_Temp,
4397 bool modelPar_given_Rth,
4399 bool modelPar_given_Cth,
4401 bool modelPar_given_L,
4403 bool modelPar_given_W,
4405 bool modelPar_given_Jsf,
4407 bool modelPar_given_nf,
4409 bool modelPar_given_Vg,
4411 bool modelPar_given_Jse,
4413 bool modelPar_given_ne,
4415 bool modelPar_given_Rbxx,
4417 bool modelPar_given_Vgb,
4419 bool modelPar_given_Jsee,
4421 bool modelPar_given_nee,
4423 bool modelPar_given_Rbbxx,
4425 bool modelPar_given_Vgbb,
4427 bool modelPar_given_Jsr,
4429 bool modelPar_given_nr,
4431 bool modelPar_given_Vgr,
4433 bool modelPar_given_XCjc,
4435 bool modelPar_given_Jsc,
4437 bool modelPar_given_nc,
4439 bool modelPar_given_Rcxx,
4441 bool modelPar_given_Vgc,
4443 bool modelPar_given_Bf,
4445 bool modelPar_given_kBeta,
4447 bool modelPar_given_Br,
4449 bool modelPar_given_VAF,
4451 bool modelPar_given_VAR,
4453 bool modelPar_given_IKF,
4455 bool modelPar_given_IKR,
4457 bool modelPar_given_Mc,
4459 bool modelPar_given_BVceo,
4461 bool modelPar_given_kc,
4463 bool modelPar_given_BVebo,
4465 bool modelPar_given_Tr,
4467 bool modelPar_given_Trx,
4469 bool modelPar_given_Tf,
4471 bool modelPar_given_Tft,
4473 bool modelPar_given_Thcs,
4475 bool modelPar_given_Ahc,
4477 bool modelPar_given_Cje,
4479 bool modelPar_given_mje,
4481 bool modelPar_given_Vje,
4483 bool modelPar_given_Cjc,
4485 bool modelPar_given_mjc,
4487 bool modelPar_given_Vjc,
4489 bool modelPar_given_kjc,
4491 bool modelPar_given_Cmin,
4493 bool modelPar_given_J0,
4495 bool modelPar_given_XJ0,
4497 bool modelPar_given_Rci0,
4499 bool modelPar_given_Jk,
4501 bool modelPar_given_RJk,
4503 bool modelPar_given_Vces,
4505 bool modelPar_given_Rc,
4507 bool modelPar_given_Re,
4509 bool modelPar_given_Rb,
4511 bool modelPar_given_Rb2,
4513 bool modelPar_given_Lc,
4515 bool modelPar_given_Le,
4517 bool modelPar_given_Lb,
4519 bool modelPar_given_Cq,
4521 bool modelPar_given_Cpb,
4523 bool modelPar_given_Cpc,
4525 bool modelPar_given_Tnom,
4528 bool modelPar_given_Mode,
4530 bool modelPar_given_Noise,
4532 bool modelPar_given_Debug,
4533 int modelPar_DebugPlus,
4534 bool modelPar_given_DebugPlus,
4536 bool modelPar_given_N,
4538 double admsTemperature)
4555 void evaluateModelEquations(
4556 std::vector <double> & probeVars,
4558 const int admsProbeID_V_t_ti,
4559 const int admsProbeID_V_b_c,
4560 const int admsProbeID_V_c_GND,
4561 const int admsProbeID_V_b_GND,
4562 const int admsProbeID_V_cx_bii,
4563 const int admsProbeID_V_exx_bii,
4564 const int admsProbeID_V_ex_bii,
4565 const int admsProbeID_V_bii_bi,
4566 const int admsProbeID_I_c_ci,
4567 const int admsProbeID_I_e_ei,
4568 const int admsProbeID_I_b_bi,
4569 const int admsProbeID_V_ti_GND,
4570 const int admsProbeID_V_ci_ei,
4571 const int admsProbeID_V_exx_ei,
4572 const int admsProbeID_V_cx_ci,
4573 const int admsProbeID_V_ex_ei,
4574 const int admsProbeID_V_bii_ei,
4575 const int admsProbeID_V_bii_ci,
4576 const int admsProbeID_V_bi_ci,
4578 const int admsNodeID_c,
4579 const int admsNodeID_b,
4580 const int admsNodeID_e,
4581 const int admsNodeID_t,
4582 const int admsNodeID_ei,
4583 const int admsNodeID_bi,
4584 const int admsNodeID_bii,
4585 const int admsNodeID_ci,
4586 const int admsNodeID_ti,
4587 const int admsNodeID_ex,
4588 const int admsNodeID_exx,
4589 const int admsNodeID_cx,
4590 const int admsBRA_ID_b_bi,
4591 const int admsBRA_ID_e_ei,
4592 const int admsBRA_ID_c_ci,
4596 bool instancePar_given_Temp,
4598 bool instancePar_given_L,
4600 bool instancePar_given_W,
4603 bool instancePar_given_N,
4607 bool modelPar_given_Temp,
4609 bool modelPar_given_Rth,
4611 bool modelPar_given_Cth,
4613 bool modelPar_given_L,
4615 bool modelPar_given_W,
4617 bool modelPar_given_Jsf,
4619 bool modelPar_given_nf,
4621 bool modelPar_given_Vg,
4623 bool modelPar_given_Jse,
4625 bool modelPar_given_ne,
4627 bool modelPar_given_Rbxx,
4629 bool modelPar_given_Vgb,
4631 bool modelPar_given_Jsee,
4633 bool modelPar_given_nee,
4635 bool modelPar_given_Rbbxx,
4637 bool modelPar_given_Vgbb,
4639 bool modelPar_given_Jsr,
4641 bool modelPar_given_nr,
4643 bool modelPar_given_Vgr,
4645 bool modelPar_given_XCjc,
4647 bool modelPar_given_Jsc,
4649 bool modelPar_given_nc,
4651 bool modelPar_given_Rcxx,
4653 bool modelPar_given_Vgc,
4655 bool modelPar_given_Bf,
4657 bool modelPar_given_kBeta,
4659 bool modelPar_given_Br,
4661 bool modelPar_given_VAF,
4663 bool modelPar_given_VAR,
4665 bool modelPar_given_IKF,
4667 bool modelPar_given_IKR,
4669 bool modelPar_given_Mc,
4671 bool modelPar_given_BVceo,
4673 bool modelPar_given_kc,
4675 bool modelPar_given_BVebo,
4677 bool modelPar_given_Tr,
4679 bool modelPar_given_Trx,
4681 bool modelPar_given_Tf,
4683 bool modelPar_given_Tft,
4685 bool modelPar_given_Thcs,
4687 bool modelPar_given_Ahc,
4689 bool modelPar_given_Cje,
4691 bool modelPar_given_mje,
4693 bool modelPar_given_Vje,
4695 bool modelPar_given_Cjc,
4697 bool modelPar_given_mjc,
4699 bool modelPar_given_Vjc,
4701 bool modelPar_given_kjc,
4703 bool modelPar_given_Cmin,
4705 bool modelPar_given_J0,
4707 bool modelPar_given_XJ0,
4709 bool modelPar_given_Rci0,
4711 bool modelPar_given_Jk,
4713 bool modelPar_given_RJk,
4715 bool modelPar_given_Vces,
4717 bool modelPar_given_Rc,
4719 bool modelPar_given_Re,
4721 bool modelPar_given_Rb,
4723 bool modelPar_given_Rb2,
4725 bool modelPar_given_Lc,
4727 bool modelPar_given_Le,
4729 bool modelPar_given_Lb,
4731 bool modelPar_given_Cq,
4733 bool modelPar_given_Cpb,
4735 bool modelPar_given_Cpc,
4737 bool modelPar_given_Tnom,
4740 bool modelPar_given_Mode,
4742 bool modelPar_given_Noise,
4744 bool modelPar_given_Debug,
4745 int modelPar_DebugPlus,
4746 bool modelPar_given_DebugPlus,
4748 bool modelPar_given_N,
4751 double admsTemperature,
double adms_vt_nom,
double gmin, std::vector <AdmsSensFadType> & staticContributions, std::vector <AdmsSensFadType> & dynamicContributions,
const Instance & theInstance)
4809 tVCrit = (adms_vt_nom*log((adms_vt_nom/(1.41421356237309504880*((((modelPar_Jsf*instancePar_L)*instancePar_W)*instancePar_N)*1e12)))));
4810 vbcx = probeVars[admsProbeID_V_bi_ci];
4812 vbci = probeVars[admsProbeID_V_bii_ci];
4814 vbei = probeVars[admsProbeID_V_bii_ei];
4816 vxe = (modelPar_dtype*(probeVars[admsProbeID_V_ex_ei]));
4817 vxc = (modelPar_dtype*(probeVars[admsProbeID_V_cx_ci]));
4818 vxxe = (modelPar_dtype*(probeVars[admsProbeID_V_exx_ei]));
4819 vcei = (modelPar_dtype*(probeVars[admsProbeID_V_ci_ei]));
4820 Texi = (probeVars[admsProbeID_V_ti_GND]);
4821 Tj = (Texi+instancePar_Temp);
4823 Tex = (Tj-modelPar_Tnom);
4824 Area = (((instancePar_L*instancePar_W)*1.0e12)*instancePar_N);
4825 FOUR_K = (4*1.3806226e-23);
4826 TWO_Q = (2*1.6021918e-19);
4827 Ic0a = AnalogFunctions::diode<AdmsSensFadType>(vbei,modelPar_Jsf,modelPar_Vg,modelPar_nf,Area,Tj,modelPar_Tnom);
4828 Ic1ra = AnalogFunctions::diode<AdmsSensFadType>(vbci,(modelPar_XCjc*modelPar_Jsr),modelPar_Vgr,modelPar_nr,Area,Tj,modelPar_Tnom);
4829 if (((modelPar_VAF>0.0)&&(modelPar_VAR>0.0)))
4831 q1 = ((1.0+((AnalogFunctions::charge<AdmsSensFadType>(vbei,1.0,modelPar_Vje,modelPar_mje,1.0)-AnalogFunctions::charge<AdmsSensFadType>(0.0,1.0,modelPar_Vje,modelPar_mje,1.0))/modelPar_VAR))+((AnalogFunctions::charge<AdmsSensFadType>(vbci,1.0,modelPar_Vjc,modelPar_mjc,1.0)-AnalogFunctions::charge<AdmsSensFadType>(0.0,1.0,modelPar_Vjc,modelPar_mjc,1.0))/modelPar_VAF));
4835 if (((modelPar_VAF>0.0)&&(modelPar_VAR==0.0)))
4837 q1 = (1.0+((AnalogFunctions::charge<AdmsSensFadType>(vbci,1.0,modelPar_Vjc,modelPar_mjc,1.0)-AnalogFunctions::charge<AdmsSensFadType>(0.0,1.0,modelPar_Vjc,modelPar_mjc,1.0))/modelPar_VAF));
4841 if (((modelPar_VAF==0.0)&&(modelPar_VAR>0.0)))
4843 q1 = (1.0+((AnalogFunctions::charge<AdmsSensFadType>(vbei,1.0,modelPar_Vje,modelPar_mje,1.0)-AnalogFunctions::charge<AdmsSensFadType>(0.0,1.0,modelPar_Vje,modelPar_mje,1.0))/modelPar_VAR));
4851 if (((modelPar_IKF>0.0)&&(modelPar_IKR>0.0)))
4853 q2 = ((Ic0a/(Area*modelPar_IKF))+(Ic1ra/(Area*modelPar_IKR)));
4857 if (((modelPar_IKF>0.0)&&(modelPar_IKR==0.0)))
4859 q2 = (Ic0a/(Area*modelPar_IKF));
4863 if (((modelPar_IKF==0.0)&&(modelPar_IKR>0.0)))
4865 q2 = (Ic1ra/(Area*modelPar_IKR));
4873 qb = ((q1+sqrt(((q1*q1)+(4.0*q2))))/2.0);
4877 Ib2 = (AnalogFunctions::diode<AdmsSensFadType>(vbci,(modelPar_XCjc*modelPar_Jsr),modelPar_Vgr,modelPar_nr,Area,Tj,modelPar_Tnom)/modelPar_Br);
4878 Ibx = (AnalogFunctions::diode<AdmsSensFadType>(vbcx,((1.0-modelPar_XCjc)*modelPar_Jsr),modelPar_Vgr,modelPar_nr,Area,Tj,modelPar_Tnom)/modelPar_Br);
4880 Vbclin = (modelPar_BVceo*pow((1.0-epsi),(1/modelPar_Mc)));
4881 mm = AnalogFunctions::MM<AdmsSensFadType>(vbci,modelPar_BVceo,modelPar_Mc,Vbclin,modelPar_Bf,modelPar_kc);
4884 if ((modelPar_kBeta>0.0))
4886 if (((modelPar_Bf-(modelPar_kBeta*Tex))>1e-6))
4888 EdBeta = (((1/(modelPar_Bf-(modelPar_kBeta*Tex)))-(modelPar_kc*(mm-1)))/((modelPar_kc*(mm-1))+1));
4892 EdBeta = ((1e6-(modelPar_kc*(mm-1)))/((modelPar_kc*(mm-1))+1));
4897 EdBeta = (((1/modelPar_Bf)-(modelPar_kc*(mm-1)))/((modelPar_kc*(mm-1))+1));
4902 if ((modelPar_kBeta>0.0))
4904 if (((modelPar_Bf-(modelPar_kBeta*Tex))>1e-6))
4906 EdBeta = (1/(modelPar_Bf-(modelPar_kBeta*Tex)));
4915 EdBeta = (1/modelPar_Bf);
4918 Ib0 = (Ic0a*EdBeta);
4919 if ((modelPar_BVebo>0))
4921 Ib1 = (Ib0-AnalogFunctions::diode<AdmsSensFadType>(((-modelPar_BVebo)-vbei),modelPar_Jsf,0.0,1.0,Area,0.0,0.0));
4927 if (((modelPar_Jse>0.0)&&(modelPar_ne>0)))
4929 Ibdx = AnalogFunctions::diode<AdmsSensFadType>(vxe,modelPar_Jse,modelPar_Vgb,modelPar_ne,Area,Tj,modelPar_Tnom);
4935 if (((modelPar_Jsee>0.0)&&(modelPar_nee>0)))
4937 Ibdxx = AnalogFunctions::diode<AdmsSensFadType>(vxxe,modelPar_Jsee,modelPar_Vgbb,modelPar_nee,Area,Tj,modelPar_Tnom);
4941 Ibdxx = (vxxe*1e-12);
4943 if (((modelPar_Jsc>0.0)&&(modelPar_nc>0)))
4945 Icdx = AnalogFunctions::diode<AdmsSensFadType>(vxc,modelPar_Jsc,modelPar_Vgc,modelPar_nc,Area,Tj,modelPar_Tnom);
4951 Ipdiss = ((((Ic1*vcei)+(Ib1*vbei))+(Ib2*vbci))+(Ibx*vbcx));
4956 I00 = (modelPar_J0*Area);
4957 if (((modelPar_XCjc<1.0)&&(modelPar_XCjc>0.0)))
4959 if (((modelPar_J0<=0.0)||(Ic0<0.0)))
4961 qb2med = ((modelPar_XCjc*AnalogFunctions::charge<AdmsSensFadType>(vbci,(modelPar_Cjc-modelPar_Cmin),modelPar_Vjc,modelPar_mjc,Area))+(((modelPar_XCjc*Area)*modelPar_Cmin)*vbci));
4966 qb2med = (((modelPar_XCjc*(1.0-tanh(xix)))*(AnalogFunctions::charge<AdmsSensFadType>(vbci,(modelPar_Cjc-modelPar_Cmin),modelPar_Vjc,modelPar_mjc,Area)+((((1.0-modelPar_XJ0)*Area)*modelPar_Cmin)*vbci)))+((((modelPar_XJ0*modelPar_XCjc)*Area)*modelPar_Cmin)*vbci));
4971 if (((modelPar_J0<0.0)||(Ic0<0.0)))
4973 qb2med = (AnalogFunctions::charge<AdmsSensFadType>(vbci,(modelPar_Cjc-modelPar_Cmin),modelPar_Vjc,modelPar_mjc,Area)+((Area*modelPar_Cmin)*vbci));
4978 qb2med = (((1.0-tanh(xix))*(AnalogFunctions::charge<AdmsSensFadType>(vbci,(modelPar_Cjc-modelPar_Cmin),modelPar_Vjc,modelPar_mjc,Area)+((((1.0-modelPar_XJ0)*Area)*modelPar_Cmin)*vbci)))+(((modelPar_XJ0*Area)*modelPar_Cmin)*vbci));
4981 if (((modelPar_XCjc<1.0)&&(modelPar_XCjc>0.0)))
4983 qb1 = (((1.0-modelPar_XCjc)*AnalogFunctions::charge<AdmsSensFadType>(vbcx,(modelPar_Cjc-modelPar_Cmin),modelPar_Vjc,modelPar_mjc,Area))+((((1.0-modelPar_XCjc)*Area)*modelPar_Cmin)*vbcx));
4989 qbtr = (modelPar_Tr*Ic1r);
4990 qbtra = (modelPar_Trx*Ibx);
4991 qb2 = (qb2med+qbtr);
4992 if (((modelPar_Jk>0.0)&&(modelPar_Rci0>0.0)))
4994 if ((modelPar_RJk>0.0))
4996 Vlim = ((modelPar_Jk*modelPar_Rci0)/(1.0-(modelPar_Rci0/modelPar_RJk)));
4997 InvVpt = ((1.0-(modelPar_Rci0/modelPar_RJk))/(modelPar_Jk*modelPar_RJk));
5001 Vlim = ((modelPar_Jk*modelPar_Rci0)/1.016);
5005 if (((((modelPar_Thcs>0.0)&&(modelPar_Ahc>0.0))&&(modelPar_Jk>0.0))&&(Ic0>0.0)))
5007 RCIO = (modelPar_Rci0/Area);
5008 AHC = (Area*modelPar_Ahc);
5009 if (((modelPar_Rci0<modelPar_RJk)||(modelPar_RJk<=0.0)))
5011 Ih = (1.0-(AnalogFunctions::ICK<AdmsSensFadType>(vcei,RCIO,Vlim,InvVpt,modelPar_Vces)/Ic0));
5015 Ih = (1.0-(AnalogFunctions::Vceff<AdmsSensFadType>(vcei,modelPar_Vces)/(RCIO*Ic0)));
5017 Wh = ((Ih+sqrt(((Ih*Ih)+AHC)))/(1.0+sqrt((1.0+AHC))));
5018 xtff = ((modelPar_Thcs*Ic0)*(Wh*Wh));
5024 qbtf = ((modelPar_Tf+(modelPar_Tft*Tex))*Ic0);
5025 qbe = ((xtff+qbtf)+AnalogFunctions::charge<AdmsSensFadType>(vbei,modelPar_Cje,modelPar_Vje,modelPar_mje,Area));
5027 staticContributions[admsNodeID_bi] += (modelPar_dtype*Ibx);
5028 staticContributions[admsNodeID_ci] -= (modelPar_dtype*Ibx);
5030 dynamicContributions[admsNodeID_bi] += (modelPar_dtype*((qb1+qbtra)));
5031 dynamicContributions[admsNodeID_ci] -= (modelPar_dtype*((qb1+qbtra)));
5033 staticContributions[admsNodeID_bii] += (modelPar_dtype*Ib2);
5034 staticContributions[admsNodeID_ci] -= (modelPar_dtype*Ib2);
5036 dynamicContributions[admsNodeID_bii] += (modelPar_dtype*(qb2));
5037 dynamicContributions[admsNodeID_ci] -= (modelPar_dtype*(qb2));
5039 staticContributions[admsNodeID_bii] += (modelPar_dtype*Ib1);
5040 staticContributions[admsNodeID_ei] -= (modelPar_dtype*Ib1);
5042 dynamicContributions[admsNodeID_bii] += (modelPar_dtype*(qbe));
5043 dynamicContributions[admsNodeID_ei] -= (modelPar_dtype*(qbe));
5045 staticContributions[admsNodeID_ci] += (modelPar_dtype*Ic1);
5046 staticContributions[admsNodeID_ei] -= (modelPar_dtype*Ic1);
5048 staticContributions[admsNodeID_ex] += (modelPar_dtype*Ibdx);
5049 staticContributions[admsNodeID_ei] -= (modelPar_dtype*Ibdx);
5051 staticContributions[admsNodeID_exx] += (modelPar_dtype*Ibdxx);
5052 staticContributions[admsNodeID_ei] -= (modelPar_dtype*Ibdxx);
5054 staticContributions[admsNodeID_cx] += (modelPar_dtype*Icdx);
5055 staticContributions[admsNodeID_ci] -= (modelPar_dtype*Icdx);
5057 staticContributions[admsBRA_ID_b_bi] += ((probeVars[admsProbeID_I_b_bi])*(modelPar_Rb/instancePar_N));
5059 dynamicContributions[admsBRA_ID_b_bi] += (((probeVars[admsProbeID_I_b_bi])*modelPar_Lb));
5061 staticContributions[admsBRA_ID_e_ei] += ((probeVars[admsProbeID_I_e_ei])*(modelPar_Re/instancePar_N));
5063 dynamicContributions[admsBRA_ID_e_ei] += (((probeVars[admsProbeID_I_e_ei])*modelPar_Le));
5065 staticContributions[admsBRA_ID_c_ci] += ((probeVars[admsProbeID_I_c_ci])*(modelPar_Rc/instancePar_N));
5067 dynamicContributions[admsBRA_ID_c_ci] += (((probeVars[admsProbeID_I_c_ci])*modelPar_Lc));
5069 staticContributions[admsNodeID_bii] += ((probeVars[admsProbeID_V_bii_bi])/(modelPar_Rb2/instancePar_N));
5070 staticContributions[admsNodeID_bi] -= ((probeVars[admsProbeID_V_bii_bi])/(modelPar_Rb2/instancePar_N));
5071 if (((modelPar_Jse>0.0)&&(modelPar_ne>0)))
5074 staticContributions[admsNodeID_ex] += ((probeVars[admsProbeID_V_ex_bii])/(modelPar_Rbxx/instancePar_N));
5075 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_ex_bii])/(modelPar_Rbxx/instancePar_N));
5080 staticContributions[admsNodeID_ex] += ((probeVars[admsProbeID_V_ex_bii])*1e-12);
5081 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_ex_bii])*1e-12);
5083 if (((modelPar_Jsee>0.0)&&(modelPar_nee>0)))
5086 staticContributions[admsNodeID_exx] += ((probeVars[admsProbeID_V_exx_bii])/(modelPar_Rbbxx/instancePar_N));
5087 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_exx_bii])/(modelPar_Rbbxx/instancePar_N));
5092 staticContributions[admsNodeID_exx] += ((probeVars[admsProbeID_V_exx_bii])*1e-12);
5093 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_exx_bii])*1e-12);
5095 if (((modelPar_Jsc>0.0)&&(modelPar_nc>0)))
5098 staticContributions[admsNodeID_cx] += ((probeVars[admsProbeID_V_cx_bii])/(modelPar_Rcxx/instancePar_N));
5099 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_cx_bii])/(modelPar_Rcxx/instancePar_N));
5104 staticContributions[admsNodeID_cx] += ((probeVars[admsProbeID_V_cx_bii])*1e-12);
5105 staticContributions[admsNodeID_bii] -= ((probeVars[admsProbeID_V_cx_bii])*1e-12);
5108 dynamicContributions[admsNodeID_b] += ((modelPar_Cpb*(probeVars[admsProbeID_V_b_GND])));
5110 dynamicContributions[admsNodeID_c] += ((modelPar_Cpc*(probeVars[admsProbeID_V_c_GND])));
5112 dynamicContributions[admsNodeID_b] += ((modelPar_Cq*(probeVars[admsProbeID_V_b_c])));
5113 dynamicContributions[admsNodeID_c] -= ((modelPar_Cq*(probeVars[admsProbeID_V_b_c])));
5115 staticContributions[admsNodeID_ti] += (-Ipdiss);
5116 if ((modelPar_Rth>0))
5119 staticContributions[admsNodeID_t] += ((probeVars[admsProbeID_V_t_ti])/modelPar_Rth);
5120 staticContributions[admsNodeID_ti] -= ((probeVars[admsProbeID_V_t_ti])/modelPar_Rth);
5122 dynamicContributions[admsNodeID_t] += (modelPar_Cth*((probeVars[admsProbeID_V_t_ti])));
5123 dynamicContributions[admsNodeID_ti] -= (modelPar_Cth*((probeVars[admsProbeID_V_t_ti])));
5128 staticContributions[admsNodeID_t] += ((probeVars[admsProbeID_V_t_ti])*1e3);
5129 staticContributions[admsNodeID_ti] -= ((probeVars[admsProbeID_V_t_ti])*1e3);
5157 void InstanceSensitivity::operator()
5159 const ParameterBase &entity,
5160 const std::string &name,
5161 std::vector<double> & dfdp,
5162 std::vector<double> & dqdp,
5163 std::vector<double> & dbdp,
5164 std::vector<int> & Findices,
5165 std::vector<int> & Qindices,
5166 std::vector<int> & Bindices
5169 const ParameterBase * e1 = &entity;
5170 const Instance & in = *(
dynamic_cast<const Instance *
> (e1));
5171 const Model & mod =in.model_;
5175 Findices.resize(12+3);
5176 Qindices.resize(12+3);
5178 std::vector <double> probeVars(19);
5179 std::vector <AdmsSensFadType> staticContributions(12+3);
5180 std::vector <AdmsSensFadType> dynamicContributions(12+3);
5184 for (
int i=0; i < 12+3 ; ++i)
5186 staticContributions[i]=0;
5187 dynamicContributions[i]=0;
5193 bool modelPar_given_Temp=mod.given(
"Temp");
5195 bool modelPar_given_Rth=mod.given(
"Rth");
5197 bool modelPar_given_Cth=mod.given(
"Cth");
5199 bool modelPar_given_L=mod.given(
"L");
5201 bool modelPar_given_W=mod.given(
"W");
5203 bool modelPar_given_Jsf=mod.given(
"Jsf");
5205 bool modelPar_given_nf=mod.given(
"nf");
5207 bool modelPar_given_Vg=mod.given(
"Vg");
5209 bool modelPar_given_Jse=mod.given(
"Jse");
5211 bool modelPar_given_ne=mod.given(
"ne");
5213 bool modelPar_given_Rbxx=mod.given(
"Rbxx");
5215 bool modelPar_given_Vgb=mod.given(
"Vgb");
5217 bool modelPar_given_Jsee=mod.given(
"Jsee");
5219 bool modelPar_given_nee=mod.given(
"nee");
5221 bool modelPar_given_Rbbxx=mod.given(
"Rbbxx");
5223 bool modelPar_given_Vgbb=mod.given(
"Vgbb");
5225 bool modelPar_given_Jsr=mod.given(
"Jsr");
5227 bool modelPar_given_nr=mod.given(
"nr");
5229 bool modelPar_given_Vgr=mod.given(
"Vgr");
5231 bool modelPar_given_XCjc=mod.given(
"XCjc");
5233 bool modelPar_given_Jsc=mod.given(
"Jsc");
5235 bool modelPar_given_nc=mod.given(
"nc");
5237 bool modelPar_given_Rcxx=mod.given(
"Rcxx");
5239 bool modelPar_given_Vgc=mod.given(
"Vgc");
5241 bool modelPar_given_Bf=mod.given(
"Bf");
5243 bool modelPar_given_kBeta=mod.given(
"kBeta");
5245 bool modelPar_given_Br=mod.given(
"Br");
5247 bool modelPar_given_VAF=mod.given(
"VAF");
5249 bool modelPar_given_VAR=mod.given(
"VAR");
5251 bool modelPar_given_IKF=mod.given(
"IKF");
5253 bool modelPar_given_IKR=mod.given(
"IKR");
5255 bool modelPar_given_Mc=mod.given(
"Mc");
5257 bool modelPar_given_BVceo=mod.given(
"BVceo");
5259 bool modelPar_given_kc=mod.given(
"kc");
5261 bool modelPar_given_BVebo=mod.given(
"BVebo");
5263 bool modelPar_given_Tr=mod.given(
"Tr");
5265 bool modelPar_given_Trx=mod.given(
"Trx");
5267 bool modelPar_given_Tf=mod.given(
"Tf");
5269 bool modelPar_given_Tft=mod.given(
"Tft");
5271 bool modelPar_given_Thcs=mod.given(
"Thcs");
5273 bool modelPar_given_Ahc=mod.given(
"Ahc");
5275 bool modelPar_given_Cje=mod.given(
"Cje");
5277 bool modelPar_given_mje=mod.given(
"mje");
5279 bool modelPar_given_Vje=mod.given(
"Vje");
5281 bool modelPar_given_Cjc=mod.given(
"Cjc");
5283 bool modelPar_given_mjc=mod.given(
"mjc");
5285 bool modelPar_given_Vjc=mod.given(
"Vjc");
5287 bool modelPar_given_kjc=mod.given(
"kjc");
5289 bool modelPar_given_Cmin=mod.given(
"Cmin");
5291 bool modelPar_given_J0=mod.given(
"J0");
5293 bool modelPar_given_XJ0=mod.given(
"XJ0");
5295 bool modelPar_given_Rci0=mod.given(
"Rci0");
5297 bool modelPar_given_Jk=mod.given(
"Jk");
5299 bool modelPar_given_RJk=mod.given(
"RJk");
5301 bool modelPar_given_Vces=mod.given(
"Vces");
5303 bool modelPar_given_Rc=mod.given(
"Rc");
5305 bool modelPar_given_Re=mod.given(
"Re");
5307 bool modelPar_given_Rb=mod.given(
"Rb");
5309 bool modelPar_given_Rb2=mod.given(
"Rb2");
5311 bool modelPar_given_Lc=mod.given(
"Lc");
5313 bool modelPar_given_Le=mod.given(
"Le");
5315 bool modelPar_given_Lb=mod.given(
"Lb");
5317 bool modelPar_given_Cq=mod.given(
"Cq");
5319 bool modelPar_given_Cpb=mod.given(
"Cpb");
5321 bool modelPar_given_Cpc=mod.given(
"Cpc");
5323 bool modelPar_given_Tnom=mod.given(
"Tnom");
5330 int modelPar_Mode=mod.Mode;
5331 bool modelPar_given_Mode=mod.given(
"Mode");
5332 int modelPar_Noise=mod.Noise;
5333 bool modelPar_given_Noise=mod.given(
"Noise");
5334 int modelPar_Debug=mod.Debug;
5335 bool modelPar_given_Debug=mod.given(
"Debug");
5336 int modelPar_DebugPlus=mod.DebugPlus;
5337 bool modelPar_given_DebugPlus=mod.given(
"DebugPlus");
5338 int modelPar_N=mod.N;
5339 bool modelPar_given_N=mod.given(
"N");
5340 int modelPar_dtype=mod.dtype;
5348 unordered_map <std::string,AdmsSensFadType*,HashNoCase,EqualNoCase> inParamMap;
5352 bool instancePar_given_Temp=in.given(
"Temp");
5353 inParamMap[
"Temp"] = &instancePar_Temp;
5355 bool instancePar_given_L=in.given(
"L");
5356 inParamMap[
"L"] = &instancePar_L;
5358 bool instancePar_given_W=in.given(
"W");
5359 inParamMap[
"W"] = &instancePar_W;
5367 int instancePar_N=in.N;
5368 bool instancePar_given_N=in.given(
"N");
5375 inParamMap[name]->diff(0,1);
5392 Linear::Vector * solVectorPtr = in.extData.nextSolVectorPtr;
5396 probeVars[in.admsProbeID_V_t_ti] = (*solVectorPtr)[in.li_t] - (*solVectorPtr)[in.li_ti];
5397 probeVars[in.admsProbeID_V_b_c] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_c];
5398 probeVars[in.admsProbeID_V_c_GND] = (*solVectorPtr)[in.li_c];
5399 probeVars[in.admsProbeID_V_b_GND] = (*solVectorPtr)[in.li_b];
5400 probeVars[in.admsProbeID_V_cx_bii] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_bii];
5401 probeVars[in.admsProbeID_V_exx_bii] = (*solVectorPtr)[in.li_exx] - (*solVectorPtr)[in.li_bii];
5402 probeVars[in.admsProbeID_V_ex_bii] = (*solVectorPtr)[in.li_ex] - (*solVectorPtr)[in.li_bii];
5403 probeVars[in.admsProbeID_V_bii_bi] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_bi];
5404 probeVars[in.admsProbeID_I_c_ci] = (*solVectorPtr)[in.li_BRA_c_ci];
5405 probeVars[in.admsProbeID_I_e_ei] = (*solVectorPtr)[in.li_BRA_e_ei];
5406 probeVars[in.admsProbeID_I_b_bi] = (*solVectorPtr)[in.li_BRA_b_bi];
5407 probeVars[in.admsProbeID_V_ti_GND] = (*solVectorPtr)[in.li_ti];
5408 probeVars[in.admsProbeID_V_ci_ei] = (*solVectorPtr)[in.li_ci] - (*solVectorPtr)[in.li_ei];
5409 probeVars[in.admsProbeID_V_exx_ei] = (*solVectorPtr)[in.li_exx] - (*solVectorPtr)[in.li_ei];
5410 probeVars[in.admsProbeID_V_cx_ci] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_ci];
5411 probeVars[in.admsProbeID_V_ex_ei] = (*solVectorPtr)[in.li_ex] - (*solVectorPtr)[in.li_ei];
5412 probeVars[in.admsProbeID_V_bii_ei] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_ei];
5413 probeVars[in.admsProbeID_V_bii_ci] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_ci];
5414 probeVars[in.admsProbeID_V_bi_ci] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ci];
5417 probeVars[in.admsProbeID_V_bii_ei] *= modelPar_dtype;
5418 probeVars[in.admsProbeID_V_bii_ci] *= modelPar_dtype;
5419 probeVars[in.admsProbeID_V_bi_ci] *= modelPar_dtype;
5424 evaluateModelEquations(
5427 in.admsProbeID_V_t_ti,
5428 in.admsProbeID_V_b_c,
5429 in.admsProbeID_V_c_GND,
5430 in.admsProbeID_V_b_GND,
5431 in.admsProbeID_V_cx_bii,
5432 in.admsProbeID_V_exx_bii,
5433 in.admsProbeID_V_ex_bii,
5434 in.admsProbeID_V_bii_bi,
5435 in.admsProbeID_I_c_ci,
5436 in.admsProbeID_I_e_ei,
5437 in.admsProbeID_I_b_bi,
5438 in.admsProbeID_V_ti_GND,
5439 in.admsProbeID_V_ci_ei,
5440 in.admsProbeID_V_exx_ei,
5441 in.admsProbeID_V_cx_ci,
5442 in.admsProbeID_V_ex_ei,
5443 in.admsProbeID_V_bii_ei,
5444 in.admsProbeID_V_bii_ci,
5445 in.admsProbeID_V_bi_ci,
5466 instancePar_given_Temp,
5468 instancePar_given_L,
5470 instancePar_given_W,
5473 instancePar_given_N,
5477 modelPar_given_Temp,
5497 modelPar_given_Rbxx,
5501 modelPar_given_Jsee,
5505 modelPar_given_Rbbxx,
5507 modelPar_given_Vgbb,
5515 modelPar_given_XCjc,
5521 modelPar_given_Rcxx,
5527 modelPar_given_kBeta,
5541 modelPar_given_BVceo,
5545 modelPar_given_BVebo,
5555 modelPar_given_Thcs,
5573 modelPar_given_Cmin,
5579 modelPar_given_Rci0,
5585 modelPar_given_Vces,
5607 modelPar_given_Tnom,
5610 modelPar_given_Mode,
5612 modelPar_given_Noise,
5614 modelPar_given_Debug,
5616 modelPar_given_DebugPlus,
5622 in.getDeviceOptions().gmin,
5623 staticContributions,
5624 dynamicContributions,
5630 dfdp[in.admsNodeID_c] += staticContributions[in.admsNodeID_c].dx(0);
5631 dqdp[in.admsNodeID_c] += dynamicContributions[in.admsNodeID_c].dx(0);
5632 Findices[in.admsNodeID_c] = in.li_c;
5633 Qindices[in.admsNodeID_c] = in.li_c;
5634 dfdp[in.admsNodeID_b] += staticContributions[in.admsNodeID_b].dx(0);
5635 dqdp[in.admsNodeID_b] += dynamicContributions[in.admsNodeID_b].dx(0);
5636 Findices[in.admsNodeID_b] = in.li_b;
5637 Qindices[in.admsNodeID_b] = in.li_b;
5638 dfdp[in.admsNodeID_e] += staticContributions[in.admsNodeID_e].dx(0);
5639 dqdp[in.admsNodeID_e] += dynamicContributions[in.admsNodeID_e].dx(0);
5640 Findices[in.admsNodeID_e] = in.li_e;
5641 Qindices[in.admsNodeID_e] = in.li_e;
5642 dfdp[in.admsNodeID_t] += staticContributions[in.admsNodeID_t].dx(0);
5643 dqdp[in.admsNodeID_t] += dynamicContributions[in.admsNodeID_t].dx(0);
5644 Findices[in.admsNodeID_t] = in.li_t;
5645 Qindices[in.admsNodeID_t] = in.li_t;
5646 dfdp[in.admsNodeID_ei] += staticContributions[in.admsNodeID_ei].dx(0);
5647 dqdp[in.admsNodeID_ei] += dynamicContributions[in.admsNodeID_ei].dx(0);
5648 Findices[in.admsNodeID_ei] = in.li_ei;
5649 Qindices[in.admsNodeID_ei] = in.li_ei;
5650 dfdp[in.admsNodeID_bi] += staticContributions[in.admsNodeID_bi].dx(0);
5651 dqdp[in.admsNodeID_bi] += dynamicContributions[in.admsNodeID_bi].dx(0);
5652 Findices[in.admsNodeID_bi] = in.li_bi;
5653 Qindices[in.admsNodeID_bi] = in.li_bi;
5654 dfdp[in.admsNodeID_bii] += staticContributions[in.admsNodeID_bii].dx(0);
5655 dqdp[in.admsNodeID_bii] += dynamicContributions[in.admsNodeID_bii].dx(0);
5656 Findices[in.admsNodeID_bii] = in.li_bii;
5657 Qindices[in.admsNodeID_bii] = in.li_bii;
5658 dfdp[in.admsNodeID_ci] += staticContributions[in.admsNodeID_ci].dx(0);
5659 dqdp[in.admsNodeID_ci] += dynamicContributions[in.admsNodeID_ci].dx(0);
5660 Findices[in.admsNodeID_ci] = in.li_ci;
5661 Qindices[in.admsNodeID_ci] = in.li_ci;
5662 dfdp[in.admsNodeID_ti] += staticContributions[in.admsNodeID_ti].dx(0);
5663 dqdp[in.admsNodeID_ti] += dynamicContributions[in.admsNodeID_ti].dx(0);
5664 Findices[in.admsNodeID_ti] = in.li_ti;
5665 Qindices[in.admsNodeID_ti] = in.li_ti;
5666 dfdp[in.admsNodeID_ex] += staticContributions[in.admsNodeID_ex].dx(0);
5667 dqdp[in.admsNodeID_ex] += dynamicContributions[in.admsNodeID_ex].dx(0);
5668 Findices[in.admsNodeID_ex] = in.li_ex;
5669 Qindices[in.admsNodeID_ex] = in.li_ex;
5670 dfdp[in.admsNodeID_exx] += staticContributions[in.admsNodeID_exx].dx(0);
5671 dqdp[in.admsNodeID_exx] += dynamicContributions[in.admsNodeID_exx].dx(0);
5672 Findices[in.admsNodeID_exx] = in.li_exx;
5673 Qindices[in.admsNodeID_exx] = in.li_exx;
5674 dfdp[in.admsNodeID_cx] += staticContributions[in.admsNodeID_cx].dx(0);
5675 dqdp[in.admsNodeID_cx] += dynamicContributions[in.admsNodeID_cx].dx(0);
5676 Findices[in.admsNodeID_cx] = in.li_cx;
5677 Qindices[in.admsNodeID_cx] = in.li_cx;
5678 dfdp[in.admsBRA_ID_b_bi] += staticContributions[in.admsBRA_ID_b_bi].dx(0);
5679 dqdp[in.admsBRA_ID_b_bi] += dynamicContributions[in.admsBRA_ID_b_bi].dx(0);
5680 Findices[in.admsBRA_ID_b_bi] = in.li_BRA_b_bi;
5681 Qindices[in.admsBRA_ID_b_bi] = in.li_BRA_b_bi;
5682 dfdp[in.admsBRA_ID_e_ei] += staticContributions[in.admsBRA_ID_e_ei].dx(0);
5683 dqdp[in.admsBRA_ID_e_ei] += dynamicContributions[in.admsBRA_ID_e_ei].dx(0);
5684 Findices[in.admsBRA_ID_e_ei] = in.li_BRA_e_ei;
5685 Qindices[in.admsBRA_ID_e_ei] = in.li_BRA_e_ei;
5686 dfdp[in.admsBRA_ID_c_ci] += staticContributions[in.admsBRA_ID_c_ci].dx(0);
5687 dqdp[in.admsBRA_ID_c_ci] += dynamicContributions[in.admsBRA_ID_c_ci].dx(0);
5688 Findices[in.admsBRA_ID_c_ci] = in.li_BRA_c_ci;
5689 Qindices[in.admsBRA_ID_c_ci] = in.li_BRA_c_ci;
5716 void ModelSensitivity::operator()
5718 const ParameterBase &entity,
5719 const std::string &name,
5720 std::vector<double> & dfdp,
5721 std::vector<double> & dqdp,
5722 std::vector<double> & dbdp,
5723 std::vector<int> & Findices,
5724 std::vector<int> & Qindices,
5725 std::vector<int> & Bindices
5728 const ParameterBase * e1 = &entity;
5729 const Model & mod = *(
dynamic_cast<const Model *
> (e1));
5730 int sizeInstance = mod.instanceContainer.size();
5732 dfdp.resize((12+3)*sizeInstance);
5733 dqdp.resize((12+3)*sizeInstance);
5734 Findices.resize((12+3)*sizeInstance);
5735 Qindices.resize((12+3)*sizeInstance);
5737 std::vector <double> probeVars(19);
5738 std::vector <AdmsSensFadType> staticContributions(12+3);
5739 std::vector <AdmsSensFadType> dynamicContributions(12+3);
5746 unordered_map <std::string,AdmsSensFadType*,HashNoCase,EqualNoCase> modParamMap;
5750 bool modelPar_given_Temp=mod.given(
"Temp");
5751 modParamMap[
"Temp"] = &modelPar_Temp;
5753 bool modelPar_given_Rth=mod.given(
"Rth");
5754 modParamMap[
"Rth"] = &modelPar_Rth;
5756 bool modelPar_given_Cth=mod.given(
"Cth");
5757 modParamMap[
"Cth"] = &modelPar_Cth;
5759 bool modelPar_given_L=mod.given(
"L");
5760 modParamMap[
"L"] = &modelPar_L;
5762 bool modelPar_given_W=mod.given(
"W");
5763 modParamMap[
"W"] = &modelPar_W;
5765 bool modelPar_given_Jsf=mod.given(
"Jsf");
5766 modParamMap[
"Jsf"] = &modelPar_Jsf;
5768 bool modelPar_given_nf=mod.given(
"nf");
5769 modParamMap[
"nf"] = &modelPar_nf;
5771 bool modelPar_given_Vg=mod.given(
"Vg");
5772 modParamMap[
"Vg"] = &modelPar_Vg;
5774 bool modelPar_given_Jse=mod.given(
"Jse");
5775 modParamMap[
"Jse"] = &modelPar_Jse;
5777 bool modelPar_given_ne=mod.given(
"ne");
5778 modParamMap[
"ne"] = &modelPar_ne;
5780 bool modelPar_given_Rbxx=mod.given(
"Rbxx");
5781 modParamMap[
"Rbxx"] = &modelPar_Rbxx;
5783 bool modelPar_given_Vgb=mod.given(
"Vgb");
5784 modParamMap[
"Vgb"] = &modelPar_Vgb;
5786 bool modelPar_given_Jsee=mod.given(
"Jsee");
5787 modParamMap[
"Jsee"] = &modelPar_Jsee;
5789 bool modelPar_given_nee=mod.given(
"nee");
5790 modParamMap[
"nee"] = &modelPar_nee;
5792 bool modelPar_given_Rbbxx=mod.given(
"Rbbxx");
5793 modParamMap[
"Rbbxx"] = &modelPar_Rbbxx;
5795 bool modelPar_given_Vgbb=mod.given(
"Vgbb");
5796 modParamMap[
"Vgbb"] = &modelPar_Vgbb;
5798 bool modelPar_given_Jsr=mod.given(
"Jsr");
5799 modParamMap[
"Jsr"] = &modelPar_Jsr;
5801 bool modelPar_given_nr=mod.given(
"nr");
5802 modParamMap[
"nr"] = &modelPar_nr;
5804 bool modelPar_given_Vgr=mod.given(
"Vgr");
5805 modParamMap[
"Vgr"] = &modelPar_Vgr;
5807 bool modelPar_given_XCjc=mod.given(
"XCjc");
5808 modParamMap[
"XCjc"] = &modelPar_XCjc;
5810 bool modelPar_given_Jsc=mod.given(
"Jsc");
5811 modParamMap[
"Jsc"] = &modelPar_Jsc;
5813 bool modelPar_given_nc=mod.given(
"nc");
5814 modParamMap[
"nc"] = &modelPar_nc;
5816 bool modelPar_given_Rcxx=mod.given(
"Rcxx");
5817 modParamMap[
"Rcxx"] = &modelPar_Rcxx;
5819 bool modelPar_given_Vgc=mod.given(
"Vgc");
5820 modParamMap[
"Vgc"] = &modelPar_Vgc;
5822 bool modelPar_given_Bf=mod.given(
"Bf");
5823 modParamMap[
"Bf"] = &modelPar_Bf;
5825 bool modelPar_given_kBeta=mod.given(
"kBeta");
5826 modParamMap[
"kBeta"] = &modelPar_kBeta;
5828 bool modelPar_given_Br=mod.given(
"Br");
5829 modParamMap[
"Br"] = &modelPar_Br;
5831 bool modelPar_given_VAF=mod.given(
"VAF");
5832 modParamMap[
"VAF"] = &modelPar_VAF;
5834 bool modelPar_given_VAR=mod.given(
"VAR");
5835 modParamMap[
"VAR"] = &modelPar_VAR;
5837 bool modelPar_given_IKF=mod.given(
"IKF");
5838 modParamMap[
"IKF"] = &modelPar_IKF;
5840 bool modelPar_given_IKR=mod.given(
"IKR");
5841 modParamMap[
"IKR"] = &modelPar_IKR;
5843 bool modelPar_given_Mc=mod.given(
"Mc");
5844 modParamMap[
"Mc"] = &modelPar_Mc;
5846 bool modelPar_given_BVceo=mod.given(
"BVceo");
5847 modParamMap[
"BVceo"] = &modelPar_BVceo;
5849 bool modelPar_given_kc=mod.given(
"kc");
5850 modParamMap[
"kc"] = &modelPar_kc;
5852 bool modelPar_given_BVebo=mod.given(
"BVebo");
5853 modParamMap[
"BVebo"] = &modelPar_BVebo;
5855 bool modelPar_given_Tr=mod.given(
"Tr");
5856 modParamMap[
"Tr"] = &modelPar_Tr;
5858 bool modelPar_given_Trx=mod.given(
"Trx");
5859 modParamMap[
"Trx"] = &modelPar_Trx;
5861 bool modelPar_given_Tf=mod.given(
"Tf");
5862 modParamMap[
"Tf"] = &modelPar_Tf;
5864 bool modelPar_given_Tft=mod.given(
"Tft");
5865 modParamMap[
"Tft"] = &modelPar_Tft;
5867 bool modelPar_given_Thcs=mod.given(
"Thcs");
5868 modParamMap[
"Thcs"] = &modelPar_Thcs;
5870 bool modelPar_given_Ahc=mod.given(
"Ahc");
5871 modParamMap[
"Ahc"] = &modelPar_Ahc;
5873 bool modelPar_given_Cje=mod.given(
"Cje");
5874 modParamMap[
"Cje"] = &modelPar_Cje;
5876 bool modelPar_given_mje=mod.given(
"mje");
5877 modParamMap[
"mje"] = &modelPar_mje;
5879 bool modelPar_given_Vje=mod.given(
"Vje");
5880 modParamMap[
"Vje"] = &modelPar_Vje;
5882 bool modelPar_given_Cjc=mod.given(
"Cjc");
5883 modParamMap[
"Cjc"] = &modelPar_Cjc;
5885 bool modelPar_given_mjc=mod.given(
"mjc");
5886 modParamMap[
"mjc"] = &modelPar_mjc;
5888 bool modelPar_given_Vjc=mod.given(
"Vjc");
5889 modParamMap[
"Vjc"] = &modelPar_Vjc;
5891 bool modelPar_given_kjc=mod.given(
"kjc");
5892 modParamMap[
"kjc"] = &modelPar_kjc;
5894 bool modelPar_given_Cmin=mod.given(
"Cmin");
5895 modParamMap[
"Cmin"] = &modelPar_Cmin;
5897 bool modelPar_given_J0=mod.given(
"J0");
5898 modParamMap[
"J0"] = &modelPar_J0;
5900 bool modelPar_given_XJ0=mod.given(
"XJ0");
5901 modParamMap[
"XJ0"] = &modelPar_XJ0;
5903 bool modelPar_given_Rci0=mod.given(
"Rci0");
5904 modParamMap[
"Rci0"] = &modelPar_Rci0;
5906 bool modelPar_given_Jk=mod.given(
"Jk");
5907 modParamMap[
"Jk"] = &modelPar_Jk;
5909 bool modelPar_given_RJk=mod.given(
"RJk");
5910 modParamMap[
"RJk"] = &modelPar_RJk;
5912 bool modelPar_given_Vces=mod.given(
"Vces");
5913 modParamMap[
"Vces"] = &modelPar_Vces;
5915 bool modelPar_given_Rc=mod.given(
"Rc");
5916 modParamMap[
"Rc"] = &modelPar_Rc;
5918 bool modelPar_given_Re=mod.given(
"Re");
5919 modParamMap[
"Re"] = &modelPar_Re;
5921 bool modelPar_given_Rb=mod.given(
"Rb");
5922 modParamMap[
"Rb"] = &modelPar_Rb;
5924 bool modelPar_given_Rb2=mod.given(
"Rb2");
5925 modParamMap[
"Rb2"] = &modelPar_Rb2;
5927 bool modelPar_given_Lc=mod.given(
"Lc");
5928 modParamMap[
"Lc"] = &modelPar_Lc;
5930 bool modelPar_given_Le=mod.given(
"Le");
5931 modParamMap[
"Le"] = &modelPar_Le;
5933 bool modelPar_given_Lb=mod.given(
"Lb");
5934 modParamMap[
"Lb"] = &modelPar_Lb;
5936 bool modelPar_given_Cq=mod.given(
"Cq");
5937 modParamMap[
"Cq"] = &modelPar_Cq;
5939 bool modelPar_given_Cpb=mod.given(
"Cpb");
5940 modParamMap[
"Cpb"] = &modelPar_Cpb;
5942 bool modelPar_given_Cpc=mod.given(
"Cpc");
5943 modParamMap[
"Cpc"] = &modelPar_Cpc;
5945 bool modelPar_given_Tnom=mod.given(
"Tnom");
5946 modParamMap[
"Tnom"] = &modelPar_Tnom;
5953 int modelPar_Mode=mod.Mode;
5954 bool modelPar_given_Mode=mod.given(
"Mode");
5955 int modelPar_Noise=mod.Noise;
5956 bool modelPar_given_Noise=mod.given(
"Noise");
5957 int modelPar_Debug=mod.Debug;
5958 bool modelPar_given_Debug=mod.given(
"Debug");
5959 int modelPar_DebugPlus=mod.DebugPlus;
5960 bool modelPar_given_DebugPlus=mod.given(
"DebugPlus");
5961 int modelPar_N=mod.N;
5962 bool modelPar_given_N=mod.given(
"N");
5963 int modelPar_dtype=mod.dtype;
5970 modParamMap[name]->diff(0,1);
5982 for (std::vector<Instance*>::const_iterator in_it=mod.instanceContainer.begin(); in_it != mod.instanceContainer.end(); ++in_it,++inst)
5985 Instance & in=*(*in_it);
5987 for (
int i=0; i < 12+3 ; ++i)
5989 staticContributions[i]=0;
5990 dynamicContributions[i]=0;
5998 bool instancePar_given_Temp=in.given(
"Temp");
6000 bool instancePar_given_L=in.given(
"L");
6002 bool instancePar_given_W=in.given(
"W");
6009 int instancePar_N=in.N;
6010 bool instancePar_given_N=in.given(
"N");
6020 if (!(in.given(
"Temp")))
6022 instancePar_Temp = modelPar_Temp;
6024 if (!(in.given(
"N")))
6026 instancePar_N = modelPar_N;
6028 if (!(in.given(
"L")))
6030 instancePar_L = modelPar_L;
6032 if (!(in.given(
"W")))
6034 instancePar_W = modelPar_W;
6046 Linear::Vector * solVectorPtr = in.extData.nextSolVectorPtr;
6049 probeVars[in.admsProbeID_V_t_ti] = (*solVectorPtr)[in.li_t] - (*solVectorPtr)[in.li_ti];
6050 probeVars[in.admsProbeID_V_b_c] = (*solVectorPtr)[in.li_b] - (*solVectorPtr)[in.li_c];
6051 probeVars[in.admsProbeID_V_c_GND] = (*solVectorPtr)[in.li_c];
6052 probeVars[in.admsProbeID_V_b_GND] = (*solVectorPtr)[in.li_b];
6053 probeVars[in.admsProbeID_V_cx_bii] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_bii];
6054 probeVars[in.admsProbeID_V_exx_bii] = (*solVectorPtr)[in.li_exx] - (*solVectorPtr)[in.li_bii];
6055 probeVars[in.admsProbeID_V_ex_bii] = (*solVectorPtr)[in.li_ex] - (*solVectorPtr)[in.li_bii];
6056 probeVars[in.admsProbeID_V_bii_bi] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_bi];
6057 probeVars[in.admsProbeID_I_c_ci] = (*solVectorPtr)[in.li_BRA_c_ci];
6058 probeVars[in.admsProbeID_I_e_ei] = (*solVectorPtr)[in.li_BRA_e_ei];
6059 probeVars[in.admsProbeID_I_b_bi] = (*solVectorPtr)[in.li_BRA_b_bi];
6060 probeVars[in.admsProbeID_V_ti_GND] = (*solVectorPtr)[in.li_ti];
6061 probeVars[in.admsProbeID_V_ci_ei] = (*solVectorPtr)[in.li_ci] - (*solVectorPtr)[in.li_ei];
6062 probeVars[in.admsProbeID_V_exx_ei] = (*solVectorPtr)[in.li_exx] - (*solVectorPtr)[in.li_ei];
6063 probeVars[in.admsProbeID_V_cx_ci] = (*solVectorPtr)[in.li_cx] - (*solVectorPtr)[in.li_ci];
6064 probeVars[in.admsProbeID_V_ex_ei] = (*solVectorPtr)[in.li_ex] - (*solVectorPtr)[in.li_ei];
6065 probeVars[in.admsProbeID_V_bii_ei] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_ei];
6066 probeVars[in.admsProbeID_V_bii_ci] = (*solVectorPtr)[in.li_bii] - (*solVectorPtr)[in.li_ci];
6067 probeVars[in.admsProbeID_V_bi_ci] = (*solVectorPtr)[in.li_bi] - (*solVectorPtr)[in.li_ci];
6070 probeVars[in.admsProbeID_V_bii_ei] *= modelPar_dtype;
6071 probeVars[in.admsProbeID_V_bii_ci] *= modelPar_dtype;
6072 probeVars[in.admsProbeID_V_bi_ci] *= modelPar_dtype;
6078 evaluateModelEquations(
6081 in.admsProbeID_V_t_ti,
6082 in.admsProbeID_V_b_c,
6083 in.admsProbeID_V_c_GND,
6084 in.admsProbeID_V_b_GND,
6085 in.admsProbeID_V_cx_bii,
6086 in.admsProbeID_V_exx_bii,
6087 in.admsProbeID_V_ex_bii,
6088 in.admsProbeID_V_bii_bi,
6089 in.admsProbeID_I_c_ci,
6090 in.admsProbeID_I_e_ei,
6091 in.admsProbeID_I_b_bi,
6092 in.admsProbeID_V_ti_GND,
6093 in.admsProbeID_V_ci_ei,
6094 in.admsProbeID_V_exx_ei,
6095 in.admsProbeID_V_cx_ci,
6096 in.admsProbeID_V_ex_ei,
6097 in.admsProbeID_V_bii_ei,
6098 in.admsProbeID_V_bii_ci,
6099 in.admsProbeID_V_bi_ci,
6120 instancePar_given_Temp,
6122 instancePar_given_L,
6124 instancePar_given_W,
6127 instancePar_given_N,
6131 modelPar_given_Temp,
6151 modelPar_given_Rbxx,
6155 modelPar_given_Jsee,
6159 modelPar_given_Rbbxx,
6161 modelPar_given_Vgbb,
6169 modelPar_given_XCjc,
6175 modelPar_given_Rcxx,
6181 modelPar_given_kBeta,
6195 modelPar_given_BVceo,
6199 modelPar_given_BVebo,
6209 modelPar_given_Thcs,
6227 modelPar_given_Cmin,
6233 modelPar_given_Rci0,
6239 modelPar_given_Vces,
6261 modelPar_given_Tnom,
6264 modelPar_given_Mode,
6266 modelPar_given_Noise,
6268 modelPar_given_Debug,
6270 modelPar_given_DebugPlus,
6276 in.getDeviceOptions().gmin,
6277 staticContributions,
6278 dynamicContributions,
6284 dfdp[in.admsNodeID_c+inst*(12+3)] += staticContributions[in.admsNodeID_c].dx(0);
6285 dqdp[in.admsNodeID_c+inst*(12+3)] += dynamicContributions[in.admsNodeID_c].dx(0);
6286 Findices[in.admsNodeID_c+inst*(12+3)] = in.li_c;
6287 Qindices[in.admsNodeID_c+inst*(12+3)] = in.li_c;
6288 dfdp[in.admsNodeID_b+inst*(12+3)] += staticContributions[in.admsNodeID_b].dx(0);
6289 dqdp[in.admsNodeID_b+inst*(12+3)] += dynamicContributions[in.admsNodeID_b].dx(0);
6290 Findices[in.admsNodeID_b+inst*(12+3)] = in.li_b;
6291 Qindices[in.admsNodeID_b+inst*(12+3)] = in.li_b;
6292 dfdp[in.admsNodeID_e+inst*(12+3)] += staticContributions[in.admsNodeID_e].dx(0);
6293 dqdp[in.admsNodeID_e+inst*(12+3)] += dynamicContributions[in.admsNodeID_e].dx(0);
6294 Findices[in.admsNodeID_e+inst*(12+3)] = in.li_e;
6295 Qindices[in.admsNodeID_e+inst*(12+3)] = in.li_e;
6296 dfdp[in.admsNodeID_t+inst*(12+3)] += staticContributions[in.admsNodeID_t].dx(0);
6297 dqdp[in.admsNodeID_t+inst*(12+3)] += dynamicContributions[in.admsNodeID_t].dx(0);
6298 Findices[in.admsNodeID_t+inst*(12+3)] = in.li_t;
6299 Qindices[in.admsNodeID_t+inst*(12+3)] = in.li_t;
6300 dfdp[in.admsNodeID_ei+inst*(12+3)] += staticContributions[in.admsNodeID_ei].dx(0);
6301 dqdp[in.admsNodeID_ei+inst*(12+3)] += dynamicContributions[in.admsNodeID_ei].dx(0);
6302 Findices[in.admsNodeID_ei+inst*(12+3)] = in.li_ei;
6303 Qindices[in.admsNodeID_ei+inst*(12+3)] = in.li_ei;
6304 dfdp[in.admsNodeID_bi+inst*(12+3)] += staticContributions[in.admsNodeID_bi].dx(0);
6305 dqdp[in.admsNodeID_bi+inst*(12+3)] += dynamicContributions[in.admsNodeID_bi].dx(0);
6306 Findices[in.admsNodeID_bi+inst*(12+3)] = in.li_bi;
6307 Qindices[in.admsNodeID_bi+inst*(12+3)] = in.li_bi;
6308 dfdp[in.admsNodeID_bii+inst*(12+3)] += staticContributions[in.admsNodeID_bii].dx(0);
6309 dqdp[in.admsNodeID_bii+inst*(12+3)] += dynamicContributions[in.admsNodeID_bii].dx(0);
6310 Findices[in.admsNodeID_bii+inst*(12+3)] = in.li_bii;
6311 Qindices[in.admsNodeID_bii+inst*(12+3)] = in.li_bii;
6312 dfdp[in.admsNodeID_ci+inst*(12+3)] += staticContributions[in.admsNodeID_ci].dx(0);
6313 dqdp[in.admsNodeID_ci+inst*(12+3)] += dynamicContributions[in.admsNodeID_ci].dx(0);
6314 Findices[in.admsNodeID_ci+inst*(12+3)] = in.li_ci;
6315 Qindices[in.admsNodeID_ci+inst*(12+3)] = in.li_ci;
6316 dfdp[in.admsNodeID_ti+inst*(12+3)] += staticContributions[in.admsNodeID_ti].dx(0);
6317 dqdp[in.admsNodeID_ti+inst*(12+3)] += dynamicContributions[in.admsNodeID_ti].dx(0);
6318 Findices[in.admsNodeID_ti+inst*(12+3)] = in.li_ti;
6319 Qindices[in.admsNodeID_ti+inst*(12+3)] = in.li_ti;
6320 dfdp[in.admsNodeID_ex+inst*(12+3)] += staticContributions[in.admsNodeID_ex].dx(0);
6321 dqdp[in.admsNodeID_ex+inst*(12+3)] += dynamicContributions[in.admsNodeID_ex].dx(0);
6322 Findices[in.admsNodeID_ex+inst*(12+3)] = in.li_ex;
6323 Qindices[in.admsNodeID_ex+inst*(12+3)] = in.li_ex;
6324 dfdp[in.admsNodeID_exx+inst*(12+3)] += staticContributions[in.admsNodeID_exx].dx(0);
6325 dqdp[in.admsNodeID_exx+inst*(12+3)] += dynamicContributions[in.admsNodeID_exx].dx(0);
6326 Findices[in.admsNodeID_exx+inst*(12+3)] = in.li_exx;
6327 Qindices[in.admsNodeID_exx+inst*(12+3)] = in.li_exx;
6328 dfdp[in.admsNodeID_cx+inst*(12+3)] += staticContributions[in.admsNodeID_cx].dx(0);
6329 dqdp[in.admsNodeID_cx+inst*(12+3)] += dynamicContributions[in.admsNodeID_cx].dx(0);
6330 Findices[in.admsNodeID_cx+inst*(12+3)] = in.li_cx;
6331 Qindices[in.admsNodeID_cx+inst*(12+3)] = in.li_cx;
6332 dfdp[in.admsBRA_ID_b_bi+inst*(12+3)] += staticContributions[in.admsBRA_ID_b_bi].dx(0);
6333 dqdp[in.admsBRA_ID_b_bi+inst*(12+3)] += dynamicContributions[in.admsBRA_ID_b_bi].dx(0);
6334 Findices[in.admsBRA_ID_b_bi+inst*(12+3)] = in.li_BRA_b_bi;
6335 Qindices[in.admsBRA_ID_b_bi+inst*(12+3)] = in.li_BRA_b_bi;
6336 dfdp[in.admsBRA_ID_e_ei+inst*(12+3)] += staticContributions[in.admsBRA_ID_e_ei].dx(0);
6337 dqdp[in.admsBRA_ID_e_ei+inst*(12+3)] += dynamicContributions[in.admsBRA_ID_e_ei].dx(0);
6338 Findices[in.admsBRA_ID_e_ei+inst*(12+3)] = in.li_BRA_e_ei;
6339 Qindices[in.admsBRA_ID_e_ei+inst*(12+3)] = in.li_BRA_e_ei;
6340 dfdp[in.admsBRA_ID_c_ci+inst*(12+3)] += staticContributions[in.admsBRA_ID_c_ci].dx(0);
6341 dqdp[in.admsBRA_ID_c_ci+inst*(12+3)] += dynamicContributions[in.admsBRA_ID_c_ci].dx(0);
6342 Findices[in.admsBRA_ID_c_ci+inst*(12+3)] = in.li_BRA_c_ci;
6343 Qindices[in.admsBRA_ID_c_ci+inst*(12+3)] = in.li_BRA_c_ci;
6348 #endif // Xyce_ADMS_SENSITIVITIES
const InstanceName & getName() const
double * q_ci_Equ_bi_Node_Ptr
std::vector< AdmsFadType > probeVars
double * q_ex_Equ_bii_Node_Ptr
double * f_cx_Equ_bii_Node_Ptr
double * q_ti_Equ_ei_Node_Ptr
static const int admsNodeID_bii
bool updateDependentParameters()
double * q_bi_Equ_bii_Node_Ptr
double * q_t_Equ_ti_Node_Ptr
void registerLIDs(const LocalIdVector &intLIDVecRef, const LocalIdVector &extLIDVecRef)
static const int admsNodeID_ei
bool updatePrimaryState()
const SolverState & solverState_
Descriptor & addPar(const char *parName, T default_value, T U::*varPtr)
Adds the parameter description to the parameter map.
static const int admsNodeID_ex
double * f_bi_Equ_bi_Node_Ptr
double * f_c_Equ_b_Node_Ptr
double * q_BRA_e_ei_Equ_BRA_e_ei_Var_Ptr
bool updateSecondaryState()
std::vector< double > Jdxp_static
double * q_cx_Equ_bii_Node_Ptr
double * f_ci_Equ_BRA_c_ci_Var_Ptr
double * dFdxdVpVectorRawPtr
Linear::Vector * nextSolVectorPtr
double * q_cx_Equ_ti_Node_Ptr
double * q_exx_Equ_ei_Node_Ptr
double pnjlim(double vnew, double vold, double vt, double vcrit, int *icheck)
double * f_BRA_b_bi_Equ_b_Node_Ptr
double * f_bi_Equ_BRA_b_bi_Var_Ptr
bool given(const std::string ¶meter_name) const
Linear::Vector * daeQVectorPtr
double * f_cx_Equ_ci_Node_Ptr
static const int admsNodeID_ci
static const int admsProbeID_I_c_ci
double * q_bii_Equ_bii_Node_Ptr
Pure virtual class to augment a linear system.
double * q_c_Equ_c_Node_Ptr
double * q_cx_Equ_cx_Node_Ptr
std::vector< AdmsFadType > dynamicContributions
void addInternalNode(Util::SymbolTable &symbol_table, int index, const InstanceName &instance_name, const std::string &lead_name)
double * f_cx_Equ_ti_Node_Ptr
double * f_t_Equ_ti_Node_Ptr
static const int admsProbeID_V_bii_bi
double * q_BRA_b_bi_Equ_BRA_b_bi_Var_Ptr
double * f_ei_Equ_exx_Node_Ptr
virtual void forEachInstance(DeviceInstanceOp &op) const
Apply a device instance "op" to all instances associated with this model.
double * f_bii_Equ_exx_Node_Ptr
static const int admsProbeID_V_ci_ei
double * f_c_Equ_c_Node_Ptr
double * q_ti_Equ_ti_Node_Ptr
static const int admsProbeID_V_bii_ei
double * f_b_Equ_BRA_b_bi_Var_Ptr
double * f_ti_Equ_bi_Node_Ptr
double * f_b_Equ_b_Node_Ptr
static std::vector< std::vector< int > > jacStamp
virtual void registerJacLIDs(const JacobianStamp &jacLIDVec)
static const int admsProbeID_V_b_GND
double * q_exx_Equ_bii_Node_Ptr
std::vector< AdmsFadType > staticContributions
static const int admsProbeID_V_ex_ei
double * f_e_Equ_BRA_e_ei_Var_Ptr
double * q_ei_Equ_ei_Node_Ptr
double * f_b_Equ_c_Node_Ptr
bool updateIntermediateVars()
double * f_ei_Equ_ei_Node_Ptr
static const int admsProbeID_V_t_ti
double * q_ci_Equ_bii_Node_Ptr
bool updateTemperature(const double &temp=-999.0)
double * q_ci_Equ_ti_Node_Ptr
double * f_BRA_e_ei_Equ_e_Node_Ptr
double * f_exx_Equ_bii_Node_Ptr
double * f_ex_Equ_ei_Node_Ptr
double * q_bi_Equ_ti_Node_Ptr
double * f_exx_Equ_ei_Node_Ptr
double * f_bii_Equ_ti_Node_Ptr
double * q_cx_Equ_ci_Node_Ptr
std::vector< Param > params
Parameters from the line.
double * q_ei_Equ_ci_Node_Ptr
void registerJacLIDs(const JacobianStamp &jacLIDVec)
static const int admsProbeID_V_bii_ci
static const int admsNodeID_bi
void setParams(const std::vector< Param > ¶ms)
const std::string & getName() const
double * q_ci_Equ_cx_Node_Ptr
Sacado::Fad::SFad< double, 1 > AdmsSensFadType
double * q_bii_Equ_cx_Node_Ptr
double * f_ti_Equ_t_Node_Ptr
The FactoryBlock contains parameters needed by the device, instance and model creation functions...
double * q_ex_Equ_ei_Node_Ptr
static const int admsProbeID_V_cx_ci
static const int admsProbeID_I_e_ei
static const int admsProbeID_V_exx_ei
static const int admsProbeID_V_cx_bii
double * q_e_Equ_BRA_e_ei_Var_Ptr
void loadNodeSymbols(Util::SymbolTable &symbol_table) const
Populates and returns the store name map.
double * q_bii_Equ_exx_Node_Ptr
const DeviceOptions & getDeviceOptions() const
double * q_bi_Equ_BRA_b_bi_Var_Ptr
double * f_ci_Equ_ci_Node_Ptr
Parameter is not to be documented.
double * f_bii_Equ_ex_Node_Ptr
double * q_c_Equ_b_Node_Ptr
double * q_ti_Equ_t_Node_Ptr
double * f_ei_Equ_ex_Node_Ptr
double * f_BRA_b_bi_Equ_BRA_b_bi_Var_Ptr
double * q_bi_Equ_ci_Node_Ptr
double * q_ci_Equ_ei_Node_Ptr
double * f_ci_Equ_ei_Node_Ptr
double * f_ex_Equ_ex_Node_Ptr
const DeviceOptions & deviceOptions_
double * f_bi_Equ_ti_Node_Ptr
std::vector< std::vector< int > > JacobianStamp
double * f_ci_Equ_ti_Node_Ptr
double * q_BRA_e_ei_Equ_ei_Node_Ptr
static std::vector< std::vector< int > > jacMap2
static const int admsNodeID_e
static const int admsProbeID_V_c_GND
std::vector< Instance * > instanceContainer
bool processParams()
processParams
double * q_bi_Equ_bi_Node_Ptr
bool processInstanceParams()
processInstanceParams
Linear::Vector * nextStaVectorPtr
static const int admsBRA_ID_c_ci
static const int admsNodeID_c
double * q_ei_Equ_ex_Node_Ptr
virtual std::ostream & printOutInstances(std::ostream &os) const
static const int admsNodeID_t
static Config< T > & addConfiguration()
Adds the device to the Xyce device configuration.
Sacado::Fad::SFad< double, 19 > AdmsFadType
double * q_BRA_e_ei_Equ_e_Node_Ptr
double * f_ti_Equ_ci_Node_Ptr
Linear::Matrix * dFdxMatrixPtr
static const int admsNodeID_b
double * q_ti_Equ_ci_Node_Ptr
double * q_exx_Equ_ti_Node_Ptr
The Device class is an interface for device implementations.
double * f_BRA_c_ci_Equ_c_Node_Ptr
double * q_exx_Equ_exx_Node_Ptr
double * f_BRA_e_ei_Equ_ei_Node_Ptr
int li_state_admsProbeID_V_bii_ei
double * f_ex_Equ_bii_Node_Ptr
double * f_ti_Equ_bii_Node_Ptr
static const int admsProbeID_I_b_bi
double * f_BRA_c_ci_Equ_ci_Node_Ptr
static const int admsProbeID_V_b_c
double * q_ex_Equ_ti_Node_Ptr
double * f_t_Equ_t_Node_Ptr
static void loadInstanceParameters(ParametricData< Instance > &instance_parameters)
static const int admsBRA_ID_b_bi
double * dQdxdVpVectorRawPtr
Class Configuration contains device configuration data.
static const int admsNodeID_cx
double * q_bii_Equ_bi_Node_Ptr
double * q_bii_Equ_ti_Node_Ptr
double * f_bii_Equ_bii_Node_Ptr
int li_state_admsProbeID_V_bii_ci
double * f_ei_Equ_BRA_e_ei_Var_Ptr
double * q_bii_Equ_ci_Node_Ptr
double * f_ci_Equ_bi_Node_Ptr
double * f_c_Equ_BRA_c_ci_Var_Ptr
double * q_b_Equ_c_Node_Ptr
double * f_bii_Equ_cx_Node_Ptr
static const int admsNodeID_exx
const SolverState & getSolverState() const
const JacobianStamp & jacobianStamp() const
double * f_exx_Equ_ti_Node_Ptr
double * q_b_Equ_b_Node_Ptr
double * q_b_Equ_BRA_b_bi_Var_Ptr
double * q_ti_Equ_bi_Node_Ptr
static const int admsProbeID_V_bi_ci
double * q_BRA_c_ci_Equ_BRA_c_ci_Var_Ptr
static Device * factory(const Configuration &configuration, const FactoryBlock &factory_block)
Model(const Configuration &configuration, const ModelBlock &model_block, const FactoryBlock &factory_block)
static const int admsProbeID_V_ex_bii
double * f_cx_Equ_cx_Node_Ptr
double * f_ei_Equ_bii_Node_Ptr
double * q_ei_Equ_ti_Node_Ptr
double * f_ti_Equ_ti_Node_Ptr
Linear::Vector * currStaVectorPtr
double * nextStaVectorRawPtr
double * q_BRA_b_bi_Equ_bi_Node_Ptr
Linear::Vector * daeFVectorPtr
static const int admsNodeID_ti
double * f_ex_Equ_ti_Node_Ptr
static const int admsProbeID_V_exx_bii
double * f_BRA_b_bi_Equ_bi_Node_Ptr
double * f_bii_Equ_bi_Node_Ptr
const std::string & getType() const
double * q_BRA_b_bi_Equ_b_Node_Ptr
std::vector< double > Jdxp_dynamic
static void loadModelParameters(ParametricData< Model > &model_parameters)
double * q_t_Equ_t_Node_Ptr
double * q_ei_Equ_exx_Node_Ptr
static const int admsBRA_ID_e_ei
double * q_BRA_c_ci_Equ_c_Node_Ptr
std::vector< double > probeDiffs
double * f_ei_Equ_ci_Node_Ptr
double * q_ei_Equ_BRA_e_ei_Var_Ptr
static T adms_vt(const T temp)
double * q_bii_Equ_ex_Node_Ptr
double * f_ti_Equ_ei_Node_Ptr
const ExternData & extData
double * f_bi_Equ_bii_Node_Ptr
double * f_exx_Equ_exx_Node_Ptr
ModelBlock represents a .MODEL line from the netlist.
double * f_ci_Equ_cx_Node_Ptr
static std::vector< int > jacMap
Manages parameter binding for class C.
double * q_ci_Equ_BRA_c_ci_Var_Ptr
double * q_BRA_c_ci_Equ_ci_Node_Ptr
double * f_ci_Equ_bii_Node_Ptr
static const int admsProbeID_V_ti_GND
InstanceBlock represent a device instance line from the netlist.
bool initJctFlag_
true if on the first newton step of the first dcop solve of the first .STEP iteration. BJT, JFET, Diode, MOSFET, SW, Extern
Instance(const Configuration &configuration, const InstanceBlock &instance_block, Model &model, const FactoryBlock &factory_block)
Util::Param temp
operating temperature of ckt.
std::vector< Param > params
int li_state_admsProbeID_V_bi_ci
double * f_bii_Equ_ei_Node_Ptr
Linear::Matrix * dQdxMatrixPtr
double * f_BRA_e_ei_Equ_BRA_e_ei_Var_Ptr
double * f_BRA_c_ci_Equ_BRA_c_ci_Var_Ptr
double * q_c_Equ_BRA_c_ci_Var_Ptr
double * q_ei_Equ_bii_Node_Ptr
double * f_bi_Equ_ci_Node_Ptr
void registerStateLIDs(const LocalIdVector &staLIDVecRef)
double * q_bii_Equ_ei_Node_Ptr
Linear::Vector * flagSolVectorPtr
double * q_ci_Equ_ci_Node_Ptr
double * q_ex_Equ_ex_Node_Ptr
void setModParams(const std::vector< Param > ¶ms)
double * f_bii_Equ_ci_Node_Ptr
double * q_ti_Equ_bii_Node_Ptr
double * f_ei_Equ_ti_Node_Ptr