1180 INTEGER,
POINTER :: partition(:)
1181 INTEGER :: status, I
1182 LOGICAL,
SAVE :: IOPROC_ALLOCATED = .false.
1183 TYPE(NCFILE),
POINTER :: NCF
1184 TYPE(NCVAR),
POINTER :: VAR
1185 TYPE(NCATT),
POINTER :: ATT
1187 character(len=100) :: timestamp, temp, netcdf_convention
1189 IF(dbg_set(dbg_sbr))
WRITE(
ipt,*)
"START GRID_FILE_OBJECT" 1194 IF(
ioproc .AND. .NOT. ioproc_allocated)
THEN 1200 ioproc_allocated = .true.
1203 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:partition")
1206 allocate(
xm(
mgl),stat=status)
1207 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:XM")
1210 allocate(
ym(
mgl),stat=status)
1211 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:YM")
1214 allocate(
lon(
mgl),stat=status)
1215 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:LON")
1218 allocate(
lat(
mgl),stat=status)
1219 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:LAT")
1222 allocate(
xmc(
ngl),stat=status)
1223 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:XMC")
1226 allocate(
ymc(
ngl),stat=status)
1227 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:YMC")
1230 allocate(
lonc(
ngl),stat=status)
1231 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:LONC")
1234 allocate(
latc(
ngl),stat=status)
1235 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:LATC")
1238 allocate(
zz(
mgl,
kb),stat=status)
1239 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ZZ")
1242 allocate(
z(
mgl,
kb),stat=status)
1243 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Z")
1246 allocate(
h(
mgl),stat=status)
1247 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:H")
1252 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ZZ1")
1255 allocate(
z1(
ngl,
kb),stat=status)
1256 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Z1")
1259 allocate(
h1(
ngl),stat=status)
1260 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORcY ON IO PROC FOR OUTPUT DATA:H1")
1270 IF(
ASSOCIATED(g%NV))
THEN 1272 IF(ubound(g%nv,1)/=dim_nele%DIM)
THEN 1274 &(
"GRID DATA NV HAS ALREADY BEEN ASSOICATED ON THE IOPROC",&
1275 &
"AND THE DIMENSION DOES NOT MATCH THE CURRENT FILE!",&
1276 &
"GRID NAME:"//trim(g%NAME))
1280 allocate(g%nv(g%NGL,3),stat=status)
1281 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:G%NV")
1293 att => nc_make_att(name=
'title',values=trim(
case_title))
1297 att => nc_make_att(name=
'institution',values=trim(
institution))
1300 att => nc_make_att(name=
'source',values=trim(
fvcom_version))
1304 timestamp =
'model started at: '//trim(temp)
1306 att => nc_make_att(name=
'history',values=trim(timestamp))
1309 att => nc_make_att(name=
'references',values=trim(
fvcom_website))
1312 netcdf_convention =
'CF-1.0' 1313 att => nc_make_att(name=
'Conventions',values=trim(netcdf_convention))
1316 att => nc_make_att(name=
'CoordinateSystem',values=
"Cartesian" )
1320 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1325 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1328 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1331 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1334 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1337 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1342 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1346 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1351 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1356 att=> nc_make_att(name=
'Special_Physical_processes',&
1357 & values=
'long shore flow adjustment for thermal wind and win& 1367 var => nc_make_avar(name=
'nprocs',values=
nprocs)
1369 att => nc_make_att(name=
'long_name',values=
'number of processors')
1377 var => nc_make_avar(name=
'x',values=
xm,dim1=dim_node)
1379 att => nc_make_att(name=
'long_name',values=
'nodal x-coordinate')
1382 att => nc_make_att(name=
'units',values=
'meters')
1387 var => nc_make_avar(name=
'y',values=
ym,dim1=dim_node)
1389 att => nc_make_att(name=
'long_name',values=
'nodal y-coordinate')
1392 att => nc_make_att(name=
'units',values=
'meters')
1399 var => nc_make_avar(name=
'lon',values=
lon,dim1=dim_node)
1401 att => nc_make_att(name=
'long_name',values=
'nodal longitude')
1404 att => nc_make_att(name=
'standard_name',values=
'longitude')
1407 att => nc_make_att(name=
'units',values=
'degrees_east')
1412 var => nc_make_avar(name=
'lat',values=
lat,dim1=dim_node)
1414 att => nc_make_att(name=
'long_name',values=
'nodal latitude')
1417 att => nc_make_att(name=
'standard_name',values=
'latitude')
1420 att => nc_make_att(name=
'units',values=
'degrees_north')
1425 IF (
ALLOCATED(
xmc))
THEN 1427 var => nc_make_avar(name=
'xc',values=
xmc,dim1=dim_nele)
1429 att => nc_make_att(name=
'long_name',values=
'zonal x-coordinate')
1432 att => nc_make_att(name=
'units',values=
'meters')
1437 IF (
ALLOCATED(
ymc))
THEN 1439 var => nc_make_avar(name=
'yc',values=
ymc,dim1=dim_nele)
1441 att => nc_make_att(name=
'long_name',values=
'zonal y-coordinate')
1444 att => nc_make_att(name=
'units',values=
'meters')
1450 IF (
ALLOCATED(
lonc))
THEN 1452 var => nc_make_avar(name=
'lonc',values=
lonc,dim1=dim_nele)
1454 att => nc_make_att(name=
'long_name',values=
'zonal longitude')
1457 att => nc_make_att(name=
'standard_name',values=
'longitude')
1460 att => nc_make_att(name=
'units',values=
'degrees_east')
1465 IF (
ALLOCATED(
latc))
THEN 1467 var => nc_make_avar(name=
'latc',values=
latc,dim1=dim_nele)
1469 att => nc_make_att(name=
'long_name',values=
'zonal latitude')
1472 att => nc_make_att(name=
'standard_name',values=
'latitude')
1475 att => nc_make_att(name=
'units',values=
'degrees_north')
1481 IF (
ALLOCATED(
zz))
THEN 1483 var => nc_make_avar(name=
'siglay',&
1486 & dim2= dim_siglay )
1488 att => nc_make_att(name=
'long_name',values=
'Sigma Layers')
1491 att => nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
1494 att => nc_make_att(name=
'positive',values=
'up')
1497 att => nc_make_att(name=
'valid_min',values=-1.0_spa)
1500 att => nc_make_att(name=
'valid_max',values=0.0_spa)
1503 att => nc_make_att(name=
'formula_terms',values=
'sigma: siglay eta: zeta depth: h')
1509 IF (
ALLOCATED(
z))
THEN 1511 var => nc_make_avar(name=
'siglev',&
1512 & values=
z, dim1= dim_node, dim2= dim_siglev )
1514 att => nc_make_att(name=
'long_name',values=
'Sigma Levels')
1517 att => nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
1520 att => nc_make_att(name=
'positive',values=
'up')
1523 att => nc_make_att(name=
'valid_min',values=-1.0_spa)
1526 att => nc_make_att(name=
'valid_max',values=0.0_spa)
1529 att => nc_make_att(name=
'formula_terms',values=
'sigma:siglay eta: zeta depth: h')
1537 IF (
ALLOCATED(
zz1))
THEN 1539 var => nc_make_avar(name=
'siglay_center',&
1542 & dim2= dim_siglay )
1544 att => nc_make_att(name=
'long_name',values=
'Sigma Layers')
1547 att => nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
1550 att => nc_make_att(name=
'positive',values=
'up')
1553 att => nc_make_att(name=
'valid_min',values=-1.0_spa)
1556 att => nc_make_att(name=
'valid_max',values=0.0_spa)
1559 att => nc_make_att(name=
'formula_terms',values=
'sigma: siglay_center eta: zeta_center depth: h_center')
1565 IF (
ALLOCATED(
z1))
THEN 1567 var => nc_make_avar(name=
'siglev_center',&
1568 & values=
z1, dim1= dim_nele, dim2= dim_siglev )
1570 att => nc_make_att(name=
'long_name',values=
'Sigma Levels')
1573 att => nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
1576 att => nc_make_att(name=
'positive',values=
'up')
1579 att => nc_make_att(name=
'valid_min',values=-1.0_spa)
1582 att => nc_make_att(name=
'valid_max',values=0.0_spa)
1585 att => nc_make_att(name=
'formula_terms',values=
'sigma:siglay_center eta: zeta_center depth: h_center')
1591 IF (
ALLOCATED(
h1))
THEN 1593 var => nc_make_avar(name=
'h_center',values=
h1, dim1= dim_nele)
1595 att => nc_make_att(name=
'long_name',values=
'Bathymetry')
1598 att => nc_make_att(name=
'standard_name',values=
'sea_floor_depth_below_geoid')
1601 att => nc_make_att(name=
'units',values=
'm')
1604 att => nc_make_att(name=
'positive',values=
'down')
1607 att => nc_make_att(name=
'grid',values=
'grid1 grid3')
1610 att => nc_make_att(name=
'coordinates',values=
'latc lonc')
1613 att => nc_make_att(name=
'grid_location',values=
'center')
1622 IF (
ALLOCATED(
h))
THEN 1624 var => nc_make_avar(name=
'h',values=
h, dim1= dim_node)
1626 att => nc_make_att(name=
'long_name',values=
'Bathymetry')
1629 att => nc_make_att(name=
'standard_name',values=
'sea_floor_depth_below_geoid')
1632 att => nc_make_att(name=
'units',values=
'm')
1635 att => nc_make_att(name=
'positive',values=
'down')
1638 att => nc_make_att(name=
'grid',values=
'Bathymetry_Mesh')
1641 att => nc_make_att(name=
'coordinates',values=coordvar)
1644 att => nc_make_att(name=
'type',values=
'data')
1651 var => nc_make_pvar(name=
'nv',&
1652 & values=g%nv, dim1= dim_nele, dim2= dim_three)
1654 att => nc_make_att(name=
'long_name',values=
'nodes surrounding element')
1659 IF(dbg_set(dbg_sbr))
WRITE(
ipt,*)
"END GRID_FILE_OBJECT" real(sp), dimension(:), allocatable, target partition
subroutine get_timestamp(TS)
real(sp), dimension(:), allocatable, target h
character(len=char_max_attlen), dimension(:), allocatable, public precip_forcing_comments
real(sp), dimension(:), allocatable, target ymc
real(sp), dimension(:), allocatable, target latc
character(len=200) projection_reference
character(len=char_max_attlen), dimension(:), allocatable, public gwater_forcing_comments
character(len=80) institution
real(sp), dimension(:), allocatable, target xmc
character(len=80) case_title
logical obc_longshore_flow_on
real(sp), dimension(:), allocatable, target lonc
character(len=char_max_attlen), dimension(:), allocatable, public heat_forcing_comments
character(len=char_max_attlen), dimension(:), allocatable, public icing_forcing_comments
real(sp), dimension(:), allocatable, target xm
real(sp), dimension(:,:), allocatable, target zz1
character(len=80) fvcom_website
character(len=80) fvcom_version
character(len=char_max_attlen), dimension(:), allocatable, public tide_forcing_comments
character(len=char_max_attlen), dimension(:), allocatable, public winds_forcing_comments
real(sp), dimension(:), allocatable, target lat
real(sp), dimension(:,:), allocatable, target z
real(sp), dimension(:), allocatable, target h1
real(sp), dimension(:), allocatable, target lon
character(len=char_max_attlen), dimension(:), allocatable, public ice_forcing_comments
real(sp), dimension(:,:), allocatable, target z1
character(len=char_max_attlen), dimension(:), allocatable, public river_forcing_comments
character(len=80) prg_name
real(sp), dimension(:,:), allocatable, target zz
real(sp), dimension(:), allocatable, target ym