前言

做一个项目需要用到火星大气数据库进行建模。当前广泛使用的高精度火星大气数据库有NASA的Mars-GRAM和欧洲的MCD(Mars Climate Database)。NASA的火星大气数据库需要申请并提供个人或学校的信息进行审核,还需要国外的电话号码,我的申请没有收到回信。因此选用欧洲的MCD数据库,MCD数据库是开源免费的,下面记录一下MCD数据库的安装过程。

提前声明,后面的安装过程涉及到Linux系统,本人在配置之前对于Linux一窍不通,如果文章有问题或者更好的方法欢迎指点讨论

一、下载MCD数据库

MCD数据库的下载链接:http://www-mars.lmd.jussieu.fr/

点击Access the database进入获取界面。MCD数据库提供Web版完全版,如果只需要简单的数据和图像可以直接使用Web版。填写提交信息即可获得下载连接(提交信息不会进行验证)。
        解压下载好的文件,user_manual(用户手册)位于doc文件夹中。

阅读用户手册可知

  • MCD以NetCDF格式文件存储相关火星数据,以Fortran语言代码读取并计算大气数据。MCD提供的Fortran代码读取计算需要NetCDF库,这个库需要自己下载并配置。
  • MCD提供相关的C\C++、Matlab、Python接口直接调用MCD数据库

二、安装NetCDF库

NetCDF库的下载链接:https://www.unidata.ucar.edu/software/netcdf/

NetCDF库分为netcdf-c、netcdf-fortran、netcdf-cxx、netcdf-java等,MCD需要调用的库为netcdf-fortran。netcdf-4.2以上将netcdf-c和netcdf-fortran库独立发展,需要编译安装的是netcdf-fortran库。

netcdf-fortran库由于本地的Fortran编译器类型和版本不同无法直接使用,因此需要通过源代码进行编译,形成可利用的include、lib文件夹。netcdf-fortran官方文档只提供了Linux系统下的编译安装方法。下面提供Windows平台和Linux平台的操作方法(Windows平台我配置失败,但图方便可以尝试一下)

Windows平台

  • 利用OneAPI+Visual Studio配置Fortran语言环境
  • 利用CMake编译netcdf-fortran源代码

利用OneAPI配置Fortran语言环境参考较多,利用CMake编译源码参考文章

​​​​​​https://blog.csdn.net/xiaoke0O/article/details/127530814

MCD在Windows系统的安装方法可参考MCD官网的FAQ

1.Linux平台

由于我在Windows平台上尝试的解决方案都失败了,于是只能转移到Linux平台上进行配置。我采用Windows自带的Linux子系统功能WSL配置Linux环境。注意:WSL功能只适用于Win10及以上,请注意电脑是否支持此功能。

配置WSL的相关资料较多,Linux版本对于后续的编译影响不大。安装完成后,会在此电脑界面左下方出现Linux系统文件夹

配置完成后,我的系统数据如下:

Windows11 22000.1574    
Ubuntu 22.04.1 LTS  
GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0

如果缺少相关组件,可以执行以下代码安装

#更新包列表
sudo apt update
#安装 build-essential组件
sudo apt install build-essential
#安装gfortran
sudo apt-get install gfortran
#安装g++
sudo apt-get install g++
#检查版本
gcc --version
gfortran --version

2.下载依赖库

根据说明文档,要安装netcdf-fortran库需要先安装netcdf-c库。官方网站提供了netcdf-c库的源代码文件和二进制代码文件。二进制代码文件提供适用于Windows系统的直接安装程序,而在Linux环境下需要通过源代码文件进行编译。

根据官方文档,netcdf-c库编译需要依赖zlib库和hdf5库。故需要下载的库为
 zlib-1.2.8  https://www.zlib.net/
 hdf5-1.10.5  https://portal.hdfgroup.org/display/support/HDF5+1.10.5
 netcdf-c-4.3.2  netcdf-fortran-4.5.2  ftp://ftp.unidata.ucar.edu/pub/netcdf
   其中netcdf相关的旧版本、预编译版本和相关依赖库都可以在第三个链接中找到

注意,ftp链接可以在本机此电脑上方的地址栏直接访问,用edge浏览器访问无反应,如图

   
   如果访问失败,可以启用ftp功能再尝试,启动方式为
   控制面板=>程序=>启用或关闭Windows功能,打开Internet information Services勾选FTP服务器以及其下的FTP服务、FTP扩展性。如图

