452{
453 m_changingValues = true;
456
457 double basePower = m_workspace->GetProperties()->GetSimulationPropertiesData().basePower;
458 switch (m_workspace->GetProperties()->GetSimulationPropertiesData().basePowerUnit) {
459 case ElectricalUnit::UNIT_kVA: {
460 basePower *= 1e3;
461 } break;
462 case ElectricalUnit::UNIT_MVA: {
463 basePower *= 1e6;
464 } break;
465 default:
466 break;
467 }
468
469 int rowNumber = 1;
475
476
477 if (gridToFill == GRID_ALL || gridToFill == GRID_PF) {
478 double kActivePower = 1.0;
479 if (m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[1])
480 kActivePower = basePower;
481 else if (m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[2])
482 kActivePower = basePower / 1e3;
483 else if (m_gridPowerFlow->GetCellValue(0, 4) == m_activePowerChoices[3])
484 kActivePower = basePower / 1e6;
485
486 double kReactivePower = 1.0;
487 if (m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[1])
488 kReactivePower = basePower;
489 else if (m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[2])
490 kReactivePower = basePower / 1e3;
491 else if (m_gridPowerFlow->GetCellValue(0, 5) == m_reactivePowerChoices[3])
492 kReactivePower = basePower / 1e6;
493
494 for (auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
496
497 wxString busName1 = "-";
499 busName1 =
static_cast<Bus*
>(line->
GetParentList()[0])->GetElectricalData().name;
500 wxString busName2 = "-";
502 busName2 =
static_cast<Bus*
>(line->
GetParentList()[1])->GetElectricalData().name;
503
504 wxString isOnline = _("Yes");
505 wxColour textColour = m_gridPowerFlow->GetDefaultCellTextColour();
507 isOnline = _("No");
508 textColour = m_offlineColour;
509 }
510 for (int i = 0; i < 2; ++i) {
511 for (int j = 0; j < 7; ++j) { m_gridPowerFlow->SetCellTextColour(rowNumber + i, j, textColour); }
512 }
513
514 auto data = line->GetPUElectricalData(basePower);
515
516 m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Line"));
517 m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
518 m_gridPowerFlow->SetCellValue(rowNumber, 2, busName1);
519 m_gridPowerFlow->SetCellValue(rowNumber, 3, busName2);
520 m_gridPowerFlow->SetCellValue(rowNumber, 4,
521 line->
StringFromDouble(std::real(data.powerFlow[0]) * kActivePower, 0, m_precision));
522 m_gridPowerFlow->SetCellValue(rowNumber, 5,
523 line->
StringFromDouble(std::imag(data.powerFlow[0]) * kReactivePower, 0, m_precision));
524 m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
525 rowNumber++;
526
527 m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Line"));
528 m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
529 m_gridPowerFlow->SetCellValue(rowNumber, 2, busName2);
530 m_gridPowerFlow->SetCellValue(rowNumber, 3, busName1);
531 m_gridPowerFlow->SetCellValue(rowNumber, 4,
532 line->
StringFromDouble(std::real(data.powerFlow[1]) * kActivePower, 0, m_precision));
533 m_gridPowerFlow->SetCellValue(rowNumber, 5,
534 line->
StringFromDouble(std::imag(data.powerFlow[1]) * kReactivePower, 0, m_precision));
535 m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
536 rowNumber++;
537 }
538
539 for (auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
541 auto data = transformer->GetPUElectricalData(basePower);
542
543 wxString busName1 = "-";
545 busName1 =
static_cast<Bus*
>(transformer->
GetParentList()[0])->GetElectricalData().name;
546 wxString busName2 = "-";
548 busName2 =
static_cast<Bus*
>(transformer->
GetParentList()[1])->GetElectricalData().name;
549
550 wxString isOnline = _("Yes");
551 wxColour textColour = m_gridPowerFlow->GetDefaultCellTextColour();
553 isOnline = _("No");
554 textColour = m_offlineColour;
555 }
556 for (int i = 0; i < 2; ++i) {
557 for (int j = 0; j < 7; ++j) { m_gridPowerFlow->SetCellTextColour(rowNumber + i, j, textColour); }
558 }
559
560 m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Transformer"));
561 m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
562 m_gridPowerFlow->SetCellValue(rowNumber, 2, busName1);
563 m_gridPowerFlow->SetCellValue(rowNumber, 3, busName2);
564 m_gridPowerFlow->SetCellValue(rowNumber, 4,
565 transformer->
StringFromDouble(std::real(data.powerFlow[0]) * kActivePower, 0, m_precision));
566 m_gridPowerFlow->SetCellValue(rowNumber, 5,
567 transformer->
StringFromDouble(std::imag(data.powerFlow[0]) * kReactivePower, 0, m_precision));
568 m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
569 rowNumber++;
570
571 m_gridPowerFlow->SetCellValue(rowNumber, 0, _("Transformer"));
572 m_gridPowerFlow->SetCellValue(rowNumber, 1, data.name);
573 m_gridPowerFlow->SetCellValue(rowNumber, 2, busName2);
574 m_gridPowerFlow->SetCellValue(rowNumber, 3, busName1);
575 m_gridPowerFlow->SetCellValue(rowNumber, 4,
576 transformer->
StringFromDouble(std::real(data.powerFlow[1]) * kActivePower, 0, m_precision));
577 m_gridPowerFlow->SetCellValue(rowNumber, 5,
578 transformer->
StringFromDouble(std::imag(data.powerFlow[1]) * kReactivePower, 0, m_precision));
579 m_gridPowerFlow->SetCellValue(rowNumber, 6, isOnline);
580 rowNumber++;
581 }
582 m_gridPowerFlow->AutoSize();
583 m_gridPowerFlow->GetContainingSizer()->Layout();
584 }
585
586
587 if (gridToFill == GRID_ALL || gridToFill == GRID_PFBUSES) {
588 double kActivePower = 1.0;
589 if (m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[1])
590 kActivePower = basePower;
591 else if (m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[2])
592 kActivePower = basePower / 1e3;
593 else if (m_gridPFBuses->GetCellValue(0, 4) == m_activePowerChoices[3])
594 kActivePower = basePower / 1e6;
595
596 double kReactivePower = 1.0;
597 if (m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[1])
598 kReactivePower = basePower;
599 else if (m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[2])
600 kReactivePower = basePower / 1e3;
601 else if (m_gridPFBuses->GetCellValue(0, 5) == m_reactivePowerChoices[3])
602 kReactivePower = basePower / 1e6;
603
604 rowNumber = 1;
605 for (auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
607 auto data = bus->GetElectricalData();
608
609 double vb = std::abs(data.nominalVoltage);
610 if (data.nominalVoltageUnit == ElectricalUnit::UNIT_kV) vb *= 1e3;
611 double kVoltage = 1.0;
612 if (m_gridPFBuses->GetCellValue(0, 2) == m_voltageChoices[1])
613 kVoltage = vb;
614 else if (m_gridPFBuses->GetCellValue(0, 2) == m_voltageChoices[2])
615 kVoltage = vb / 1e3;
616
617 m_gridPFBuses->SetCellValue(rowNumber, 0, data.name);
618 wxString busTypeString = "";
619 switch (data.busType) {
621 busTypeString = _("Slack");
622 } break;
624 busTypeString = _("PV");
625 } break;
627 busTypeString = _("PQ");
628 } break;
629 }
630 m_gridPFBuses->SetCellValue(rowNumber, 1, busTypeString);
631 m_gridPFBuses->SetCellValue(rowNumber, 2, bus->
StringFromDouble(std::abs(data.voltage) * kVoltage, 0, m_precision));
632 m_gridPFBuses->SetCellValue(rowNumber, 3, bus->
StringFromDouble(wxRadToDeg(std::arg(data.voltage)), 0, m_precision));
633 m_gridPFBuses->SetCellValue(rowNumber, 4, bus->
StringFromDouble(std::real(data.power) * kActivePower, 0, m_precision));
634 m_gridPFBuses->SetCellValue(rowNumber, 5, bus->
StringFromDouble(std::imag(data.power) * kReactivePower, 0, m_precision));
635 rowNumber++;
636 }
637 m_gridPFBuses->AutoSize();
638 m_gridPFBuses->GetContainingSizer()->Layout();
639 }
640
641
642 if (gridToFill == GRID_ALL || gridToFill == GRID_PFBRANCHES) {
643 rowNumber = 1;
644 for (auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
646 auto data = line->GetPUElectricalData(basePower);
647
648 double vb = data.nominalVoltage;
649 if (data.nominalVoltageUnit == ElectricalUnit::UNIT_kV) vb *= 1e3;
650 double zb = (vb * vb) / basePower;
651
652 wxString busName1 = "-";
654 busName1 =
static_cast<Bus*
>(line->
GetParentList()[0])->GetElectricalData().name;
655 wxString busName2 = "-";
657 busName2 =
static_cast<Bus*
>(line->
GetParentList()[1])->GetElectricalData().name;
658 wxString isOnline = _("Yes");
659 wxColour textColour = m_gridPFBranches->GetDefaultCellTextColour();
661 isOnline = _("No");
662 textColour = m_offlineColour;
663 }
664 for (int j = 0; j < 10; ++j) { m_gridPFBranches->SetCellTextColour(rowNumber, j, textColour); }
665
666 m_gridPFBranches->SetCellValue(rowNumber, 0, _("Line"));
667 m_gridPFBranches->SetCellValue(rowNumber, 1, data.name);
668
669 m_gridPFBranches->SetCellValue(rowNumber, 2, busName1);
670 m_gridPFBranches->SetCellValue(rowNumber, 3, busName2);
671
672 double k = 1.0;
673 if (m_gridPFBranches->GetCellValue(0, 4) == m_resistanceChoices[1]) k = zb;
674 m_gridPFBranches->SetCellValue(rowNumber, 4, line->
StringFromDouble(data.resistance * k, 0, m_precision));
675 k = 1.0;
676 if (m_gridPFBranches->GetCellValue(0, 5) == m_indReactanceChoices[1]) k = zb;
677 m_gridPFBranches->SetCellValue(rowNumber, 5, line->
StringFromDouble(data.indReactance * k, 0, m_precision));
678 k = 1.0;
679 if (m_gridPFBranches->GetCellValue(0, 6) == m_capSusceptanceChoices[1]) k = zb;
680 m_gridPFBranches->SetCellValue(rowNumber, 6, line->
StringFromDouble(data.capSusceptance / k, 0, m_precision));
681 m_gridPFBranches->SetCellValue(rowNumber, 7, "-");
682 m_gridPFBranches->SetCellValue(rowNumber, 8, "-");
683 m_gridPFBranches->SetCellValue(rowNumber, 9, isOnline);
684 rowNumber++;
685 }
686 for (auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
688 auto data = transformer->GetPUElectricalData(basePower);
689
690 double vb = 0.0;
691 if (data.baseVoltage == 0) {
692 vb = data.primaryNominalVoltage;
693 if (data.primaryNominalVoltageUnit == ElectricalUnit::UNIT_kV) vb *= 1e3;
694 }
695 else {
696 vb = data.secondaryNominalVoltage;
697 if (data.secondaryNominalVoltageUnit == ElectricalUnit::UNIT_kV) vb *= 1e3;
698 }
699 double zb = (vb * vb) / basePower;
700
701 wxString busName1 = "-";
703 busName1 =
static_cast<Bus*
>(transformer->
GetParentList()[0])->GetElectricalData().name;
704 wxString busName2 = "-";
706 busName2 =
static_cast<Bus*
>(transformer->
GetParentList()[1])->GetElectricalData().name;
707
708 wxString isOnline = _("Yes");
709 wxColour textColour = m_gridPFBranches->GetDefaultCellTextColour();
711 isOnline = _("No");
712 textColour = m_offlineColour;
713 }
714 for (int j = 0; j < 10; ++j) { m_gridPFBranches->SetCellTextColour(rowNumber, j, textColour); }
715
716 m_gridPFBranches->SetCellValue(rowNumber, 0, _("Transformer"));
717 m_gridPFBranches->SetCellValue(rowNumber, 1, data.name);
718 m_gridPFBranches->SetCellValue(rowNumber, 2, busName1);
719 m_gridPFBranches->SetCellValue(rowNumber, 3, busName2);
720
721 double k = 1.0;
722 if (m_gridPFBranches->GetCellValue(0, 4) == m_resistanceChoices[1]) k = zb;
723 m_gridPFBranches->SetCellValue(rowNumber, 4, transformer->
StringFromDouble(data.resistance * k, 0, m_precision));
724 k = 1.0;
725 if (m_gridPFBranches->GetCellValue(0, 5) == m_indReactanceChoices[1]) k = zb;
726 m_gridPFBranches->SetCellValue(rowNumber, 5, transformer->
StringFromDouble(data.indReactance * k, 0, m_precision));
727 m_gridPFBranches->SetCellValue(rowNumber, 6, "-");
728 m_gridPFBranches->SetCellValue(rowNumber, 7, transformer->
StringFromDouble(data.turnsRatio, 0, m_precision));
729 m_gridPFBranches->SetCellValue(rowNumber, 8, transformer->
StringFromDouble(data.phaseShift, 0, m_precision));
730 m_gridPFBranches->SetCellValue(rowNumber, 9, isOnline);
731 rowNumber++;
732 }
733 m_gridPFBranches->AutoSize();
734 m_gridPFBranches->GetContainingSizer()->Layout();
735 }
736
737
738 if (gridToFill == GRID_ALL || gridToFill == GRID_FAULT) {
739 rowNumber = 2;
740 for (auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
742 auto data = bus->GetElectricalData();
743 if (data.hasFault) {
744 double vb = bus->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
745 double ib = basePower / (std::sqrt(3.0) * vb);
746
747 m_gridFault->SetCellValue(rowNumber, 0, data.name);
748
749 double kCurrent = 1.0;
750 if (m_gridFault->GetCellValue(1, 1) == m_currentChoices[1]) {
751 kCurrent = ib;
752 }
753 else if (m_gridFault->GetCellValue(1, 1) == m_currentChoices[2]) {
754 kCurrent = ib / 1e3;
755 }
756 m_gridFault->SetCellValue(rowNumber, 1,
757 bus->
StringFromDouble(std::abs(data.faultCurrent[0]) * kCurrent, 0, m_precision));
758
759 m_gridFault->SetCellValue(rowNumber, 2,
760 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0])), 0, m_precision));
761
762 kCurrent = 1.0;
763 if (m_gridFault->GetCellValue(1, 3) == m_currentChoices[1]) {
764 kCurrent = ib;
765 }
766 else if (m_gridFault->GetCellValue(1, 3) == m_currentChoices[2]) {
767 kCurrent = ib / 1e3;
768 }
769 m_gridFault->SetCellValue(rowNumber, 3,
770 bus->
StringFromDouble(std::abs(data.faultCurrent[1]) * kCurrent, 0, m_precision));
771
772 m_gridFault->SetCellValue(rowNumber, 4,
773 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1])), 0, m_precision));
774
775 kCurrent = 1.0;
776 if (m_gridFault->GetCellValue(1, 5) == m_currentChoices[1]) {
777 kCurrent = ib;
778 }
779 else if (m_gridFault->GetCellValue(1, 5) == m_currentChoices[2]) {
780 kCurrent = ib / 1e3;
781 }
782 m_gridFault->SetCellValue(rowNumber, 5,
783 bus->
StringFromDouble(std::abs(data.faultCurrent[2]) * kCurrent, 0, m_precision));
784
785 m_gridFault->SetCellValue(rowNumber, 6,
786 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[2])), 0, m_precision));
787
788 rowNumber++;
789 }
790 }
791 m_gridFault->AutoSize();
792 m_gridFault->GetContainingSizer()->Layout();
793 }
794
795
796 if (gridToFill == GRID_ALL || gridToFill == GRID_FAULTBUSES) {
797 rowNumber = 2;
798 for (auto it = busList.begin(), itEnd = busList.end(); it != itEnd; ++it) {
800 auto data = bus->GetElectricalData();
801 double vb = bus->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
802
803 m_gridFaultBuses->SetCellValue(rowNumber, 0, data.name);
804 double kVoltage = 1.0;
805 if (m_gridFaultBuses->GetCellValue(1, 1) == m_voltageChoices[1]) {
806 kVoltage = vb;
807 }
808 else if (m_gridFaultBuses->GetCellValue(1, 1) == m_voltageChoices[2]) {
809 kVoltage = vb / 1e3;
810 }
811 m_gridFaultBuses->SetCellValue(rowNumber, 1,
812 bus->
StringFromDouble(std::abs(data.faultVoltage[0]) * kVoltage, 0, m_precision));
813 m_gridFaultBuses->SetCellValue(rowNumber, 2,
814 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[0])), 0, m_precision));
815
816 kVoltage = 1.0;
817 if (m_gridFaultBuses->GetCellValue(1, 3) == m_voltageChoices[1]) {
818 kVoltage = vb;
819 }
820 else if (m_gridFaultBuses->GetCellValue(1, 3) == m_voltageChoices[2]) {
821 kVoltage = vb / 1e3;
822 }
823 m_gridFaultBuses->SetCellValue(rowNumber, 3,
824 bus->
StringFromDouble(std::abs(data.faultVoltage[1]) * kVoltage, 0, m_precision));
825 m_gridFaultBuses->SetCellValue(rowNumber, 4,
826 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[1])), 0, m_precision));
827
828 kVoltage = 1.0;
829 if (m_gridFaultBuses->GetCellValue(1, 5) == m_voltageChoices[1]) {
830 kVoltage = vb;
831 }
832 else if (m_gridFaultBuses->GetCellValue(1, 5) == m_voltageChoices[2]) {
833 kVoltage = vb / 1e3;
834 }
835 m_gridFaultBuses->SetCellValue(rowNumber, 5,
836 bus->
StringFromDouble(std::abs(data.faultVoltage[2]) * kVoltage, 0, m_precision));
837 m_gridFaultBuses->SetCellValue(rowNumber, 6,
838 bus->
StringFromDouble(wxRadToDeg(std::arg(data.faultVoltage[2])), 0, m_precision));
839
840 rowNumber++;
841 }
842 m_gridFaultBuses->AutoSize();
843 m_gridFaultBuses->GetContainingSizer()->Layout();
844 }
845
846
847 if (gridToFill == GRID_ALL || gridToFill == GRID_FAULTBRANCHES) {
848 rowNumber = 2;
849 for (auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
851 auto data = line->GetPUElectricalData(basePower);
852
853 double vb = line->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
854 double ib = basePower / (std::sqrt(3.0) * vb);
855
856 wxString busName1 = "-";
858 busName1 =
static_cast<Bus*
>(line->
GetParentList()[0])->GetElectricalData().name;
859 wxString busName2 = "-";
861 busName2 =
static_cast<Bus*
>(line->
GetParentList()[1])->GetElectricalData().name;
862
863 wxString isOnline = _("Yes");
864 wxColour textColour = m_gridFaultBranches->GetDefaultCellTextColour();
866 isOnline = _("No");
867 textColour = m_offlineColour;
868 }
869 for (int i = 0; i < 2; ++i) {
870 for (int j = 0; j < 11; ++j) { m_gridFaultBranches->SetCellTextColour(rowNumber + i, j, textColour); }
871 }
872
873 m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Line"));
874 m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
875 m_gridFaultBranches->SetCellValue(rowNumber, 2, busName1);
876 m_gridFaultBranches->SetCellValue(rowNumber, 3, busName2);
877
878 double kCurrent = 1.0;
879 if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
880 kCurrent = ib;
881 }
882 else if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
883 kCurrent = ib / 1e3;
884 }
885 m_gridFaultBranches->SetCellValue(rowNumber, 4,
886 line->
StringFromDouble(std::abs(data.faultCurrent[0][0]) * kCurrent, 0, m_precision));
887 m_gridFaultBranches->SetCellValue(rowNumber, 5,
888 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][0])), 0, m_precision));
889 kCurrent = 1.0;
890 if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
891 kCurrent = ib;
892 }
893 else if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
894 kCurrent = ib / 1e3;
895 }
896 m_gridFaultBranches->SetCellValue(rowNumber, 6,
897 line->
StringFromDouble(std::abs(data.faultCurrent[0][1]) * kCurrent, 0, m_precision));
898 m_gridFaultBranches->SetCellValue(rowNumber, 7,
899 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][1])), 0, m_precision));
900 kCurrent = 1.0;
901 if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
902 kCurrent = ib;
903 }
904 else if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
905 kCurrent = ib / 1e3;
906 }
907 m_gridFaultBranches->SetCellValue(rowNumber, 8,
908 line->
StringFromDouble(std::abs(data.faultCurrent[0][2]) * kCurrent, 0, m_precision));
909 m_gridFaultBranches->SetCellValue(rowNumber, 9,
910 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][2])), 0, m_precision));
911 m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
912 rowNumber++;
913
914 m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Line"));
915 m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
916 m_gridFaultBranches->SetCellValue(rowNumber, 2, busName2);
917 m_gridFaultBranches->SetCellValue(rowNumber, 3, busName1);
918 kCurrent = 1.0;
919 if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
920 kCurrent = ib;
921 }
922 else if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
923 kCurrent = ib / 1e3;
924 }
925 m_gridFaultBranches->SetCellValue(rowNumber, 4,
926 line->
StringFromDouble(std::abs(data.faultCurrent[1][0]) * kCurrent, 0, m_precision));
927 m_gridFaultBranches->SetCellValue(rowNumber, 5,
928 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][0])), 0, m_precision));
929 kCurrent = 1.0;
930 if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
931 kCurrent = ib;
932 }
933 else if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
934 kCurrent = ib / 1e3;
935 }
936 m_gridFaultBranches->SetCellValue(rowNumber, 6,
937 line->
StringFromDouble(std::abs(data.faultCurrent[1][1]) * kCurrent, 0, m_precision));
938 m_gridFaultBranches->SetCellValue(rowNumber, 7,
939 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][1])), 0, m_precision));
940 kCurrent = 1.0;
941 if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
942 kCurrent = ib;
943 }
944 else if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
945 kCurrent = ib / 1e3;
946 }
947 m_gridFaultBranches->SetCellValue(rowNumber, 8,
948 line->
StringFromDouble(std::abs(data.faultCurrent[1][2]) * kCurrent, 0, m_precision));
949 m_gridFaultBranches->SetCellValue(rowNumber, 9,
950 line->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][2])), 0, m_precision));
951 m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
952 rowNumber++;
953 }
954
955 for (auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
957 auto data = transformer->GetPUElectricalData(basePower);
958
959 double vb = transformer->GetValueFromUnit(data.primaryNominalVoltage, data.primaryNominalVoltageUnit);
960 double ibp = basePower / (std::sqrt(3.0) * vb);
961 vb = transformer->GetValueFromUnit(data.secondaryNominalVoltage, data.secondaryNominalVoltageUnit);
962 double ibs = basePower / (std::sqrt(3.0) * vb);
963
964 wxString busName1 = "-";
966 busName1 =
static_cast<Bus*
>(transformer->
GetParentList()[0])->GetElectricalData().name;
967 wxString busName2 = "-";
969 busName2 =
static_cast<Bus*
>(transformer->
GetParentList()[1])->GetElectricalData().name;
970
971 wxString isOnline = _("Yes");
972 wxColour textColour = m_gridFaultBranches->GetDefaultCellTextColour();
974 isOnline = _("No");
975 textColour = m_offlineColour;
976 }
977 for (int i = 0; i < 2; ++i) {
978 for (int j = 0; j < 11; ++j) { m_gridFaultBranches->SetCellTextColour(rowNumber + i, j, textColour); }
979 }
980
981 m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Transformer"));
982 m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
983 m_gridFaultBranches->SetCellValue(rowNumber, 2, busName1);
984 m_gridFaultBranches->SetCellValue(rowNumber, 3, busName2);
985
986 double kCurrent = 1.0;
987 if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
988 kCurrent = ibp;
989 }
990 else if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
991 kCurrent = ibp / 1e3;
992 }
993 m_gridFaultBranches->SetCellValue(
994 rowNumber, 4, transformer->
StringFromDouble(std::abs(data.faultCurrent[0][0]) * kCurrent, 0, m_precision));
995 m_gridFaultBranches->SetCellValue(
996 rowNumber, 5, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][0])), 0, m_precision));
997 kCurrent = 1.0;
998 if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
999 kCurrent = ibp;
1000 }
1001 else if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
1002 kCurrent = ibp / 1e3;
1003 }
1004 m_gridFaultBranches->SetCellValue(
1005 rowNumber, 6, transformer->
StringFromDouble(std::abs(data.faultCurrent[0][1]) * kCurrent, 0, m_precision));
1006 m_gridFaultBranches->SetCellValue(
1007 rowNumber, 7, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][1])), 0, m_precision));
1008 kCurrent = 1.0;
1009 if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
1010 kCurrent = ibp;
1011 }
1012 else if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
1013 kCurrent = ibp / 1e3;
1014 }
1015 m_gridFaultBranches->SetCellValue(
1016 rowNumber, 8, transformer->
StringFromDouble(std::abs(data.faultCurrent[0][2]) * kCurrent, 0, m_precision));
1017 m_gridFaultBranches->SetCellValue(
1018 rowNumber, 9, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0][2])), 0, m_precision));
1019 m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
1020 rowNumber++;
1021
1022 m_gridFaultBranches->SetCellValue(rowNumber, 0, _("Transformer"));
1023 m_gridFaultBranches->SetCellValue(rowNumber, 1, data.name);
1024 m_gridFaultBranches->SetCellValue(rowNumber, 2, busName2);
1025 m_gridFaultBranches->SetCellValue(rowNumber, 3, busName1);
1026 kCurrent = 1.0;
1027 if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[1]) {
1028 kCurrent = ibs;
1029 }
1030 else if (m_gridFaultBranches->GetCellValue(1, 4) == m_currentChoices[2]) {
1031 kCurrent = ibs / 1e3;
1032 }
1033 m_gridFaultBranches->SetCellValue(
1034 rowNumber, 4, transformer->
StringFromDouble(std::abs(data.faultCurrent[1][0]) * kCurrent, 0, m_precision));
1035 m_gridFaultBranches->SetCellValue(
1036 rowNumber, 5, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][0])), 0, m_precision));
1037 kCurrent = 1.0;
1038 if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[1]) {
1039 kCurrent = ibs;
1040 }
1041 else if (m_gridFaultBranches->GetCellValue(1, 6) == m_currentChoices[2]) {
1042 kCurrent = ibs / 1e3;
1043 }
1044 m_gridFaultBranches->SetCellValue(
1045 rowNumber, 6, transformer->
StringFromDouble(std::abs(data.faultCurrent[1][1]) * kCurrent, 0, m_precision));
1046 m_gridFaultBranches->SetCellValue(
1047 rowNumber, 7, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][1])), 0, m_precision));
1048 kCurrent = 1.0;
1049 if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[1]) {
1050 kCurrent = ibs;
1051 }
1052 else if (m_gridFaultBranches->GetCellValue(1, 8) == m_currentChoices[2]) {
1053 kCurrent = ibs / 1e3;
1054 }
1055 m_gridFaultBranches->SetCellValue(
1056 rowNumber, 8, transformer->
StringFromDouble(std::abs(data.faultCurrent[1][2]) * kCurrent, 0, m_precision));
1057 m_gridFaultBranches->SetCellValue(
1058 rowNumber, 9, transformer->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1][2])), 0, m_precision));
1059 m_gridFaultBranches->SetCellValue(rowNumber, 10, isOnline);
1060 rowNumber++;
1061 }
1062
1063 m_gridFaultBranches->AutoSize();
1064 m_gridFaultBranches->GetContainingSizer()->Layout();
1065 }
1066
1067
1068 if (gridToFill == GRID_ALL || gridToFill == GRID_FAULTGENERATORS) {
1069 rowNumber = 2;
1070 for (auto it = generatorList.begin(), itEnd = generatorList.end(); it != itEnd; ++it) {
1072 auto data = generator->GetPUElectricalData(basePower);
1073 double vb = generator->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
1074 double ib = basePower / (std::sqrt(3.0) * vb);
1075
1076 m_gridFaultGenerators->SetCellValue(rowNumber, 0, data.name);
1077
1078 double kCurrent = 1.0;
1079 if (m_gridFaultGenerators->GetCellValue(1, 1) == m_currentChoices[1])
1080 kCurrent = ib;
1081 else if (m_gridFaultGenerators->GetCellValue(1, 1) == m_currentChoices[2])
1082 kCurrent = ib / 1e3;
1083 m_gridFaultGenerators->SetCellValue(rowNumber, 1,
1084 generator->
StringFromDouble(std::abs(data.faultCurrent[0]) * kCurrent, 0, m_precision));
1085 m_gridFaultGenerators->SetCellValue(
1086 rowNumber, 2, generator->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[0])), 0, m_precision));
1087
1088 kCurrent = 1.0;
1089 if (m_gridFaultGenerators->GetCellValue(1, 3) == m_currentChoices[1])
1090 kCurrent = ib;
1091 else if (m_gridFaultGenerators->GetCellValue(1, 3) == m_currentChoices[2])
1092 kCurrent = ib / 1e3;
1093 m_gridFaultGenerators->SetCellValue(rowNumber, 3,
1094 generator->
StringFromDouble(std::abs(data.faultCurrent[1]) * kCurrent, 0, m_precision));
1095 m_gridFaultGenerators->SetCellValue(
1096 rowNumber, 4, generator->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[1])), 0, m_precision));
1097
1098 kCurrent = 1.0;
1099 if (m_gridFaultGenerators->GetCellValue(1, 5) == m_currentChoices[1])
1100 kCurrent = ib;
1101 else if (m_gridFaultGenerators->GetCellValue(1, 5) == m_currentChoices[2])
1102 kCurrent = ib / 1e3;
1103 m_gridFaultGenerators->SetCellValue(rowNumber, 5,
1104 generator->
StringFromDouble(std::abs(data.faultCurrent[2]) * kCurrent, 0, m_precision));
1105 m_gridFaultGenerators->SetCellValue(
1106 rowNumber, 6, generator->
StringFromDouble(wxRadToDeg(std::arg(data.faultCurrent[2])), 0, m_precision));
1107
1108 rowNumber++;
1109 }
1110 m_gridFaultGenerators->AutoSize();
1111 m_gridFaultGenerators->GetContainingSizer()->Layout();
1112 }
1113
1114
1115 if (gridToFill == GRID_ALL || gridToFill == GRID_HARMCURRENT) {
1116 rowNumber = 1;
1117 for (auto* hCurrent : harmCurrentList) {
1118 if (hCurrent->GetParentList()[0]) {
1119 auto busData =
static_cast<Bus*
>(hCurrent->GetParentList()[0])->GetElectricalData();
1120 double vb = hCurrent->GetValueFromUnit(busData.nominalVoltage, busData.nominalVoltageUnit);
1121 double ib = basePower / (std::sqrt(3.0) * vb);
1122
1123 auto data = hCurrent->GetPUElectricalData(basePower, vb);
1124 m_gridHarmCurrents->SetCellSize(rowNumber, 0, data.harmonicOrder.size(), 1);
1125 m_gridHarmCurrents->SetCellValue(rowNumber, 0, data.name);
1126 m_gridHarmCurrents->SetCellSize(rowNumber, 1, data.harmonicOrder.size(), 1);
1127 m_gridHarmCurrents->SetCellValue(rowNumber, 1, busData.name);
1128 int i = 0;
1129 for (auto& order : data.harmonicOrder) {
1130 m_gridHarmCurrents->SetCellValue(rowNumber, 2, wxString::Format(wxT("%d%s"), order, wxString(L'\u00BA')));
1131 double kCurrent = 1.0;
1132 if (m_gridHarmCurrents->GetCellValue(0, 3) == m_currentChoices[1]) {
1133 kCurrent = ib;
1134 }
1135 else if (m_gridHarmCurrents->GetCellValue(0, 3) == m_currentChoices[2]) {
1136 kCurrent = ib / 1e3;
1137 }
1138 m_gridHarmCurrents->SetCellValue(rowNumber, 3, hCurrent->StringFromDouble(data.injHarmCurrent[i] * kCurrent, 0, m_precision));
1139 m_gridHarmCurrents->SetCellValue(rowNumber, 4, hCurrent->StringFromDouble(data.injHarmAngle[i], 0, m_precision) + wxString(L'\u00B0'));
1140 i++;
1141 rowNumber++;
1142 }
1143 }
1144 else {
1145 auto data = hCurrent->GetElectricalData();
1146 m_gridHarmCurrents->SetCellSize(rowNumber, 0, data.harmonicOrder.size(), 1);
1147 m_gridHarmCurrents->SetCellValue(rowNumber, 0, data.name);
1148 m_gridHarmCurrents->SetCellSize(rowNumber, 1, data.harmonicOrder.size(), 1);
1149 m_gridHarmCurrents->SetCellValue(rowNumber, 1, "-");
1150 int i = 0;
1151 for (auto& order : data.harmonicOrder) {
1152 m_gridHarmCurrents->SetCellValue(rowNumber, 2, wxString::Format(wxT("%d%s"), order, wxString(L'\u00BA')));
1153 m_gridHarmCurrents->SetCellValue(rowNumber, 3, "?");
1154 m_gridHarmCurrents->SetCellValue(rowNumber, 4, hCurrent->StringFromDouble(data.injHarmAngle[i], 0, m_precision) + wxString(L'\u00B0'));
1155 i++;
1156 rowNumber++;
1157 }
1158
1159 }
1160 }
1161 m_gridHarmCurrents->AutoSize();
1162 m_gridHarmCurrents->GetContainingSizer()->Layout();
1163 }
1164
1165
1166 if (gridToFill == GRID_ALL || gridToFill == GRID_HARMBUSES) {
1167 rowNumber = 1;
1168 for (auto* bus : busList) {
1169 auto data = bus->GetElectricalData();
1170 double vb = bus->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
1171
1172 const int harmonicCount = static_cast<int>(data.harmonicOrder.size());
1173 if (harmonicCount == 0)
1174 continue;
1175
1176 m_gridHarmBuses->SetCellSize(rowNumber, 0, harmonicCount, 1);
1177 m_gridHarmBuses->SetCellValue(rowNumber, 0, data.name);
1178 m_gridHarmBuses->SetCellSize(rowNumber, 1, harmonicCount, 1);
1179 m_gridHarmBuses->SetCellValue(rowNumber, 1, bus->
StringFromDouble(data.thd, 0, m_precision) + wxT(
"%"));
1180 int i = 0;
1181 for (auto& order : data.harmonicOrder) {
1182 m_gridHarmBuses->SetCellValue(rowNumber, 2, wxString::Format(wxT("%d%s"), order, wxString(L'\u00BA')));
1183 wxString voltageStr = "";
1184 if (m_gridHarmBuses->GetCellValue(0, 3) == m_phaseVoltageChoices[0]) {
1185 voltageStr.Printf(wxString::Format("%%.%de", m_precision), std::abs(data.harmonicVoltage[i]));
1186 }
1187 else if (m_gridHarmBuses->GetCellValue(0, 3) == m_phaseVoltageChoices[1]) {
1188 voltageStr = bus->
StringFromDouble(std::abs(data.harmonicVoltage[i]) * vb / sqrt(3.0), 0, m_precision);
1189 }
1190 else if (m_gridHarmBuses->GetCellValue(0, 3) == m_phaseVoltageChoices[2]) {
1191 voltageStr = bus->
StringFromDouble(std::abs(data.harmonicVoltage[i]) * vb / (sqrt(3.0) * 1e3), 0, m_precision);
1192 }
1193 m_gridHarmBuses->SetCellValue(rowNumber, 3, voltageStr);
1194 m_gridHarmBuses->SetCellValue(rowNumber, 4, bus->
StringFromDouble(wxRadToDeg(std::arg(data.harmonicVoltage[i])), 0, m_precision) + wxString(L
'\u00B0'));
1195
1196 i++;
1197 rowNumber++;
1198 }
1199 }
1200 m_gridHarmBuses->AutoSize();
1201 m_gridHarmBuses->GetContainingSizer()->Layout();
1202 }
1203
1204
1205 if (gridToFill == GRID_ALL || gridToFill == GRID_HARMBRANCHES) {
1206 rowNumber = 1;
1207 for (auto* line : lineList) {
1208 auto data = line->GetPUElectricalData(basePower);
1209
1210 double vb = line->GetValueFromUnit(data.nominalVoltage, data.nominalVoltageUnit);
1211 double ib = basePower / (std::sqrt(3.0) * vb);
1212
1213 wxString busName1 = "-";
1215 busName1 =
static_cast<Bus*
>(line->
GetParentList()[0])->GetElectricalData().name;
1216 wxString busName2 = "-";
1218 busName2 =
static_cast<Bus*
>(line->
GetParentList()[1])->GetElectricalData().name;
1219
1220 wxString isOnline = _("Yes");
1221 wxColour textColour = m_gridHarmBranches->GetDefaultCellTextColour();
1223 isOnline = _("No");
1224 textColour = m_offlineColour;
1225 }
1226
1227 const int harmonicCount = static_cast<int>(data.harmonicOrder.size());
1228 if (harmonicCount == 0)
1229 continue;
1230
1231 for (int side = 0; side < 2; ++side) {
1232 for (unsigned int i = 0; i < harmonicCount; ++i) {
1233 for (int j = 0; j < 8; ++j) { m_gridHarmBranches->SetCellTextColour(rowNumber + i, j, textColour); }
1234 }
1235
1236 m_gridHarmBranches->SetCellSize(rowNumber, 0, harmonicCount, 1);
1237 m_gridHarmBranches->SetCellValue(rowNumber, 0, _("Line"));
1238 m_gridHarmBranches->SetCellSize(rowNumber, 1, harmonicCount, 1);
1239 m_gridHarmBranches->SetCellValue(rowNumber, 1, data.name);
1240 m_gridHarmBranches->SetCellSize(rowNumber, 2, harmonicCount, 1);
1241 m_gridHarmBranches->SetCellValue(rowNumber, 2, side == 0 ? busName1 : busName2);
1242 m_gridHarmBranches->SetCellSize(rowNumber, 3, harmonicCount, 1);
1243 m_gridHarmBranches->SetCellValue(rowNumber, 3, side == 0 ? busName2 : busName1);
1244 m_gridHarmBranches->SetCellSize(rowNumber, 7, harmonicCount, 1);
1245 m_gridHarmBranches->SetCellValue(rowNumber, 7, isOnline);
1246
1247 int i = 0;
1248 for (auto& order : data.harmonicOrder) {
1249 m_gridHarmBranches->SetCellValue(rowNumber, 4, wxString::Format(wxT("%d%s"), order, wxString(L'\u00BA')));
1250 wxString currentStr = "";
1251 wxString angleStr = "";
1253 if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[0]) {
1254 currentStr.Printf(wxString::Format("%%.%de", m_precision), std::abs(data.harmonicCurrent[side][i]));
1255 }
1256 else if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[1]) {
1257 currentStr = line->
StringFromDouble(std::abs(data.harmonicCurrent[side][i]) * ib, 0, m_precision);
1258 }
1259 else if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[2]) {
1260 currentStr = line->
StringFromDouble(std::abs(data.harmonicCurrent[side][i]) * ib / 1e3, 0, m_precision);
1261 }
1262 angleStr = line->
StringFromDouble(wxRadToDeg(std::arg(data.harmonicCurrent[side][i])), 0, m_precision) + wxString(L
'\u00B0');
1263 }
1264 else {
1267 }
1268
1269 m_gridHarmBranches->SetCellValue(rowNumber, 5, currentStr);
1270 m_gridHarmBranches->SetCellValue(rowNumber, 6, angleStr);
1271
1272 i++;
1273 rowNumber++;
1274 }
1275 }
1276 }
1277
1278 for (auto* transformer : transformerList) {
1279 auto data = transformer->GetPUElectricalData(basePower);
1280
1281 double vb = transformer->GetValueFromUnit(data.primaryNominalVoltage, data.primaryNominalVoltageUnit);
1282 double ibp = basePower / (std::sqrt(3.0) * vb);
1283 vb = transformer->GetValueFromUnit(data.secondaryNominalVoltage, data.secondaryNominalVoltageUnit);
1284 double ibs = basePower / (std::sqrt(3.0) * vb);
1285
1286 wxString busName1 = "-";
1288 busName1 =
static_cast<Bus*
>(transformer->
GetParentList()[0])->GetElectricalData().name;
1289 wxString busName2 = "-";
1291 busName2 =
static_cast<Bus*
>(transformer->
GetParentList()[1])->GetElectricalData().name;
1292
1293 wxString isOnline = _("Yes");
1294 wxColour textColour = m_gridHarmBranches->GetDefaultCellTextColour();
1296 isOnline = _("No");
1297 textColour = m_offlineColour;
1298 }
1299
1300 const int harmonicCount = static_cast<int>(data.harmonicOrder.size());
1301 if (harmonicCount == 0)
1302 continue;
1303
1304 for (int side = 0; side < 2; ++side) {
1305 for (unsigned int i = 0; i < harmonicCount; ++i) {
1306 for (int j = 0; j < 8; ++j) { m_gridHarmBranches->SetCellTextColour(rowNumber + i, j, textColour); }
1307 }
1308 double ib = side == 0 ? ibp : ibs;
1309
1310 m_gridHarmBranches->SetCellSize(rowNumber, 0, harmonicCount, 1);
1311 m_gridHarmBranches->SetCellValue(rowNumber, 0, _("Transformer"));
1312 m_gridHarmBranches->SetCellSize(rowNumber, 1, harmonicCount, 1);
1313 m_gridHarmBranches->SetCellValue(rowNumber, 1, data.name);
1314 m_gridHarmBranches->SetCellSize(rowNumber, 2, harmonicCount, 1);
1315 m_gridHarmBranches->SetCellValue(rowNumber, 2, side == 0 ? busName1 : busName2);
1316 m_gridHarmBranches->SetCellSize(rowNumber, 3, harmonicCount, 1);
1317 m_gridHarmBranches->SetCellValue(rowNumber, 3, side == 0 ? busName2 : busName1);
1318 m_gridHarmBranches->SetCellSize(rowNumber, 7, harmonicCount, 1);
1319 m_gridHarmBranches->SetCellValue(rowNumber, 7, isOnline);
1320
1321 int i = 0;
1322 for (auto& order : data.harmonicOrder) {
1323 m_gridHarmBranches->SetCellValue(rowNumber, 4, wxString::Format(wxT("%d%s"), order, wxString(L'\u00BA')));
1324 wxString currentStr = "";
1325 wxString angleStr = "";
1327 if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[0]) {
1328 currentStr.Printf(wxString::Format("%%.%de", m_precision), std::abs(data.harmonicCurrent[side][i]));
1329 }
1330 else if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[1]) {
1331 currentStr = transformer->
StringFromDouble(std::abs(data.harmonicCurrent[side][i]) * ib, 0, m_precision);
1332 }
1333 else if (m_gridHarmBranches->GetCellValue(0, 5) == m_currentChoices[2]) {
1334 currentStr = transformer->
StringFromDouble(std::abs(data.harmonicCurrent[side][i]) * ib / 1e3, 0, m_precision);
1335 }
1336 angleStr = transformer->
StringFromDouble(wxRadToDeg(std::arg(data.harmonicCurrent[side][i])), 0, m_precision) + wxString(L
'\u00B0');
1337 }
1338 else {
1341 }
1342
1343 m_gridHarmBranches->SetCellValue(rowNumber, 5, currentStr);
1344 m_gridHarmBranches->SetCellValue(rowNumber, 6, angleStr);
1345
1346 i++;
1347 rowNumber++;
1348 }
1349 }
1350 }
1351
1352 m_gridHarmBranches->AutoSize();
1353 m_gridHarmBranches->GetContainingSizer()->Layout();
1354 }
1355
1356 m_changingValues = false;
1357}
virtual std::vector< Element * > GetParentList() const
Get the parent list.
bool IsOnline() const
Checks if the element is online or offline.
static wxString StringFromDouble(double value, int minDecimal=1, int maxDecimals=13)
Convert a double value to string.
Synchronous generator power element.