Fortran哈希函数库的使用

news/2024/9/24 18:04:13

哈希表hash table,类似于python中的字典,可以实现基于字符串的索引。即根据输入的数据(整数,浮点数,字符串等),对应到唯一的数据。这个特性对于气象编程中的根据站点信息检索数据十分有用。由于Fortran标准库中没有功能的实现,需要自己编写函数。github已经有大神编写好了函数库,而且支持不同类型的数据,十分方便。

使用的函数库为https://github.com/LKedward/fhash,编译器为intel fortran, linux平台。大致步骤就是一个Fortran使用第三方函数库的过程。 
Windows下的Visual Studio编译更简单,直接将源代码文件夹(包括子文件夹fhash_key)下的所有代码文件拖到“解决方案管理器”里,编译运行即可。

具体演示 

1. 下载软件包


wget https://github.com/LKedward/fhash/archive/refs/tags/v0.2.0.tar.gz

2. 解压

tar -xzvf v0.2.0.tar.gz

3. 安装

cd fhash-0.2.0/mkdir buildcd buildcmake .. -DCMAKE_INSTALL_PREFIX=/home/lzjiang/pkgs/usr/ -DCMAKE_Fortran_COMPILER=ifort
make testmake install

其中-DCMAKE_INSTALL_PREFIX为指定的库安装路径,-DCMAKE_Fortran_COMPILER指定了Fortran编译器

编写一个脚本测试一下

program fortran_hash_test
!written by Lizhi Jiang, 21 June, 2024
use fhash, only: key=>fhash_key, fhash_tbl_t
implicit none
type(fhash_tbl_t) :: tblinteger :: istatcharacter(len=8) :: key1='my_key_1'character(len=8) :: key2='my_key_2'integer          :: key3=123456integer          :: key4(5)=[1,2,3,4,5]integer          :: val1=10real             :: val2=1.0character(:), allocatable :: val3logical          :: val4=.false.val3='a string value'call tbl%set(key(key1), value=val1)call tbl%set(key(key2), value=val2)call tbl%set(key(key3), value=val3)call tbl%set(key(key4), value=val4)call tbl%get(key('my_key_1'),val1,stat=istat)if(istat /=0) thenprint*,"Key not found",istatelseprint*,"my_key_1",val1end ifcall tbl%get(key('my_key_2'),val2,stat=istat)if(istat /=0) thenprint*,"Key not found",istatelseprint*,"my_key_2",val2end ifcall tbl%get(key('my_key_3'),val3,stat=istat)if(istat /=0) thenprint*,"Key not found",istatelseprint*,"my_key_3",val3end ifcall tbl%get(key(123456),val3,stat=istat)if(istat /=0) thenprint*,"Key not found",istatelseprint*,"my_key_3",val3end ifcall tbl%get(key([1,2,3,4,5]),val4,stat=istat)if(istat /=0) thenprint*,"Key not found",istatelseprint*,"my_key_3",val4end ifend program fortran_hash_test
fhash_test.f90

 4. 脚本编译,运行,测试

lzjiang@nimbus ~ $ export LD_LIBRARY_PATH=/home/lzjiang/pkgs/usr/lib:$LD_LIBRARY_PATH
lzjiang@nimbus ~ $ ifort -I/home/lzjiang/pkgs/usr/include/fortran_modules/Intel/2021.10.0.20230609/ -L/home/lzjiang/pkgs/usr/lib -lfhash fhash_test.f90 
lzjiang@nimbus ~ $ ./a.out my_key_1          10my_key_2   1.000000    Key not found          -1my_key_3a string valuemy_key_3 F

 

几个注意的点:

1 用cmake安装后,头文件的路径并不在include目录,而是在其子目录下

2 运行的时候需要添加到运行库搜索路径 LD_LIBRARY_PATH

 

更多请参考 https://lkedward.github.io/fhash/page/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/46332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

OpenCL体系结构分析

OpenCL体系结构分析 OpenCL是一个开放的行业标准,用于对组织到单个平台中的CPU、GPU和其他离散计算设备的异构集合进行编程。它不仅仅是一种语言。OpenCL是一个用于并行编程的框架,包括一种语言、API、库和一个支持软件开发的运行时系统。例如,使用OpenCL,程序员可以编写在…

Ax86uPro路由器多平台直播录制

开源项目:https://github.com/hr3lxphr6j/bililive-go 下载程序传到路由器【建议挂载移动硬盘】:路由器安装Entware环境登录到命令行执行: opkg update --no-check-certificat opkg install ffmpeg --no-check-certificat 到bililive-go程序目录执行: ./bililive-linux-arm…

mui里点击input框是为什么会返回顶部

原文 https://blog.csdn.net/weixin_44070058/article/details/123093978 删除 mui.min.js 里的这行代码 d.contains(c)&&(d.remove(c),setTimeout(function(){window.scrollTo(b.body.scrollLeft,b.body.scrollTop)},20))关联项目FreeSql QQ群:4336577BA & Blazo…

如何在Linux安装Python+JDK+Mysql+Tomcat+Django以及简单的跑一个java web项目和一个简单的Django项目

Linux 搭建Java web平台 一,Linux安装JDK ①下载安装包 解压 [root@wwww ~]# tar -zxvf jdk-linux-x64.tar.gz②移动到usr/local/java目录下③安装完成配置环境变量 vi /etc/profile 最后如下两行即可JAVA_HOME=/usr/local/java/jdk1.8 # 这是你放的jdk安装路径CLASSPATH=$JA…

mini-lsm通关笔记Week1Day2

在今天的任务中主要是实现下面一层一层的迭代器:Task 1: Memtable Iterator在本章中,我们将实现LSM scan接口,scan使用迭代器API按顺序返回一系列键值对。在上一章中,您已经实现了get API和创建不可变memtable的逻辑,您的LSM state现在应该有多个memtable。您需要首先在单…

绿色化使用Foxmail

本文介绍了一种备份以及使用Foxmail邮箱数据库的方法,以便在不同电脑之间挪动包含本地文件夹的邮箱数据库。Foxmail有个非常实用的功能叫“本地文件夹”,可以将邮件挪到本地文件夹内从而不占用邮箱宝贵的云端存储空间:但是Foxmail本身是没有绿色版的,这就为这些本地邮件的迁…

Minio实现文件上传、下载、预览、删除

环境:JDK11Minio8服务器搭建Minio:https://www.cnblogs.com/warmNest-llb/p/18233203完成项目 AjaxResult 结果返回使用的 若依。 1. pom.xml<!-- MinIO Client --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId&…

一个ArcGIS中我知道但是不常用的工具

如题,这个工具好像很有用 Raster To Point