首页 > 其他分享 >气象信息系统工程-fortran

气象信息系统工程-fortran

时间:2024-07-02 19:20:29浏览次数:17  
标签:real none end 信息系统 write fortran program implicit 气象

《气象信息系统工程》一命速通

Hands on Fortran & OpenGrads

Fortran与OpenGrads

Fortran

program main
!example
   implicit none
   real st1, st2, st3, stave
   st1 = 9.5
   st2 = 9.0
   st3 = 8.7
   stave = (st1 + st2 + st3)/3.0
   print *, 'stave=', stave
end

气象绘图软件:OpenGrads

用于4D数据的分析,即经度lon纬度lat层次lev时间time的4维。

使用流程:准备数据*.grd -> 数据描述文件*.ctl -> 脚本文件*.gs -> 保存结果

Fortran语言基础

数据类型

整数类型 integer
实数类型 real
复数类型 complex
字符类型 character
逻辑类型 logical

常量声明
先声明类型,再用parameter声明为常量。

program ex
implicit none
real pi
parameter(pi=3.1415926)
write(*, *) sin(pi/6)
end

合法的变量声明

REAL(KIND=4)a,b,c,d  !声明KIND值为4的4个实型变量
REAL(8)e             !声明KIND值为8的1个实型变量
REAL f               !声明KIND值为4(缺省)的1个实型变量
REAL:g=1.23          !声明KND值为4(缺省)的1个实型变量且赋初值为1.23

变量初始化

program ex
integer:: a=1
real:: b=2.0
complex:: c=(1.0,2.0)
character(len=10)::string="FORTRAN"
write(*, *) a,b,c,string
end

作业1 马格努斯经验公式计算饱和水汽压

\[E_1 = E_0 \times 10^{\frac{7.45t}{237.3+t}} \]

\[E_2 = E_0 \times e^{\frac{16.67t}{243.5+t}} \]

其中\(E_0=6.11hPa\)

program main
implicit none
real e0, e1, e2, e3, t
parameter:: e0=6.11

e1=e0*10**((7.45*t)/(237.3+t))
e2=e0*exp((17.67*t)/(243.5+t))

print *, 'e1=',e1, 'e2=',e2

end

顺序结构

顺序结构:A→B
先执行A,再执行B,先上后下,先左后右(赋值语句先右后左)

表控输入

read *,a,b,c,d

可以从键盘中输入 4,4,24,10 或者中间使用4 4 24 10
则 a=3.7, b=-1.8, c=24, d=10

也可以输入2*4, 24, 10效果类似

表控输出
print只能是一计算机系统隐含指定的打印机(或者显示器)进行打印输出,形式为print *[, 输出表]

write可以指定任意进行打印输出,形式为write (*,*)[, 输出表]

format格式化

program main
implicit none
integer a
a=100

print *, a

print 101, a
101 format(I4)
! 上下两种输出相同
print '(I4)', a

作业2 汛期气象站计算

输入3个气象站5个月(汛期)雨量数据,统计每个气象站的总雨量和平均雨量,计算3个站五月、六月、七月、八月、九月的平均雨量,输出每个气象站每个月的雨量、总雨量和平均雨量,以及五月、六月、七月、八月、九月的平均雨量。
img

