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     !   define ESMF_CFIO,  ESMF_CFIOVarInfo, and ESMF_CFIOGrid objects
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     ! Create grid and set grid attributes
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     ! Create variable object and set variable attributes
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     ! Create CFIO object and set global attributes
113     
114         cfio =  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     !    call ESMF_CFIOSet(cfio, attRealName='ak', attReal=ak )
125     !    call ESMF_CFIOSet(cfio, attRealName='bk', attReal=bk )
126     
127     ! All metadata are set. Get some metadata to see what in the CFIO Obj.
128     
129         call ESMF_CFIOGet(cfio, nVars=nVars, date=date, begTime=curTime, &
130                        timeInc=timeInc, fName=fileName)
131     
132     ! Create output file
133         call ESMF_CFIOFileCreate(cfio)
134     
135     ! put some test data into the variables
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     ! Write data to the output file
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     ! Close the file
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