File: C:\NOAA\NEMS_11731\src\chem\gocart\src\GMAO_Shared\MAPL_cfio\examples\benchmark_sdf.F90
1
2
3
4
5
6 #include "benchmark.h"
7
8 program test
9
10 use ESMF_CFIOMOD
11
12
13
14 integer, parameter :: im=IM_, jm=JM_, km=KM_, tm=TM_
15
16 type(ESMF_CFIO) :: cfio
17 type(ESMF_CFIOVarInfo), pointer :: vars(:)
18 type(ESMF_CFIOGrid), pointer :: grid
19
20 character(len=20) :: fileName
21 integer :: i, fmode, rc
22 integer :: date, curTime, timeInc, t
23 integer :: hhmmss(tm) = (/0, 30000, 60000, 90000, 120000, &
24 150000, 180000, 210000 /)
25 logical :: twoD
26
27 integer :: im1, jm1, km1
28
29 logical :: passed = .true.
30
31
32
33 real :: ps(im,jm), ts(im,jm), tmpu(im,jm,km)
34 real :: u(im,jm,km), v(im,jm,km), q(im,jm,km)
35 real :: lon(im), lat(jm), lev(km)
36 real :: dlat, dlon, sig, dsig
37
38 fmode = 0
39
40
41
42 = 180./(jm-1)
43 dlon = 360./im
44 dsig = 1. / (km-1)
45 do i =1, im
46 lon(i) = -180 + (i-1)*dlon
47 end do
48 do j =1, jm
49 lat(j) = -90 + (j-1)*dlat
50 end do
51 do k = 1, km
52 sig = (k-1) * dsig
53 lev(k) = 0.01 + sig * (1000.-0.01)
54 end do
55
56
57
58 allocate(grid)
59 grid = ESMF_CFIOGridCreate(gName='test3d')
60 call ESMF_CFIOGridSet(grid,im=im,jm=jm,km=km,lon=lon,lat=lat,lev=lev,levUnit='hPa')
61 call ESMF_CFIOGridSet(grid, standardName='atmosphere_pressure_coordinate')
62 call ESMF_CFIOGridSet(grid, coordinate = 'pressure')
63
64
65 call ESMF_CFIOGridGet(grid, im=im1, jm=jm1, km=km1)
66
67
68 allocate(vars(6))
69
70 vars(1) = ESMF_CFIOVarInfoCreate(vName='ps')
71 call ESMF_CFIOVarInfoSet(vars(1), vName='ps', vTitle='surface pressure', grid=grid)
72 call ESMF_CFIOVarInfoSet(vars(1), amiss=1.E15, scaleFactor=1., addOffSet=0.)
73 call ESMF_CFIOVarInfoSet(vars(1), standardName='ps', twoDimVar=.true.)
74 call ESMF_CFIOVarInfoSet(vars(1), vUnits='K')
75
76 vars(2) = ESMF_CFIOVarInfoCreate(vName='ts')
77 call ESMF_CFIOVarInfoSet(vars(2),vName='ts',vTitle='skin temperature', grid=grid)
78 call ESMF_CFIOVarInfoSet(vars(2), standardName='tskin', twoDimVar=.true.)
79 call ESMF_CFIOVarInfoSet(vars(2), vUnits='K')
80
81 vars(3) = ESMF_CFIOVarInfoCreate(vName='tmpu')
82 call ESMF_CFIOVarInfoSet(vars(3), vName='tmpu', vTitle='temperature', grid=grid)
83 call ESMF_CFIOVarInfoSet(vars(3), amiss=1.E15, scaleFactor=1., addOffSet=0.)
84 call ESMF_CFIOVarInfoSet(vars(3), standardName='tmpu')
85 call ESMF_CFIOVarInfoSet(vars(3), vUnits='K')
86
87 vars(4) = ESMF_CFIOVarInfoCreate(vName='u')
88 call ESMF_CFIOVarInfoSet(vars(4), vName='u', vTitle='zonal wind', grid=grid)
89 call ESMF_CFIOVarInfoSet(vars(4), amiss=1.E15, scaleFactor=1., addOffSet=0.)
90 call ESMF_CFIOVarInfoSet(vars(4), standardName='uwnd')
91 call ESMF_CFIOVarInfoSet(vars(4), vUnits='m/s')
92
93 vars(5) = ESMF_CFIOVarInfoCreate(vName='v')
94 call ESMF_CFIOVarInfoSet(vars(5), vName='v', vTitle='V wind', grid=grid)
95 call ESMF_CFIOVarInfoSet(vars(5), amiss=1.E15, scaleFactor=1., addOffSet=0.)
96 call ESMF_CFIOVarInfoSet(vars(5), standardName='vwnd')
97 call ESMF_CFIOVarInfoSet(vars(5), vUnits='m/s')
98
99 vars(6) = ESMF_CFIOVarInfoCreate(vName='q')
100 call ESMF_CFIOVarInfoSet(vars(6), vName='q', vTitle='humidity', grid=grid)
101 call ESMF_CFIOVarInfoSet(vars(6), amiss=1.E15, scaleFactor=1., addOffSet=0.)
102 call ESMF_CFIOVarInfoSet(vars(6), standardName='sphu')
103 call ESMF_CFIOVarInfoSet(vars(6), vUnits='g/km')
104
105
106
107 = ESMF_CFIOCreate(cfioObjName='ana')
108 call ESMF_CFIOSet(cfio, fName='benchmark_out.hdf', varObjs=vars, &
109 grid=grid, date=20011201, BegTime=0, timeInc=30000)
110 call ESMF_CFIOSet(cfio, title="c403_cer_01: FVGCM Diagnostics", &
111 source="Global Modeling and Assimilation Office", &
112 contact="data@gmao.gsfc.nasa.gov")
113 call ESMF_CFIOSet(cfio, history='File written by CFIO v1.0.0', &
114 convention='ESMF', institution="Global Modeling and Assimilation Office,&
115 & NASA Goddard Space Flight Center, Greenbelt, MD 20771")
116 call ESMF_CFIOSet(cfio, references='see ESMF', comment='First CFIO test version',prec=0)
117
118
119
120 call ESMF_CFIOGet ( cfio, nVars=nVars, date=date, begTime=curTime, &
121 timeInc=timeInc, fName=fileName)
122
123
124 call ESMF_CFIOFileCreate(cfio)
125
126
127
128 = 1000.
129 ts = 273.
130 tmpu = 300.
131 u = 10.
132 v = 5.
133 q = 20.
134
135
136
137 do t = 1, tm
138
139 call ESMF_CFIOVarWrite(cfio, 'ps', ps, date, hhmmss(t), rc=rc)
140 if ( rc .ne. 0 ) passed = .false.
141 call ESMF_CFIOVarWrite(cfio, 'ts', ts, date, hhmmss(t), rc=rc)
142 if ( rc .ne. 0 ) passed = .false.
143 call ESMF_CFIOVarWrite(cfio, 'tmpu', tmpu, date, hhmmss(t), rc=rc)
144 if ( rc .ne. 0 ) passed = .false.
145 call ESMF_CFIOVarWrite(cfio, 'u', u, date, hhmmss(t), rc=rc)
146 if ( rc .ne. 0 ) passed = .false.
147 call ESMF_CFIOVarWrite(cfio, 'v', v, date, hhmmss(t), rc=rc)
148 if ( rc .ne. 0 ) passed = .false.
149 call ESMF_CFIOVarWrite(cfio, 'q', q, date, hhmmss(t), rc=rc)
150 if ( rc .ne. 0 ) passed = .false.
151
152 end do
153
154
155 call ESMF_CFIOFileClose(cfio)
156
157 if ( passed ) then
158 print *, "benchmark_sdf: Passed"
159 else
160 print *, "benchmark_sdf: NOT Passed"
161 end if
162
163 stop
164
165 end
166