program ex
   implicit none
   real r11, r12, r13, r14, r15, total11, av11
   real r21, r22, r23, r24, r25, total21, av21
   real r31, r32, r33, r34, r35, total31, av31
   real av1, av2, av3, av4, av5

   write (*, "(30X, ' 5月 6月 7月 8月 9月') ")
   write (*, "(1X, '输入江阴气象站五个月的雨: ') ")
   read (*, *) r11, r12, r13, r14, r15
   write (*, "(1X, '输入定波闸气象站五个月的雨量: ') ")
   read (*, *) r21, r22, r23, r24, r25
   write (*, "(1X, '输入肖山气象站五个月的雨量:')")
   read (*, *) r31, r32, r33, r34, r35

   total11 = r11 + r12 + r13 + r14 + r15  ! 江阴总雨量
   av11 = total11/5                       ! 江阴平均雨量
   total21 = r21 + r22 + r23 + r24 + r25  ! 定波闸总雨量
   av21 = total21/5                       ! 定波闸平均雨量
   total31 = r31 + r32 + r33 + r34 + r35  ! 肖山总雨量
   av31 = total31/5                       ! 肖山平均雨量

   av1 = (r11 + r21 + r31)/3  ! 5月平均雨量
   av2 = (r12 + r22 + r32)/3  ! 6月平均雨量
   av3 = (r13 + r23 + r33)/3  ! 7月平均雨量
   av4 = (r14 + r24 + r34)/3  ! 8月平均雨量
   av5 = (r15 + r25 + r35)/3  ! 9月平均雨量

   write (*, "(28X, ' 5月 6月 7月 8月 9月 总雨量 平均雨量') ")
   write (*, 200) '江阴气象站五个月的雨量: ', r11, r12, r13, r14, r15, total11, av11
   write (*, 200) '定波闸气象站五个月的雨量: ', r21, r22, r23, r24, r25, total21, av21
   write (*, 200) '肖山气象站五个月的雨量: ', r31, r32, r33, r34, r35, total31, av31
200 format(1X, A26, 5(F5.1, 2X), F6.1, 2X, F7.3)
   write (*, 300) ' 5月', av1, ' 6月', av2, ' 7月', av3, ' 8月', av4, ' 9月', av5
300 format(1X, A4, '平均雨量: ', F7.3)
! 300 format(5(1X,A4, '平均雨量: ',F7.3)) ! 一行输出
end

选择结构

判断输入的 pH 值是否表示酸雨

program main
   implicit none
   real ph
   write (*, *) 'Please enter PH value:'
   read *, ph
   if (ph < 5.6) then
      write (*, 100) ph
   else
      write (*, 200) ph
   end if

100 format(1X, 'PH=', F4.2, ', is acid rain!')
200 format(1X, 'PH=', F4.2, ', is not acid rain!')

end

n2 的值来判断大气的层结类型

program main
   implicit none
   real n2
   write (*, 100)
   read (*, *) n2
   if (n2 .eq. 0.0) print *, '中性层结'
   if (n2 .gt. 0.0) print *, '稳定层结'
   if (n2 .lt. 0.0) print *, '不稳定层结'

100 format(1X, 'please input n2:')
end

循环结构

do 循环结构和 do while循环结构
循环输入一周日最高气温,判断最高气温,并计算一周平均最高气温。2014年3月23日-29日南京日最高气温如下:
16.0 17.0 17.0 18.0 16.0 22.0 24.0(单位:℃)

program main
   implicit none
   real t, tmax, sum.tave
   interger i
   tmax = 0.0; sum = 0.0
   do i = 1, 7
      read *, t
      sum = t + sum
      if (t >= tmax) then
         tmax = t
      end if
   end do

   tave = sum/7.0
   print *, 'tmax=', tmax
   print *, 'tave=', tave

end

循环输入每六小时降水资料,如果发现数据小于0或者大于1000时,终止循环,并提示输入数据异常。

program main
   implicit none
   real precip
   integer k
   print *, '输入每六小时降雨量(mm):'
   k = 0
   read *, precip
   do while (precip .ge. 0.0 .and. precip .le. 1000.0)
      k = k + 1
      print *, k, '降雨量(mm):', precip
      read *, precip
   end do
   print *, '输入数据异常'
end

输入正整数n,求级数的前n项和,如果当某项绝对值≤10-5时,虽未满n项,也因满足精度而不再加入下一项。

program main
   implicit none
   integer:: i, n
   real:: s = 0, t

   read *, n

   do i = 1, n
      t = 1./(i*(i + 1))
      s = s + t
      if (abs(t) < 1.e-5) exit
   end do

   if (i == n + 1) i = i - 1

   print *, 'sum=', s, ' term=', i
end

输入3月份气温,缺测记录为999,请统计3月份平均气温