在/usr/local下建立software文件夹,将四个库全部解压放在文件夹下,如图

    注意,每个文件夹内部应当是包含makefile和configure文件的源代码文件,如果还嵌套一个文件夹请将其移出。在/usr/local下建立wrf文件夹,后面会将库的编译结果放在这里,为了防止再多个引用文件出现问题,将所有库装在一起。

3.安装zlib-1.2.8

打开终端,进入Linux命令行,输入

cd /usr/local/software/zlib-1.2.8
sudo ./configure --prefix=/usr/local/wrf
sudo make check install

如果在第二步出现错误如下:
         1.permission denied:访问权限不够,输入

chmod 777 configure

2.-bash: ./configure: No such file or directory : 查看文件夹中是否有configure文件(是否是源代码文件)

安装zlib库一般不会出现什么问题

4.安装hdf5-1.10.5

输入

#进入hdf5-1.10.5文件夹
cd ..
cd hdf5-1.10.5
#安装hdf5-1.10.5
sudo make
sudo make check
sudo make install

在sudo make或make check过程中出现错误,提示需要安装m4库。与上述库类似,在官网上下载m4库压缩包,将m4库解压至/usr/local/software文件夹下。
  m4库下载链接:http://mirrors.kernel.org/gnu/m4/

同理,进入m4文件夹,安装m4

cd m4-1.4.6
sudo ./configure
sudo make
sudo make install

安装完成后继续完成hdf5库的安装步骤。安装完成后,会在wrf/include和wrf/lib中出现hdf5相关文件。

5.安装netcdf-c

输入命令

sudo CPPFLAGS=-I/usr/local/wrf/include LDFLAGS=-L/usr/local/wrf/lib ./configure --prefix=/usr/local/wrf --disable-dap

这一步高版本的netcdf-c库会出现如下错误,如netcdf-c-4.9.1

configure: error: curl required for byte range support. Install curl or build without --enable-byterange.

解决方法:更换低版本的netcdf-c库,如netcdf-c-4.6.2

继续出现其他错误

SKIP:  0
XFAIL: 0
FAIL:  2
XPASS: 0
ERROR: 0
see ncgen3/test-suit.log

查看日志文件,错误信息为 permission denied 访问权限不足。解决方法:将netcdf-c-4.6.2文件全部提升权限,输入

cd ..
chmod -R 777 netcdf-c-4.6.2
cd netcdf-c-4.6.2
sudo make check
sudo make install

安装成功

6.安装netcdf-fortran-4.5.2

cd ..
cd netcdf-fortran-4.5.2
sudo CPPFLAGS=-I/usr/local/wrf/include LD_LIBRARY_PATH=/usr/local/wrf/lib:/usr/lib:${LD_LIBRARY_PATH} LDFLAGS=-L/usr/local/wrf/lib ./configure --prefix=/usr/local/wrf
sudo make

出现如下错误

Type mismatch between actual argument at (1) and actual argument at (2) (INTEGER(1)/REAL(8)).

问题原因:gcc和gfortran版本过高  解决方法:更换低版本

gfortran --version
gcc --version
# GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
# gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0

安装低版本的编译器并重新编译

#安装低版本的gcc gfortran
sudo apt-get install gcc-9
sudo apt-get install gfortran-9
#调整默认使用版本
#调整gcc-11的优先级为40,gcc-9的优先级为100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 100
#调整gfortran-11的优先级为40,gfortran-9的优先级为100
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-11 40
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 100
#重新编译
sudo make
sudo make check

又出现如下错误

#出现错误
#FAIL: run_examples.sh
#FAIL: run_examples_4.sh
#============================================================================
#Testsuite summary for netCDF-Fortran 4.5.2
#============================================================================
# TOTAL: 2
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  2
# XPASS: 0
# ERROR: 0
#============================================================================
#See examples/F77/test-suite.log
#Please report to support-netcdf@unidata.ucar.edu
#============================================================================

打开日志文件发现错误同样为:Permission denied ,同理提升权限

cd ..
chmod -R 777 netcdf-fortran-4.5.2
cd netcdf-fortran-4.5.2
#重新检查
sudo make check
sudo make install

没有错误后,设置环境变量

export CC=gcc
export CXX=g++
export FC=gfortran
export F90=gfortran
export F77=gfortran
export WRF=/usr/local/wrf
export PATH=$WRF/bin:$PATH
export LD_LIBRARY_PATH=usr/local/wrf/lib:$WRF/lib:$LD_LIBRARY_PATH
export CPPFLAGS='-I/usr/local/wrf/include'
export LDFLAGS='-L/usr/local/wrf/lib'

注意,这一段环境变量可以写成脚本,每次重新启动终端后运行一次。检测安装结果

ncdump

最后结果为

