TypechoJoeTheme

MetMan's Blog

网站页面
2023-10-21

forrtl error 78

forrtl error 78
问题描述模式使用128个进程运行很快报错退出,测试其它进程配置也会得到相同的错误,多次运行出现相同的错误,排除了机器原因。调试平台和配置平台环境Intel CPU, 32 cores/node, 192GB内存Linux /Intel Fortran Compiler 2018/Intel MPI试验配置模式网格:NX=3301, NY=3301, NZ=70程序使用MPI并行,针对Y方向进行一维并行剖分,主要变量数据结构var(nx,nz,nb) ,其中nb=NY/nprocs。排查经过定位报错源代码由于代码没有加调试选项编译,不能看到最后报错的调用栈对应的源代码信息。使用intel fortran编译器选项-g -traceback重新编译代码运行,得到报错源码信息。如上图所示,程序在调用cmpclddrv子程序(cmpclddrv.f第一行)时报错。从出错调用栈信息可以看出出错点在进入cmpclddrv程序时,还未执行该子程序内执行语句。排查数组越界问题当时考虑程序在传参时出现问题,比如数组越界。因此,加上数组越界编译选项-check bounds重新编译、运行,发现不是数...
2023年10月21日
135 阅读
0 评论
2023-10-21

NetCDF数据格式介绍

