File: C:\NOAA\NEMS_11731\src\chem\gocart\src\GMAO_Shared\MAPL_cfio\examples\testw_ex5.f90
1 program test
2 use ESMF_CFIOGridMOD
3 use ESMF_CFIOVarInfoMOD
4 use ESMF_CFIOFileMOD
5 use ESMF_CFIOSdfMOD
6 use ESMF_CFIOMOD
7
8
9 type(ESMF_CFIO) :: cfio
10 type(ESMF_CFIOVarInfo), pointer :: vars(:)
11 type(ESMF_CFIOGrid), pointer :: grids(:)
12
13 character(len=20) :: fileName
14 real, pointer :: ts(:,:,:), tmpu(:,:,:), u(:,:,:), v(:,:,:), ps(:,:,:)
15 integer :: fmode, rc, im=72, jm=46, km=18
16 integer :: date, curTime, timeInc, t
17 integer :: hhmmss(2) = (/0, 60000/)
18 real :: lev(18) = (/100.5145 , 118.2502 , 139.115 , 163.6615 , 192.541 , 226.5135 , &
19 266.4789 , 313.4988 , 368.8161 , 433.8927 , 510.4555 , 600.5238 , &
20 696.793 , 787.7 , 867.1572 , 929.6454 , 970.5525 , 992.555/)
21 real :: range(2) = (/-1.E10, 1.E10/)
22 logical :: twoD
23 real :: ak(19)=(/291.70, 792.92, 2155.39, 4918.34, 8314.25, &
24 7993.08, 7577.38, 7057.52, 6429.63, 5698.38, &
25 4879.13, 3998.95, 3096.31, 2219.02, 1420.39, &
26 754.13, 268.38, 0.0000, 0.0000 /)
27 real :: bk(19)=(/0.0000, 0.0000, 0.0000, 0.0000, 0.0000, &
28 0.0380541, 0.0873088, 0.1489307, 0.2232996, &
29 0.3099406, 0.4070096, 0.5112977, 0.6182465, &
30 0.7221927, 0.8168173, 0.8957590, 0.9533137, &
31 0.9851122, 1.0 /)
32
33 integer :: i
34 real :: kappa = 0.28571428571428575
35 real :: lon(72), lat(46), dlat, dlon
36 character(len=50) :: nameLat
37 character :: str
38 integer :: ig=2
39 logical :: passed = .true.
40
41 fmode = 0
42
43 dlat = 180./(jm-1)
44 dlon = 360./im
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
52
53 allocate(grids(3))
54 grids(1) = ESMF_CFIOGridCreate(gName='test3d')
55 call ESMF_CFIOGridSet(grids(1), im=72, jm=46, lon=lon, lat=lat, lev=lev, levUnit='layer')
56 call ESMF_CFIOGridSet(grids(1), ak=ak, bk=bk)
57 call ESMF_CFIOGridSet(grids(1),standardName='atmosphere_hybrid_sigma_pressure_coordinate')
58 call ESMF_CFIOGridSet(grids(1), coordinate = 'eta')
59 call ESMF_CFIOGridSet(grids(1),formulaTerm='a: ak0 b: bk0 ps: ps')
60
61 grids(2) = ESMF_CFIOGridCreate(gName='test3d1')
62 call ESMF_CFIOGridSet(grids(2), im=72, jm=46, lon=lon, lat=lat, lev=lev, levUnit='layer')
63 call ESMF_CFIOGridSet(grids(2), ak=ak, bk=bk)
64 call ESMF_CFIOGridSet(grids(2),standardName='atmosphere_hybrid_sigma_pressure_coordinate')
65 call ESMF_CFIOGridSet(grids(2), coordinate = 'eta')
66 call ESMF_CFIOGridSet(grids(2),formulaTerm='a: ak1 b: bk1 ps: ps')
67
68 grids(3) = ESMF_CFIOGridCreate(gName='test3d2')
69 call ESMF_CFIOGridSet(grids(3), im=72, jm=46, lon=lon, lat=lat, lev=lev, levUnit='layer')
70 call ESMF_CFIOGridSet(grids(3), ak=ak, bk=bk)
71 call ESMF_CFIOGridSet(grids(3),standardName='atmosphere_hybrid_sigma_pressure_coordinate')
72 call ESMF_CFIOGridSet(grids(3), coordinate = 'eta')
73 call ESMF_CFIOGridSet(grids(3),formulaTerm='a: ak2 b: bk2 ps: ps')
74
75
76
77 allocate(vars(5))
78 vars(1) = ESMF_CFIOVarInfoCreate(vName='ps')
79 call ESMF_CFIOVarInfoSet(vars(1), vName='ps', vTitle='surface pressure', grid=grids(1))
80 call ESMF_CFIOVarInfoSet(vars(1), amiss=1.E15, scaleFactor=1., addOffSet=0.)
81 call ESMF_CFIOVarInfoSet(vars(1), standardName='ps', twoDimVar=.true.)
82 call ESMF_CFIOVarInfoSet(vars(1), validRange=range, vUnits='K')
83 call ESMF_CFIOVarInfoSet(vars(1), timAve=.true., cellMthd='mean')
84
85 vars(2) = ESMF_CFIOVarInfoCreate(vName='ts')
86 call ESMF_CFIOVarInfoSet(vars(2),vName='ts',vTitle='skin temperature', grid=grids(1))
87 call ESMF_CFIOVarInfoSet(vars(2), standardName='tskin', twoDimVar=.true.)
88 call ESMF_CFIOVarInfoSet(vars(2), validRange=range, vUnits='K')
89 call ESMF_CFIOVarInfoSet(vars(2), timAve=.true., cellMthd='mean')
90
91 vars(3) = ESMF_CFIOVarInfoCreate(vName='tmpu')
92 call ESMF_CFIOVarInfoSet(vars(3), vName='tmpu', vTitle='temperature', grid=grids(1))
93 call ESMF_CFIOVarInfoSet(vars(3), amiss=1.E15, scaleFactor=1., addOffSet=0.)
94 call ESMF_CFIOVarInfoSet(vars(3), standardName='tmpu')
95 call ESMF_CFIOVarInfoSet(vars(3), validRange=range, vUnits='K')
96 call ESMF_CFIOVarInfoSet(vars(3), timAve=.true., cellMthd='mean')
97
98 vars(4) = ESMF_CFIOVarInfoCreate(vName='u')
99 call ESMF_CFIOVarInfoSet(vars(4), vName='u', vTitle='zonal wind', grid=grids(2))
100 call ESMF_CFIOVarInfoSet(vars(4), amiss=1.E15, scaleFactor=1., addOffSet=0.)
101 call ESMF_CFIOVarInfoSet(vars(4), standardName='uwnd')
102 call ESMF_CFIOVarInfoSet(vars(4), validRange=range, vUnits='m/s')
103 call ESMF_CFIOVarInfoSet(vars(4), timAve=.true., cellMthd='mean')
104
105 vars(5) = ESMF_CFIOVarInfoCreate(vName='v')
106 call ESMF_CFIOVarInfoSet(vars(5), vName='v', vTitle='V wind', grid=grids(3))
107 call ESMF_CFIOVarInfoSet(vars(5), amiss=1.E15, scaleFactor=1., addOffSet=0.)
108 call ESMF_CFIOVarInfoSet(vars(5), standardName='vwnd')
109 call ESMF_CFIOVarInfoSet(vars(5), validRange=range, vUnits='m/s')
110 call ESMF_CFIOVarInfoSet(vars(5), timAve=.true., cellMthd='max')
111
112
113
114 = ESMF_CFIOCreate(cfioObjName='ana')
115 call ESMF_CFIOSet(cfio, fName='GEOS5.ana.hdf', varObjs=vars, &
116 grids=grids, date=20011201, BegTime=0, timeInc=60000)
117 call ESMF_CFIOSet(cfio, title="c403_cer_01: FVGCM Diagnostics", &
118 source="Global Modeling and Assimilation Office", &
119 contact="data@gmao.gsfc.nasa.gov")
120 call ESMF_CFIOSet(cfio, history='File written by CFIO v1.0.0', &
121 convention='ESMF', institution="Global Modeling and Assimilation Office,&
122 & NASA Goddard Space Flight Center, Greenbelt, MD 20771")
123 call ESMF_CFIOSet(cfio, references='see ESMF', comment='First CFIO test version',prec=0)
124
125
126
127
128
129 call ESMF_CFIOGet(cfio, nVars=nVars, date=date, begTime=curTime, &
130 timeInc=timeInc, fName=fileName)
131
132
133 call ESMF_CFIOFileCreate(cfio)
134
135
136 allocate(tmpu(im,jm,km), ts(im,jm,1),ps(im,jm,1),u(im,jm,km),v(im,jm,km))
137
138 do t = 1, 2
139 do j = 1, jm
140 do i = 1, im
141 ps(i,j,1) = 100000 + (t-1)*cos(2*3.14*lat(j)/180.)*sin(2*3.14*2*lon(i)/360.)
142 ts(i,j,1) = 273 - (t-1)*sin(2*3.14*lat(j)/180.)*cos(2*3.14*2*lon(i)/360.)
143 enddo
144 enddo
145
146 do k =1, km
147 do j = 1, jm
148 do i = 1, im
149 tmpu(i,j,k) = ts(i,j,1)*(lev(k)/1000.)**kappa
150 u(i,j,k) = 10*(t-1)*cos(2*3.14*lat(j)/180.)*sin(2*3.14*lon(i)/360.)*exp(lev(k)/1000.)
151 v(i,j,k) = 10*(t-1)*cos(2*3.14*lat(j)/180.)*cos(2*3.14*lon(i)/360.)*exp(lev(k)/1000.)
152 enddo
153 enddo
154 enddo
155
156
157
158
159 call ESMF_CFIOVarWrite(cfio, 'ps', ps, date, hhmmss(t), rc=rc)
160 if ( rc .ne. 0 ) passed = .false.
161 call ESMF_CFIOVarWrite(cfio, 'ts', ts, date, hhmmss(t), rc=rc)
162 if ( rc .ne. 0 ) passed = .false.
163 call ESMF_CFIOVarWrite(cfio, 'tmpu', tmpu, date, hhmmss(t), rc=rc)
164 if ( rc .ne. 0 ) passed = .false.
165 call ESMF_CFIOVarWrite(cfio, 'u', u, date, hhmmss(t), rc=rc)
166 if ( rc .ne. 0 ) passed = .false.
167 call ESMF_CFIOVarWrite(cfio, 'v', v, date, hhmmss(t), rc=rc)
168 if ( rc .ne. 0 ) passed = .false.
169
170 end do
171
172 call ESMF_CFIOFileClose(cfio)
173
174 if ( passed ) then
175 print *, "testw_ex5: Passed"
176 else
177 print *, "testw_ex5: NOT Passed"
178 end if
179
180 stop
181 end
182