10 use gengrid_kinds,
only: dbl_kind,int_kind,cm
11 use grdvars,
only: ni,nj,nv,nverts,ncoord
12 use grdvars,
only: lonct,latct,lonct_vert,latct_vert
13 use grdvars,
only: loncu,latcu,loncu_vert,latcu_vert
14 use grdvars,
only: loncv,latcv,loncv_vert,latcv_vert
15 use grdvars,
only: lonbu,latbu,lonbu_vert,latbu_vert
16 use grdvars,
only: wet4,areact,anglet,dp4,angle,angchk
17 use charstrings,
only: logmsg,history
18 use vartypedefs,
only: maxvars, fixvars, fixvars_typedefine
24 public write_tripolegrid
33 subroutine write_tripolegrid(fname)
35 character(len=*),
intent(in) :: fname
38 integer :: ii,id,rc, ncid, dim2(2),dim3(3)
39 integer :: idimid,jdimid,kdimid
46 call fixvars_typedefine
51 rc = nf90_create(trim(fname), nf90_64bit_offset, ncid)
52 logmsg =
'==> writing tripole grid to '//trim(fname)
53 print
'(a)', trim(logmsg)
54 if(rc .ne. 0)print
'(a)',
'nf90_create = '//trim(nf90_strerror(rc))
56 rc = nf90_def_dim(ncid,
'ni', ni, idimid)
57 rc = nf90_def_dim(ncid,
'nj', nj, jdimid)
58 rc = nf90_def_dim(ncid,
'nv', nv, kdimid)
61 dim2(:) = (/idimid, jdimid/)
62 rc = nf90_def_var(ncid,
'wet', nf90_int, dim2, id)
63 rc = nf90_put_att(ncid, id,
'units',
'nd')
65 rc = nf90_def_var(ncid,
'area', nf90_double, dim2, id)
66 rc = nf90_put_att(ncid, id,
'units',
'm2')
68 rc = nf90_def_var(ncid,
'anglet', nf90_double, dim2, id)
69 rc = nf90_put_att(ncid, id,
'units',
'radians')
71 rc = nf90_def_var(ncid,
'angle', nf90_double, dim2, id)
72 rc = nf90_put_att(ncid, id,
'units',
'radians')
74 rc = nf90_def_var(ncid,
'angchk', nf90_double, dim2, id)
75 rc = nf90_put_att(ncid, id,
'units',
'radians')
77 rc = nf90_def_var(ncid,
'depth', nf90_float, dim2, id)
78 rc = nf90_put_att(ncid, id,
'units',
'm')
80 dim2(:) = (/idimid, jdimid/)
82 rc = nf90_def_var(ncid, trim(fixvars(ii)%var_name), nf90_double, dim2, id)
83 rc = nf90_put_att(ncid, id,
'units', trim(fixvars(ii)%unit_name))
84 rc = nf90_put_att(ncid, id,
'long_name', trim(fixvars(ii)%long_name))
85 if(trim(fixvars(ii)%var_name(1:3)) .eq.
"lon")
then 86 rc = nf90_put_att(ncid, id,
'lon_bounds', trim(fixvars(ii)%vertices))
88 rc = nf90_put_att(ncid, id,
'lat_bounds', trim(fixvars(ii)%vertices))
92 dim3(:) = (/idimid, jdimid, kdimid/)
93 do ii = ncoord+1,ncoord+nverts
94 rc = nf90_def_var(ncid, trim(fixvars(ii)%var_name), nf90_double, dim3, id)
95 rc = nf90_put_att(ncid, id,
'units', trim(fixvars(ii)%unit_name))
96 rc = nf90_put_att(ncid, id,
'long_name', trim(fixvars(ii)%long_name))
99 rc = nf90_put_att(ncid, nf90_global,
'history', trim(history))
100 rc = nf90_enddef(ncid)
102 rc = nf90_inq_varid(ncid,
'wet', id)
103 rc = nf90_put_var(ncid, id, int(wet4))
105 rc = nf90_inq_varid(ncid,
'area', id)
106 rc = nf90_put_var(ncid, id, areact)
108 rc = nf90_inq_varid(ncid,
'anglet', id)
109 rc = nf90_put_var(ncid, id, anglet)
111 rc = nf90_inq_varid(ncid,
'angle', id)
112 rc = nf90_put_var(ncid, id, angle)
114 rc = nf90_inq_varid(ncid,
'angchk', id)
115 rc = nf90_put_var(ncid, id, angchk)
117 rc = nf90_inq_varid(ncid,
'depth', id)
118 rc = nf90_put_var(ncid, id, dp4)
120 rc = nf90_inq_varid(ncid,
'lonCt', id)
121 rc = nf90_put_var(ncid, id, lonct)
123 rc = nf90_inq_varid(ncid,
'latCt', id)
124 rc = nf90_put_var(ncid, id, latct)
126 rc = nf90_inq_varid(ncid,
'lonCv', id)
127 rc = nf90_put_var(ncid, id, loncv)
129 rc = nf90_inq_varid(ncid,
'latCv', id)
130 rc = nf90_put_var(ncid, id, latcv)
132 rc = nf90_inq_varid(ncid,
'lonCu', id)
133 rc = nf90_put_var(ncid, id, loncu)
135 rc = nf90_inq_varid(ncid,
'latCu', id)
136 rc = nf90_put_var(ncid, id, latcu)
138 rc = nf90_inq_varid(ncid,
'lonBu', id)
139 rc = nf90_put_var(ncid, id, lonbu)
141 rc = nf90_inq_varid(ncid,
'latBu', id)
142 rc = nf90_put_var(ncid, id, latbu)
145 rc = nf90_inq_varid(ncid,
'lonCt_vert', id)
146 rc = nf90_put_var(ncid, id, lonct_vert)
148 rc = nf90_inq_varid(ncid,
'latCt_vert', id)
149 rc = nf90_put_var(ncid, id, latct_vert)
151 rc = nf90_inq_varid(ncid,
'lonCv_vert', id)
152 rc = nf90_put_var(ncid, id, loncv_vert)
154 rc = nf90_inq_varid(ncid,
'latCv_vert', id)
155 rc = nf90_put_var(ncid, id, latcv_vert)
157 rc = nf90_inq_varid(ncid,
'lonCu_vert', id)
158 rc = nf90_put_var(ncid, id, loncu_vert)
160 rc = nf90_inq_varid(ncid,
'latCu_vert', id)
161 rc = nf90_put_var(ncid, id, latcu_vert)
163 rc = nf90_inq_varid(ncid,
'lonBu_vert', id)
164 rc = nf90_put_var(ncid, id, lonbu_vert)
166 rc = nf90_inq_varid(ncid,
'latBu_vert', id)
167 rc = nf90_put_var(ncid, id, latbu_vert)
169 rc = nf90_close(ncid)
171 end subroutine write_tripolegrid
172 end module tripolegrid