NetCDF数据格式介绍
netCDF经过多年的发展,支持多种数据格式,其格式发展如下图所示。Classic format: CDF-1、CDF-2、CDF-5netCDF-4 format: 底层二进制格式是HDF5 (需要HDF5 ≥ 1.8.0)netCDF格式安装要求netCDF-4支持netCDF库构建时配置参数加上--enable-netcdf-4netCDF-4 parallel I/O为了netCDF-4库支持并行I/O,依赖库HDF5必须使用--enable-parallel选择配置,使用MPI编译器编译。netCDF编译使用与HDF5相同的MPI编译器。Classic netCDF parallel I/O使用PnetCDF库并行读写classic格式,包括CDF-1,CDF-2,CDF-5。netCDF-4版本如使用PnetCDF支持并行I/O,需配置--enable-pnetcdf选项。创建指定netCDF格式方法使用库API n*_create()创建netCDF文件,通过指定参数cmod设置。nc_create() (C接口)nf_create() (fortran 77接口...
2023年10月21日
156 阅读
0 评论
2023-10-21

模式后处理系统UPP介绍

模式后处理系统UPP介绍
Unified Post Processor (UPP)是美国业务数值模式使用的统一后处理系统,负责将模式输出数据转换生成业务数据产品。项目主页UPP Github主页UPP最新用户文档最新版本:v11.0.0 (截止:20230102)UPP支持模式按照文档说明,UPP基本上支持美国所有的业务模式,包括全球、区域模式。Global Forecast System (GFS)GFS Ensemble Forecast System (GEFS)North American Mesoscale (NAM)Rapid Refresh (RAP)High Resolution Rapid Refresh (HRRR)Short Range Ensemble Forecast (SREF)Hurricane WRF (HWRF)Unified Forecasting System (UFS),包括RRFS、HAFS、MRW、SRWUPP功能读取模式输出数据根据模式提供的气象场计算诊断量垂直插值功能(比如模式面插值到等压面)输出grib2格式的业务数据产品注:水平插值功能由外部程序wgri...
2023年10月21日
252 阅读
0 评论
2023-10-21

shell脚本计时方法

shell脚本计时方法
本文收集几种对shell脚本计时的方法。测试脚本如下:#!/bin/bash # timing_case.sh echo "start now" sleep 10 echo "end now"方法1:time命令如果是对整个shell脚本计时,使用time命令即可。$ time ./timing_case.sh start now end now real 0m10.014s user 0m0.007s sys 0m0.000s其中real时间就是我们关心的脚本运行时间。方法2:date命令如果需要知道shell脚本中某一段运行时间,可以使用date命令。可以在shell代码段前后加上date +%s,然后相减就得到运行时间,如下所示#!/bin/bash start_time=`date +%s` echo "start now" sleep 10 echo "end now" end_time=`date +%s` runtime=$((end_time-start_ti...
2023年10月21日
399 阅读
0 评论
2023-10-21

NetCDF文件压缩功能

NetCDF文件压缩功能
无损压缩zlibnetCDF4格式支持无损压缩算法DEFLATE压缩文件节省文件存储空间。DEFLATE算法使用Lempel-Ziv编码和Huffman编码组合。无损压缩是相对于有损压缩说的,指压缩完的数据能够完全还原恢复。netCDF4/HDF5使用zlib库提供的压缩算法,这也是netcdf4安装需要zlib库原因。gzip压缩工具也是用的zlib压缩算法。压缩等级(即deflation level)从无压缩等级0到最大压缩等级9,数值越大,压缩率越高,但所需压缩时间也会越长。按照NCO文档说法,从最低等级(dfl_lvl=1)到最高等级(dfl_lvl=9),文件大小差异一般小于10%。对于一般的气候数据集deflation算法能够压缩30-60%。常用的两个nc4压缩命令:nccopy (netcdf4库自带命令)$ nccopy -4 -d N in.nc out.nc # N-压缩等级,0-9ncks (来自NCO工具包)$ ncks -4 -L N in.nc out.nc # N-压缩等级,0-9数据测试试验准备以一个模式初始场数据为例,原始数据格式是net...
2023年10月21日
234 阅读
0 评论
2023-10-21

MPI IO错误处理

MPI IO错误处理
本周遇到一个MPI IO的问题让我对MPI标准在遇到错误时如何处理有了更深入的了解,在此记录一下。问题问题是这样的:有一个MPI并行程序,IO部分是通过MPI IO函数并行读入(MPI_FILE_OPEN())一个文件,但程序执行时在没有找到该文件情况下仍然继续执行。由于我没对MPI_FILE_OPEN函数返回码进行检查,程序正常运行,但读入数组实际上值是0,根本不是期望的值。出问题后还不容易查找。这与我对文件IO出错处理理解不一样,比如对于Fortran open语句默认找不到文件程序会报错终止。原因通过查阅MPI标准说明,发现MPI标准规定了MPI库运行时一旦侦测到错误时会终止程序运行,但文件操作例外。MPI IO 产生错误不会像通信错误一样被认为是致命的(MPI_ERRORS_ARE_FATAL),仅仅是捕捉这些错误(函数返回码)并继续执行程序。MPI标准预定义了两个错误handlers:MPI_ERRORS_ARE_FATAL 致命错误,一旦侦测到,调用MPI_ABORT退出MPI_ERRORS_RETURN 仅仅返回错误码给用户,其它没有影响MPI IO文件处理的缺...
2023年10月21日
179 阅读
0 评论
2023-10-21

Fortran字符串处理下篇

Fortran字符串处理下篇
字符与数值类型转换通过ASCII表转换常用的字符与整数一一映射的编码表是ASCII表,规定了256个字符与0-255整数一一对应关系。下表是Fortran用于两者互相转换的内置函数,其中ACHAR与CHAR、IACHAR与ICHAR区别在于一个指定使用ASCII表,另一个是处理器使用的编码表,不一定是ASCII表。但通常两者是等价的。内置过程名功能ACHAR(I)返回整数对应的ASCII码表中字符CHAR(I,[,KIND])返回给定整数对应的处理器使用的编码序列字符IACHAR(C)返回ASCII表中字符对应的十进制整数ICHAR(C)返回处理器使用的编码表中字符对应的整数ASCII码表中字符A-Z、a-b、0-9都是有序、连续排列的,利用这个特点我们可以对字符串进行大小比较、大小写转换等操作。下面示例程序实现了一个转换大写字符串的功能。module string_utils implicit none contains function to_upper(str) implicit none character(len=*),intent(in) :...
2023年10月21日
171 阅读
0 评论
2023-10-21

Fortran字符串处理上篇

Fortran字符串处理上篇
Fortran中使用character声明单个字符或多个字符组成的字符(串)变量。Fortran标准也提供了一些内置函数用于字符串处理,但总体来说Fortran字符串处理能力和C语言一样都不是很强。说明:可以将character声明的变量理解成字符串变量。字符串变量声明与赋值声明!字符常量 character(len=5),parameter :: constr = 'Hello' character :: ch !单个字符变量 character(len=10) :: str !长度为10的字符(串)变量 character*10 :: str1 !使用*length 方式声明 character*10 :: str_arr(10) !长度为10的字符数组变量,数组有10个元素推荐使用character(len=length)声明字符串变字符串。赋值str = 'nice to' str1 = ' meet you' str_arr(1) = str !字符串变量之间赋值将一个字符串变量值赋给另一个字符串变量,不要求两个字符串变量长度相同,如果短字符串赋给长字符串...
2023年10月21日
188 阅读
0 评论
登录
X
用户名
密码