Skip to content

Commit 0490a00

Browse files
authored
FEAT: save static results in NetCDF format (#98)
1 parent a6f122d commit 0490a00

File tree

23 files changed

+1189
-933
lines changed

23 files changed

+1189
-933
lines changed

.github/workflows/build.yml

Lines changed: 71 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ jobs:
4141
4242
- name: Configured git attributes for line endings (Windows) # 防止接下来在windows平台checkout代码时,文本文件的换行符发生变化,导致MSYS2工作出错
4343
if: contains(matrix.os, 'windows')
44-
run: git config --global core.autocrlf input
44+
run: |
45+
git config --global core.autocrlf input
4546
4647
- name: Checkout code # 下载库代码
4748
uses: actions/checkout@v3
@@ -101,6 +102,7 @@ jobs:
101102
# sudo apt update
102103
# sudo apt install -y libfftw3-dev
103104

105+
# ------------------------------- 安装依赖 -----------------------------------------------
104106
# 在 ubuntu 系统上创建低版本 glibc (2.17) 的环境进行编译,以提供向后兼容能力
105107
- name: Create CentOS 7.7 container (Ubuntu)
106108
if: contains(matrix.os, 'ubuntu')
@@ -115,19 +117,9 @@ jobs:
115117
docker exec ${{ env.CONTAINER_ID }} bash -c "
116118
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
117119
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
118-
yum clean all -y && yum makecache -y && yum install -y gcc make
119-
"
120-
121-
# Centos 7.7 docker环境中编译fftw库需要添加 -fPIC
122-
- name: Build static FFTW in container (Ubuntu)
123-
if: contains(matrix.os, 'ubuntu')
124-
run: |
125-
docker exec ${{ env.CONTAINER_ID }} bash -c "
126-
curl -O https://www.fftw.org/fftw-3.3.10.tar.gz && tar -xzvf fftw-3.3.10.tar.gz && \
127-
cd fftw-3.3.10 && \
128-
./configure CFLAGS="-fPIC" && make && make install && \
129-
./configure CFLAGS="-fPIC" --enable-float && make && make install && \
130-
cd .. && rm -rf fftw*
120+
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \
121+
sed -i 's/mirrors.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \
122+
yum clean all -y && yum makecache -y && yum install -y gcc gcc-c++ make wget m4
131123
"
132124
133125
- name: Install dependencies (macOS)
@@ -138,25 +130,54 @@ jobs:
138130
brew install fftw
139131
140132
FFTW_PREFIX=$(brew --prefix fftw)
141-
echo "FFT_INC_PATH=$FFTW_PREFIX/include" >> $GITHUB_ENV
142-
echo "FFT_LIB_PATH=$FFTW_PREFIX/lib" >> $GITHUB_ENV
133+
echo "FFTW_INC_PATH=$FFTW_PREFIX/include" >> $GITHUB_ENV
134+
echo "FFTW_LIB_PATH=$FFTW_PREFIX/lib" >> $GITHUB_ENV
143135
144-
# ----------------- 编译C库和C程序 ----------------------------------
136+
137+
# ----------------------------- 安装 FFTW -------------------------------
138+
- name: Install FFTW (ubuntu)
139+
if: contains(matrix.os, 'ubuntu')
140+
run: |
141+
FILENAME="fftw3-${{ matrix.os }}-${{ matrix.arch }}"
142+
# 在 centos 7 镜像中编译好的fftw
143+
wget "https://raw.githubusercontent.com/Dengda98/dengda98.github.io/refs/heads/main/assets/packages/${FILENAME}.tar.gz"
144+
tar -xzvf ${FILENAME}.tar.gz
145+
146+
# 这里 workspace 名称取决于创建容器时的命名
147+
echo "FFTW_INC_PATH=/workspace/$FILENAME/include" >> $GITHUB_ENV
148+
echo "FFTW_LIB_PATH=/workspace/$FILENAME/lib" >> $GITHUB_ENV
149+
150+
# ---------------------------- 安装 NetCDF -------------------------------
151+
- name: Install NetCDF
152+
run: |
153+
# 之前在各个系统上预编译好的 NetCDF 安装包
154+
FILENAME="netcdf-c-4.9.3-${{ matrix.os }}-${{ matrix.arch }}"
155+
curl -O "https://raw.githubusercontent.com/Dengda98/dengda98.github.io/refs/heads/main/assets/packages/${FILENAME}.tar.gz"
156+
tar -xzvf ${FILENAME}.tar.gz
157+
158+
# 记录路径
159+
if [[ "${{ matrix.os }}" == *"ubuntu"* ]]; then
160+
echo "NC_INC_PATH=/workspace/$FILENAME/include" >> $GITHUB_ENV
161+
echo "NC_LIB_PATH=/workspace/$FILENAME/lib" >> $GITHUB_ENV
162+
else
163+
echo "NC_INC_PATH=$(pwd)/$FILENAME/include" >> $GITHUB_ENV
164+
echo "NC_LIB_PATH=$(pwd)/$FILENAME/lib" >> $GITHUB_ENV
165+
fi
166+
167+
168+
# -------------------------------- 编译C库和C程序 ----------------------------------
145169
- name: Build the project (macOS)
146170
if: contains(matrix.os, 'macos')
147171
working-directory: ./pygrt/C_extension
148172
run: |
149-
150-
# Mac系统需要显式设置头文件路径和库路径
151-
export C_INCLUDE_PATH=$FFT_INC_PATH:$C_INCLUDE_PATH
152-
export LIBRARY_PATH=$FFT_LIB_PATH:${LIBRARY_PATH}
153-
export LD_LIBRARY_PATH=$FFT_LIB_PATH:${LD_LIBRARY_PATH}
154-
export DYLD_LIBRARY_PATH=$FFT_LIB_PATH:${DYLD_LIBRARY_PATH}
155-
156173
make ARCH="-arch ${{ matrix.arch }}" \
157174
CC=gcc-14 \
158-
LFFT_FLAGS="$FFT_LIB_PATH/libfftw3.a $FFT_LIB_PATH/libfftw3f.a"
175+
LFFTW_FLAGS="$FFTW_LIB_PATH/libfftw3.a $FFTW_LIB_PATH/libfftw3f.a" \
176+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
177+
CFLAGS2="-I$FFTW_INC_PATH -I$NC_INC_PATH"
159178
make cleanbuild
179+
ls -l lib/
180+
ls -l bin/
160181
otool -L lib/libgrt.so
161182
otool -L bin/*
162183
@@ -165,25 +186,37 @@ jobs:
165186
shell: msys2 {0}
166187
working-directory: ./pygrt/C_extension
167188
run: |
168-
make
189+
make \
190+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
191+
CFLAGS2="-I$NC_INC_PATH"
192+
169193
make cleanbuild
194+
ls -l lib/
195+
ls -l bin/
170196
ldd lib/libgrt.so
171197
ldd bin/*
172198
173-
# - name: Build the project (Ubuntu)
174-
# if: contains(matrix.os, 'ubuntu')
175-
# working-directory: ./pygrt/C_extension
176-
# run: |
177-
# make
178-
# make cleanbuild
179-
# ldd lib/libgrt.so
180-
# ldd bin/*
181-
182199
- name: Build the project in container (Ubuntu)
183200
if: contains(matrix.os, 'ubuntu')
184201
working-directory:
185202
run: |
186-
docker exec ${{ env.CONTAINER_ID }} bash -c "cd ./pygrt/C_extension && ls && make && make cleanbuild && cd -"
203+
cat > tmprun.sh <<EOF
204+
cd ./pygrt/C_extension
205+
ls
206+
make \
207+
LFFTW_FLAGS="$FFTW_LIB_PATH/libfftw3.a $FFTW_LIB_PATH/libfftw3f.a" \
208+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
209+
CFLAGS2="-I$FFTW_INC_PATH -I$NC_INC_PATH"
210+
make cleanbuild
211+
cd -
212+
EOF
213+
214+
echo "-------------------------------------"
215+
cat tmprun.sh
216+
217+
docker exec ${{ env.CONTAINER_ID }} bash tmprun.sh
218+
rm tmprun.sh
219+
187220
cd ./pygrt/C_extension
188221
ldd lib/libgrt.so
189222
ldd bin/*
@@ -195,7 +228,7 @@ jobs:
195228
docker stop ${{ env.CONTAINER_ID }}
196229
docker rm ${{ env.CONTAINER_ID }}
197230
198-
# ------------------------ 定义接下来打包程序命名时的系统名后缀 ---------------
231+
# ------------------------------------- 定义接下来打包程序命名时的系统名后缀 -------------------------------
199232
- name: Define the package OS suffix
200233
run: |
201234
# 符合pypi命名规范,否则上传失败
@@ -231,7 +264,7 @@ jobs:
231264
with:
232265
name: ${{ matrix.os }}-${{ matrix.arch }}_tar
233266
path: ${{ env.PACK_NAME }}.tar.gz
234-
267+
235268

236269

237270
# =======================================================================================

.github/workflows/testbuild.yml

Lines changed: 65 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ jobs:
4747
4848
- name: Configured git attributes for line endings (Windows) # 防止接下来在windows平台checkout代码时,文本文件的换行符发生变化,导致MSYS2工作出错
4949
if: contains(matrix.os, 'windows')
50-
run: git config --global core.autocrlf input
50+
run: |
51+
git config --global core.autocrlf input
5152
5253
- name: Checkout code # 下载库代码
5354
uses: actions/checkout@v3
@@ -73,19 +74,9 @@ jobs:
7374
docker exec ${{ env.CONTAINER_ID }} bash -c "
7475
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \
7576
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo && \
76-
yum clean all -y && yum makecache -y && yum install -y gcc make
77-
"
78-
79-
# Centos 7.7 docker环境中编译fftw库需要添加 -fPIC
80-
- name: Build static FFTW in container (Ubuntu)
81-
if: contains(matrix.os, 'ubuntu')
82-
run: |
83-
docker exec ${{ env.CONTAINER_ID }} bash -c "
84-
curl -O https://www.fftw.org/fftw-3.3.10.tar.gz && tar -xzvf fftw-3.3.10.tar.gz && \
85-
cd fftw-3.3.10 && \
86-
./configure CFLAGS="-fPIC" && make && make install && \
87-
./configure CFLAGS="-fPIC" --enable-float && make && make install && \
88-
cd .. && rm -rf fftw*
77+
sed -i 's/mirrors.cloud.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \
78+
sed -i 's/mirrors.aliyuncs.com/mirrors.aliyun.com/g' /etc/yum.repos.d/CentOS-Base.repo && \
79+
yum clean all -y && yum makecache -y && yum install -y gcc gcc-c++ make wget m4
8980
"
9081
9182
- name: Install dependencies (macOS)
@@ -96,23 +87,51 @@ jobs:
9687
brew install fftw
9788
9889
FFTW_PREFIX=$(brew --prefix fftw)
99-
echo "FFT_INC_PATH=$FFTW_PREFIX/include" >> $GITHUB_ENV
100-
echo "FFT_LIB_PATH=$FFTW_PREFIX/lib" >> $GITHUB_ENV
90+
echo "FFTW_INC_PATH=$FFTW_PREFIX/include" >> $GITHUB_ENV
91+
echo "FFTW_LIB_PATH=$FFTW_PREFIX/lib" >> $GITHUB_ENV
92+
93+
94+
# ----------------------------- 安装 FFTW -------------------------------
95+
- name: Install FFTW (ubuntu)
96+
if: contains(matrix.os, 'ubuntu')
97+
run: |
98+
FILENAME="fftw3-${{ matrix.os }}-${{ matrix.arch }}"
99+
# 在 centos 7 镜像中编译好的fftw
100+
wget "https://raw.githubusercontent.com/Dengda98/dengda98.github.io/refs/heads/main/assets/packages/${FILENAME}.tar.gz"
101+
tar -xzvf ${FILENAME}.tar.gz
102+
103+
# 这里 workspace 名称取决于创建容器时的命名
104+
echo "FFTW_INC_PATH=/workspace/$FILENAME/include" >> $GITHUB_ENV
105+
echo "FFTW_LIB_PATH=/workspace/$FILENAME/lib" >> $GITHUB_ENV
106+
107+
# ---------------------------- 安装 NetCDF -------------------------------
108+
- name: Install NetCDF
109+
run: |
110+
# 之前在各个系统上预编译好的 NetCDF 安装包
111+
FILENAME="netcdf-c-4.9.3-${{ matrix.os }}-${{ matrix.arch }}"
112+
curl -O "https://raw.githubusercontent.com/Dengda98/dengda98.github.io/refs/heads/main/assets/packages/${FILENAME}.tar.gz"
113+
tar -xzvf ${FILENAME}.tar.gz
114+
115+
# 记录路径
116+
if [[ "${{ matrix.os }}" == *"ubuntu"* ]]; then
117+
echo "NC_INC_PATH=/workspace/$FILENAME/include" >> $GITHUB_ENV
118+
echo "NC_LIB_PATH=/workspace/$FILENAME/lib" >> $GITHUB_ENV
119+
else
120+
echo "NC_INC_PATH=$(pwd)/$FILENAME/include" >> $GITHUB_ENV
121+
echo "NC_LIB_PATH=$(pwd)/$FILENAME/lib" >> $GITHUB_ENV
122+
fi
123+
101124
102125
# -------------------------------- 编译C库和C程序 ----------------------------------
103126
- name: Build the project (macOS)
104127
if: contains(matrix.os, 'macos')
105128
working-directory: ./pygrt/C_extension
106129
run: |
107-
# Mac系统需要显式设置头文件路径和库路径
108-
export C_INCLUDE_PATH=$FFT_INC_PATH:$C_INCLUDE_PATH
109-
export LIBRARY_PATH=$FFT_LIB_PATH:${LIBRARY_PATH}
110-
export LD_LIBRARY_PATH=$FFT_LIB_PATH:${LD_LIBRARY_PATH}
111-
export DYLD_LIBRARY_PATH=$FFT_LIB_PATH:${DYLD_LIBRARY_PATH}
112-
113130
make ARCH="-arch ${{ matrix.arch }}" \
114131
CC=gcc-14 \
115-
LFFT_FLAGS="$FFT_LIB_PATH/libfftw3.a $FFT_LIB_PATH/libfftw3f.a"
132+
LFFTW_FLAGS="$FFTW_LIB_PATH/libfftw3.a $FFTW_LIB_PATH/libfftw3f.a" \
133+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
134+
CFLAGS2="-I$FFTW_INC_PATH -I$NC_INC_PATH"
116135
make cleanbuild
117136
ls -l lib/
118137
ls -l bin/
@@ -124,27 +143,37 @@ jobs:
124143
shell: msys2 {0}
125144
working-directory: ./pygrt/C_extension
126145
run: |
127-
make
146+
make \
147+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
148+
CFLAGS2="-I$NC_INC_PATH"
149+
128150
make cleanbuild
129151
ls -l lib/
130152
ls -l bin/
131153
ldd lib/libgrt.so
132154
ldd bin/*
133155
134-
# - name: Build the project (Ubuntu)
135-
# if: contains(matrix.os, 'ubuntu')
136-
# working-directory: ./pygrt/C_extension
137-
# run: |
138-
# make
139-
# make cleanbuild
140-
# ldd lib/libgrt.so
141-
# ldd bin/*
142-
143156
- name: Build the project in container (Ubuntu)
144157
if: contains(matrix.os, 'ubuntu')
145158
working-directory:
146159
run: |
147-
docker exec ${{ env.CONTAINER_ID }} bash -c "cd ./pygrt/C_extension && ls && make && make cleanbuild && cd -"
160+
cat > tmprun.sh <<EOF
161+
cd ./pygrt/C_extension
162+
ls
163+
make \
164+
LFFTW_FLAGS="$FFTW_LIB_PATH/libfftw3.a $FFTW_LIB_PATH/libfftw3f.a" \
165+
LNETCDF_FLAGS="$NC_LIB_PATH/libnetcdf.a" \
166+
CFLAGS2="-I$FFTW_INC_PATH -I$NC_INC_PATH"
167+
make cleanbuild
168+
cd -
169+
EOF
170+
171+
echo "-------------------------------------"
172+
cat tmprun.sh
173+
174+
docker exec ${{ env.CONTAINER_ID }} bash tmprun.sh
175+
rm tmprun.sh
176+
148177
cd ./pygrt/C_extension
149178
ldd lib/libgrt.so
150179
ldd bin/*
@@ -192,7 +221,8 @@ jobs:
192221
with:
193222
name: ${{ matrix.os }}-${{ matrix.arch }}_tar
194223
path: ${{ env.PACK_NAME }}.tar.gz
195-
224+
225+
196226

197227
# =======================================================================================
198228
test_project: # 在全新系统上测试程序,不安装其它依赖,看能否运行

.readthedocs.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,16 @@ build:
1414
# rust: "1.70"
1515
# golang: "1.20"
1616

17-
apt_packages: ["doxygen", "build-essential", "libfftw3-dev"]
17+
# 这里通过 apt 下载的 gmt 是旧版,目前大概是 6.3,但对目前画的图够了
18+
apt_packages: [
19+
"doxygen",
20+
"build-essential",
21+
"libfftw3-dev",
22+
"libnetcdf-dev",
23+
"netcdf-bin",
24+
"nco",
25+
"gmt"
26+
]
1827

1928
jobs:
2029
pre_build:

docs/source/Advanced/integ_converg/run/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ echo "..." >> ptam_stats_head
4646
# -------------------------------------------------------------------
4747
# BEGIN SGRN
4848
# -S 表示输出核函数文件
49-
grt static greenfn -Mmilrow -D0.1/0 -X2/2/1 -Y2/2/1 -S > grn
49+
grt static greenfn -Mmilrow -D0.1/0 -X2/2/1 -Y2/2/1 -S -Ostgrn.nc
5050

5151
# grt.ker2asc 也可以读取静态解输出的核函数文件,格式一致
5252
grt ker2asc stgrtstats/milrow_0.1_0/K > static_stats

0 commit comments

Comments
 (0)