program main
   implicit none

   real t, tsum, tave

   integer i, num

   tsum = 0.0
   num = 0

   do i = 1, 31
      read *, t
      if (t == 999.0) cycle
      tsum = tsum + t
      num = num + 1
   end do

   ! if (t /= 999.0) then
   !    tsum = tsum + t
   !    num = num + 1
   ! end if

   tave = tsum/num
   print *, tave
end

作业3 江淮站点

img

program main
   integer, parameter::ist = 5
   real lat, lon
   character*8 id
   integer i

   do i = 1, ist
      write (*,"('输入站点的站号, 纬度和经度: ')")
      read (*, *) id, lat, lon
      if (lon > 109.0 .and. lat >= 28.0 .and. lat <= 34.0) then
         write (*, *) id, lat, lon
      else
         write (*, *) id, '站不位于江淮地区'
      end if
   end do

end

数组

已知某气象台站7月17日至7月21日每天4个观测时间(即02,08,14,20时刻)的温度观测值,要求编程实现下列功能:
(1) 统计每天的平均温度。
(2) 统计7月17日至21日总的温度平均值。
(3) 输出日平均温度的最高值。
(4) 统计5天中每天4个观测时间的温度平均值。
img

program main
   implicit none
   integer, parameter :: m = 5, n = 4
   real t(m, n), DAT(m), TAT(n)
   data t/28.8, 29.8, 28.7, 29.9, 30.4, 32.9, 31.8, 32.3, 33.4, 32.5, &
      36.8, 36.0, 35.1, 36.2, 36.5, 33.2, 31.1, 32.3, 32.7, 25.5/
   integer i, j
   real aver, RS, CS, MaxT
   ! 统计总的平均温度
   aver = sum(t)/(m*n)
   ! 统计每天的平均温度
   DAT = sum(t, dim=2)/4
   ! 统计4个观测时次的5天温度平均值
   TAT = sum(t, dim=1)/5
   ! 求每天平均温度的最高值
   MaxT = MAXVAL(DAT)

   write (*, '(A12,5F7.2)') "日平均温度", DAT
   write (*, '(A17,F7.2)') "5天总的平均温度", aver
   write (*, '(A27,4F7.2)') "每个观测时次的5天平均温度", TAT
   write (*, '(A18,F7.2)') "日平均温度最高值", MaxT

end

子程序

已知上海、南京、武汉三地的气温,编制外部函数子程序计算三地的平均气温
外部子程序

program main
   implicit none
   external average
   real a, b, c, average
   read *, a, b, c
   print *, "三地平均气温: ", average(a, b, c)

end program

function average(x, y, z)
   implicit none
   real x, y, z, average
   average = (x + y + z)/3 ! 函数名被赋值
end function average
program main
   implicit none
   external average
   rel a, b, c, ave
   read *, a, b, c
   call average(a, b, c, ave)
   print *, "三地平均气温: ", ave
end program

subroutine average(x, y, z, ave)
   implicit none
   real x, y, z, ave
   ave = (x + y + z)/3
end subroutine average

内部子程序

program main
   implicit none
   real a, b, c
   read *, a, b, c
   print *, "三地平均气温: ", average(a, b, c)
contains
   function average(x, y, z)
      implicit none
      real x, y, z, average
      average = (x + y + z)/3
   end function average
end program
program main
   implicit none
   external average
   real a, b, c, ave
   read *, a, b, c
   call average(a, b, c, ave)
   print *, "三地平均气温: ", ave
contains

   subroutine average(x, y, z, ave)
      implicit none
      real x, y, z, ave
      ave = (x + y + z)/3
   end subroutine average
end program

虚实结合

program main
   implicit none
   external sub
   integer ::a(5) = (/1, 2, 3, 4, 5/), b = 8
   call sub(a(3), b)
   print "(1x, 'a(3)=', i3/' b=', i3)", a(3), b
end program

subroutine sub(x, y)
   implicit none
   integer x, y
   x = x + 3
   y = y + 4
end subroutine sub

变量作用域和生存周期

program main
   implicit none
   call sub()
   call sub()
   call sub()
   stop
end

