diff --git a/.CI/ReSim/prepare_pr.sh b/.CI/ReSim/prepare_pr.sh
new file mode 100644
index 0000000000..c2bb77c958
--- /dev/null
+++ b/.CI/ReSim/prepare_pr.sh
@@ -0,0 +1,7 @@
+event_number=$1
+# checkout the pull request
+docker run --name compile_msl --rm --volume shared_data:/shared_data wsm_image /shared_data/run_scripts/git_pr_pull.sh $event_number
+# compile msl binaries
+docker run --name compile_msl --rm --volume shared_data:/shared_data wsm_image /shared_data/run_scripts/compile_msl.sh /shared_data/repos/pr_testing/ModelicaStandardLibrary
+# delete old PRs with same number (in case of a new commit on a PR)
+docker run --name compile_msl --rm --volume shared_data:/shared_data dymola_image /shared_data/run_scripts/delete_old_PRs.sh $event_number
\ No newline at end of file
diff --git a/.CI/ReSim/run_pr.sh b/.CI/ReSim/run_pr.sh
new file mode 100644
index 0000000000..deb92e9655
--- /dev/null
+++ b/.CI/ReSim/run_pr.sh
@@ -0,0 +1,33 @@
+event_number=$1
+master_hash=$2
+pkg_name=$3
+
+# Run Modelica in all tools
+tools=$4
+
+for tool in $tools
+do
+ uppertool=$tool | tr 'a-z' 'A-Z'
+ docker run --rm --name $tool\_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data $tool\_image python /shared_data/run_scripts/$uppertool\_PR_compare.py $master_hash $event_number $pkg_name
+done
+
+#docker run --rm --name dymola_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data dymola_image python /shared_data/run_scripts/Dymola_PR_compare.py $master_hash $event_number $pkg_name
+#docker run --rm --name om_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data om_image python /shared_data/run_scripts/OM_PR_compare.py $master_hash $event_number $pkg_name
+#docker run --rm --name wsm_pr_compare_$event_number\_$pkg_name --volume shared_data:/shared_data wsm_image python /shared_data/run_scripts/WSM_PR_compare.py $master_hash $event_number $pkg_name
+
+# create an overview over all tools
+docker run --name create_overview_$event_number\_$pkg_name --volume shared_data:/shared_data om_image python /shared_data/run_scripts/overview_report.py $event_number $pkg_name
+
+# clear published directory (web server)
+if [ -d "/var/www/html/prs/$event_number/$pkg_name" ]; then
+ rm -rf "/var/www/html/prs/$event_number/$pkg_name"
+fi
+if [ ! -d "/var/www/html/prs/$event_number" ]; then
+ mkdir /var/www/html/prs/$event_number
+fi
+mkdir /var/www/html/prs/$event_number/$pkg_name
+
+# copy data to webserver directory
+docker cp create_overview_$event_number\_$pkg_name:/shared_data/resim_output/PRs/PR_$event_number/$pkg_name/report /var/www/html/prs/$event_number/$pkg_name
+docker rm create_overview_$event_number\_$pkg_name
+exit $(head -n 1 /var/www/html/prs/$event_number/$pkg_name/status.txt)
\ No newline at end of file
diff --git a/.github/workflows/CI_ReSim_trigger.yml b/.github/workflows/CI_ReSim_trigger.yml
new file mode 100644
index 0000000000..33b5cc1f24
--- /dev/null
+++ b/.github/workflows/CI_ReSim_trigger.yml
@@ -0,0 +1,18 @@
+name: CI ReSim Trigger
+
+on:
+ pull_request:
+ workflow_dispatch:
+
+env:
+ EVENT_NUMBER: ${{ github.event.number }}
+ PR_SHA: ${{ github.event.pull_request.base.sha }}
+
+jobs:
+ get_PR_data:
+ runs-on: ubuntu-latest
+ steps:
+ - name: print vars
+ run: |
+ echo "Event Number: ${{ github.env.EVENT_NUMBER }}"
+ echo "PR Base Hash: ${{ github.env.PR_SHA }}"
diff --git a/.github/workflows/PRTesting.yml b/.github/workflows/PRTesting.yml
new file mode 100644
index 0000000000..07753dbbfb
--- /dev/null
+++ b/.github/workflows/PRTesting.yml
@@ -0,0 +1,44 @@
+name: CI ReSim
+
+on:
+ pull_request_target:
+ types: [labeled]
+ workflow_dispatch:
+
+env:
+ PR_SERVER: ${{ vars.LTX_PR_SERVER }}
+ TESTING_TOOLS: ${{ vars.LTX_TESTING_TOOLS }}
+ EVENT_NUMBER: ${{ github.event.number }}
+ PR_SHA: ${{ github.event.pull_request.base.sha }}
+
+jobs:
+ prepare:
+ runs-on: [ self-hosted, Linux, regression_testing ]
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ sparse-checkout: './.CI/ReSim'
+
+ - name: Checkout code in docker
+ run: ./.CI/ReSim/prepare_pr.sh ${{ env.EVENT_NUMBER }}
+
+ testrun_modelica:
+ needs: prepare
+ runs-on: [ self-hosted, Linux, regression_testing ]
+ environment:
+ name: Report modelica
+ url: ${{ env.PR_SERVER }}/${{ env.EVENT_NUMBER }}/Modelica/report/PR_comparison_report.html
+ steps:
+ - name: Run tests modelica
+ run: ./.CI/ReSim/run_pr.sh ${{ env.EVENT_NUMBER }} ${{ env.PR_SHA }} Modelica ${{ env.TESTING_TOOLS }}
+
+
+ testrun_modelicatest:
+ needs: prepare
+ runs-on: [ self-hosted, Linux, regression_testing ]
+ environment:
+ name: Report modelicatest
+ url: ${{ env.PR_SERVER }}/${{ env.EVENT_NUMBER }}/ModelicaTest/report/PR_comparison_report.html
+ steps:
+ - name: Run tests modelicatest
+ run: ./.CI/ReSim/run_pr.sh ${{ env.EVENT_NUMBER }} ${{ env.PR_SHA }} ModelicaTest ${{ env.TESTING_TOOLS }}
diff --git a/Modelica/Blocks/Continuous.mo b/Modelica/Blocks/Continuous.mo
index bd3b79f9f1..fc168e718a 100644
--- a/Modelica/Blocks/Continuous.mo
+++ b/Modelica/Blocks/Continuous.mo
@@ -765,7 +765,7 @@ to compute u by an algebraic equation.
"Control error (set point - measurement)";
parameter .Modelica.Blocks.Types.SimpleController controllerType=
.Modelica.Blocks.Types.SimpleController.PID "Type of controller";
- parameter Real k = 1 "Gain of controller, must be non-zero";
+ parameter Real k=1 "Gain of controller, must be non-zero";
parameter SI.Time Ti(min=Modelica.Constants.small)=0.5
"Time constant of Integrator block" annotation (Dialog(enable=
controllerType == .Modelica.Blocks.Types.SimpleController.PI or
diff --git a/Modelica/Blocks/Sources.mo b/Modelica/Blocks/Sources.mo
index 8fbd5f270a..718977bebb 100644
--- a/Modelica/Blocks/Sources.mo
+++ b/Modelica/Blocks/Sources.mo
@@ -1595,16 +1595,16 @@ parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4];
parameter Real table[:, :] = fill(0.0, 0, 2)
"Table matrix (time = first column; e.g., table=[0, 0; 1, 1; 2, 4])"
annotation (Dialog(group="Table data definition",enable=not tableOnFile));
- parameter String tableName="NoName"
+ parameter String tableName = "NoName"
"Table name on file or in function usertab (see docu)"
annotation (Dialog(group="Table data definition",enable=tableOnFile));
- parameter String fileName="NoName" "File where matrix is stored"
+ parameter String fileName = "NoName" "File where matrix is stored"
annotation (Dialog(
group="Table data definition",
enable=tableOnFile,
loadSelector(filter="Text files (*.txt);;MATLAB MAT-files (*.mat);;Comma-separated values files (*.csv)",
caption="Open file in which table is present")));
- parameter String delimiter="," "Column delimiter character for CSV file"
+ parameter String delimiter = "," "Column delimiter character for CSV file"
annotation (Dialog(
group="Table data definition",
enable=tableOnFile and isCsvExt),
@@ -1618,10 +1618,10 @@ parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4];
"Columns of table to be interpolated"
annotation (Dialog(group="Table data interpretation",
groupImage="modelica://Modelica/Resources/Images/Blocks/Sources/CombiTimeTable.png"));
- parameter Modelica.Blocks.Types.Smoothness smoothness=Modelica.Blocks.Types.Smoothness.LinearSegments
+ parameter Modelica.Blocks.Types.Smoothness smoothness = Modelica.Blocks.Types.Smoothness.LinearSegments
"Smoothness of table interpolation"
annotation (Dialog(group="Table data interpretation"));
- parameter Modelica.Blocks.Types.Extrapolation extrapolation=Modelica.Blocks.Types.Extrapolation.LastTwoPoints
+ parameter Modelica.Blocks.Types.Extrapolation extrapolation = Modelica.Blocks.Types.Extrapolation.LastTwoPoints
"Extrapolation of data outside the definition range"
annotation (Dialog(group="Table data interpretation"));
parameter SI.Time timeScale(
@@ -1635,7 +1635,7 @@ parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4];
parameter SI.Time shiftTime=startTime
"Shift time of first table column"
annotation (Dialog(group="Table data interpretation"));
- parameter Modelica.Blocks.Types.TimeEvents timeEvents=Modelica.Blocks.Types.TimeEvents.Always
+ parameter Modelica.Blocks.Types.TimeEvents timeEvents = Modelica.Blocks.Types.TimeEvents.Always
"Time event handling of table interpolation"
annotation (Dialog(group="Table data interpretation", enable=smoothness == Modelica.Blocks.Types.Smoothness.LinearSegments));
parameter Boolean verboseExtrapolation=false
@@ -1650,7 +1650,7 @@ parameter Real table[:, 2]=[0, 0; 1, 1; 2, 4];
final parameter Real t_maxScaled=Internal.getTimeTableTmax(tableID)
"Maximum (scaled) abscissa value defined in table";
protected
- final parameter Real p_offset[nout]=(if size(offset, 1) == 1 then ones(nout)*offset[1] else offset)
+ final parameter Real p_offset[nout] = (if size(offset, 1) == 1 then ones(nout)*offset[1] else offset)
"Offsets of output signals";
parameter Modelica.Blocks.Types.ExternalCombiTimeTable tableID=
Modelica.Blocks.Types.ExternalCombiTimeTable(