diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..aca3e88 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,49 @@ +--- +name: Build Project + +on: + workflow_call: + pull_request: + branches: + - main +jobs: + build: + name: Build Release + + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + release_suffix: out + - os: windows-latest + release_suffix: exe + - os: macos-latest + release_suffix: out + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + - name: Setup Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.0' + + - name: Install Ceedling + run: gem install ceedling + + - name: Build Release + run: ceedling release + + + - name: Rename build binary + shell: pwsh + run: Move-Item -Path build/release/flowVC.out -Destination build/release/flowVC.${{ matrix.release_suffix}} + + - name: Upload Build Artifact + uses: actions/upload-artifact@v4 + with: + name: flowVC_${{ runner.os }} + path: build/release/flowVC.${{ matrix.release_suffix}} + overwrite: true diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 0a670c8..cd6ee0a 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -5,7 +5,7 @@ on: push: branches: - main - - alpha + jobs: semantic-release: @@ -27,19 +27,11 @@ jobs: with: node-version: "lts/*" - - name: Generate Release using Docker - run: | - docker run \ - --interactive \ - --rm \ - -u $(id -u):$(id -g) \ - --volume .:/home/dev/project \ - throwtheswitch/madsciencelab-plugins:1.0.0 \ - ceedling release + - name: Build Release + uses: ./.github/workflows/build.yml - - name: Prepare prerelease semantic - if: github.ref != 'refs/heads/main' - run: mv .releaserc.prerelease.json .releaserc.json + - name: Download Artifacts + uses: actions/download-artifact@v4 - name: Semantic Release uses: cycjimmy/semantic-release-action@v4 diff --git a/.releaserc.json b/.releaserc.json index 551f8a9..5eab74b 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -6,7 +6,7 @@ [ "@semantic-release/github", { - "assets": ["build/release/flowVC.out"] + "assets": ["flowVC_Linux", "flowVC_Windows", "flowVC_macOS"] } ], "@semantic-release/git" diff --git a/makefile b/makefile index e41abfd..17dafe2 100644 --- a/makefile +++ b/makefile @@ -14,18 +14,15 @@ else endif .PHONY: clean -.PHONY: test .PHONY: all -PATHU = unity/src/ PATHS = src/ PATHT = test/ -PATHB = build/ -PATHD = build/depends/ -PATHO = build/objs/ -PATHR = build/results/ +PATHB = build/release/ +PATHD = build/release/dependencies/ +PATHO = build/release/out/ -BUILD_PATHS = $(PATHB) $(PATHD) $(PATHO) $(PATHR) +BUILD_PATHS = $(PATHB) $(PATHD) $(PATHO) SRCT = $(wildcard $(PATHT)*.c) @@ -36,10 +33,10 @@ LFLAG= -lm # Set build mode ifeq ($(mode),debug) - CFLAGS = -g -Wall -O0 -I. -I$(PATHU) -I$(PATHS) -DTEST -DUNITY_INCLUDE_CONFIG_H -DDEBUG_LEVEL=1 + CFLAGS = -g -Wall -O0 -I. -I$(PATHS) -DDEBUG_LEVEL=1 else mode = release - CFLAGS = -Wall -O3 -I. -I$(PATHU) -I$(PATHS) -DTEST -DUNITY_INCLUDE_CONFIG_H + CFLAGS = -Wall -O3 -I. -I$(PATHS) endif @@ -74,44 +71,6 @@ $(PATHO)%.o: $(PATHS)%.c $(COMPILE) $(CFLAGS) $< -o $@ - - -############################ Testing ####################################### -############################################################################ - -RESULTS = $(patsubst $(PATHT)Test%.c,$(PATHR)Test%.txt,$(SRCT) ) - -PASSED = `grep -s PASS $(PATHR)*.txt` -FAIL = `grep -s FAIL $(PATHR)*.txt` -IGNORE = `grep -s IGNORE $(PATHR)*.txt` - -test: $(BUILD_PATHS) $(RESULTS) - @echo "-----------------------\nIGNORES:\n-----------------------" - @echo "$(IGNORE)" - @echo "-----------------------\nFAILURES:\n-----------------------" - @echo "$(FAIL)" - @echo "-----------------------\nPASSED:\n-----------------------" - @echo "$(PASSED)" - @echo "\nDONE" - -$(PATHR)%.txt: $(PATHB)%.$(TARGET_EXTENSION) - -./$< > $@ 2>&1 - -$(PATHB)Test%.$(TARGET_EXTENSION): $(PATHO)Test%.o $(PATHO)%.o $(PATHO)unity.o build/objs/io.o - $(LINK) -o $@ $^ $(LFLAG) - -$(PATHO)%.o:: $(PATHT)%.c - $(COMPILE) $(CFLAGS) $< -o $@ - -$(PATHO)%.o:: $(PATHS)%.c - $(COMPILE) $(CFLAGS) $< -o $@ - -$(PATHO)%.o:: $(PATHU)%.c $(PATHU)%.h - $(COMPILE) $(CFLAGS) $< -o $@ - -$(PATHD)%.d:: $(PATHT)%.c - $(DEPEND) $@ $< - $(PATHB): $(MKDIR) $(PATHB) @@ -121,19 +80,13 @@ $(PATHD): $(PATHO): $(MKDIR) $(PATHO) -$(PATHR): - $(MKDIR) $(PATHR) - - clean: $(CLEANUP) $(PATHO)*.o $(CLEANUP) $(PATHB)*.$(TARGET_EXTENSION) - $(CLEANUP) $(PATHR)*.txt -.PRECIOUS: $(PATHB)Test%.$(TARGET_EXTENSION) .PRECIOUS: $(PATHD)%.d .PRECIOUS: $(PATHO)%.o -.PRECIOUS: $(PATHR)%.txt + diff --git a/src/integration.c b/src/integration.c index 34d1264..d7165d4 100644 --- a/src/integration.c +++ b/src/integration.c @@ -517,21 +517,21 @@ double RK4(LagrangianPoint *pt, double tstart, double tend) { MP2.X[0] = pt->X[0] + 0.5 * k1[0] * h; MP2.X[1] = pt->X[1] + 0.5 * k1[1] * h; MP2.X[2] = pt->X[2] + 0.5 * k1[2] * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP2, &MP2.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP2, MP2.X); GetVelocity(tc + h/2, &MP2, k2); /* k3 */ MP3.X[0] = pt->X[0] + 0.5 * k2[0] * h; MP3.X[1] = pt->X[1] + 0.5 * k2[1] * h; MP3.X[2] = pt->X[2] + 0.5 * k2[2] * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP3, &MP3.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP3, MP3.X); GetVelocity(tc + h/2, &MP3, k3); /* k4 */ MP4.X[0] = pt->X[0] + k3[0] * h; MP4.X[1] = pt->X[1] + k3[1] * h; MP4.X[2] = pt->X[2] + k3[2] * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP4, &MP4.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP4, MP4.X); GetVelocity(tc + h, &MP4, k4); /* Update position, time, and (if needed) element index */ @@ -686,7 +686,7 @@ double RKF(LagrangianPoint *pt, double tstart, double tend) { MP2.X[0] = pt->X[0] + 0.25 * k1[0] * h; MP2.X[1] = pt->X[1] + 0.25 * k1[1] * h; MP2.X[2] = pt->X[2] + 0.25 * k1[2] * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP2, &MP2.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP2, MP2.X); ts = tc + 0.25 * h; GetVelocity(ts, &MP2, k2); @@ -694,7 +694,7 @@ double RKF(LagrangianPoint *pt, double tstart, double tend) { MP3.X[0] = pt->X[0] + (a3 * k1[0] + b3 * k2[0]) * h; MP3.X[1] = pt->X[1] + (a3 * k1[1] + b3 * k2[1]) * h; MP3.X[2] = pt->X[2] + (a3 * k1[2] + b3 * k2[2]) * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP3, &MP3.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP3, MP3.X); ts = tc + 0.375 * h; GetVelocity(ts, &MP3, k3); @@ -702,7 +702,7 @@ double RKF(LagrangianPoint *pt, double tstart, double tend) { MP4.X[0] = pt->X[0] + (a4 * k1[0] + b4 * k2[0] + c4 * k3[0]) * h; MP4.X[1] = pt->X[1] + (a4 * k1[1] + b4 * k2[1] + c4 * k3[1]) * h; MP4.X[2] = pt->X[2] + (a4 * k1[2] + b4 * k2[2] + c4 * k3[2]) * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP4, &MP4.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP4, MP4.X); ts = tc + (12.0 * h) / 13.0; GetVelocity(ts, &MP4, k4); @@ -710,7 +710,7 @@ double RKF(LagrangianPoint *pt, double tstart, double tend) { MP5.X[0] = pt->X[0] + (a5 * k1[0] + b5 * k2[0] + c5 * k3[0] + d5 * k4[0]) * h; MP5.X[1] = pt->X[1] + (a5 * k1[1] + b5 * k2[1] + c5 * k3[1] + d5 * k4[1]) * h; MP5.X[2] = pt->X[2] + (a5 * k1[2] + b5 * k2[2] + c5 * k3[2] + d5 * k4[2]) * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP5, &MP5.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP5, MP5.X); ts = tc + h; GetVelocity(ts, &MP5, k5); @@ -718,7 +718,7 @@ double RKF(LagrangianPoint *pt, double tstart, double tend) { MP6.X[0] = pt->X[0] + (a6 * k1[0] + b6 * k2[0] + c6 * k3[0] + d6 * k4[0] + e6 * k5[0]) * h; MP6.X[1] = pt->X[1] + (a6 * k1[1] + b6 * k2[1] + c6 * k3[1] + d6 * k4[1] + e6 * k5[1]) * h; MP6.X[2] = pt->X[2] + (a6 * k1[2] + b6 * k2[2] + c6 * k3[2] + d6 * k4[2] + e6 * k5[2]) * h; - if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP6, &MP6.X); + if(Data_MeshType == CARTESIAN && Data_XPeriodic == SPATIALPERIODIC) ReMapPt(&MP6, MP6.X); ts = tc + 0.5 * h; GetVelocity(ts, &MP6, k6);