subroutine sub()
   implicit none
   integer :: count = 1
   save count
   write (*, *) count
   count = count + 1
   return
end

标签:real,none,end,信息系统,write,fortran,program,implicit,气象
From: https://www.cnblogs.com/moguw/p/18280410

相关文章

  • Prometheus在金融行业信息系统运维管理中的应用:实践与案例分析
    Prometheus在金融行业信息系统运维管理中的应用:实践与案例分析Prometheus是一款开源的监控系统和时序数据库,被广泛应用于各种行业的运维管理中,特别是在金融行业。它具有强大的数据采集和分析能力,能够实时监控系统的性能和状态,为故障排查和系统优化提供可靠的数据支持。本文......
  • 信息系统运维管理:实践与发展
    信息系统运维管理:实践与发展信息系统运维管理在现代企业中扮演着至关重要的角色,确保信息系统的高效、安全和稳定运行。本文结合《信息系统运维管理》文档内容,探讨了服务设计阶段、服务转换阶段、委托系统维护管理三个主要章节,并结合最新的互联网相关知识,对信息系统运维管理......
  • 项目范围管理(信息系统项目管理师)
     需求管理计划的主要内容包括:如何规划跟踪和报告各种需求活动、配置管理活动(例如,如何启动变更,如何分析其影响,如何进行追溯,跟踪和报告,以及变更审批权限)、需求优先级排序过程、测量指标及使用这些指标的理由、反映哪些需求熟悉将被列入跟踪矩阵等产品范围的完成情况是根据产品......
  • 项目范围管理(信息系统项目管理师)
    需求管理计划是对项目的需求进行定义、确定、记载、核实管理和控制的行动指南。制定需求管理计划,规划如何分析、记录和管理需求,这样才是较为稳妥的方法在信息系统集成项目中,需求管理贯穿于整个过程,他的最基本的任务就是明确需求,并使项目团队和用户达成共识,即建立需求基线需求管......
  • 基于Java的会员制医疗预约服务管理信息系统
    你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。开发语言:Java数据库:MySQL技术:Java技术ssm框架,结合JSPM工作流引擎工具:IDEA/Eclipse、Navicat、Maven系统展示首页系统首页界面图医院信息医院信息界面图坐诊信息坐诊信息界面图个人中心个人信息......
  • 053java jsp ssm高校学生比赛活动信息系统(源码+数据库+文档)
    项目技术:Spring+SpringMVC+MyBatis等等组成,B/S模式管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/10......
  • 中国气象局发布三个AI气象大模型系统,具体能做什么?
    6月18日,中国气象局官方局最新发布了三个AI气象大模型系统,分别是人工智能全球中短期预报系统“风清”(以下简称“风清”大模型)、人工智能临近预报系统“风雷”(以下简称“风雷”大模型)和人工智能全球次季节—季节预测系统“风顺”(以下简称“风顺”大模型)。中国气象局......
  • fortran 数组下标从0还是1开始?
    Fortran语言中,数组的下标是从1开始的,这与许多其他编程语言(如C、Python或Java)将数组下标从0开始的习惯不同。这种从1开始的下标命名方式源于Fortran的历史,当时的记录卡片和编程语言是从1开始编号的。以下是一个Fortran代码示例,展示了如何声明一个数组并使用从1开始的下标:program......
  • GIS数据获取:气象数据免费下载网站
      本文对目前主要的气象数据获取网站加以整理与介绍。  本文为“GIS数据获取整理”专栏中第二篇独立博客,因此本文全部标题均由“2”开头。本文对目前主要的气象、气候数据获取网站加以整理与介绍。2气象数据2.1全球气象数据2.1.1WorldClim网址:https://www.worldclim.......
  • fortran continue的用法
    continue是继续语句。表示不执行continue后面的语句,直接进入下次循环。参考:https://wenku.baidu.com/view/7e4f63f702f69e3143323968011ca300a6c3f69e.html在Fortran77中,CONTINUE语句通常用于结束一个IF语句块或循环(例如DO循环),并且转移到下一个语句。它的作用类似于其他编......