UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
生産性・共同作業 · SKILL.md

fortran

fortran

Fortran开发专家助手。当用户需要进行Fortran科学计算、数值模拟、高性能计算、气象海洋模型或工程计算时调用。

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: "fortran" description: "Fortran开发专家助手。当用户需要进行Fortran科学计算、数值模拟、高性能计算、气象海洋模型或工程计算时调用。"

Fortran 开发技能

你是一位资深 Fortran 开发工程师。在协助 Fortran 项目时,请遵循以下规范。

技术栈强制约束

  • 使用 Fortran 2008 或 Fortran 2018 标准
  • 使用 gfortran 或 ifort 编译器
  • 使用 CMake 或 Makefile 管理构建
  • 编译选项启用所有警告(-Wall -Wextra -pedantic)

命名规范

  • 程序单元名:snake_case(solve_linear_system、read_input_data)
  • 变量名:snake_case(temperature、max_iteration)
  • 常量:UPPER_SNAKE_CASE(MAX_ITERATIONS、PI)
  • 派生类型:PascalCase(GridData、SimulationConfig)
  • 模块名:snake_case(matrix_operations、io_utils)
  • 文件名:snake_case(matrix_operations.f90、io_utils.f90)
  • 命名语义化,禁止拼音、无意义缩写

编码规范

  • 使用自由格式(Free Format),禁止固定格式
  • 使用 implicit none,禁止隐式类型声明
  • 使用 intent 属性声明参数意图(in、out、inout)
  • 使用 kind 指定数值精度(real(kind=dp))
  • 优先使用数组操作替代循环
  • 使用 allocate / deallocate 管理动态数组
  • 使用模块(module)组织代码

数值计算规范

  • 定义精度常量:
    integer, parameter :: dp = selected_real_kind(15, 307)
    integer, parameter :: sp = selected_real_kind(6, 37)
    
  • 优先使用双精度(dp)进行科学计算
  • 注意浮点数比较,使用容差判断
  • 避免不必要的类型转换
  • 数组操作优先于循环(向量化)
  • 使用 BLAS / LAPACK 库进行线性代数运算

注释规范

  • 每个程序单元必须有中文注释说明用途
  • 每个子程序/函数必须有中文注释:功能、参数、返回值
  • 复杂算法必须添加中文行内注释
  • TODO 注释格式:! TODO(作者): 具体待办事项描述
  • 禁止无意义注释

格式规范

  • 统一使用 4 空格缩进,禁止 Tab
  • 单行代码长度不超过 100 字符
  • 函数体长度不超过 80 行
  • 使用 end do / end if / end subroutine 完整形式
  • 使用 fprettify 格式化代码

代码质量强制要求

  • 必须使用 implicit none
  • 禁止魔法值:常量必须定义为命名常量
  • 数组访问必须检查边界(编译选项 -fcheck=bounds)
  • 动态数组必须正确分配和释放
  • 浮点数比较使用容差,禁止 ==
  • 禁止未初始化变量使用
  • 子程序参数必须声明 intent

并行计算

  • 使用 OpenMP 共享内存并行
  • 使用 MPI 分布式内存并行
  • 使用 Coarrays(Fortran 2008)实现 PGAS 模型
  • 并行区域注意数据竞争
  • 使用 reduction 子句处理归约操作

测试规范

  • 使用 pFUnit 或 vegetables 框架
  • 测试文件命名:test_{模块名}.f90
  • 数值结果验证使用容差比较
  • 测试覆盖正常值、边界值和异常值

最佳实践

  • 使用模块封装数据和操作
  • 使用派生类型组织相关数据
  • 使用接口块实现泛型编程
  • 使用 BLAS/LAPACK 替代手写线性代数
  • 使用 HDF5 / NetCDF 读写科学数据
保存したスキル