netcdf library version 4.6.2 of Feb 27 2023 10:54:22 $

安装成功

这一部分的参考文章

https://blog.csdn.net/Leo_csdn_/article/details/84306399
http://blog.sciencenet.cn/blog-2733016-1108521.html
https://blog.csdn.net/qq_37301490/article/details/105419262
https://blog.csdn.net/schumacher2016/article/details/80850240
https://yaoyz.blog.csdn.net/article/details/89676606
https://blog.csdn.net/qq_36107898/article/details/126705712https://blog.csdn.net/weixin_39557402/article/details/116770107https://zhuanlan.zhihu.com/p/563570353

三、MCD以及C/C++接口测试

1.MCD测试

将MCD放入Linux的/home文件夹下,进入mcd文件夹。阅读README和compile文件,修改compile文件中的地址

NCDFINC=/usr/local/wrf/include
NCDFLIB=/usr/local/wrf/lib
gfortran MCD.F90 test_mcd.F90 -I. -I$NCDFINC -L$NCDFLIB -lnetcdff -o test_mcd

运行compile文件,生成test_mcd文件,运行test_mcd文件,如果出现输入数据库参数则运行成功

sudo bash compile
sudo ./test_mcd

还可以通过MCD给予的testcase进行测试,方法如下
进入testcase文件夹,运行TEST_SCRIPT脚本。如果出现 Permission denied 则同理提升权限

cd testcase
chmod 777 TEST_SCRIPT
sudo ./TEST_SCRIPT

出现数据即为成功。

2.配置C/C++接口

进入mcd/interfaces/c_interfaces文件夹,修改makefile中的路径参数

输入

make

生成MCD.o test_mcd_c test_mcd_cpp三个执行文件。运行test_mcd_cpp文件报错。

sudo ./test_mcd_cpp

查看test_mcd_cpp依赖库文件

sudo ldd ./test_mcd_cpp

结果为

root@softdream:/home/MCD_6.1/MCD_6.1_queleclim/mcd/interfaces/c_interfaces# ldd test_mcd_cpplinux-vdso.so.1 (0x00007ffc45b82000)libnetcdff.so.7 => /usr/local/wrf/lib/libnetcdff.so.7 (0x00007fbdbeec9000)libgfortran.so.5 => /lib/x86_64-linux-gnu/libgfortran.so.5 (0x00007fbdbebe9000)libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fbdbe9bf000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbdbe8d8000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fbdbe8b8000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbdbe68e000)libnetcdf.so.13 => /usr/local/wrf/lib/libnetcdf.so.13 (0x00007fbdbe570000)libquadmath.so.0 => /lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007fbdbe528000)/lib64/ld-linux-x86-64.so.2 (0x00007fbdef05b000)libhdf5_hl.so.100 => /usr/local/wrf/lib/libhdf5_hl.so.100 (0x00007fbdbe501000)libhdf5.so.103 => /usr/local/wrf/lib/libhdf5.so.103 (0x00007fbdbe11f000)libz.so.1 => /usr/local/wrf/lib/libz.so.1 (0x00007fbdbe103000)

如果出现某一so文件后为 not found 的情况,注意检查路径是否指向之前安装编译结果的文件夹。如果未能解决,可以将全部库文件放入/usr/lib文件夹中,并将路径重新指向此文件夹,代码如下。有些库文件可能默认放在/usr/lib中,当然其他地方也有可能,需要自己找一找。

export LD_LIBRARY_PATH=usr/lib:$WRF/lib:$LD_LIBRARY_PATH

继续运行test_mcd_cpp文件,出现输入参数情况即为成功。

sudo ./test_mcd_cpp

C++接口调整完毕,后续C++调用按照test_mcd_cpp中的例子编写即可。

总结

配置到现在已经基本完成了MCD在Linux系统上的使用,但无法在Windows中的Visual Studio或者Matlab中直接调用,需要在Linux系统下将数据导出为文件,再将文件转到Windows系统下读取来间接调用。这个问题暂时没有解决。
        本次配MCD环境前后经历了Windows、Linux、Fortran语言、NetCDF库等的配置,大部分都是我不熟悉的方面。我尝试了很多方法,但由于个人水平有限始终没有成功。按照别人的方法走也总会出现许多莫名奇妙的问题。
       有关MCD运用这方面网上的资料较少,希望各位大佬指点简单的配置方法。

