diff --git a/docs/examples/State Estimation Example.ipynb b/docs/examples/State Estimation Example.ipynb index 9a11124536..5411a33e4f 100644 --- a/docs/examples/State Estimation Example.ipynb +++ b/docs/examples/State Estimation Example.ipynb @@ -147,14 +147,14 @@ " MeasuredTerminalType.branch_from,\n", "]\n", "sym_current_sensor[\"angle_measurement_type\"] = [\n", - " AngleMeasurementType.local_angle,\n", + " AngleMeasurementType.global_angle,\n", " AngleMeasurementType.local_angle,\n", " AngleMeasurementType.local_angle,\n", "]\n", "sym_current_sensor[\"i_sigma\"] = [100, 100, 100]\n", "sym_current_sensor[\"i_angle_sigma\"] = [0.1, 0.1, 0.1]\n", "sym_current_sensor[\"i_measured\"] = [978.814, 806.486, 776.753]\n", - "sym_current_sensor[\"i_angle_measured\"] = [1.325, 1.368, 1.349]\n", + "sym_current_sensor[\"i_angle_measured\"] = [-0.20864859135578062, 1.368, 1.349]\n", "\n", "# all\n", "input_data = {\n", @@ -313,37 +313,37 @@ "type": "float" } ], - "ref": "a6e7d989-5998-45bf-86e7-a4931f20100b", + "ref": "d4208ec4-053c-4fbe-8ed8-28acc06e2c36", "rows": [ [ "0", "1", "1", - "0.998883105508261", - "10488.27260783674", - "0.0139517077504464", - "31200328.01436846", - "6755259.5347174425" + "0.9988831084547745", + "10488.272638775132", + "0.013951706380949211", + "31200329.141273886", + "6755258.476748327" ], [ "1", "2", "1", - "0.9522779842100326", - "9998.918834205342", - "-0.00938102438453505", - "-20021412.25071719", - "-4812473.950293278" + "0.9522779869831288", + "9998.918863322853", + "-0.00938102833253912", + "-20021413.042150345", + "-4812473.12993689" ], [ "2", "6", "1", - "0.962198050503647", - "10103.079530288294", - "-0.005094994693614059", - "-9968971.385563152", - "-1955178.0688977723" + "0.9621980533219164", + "10103.079559880123", + "-0.0050949978831099675", + "-9968971.662229644", + "-1955177.789986951" ] ], "shape": { @@ -385,29 +385,29 @@ " 1\n", " 1\n", " 0.998883\n", - " 10488.272608\n", + " 10488.272639\n", " 0.013952\n", " 3.120033e+07\n", - " 6.755260e+06\n", + " 6.755258e+06\n", " \n", " \n", " 1\n", " 2\n", " 1\n", " 0.952278\n", - " 9998.918834\n", + " 9998.918863\n", " -0.009381\n", " -2.002141e+07\n", - " -4.812474e+06\n", + " -4.812473e+06\n", " \n", " \n", " 2\n", " 6\n", " 1\n", " 0.962198\n", - " 10103.079530\n", + " 10103.079560\n", " -0.005095\n", - " -9.968971e+06\n", + " -9.968972e+06\n", " -1.955178e+06\n", " \n", " \n", @@ -416,9 +416,9 @@ ], "text/plain": [ " id energized u_pu u u_angle p q\n", - "0 1 1 0.998883 10488.272608 0.013952 3.120033e+07 6.755260e+06\n", - "1 2 1 0.952278 9998.918834 -0.009381 -2.002141e+07 -4.812474e+06\n", - "2 6 1 0.962198 10103.079530 -0.005095 -9.968971e+06 -1.955178e+06" + "0 1 1 0.998883 10488.272639 0.013952 3.120033e+07 6.755258e+06\n", + "1 2 1 0.952278 9998.918863 -0.009381 -2.002141e+07 -4.812473e+06\n", + "2 6 1 0.962198 10103.079560 -0.005095 -9.968972e+06 -1.955178e+06" ] }, "metadata": {}, @@ -496,49 +496,49 @@ "type": "float" } ], - "ref": "2583e337-cf08-4a98-a85d-a37b59cd5a95", + "ref": "1c71236e-d86f-42da-8c34-06c18d899166", "rows": [ [ "0", "3", "1", - "0.9839662565967597", - "17361932.916925427", - "3929896.867020286", - "979.9036411151974", - "17801146.142797504", - "-16638620.167827902", - "-3681085.99926099", - "983.9662565967598", - "17040952.884836126" + "0.9839662806034554", + "17361933.57170148", + "3929896.2511004177", + "979.9036658939409", + "17801146.645443603", + "-16638620.786666146", + "-3681085.356524907", + "983.9662806034554", + "17040953.350223716" ], [ "1", "5", "1", - "0.20596174905327938", - "-3382792.082889292", - "-1131387.9510322888", - "205.9617490532794", - "3566976.446768259", - "3413780.3461151817", - "838798.2309692331", - "200.88640027400496", - "3515320.571981936" + "0.2059617546517118", + "-3382792.2554841996", + "-1131387.7734119822", + "205.9617546517118", + "3566976.5541127403", + "3413780.520579557", + "838798.0529906373", + "200.88640694069767", + "3515320.6989390478" ], [ "2", "8", "1", - "0.7812594842898822", - "13838395.097443003", - "2825362.6676971843", - "777.480096381324", - "14123875.285379415", - "-13382751.731678305", - "-2793976.2998670056", - "781.2594842898823", - "13671296.48116656" + "0.7812595019018519", + "13838395.569572411", + "2825362.2256479375", + "777.4801146842773", + "14123875.659537632", + "-13382752.182809198", + "-2793975.842977588", + "781.2595019018519", + "13671296.82940235" ] ], "shape": { @@ -585,12 +585,12 @@ " 1\n", " 0.983966\n", " 1.736193e+07\n", - " 3.929897e+06\n", - " 979.903641\n", + " 3.929896e+06\n", + " 979.903666\n", " 1.780115e+07\n", " -1.663862e+07\n", - " -3.681086e+06\n", - " 983.966257\n", + " -3.681085e+06\n", + " 983.966281\n", " 1.704095e+07\n", " \n", " \n", @@ -600,25 +600,25 @@ " 0.205962\n", " -3.382792e+06\n", " -1.131388e+06\n", - " 205.961749\n", - " 3.566976e+06\n", - " 3.413780e+06\n", - " 8.387982e+05\n", - " 200.886400\n", + " 205.961755\n", + " 3.566977e+06\n", + " 3.413781e+06\n", + " 8.387981e+05\n", + " 200.886407\n", " 3.515321e+06\n", " \n", " \n", " 2\n", " 8\n", " 1\n", - " 0.781259\n", + " 0.781260\n", " 1.383840e+07\n", - " 2.825363e+06\n", - " 777.480096\n", + " 2.825362e+06\n", + " 777.480115\n", " 1.412388e+07\n", " -1.338275e+07\n", " -2.793976e+06\n", - " 781.259484\n", + " 781.259502\n", " 1.367130e+07\n", " \n", " \n", @@ -627,14 +627,14 @@ ], "text/plain": [ " id energized loading p_from q_from i_from \\\n", - "0 3 1 0.983966 1.736193e+07 3.929897e+06 979.903641 \n", - "1 5 1 0.205962 -3.382792e+06 -1.131388e+06 205.961749 \n", - "2 8 1 0.781259 1.383840e+07 2.825363e+06 777.480096 \n", + "0 3 1 0.983966 1.736193e+07 3.929896e+06 979.903666 \n", + "1 5 1 0.205962 -3.382792e+06 -1.131388e+06 205.961755 \n", + "2 8 1 0.781260 1.383840e+07 2.825362e+06 777.480115 \n", "\n", " s_from p_to q_to i_to s_to \n", - "0 1.780115e+07 -1.663862e+07 -3.681086e+06 983.966257 1.704095e+07 \n", - "1 3.566976e+06 3.413780e+06 8.387982e+05 200.886400 3.515321e+06 \n", - "2 1.412388e+07 -1.338275e+07 -2.793976e+06 781.259484 1.367130e+07 " + "0 1.780115e+07 -1.663862e+07 -3.681085e+06 983.966281 1.704095e+07 \n", + "1 3.566977e+06 3.413781e+06 8.387981e+05 200.886407 3.515321e+06 \n", + "2 1.412388e+07 -1.338275e+07 -2.793976e+06 781.259502 1.367130e+07 " ] }, "metadata": {}, @@ -692,27 +692,27 @@ "type": "float" } ], - "ref": "2b4aea35-c988-4d03-9e15-424a00b61172", + "ref": "eb667da2-17fa-4238-bf0b-d71ea7a1c589", "rows": [ [ "0", "4", "1", - "20021412.25071719", - "4812473.950293278", - "1188.9891440639801", - "20591669.5300653", - "0.9723064087389565" + "20021413.042150345", + "4812473.12993689", + "1188.9891739639088", + "20591670.107855566", + "0.972306419891232" ], [ "1", "7", "1", - "9968971.385563152", - "1955178.0688977723", - "580.5397974464564", - "10158893.235351758", - "0.9813048680216758" + "9968971.662229644", + "1955177.789986951", + "580.5398081933141", + "10158893.453166831", + "0.9813048742156083" ] ], "shape": { @@ -754,8 +754,8 @@ " 4\n", " 1\n", " 2.002141e+07\n", - " 4.812474e+06\n", - " 1188.989144\n", + " 4.812473e+06\n", + " 1188.989174\n", " 2.059167e+07\n", " 0.972306\n", " \n", @@ -763,9 +763,9 @@ " 1\n", " 7\n", " 1\n", - " 9.968971e+06\n", + " 9.968972e+06\n", " 1.955178e+06\n", - " 580.539797\n", + " 580.539808\n", " 1.015889e+07\n", " 0.981305\n", " \n", @@ -775,8 +775,8 @@ ], "text/plain": [ " id energized p q i s \\\n", - "0 4 1 2.002141e+07 4.812474e+06 1188.989144 2.059167e+07 \n", - "1 7 1 9.968971e+06 1.955178e+06 580.539797 1.015889e+07 \n", + "0 4 1 2.002141e+07 4.812473e+06 1188.989174 2.059167e+07 \n", + "1 7 1 9.968972e+06 1.955178e+06 580.539808 1.015889e+07 \n", "\n", " pf \n", "0 0.972306 \n", @@ -820,14 +820,6 @@ "**In the following, state estimation is performed with the Newton-Raphson method. Note the difference in the results for the nodes compared to the results from the iterative linear method.**" ] }, - { - "cell_type": "markdown", - "id": "3b75b0d1", - "metadata": {}, - "source": [ - "***Note: At the time of writing, global angle current sensors are not yet supported for state estimation with the Newton Raphson calculation method.***" - ] - }, { "cell_type": "code", "execution_count": 7, @@ -886,37 +878,37 @@ "type": "float" } ], - "ref": "caea82fd-6eb9-44c5-8642-342e94b06de3", + "ref": "d7f8ec6d-b55f-4816-a763-fe49637dfa00", "rows": [ [ "0", "1", "1", - "0.9991710381816102", - "10491.295900906907", - "0.013902776698068324", - "31142583.571411327", - "6983679.675587834" + "0.9991708901200401", + "10491.294346260422", + "0.013902784770788483", + "31142585.04346322", + "6983679.275171502" ], [ "1", "2", "1", - "0.952401975007945", - "10000.220737583422", - "-0.009023471573391229", - "-19972810.645222906", - "-4996913.716750917" + "0.9524018187530439", + "10000.21909690696", + "-0.009023473027201348", + "-19972811.415234227", + "-4996912.929141694" ], [ "2", "6", "1", - "0.9623763232439356", - "10104.951394061323", - "-0.004879305124677138", - "-9960845.146609124", - "-2000371.618627113" + "0.9623761687766939", + "10104.949772155285", + "-0.004879304472340826", + "-9960845.389604798", + "-2000371.3300378183" ] ], "shape": { @@ -958,30 +950,30 @@ " 1\n", " 1\n", " 0.999171\n", - " 10491.295901\n", + " 10491.294346\n", " 0.013903\n", - " 3.114258e+07\n", - " 6.983680e+06\n", + " 3.114259e+07\n", + " 6.983679e+06\n", " \n", " \n", " 1\n", " 2\n", " 1\n", " 0.952402\n", - " 10000.220738\n", + " 10000.219097\n", " -0.009023\n", " -1.997281e+07\n", - " -4.996914e+06\n", + " -4.996913e+06\n", " \n", " \n", " 2\n", " 6\n", " 1\n", " 0.962376\n", - " 10104.951394\n", + " 10104.949772\n", " -0.004879\n", " -9.960845e+06\n", - " -2.000372e+06\n", + " -2.000371e+06\n", " \n", " \n", "\n", @@ -989,9 +981,9 @@ ], "text/plain": [ " id energized u_pu u u_angle p q\n", - "0 1 1 0.999171 10491.295901 0.013903 3.114258e+07 6.983680e+06\n", - "1 2 1 0.952402 10000.220738 -0.009023 -1.997281e+07 -4.996914e+06\n", - "2 6 1 0.962376 10104.951394 -0.004879 -9.960845e+06 -2.000372e+06" + "0 1 1 0.999171 10491.294346 0.013903 3.114259e+07 6.983679e+06\n", + "1 2 1 0.952402 10000.219097 -0.009023 -1.997281e+07 -4.996913e+06\n", + "2 6 1 0.962376 10104.949772 -0.004879 -9.960845e+06 -2.000371e+06" ] }, "metadata": {}, @@ -1071,27 +1063,27 @@ "type": "float" } ], - "ref": "a4f08673-f9d4-4767-9972-28a30110f2e9", + "ref": "253b7f66-6c72-4dda-a78c-dabcca55d3eb", "rows": [ [ "0", "1", "1", - "0.9991437674327667", - "10491.00955804405", - "0.013840775559241087", - "31099408.499957506", - "7028384.093707517" + "0.9991437674327666", + "10491.009558044048", + "0.013840775559241085", + "31099408.499957386", + "7028384.093707515" ], [ "1", "2", "1", - "0.9524178651683304", + "0.9524178651683305", "10000.38758426747", - "-0.008984925191110308", - "-19919628.609156385", - "-5002840.651668097" + "-0.008984925191110287", + "-19919628.609156225", + "-5002840.651668073" ], [ "2", @@ -1099,9 +1091,9 @@ "1", "0.9623167164236469", "10104.325522448293", - "-0.004855850368130788", - "-9973746.110207152", - "-2041416.173354753" + "-0.004855850368130793", + "-9973746.110207208", + "-2041416.173354726" ] ], "shape": { @@ -1301,37 +1293,37 @@ "type": "float" } ], - "ref": "32799643-7af0-4303-a188-2df3c4c455aa", + "ref": "33664645-b7b9-4c4a-aa4f-5dc6a1e12d14", "rows": [ [ "0", "1", "1", - "0.9989385385268099", - "10488.854654531504", - "0.01136001123709097", - "31136434.596432924", - "6783582.245855995" + "0.9989385424783656", + "10488.854696022838", + "0.011360008830932673", + "31136436.028492313", + "6783580.872185905" ], [ "1", "2", "1", - "0.9523781053492837", - "9999.970106167479", - "-0.01196892169392874", - "-20049653.33460453", - "-4759283.446917456" + "0.952378109145919", + "9999.97014603215", + "-0.011968926982357539", + "-20049654.07294122", + "-4759282.686797079" ], [ "2", "6", "1", - "0.9623034612157979", - "10104.186342765877", - "-0.0074960884705240465", - "-9880384.194081154", - "-2039703.8029571807" + "0.9623034650076148", + "10104.186382579956", + "-0.007496093629550958", + "-9880384.817412749", + "-2039703.1408614179" ] ], "shape": { @@ -1373,17 +1365,17 @@ " 1\n", " 1\n", " 0.998939\n", - " 10488.854655\n", + " 10488.854696\n", " 0.011360\n", - " 3.113643e+07\n", - " 6.783582e+06\n", + " 3.113644e+07\n", + " 6.783581e+06\n", " \n", " \n", " 1\n", " 2\n", " 1\n", " 0.952378\n", - " 9999.970106\n", + " 9999.970146\n", " -0.011969\n", " -2.004965e+07\n", " -4.759283e+06\n", @@ -1393,10 +1385,10 @@ " 6\n", " 1\n", " 0.962303\n", - " 10104.186343\n", + " 10104.186383\n", " -0.007496\n", - " -9.880384e+06\n", - " -2.039704e+06\n", + " -9.880385e+06\n", + " -2.039703e+06\n", " \n", " \n", "\n", @@ -1404,9 +1396,9 @@ ], "text/plain": [ " id energized u_pu u u_angle p q\n", - "0 1 1 0.998939 10488.854655 0.011360 3.113643e+07 6.783582e+06\n", - "1 2 1 0.952378 9999.970106 -0.011969 -2.004965e+07 -4.759283e+06\n", - "2 6 1 0.962303 10104.186343 -0.007496 -9.880384e+06 -2.039704e+06" + "0 1 1 0.998939 10488.854696 0.011360 3.113644e+07 6.783581e+06\n", + "1 2 1 0.952378 9999.970146 -0.011969 -2.004965e+07 -4.759283e+06\n", + "2 6 1 0.962303 10104.186383 -0.007496 -9.880385e+06 -2.039703e+06" ] }, "metadata": {}, @@ -1599,10 +1591,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[10465.44334795 9977.00921626 10080.55294686]\n", - " [10480.47973115 9986.25420521 10093.14548916]\n", - " [10415.61043717 9919.8471072 10025.79644647]\n", - " [10451.69929631 9957.73804314 10066.52666673]]\n" + "[[10465.44337889 9977.00924537 10080.55297645]\n", + " [10480.47976209 9986.25423433 10093.14551875]\n", + " [10415.6104826 9919.84715153 10025.79649139]\n", + " [10451.69932494 9957.73806947 10066.52669289]]\n" ] } ], diff --git a/docs/user_manual/calculations.md b/docs/user_manual/calculations.md index 78a829f062..2e4fc64b57 100644 --- a/docs/user_manual/calculations.md +++ b/docs/user_manual/calculations.md @@ -116,11 +116,11 @@ See also the [current sensor component documentation](./components.md#global-ang ``` ```{note} -It is not possible to mix [power sensors](./components.md#generic-current-sensor) with -[current sensors](#./components.mdgeneric-current-sensor) on the same terminal of the same component. +It is not possible to mix [power sensors](./components.md#generic-power-sensor) with +[current sensors](./components.md#generic-current-sensor) on the same terminal of the same component. It is also not possible to mix -[current sensors with global angle measurement type](#./components.mdgeneric-current-sensor) with -[current sensors with local angle measurement type](#./components.mdgeneric-current-sensor) on the same terminal of the +[current sensors with global angle measurement type](./components.md#generic-current-sensor) with +[current sensors with local angle measurement type](./components.md#generic-current-sensor) on the same terminal of the same component. However, such mixing of sensor types is allowed as long as they are on different terminals. ``` @@ -133,11 +133,6 @@ On the other hand with unobservable systems, exceptions raised from calculations prevented. ``` -```{warning} -At the time of writing, the component [global angle current sensor](./components.md#global-angle-current-sensors) -is not supported in the calculation of [Newton-Raphson state estimation](#newton-raphson-state-estimation). -``` - ##### Necessary observability condition Based on the requirements of observability mentioned above, users need to satisfy at least the following conditions for @@ -378,14 +373,8 @@ The algorithm is as follows: 1. Build $Y_{bus}$ matrix 2. Initialization of $U_N^0$ to $1$ plus the intrinsic phase shift of transformers 3. Calculate injected currents: $I_N^i$ for $i^{th}$ iteration. - The injected currents are calculated as per ZIP model of loads and generation using $U_N$. - $ - \begin{eqnarray} - I_N = \overline{S_{Z}} \cdot U_{N} - + \overline{(\frac{S_{I}}{U_{N}})} \cdot |U_{N}| - + \overline{(\frac{S_{P}}{U_N})} - \end{eqnarray} - $ + The injected currents are calculated as per ZIP model of loads and generation using $U_N$: + $I_N = \overline{S_{Z}} \cdot U_{N} + \overline{(\frac{S_{I}}{U_{N}})} \cdot |U_{N}| +\overline{(\frac{S_{P}}{U_N})}$ 4. Solve linear equation: $YU_N^i = I_N^i$ 5. Check convergence: If maximum voltage deviation from the previous iteration is greater than the tolerance setting (i.e., $u^{(i-1)}_\sigma > u_\epsilon$), then go back to step 3. @@ -546,8 +535,8 @@ Where $S_k$ and $\sigma_{P,k}$ and $\sigma_{Q,k}$ are the measured value and the appliances. ```{note} -It is not possible to mix [power sensors](./components.md#generic-current-sensor) with -[current sensors](#./components.mdgeneric-current-sensor) on the same terminal of the same component. +It is not possible to mix [power sensors](./components.md#generic-power-sensor) with +[current sensors](./components.md#generic-current-sensor) on the same terminal of the same component. It is also not possible to mix [current sensors with global angle measurement type](./components.md#global-angle-current-sensors) with [current sensors with local angle measurement type](./components.md#local-angle-current-sensors) on the same terminal @@ -776,11 +765,6 @@ As for the [iterative linear](#iterative-linear-state-estimation) approach, duri at each bus are updated using ones from the previous iteration. The system error of the phase shift converges to zero. -```{note} -Newton-Raphson state estimation does not support current sensors with `global_angle` `angle_measurement_type` at this -moment. See also [this issue](https://github.com/PowerGridModel/power-grid-model/issues/967). -``` - ```{warning} The algorithm will assume angles to be zero by default (see the details about voltage sensors). In observable systems this helps better outputting correct results. diff --git a/docs/user_manual/components.md b/docs/user_manual/components.md index 98e8269bf8..56e28671ae 100644 --- a/docs/user_manual/components.md +++ b/docs/user_manual/components.md @@ -836,11 +836,11 @@ is placed for it to function. ``` ```{note} -It is not possible to mix [power sensors](./components.md#generic-current-sensor) with -[current sensors](#./components.mdgeneric-current-sensor) on the same terminal of the same component. +It is not possible to mix [power sensors](./components.md#generic-power-sensor) with +[current sensors](./components.md#generic-current-sensor) on the same terminal of the same component. It is also not possible to mix -[current sensors with global angle measurement type](#./components.mdgeneric-current-sensor) with -[current sensors with local angle measurement type](#./components.mdgeneric-current-sensor) on the same terminal of the +[current sensors with global angle measurement type](./components.md#generic-current-sensor) with +[current sensors with local angle measurement type](./components.md#generic-current-sensor) on the same terminal of the same component. However, such mixing of sensor types is allowed as long as they are on different terminals. ``` @@ -923,11 +923,6 @@ $$ ### Generic Current Sensor -```{warning} -At the time of writing, state estimation with current sensors with `global_angle` `angle_measurement_type` is not -supported by the Newton-Raphson calculation method. -``` - * type name: `generic_current_sensor` `current_sensor` is an abstract class for symmetric and asymmetric current sensor and is derived from @@ -941,11 +936,11 @@ link is a `branch`. ``` ```{note} -It is not possible to mix [power sensors](./components.md#generic-current-sensor) with -[current sensors](#./components.mdgeneric-current-sensor) on the same terminal of the same component. +It is not possible to mix [power sensors](./components.md#generic-power-sensor) with +[current sensors](./components.md#generic-current-sensor) on the same terminal of the same component. It is also not possible to mix -[current sensors with global angle measurement type](#./components.mdgeneric-current-sensor) with -[current sensors with local angle measurement type](#./components.mdgeneric-current-sensor) on the same terminal of the +[current sensors with global angle measurement type](./components.md#generic-current-sensor) with +[current sensors with local angle measurement type](./components.md#generic-current-sensor) on the same terminal of the same component. However, such mixing of sensor types is allowed as long as they are on different terminals. ``` @@ -961,11 +956,6 @@ However, such mixing of sensor types is allowed as long as they are on different #### Current Sensor Concrete Types -```{warning} -At the time of writing, state estimation with current sensors with `global_angle` `angle_measurement_type` is not -supported by the Newton-Raphson calculation method. -``` - There are two concrete types of current sensor. They share similar attributes: the meaning of `RealValueInput` is different, as shown in the table below. @@ -1026,11 +1016,6 @@ $$ \end{eqnarray} $$ -```{warning} -At the time of writing, state estimation with current sensors with `global_angle` `angle_measurement_type` is not -supported by the Newton-Raphson calculation method. -``` - ##### Local angle current sensors Current sensors with `angle_measurement_type` equal to `AngleMeasurementType.local_angle` measure the phase shift diff --git a/power_grid_model_c/power_grid_model/include/power_grid_model/main_model_impl.hpp b/power_grid_model_c/power_grid_model/include/power_grid_model/main_model_impl.hpp index a3e481adca..5211e6d4f9 100644 --- a/power_grid_model_c/power_grid_model/include/power_grid_model/main_model_impl.hpp +++ b/power_grid_model_c/power_grid_model/include/power_grid_model/main_model_impl.hpp @@ -559,18 +559,7 @@ class MainModelImpl, ComponentLis return *meta_data_; } - void check_no_experimental_features_used(Options const& options) const { - if (options.calculation_type == CalculationType::state_estimation && - options.calculation_method == CalculationMethod::newton_raphson && - state_.components.template size() > 0 && - std::ranges::any_of( - state_.components.template citer(), [](auto const& current_sensor) { - return current_sensor.get_angle_measurement_type() == AngleMeasurementType::global_angle; - })) { - throw ExperimentalFeature{ - "Newton-Raphson state estimation is not implemented for global angle current sensors"}; - } - } + void check_no_experimental_features_used(Options const& /*options*/) const {} private: template diff --git a/tests/data/state_estimation/current-sensor/global-current-sensor/params.json b/tests/data/state_estimation/current-sensor/global-current-sensor/params.json index ec21167a01..1c7166cb4b 100644 --- a/tests/data/state_estimation/current-sensor/global-current-sensor/params.json +++ b/tests/data/state_estimation/current-sensor/global-current-sensor/params.json @@ -7,10 +7,5 @@ "atol": { "default": 1e-8, ".+_residual": 5e-4 - }, - "extra_params": { - "newton_raphson": { - "experimental_features": "enabled" - } } } \ No newline at end of file diff --git a/tests/native_api_tests/test_api_model.cpp b/tests/native_api_tests/test_api_model.cpp index f19157c443..1482b61b84 100644 --- a/tests/native_api_tests/test_api_model.cpp +++ b/tests/native_api_tests/test_api_model.cpp @@ -1062,54 +1062,6 @@ TEST_CASE("API Model") { } } } - - SUBCASE("Global angle current sensor for NRSE is experimental: not implemented") { - auto const* const input_data_se_json = R"json({ - "version": "1.0", - "type": "input", - "is_batch": false, - "attributes": {}, - "data": { - "node": [ - {"id": 1, "u_rated": 10000}, - {"id": 2, "u_rated": 10000} - ], - "line": [ - {"id": 3, "from_node": 1, "to_node": 2, "from_status": 0, "to_status": 0, "r1": 0.000416, "x1": 0.000136, "c1": 1e-09, "tan1": 0} - ], - "sym_current_sensor": [ - {"id": 4, "measured_object": 3, "measured_terminal_type": 0, "angle_measurement_type": 0, "i_sigma": 1, "i_angle_sigma": 0.05, "i_measured": 10, "i_angle_measured": 0.3}, - {"id": 5, "measured_object": 3, "measured_terminal_type": 1, "angle_measurement_type": 1, "i_sigma": 1, "i_angle_sigma": 0.05, "i_measured": 10, "i_angle_measured": 0.3} - ] - } -})json"; - - auto const owning_input_dataset_se = load_dataset(input_data_se_json); - auto const& input_dataset_se = owning_input_dataset_se.dataset; - - auto const run_se_with_current_sensor = [&input_dataset_se](PGM_CalculationMethod method, - PGM_ExperimentalFeatures experimental_features) { - Model model_with_current_sensor{50.0, input_dataset_se}; - Options experimental_options{}; - experimental_options.set_calculation_type(PGM_state_estimation); - experimental_options.set_calculation_method(method); - experimental_options.set_experimental_features(experimental_features); - DatasetMutable const output_dataset{"sym_output", false, 1}; - model_with_current_sensor.calculate(experimental_options, output_dataset); - }; - for (auto const method : {PGM_default_method, PGM_iterative_linear, PGM_newton_raphson}) { - CAPTURE(method); - if (method == PGM_newton_raphson) { - CHECK_THROWS_WITH_AS( - run_se_with_current_sensor(method, PGM_experimental_features_disabled), - "Newton-Raphson state estimation is not implemented for global angle current sensors", - PowerGridRegularError); - } else { - CHECK_NOTHROW(run_se_with_current_sensor(method, PGM_experimental_features_disabled)); - } - CHECK_NOTHROW(run_se_with_current_sensor(method, PGM_experimental_features_enabled)); - } - } } } // namespace power_grid_model_cpp