1879
1880
1882
1883
1884
1885 integer, intent(in) :: ng
1886
1887 logical, intent(in) :: ldef
1888
1889
1890
1891 logical :: got_var(NV)
1892
1893 integer, parameter :: Natt = 25
1894
1895 integer :: i, j, ifield, itrc, nvd3, nvd4
1896 integer :: recdim, status, varid
1897# ifdef ADJUST_BOUNDARY
1898 integer :: IorJdim, brecdim
1899# endif
1900# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1901 integer :: frecdim
1902# endif
1903 integer :: DimIDs(nDimID)
1904 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
1905# ifdef ADJUST_BOUNDARY
1906 integer :: t2dobc(4)
1907# endif
1908
1909# ifdef SOLVE3D
1910 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
1911# ifdef ADJUST_BOUNDARY
1912 integer :: t3dobc(5)
1913# endif
1914# ifdef ADJUST_STFLUX
1915 integer :: t3dfrc(4)
1916# endif
1917# endif
1918# ifdef ADJUST_WSTRESS
1919 integer :: u3dfrc(4), v3dfrc(4)
1920# endif
1921
1922 real(r8) :: Aval(6)
1923
1924 character (len=256) :: ncname
1925 character (len=MaxLen) :: Vinfo(Natt)
1926
1927 character (len=*), parameter :: MyFile = &
1928 & __FILE__//", tl_def_his_pio"
1929
1930 TYPE (Var_desc_t) :: varDesc
1931
1932 sourcefile=myfile
1933
1934
1935
1936
1937
1938 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1939 ncname=tlm(ng)%name
1940
1941 IF (master) THEN
1942 IF (ldef) THEN
1943 WRITE (stdout,10) ng, trim(ncname)
1944 ELSE
1945 WRITE (stdout,20) ng, trim(ncname)
1946 END IF
1947 END IF
1948
1949
1950
1951
1952
1953 define : IF (ldef) THEN
1955 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
1956 IF (master) WRITE (stdout,30) trim(ncname)
1957 RETURN
1958 END IF
1959
1960
1961
1962
1963
1964 dimids=0
1965
1966 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xi_rho', &
1967 & iobounds(ng)%xi_rho, dimids( 1))
1968 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1969
1970 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xi_u', &
1971 & iobounds(ng)%xi_u, dimids( 2))
1972 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1973
1974 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xi_v', &
1975 & iobounds(ng)%xi_v, dimids( 3))
1976 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1977
1978 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xi_psi', &
1979 & iobounds(ng)%xi_psi, dimids( 4))
1980 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1981
1982 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'eta_rho', &
1983 & iobounds(ng)%eta_rho, dimids( 5))
1984 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1985
1986 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'eta_u', &
1987 & iobounds(ng)%eta_u, dimids( 6))
1988 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1989
1990 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'eta_v', &
1991 & iobounds(ng)%eta_v, dimids( 7))
1992 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1993
1994 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'eta_psi', &
1995 & iobounds(ng)%eta_psi, dimids( 8))
1996 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
1997
1998# ifdef ADJUST_BOUNDARY
1999 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'IorJ', &
2000 & iobounds(ng)%IorJ, iorjdim)
2001 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2002# endif
2003
2004# if defined WRITE_WATER && defined MASKING
2005 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xy_rho', &
2006 & iobounds(ng)%xy_rho, dimids(17))
2007 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2008
2009 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xy_u', &
2010 & iobounds(ng)%xy_u, dimids(18))
2011 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2012
2013 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xy_v', &
2014 & iobounds(ng)%xy_v, dimids(19))
2015 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2016# endif
2017
2018# ifdef SOLVE3D
2019# if defined WRITE_WATER && defined MASKING
2020 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xyz_rho', &
2021 & iobounds(ng)%xy_rho*n(ng), dimids(20))
2022 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2023
2024 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xyz_u', &
2025 & iobounds(ng)%xy_u*n(ng), dimids(21))
2026 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2027
2028 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xyz_v', &
2029 & iobounds(ng)%xy_v*n(ng), dimids(22))
2030 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2031
2032 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xyz_w', &
2033 & iobounds(ng)%xy_rho*(n(ng)+1), dimids(23))
2034 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2035# endif
2036
2037 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'N', &
2038 & n(ng), dimids( 9))
2039 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2040
2041 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 's_rho', &
2042 & n(ng), dimids( 9))
2043 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2044
2045 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 's_w', &
2046 & n(ng)+1, dimids(10))
2047 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2048
2049 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'tracer', &
2050 & nt(ng), dimids(11))
2051 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2052
2053# ifdef SEDIMENT
2054 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'NST', &
2055 & nst, dimids(32))
2056 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2057
2058 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Nbed', &
2059 & nbed, dimids(16))
2060 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2061
2062# if defined WRITE_WATER && defined MASKING
2063 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'xybed', &
2064 & iobounds(ng)%xy_rho*nbed, dimids(24))
2065 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2066# endif
2067# endif
2068
2069# ifdef ECOSIM
2070 status=def_dim(ng, inlm, tlm(ng)%pioFile, ncname, 'Nbands', &
2071 & nbands, dimids(33))
2072 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2073
2074 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Nphy', &
2075 & nphy, dimids(25))
2076 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2077
2078 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Nbac', &
2079 & nbac, dimids(26))
2080 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2081
2082 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Ndom', &
2083 & ndom, dimids(27))
2084 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2085
2086 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Nfec', &
2087 & nfec, dimids(28))
2088 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2089# endif
2090# endif
2091
2092 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'boundary', &
2093 & 4, dimids(14))
2094 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2095
2096# ifdef FOUR_DVAR
2097 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'Nstate', &
2098 & nstatevar(ng), dimids(29))
2099 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2100# endif
2101
2102# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
2103 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'frc_adjust',&
2104 & nfrec(ng), dimids(30))
2105 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2106# endif
2107
2108# ifdef ADJUST_BOUNDARY
2109 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, 'obc_adjust',&
2110 & nbrec(ng), dimids(31))
2111 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2112# endif
2113
2114 status=def_dim(ng, model, tlm(ng)%pioFile, ncname, &
2115 & trim(adjustl(vname(5,idtime))), &
2116 & nf90_unlimited, dimids(12))
2117 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2118
2119 recdim=dimids(12)
2120# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
2121 frecdim=dimids(30)
2122# endif
2123# ifdef ADJUST_BOUNDARY
2124 brecdim=dimids(31)
2125# endif
2126
2127
2128
2129# if defined WRITE_WATER && defined MASKING
2130 nvd3=2
2131 nvd4=2
2132# else
2133 nvd3=3
2134 nvd4=4
2135# endif
2136
2137
2138
2139# if defined WRITE_WATER && defined MASKING
2140 t2dgrd(1)=dimids(17)
2141 t2dgrd(2)=dimids(12)
2142# ifdef SOLVE3D
2143 t3dgrd(1)=dimids(20)
2144 t3dgrd(2)=dimids(12)
2145# endif
2146# else
2147 t2dgrd(1)=dimids( 1)
2148 t2dgrd(2)=dimids( 5)
2149 t2dgrd(3)=dimids(12)
2150# ifdef SOLVE3D
2151 t3dgrd(1)=dimids( 1)
2152 t3dgrd(2)=dimids( 5)
2153 t3dgrd(3)=dimids( 9)
2154 t3dgrd(4)=dimids(12)
2155# endif
2156# ifdef ADJUST_STFLUX
2157 t3dfrc(1)=dimids( 1)
2158 t3dfrc(2)=dimids( 5)
2159 t3dfrc(3)=frecdim
2160 t3dfrc(4)=dimids(12)
2161# endif
2162# endif
2163# ifdef ADJUST_BOUNDARY
2164 t2dobc(1)=iorjdim
2165 t2dobc(2)=dimids(14)
2166 t2dobc(3)=brecdim
2167 t2dobc(4)=dimids(12)
2168# ifdef SOLVE3D
2169 t3dobc(1)=iorjdim
2170 t3dobc(2)=dimids( 9)
2171 t3dobc(3)=dimids(14)
2172 t3dobc(4)=brecdim
2173 t3dobc(5)=dimids(12)
2174# endif
2175# endif
2176
2177
2178
2179# if defined WRITE_WATER && defined MASKING
2180 u2dgrd(1)=dimids(18)
2181 u2dgrd(2)=dimids(12)
2182# ifdef SOLVE3D
2183 u3dgrd(1)=dimids(21)
2184 u3dgrd(2)=dimids(12)
2185# endif
2186# else
2187 u2dgrd(1)=dimids( 2)
2188 u2dgrd(2)=dimids( 6)
2189 u2dgrd(3)=dimids(12)
2190# ifdef SOLVE3D
2191 u3dgrd(1)=dimids( 2)
2192 u3dgrd(2)=dimids( 6)
2193 u3dgrd(3)=dimids( 9)
2194 u3dgrd(4)=dimids(12)
2195# endif
2196# ifdef ADJUST_WSTRESS
2197 u3dfrc(1)=dimids( 2)
2198 u3dfrc(2)=dimids( 6)
2199 u3dfrc(3)=frecdim
2200 u3dfrc(4)=dimids(12)
2201# endif
2202# endif
2203
2204
2205
2206# if defined WRITE_WATER && defined MASKING
2207 v2dgrd(1)=dimids(19)
2208 v2dgrd(2)=dimids(12)
2209# ifdef SOLVE3D
2210 v3dgrd(1)=dimids(22)
2211 v3dgrd(2)=dimids(12)
2212# endif
2213# else
2214 v2dgrd(1)=dimids( 3)
2215 v2dgrd(2)=dimids( 7)
2216 v2dgrd(3)=dimids(12)
2217# ifdef SOLVE3D
2218 v3dgrd(1)=dimids( 3)
2219 v3dgrd(2)=dimids( 7)
2220 v3dgrd(3)=dimids( 9)
2221 v3dgrd(4)=dimids(12)
2222# endif
2223# ifdef ADJUST_WSTRESS
2224 v3dfrc(1)=dimids( 3)
2225 v3dfrc(2)=dimids( 7)
2226 v3dfrc(3)=frecdim
2227 v3dfrc(4)=dimids(12)
2228# endif
2229# endif
2230# ifdef SOLVE3D
2231
2232
2233
2234# if defined WRITE_WATER && defined MASKING
2235 w3dgrd(1)=dimids(23)
2236 w3dgrd(2)=dimids(12)
2237# else
2238 w3dgrd(1)=dimids( 1)
2239 w3dgrd(2)=dimids( 5)
2240 w3dgrd(3)=dimids(10)
2241 w3dgrd(4)=dimids(12)
2242# endif
2243# endif
2244
2245
2246
2247 tlm(ng)%Rindex=0
2248
2249
2250
2251 DO i=1,natt
2252 DO j=1,len(vinfo(1))
2253 vinfo(i)(j:j)=' '
2254 END DO
2255 END DO
2256 DO i=1,6
2257 aval(i)=0.0_r8
2258 END DO
2259
2260
2261
2262
2263
2264 CALL def_info (ng, model, tlm(ng)%pioFile, ncname, dimids)
2265 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2266
2267
2268
2269
2270
2271
2272
2273 vinfo( 1)=vname(1,idtime)
2274 vinfo( 2)=vname(2,idtime)
2275 WRITE (vinfo( 3),'(a,a)') 'seconds since ', trim(rclock%string)
2276 vinfo( 4)=trim(rclock%calendar)
2277 vinfo(14)=vname(4,idtime)
2278 vinfo(21)=vname(6,idtime)
2279 tlm(ng)%pioVar(idtime)%dkind=
pio_tout
2280 tlm(ng)%pioVar(idtime)%gtype=0
2281
2282 status=def_var(ng, model, tlm(ng)%pioFile, &
2283 & tlm(ng)%pioVar(idtime)%vd,
pio_tout, &
2284 & 1, (/recdim/), aval, vinfo, ncname, &
2285 & setparaccess = .false.)
2286 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2287
2288# ifdef PROPAGATOR
2289
2290
2291
2292 vinfo( 1)='Ritz_rvalue'
2293 vinfo( 2)='real Ritz eigenvalues'
2294 status=def_var(ng, model, tlm(ng)%pioFile, vardesc,
pio_type, &
2295 & 1, (/recdim/), aval, vinfo, ncname, &
2296 & setparaccess = .false.)
2297 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2298
2299# if defined FT_EIGENMODES
2300 vinfo( 1)='Ritz_ivalue'
2301 vinfo( 2)='imaginary Ritz eigenvalues'
2302 status=def_var(ng, model, tlm(ng)%pioFile, vardesc,
pio_type, &
2303 & 1, (/recdim/), aval, vinfo, ncname, &
2304 & setparaccess = .false.)
2305 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2306
2307# endif
2308
2309 vinfo( 1)='Ritz_norm'
2310 vinfo( 2)='Ritz eigenvectors Euclidean norm'
2311 status=def_var(ng, model, tlm(ng)%pioFile, vardesc,
pio_type, &
2312 & 1, (/recdim/), aval, vinfo, ncname, &
2313 & setparaccess = .false.)
2314 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2315# endif
2316# ifdef ADJUST_WSTRESS
2317
2318
2319
2320
2321
2322 vinfo( 1)=vname(1,idusms)
2323 WRITE (vinfo( 2),40) trim(vname(2,idusms))
2324 vinfo( 3)='meter2 second-2'
2325 vinfo(16)=vname(1,idtime)
2326# if defined WRITE_WATER && defined MASKING
2327 vinfo(20)='mask_u'
2328# endif
2329 vinfo(22)='coordinates'
2330 aval(5)=real(iinfo(1,idusms,ng),r8)
2331 tlm(ng)%pioVar(idusms)%dkind=
pio_fout
2332 tlm(ng)%pioVar(idusms)%gtype=u2dvar
2333
2334 status=def_var(ng, model, tlm(ng)%pioFile, &
2335 & tlm(ng)%pioVar(idusms)%vd, &
2336 &
pio_fout, nvd4, u3dfrc, aval, vinfo, ncname)
2337 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2338
2339
2340
2341 vinfo( 1)=vname(1,idvsms)
2342 WRITE (vinfo( 2),40) trim(vname(2,idvsms))
2343 vinfo( 3)='meter2 second-2'
2344 vinfo(16)=vname(1,idtime)
2345# if defined WRITE_WATER && defined MASKING
2346 vinfo(20)='mask_v'
2347# endif
2348 vinfo(22)='coordinates'
2349 aval(5)=real(iinfo(1,idvsms,ng),r8)
2350 tlm(ng)%pioVar(idvsms)%dkind=
pio_fout
2351 tlm(ng)%pioVar(idvsms)%gtype=v2dvar
2352
2353 status=def_var(ng, model, tlm(ng)%pioFile, &
2354 & tlm(ng)%pioVar(idvsms)%vd, &
2355 &
pio_fout, nvd4, v3dfrc, aval, vinfo, ncname)
2356 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2357# endif
2358# if defined FORCING_SV || defined STOCHASTIC_OPT || \
2359 defined hessian_so || defined hessian_fsv
2360
2361
2362
2363 IF (hout(idusms,ng)) THEN
2364 vinfo( 1)=vname(1,idusms)
2365 WRITE (vinfo( 2),40) trim(vname(2,idusms))
2366 vinfo( 3)=vname(3,idusms)
2367 vinfo(14)=vname(4,idusms)
2368 vinfo(16)=vname(1,idtime)
2369# if defined WRITE_WATER && defined MASKING
2370 vinfo(20)='mask_u'
2371# endif
2372 vinfo(21)=vname(6,idusms)
2373 vinfo(22)='coordinates'
2374 aval(5)=real(iinfo(1,idusms,ng),r8)
2375 tlm(ng)%pioVar(idusms)%dkind=
pio_fout
2376 tlm(ng)%pioVar(idusms)%gtype=u2dvar
2377
2378 status=def_var(ng, model, tlm(ng)%pioFile, &
2379 & tlm(ng)%pioVar(idusms)%vd, &
2380 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2381 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2382 END IF
2383
2384
2385
2386 IF (hout(idvsms,ng)) THEN
2387 vinfo( 1)=vname(1,idvsms)
2388 WRITE (vinfo( 2),40) trim(vname(2,idvsms))
2389 vinfo( 3)=vname(3,idvsms)
2390 vinfo(14)=vname(4,idvsms)
2391 vinfo(16)=vname(1,idtime)
2392# if defined WRITE_WATER && defined MASKING
2393 vinfo(20)='mask_v'
2394# endif
2395 vinfo(21)=vname(6,idvsms)
2396 vinfo(22)='coordinates'
2397 aval(5)=real(iinfo(1,idvsms,ng),r8)
2398 tlm(ng)%pioVar(idvsms)%dkind=
pio_fout
2399 tlm(ng)%pioVar(idvsms)%gtype=v2dvar
2400
2401 status=def_var(ng, model, tlm(ng)%pioFile, &
2402 & tlm(ng)%pioVar(idvsms)%vd, &
2403 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2404 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2405 END IF
2406
2407
2408
2409 DO itrc=1,nt(ng)
2410 IF (hout(idtsur(itrc),ng)) THEN
2411 vinfo( 1)=vname(1,idtsur(itrc))
2412 WRITE (vinfo( 2),40) trim(vname(2,idtsur(itrc)))
2413 vinfo( 3)=vname(3,idtsur(itrc))
2414 IF (itrc.eq.itemp) THEN
2415 vinfo(11)='upward flux, cooling'
2416 vinfo(12)='downward flux, heating'
2417 ELSE IF (itrc.eq.isalt) THEN
2418 vinfo(11)='upward flux, freshening (net precipitation)'
2419 vinfo(12)='downward flux, salting (net evaporation)'
2420 END IF
2421 vinfo(14)=vname(4,idtsur(itrc))
2422 vinfo(16)=vname(1,idtime)
2423# if defined WRITE_WATER && defined MASKING
2424 vinfo(20)='mask_rho'
2425# endif
2426 vinfo(21)=vname(6,idtsur(itrc))
2427 vinfo(22)='coordinates'
2428 aval(5)=real(iinfo(1,idtsur(itrc),ng),r8)
2429 tlm(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
2430 tlm(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
2431
2432 status=def_var(ng, model, tlm(ng)%pioFile, &
2433 & tlm(ng)%pioVar(idtsur(itrc))%vd, &
2434 &
pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
2435 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2436 END IF
2437 END DO
2438# endif
2439# if defined ADJUST_STFLUX && defined SOLVE3D
2440
2441
2442
2443
2444
2445 DO itrc=1,nt(ng)
2446 IF (lstflux(itrc,ng)) THEN
2447 vinfo( 1)=vname(1,idtsur(itrc))
2448 WRITE (vinfo( 2),40) trim(vname(2,idtsur(itrc)))
2449 IF (itrc.eq.itemp) THEN
2450 vinfo( 3)='Celsius meter second-1'
2451 vinfo(11)='upward flux, cooling'
2452 vinfo(12)='downward flux, heating'
2453 ELSE IF (itrc.eq.isalt) THEN
2454 vinfo( 3)='meter second-1'
2455 vinfo(11)='upward flux, freshening (net precipitation)'
2456 vinfo(12)='downward flux, salting (net evaporation)'
2457 END IF
2458 vinfo(16)=vname(1,idtime)
2459# if defined WRITE_WATER && defined MASKING
2460 vinfo(20)='mask_rho'
2461# endif
2462 vinfo(22)='coordinates'
2463 aval(5)=real(iinfo(1,idtsur(itrc),ng),r8)
2464 tlm(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
2465 tlm(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
2466
2467 status=def_var(ng, model, tlm(ng)%pioFile, &
2468 & tlm(ng)%pioVar(idtsur(itrc))%vd, &
2469 &
pio_fout, nvd4, t3dfrc, aval, vinfo, ncname)
2470 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2471 END IF
2472 END DO
2473# endif
2474# ifdef SOLVE3D
2475
2476
2477
2478 IF (hout(idpthr,ng)) THEN
2479 vinfo( 1)=vname(1,idpthr)
2480 WRITE (vinfo( 2),40) trim(vname(2,idpthr))
2481 vinfo( 3)=vname(3,idpthr)
2482 vinfo(14)=vname(4,idpthr)
2483 vinfo(16)=vname(1,idtime)
2484# if defined WRITE_WATER && defined MASKING
2485 vinfo(20)='mask_rho'
2486# endif
2487 vinfo(21)=vname(6,idpthr)
2488 vinfo(22)='coordinates'
2489 aval(5)=real(iinfo(1,idpthr,ng),r8)
2490 tlm(ng)%pioVar(idpthr)%dkind=
pio_fout
2491 tlm(ng)%pioVar(idpthr)%gtype=r3dvar
2492
2493 status=def_var(ng, model, tlm(ng)%pioFile, &
2494 & tlm(ng)%pioVar(idpthr)%vd, &
2495 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname, &
2496 & setfillval = .false.)
2497 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2498 END IF
2499
2500
2501
2502 IF (hout(idpthw,ng)) THEN
2503 vinfo( 1)=vname(1,idpthw)
2504 WRITE (vinfo( 2),40) trim(vname(2,idpthw))
2505 vinfo( 3)=vname(3,idpthw)
2506 vinfo(14)=vname(4,idpthw)
2507 vinfo(16)=vname(1,idtime)
2508# if defined WRITE_WATER && defined MASKING
2509 vinfo(20)='mask_rho'
2510# endif
2511 vinfo(21)=vname(6,idpthw)
2512 vinfo(22)='coordinates'
2513 aval(5)=real(iinfo(1,idpthw,ng),r8)
2514 tlm(ng)%pioVar(idpthw)%dkind=
pio_fout
2515 tlm(ng)%pioVar(idpthw)%gtype=w3dvar
2516
2517 status=def_var(ng, model, tlm(ng)%pioFile, &
2518 & tlm(ng)%pioVar(idpthw)%vd, &
2519 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
2520 & setfillval = .false.)
2521 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2522 END IF
2523# endif
2524
2525
2526
2527 IF (hout(idfsur,ng)) THEN
2528 vinfo( 1)=vname(1,idfsur)
2529 WRITE (vinfo( 2),40) trim(vname(2,idfsur))
2530 vinfo( 3)=vname(3,idfsur)
2531 vinfo(14)=vname(4,idfsur)
2532 vinfo(16)=vname(1,idtime)
2533# if !defined WET_DRY && (defined WRITE_WATER && defined MASKING)
2534 vinfo(20)='mask_rho'
2535# endif
2536 vinfo(21)=vname(6,idfsur)
2537 vinfo(22)='coordinates'
2538 aval(5)=real(iinfo(1,idfsur,ng),r8)
2539 tlm(ng)%pioVar(idfsur)%dkind=
pio_fout
2540 tlm(ng)%pioVar(idfsur)%gtype=r2dvar
2541
2542 status=def_var(ng, model, tlm(ng)%pioFile, &
2543 & tlm(ng)%pioVar(idfsur)%vd, &
2544# ifdef WET_DRY
2545 &
pio_fout, nvd3, t2dgrd, aval, vinfo, ncname, &
2546 & setfillval = .false.)
2547# else
2548 &
pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
2549# endif
2550 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2551
2552# if defined FORWARD_WRITE && defined FORWARD_RHS
2553
2554 vinfo( 1)=vname(1,idrzet)
2555 WRITE (vinfo( 2),40) trim(vname(2,idrzet))
2556 vinfo( 3)=vname(3,idrzet)
2557 vinfo(14)=vname(4,idrzet)
2558 vinfo(16)=vname(1,idtime)
2559# if defined WRITE_WATER && defined MASKING
2560 vinfo(20)='mask_rho'
2561# endif
2562 vinfo(21)=vname(6,idrzet)
2563 vinfo(22)='coordinates'
2564 aval(5)=real(r2dvar,r8)
2565 tlm(ng)%pioVar(idrzet)%dkind=
pio_fout
2566 tlm(ng)%pioVar(idrzet)%gtype=r2dvar
2567
2568 status=def_var(ng, model, tlm(ng)%pioFile, &
2569 & tlm(ng)%pioVar(idrzet)%vd, &
2570 &
pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
2571 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2572# endif
2573 END IF
2574
2575# ifdef ADJUST_BOUNDARY
2576
2577
2578
2579 IF (any(lobc(:,isfsur,ng))) THEN
2580 ifield=idsbry(isfsur)
2581 vinfo( 1)=vname(1,ifield)
2582 WRITE (vinfo( 2),40) trim(vname(2,ifield))
2583 vinfo( 3)=vname(3,ifield)
2584 vinfo(14)=vname(4,ifield)
2585 vinfo(16)=vname(1,idtime)
2586 vinfo(21)=vname(6,ifield)
2587 aval(5)=real(iinfo(1,ifield,ng),r8)
2588 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
2589 tlm(ng)%pioVar(ifield)%gtype=r2dobc
2590
2591 status=def_var(ng, model, tlm(ng)%pioFile, &
2592 & tlm(ng)%pioVar(ifield)%vd, &
2593 &
pio_fout, 4, t2dobc, aval, vinfo, ncname, &
2594 & setfillval = .false.)
2595 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2596 END IF
2597# endif
2598
2599
2600
2601 IF (hout(idubar,ng)) THEN
2602 vinfo( 1)=vname(1,idubar)
2603 WRITE (vinfo( 2),40) trim(vname(2,idubar))
2604 vinfo( 3)=vname(3,idubar)
2605 vinfo(14)=vname(4,idubar)
2606 vinfo(16)=vname(1,idtime)
2607# if defined WRITE_WATER && defined MASKING
2608 vinfo(20)='mask_u'
2609# endif
2610 vinfo(21)=vname(6,idubar)
2611 vinfo(22)='coordinates'
2612 aval(5)=real(iinfo(1,idubar,ng),r8)
2613 tlm(ng)%pioVar(idubar)%dkind=
pio_fout
2614 tlm(ng)%pioVar(idubar)%gtype=u2dvar
2615
2616 status=def_var(ng, model, tlm(ng)%pioFile, &
2617 & tlm(ng)%pioVar(idubar)%vd, &
2618 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2619 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2620
2621# ifdef FORWARD_WRITE
2622# ifdef FORWARD_RHS
2623
2624 vinfo( 1)=vname(1,idru2d)
2625 WRITE (vinfo( 2),40) trim(vname(2,idru2d))
2626 vinfo( 3)=vname(3,idru2d)
2627 vinfo(14)=vname(4,idru2d)
2628 vinfo(16)=vname(1,idtime)
2629# if defined WRITE_WATER && defined MASKING
2630 vinfo(20)='mask_u'
2631# endif
2632 vinfo(21)=vname(6,idru2d)
2633 vinfo(22)='coordinates'
2634 aval(5)=real(u2dvar,r8)
2635 tlm(ng)%pioVar(idru2d)%dkind=
pio_fout
2636 tlm(ng)%pioVar(idru2d)%gtype=u2dvar
2637
2638 status=def_var(ng, model, tlm(ng)%pioFile, &
2639 & tlm(ng)%pioVar(idru2d)%vd, &
2640 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2641 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2642# endif
2643# ifdef SOLVE3D
2644# ifdef FORWARD_RHS
2645
2646 vinfo( 1)=vname(1,idruct)
2647 WRITE (vinfo( 2),40) trim(vname(2,idruct))
2648 vinfo( 3)=vname(3,idruct)
2649 vinfo(14)=vname(4,idruct)
2650 vinfo(16)=vname(1,idtime)
2651# if defined WRITE_WATER && defined MASKING
2652 vinfo(20)='mask_u'
2653# endif
2654 vinfo(21)=vname(6,idruct)
2655 vinfo(22)='coordinates'
2656 aval(5)=real(u2dvar,r8)
2657 tlm(ng)%pioVar(idruct)%dkind=
pio_fout
2658 tlm(ng)%pioVar(idruct)%gtype=u2dvar
2659
2660 status=def_var(ng, model, tlm(ng)%pioFile, &
2661 & tlm(ng)%pioVar(idruct)%vd, &
2662 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2663 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2664# endif
2665
2666 vinfo( 1)=vname(1,idufx1)
2667 WRITE (vinfo( 2),40) trim(vname(2,idufx1))
2668 vinfo( 3)=vname(3,idufx1)
2669 vinfo(14)=vname(4,idufx1)
2670 vinfo(16)=vname(1,idtime)
2671# if defined WRITE_WATER && defined MASKING
2672 vinfo(20)='mask_u'
2673# endif
2674 vinfo(21)=vname(6,idufx1)
2675 vinfo(22)='coordinates'
2676 aval(5)=real(u2dvar,r8)
2677 tlm(ng)%pioVar(idufx1)%dkind=
pio_fout
2678 tlm(ng)%pioVar(idufx1)%gtype=u2dvar
2679
2680 status=def_var(ng, model, tlm(ng)%pioFile, &
2681 & tlm(ng)%pioVar(idufx1)%vd, &
2682 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2683 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2684
2685 vinfo( 1)=vname(1,idufx2)
2686 WRITE (vinfo( 2),40) trim(vname(2,idufx2))
2687 vinfo( 3)=vname(3,idufx2)
2688 vinfo(14)=vname(4,idufx2)
2689 vinfo(16)=vname(1,idtime)
2690# if defined WRITE_WATER && defined MASKING
2691 vinfo(20)='mask_u'
2692# endif
2693 vinfo(21)=vname(6,idufx2)
2694 vinfo(22)='coordinates'
2695 aval(5)=real(u2dvar,r8)
2696 tlm(ng)%pioVar(idufx2)%dkind=
pio_fout
2697 tlm(ng)%pioVar(idufx2)%gtype=u2dvar
2698
2699 status=def_var(ng, model, tlm(ng)%pioFile, &
2700 & tlm(ng)%pioVar(idufx2)%vd, &
2701 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
2702 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2703# endif
2704# endif
2705 END IF
2706
2707# ifdef ADJUST_BOUNDARY
2708
2709
2710
2711 IF (any(lobc(:,isubar,ng))) THEN
2712 ifield=idsbry(isubar)
2713 vinfo( 1)=vname(1,ifield)
2714 WRITE (vinfo( 2),40) trim(vname(2,ifield))
2715 vinfo( 3)=vname(3,ifield)
2716 vinfo(14)=vname(4,ifield)
2717 vinfo(16)=vname(1,idtime)
2718 vinfo(21)=vname(6,ifield)
2719 aval(5)=real(iinfo(1,ifield,ng),r8)
2720 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
2721 tlm(ng)%pioVar(ifield)%gtype=u2dobc
2722
2723 status=def_var(ng, model, tlm(ng)%pioFile, &
2724 & tlm(ng)%pioVar(ifield)%vd, &
2725 &
pio_fout, 4, t2dobc, aval, vinfo, ncname, &
2726 & setfillval = .false.)
2727 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2728 END IF
2729# endif
2730
2731
2732
2733 IF (hout(idvbar,ng)) THEN
2734 vinfo( 1)=vname(1,idvbar)
2735 WRITE (vinfo( 2),40) trim(vname(2,idvbar))
2736 vinfo( 3)=vname(3,idvbar)
2737 vinfo(14)=vname(4,idvbar)
2738 vinfo(16)=vname(1,idtime)
2739# if defined WRITE_WATER && defined MASKING
2740 vinfo(20)='mask_v'
2741# endif
2742 vinfo(21)=vname(6,idvbar)
2743 vinfo(22)='coordinates'
2744 aval(5)=real(iinfo(1,idvbar,ng),r8)
2745 tlm(ng)%pioVar(idvbar)%dkind=
pio_fout
2746 tlm(ng)%pioVar(idvbar)%gtype=v2dvar
2747
2748 status=def_var(ng, model, tlm(ng)%pioFile, &
2749 & tlm(ng)%pioVar(idvbar)%vd, &
2750 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2751 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2752
2753# ifdef FORWARD_WRITE
2754# ifdef FORWARD_RHS
2755
2756 vinfo( 1)=vname(1,idrv2d)
2757 WRITE (vinfo( 2),40) trim(vname(2,idrv2d))
2758 vinfo( 3)=vname(3,idrv2d)
2759 vinfo(14)=vname(4,idrv2d)
2760 vinfo(16)=vname(1,idtime)
2761# if defined WRITE_WATER && defined MASKING
2762 vinfo(20)='mask_v'
2763# endif
2764 vinfo(21)=vname(6,idrv2d)
2765 vinfo(22)='coordinates'
2766 aval(5)=real(v2dvar,r8)
2767 tlm(ng)%pioVar(idrv2d)%dkind=
pio_fout
2768 tlm(ng)%pioVar(idrv2d)%gtype=v2dvar
2769
2770 status=def_var(ng, model, tlm(ng)%pioFile, &
2771 & tlm(ng)%pioVar(idrv2d)%vd, &
2772 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2773 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2774# endif
2775# ifdef SOLVE3D
2776# ifdef FORWARD_RHS
2777
2778 vinfo( 1)=vname(1,idrvct)
2779 WRITE (vinfo( 2),40) trim(vname(2,idrvct))
2780 vinfo( 3)=vname(3,idrvct)
2781 vinfo(14)=vname(4,idrvct)
2782 vinfo(16)=vname(1,idtime)
2783# if defined WRITE_WATER && defined MASKING
2784 vinfo(20)='mask_v'
2785# endif
2786 vinfo(21)=vname(6,idrvct)
2787 vinfo(22)='coordinates'
2788 aval(5)=real(v2dvar,r8)
2789 tlm(ng)%pioVar(idrvct)%dkind=
pio_fout
2790 tlm(ng)%pioVar(idrvct)%gtype=v2dvar
2791
2792 status=def_var(ng, model, tlm(ng)%pioFile, &
2793 & tlm(ng)%pioVar(idrvct)%vd, &
2794 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2795 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2796# endif
2797
2798 vinfo( 1)=vname(1,idvfx1)
2799 WRITE (vinfo( 2),40) trim(vname(2,idvfx1))
2800 vinfo( 3)=vname(3,idvfx1)
2801 vinfo(14)=vname(4,idvfx1)
2802 vinfo(16)=vname(1,idtime)
2803# if defined WRITE_WATER && defined MASKING
2804 vinfo(20)='mask_v'
2805# endif
2806 vinfo(21)=vname(6,idvfx1)
2807 vinfo(22)='coordinates'
2808 aval(5)=real(v2dvar,r8)
2809 tlm(ng)%pioVar(idvfx1)%dkind=
pio_fout
2810 tlm(ng)%pioVar(idvfx1)%gtype=v2dvar
2811
2812 status=def_var(ng, model, tlm(ng)%pioFile, &
2813 & tlm(ng)%pioVar(idvfx1)%vd, &
2814 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2815 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2816
2817 vinfo( 1)=vname(1,idvfx2)
2818 WRITE (vinfo( 2),40) trim(vname(2,idvfx2))
2819 vinfo( 3)=vname(3,idvfx2)
2820 vinfo(14)=vname(4,idvfx2)
2821 vinfo(16)=vname(1,idtime)
2822# if defined WRITE_WATER && defined MASKING
2823 vinfo(20)='mask_v'
2824# endif
2825 vinfo(21)=vname(6,idvfx2)
2826 vinfo(22)='coordinates'
2827 aval(5)=real(v2dvar,r8)
2828 tlm(ng)%pioVar(idvfx2)%dkind=
pio_fout
2829 tlm(ng)%pioVar(idvfx2)%gtype=v2dvar
2830
2831 status=def_var(ng, model, tlm(ng)%pioFile, &
2832 & tlm(ng)%pioVar(idvfx2)%vd, &
2833 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
2834 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2835# endif
2836# endif
2837 END IF
2838
2839# ifdef ADJUST_BOUNDARY
2840
2841
2842
2843 IF (any(lobc(:,isvbar,ng))) THEN
2844 ifield=idsbry(isvbar)
2845 vinfo( 1)=vname(1,ifield)
2846 WRITE (vinfo( 2),40) trim(vname(2,ifield))
2847 vinfo( 3)=vname(3,ifield)
2848 vinfo(14)=vname(4,ifield)
2849 vinfo(16)=vname(1,idtime)
2850 vinfo(21)=vname(6,ifield)
2851 aval(5)=real(iinfo(1,ifield,ng),r8)
2852 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
2853 tlm(ng)%pioVar(ifield)%gtype=v2dobc
2854
2855 status=def_var(ng, model, tlm(ng)%pioFile, &
2856 & tlm(ng)%pioVar(ifield)%vd, &
2857 &
pio_fout, 4, t2dobc, aval, vinfo, ncname, &
2858 & setfillval = .false.)
2859 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2860 END IF
2861# endif
2862# ifdef SOLVE3D
2863
2864
2865
2866 IF (hout(iduvel,ng)) THEN
2867 vinfo( 1)=vname(1,iduvel)
2868 WRITE (vinfo( 2),40) trim(vname(2,iduvel))
2869 vinfo( 3)=vname(3,iduvel)
2870 vinfo(14)=vname(4,iduvel)
2871 vinfo(16)=vname(1,idtime)
2872# if defined WRITE_WATER && defined MASKING
2873 vinfo(20)='mask_u'
2874# endif
2875 vinfo(21)=vname(6,iduvel)
2876 vinfo(22)='coordinates'
2877 aval(5)=real(iinfo(1,iduvel,ng),r8)
2878 tlm(ng)%pioVar(iduvel)%dkind=
pio_fout
2879 tlm(ng)%pioVar(iduvel)%gtype=u3dvar
2880
2881 status=def_var(ng, model, tlm(ng)%pioFile, &
2882 & tlm(ng)%pioVar(iduvel)%vd, &
2883 &
pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
2884 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2885
2886# if defined FORWARD_WRITE && defined FORWARD_RHS
2887
2888 vinfo( 1)=vname(1,idru3d)
2889 WRITE (vinfo( 2),40) trim(vname(2,idru3d))
2890 vinfo( 3)=vname(3,idru3d)
2891 vinfo(14)=vname(4,idru3d)
2892 vinfo(16)=vname(1,idtime)
2893# if defined WRITE_WATER && defined MASKING
2894 vinfo(20)='mask_u'
2895# endif
2896 vinfo(21)=vname(6,idru3d)
2897 vinfo(22)='coordinates'
2898 aval(5)=real(u3dvar,r8)
2899 tlm(ng)%pioVar(idru3d)%dkind=
pio_fout
2900 tlm(ng)%pioVar(idru3d)%gtype=u3dvar
2901
2902 status=def_var(ng, model, tlm(ng)%pioFile, &
2903 & tlm(ng)%pioVar(idru3d)%vd, &
2904 &
pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
2905 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2906# endif
2907 END IF
2908
2909# ifdef ADJUST_BOUNDARY
2910
2911
2912
2913 IF (any(lobc(:,isuvel,ng))) THEN
2914 ifield=idsbry(isuvel)
2915 vinfo( 1)=vname(1,ifield)
2916 WRITE (vinfo( 2),40) trim(vname(2,ifield))
2917 vinfo( 3)=vname(3,ifield)
2918 vinfo(14)=vname(4,ifield)
2919 vinfo(16)=vname(1,idtime)
2920 vinfo(21)=vname(6,ifield)
2921 aval(5)=real(iinfo(1,ifield,ng),r8)
2922 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
2923 tlm(ng)%pioVar(ifield)%gtype=u3dobc
2924
2925 status=def_var(ng, model, tlm(ng)%pioFile, &
2926 & tlm(ng)%pioVar(ifield)%vd, &
2927 &
pio_fout, 5, t3dobc, aval, vinfo, ncname, &
2928 & setfillval = .false.)
2929 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2930 END IF
2931# endif
2932
2933
2934
2935 IF (hout(idvvel,ng)) THEN
2936 vinfo( 1)=vname(1,idvvel)
2937 WRITE (vinfo( 2),40) trim(vname(2,idvvel))
2938 vinfo( 3)=vname(3,idvvel)
2939 vinfo(14)=vname(4,idvvel)
2940 vinfo(16)=vname(1,idtime)
2941# if defined WRITE_WATER && defined MASKING
2942 vinfo(20)='mask_v'
2943# endif
2944 vinfo(21)=vname(6,idvvel)
2945 vinfo(22)='coordinates'
2946 aval(5)=real(iinfo(1,idvvel,ng),r8)
2947 tlm(ng)%pioVar(idvvel)%dkind=
pio_fout
2948 tlm(ng)%pioVar(idvvel)%gtype=v3dvar
2949
2950 status=def_var(ng, model, tlm(ng)%pioFile, &
2951 & tlm(ng)%pioVar(idvvel)%vd, &
2952 &
pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
2953 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2954
2955# if defined FORWARD_WRITE && defined FORWARD_RHS
2956
2957 vinfo( 1)=vname(1,idrv3d)
2958 WRITE (vinfo( 2),40) trim(vname(2,idrv3d))
2959 vinfo( 3)=vname(3,idrv3d)
2960 vinfo(14)=vname(4,idrv3d)
2961 vinfo(16)=vname(1,idtime)
2962# if defined WRITE_WATER && defined MASKING
2963 vinfo(20)='mask_v'
2964# endif
2965 vinfo(21)=vname(6,idrv3d)
2966 vinfo(22)='coordinates'
2967 aval(5)=real(v3dvar,r8)
2968 tlm(ng)%pioVar(idrv3d)%dkind=
pio_fout
2969 tlm(ng)%pioVar(idrv3d)%gtype=v3dvar
2970
2971 status=def_var(ng, model, tlm(ng)%pioFile, &
2972 & tlm(ng)%pioVar(idrv3d)%vd, &
2973 &
pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
2974 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2975# endif
2976 END IF
2977
2978# ifdef ADJUST_BOUNDARY
2979
2980
2981
2982 IF (any(lobc(:,isvvel,ng))) THEN
2983 ifield=idsbry(isvvel)
2984 vinfo( 1)=vname(1,ifield)
2985 WRITE (vinfo( 2),40) trim(vname(2,ifield))
2986 vinfo( 3)=vname(3,ifield)
2987 vinfo(14)=vname(4,ifield)
2988 vinfo(16)=vname(1,idtime)
2989 vinfo(21)=vname(6,ifield)
2990 aval(5)=real(iinfo(1,ifield,ng),r8)
2991 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
2992 tlm(ng)%pioVar(ifield)%gtype=v3dobc
2993
2994 status=def_var(ng, model, tlm(ng)%pioFile, &
2995 & tlm(ng)%pioVar(ifield)%vd, &
2996 &
pio_fout, 5, t3dobc, aval, vinfo, ncname, &
2997 & setfillval = .false.)
2998 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2999 END IF
3000# endif
3001# ifdef UV_DESTAGGERED
3002
3003
3004
3005 IF (hout(idu3de,ng)) THEN
3006 vinfo( 1)=vname(1,idu3de)
3007 vinfo( 2)=vname(2,idu3de)
3008 vinfo( 3)=vname(3,idu3de)
3009 vinfo(14)=vname(4,idu3de)
3010 vinfo(16)=vname(1,idtime)
3011# if defined WRITE_WATER && defined MASKING
3012 vinfo(20)='mask_rho'
3013# endif
3014 vinfo(21)=vname(6,idu3de)
3015 vinfo(22)='coordinates'
3016 aval(5)=real(iinfo(1,idu3de,ng),r8)
3017 tlm(ng)%pioVar(idu3de)%dkind=
pio_fout
3018 tlm(ng)%pioVar(idu3de)%gtype=r3dvar
3019
3020 status=def_var(ng, model, tlm(ng)%pioFile, &
3021 & tlm(ng)%pioVar(idu3de)%vd, &
3022 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3023 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3024 END IF
3025
3026
3027
3028 IF (hout(idv3dn,ng)) THEN
3029 vinfo( 1)=vname(1,idv3dn)
3030 vinfo( 2)=vname(2,idv3dn)
3031 vinfo( 3)=vname(3,idv3dn)
3032 vinfo(14)=vname(4,idv3dn)
3033 vinfo(16)=vname(1,idtime)
3034# if defined WRITE_WATER && defined MASKING
3035 vinfo(20)='mask_rho'
3036# endif
3037 vinfo(21)=vname(6,idv3dn)
3038 vinfo(22)='coordinates'
3039 aval(5)=real(iinfo(1,idv3dn,ng),r8)
3040 tlm(ng)%pioVar(idv3dn)%dkind=
pio_fout
3041 tlm(ng)%pioVar(idv3dn)%gtype=r3dvar
3042
3043 status=def_var(ng, model, tlm(ng)%pioFile, &
3044 & tlm(ng)%pioVar(idv3dn)%vd, &
3045 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3046 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3047 END IF
3048# endif
3049
3050
3051
3052 DO itrc=1,nt(ng)
3053 IF (hout(idtvar(itrc),ng)) THEN
3054 vinfo( 1)=vname(1,idtvar(itrc))
3055 WRITE (vinfo( 2),40) trim(vname(2,idtvar(itrc)))
3056 vinfo( 3)=vname(3,idtvar(itrc))
3057 vinfo(14)=vname(4,idtvar(itrc))
3058 vinfo(16)=vname(1,idtime)
3059# ifdef SEDIMENT_NOT_YET
3060 DO i=1,nst
3061 IF (itrc.eq.idsed(i)) THEN
3062 WRITE (vinfo(19),50) 1000.0_r8*sd50(i,ng)
3063 END IF
3064 END DO
3065# endif
3066# if defined WRITE_WATER && defined MASKING
3067 vinfo(20)='mask_rho'
3068# endif
3069 vinfo(21)=vname(6,idtvar(itrc))
3070 vinfo(22)='coordinates'
3071 aval(5)=real(r3dvar,r8)
3072 tlm(ng)%pioTrc(itrc)%dkind=
pio_fout
3073 tlm(ng)%pioTrc(itrc)%gtype=r3dvar
3074
3075 status=def_var(ng, model, tlm(ng)%pioFile, &
3076 & tlm(ng)%pioTrc(itrc)%vd, &
3077 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3078 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3079 END IF
3080 END DO
3081
3082# ifdef ADJUST_BOUNDARY
3083
3084
3085
3086 DO itrc=1,nt(ng)
3087 IF (any(lobc(:,istvar(itrc),ng))) THEN
3088 ifield=idsbry(istvar(itrc))
3089 vinfo( 1)=vname(1,ifield)
3090 WRITE (vinfo( 2),40) trim(vname(2,ifield))
3091 vinfo( 3)=vname(3,ifield)
3092 vinfo(14)=vname(4,ifield)
3093 vinfo(16)=vname(1,idtime)
3094# ifdef SEDIMENT
3095 DO i=1,nst
3096 IF (itrc.eq.idsed(i)) THEN
3097 WRITE (vinfo(19),50) 1000.0_r8*sd50(i,ng)
3098 END IF
3099 END DO
3100# endif
3101 vinfo(21)=vname(6,ifield)
3102 aval(5)=real(iinfo(1,ifield,ng),r8)
3103 tlm(ng)%pioVar(ifield)%dkind=
pio_fout
3104 tlm(ng)%pioVar(ifield)%gtype=r3dobc
3105
3106 status=def_var(ng, model, tlm(ng)%pioFile, &
3107 & tlm(ng)%pioVar(ifield)%vd, &
3108 &
pio_fout, 5, t3dobc, aval, vinfo, ncname, &
3109 & setfillval = .false.)
3110 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3111 END IF
3112 END DO
3113# endif
3114
3115
3116
3117 IF (hout(iddano,ng)) THEN
3118 vinfo( 1)=vname(1,iddano)
3119 WRITE (vinfo( 2),40) trim(vname(2,iddano))
3120 vinfo( 3)=vname(3,iddano)
3121 vinfo(14)=vname(4,iddano)
3122 vinfo(16)=vname(1,idtime)
3123# if defined WRITE_WATER && defined MASKING
3124 vinfo(20)='mask_rho'
3125# endif
3126 vinfo(21)=vname(6,iddano)
3127 vinfo(22)='coordinates'
3128 aval(5)=real(iinfo(1,iddano,ng),r8)
3129 tlm(ng)%pioVar(iddano)%dkind=
pio_fout
3130 tlm(ng)%pioVar(iddano)%gtype=r3dvar
3131
3132 status=def_var(ng, model, tlm(ng)%pioFile, &
3133 & tlm(ng)%pioVar(iddano)%vd, &
3134 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
3135 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3136 END IF
3137
3138# if defined FORWARD_MIXING && \
3139 (defined bvf_mixing || defined gls_mixing || \
3140 defined lmd_mixing || defined my25_mixing)
3141
3142
3143
3144 IF (hout(idvvis,ng)) THEN
3145 vinfo( 1)=vname(1,idvvis)
3146 WRITE (vinfo( 2),40) trim(vname(2,idvvis))
3147 vinfo( 3)=vname(3,idvvis)
3148 vinfo(14)=vname(4,idvvis)
3149 vinfo(16)=vname(1,idtime)
3150 vinfo(21)=vname(6,idvvis)
3151 vinfo(22)='coordinates'
3152 aval(5)=real(iinfo(1,idvvis,ng),r8)
3153 tlm(ng)%pioVar(idvvis)%dkind=
pio_fout
3154 tlm(ng)%pioVar(idvvis)%gtype=w3dvar
3155
3156 status=def_var(ng, model, tlm(ng)%pioFile, &
3157 & tlm(ng)%pioVar(idvvis)%vd, &
3158 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
3159 & setfillval = .false.)
3160 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3161 END IF
3162
3163
3164
3165 IF (hout(idtdif,ng)) THEN
3166 vinfo( 1)=vname(1,idtdif)
3167 WRITE (vinfo( 2),40) trim(vname(2,idtdif))
3168 vinfo( 3)=vname(3,idtdif)
3169 vinfo(14)=vname(4,idtdif)
3170 vinfo(16)=vname(1,idtime)
3171 vinfo(21)=vname(6,idtdif)
3172 vinfo(22)='coordinates'
3173 aval(5)=real(iinfo(1,idtdif,ng),r8)
3174 tlm(ng)%pioVar(idtdif)%dkind=
pio_fout
3175 tlm(ng)%pioVar(idtdif)%gtype=w3dvar
3176
3177 status=def_var(ng, model, tlm(ng)%pioFile, &
3178 & tlm(ng)%pioVar(idtdif)%vd, &
3179 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
3180 & setfillval = .false.)
3181 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3182 END IF
3183
3184# ifdef SALINITY
3185
3186
3187
3188 IF (hout(idsdif,ng)) THEN
3189 vinfo( 1)=vname(1,idsdif)
3190 WRITE (vinfo( 2),40) trim(vname(2,idsdif))
3191 vinfo( 3)=vname(3,idsdif)
3192 vinfo(14)=vname(4,idsdif)
3193 vinfo(16)=vname(1,idtime)
3194 vinfo(21)=vname(6,idsdif)
3195 vinfo(22)='coordinates'
3196 aval(5)=real(iinfo(1,idsdif,ng),r8)
3197 tlm(ng)%pioVar(idsdif)%dkind=
pio_fout
3198 tlm(ng)%pioVar(idsdif)%gtype=w3dvar
3199
3200 status=def_var(ng, model, tlm(ng)%pioFile, &
3201 & tlm(ng)%pioVar(idsdif)%vd, &
3202 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
3203 & setfillval = .false.)
3204 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3205 END IF
3206# endif
3207# if defined GLS_MIXING_NOT_YET || defined MY25_MIXING_NOT_YET
3208
3209
3210
3211 IF (hout(idmtke,ng)) THEN
3212 vinfo( 1)=vname(1,idmtke)
3213 WRITE (vinfo( 2),40) trim(vname(2,idmtke))
3214 vinfo( 3)=vname(3,idmtke)
3215 vinfo(14)=vname(4,idmtke)
3216 vinfo(16)=vname(1,idtime)
3217 vinfo(21)=vname(6,idmtke)
3218 vinfo(22)='coordinates'
3219 aval(5)=real(iinfo(1,idmtke,ng),r8)
3220 tlm(ng)%pioVar(idmtke)%dkind=
pio_fout
3221 tlm(ng)%pioVar(idmtke)%gtype=w3dvar
3222
3223 status=def_var(ng, model, tlm(ng)%pioFile, &
3224 & tlm(ng)%pioVar(idmtke)%vd, &
3225 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
3226 & setfillval = .false.)
3227 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3228
3229 vinfo( 1)=vname(1,idvmkk)
3230 WRITE (vinfo( 2),40) trim(vname(2,idvmkk))
3231 vinfo( 3)=vname(3,idvmkk)
3232 vinfo(14)=vname(4,idvmkk)
3233 vinfo(16)=vname(1,idtime)
3234 vinfo(21)=vname(6,idvmkk)
3235# if defined WRITE_WATER && defined MASKING
3236 vinfo(20)='mask_rho'
3237# endif
3238 vinfo(22)='coordinates'
3239 aval(5)=real(iinfo(1,idvmkk,ng),r8)
3240 tlm(ng)%pioVar(idvmkk)%dkind=
pio_fout
3241 tlm(ng)%pioVar(idvmkk)%gtype=w3dvar
3242
3243 status=def_var(ng, model, tlm(ng)%pioFile, &
3244 & tlm(ng)%pioVar(idvmkk)%vd, &
3245 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname)
3246 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3247 END IF
3248
3249
3250
3251 IF (hout(idmtls,ng)) THEN
3252 vinfo( 1)=vname(1,idmtls)
3253 WRITE (vinfo( 2),40) trim(vname(2,idmtls))
3254 vinfo( 3)=vname(3,idmtls)
3255 vinfo(14)=vname(4,idmtls)
3256 vinfo(16)=vname(1,idtime)
3257 vinfo(21)=vname(6,idmtls)
3258 vinfo(22)='coordinates'
3259 aval(5)=real(iinfo(1,idmtls,ng),r8)
3260 tlm(ng)%pioVar(idmtls)%dkind=
pio_fout
3261 tlm(ng)%pioVar(idmtls)%gtype=w3dvar
3262
3263 status=def_var(ng, model, tlm(ng)%pioFile, &
3264 & tlm(ng)%pioVar(idmtls)%vd, &
3265 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname, &
3266 & setfillval = .false.)
3267 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3268
3269 vinfo( 1)=vname(1,idvmls)
3270 WRITE (vinfo( 2),40) trim(vname(2,idvmls))
3271 vinfo( 3)=vname(3,idvmls)
3272 vinfo(14)=vname(4,idvmls)
3273 vinfo(16)=vname(1,idtime)
3274# if defined WRITE_WATER && defined MASKING
3275 vinfo(20)='mask_rho'
3276# endif
3277 vinfo(21)=vname(6,idvmls)
3278 vinfo(22)='coordinates'
3279 aval(5)=real(iinfo(1,idvmls,ng),r8)
3280 tlm(ng)%pioVar(idvmls)%dkind=
pio_fout
3281 tlm(ng)%pioVar(idvmls)%gtype=w3dvar
3282
3283 status=def_var(ng, model, tlm(ng)%pioFile, &
3284 & tlm(ng)%pioVar(idvmls)%vd, &
3285 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname)
3286 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3287
3288# ifdef GLS_MIXING_NOT_YET
3289
3290 vinfo( 1)=vname(1,idvmkp)
3291 WRITE (vinfo( 2),40) trim(vname(2,idvmkp))
3292 vinfo( 3)=vname(3,idvmkp)
3293 vinfo(14)=vname(4,idvmkp)
3294 vinfo(16)=vname(1,idtime)
3295# if defined WRITE_WATER && defined MASKING
3296 vinfo(20)='mask_rho'
3297# endif
3298 vinfo(21)=vname(6,idvmkp)
3299 vinfo(22)='coordinates'
3300 aval(5)=real(iinfo(1,idvmkp,ng),r8)
3301 tlm(ng)%pioVar(idvmkp)%dkind=
pio_fout
3302 tlm(ng)%pioVar(idvmkp)%gtype=w3dvar
3303
3304 status=def_var(ng, model, tlm(ng)%pioFile, &
3305 & tlm(ng)%pioVar(idvmkp), &
3306 &
pio_fout, nvd4, w3dgrd, aval, vinfo, ncname)
3307 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3308# endif
3309 END IF
3310# endif
3311# endif
3312# endif
3313
3314
3315
3316
3317
3319 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3320
3321
3322
3323
3324
3325 CALL wrt_info (ng, model, tlm(ng)%pioFile, ncname)
3326 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3327 END IF define
3328
3329
3330
3331
3332
3333
3334 query : IF (.not.ldef) THEN
3335 ncname=tlm(ng)%name
3336
3337
3338
3340 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
3341 WRITE (stdout,60) trim(ncname)
3342 RETURN
3343 END IF
3344
3345
3346
3348 & piofile = tlm(ng)%pioFile)
3349 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3350
3351
3352
3354 & piofile = tlm(ng)%pioFile)
3355 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3356
3357
3358
3359 DO i=1,nv
3360 got_var(i)=.false.
3361 END DO
3362
3363
3364
3365
3366 DO i=1,n_var
3367 IF (trim(var_name(i)).eq.trim(vname(1,idtime))) THEN
3368 got_var(idtime)=.true.
3369 tlm(ng)%pioVar(idtime)%vd=
var_desc(i)
3370 tlm(ng)%pioVar(idtime)%dkind=
pio_tout
3371 tlm(ng)%pioVar(idtime)%gtype=0
3372# ifdef SOLVE3D
3373 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpthr))) THEN
3374 got_var(idpthr)=.true.
3375 tlm(ng)%pioVar(idpthr)%vd=
var_desc(i)
3376 tlm(ng)%pioVar(idpthr)%dkind=
pio_fout
3377 tlm(ng)%pioVar(idpthr)%gtype=r3dvar
3378 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idpthw))) THEN
3379 got_var(idpthw)=.true.
3380 tlm(ng)%pioVar(idpthw)%vd=
var_desc(i)
3381 tlm(ng)%pioVar(idpthw)%dkind=
pio_fout
3382 tlm(ng)%pioVar(idpthw)%gtype=w3dvar
3383# endif
3384 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idfsur))) THEN
3385 got_var(idfsur)=.true.
3386 tlm(ng)%pioVar(idfsur)%vd=
var_desc(i)
3387 tlm(ng)%pioVar(idfsur)%dkind=
pio_fout
3388 tlm(ng)%pioVar(idfsur)%gtype=r2dvar
3389 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idubar))) THEN
3390 got_var(idubar)=.true.
3391 tlm(ng)%pioVar(idubar)%vd=
var_desc(i)
3392 tlm(ng)%pioVar(idubar)%dkind=
pio_fout
3393 tlm(ng)%pioVar(idubar)%gtype=u2dvar
3394 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvbar))) THEN
3395 got_var(idvbar)=.true.
3396 tlm(ng)%pioVar(idvbar)%vd=
var_desc(i)
3397 tlm(ng)%pioVar(idvbar)%dkind=
pio_fout
3398 tlm(ng)%pioVar(idvbar)%gtype=v2dvar
3399# ifdef ADJUST_BOUNDARY
3400 ELSE IF (trim(var_name(i)).eq. &
3401 & trim(vname(1,idsbry(isfsur)))) THEN
3402 got_var(idsbry(isfsur))=.true.
3403 tlm(ng)%pioVar(idsbry(isfsur))%vd=
var_desc(i)
3404 tlm(ng)%pioVar(idsbry(isfsur))%dkind=
pio_fout
3405 tlm(ng)%pioVar(idsbry(isfsur))%gtype=r2dobc
3406 ELSE IF (trim(var_name(i)).eq. &
3407 & trim(vname(1,idsbry(isubar)))) THEN
3408 got_var(idsbry(isubar))=.true.
3409 tlm(ng)%pioVar(idsbry(isubar))%vd=
var_desc(i)
3410 tlm(ng)%pioVar(idsbry(isubar))%dkind=
pio_fout
3411 tlm(ng)%pioVar(idsbry(isubar))%gtype=u2dobc
3412 ELSE IF (trim(var_name(i)).eq. &
3413 & trim(vname(1,idsbry(isvbar)))) THEN
3414 got_var(idsbry(isvbar))=.true.
3415 tlm(ng)%pioVar(idsbry(isvbar))%vd=
var_desc(i)
3416 tlm(ng)%pioVar(idsbry(isvbar))%dkind=
pio_fout
3417 tlm(ng)%pioVar(idsbry(isvbar))%gtype=v2dobc
3418# endif
3419# ifdef FORWARD_WRITE
3420# ifdef FORWARD_RHS
3421 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrzet))) THEN
3422 got_var(idrzet)=.true.
3423 tlm(ng)%pioVar(idrzet)%vd=
var_desc(i)
3424 tlm(ng)%pioVar(idrzet)%dkind=
pio_fout
3425 tlm(ng)%pioVar(idrzet)%gtype=r2dvar
3426 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru2d))) THEN
3427 got_var(idru2d)=.true.
3428 tlm(ng)%pioVar(idru2d)%vd=
var_desc(i)
3429 tlm(ng)%pioVar(idru2d)%dkind=
pio_fout
3430 tlm(ng)%pioVar(idru2d)%gtype=u2dvar
3431 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv2d))) THEN
3432 got_var(idrv2d)=.true.
3433 tlm(ng)%pioVar(idrv2d)%vd=
var_desc(i)
3434 tlm(ng)%pioVar(idrv2d)%dkind=
pio_fout
3435 tlm(ng)%pioVar(idrv2d)%gtype=v2dvar
3436# endif
3437# ifdef SOLVE3D
3438# ifdef FORWARD_RHS
3439 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idruct))) THEN
3440 got_var(idruct)=.true.
3441 tlm(ng)%pioVar(idruct)%vd=
var_desc(i)
3442 tlm(ng)%pioVar(idruct)%dkind=
pio_fout
3443 tlm(ng)%pioVar(idruct)%gtype=u2dvar
3444 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrvct))) THEN
3445 got_var(idrvct)=.true.
3446 tlm(ng)%pioVar(idrvct)%vd=
var_desc(i)
3447 tlm(ng)%pioVar(idrvct)%dkind=
pio_fout
3448 tlm(ng)%pioVar(idrvct)%gtype=v2dvar
3449# endif
3450 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx1))) THEN
3451 got_var(idufx1)=.true.
3452 tlm(ng)%pioVar(idufx1)%vd=
var_desc(i)
3453 tlm(ng)%pioVar(idufx1)%dkind=
pio_fout
3454 tlm(ng)%pioVar(idufx1)%gtype=u2dvar
3455 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idufx2))) THEN
3456 got_var(idufx2)=.true.
3457 tlm(ng)%pioVar(idufx2)%vd=
var_desc(i)
3458 tlm(ng)%pioVar(idufx2)%dkind=
pio_fout
3459 tlm(ng)%pioVar(idufx2)%gtype=u2dvar
3460 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx1))) THEN
3461 got_var(idvfx1)=.true.
3462 tlm(ng)%pioVar(idvfx1)%vd=
var_desc(i)
3463 tlm(ng)%pioVar(idvfx1)%dkind=
pio_fout
3464 tlm(ng)%pioVar(idvfx1)%gtype=v2dvar
3465 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvfx2))) THEN
3466 got_var(idvfx2)=.true.
3467 tlm(ng)%pioVar(idvfx2)%vd=
var_desc(i)
3468 tlm(ng)%pioVar(idvfx2)%dkind=
pio_fout
3469 tlm(ng)%pioVar(idvfx2)%gtype=v2dvar
3470# ifdef FORWARD_RHS
3471 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idru3d))) THEN
3472 got_var(idru3d)=.true.
3473 tlm(ng)%pioVar(idru3d)%vd=
var_desc(i)
3474 tlm(ng)%pioVar(idru3d)%dkind=
pio_fout
3475 tlm(ng)%pioVar(idru3d)%gtype=u3dvar
3476 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idrv3d))) THEN
3477 got_var(idrv3d)=.true.
3478 tlm(ng)%pioVar(idrv3d)%vd=
var_desc(i)
3479 tlm(ng)%pioVar(idrv3d)%dkind=
pio_fout
3480 tlm(ng)%pioVar(idrv3d)%gtype=v3dvar
3481# endif
3482# endif
3483# endif
3484# ifdef SOLVE3D
3485 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iduvel))) THEN
3486 got_var(iduvel)=.true.
3487 tlm(ng)%pioVar(iduvel)%vd=
var_desc(i)
3488 tlm(ng)%pioVar(iduvel)%dkind=
pio_fout
3489 tlm(ng)%pioVar(iduvel)%gtype=u3dvar
3490 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvel))) THEN
3491 got_var(idvvel)=.true.
3492 tlm(ng)%pioVar(idvvel)%vd=
var_desc(i)
3493 tlm(ng)%pioVar(idvvel)%dkind=
pio_fout
3494 tlm(ng)%pioVar(idvvel)%gtype=v3dvar
3495# ifdef ADJUST_BOUNDARY
3496 ELSE IF (trim(var_name(i)).eq. &
3497 & trim(vname(1,idsbry(isuvel)))) THEN
3498 got_var(idsbry(isuvel))=.true.
3499 tlm(ng)%pioVar(idsbry(isuvel))%vd=
var_desc(i)
3500 tlm(ng)%pioVar(idsbry(isuvel))%dkind=
pio_fout
3501 tlm(ng)%pioVar(idsbry(isuvel))%gtype=u3dobc
3502 ELSE IF (trim(var_name(i)).eq. &
3503 & trim(vname(1,idsbry(isvvel)))) THEN
3504 got_var(idsbry(isvvel))=.true.
3505 tlm(ng)%pioVar(idsbry(isvvel))%vd=
var_desc(i)
3506 tlm(ng)%pioVar(idsbry(isvvel))%dkind=
pio_fout
3507 tlm(ng)%pioVar(idsbry(isvvel))%gtype=v3dobc
3508# endif
3509# ifdef UV_DESTAGGERED
3510 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idu3de))) THEN
3511 got_var(idu3de)=.true.
3512 tlm(ng)%pioVar(idu3de)%vd=
var_desc(i)
3513 tlm(ng)%pioVar(idu3de)%dkind=
pio_fout
3514 tlm(ng)%pioVar(idu3de)%gtype=r3dvar
3515 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idv3dn))) THEN
3516 got_var(idv3dn)=.true.
3517 tlm(ng)%pioVar(idv3dn)%vd=
var_desc(i)
3518 tlm(ng)%pioVar(idv3dn)%dkind=
pio_fout
3519 tlm(ng)%pioVar(idv3dn)%gtype=r3dvar
3520# endif
3521 ELSE IF (trim(var_name(i)).eq.trim(vname(1,iddano))) THEN
3522 got_var(iddano)=.true.
3523 tlm(ng)%pioVar(iddano)%vd=
var_desc(i)
3524 tlm(ng)%pioVar(iddano)%dkind=
pio_fout
3525 tlm(ng)%pioVar(iddano)%gtype=r3dvar
3526# if defined FORWARD_MIXING && \
3527 (defined bvf_mixing || defined gls_mixing || \
3528 defined lmd_mixing || defined my25_mixing)
3529 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvvis))) THEN
3530 got_var(idvvis)=.true.
3531 tlm(ng)%pioVar(idvvis)%vd=
var_desc(i)
3532 tlm(ng)%pioVar(idvvis)%dkind=
pio_fout
3533 tlm(ng)%pioVar(idvvis)%gtype=w3dvar
3534 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtdif))) THEN
3535 got_var(idtdif)=.true.
3536 tlm(ng)%pioVar(idtdif)%vd=
var_desc(i)
3537 tlm(ng)%pioVar(idtdif)%dkind=
pio_fout
3538 tlm(ng)%pioVar(idtdif)%gtype=w3dvar
3539# ifdef SALINITY
3540 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idsdif))) THEN
3541 got_var(idsdif)=.true.
3542 tlm(ng)%pioVar(idsdif)%vd=
var_desc(i)
3543 tlm(ng)%pioVar(idsdif)%dkind=
pio_fout
3544 tlm(ng)%pioVar(idsdif)%gtype=w3dvar
3545# endif
3546# if defined GLS_MIXING_NOT_YET || defined MY25_MIXING_NOT_YET
3547 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtke))) THEN
3548 got_var(idmtke)=.true.
3549 tlm(ng)%pioVar(idmtke)%vd=
var_desc(i)
3550 tlm(ng)%pioVar(idmtke)%dkind=
pio_fout
3551 tlm(ng)%pioVar(idmtke)%gtype=w3dvar
3552 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkk))) THEN
3553 got_var(idvmkk)=.true.
3554 tlm(ng)%pioVar(idvmkk)%vd=
var_desc(i)
3555 tlm(ng)%pioVar(idvmkk)%dkind=
pio_fout
3556 tlm(ng)%pioVar(idvmkk)%gtype=w3dvar
3557 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmtls))) THEN
3558 got_var(idmtls)=.true.
3559 tlm(ng)%pioVar(idmtls)%vd=
var_desc(i)
3560 tlm(ng)%pioVar(idmtls)%dkind=
pio_fout
3561 tlm(ng)%pioVar(idmtls)%gtype=w3dvar
3562 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmls))) THEN
3563 got_var(idvmls)=.true.
3564 tlm(ng)%pioVar(idvmls)%vd=
var_desc(i)
3565 tlm(ng)%pioVar(idvmls)%dkind=
pio_fout
3566 tlm(ng)%pioVar(idvmls)%gtype=w3dvar
3567# ifdef GLS_MIXING_NOT_YET
3568 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvmkp))) THEN
3569 got_var(idvmkp)=.true.
3570 tlm(ng)%pioVar(idvmkp)%vd=
var_desc(i)
3571 tlm(ng)%pioVar(idvmkp)%dkind=
pio_fout
3572 tlm(ng)%pioVar(idvmkp)%gtype=w3dvar
3573# endif
3574# endif
3575# endif
3576# endif
3577# ifdef ADJUST_WSTRESS
3578 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idusms))) THEN
3579 got_var(idusms)=.true.
3580 tlm(ng)%pioVar(idusms)%vd=
var_desc(i)
3581 tlm(ng)%pioVar(idusms)%dkind=
pio_fout
3582 tlm(ng)%pioVar(idusms)%gtype=u2dvar
3583 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idvsms))) THEN
3584 got_var(idvsms)=.true.
3585 tlm(ng)%pioVar(idvsms)%vd=
var_desc(i)
3586 tlm(ng)%pioVar(idvsms)%dkind=
pio_fout
3587 tlm(ng)%pioVar(idvsms)%gtype=v2dvar
3588# endif
3589 END IF
3590# ifdef SOLVE3D
3591 DO itrc=1,nt(ng)
3592 IF (trim(var_name(i)).eq.trim(vname(1,idtvar(itrc)))) THEN
3593 got_var(idtvar(itrc))=.true.
3594 tlm(ng)%pioTrc(itrc)%vd=
var_desc(i)
3595 tlm(ng)%pioTrc(itrc)%dkind=
pio_fout
3596 tlm(ng)%pioTrc(itrc)%gtype=r3dvar
3597# ifdef ADJUST_BOUNDARY
3598 ELSE IF (trim(var_name(i)).eq. &
3599 & trim(vname(1,idsbry(istvar(itrc))))) THEN
3600 got_var(idsbry(istvar(itrc)))=.true.
3601 tlm(ng)%pioVar(idsbry(istvar(itrc)))%vd=
var_desc(i)
3602 tlm(ng)%pioVar(idsbry(istvar(itrc)))%dkind=
pio_fout
3603 tlm(ng)%pioVar(idsbry(istvar(itrc)))%gtype=r3dobc
3604# endif
3605# ifdef ADJUST_STFLUX
3606 ELSE IF (trim(var_name(i)).eq. &
3607 & trim(vname(1,idtsur(itrc)))) THEN
3608 got_var(idtsur(itrc))=.true.
3609 tlm(ng)%pioVar(idtsur(itrc))%vd=
var_desc(i)
3610 tlm(ng)%pioVar(idtsur(itrc))%dkind=
pio_fout
3611 tlm(ng)%pioVar(idtsur(itrc))%gtype=r2dvar
3612# endif
3613 END IF
3614 END DO
3615# endif
3616 END DO
3617
3618
3619
3620 IF (.not.got_var(idtime)) THEN
3621 IF (master) WRITE (stdout,70) trim(vname(1,idtime)), &
3622 & trim(ncname)
3623 exit_flag=3
3624 RETURN
3625 END IF
3626# ifdef SOLVE3D
3627 IF (.not.got_var(idpthr).and.hout(idpthr,ng)) THEN
3628 IF (master) WRITE (stdout,70) trim(vname(1,idpthr)), &
3629 & trim(ncname)
3630 exit_flag=3
3631 RETURN
3632 END IF
3633 IF (.not.got_var(idpthw).and.hout(idpthw,ng)) THEN
3634 IF (master) WRITE (stdout,70) trim(vname(1,idpthw)), &
3635 & trim(ncname)
3636 exit_flag=3
3637 RETURN
3638 END IF
3639# endif
3640 IF (.not.got_var(idfsur).and.hout(idfsur,ng)) THEN
3641 IF (master) WRITE (stdout,70) trim(vname(1,idfsur)), &
3642 & trim(ncname)
3643 exit_flag=3
3644 RETURN
3645 END IF
3646 IF (.not.got_var(idubar).and.hout(idubar,ng)) THEN
3647 IF (master) WRITE (stdout,70) trim(vname(1,idubar)), &
3648 & trim(ncname)
3649 exit_flag=3
3650 RETURN
3651 END IF
3652 IF (.not.got_var(idvbar).and.hout(idvbar,ng)) THEN
3653 IF (master) WRITE (stdout,70) trim(vname(1,idvbar)), &
3654 & trim(ncname)
3655 exit_flag=3
3656 RETURN
3657 END IF
3658# ifdef ADJUST_BOUNDARY
3659 IF (.not.got_var(idsbry(isfsur))) THEN
3660 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isfsur))), &
3661 & trim(ncname)
3662 exit_flag=3
3663 RETURN
3664 END IF
3665 IF (.not.got_var(idsbry(isubar))) THEN
3666 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isubar))), &
3667 & trim(ncname)
3668 exit_flag=3
3669 RETURN
3670 END IF
3671 IF (.not.got_var(idsbry(isvbar))) THEN
3672 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isvbar))), &
3673 & trim(ncname)
3674 exit_flag=3
3675 RETURN
3676 END IF
3677# endif
3678# ifdef FORWARD_WRITE
3679# ifdef FORWARD_RHS
3680 IF (.not.got_var(idrzet)) THEN
3681 IF (master) WRITE (stdout,70) trim(vname(1,idrzet)), &
3682 & trim(ncname)
3683 exit_flag=3
3684 RETURN
3685 END IF
3686 IF (.not.got_var(idru2d)) THEN
3687 IF (master) WRITE (stdout,70) trim(vname(1,idru2d)), &
3688 & trim(ncname)
3689 exit_flag=3
3690 RETURN
3691 END IF
3692 IF (.not.got_var(idrv2d)) THEN
3693 IF (master) WRITE (stdout,70) trim(vname(1,idrv2d)), &
3694 & trim(ncname)
3695 exit_flag=3
3696 RETURN
3697 END IF
3698# endif
3699# ifdef SOLVE3D
3700# ifdef FORWARD_RHS
3701 IF (.not.got_var(idruct)) THEN
3702 IF (master) WRITE (stdout,70) trim(vname(1,idruct)), &
3703 & trim(ncname)
3704 exit_flag=3
3705 RETURN
3706 END IF
3707 IF (.not.got_var(idrvct)) THEN
3708 IF (master) WRITE (stdout,70) trim(vname(1,idrvct)), &
3709 & trim(ncname)
3710 exit_flag=3
3711 RETURN
3712 END IF
3713# endif
3714 IF (.not.got_var(idufx1)) THEN
3715 IF (master) WRITE (stdout,70) trim(vname(1,idufx1)), &
3716 & trim(ncname)
3717 exit_flag=3
3718 RETURN
3719 END IF
3720 IF (.not.got_var(idufx2)) THEN
3721 IF (master) WRITE (stdout,70) trim(vname(1,idufx2)), &
3722 & trim(ncname)
3723 exit_flag=3
3724 RETURN
3725 END IF
3726 IF (.not.got_var(idvfx1)) THEN
3727 IF (master) WRITE (stdout,70) trim(vname(1,idvfx1)), &
3728 & trim(ncname)
3729 exit_flag=3
3730 RETURN
3731 END IF
3732 IF (.not.got_var(idvfx2)) THEN
3733 IF (master) WRITE (stdout,70) trim(vname(1,idvfx2)), &
3734 & trim(ncname)
3735 exit_flag=3
3736 RETURN
3737 END IF
3738# ifdef FORWARD_RHS
3739 IF (.not.got_var(idru3d)) THEN
3740 IF (master) WRITE (stdout,70) trim(vname(1,idru3d)), &
3741 & trim(ncname)
3742 exit_flag=3
3743 RETURN
3744 END IF
3745 IF (.not.got_var(idrv3d)) THEN
3746 IF (master) WRITE (stdout,70) trim(vname(1,idrv3d)), &
3747 & trim(ncname)
3748 exit_flag=3
3749 RETURN
3750 END IF
3751# endif
3752# endif
3753# endif
3754# ifdef SOLVE3D
3755 IF (.not.got_var(iduvel).and.hout(iduvel,ng)) THEN
3756 IF (master) WRITE (stdout,70) trim(vname(1,iduvel)), &
3757 & trim(ncname)
3758 exit_flag=3
3759 RETURN
3760 END IF
3761 IF (.not.got_var(idvvel).and.hout(idvvel,ng)) THEN
3762 IF (master) WRITE (stdout,70) trim(vname(1,idvvel)), &
3763 & trim(ncname)
3764 exit_flag=3
3765 RETURN
3766 END IF
3767# ifdef ADJUST_BOUNDARY
3768 IF (.not.got_var(idsbry(isuvel))) THEN
3769 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isuvel))), &
3770 & trim(ncname)
3771 exit_flag=3
3772 RETURN
3773 END IF
3774 IF (.not.got_var(idsbry(isvvel))) THEN
3775 IF (master) WRITE (stdout,70) trim(vname(1,idsbry(isvvel))), &
3776 & trim(ncname)
3777 exit_flag=3
3778 RETURN
3779 END IF
3780# endif
3781# ifdef UV_DESTAGGERED
3782 IF (.not.got_var(idu3de).and.hout(idu3de,ng)) THEN
3783 IF (master) WRITE (stdout,70) trim(vname(1,idu3de)), &
3784 & trim(ncname)
3785 exit_flag=3
3786 RETURN
3787 END IF
3788 IF (.not.got_var(idv3dn).and.hout(idv3dn,ng)) THEN
3789 IF (master) WRITE (stdout,70) trim(vname(1,idv3dn)), &
3790 & trim(ncname)
3791 exit_flag=3
3792 RETURN
3793 END IF
3794# endif
3795 IF (.not.got_var(iddano).and.hout(iddano,ng)) THEN
3796 IF (master) WRITE (stdout,70) trim(vname(1,iddano)), &
3797 & trim(ncname)
3798 exit_flag=3
3799 RETURN
3800 END IF
3801# if defined FORWARD_MIXING && \
3802 (defined bvf_mixing || defined gls_mixing || \
3803 defined lmd_mixing || defined my25_mixing)
3804 IF (.not.got_var(idvvis).and.hout(idvvis,ng)) THEN
3805 IF (master) WRITE (stdout,70) trim(vname(1,idvvis)), &
3806 & trim(ncname)
3807 exit_flag=3
3808 RETURN
3809 END IF
3810 IF (.not.got_var(idtdif).and.hout(idtdif,ng)) THEN
3811 IF (master) WRITE (stdout,70) trim(vname(1,idtdif)), &
3812 & trim(ncname)
3813 exit_flag=3
3814 RETURN
3815 END IF
3816# ifdef SALINITY
3817 IF (.not.got_var(idsdif).and.hout(idsdif,ng)) THEN
3818 IF (master) WRITE (stdout,70) trim(vname(1,idsdif)), &
3819 & trim(ncname)
3820 exit_flag=3
3821 RETURN
3822 END IF
3823# endif
3824# if defined GLS_MIXING_NOT_YET || defined MY25_MIXING_NOT_YET
3825 IF (.not.got_var(idmtke).and.hout(idmtke,ng)) THEN
3826 IF (master) WRITE (stdout,70) trim(vname(1,idmtke)), &
3827 & trim(ncname)
3828 exit_flag=3
3829 RETURN
3830 END IF
3831 IF (.not.got_var(idvmkk).and.hout(idvmkk,ng)) THEN
3832 IF (master) WRITE (stdout,70) trim(vname(1,idvmkk)), &
3833 & trim(ncname)
3834 exit_flag=3
3835 RETURN
3836 END IF
3837 IF (.not.got_var(idmtls).and.hout(idmtls,ng)) THEN
3838 IF (master) WRITE (stdout,70) trim(vname(1,idmtls)), &
3839 & trim(ncname)
3840 exit_flag=3
3841 RETURN
3842 END IF
3843 IF (.not.got_var(idvmls).and.hout(idvmls,ng)) THEN
3844 IF (master) WRITE (stdout,70) trim(vname(1,idvmls)), &
3845 & trim(ncname)
3846 exit_flag=3
3847 RETURN
3848 END IF
3849# ifdef GSL_MIXING
3850 IF (.not.got_var(idvmkp).and.hout(idvmkp,ng)) THEN
3851 IF (master) WRITE (stdout,70) trim(vname(1,idvmkp)), &
3852 & trim(ncname)
3853 exit_flag=3
3854 RETURN
3855 END IF
3856# endif
3857# endif
3858# endif
3859# endif
3860# ifdef ADJUST_WSTRESS
3861 IF (.not.got_var(idusms).and.hout(idusms,ng)) THEN
3862 IF (master) WRITE (stdout,70) trim(vname(1,idusms)), &
3863 & trim(ncname)
3864 exit_flag=3
3865 RETURN
3866 END IF
3867 IF (.not.got_var(idvsms).and.hout(idvsms,ng)) THEN
3868 IF (master) WRITE (stdout,70) trim(vname(1,idvsms)), &
3869 & trim(ncname)
3870 exit_flag=3
3871 RETURN
3872 END IF
3873# endif
3874# ifdef SOLVE3D
3875 DO itrc=1,nt(ng)
3876 IF (.not.got_var(idtvar(itrc)).and.hout(idtvar(itrc),ng)) THEN
3877 IF (master) WRITE (stdout,70) trim(vname(1,idtvar(itrc))), &
3878 & trim(ncname)
3879 exit_flag=3
3880 RETURN
3881 END IF
3882# ifdef ADJUST_BOUNDARY
3883 IF (.not.got_var(idsbry(istvar(itrc)))) THEN
3884 IF (master) WRITE (stdout,70) &
3885 & trim(vname(1,idsbry(istvar(itrc)))), &
3886 & trim(ncname)
3887 exit_flag=3
3888 RETURN
3889 END IF
3890# endif
3891# ifdef ADJUST_STFLUX
3892 IF (.not.got_var(idtsur(itrc)).and.hout(idtsur(itrc),ng).and. &
3893 & lstflux(itrc,ng)) THEN
3894 IF (master) WRITE (stdout,70) trim(vname(1,idtsur(itrc))), &
3895 & trim(ncname)
3896 exit_flag=3
3897 RETURN
3898 END IF
3899# endif
3900 END DO
3901# endif
3902
3903
3904
3905 IF (ndeftlm(ng).gt.0) THEN
3906 tlm(ng)%Rindex=((ntstart(ng)-1)- &
3907 & ndeftlm(ng)*((ntstart(ng)-1)/ndeftlm(ng)))/ &
3908 & ntlm(ng)
3909 ELSE
3910 tlm(ng)%Rindex=(ntstart(ng)-1)/ntlm(ng)
3911 END IF
3912 tlm(ng)%Rindex=min(tlm(ng)%Rindex,rec_size)
3913 END IF query
3914
3915 10 FORMAT (2x,'TL_DEF_HIS_PIO - creating tangent file,',t56, &
3916 & 'Grid ',i2.2,': ',a)
3917 20 FORMAT (2x,'TL_DEF_HIS_PIO - inquiring tangent file,',t56, &
3918 & 'Grid ',i2.2,': ',a)
3919 30 FORMAT (/,' TL_DEF_HIS_PIO - unable to create tangent NetCDF', &
3920 & ' file: ',a)
3921 40 FORMAT ('tangent linear',1x,a)
3922 50 FORMAT (1pe11.4,1x,'millimeter')
3923 60 FORMAT (/,' TL_DEF_HIS_PIO - unable to open tangent NetCDF', &
3924 & ' file: ',a)
3925 70 FORMAT (/,' TL_DEF_HIS_PIO - unable to find variable: ',a,2x, &
3926 & ' in tangent NetCDF file: ',a)
3927
3928 RETURN
integer, parameter pio_type
integer, parameter pio_fout
type(var_desc_t), dimension(:), pointer var_desc
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)