安装MCD火星大气数据库相关推荐

  1. Ubuntu安装、使用postgresql数据库

    Ubuntu安装.使用postgresql数据库 $ sudo apt-get install postgresql  (端口为5432) $ sudo apt-get install postgre ...

  2. xp 安装mysql数据库_Windows XP系统中安装MySQL5.5.28数据库图文教程

    Windows XP系统中安装MySQL5.5.28数据库图文教程 2014-07-13 16:35来源:中国存储网 导读:MySQL数据库的安装一共分为两个部分:数据库的安装和数据库的配置.一.My ...

  3. 同一台服务器上面安装多个mysql数据库

    [前言]测试环境中经常需要多台mysql数据库来进行各种环境和场景的模拟,由于测试环境中的资源一般都是比较有限的,也就需要在一台服务器上面搭建多个mysql数据库来完成测试的需求.本文档介绍在Cent ...

  4. ubuntu php mysql5.6_Ubuntu 安装 Mysql 5.6 数据库

    Ubuntu 安装 Mysql 5.6 数据库 1)下载: mysql-5.6.13-debian6.0-x86_64.deb http://dev.mysql.com/downloads/mirro ...

  5. 《Oracle Database 12c DBA指南》第二章 - 安装Oracle和创建数据库(2.2 安装数据库软件)...

    当前关于12c的中文资料比较少,本人将关于DBA的一部分官方文档翻译为中文,很多地方为了帮助中国网友看懂文章,没有按照原文句式翻译,翻译不足之处难免,望多多指正. 2.2 安装数据库软件 这部分简短讲 ...

  6. (二)docker安装并持久化postgresql数据库

    安装docker步骤略过 1.拉取postgresql镜像 docker pull postgresql 2.在操作系统上创建挂载点 创建本地卷,数据卷可以在容器之间共享和重用, 默认会一直存在,即使 ...

  7. window xp系统安装php环境_Windows Server 2003及XP系统如何安装SQL Server 2000数据库?

    年头年初节假日就是小编的梗,忙得不可开交,这不越冷越刮风昨天服务器又崩了,折腾了一天安装好Windows Server 2003和IIS(这系统是有点老了,主要是单位机子和各系统也有点年头了,没办法) ...

  8. linux中安装多个mysql_liunx系统下安装多个MySql数据库并做主从配置

    在网上搜索了很多资料,都没有看到像样的文档,思路不是很清晰,对第一次安装的朋友来说较为困难,经过长时间的安装尝试和查询网上零碎的知识点,终于成功的完成Linux系统下多MySql数据库安装和主从配置, ...

  9. 堡垒机 请确认是否安装oracle客户端_OracleOracle数据库的安装(超详细)

    一.Oracle的安装 对于新手来说安装Oracle这样的数据库,第一次还是会有些陌生的,我自己在安装的过程中也是遇到的很多的坑.(自己装了5遍 /(ㄒoㄒ)/~~ ) 由于我自己安装的是11g这个版 ...

最新文章

  1. 云的普及难易,云计算普及的难易
  2. python打印文件中的前三行_linux利用grep查看打印匹配的下几行或前后几行的命令...
  3. [转]jquery的一个模板引擎-zt
  4. sap.m.list render initialization process
  5. 自定义能够for each的类,C#,Java,C++,C++/cli的实现方法
  6. Java SE 知识点
  7. 工作242:关于第二个git仓库提交代码
  8. Javascript原型钩沉
  9. SQL视图学习(入门概念理解)
  10. JDK 8的一些新特性
  11. 为何python不好找工作-不会Python迟早失业?Python何以成为找工作必备技能
  12. Oracle Shared Pool优化思路
  13. LeetCode 25 Reverse Nodes in k-Group
  14. HTML基础学习(二)—CSS
  15. struts2 传递json对象时的延迟加载异常处理方法
  16. 数据仓库与数据挖掘实践期末复习总结
  17. matlab 电路频率响应_频率响应法与matlab指令计算
  18. 旷厂练习生 Vol.16 | 两次进入研究院里的“研究院”实习是种什么体验?
  19. EPLAN中断点使用方法1
  20. 车载产品Bootloader功能的应用与实现

热门文章

  1. 金蝶K3物料分字段控制编辑权限
  2. 解决win7、win8系统Prolific_USB-to-Serial_Comm_Port问题
  3. opencv的几个常用主要常用图片操作函数
  4. 2013年沙利文 大未来读书小结
  5. php做异步回合制,请问有哪些游戏属于半回合制游戏?
  6. DCIM目录下的.thumbnails文件夹和处理
  7. SpringBoot循环依赖解决
  8. 2022-2028年全球与中国铝电解电容电极箔市场现状及未来发展趋势分析报告
  9. 3Ddungeon ~ 3D迷宫 BFS
  10. ---Warkey 界面修改手记