00001
00002
00003
00004 #ifndef _TRIPLEXLINE_TEST_H
00005 #define _TRIPLEXLINE_TEST_H
00006
00007 #include "line.h"
00008
00009 #ifndef _NO_CPPUNIT
00010
00015 class triplex_line_tests : public test_helper
00016 {
00017
00018
00019 public:
00020 triplex_line_tests(){}
00025 void setUp(){
00026 }
00027
00028 void tearDown(){
00029 local_callbacks->remove_objects();
00030 }
00031
00041
00042
00043
00044
00045
00046
00047
00048
00057 void test_triplex_line(){
00058 OBJECT *node1,*node2;
00059 OBJECT *tpl1;
00060
00061 complex* node1_phA_I_test = new complex(159.91,-79.788);
00062 complex* node1_phB_I_test = new complex(-199.4,106.36);
00063 complex* node1_phC_I_test = new complex(39.494,-26.569);
00064
00065 complex* node2_phA_V_test = new complex(115.44,-.26192);
00066 complex* node2_phB_V_test = new complex(122.45,-2.542);
00067 complex* node2_phC_V_test = new complex(0,0);
00068
00069 CLASS *cl = get_class_by_name("triplex_node");
00070 node1 = gl_create_object(cl);
00071 OBJECTDATA(node1,triplex_node)->create();
00072 cl = get_class_by_name("triplex_node");
00073 node2 = gl_create_object(cl);
00074 OBJECTDATA(node2,triplex_node)->create();
00075 cl = get_class_by_name("triplex_line");
00076 tpl1 = gl_create_object(cl);
00077 OBJECTDATA(tpl1,triplex_line)->create();
00078
00079 OBJECTDATA(tpl1,triplex_line)->from = node1;
00080 OBJECTDATA(tpl1,triplex_line)->to = node2;
00081 OBJECTDATA(tpl1,triplex_line)->length = 100;
00082
00083
00084 OBJECTDATA(tpl1,triplex_line)->phases = PHASE_ABCN;
00085 OBJECTDATA(node1,triplex_node)->phases = PHASE_ABCN;
00086 OBJECTDATA(node2,triplex_node)->phases = PHASE_ABCN;
00087 OBJECTDATA(node1,triplex_node)->voltageA = OBJECTDATA(node2,triplex_node)->voltageA = complex(115.44,-0.26192);
00088 OBJECTDATA(node2,triplex_node)->currentA = complex(159.91,-79.788);
00089 OBJECTDATA(node1,triplex_node)->voltageB = OBJECTDATA(node2,triplex_node)->voltageB = complex(122.45,-2.5421);
00090 OBJECTDATA(node2,triplex_node)->currentB = complex(-199.4,106.36);
00091 OBJECTDATA(node1,triplex_node)->voltageC = OBJECTDATA(node2,triplex_node)->voltageC = complex(0,0);
00092 OBJECTDATA(node2,triplex_node)->currentC = complex(39.494,-26.569);
00093
00094 cl = get_class_by_name("triplex_line_conductor");
00095 OBJECT *olc_a = gl_create_object(cl);
00096 OBJECTDATA(olc_a,triplex_line_conductor)->geometric_mean_radius = 0.0111;
00097 OBJECTDATA(olc_a,triplex_line_conductor)->resistance = 0.97;
00098
00099 OBJECT *olc_b = gl_create_object(cl);
00100 OBJECTDATA(olc_b,triplex_line_conductor)->geometric_mean_radius = 0.0111;
00101 OBJECTDATA(olc_b,triplex_line_conductor)->resistance = 0.97;
00102
00103 OBJECT *olc_c = gl_create_object(cl);
00104 OBJECTDATA(olc_c,triplex_line_conductor)->geometric_mean_radius = 0.0111;
00105 OBJECTDATA(olc_c,triplex_line_conductor)->resistance = 0.97;
00106
00107
00108 cl = get_class_by_name("triplex_line_configuration");
00109 OBJECT *line_config = gl_create_object(cl);
00110 triplex_line_configuration *lc = OBJECTDATA(line_config,triplex_line_configuration);
00111
00112 lc->phaseA_conductor = olc_a;
00113 lc->phaseB_conductor = olc_b;
00114 lc->phaseC_conductor = olc_c;
00115 lc->phaseN_conductor = NULL;
00116 lc->ins_thickness = 0.08;
00117 lc->diameter = 0.368;
00118
00119 OBJECTDATA(tpl1,triplex_line)->configuration = line_config;
00120
00121
00122 CPPUNIT_ASSERT(local_callbacks->init_objects() != FAILED);
00123
00124
00125 CPPUNIT_ASSERT(local_callbacks->setup_test_ranks() != FAILED);
00126
00127
00128 local_callbacks->sync_all(PC_PRETOPDOWN);
00129 local_callbacks->sync_all(PC_BOTTOMUP);
00130
00131
00132 double rI_1 = OBJECTDATA(node1,triplex_node)->currentA.Re();
00133 double iI_1 = OBJECTDATA(node1,triplex_node)->currentA.Im();
00134
00135
00136 double validate_re = 1 - (rI_1 <= node1_phA_I_test->Re() ? rI_1 / node1_phA_I_test->Re() : node1_phA_I_test->Re() /rI_1);
00137 double validate_im = 1 - (iI_1 <= node1_phA_I_test->Im() ? iI_1 / node1_phA_I_test->Im() : node1_phA_I_test->Im() /iI_1);
00138
00139 CPPUNIT_ASSERT(validate_re < VALIDATE_THRESHOLD);
00140 CPPUNIT_ASSERT(validate_im < VALIDATE_THRESHOLD);
00141
00142
00143 OBJECTDATA(node1,triplex_node)->voltageA = -1024.9;
00144 OBJECTDATA(node1,triplex_node)->voltageA.SetImag(2108.2);
00145 local_callbacks->sync_all(PC_POSTTOPDOWN);
00146
00147
00148 double rV_2 = OBJECTDATA(node2,triplex_node)->voltageA.Re();
00149 double iV_2 = OBJECTDATA(node2,triplex_node)->voltageA.Im();
00150
00151 validate_re = 1 - (rV_2 <= node2_phA_V_test->Re() ? rV_2 / node2_phA_V_test->Re() : node2_phA_V_test->Re() /rV_2);
00152 validate_im = 1 - (iV_2 <= node2_phA_V_test->Im() ? iV_2 / node2_phA_V_test->Im() : node2_phA_V_test->Im() /iV_2);
00153 CPPUNIT_ASSERT(validate_re < VALIDATE_THRESHOLD);
00154 CPPUNIT_ASSERT(validate_im < VALIDATE_THRESHOLD);
00155
00156 }
00157
00158
00159
00160
00161
00162
00163 CPPUNIT_TEST_SUITE(triplex_line_tests);
00164
00165
00166
00167
00168 CPPUNIT_TEST(test_triplex_line);
00169 CPPUNIT_TEST_SUITE_END();
00170
00171
00172 };
00173
00174 #endif
00175 #endif