-
Notifications
You must be signed in to change notification settings - Fork 2
/
install-fenics-guide-zh-cn.tex
768 lines (682 loc) · 23.8 KB
/
install-fenics-guide-zh-cn.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
\documentclass[fontset=founder]{ctexrep}
\usepackage{accsupp}
\usepackage[margin=2.4cm]{geometry}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{fontawesome5}
\usepackage[pdfpagelayout=SinglePage]{hyperref}
\usepackage[os=win,hyperrefcolorlinks]{menukeys}
\ctexset{
section/format = \Large\bfseries\raggedright,
}
\lstset{
backgroundcolor = \color{lightgray!30},
keywordstyle = \color{blue},
stringstyle = \color{brown},
basicstyle = {\small\ttfamily},
breaklines = true,
tabsize = 4,
gobble = 2,
numbers = left,
numberstyle = \tiny\emptyaccsupp,
frame = single,
xleftmargin = \ccwd,
numbersep = \ccwd,
columns = fullflexible,
% emphstyle = {\color{blue}\small\ttfamily},
% emph = {mkdir,rmdir,sudo,mount,umount,rm},
}
\newcommand\emptyaccsupp[1]{%
\BeginAccSupp{ActualText={}}#1\EndAccSupp{}%
}
\renewmenumacro{\menu}[>]{angularmenus}
\renewmenumacro{\keys}[+]{shadowedroundedkeys}
\title{\bfseries 一份简短的关于 FEniCS 安装的介绍%
\thanks{\url{https://github.com/OsbertWang/install-fenics-guide-zh-cn}}%
}
\author{王然%
\thanks{\href{mailto:[email protected]}%
{\ttfamily [email protected]}}%
}
\date{\today}
\begin{document}
\maketitle
\begin{abstract}
本文记录了我安装 FEniCS 的经历.
最开始,
我将 FEniCS 安装在 WSL 的 Ubuntu 20.04 下.
本人 Ubuntu 使用经验并不丰富,
很可能会有记录错误的地方.
另外 FEniCS 现已停止开发,
其后续版本 FEniCSx 还未稳定.
这无疑给用户带来了不安.
2021年10月23日,
我尝试安装 \href{https://www.docker.com/get-started}{Docker}.
因此补充了 Docker 下安装 FEniCS 的步骤.
而后的2021年10月28日,
我正式将 FEniCSx 的安装步骤写入手册.
根据当时的官方的建议,
我只撰写了 Docker 下的安装步骤.
2023年3月25日,
在 Windows 11 下的 WSL 中安装了 Ubuntu 22.04,
此次尝试安装 FEniCSx.
2023年4月13日,
尝试在 Anaconda 中安装 FEniCSx.
实际上直接在 Ubuntu 中安装 FEniCSx 的过程与本手册中介绍得相似,
用户直接查阅相关内容即可.
目前在 FEniCSx 官网上可以找到
\href{https://jsdokken.com/dolfinx-tutorial/}{FEniCSx 教程},
阅读过程中可以随时在页面右上方提交 \href{https://github.com/jorgensd/ dolfinx-tutorial/issues/new?title=Issue%20on%20page%20%2Findex.html& body=Your%20issue%20content%20here.}{Github issues}.
除教程外,
用户还可以阅读
\href{https://docs.fenicsproject.org/}{FEniCSx Project Documentation}
来学习部分用法.
希望本手册能够方便用户使用.
\end{abstract}
\tableofcontents
\chapter{WSL 中安装 FEniCSx}
\section{安装 WSL}\label{sec:wsl.install}
在网上能够找到许多安装 WSL 的教程,
例如%
\href{https://learn.microsoft.com/zh-cn/windows/wsl/install}{微软官方文档}.
然而,
由于大陆网络无法自由访问备份于 \url{raw.githubusercontent.com} 的
\href{https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json}{WSL 的 json} 文件,
这会导致使用
\begin{lstlisting}
wsl --install
\end{lstlisting}
直接安装失败,
因此不得不采用另外的方案,
例如%
\href{https://learn.microsoft.com/zh-cn/windows/wsl/install-manual}{旧版手动安装步骤}%
或者修改 hosts.
具体而言,
先在一些 ip 查询网站找到 \url{raw.githubusercontent.com} 对应的 ip,
比如目前我找到的就是以下内容
\begin{lstlisting}
185.199.111.133 raw.githubusercontent.com
\end{lstlisting}
接下来用管理员身份打开
\begin{lstlisting}
C:\Windows\System32\drivers\etc\hosts
\end{lstlisting}
将查询到的 ip 内容添加到文件末尾.
这时再执行
\begin{lstlisting}
wsl -l -o
\end{lstlisting}
就可以看到当前允许安装的 WSL 发行版
\begin{lstlisting}
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_8_5 Oracle Linux 8.5
OracleLinux_7_9 Oracle Linux 7.9
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
openSUSE-Leap-15.4 openSUSE Leap 15.4
openSUSE-Tumbleweed openSUSE Tumbleweed
\end{lstlisting}
\section{迁移 WSL 的安装位置}
考虑到一部分用户的系统盘空间有限,
且根据%
\href{https://learn.microsoft.com/zh-cn/windows/wsl/troubleshooting?source=recommendations#installation-issues}{微软官方文档},
WSL 只能安装在系统盘,
因此可以考虑迁移 WSL 的安装位置到其他盘.
本部分内容源自
\href{https://superuser.com/questions/1701175/installing-ubuntu-on-mnt-d-with-wsl}{StackExchange}.
方法牵扯到主系统和子系统的操作.
第一步,
建立新的位置.
假设新位置在 \texttt{X:\textbackslash} 盘.
在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl -l
\end{lstlisting}
可以查到当前已经安装的 WSL 分发,
例如
\begin{lstlisting}
适用于 Linux 的 Windows 子系统分发:
Ubuntu (默认)
\end{lstlisting}
在 \textsf{bash} 中执行
\begin{lstlisting}[language=bash]
lsb_release -a
\end{lstlisting}
查到实际 WSL 内 Ubuntu 的版本,
例如
\begin{lstlisting}
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
\end{lstlisting}
然后在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
mkdir X:\WSL\instances\Ubuntu2204
mkdir X:\WSL\images
cd X:\WSL\images
\end{lstlisting}
创建新的位置.
这里起名 \texttt{Ubuntu2204} 是因为 Ubuntu 实际版本为 22.04,
也可以起其他名字.
第二步,
导出原 WSL 分发并导入新位置.
在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl --export Ubuntu ubuntu.tar
wsl --import Ubuntu2204 X:\WSL\instances\Ubuntu2204 ubuntu.tar --version 2
\end{lstlisting}
第一行的 \texttt{Ubuntu} 指的是系统默认的 WSL 分发,
这条命令将原本的分发导出为一个压缩包.
第二行的 \texttt{Ubuntu2204} 是未来指定的 WSL 分发,
也就是将前面导出的压缩包导入成新的 WSL 分发.
第三步,
启动新的分发并且设置为默认.
在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl ~ -d Ubuntu2204
\end{lstlisting}
进入 \texttt{Ubuntu2204} 分发的 WSL 系统,
在当前 \textsf{bash} 中执行
\begin{lstlisting}[language=bash]
sudo -e /etc/wsl.conf
\end{lstlisting}
输入以下内容
\begin{lstlisting}
[user]
default=<your_username>
\end{lstlisting}
\texttt{<your\_username>} 是用户自定义的 WSL 的用户名,
个人用了原本 \texttt{Ubuntu} 分发内的用户名.
然后依次 \keys{\ctrl + X}, \keys{Y}, \keys{\enter} 保存退出.
退出 \texttt{bash},
在 \texttt{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl --terminate Ubuntu2204
wsl ~ -d Ubuntu2204
\end{lstlisting}
这时如果一切正常,
就可以将 \texttt{Ubuntu2204} 设置为默认 WSL 分发,
即在 \texttt{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl --set-default Ubuntu2204
\end{lstlisting}
这时在 \textsf{bash} 中执行
\begin{lstlisting}[language=bash]
echo $WSL_DISTRO_NAME
\end{lstlisting}
返回结果
\begin{lstlisting}
Ubuntu2204
\end{lstlisting}
就表明一切正常.
第四步,
删除旧分发.
在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl --unregister Ubuntu
\end{lstlisting}
就将旧分发 \texttt{Ubuntu} 删除了.
这时在 \textsf{cmd} 中执行
\begin{lstlisting}[language=bash]
wsl -l
\end{lstlisting}
将看到
\begin{lstlisting}
适用于 Linux 的 Windows 子系统分发:
Ubuntu2204 (默认)
\end{lstlisting}
实际上,
将整个 WSL 的安装位置迁移还有一个好处.
根据%
\href{https://learn.microsoft.com/zh-cn/windows/wsl/filesystems#file-storage-and-performance-across-file-systems}{微软官方文档},
将项目文件直接存储在 WSL 的驱动器上,
性能速度会提高.
\section{选择编辑器}\label{sec:editor}
目前 Windows 11 已经允许 WSL 可视化,
但我还是更偏向于使用
\href{https://code.visualstudio.com/}{VS Code},
在%
\href{https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-vscode}{微软官方文档}%
中有详细的介绍,
主要就是利用
\href{https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack}{Remote Development}.
\section{更换 Ubuntu 源}\label{sec:source}
从本节开始,
有关命令行的操作,
在未特殊声明的情况下,
全部为 WSL 中 \textsf{bash} 的操作.
鉴于中国大陆地区网络特性,
强烈推荐用户安装 FEniCSx 前更改 Ubuntu 的源.
在这里,
我使用%
\href{https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/}{清华大学镜像}.
当然还有其他镜像,
例如%
\href{https://mirrors.ustc.edu.cn/help/ubuntu.html}{中国科技大学镜像}.
执行
\begin{lstlisting}[language = bash]
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
\end{lstlisting}
备份 \textsf{sources.list} 文件.
接下来执行
\begin{lstlisting}[language = bash]
cp /etc/apt/sources.list ~/sources.list
\end{lstlisting}
复制一份 \textsf{sources.list} 到用户文件夹.
\begin{lstlisting}[language = bash]
code ~/sources.list
\end{lstlisting}
打开文件,
将文件替换为以下内容\footnote{根据具体的 Ubuntu 版本,
具体内容会有所调整.}
\begin{lstlisting}
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
\end{lstlisting}
然后执行
\begin{lstlisting}[language = bash]
sudo cp ~/sources.list /etc/apt/sources.list
\end{lstlisting}
替换原始的 \textsf{sources.list} 文件.
之后执行
\begin{lstlisting}[language=bash]
sudo apt update && sudo apt upgrade
\end{lstlisting}
换源并更新.
若更改错误,
可执行
\begin{lstlisting}[language=bash]
sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list
\end{lstlisting}
恢复文件.
\section{添加 PPA}
执行
\begin{lstlisting}[language = bash]
sudo add-apt-repository ppa:fenics-packages/fenics
\end{lstlisting}
鉴于网络原因,
直接从 PPA 下载容易丢内容.
这里介绍中科大的%
\href{https://mirrors.ustc.edu.cn/}{反向代理},
将 \textsf{fenics-packages-ubuntu-fenics-jammy.list} 备份
\begin{lstlisting}[language = bash]
sudo cp /etc/apt/sources.list.d/fenics-packages-ubuntu-fenics-jammy.list /etc/apt/sources.list.d/fenics-packages-ubuntu-fenics-jammy.list.bak
\end{lstlisting}
接下来复制到用户文件夹
\begin{lstlisting}[language = bash]
cp /etc/apt/sources.list.d/fenics-packages-ubuntu-fenics-jammy.list ~/fenics-packages-ubuntu-fenics-jammy.list
\end{lstlisting}
打开文件
\begin{lstlisting}[language = bash]
code ~/fenics-packages-ubuntu-fenics-jammy.list
\end{lstlisting}
将文件改为
\begin{lstlisting}
deb https://launchpad.proxy.ustclug.org/fenics-packages/fenics/ubuntu jammy main
# deb-src https://launchpad.proxy.ustclug.org/fenics-packages/fenics/ubuntu jammy main
\end{lstlisting}
而后再替换原文件
\begin{lstlisting}[language = bash]
sudo cp ~/fenics-packages-ubuntu-fenics-jammy.list /etc/apt/sources.list.d/fenics-packages-ubuntu-fenics-jammy.list
\end{lstlisting}
最后再更新
\begin{lstlisting}[language = bash]
sudo apt update
\end{lstlisting}
即完成添加 PPA 的操作.
\section{安装 FEniCSx 及其他组件}
在 \textsf{bash} 中执行
\begin{lstlisting}[language = bash]
sudo apt install build-essential
\end{lstlisting}
为后续做准备.
接下来执行
\begin{lstlisting}[language = bash]
sudo apt install fenicsx
\end{lstlisting}
即可开始安装 FEniCSx.
此外,
在很多 FEniCSx 例子中都需要 \texttt{pyvista},
它需要使用 \textsf{pip3} 来安装.
但受网络因素影响,
安装速度很慢,
所以需要先更换到国内的源,
例如%
\href{https://mirrors.tuna.tsinghua.edu.cn/help/pypi/}{清华源}.
在 \textsf{bash} 中执行
\begin{lstlisting}
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
\end{lstlisting}
升级 \textsf{pip3}.
然后执行
\begin{lstlisting}
python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
\end{lstlisting}
将源全部换为清华源.
接下来执行
\begin{lstlisting}
python3 -m pip install pyvista
\end{lstlisting}
安装 \texttt{pyvista}.
在当前的 FEniCSx 教程中还涉及
\href{https://github.com/ornladios/ADIOS2}{ADIOS2}
的使用,
它主要用于使用
\href{https://www.paraview.org/}{Paraview}
做后处理.
根据
\href{https://github.com/jorgensd/dolfinx-tutorial/issues/125#issuecomment-1502776418}{Github}
上的讨论,
它需要安装在 FEniCSx 之前.
\href{https://adios2.readthedocs.io/en/latest/setting_up/setting_up.html#}{文档}%
中提供了由源安装的方法,
感兴趣的用户可自行研究.
\section{测试安装}
在 \textsf{bash} 中执行
\begin{lstlisting}[language = bash]
python3 -c 'import dolfinx'
\end{lstlisting}
若没有任何报错提示,
则说明安装成功.
接下来可以下载
\href{https://docs.fenicsproject.org/dolfinx/main/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py}{demo\_poisson.py}
或直接复制本地的同名文件
\begin{lstlisting}
cp /usr/share/dolfinx/demo-python/demo_poisson.py ./
\end{lstlisting}
并在 \textsf{bash} 中编译
\begin{lstlisting}
python3 demo_poisson.py
\end{lstlisting}
查看结果.
\chapter{Docker 中 安装 FEniCSx}
本部分内容大部分源自 \href{https://github.com/FEniCS/dolfinx#docker-images}{Github 上的安装教程},
其中有些细节是自己尝试后的经验积累.
\section{安装 WSL 和 Docker}
对于 Windows 11 用户,
使用 Docker 前需要安装 WSL,
而且默认是 WSL 2.
具体步骤可以参考第 \ref{sec:wsl.install} 节.
在安装完 WSL 后,
用户可以下载 \href{https://www.docker.com/get-started}{Docker 桌面版}.
安装并重启,
将开启 Docker 教学环节.
注意,
在目前的 Windows 版本中,
Docker 默认不能改变安装路径.
更加详细的内容可以看\href{https://docs.docker.com/desktop/windows/install/}{这里}.
\section{运行 FEniCSx 容器}
FEniCSx 团队预构建了 FEniCSx 的 \href{https://hub.docker.com/u/dolfinx}{Docker 镜像}.
由于 DOLFINx 的 Docker 镜像托管在 Docker-hub.
用户可以在 \textsf{cmd} 中直接访问该镜像
\begin{lstlisting}
docker run -ti -v D:/work-fenicsx:/root/shared --name fenicsx-container dolfinx/dolfinx:stable
\end{lstlisting}
以上代码中,
已经在电脑中存在的工作路径 \texttt{D:\textbackslash work-fenicsx} 被设为共享路径,
容器名称为 \texttt{fenicsx-container}.
添加共享路径是由于 Docker 自身的特性,
它默认不能访问镜像外的文件.
如果工作路径 \texttt{D:\textbackslash work-fenicsx} 中有已经写好的文件,
就必须将已有工作路径共享到 Docker 容器中.
\section{查询容器}
在 \textsf{cmd} 中执行
\begin{lstlisting}
docker ps
\end{lstlisting}
可以看到目前正在运行的容器的信息.
执行
\begin{lstlisting}
docker ps -a
\end{lstlisting}
可以查询所有容器的信息.
\section{退出、停止、再进入甚至删除容器}
与一般的命令行操作一样,
在 Docker 容器内
\begin{lstlisting}
fenicsx@d66e6f16a673:~
\end{lstlisting}
中输入
\begin{lstlisting}
exit
\end{lstlisting}
就退出了容器,
如果要停止依然启动的容器,
可以在 \textsf{cmd} 中执行
\begin{lstlisting}
docker stop d66e6f16a673
\end{lstlisting}
或者
\begin{lstlisting}
docker stop fenicsx-container
\end{lstlisting}
停止已有的容器,
前者是容器的 ID,
后者是容器的名称.
想要再进入容器,
需要先启动容器,
只需要在 \textsf{cmd} 中执行
\begin{lstlisting}
docker start fenicsx-container
\end{lstlisting}
然后再执行
\begin{lstlisting}
docker exec -ti fenicsx-container /bin/bash -l
\end{lstlisting}
便可进入容器.
如果不再需要容器,
在 \textsf{cmd} 中执行
\begin{lstlisting}
docker rm fenicsx-container
\end{lstlisting}
可以直接删除它,
\section{拉取镜像}
目前 FEniCSx 还处于开发状态,
因此很多时候需要拉取镜像来使用最新的版本.
在 \textsf{cmd} 中执行
\begin{lstlisting}
docker pull dolfinx/dolfinx
\end{lstlisting}
系统就会拉取最新的内容到本地,
然后执行
\begin{lstlisting}
docker image list
\end{lstlisting}
可以看到目前本地的全部镜像的信息.
\section{编译文件}
将 \href{https://docs.fenicsproject.org/dolfinx/main/python/_downloads/b94ac7be61dc3726ca331afd20f195d2/demo_poisson.py}{demo\_poisson.py} 下载至 \texttt{D:\textbackslash work-fenicsx},
进入容器,
在 \texttt{shared} 文件夹中执行
\begin{lstlisting}
python3 demo_poisson.py
\end{lstlisting}
编译文件.
\section{安装其他组件}
上面的例子运行后,
系统会出现
\begin{lstlisting}
pyvista is required to visualise the solution
\end{lstlisting}
这是因为 \texttt{pyvista} 没有安装成功.
根据 \href{https://fenicsproject.discourse.group/t/how-to-use-pyvista-in-docker-for-windows-10-user/6921}{fenicsproject.discourse.group} 的回答,
简述安装 pyvista 的过程.
首先换源.
将 \texttt{sources.list} 复制到 \texttt{shared} 文件夹
\begin{lstlisting}
cp /etc/apt/sources.list ~/shared/sources.list
\end{lstlisting}
然后在 \texttt{D:\textbackslash work-fenicsx} 中更改 \texttt{sources.list} 内容,
见第 \ref{sec:source} 节.
改后的文件复制回去
\begin{lstlisting}
cp ~/shared/sources.list /etc/apt/sources.list
\end{lstlisting}
下面开始安装,
依次执行
\begin{lstlisting}
export PYVISTA_OFF_SCREEN=true
apt update
apt install -y --no-install-recommends libgl1-mesa-dev xvfb
pip3 install pyvista
\end{lstlisting}
即可安装完成.
如论坛所说,
再次执行
\begin{lstlisting}
python3 demo_poisson.py
\end{lstlisting}
将得到 \texttt{u.png} 文件.
若需使用
\href{https://github.com/ornladios/ADIOS2}{ADIOS2},
根据%
\href{https://adios2.readthedocs.io/en/latest/setting_up/setting_up.html#docker}{文档},
用户可由 Docker 安装,
感兴趣的用户可自行研究.
\chapter{Anaconda 中安装 FEniCSx}
本部分内容主要源自
\href{https://github.com/FEniCS/dolfinx#conda}{Github}.
\section{安装 WSL 和 Anaconda}
Anaconda 中安装 FEniCSx 无法直接在 Windows 11 上实现,
因为一些依赖不支持 Windows 操作系统,
所以还是要在 WSL 中安装.
具体步骤可以参考第 \ref{sec:wsl.install} 节.
在安装完 WSL 后,
\href{https://www.anaconda.com/products/distribution#Downloads}{下载}
Anaconda 的 64-Bit (x86) 安装文件 \texttt{Anaconda3-*-Linux-x86\_64.sh},
这里的 \texttt{*} 表示时间.
下载完成后,
在 \textsf{bash} 中进入 \texttt{Anaconda3-*-Linux-x86\_64.sh} 所在目录,
将其复制到用户文件夹
\begin{lstlisting}[language=bash]
cp Anaconda3-*-Linux-x86\_64.sh ~/
\end{lstlisting}
进入用户文件夹并安装
\begin{lstlisting}[language=bash]
cd ~/
bash Anaconda3-*-Linux-x86\_64.sh
\end{lstlisting}
接下来根据系统提示进行安装即可,
其中大约有几次选项.
第一次是
\begin{lstlisting}
Do you accept the license terms?
\end{lstlisting}
这个必须写 \texttt{yes}.
第二次是
\begin{lstlisting}
Anaconda3 will now be installed into this location:
/home/USERNAME/anaconda3
- Press ENTER to confirm the location
- Press CTRL-C to abort the installation
- Or specify a different location below
\end{lstlisting}
这里的 \texttt{USERNAME} 是用户名,
建议用户在此路径安装.
第三次是
\begin{lstlisting}
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
\end{lstlisting}
这个建议写 \texttt{yes},
否则后续用户需要自行添加环境变量.
安装完成后,
用户关闭再打开 \textsf{bash},
在路径前显示 \texttt{(base)} 即表示安装成功.
如果用户不希望 \texttt{base} 启用,
在 \textsf{bash} 中执行
\begin{lstlisting}[language=bash]
conda config --set auto_activate_base false
\end{lstlisting}
\subsection{使用镜像}
受限于大陆网络现状,
用户也可访问大陆的 Anaconda 镜像,
如%
\href{https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/}{清华大学}%
和%
\href{https://mirrors.pku.edu.cn/anaconda/archive/}{北京大学},
下载安装文件.
安装完成后,
在用户目录下打开 \texttt{.condarc} 文件并修改其中内容,
例如使用 \href{https://code.visualstudio.com/}{VS Code}\footnote{详情见 \ref{sec:editor}~节}
\begin{lstlisting}
code ~/.condarc
\end{lstlisting}
将以下内容复制到文件中\footnote{来自清华大学\href{https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/}{镜像}}
\begin{lstlisting}
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
\end{lstlisting}
保存退出,
再执行以下命令清除索引缓存,
保证用的是镜像站提供的索引
\begin{lstlisting}
conda clean -i
\end{lstlisting}
\subsection{使用自定义虚拟环境}
使用 Anaconda 时,
默认在 \texttt{base} 环境中,
用户也可以自定义环境.
实际上,
\href{https://github.com/FEniCS/dolfinx#conda}{FEniCSx 安装手册}%
建议使用虚拟环境来安装.
在 \texttt{base} 中执行
\begin{lstlisting}
conda create -n fenicsx-env python=3.10
\end{lstlisting}
这表示创建 python 版本为 3.10,
名字为 fenicsx-env 的虚拟环境,
版本可以不指定.
激活 fenicsx-env 虚拟环境
\begin{lstlisting}
conda activate fenicsx-env
\end{lstlisting}
退出被激活的虚拟环境
\begin{lstlisting}
conda deactivate
\end{lstlisting}
删除 fenicsx-env 虚拟环境
\begin{lstlisting}
conda remove -n fenicsx-env --all
\end{lstlisting}
\section{安装 FEniCSx}
安装 Anaconda 后,
在 \textsf{bash} 中执行
\begin{lstlisting}
conda create -n fenicsx-env
conda activate fenicsx-env
conda install -c conda-forge fenics-dolfinx mpich pyvista
\end{lstlisting}
即可安装.
\end{document}