111 LOGICAL,
private :: found
112 logical,
private :: need_init = .true.
160 IF(use_mpi_io_mode)
THEN 164 IF (status/=0)
call fatal_error(
"ARCHIVE:: Bad INIT_CODE",&
165 &
"Could not retrieve valid function pointer?")
177 IF(
abs(
nc_dat%FTIME%NEXT_IO -inttime)<0.1_sp*imdti .or. force_archive)
THEN 179 IF(use_mpi_io_mode)
THEN 183 IF (status/=0)
call fatal_error(
"ARCHIVE:: Bad NC_CODE",&
184 &
"Could not retrieve valid function pointer?")
219 write(*,*)
'NC_AVG%FTIME%NEXT_IO=',
nc_avg%FTIME%NEXT_IO
220 write(*,*)
' IntTime=',inttime
223 IF((
nc_avg%FTIME%NEXT_IO +
nc_avg%FTIME%INTERVAL) == inttime)
THEN 227 IF(use_mpi_io_mode)
THEN 231 IF (status/=0)
call fatal_error(
"ARCHIVE:: Bad NCAV_CODE",&
232 &
"Could not retrieve valid function pointer?")
250 IF(use_mpi_io_mode)
THEN 254 IF (status/=0)
call fatal_error(
"ARCHIVE:: Bad RESTART_CODE",&
255 &
"Could not retrieve valid function pointer?")
268 write(ipt,*)
"!==============================================================" 269 write(ipt,*)
"! SETTING UP NCDIO: CREATING AND DUMPING OUTPUT FILE META DATA" 270 write(ipt,*)
"!==============================================================" 282 & (
"INIT_NCDIO: THE DATA FILE OBJECT IS NOT ASSOCIATED ")
292 & (
"INIT_NCDIO: THE AVERAGE FILE OBJECT IS NOT ASSOCIATED ")
302 & (
"INIT_NCDIO: THE RESTART FILE OBJECT IS NOT ASSOCIATED ")
310 write(ipt,*)
"! FINISHED NCDIO SETUP!" 311 write(ipt,*)
"!==============================================================" 322 TYPE(ncfile),
POINTER :: NCF
326 IF (icing_model .AND. .NOT. ioproc)
CALL icing(inttime)
332 (
"DUMP_NC_DAT: CAN NOT FILE FILE OBJECT NAME:"//trim(
nc_dat_grids(i)%NAME))
346 TYPE(ncfile),
POINTER :: NCF
353 (
"DUMP_NC_AVG: CAN NOT FILE FILE OBJECT NAME:"//trim(
nc_avg_grids(i)%NAME))
371 character(len=80) :: tmp,dat_name
374 TYPE(ncfile),
POINTER :: NCF,NCF_TMP,NCF2
376 LOGICAL :: INCLUDE_MASTER = .false.
382 write(ipt,*)
"!--------------------------------------------------" 383 write(ipt,*)
"! SETTING UP DATA FILE OUTPUTS..." 388 i = len_trim(
nc_dat%FNAME)
389 dat_name =
nc_dat%FNAME(i-7:i)
403 tmp = trim(output_dir)//trim(
nc_dat_grids(i)%NAME)//trim(dat_name)
404 ncf => new_file(trim(tmp))
410 ncf%FTIME => new_ftime()
421 include_master = .true.
440 IF(nc_file_date)
THEN 446 IF(nc_grid_metrics)
THEN 458 IF(nc_vertical_vel)
THEN 464 IF(nc_average_vel)
THEN 470 IF(nc_vorticity)
THEN 476 IF(nc_salt_temp)
THEN 482 IF(nc_turbulence)
THEN 488 IF (nc_surface_heat .and. heating_on)
THEN 494 IF (nc_wind_vel)
THEN 500 IF (nc_wind_stress .and. wind_on)
THEN 507 IF (nc_evap_precip .and. precipitation_on)
THEN 513 IF(wetting_drying_on)
THEN 515 ncf => add(ncf, ncf2)
521 ncf => add(ncf, ncf2)
525 IF (groundwater_on .and. nc_groundwater)
THEN 538 IF (startup_type /=
"crashrestart")
THEN 541 ncf%FTIME%NEXT_STKCNT = 0
543 ncf%FTIME%NEXT_STKCNT = 1
546 ncf%CONNECTED = .true.
547 ncf%WRITABLE = .true.
554 IF(.not. include_master)
THEN 560 &(
"LOGICAL ERROR IN SETUP_DATFILE")
568 character(len=80) :: tmp,dat_name
569 TYPE(ncvar),
POINTER :: VAR
570 TYPE(ncatt),
POINTER :: ATT
571 TYPE(ncdim),
POINTER :: DIM
574 TYPE(grid),
SAVE :: MYGRID
575 TYPE(ncfile),
POINTER :: NCF,NCF_TMP
576 LOGICAL :: INCLUDE_MASTER = .false.
587 write(ipt,*)
"!--------------------------------------------------" 588 write(ipt,*)
"! SETTING UP AVERAGE FILE OUTPUTS..." 602 IF(ncav_velocity)
THEN 608 IF(ncav_vertical_vel)
THEN 614 IF(ncav_average_vel)
THEN 620 IF(ncav_vorticity)
THEN 626 IF(ncav_salt_temp)
THEN 632 IF(ncav_turbulence)
THEN 638 IF (ncav_surface_heat .and. heating_on)
THEN 644 IF (ncav_wind_vel)
THEN 650 IF (ncav_wind_stress .and. wind_on)
THEN 657 IF (ncav_evap_precip .and. precipitation_on)
THEN 671 IF (groundwater_on .and. ncav_groundwater)
THEN 705 i = len_trim(
nc_avg%FNAME)
706 dat_name =
nc_avg%FNAME(i-11:i)
722 ncf => new_file(trim(tmp))
728 ncf%FTIME => new_ftime()
740 include_master = .true.
747 ncf => add(ncf,ncf_tmp)
751 ncf => add(ncf,ncf_tmp)
754 att => find_att(ncf,
"title",found)
755 att%CHR(1) = trim(case_title)//
"; Average output file!" 758 IF(ncav_file_date)
THEN 760 ncf => add(ncf,ncf_tmp)
764 IF(ncav_grid_metrics)
THEN 766 ncf => add(ncf,ncf_tmp)
778 dim => find_dim(ncf_tmp,
'node',found)
780 &(
"LOGICAL ERROR IN SETUP_AVGFILE: CAN'T FIND DIM NODE")
783 dim => find_dim(ncf_tmp,
'nele',found)
785 &(
"LOGICAL ERROR IN SETUP_AVGFILE: CAN'T FIND DIM NELE")
789 ncf => add(ncf,ncf_tmp)
792 IF (startup_type /=
"crashrestart")
THEN 795 ncf%FTIME%NEXT_STKCNT = 0
797 ncf%FTIME%NEXT_STKCNT = 1
800 ncf%CONNECTED = .true.
801 ncf%WRITABLE = .true.
810 IF(.not. include_master)
THEN 816 &(
"LOGICAL ERROR IN SETUP_AVGFILE")
826 TYPE(ncvarp),
POINTER :: CURRENT_DATA,CURRENT_SUM
827 TYPE(ncvar),
POINTER :: VAR_DATA, VAR_SUM
833 IF(.NOT.
ASSOCIATED(current_data))
THEN 837 IF(.NOT.
ASSOCIATED(current_sum))
THEN 838 CALL fatal_error(
"ADD_AVERAGE: SUM AND DATA VAR LISTS DO NOT HAVE THE SAME LENGTH?")
841 IF(.NOT.
ASSOCIATED(current_sum%VAR))
THEN 842 CALL fatal_error(
"ALLOCATE_ASSOCIATED_VARS: FOUND NULL VAR POINTER IN THE LIST")
845 IF(.NOT.
ASSOCIATED(current_data%VAR))
THEN 846 CALL fatal_error(
"ALLOCATE_ASSOCIATED_VARS: FOUND NULL VAR POINTER IN THE LIST")
849 var_sum => current_sum%VAR
850 var_data => current_data%VAR
853 IF(
Associated(var_data%SCL_INT)) var_sum%SCL_INT=var_data%SCL_INT+var_sum%SCL_INT
854 IF(
Associated(var_data%VEC_INT)) var_sum%VEC_INT=var_data%VEC_INT+var_sum%VEC_INT
855 IF(
Associated(var_data%ARR_INT)) var_sum%ARR_INT=var_data%ARR_INT+var_sum%ARR_INT
856 IF(
Associated(var_data%CUB_INT)) var_sum%CUB_INT=var_data%CUB_INT+var_sum%CUB_INT
858 IF(
Associated(var_data%SCL_FLT)) var_sum%SCL_FLT=var_data%SCL_FLT+var_sum%SCL_FLT
859 IF(
Associated(var_data%VEC_FLT)) var_sum%VEC_FLT=var_data%VEC_FLT+var_sum%VEC_FLT
860 IF(
Associated(var_data%ARR_FLT)) var_sum%ARR_FLT=var_data%ARR_FLT+var_sum%ARR_FLT
861 IF(
Associated(var_data%CUB_FLT)) var_sum%CUB_FLT=var_data%CUB_FLT+var_sum%CUB_FLT
863 IF(
Associated(var_data%SCL_DBL)) var_sum%SCL_DBL=var_data%SCL_DBL+var_sum%SCL_DBL
864 IF(
Associated(var_data%VEC_DBL)) var_sum%VEC_DBL=var_data%VEC_DBL+var_sum%VEC_DBL
865 IF(
Associated(var_data%ARR_DBL)) var_sum%ARR_DBL=var_data%ARR_DBL+var_sum%ARR_DBL
866 IF(
Associated(var_data%CUB_DBL)) var_sum%CUB_DBL=var_data%CUB_DBL+var_sum%CUB_DBL
869 current_data => current_data%NEXT
870 current_sum => current_sum%NEXT
878 TYPE(ncvarp),
POINTER :: CURRENT
879 TYPE(ncvar),
POINTER :: VAR
880 REAL(DP) :: avg_steps
887 IF(.NOT.
ASSOCIATED(current))
THEN 891 IF(.NOT.
ASSOCIATED(current%VAR))
THEN 892 CALL fatal_error(
"ALLOCATE_ASSOCIATED_VARS: FOUND NULL VAR POINTER IN THE LIST")
898 IF(
Associated(var%SCL_INT)) var%SCL_INT=var%SCL_INT/avg_steps
899 IF(
Associated(var%VEC_INT)) var%VEC_INT=var%VEC_INT/avg_steps
900 IF(
Associated(var%ARR_INT)) var%ARR_INT=var%ARR_INT/avg_steps
901 IF(
Associated(var%CUB_INT)) var%CUB_INT=var%CUB_INT/avg_steps
903 IF(
Associated(var%SCL_FLT)) var%SCL_FLT=var%SCL_FLT/avg_steps
904 IF(
Associated(var%VEC_FLT)) var%VEC_FLT=var%VEC_FLT/avg_steps
905 IF(
Associated(var%ARR_FLT)) var%ARR_FLT=var%ARR_FLT/avg_steps
906 IF(
Associated(var%CUB_FLT)) var%CUB_FLT=var%CUB_FLT/avg_steps
908 IF(
Associated(var%SCL_DBL)) var%SCL_DBL=var%SCL_DBL/avg_steps
909 IF(
Associated(var%VEC_DBL)) var%VEC_DBL=var%VEC_DBL/avg_steps
910 IF(
Associated(var%ARR_DBL)) var%ARR_DBL=var%ARR_DBL/avg_steps
911 IF(
Associated(var%CUB_DBL)) var%CUB_DBL=var%CUB_DBL/avg_steps
914 current => current%NEXT
921 TYPE(ncvarp),
POINTER :: CURRENT
922 TYPE(ncvar),
POINTER :: VAR
923 REAL(DP) :: avg_steps
930 IF(.NOT.
ASSOCIATED(current))
THEN 934 IF(.NOT.
ASSOCIATED(current%VAR))
THEN 935 CALL fatal_error(
"ALLOCATE_ASSOCIATED_VARS: FOUND NULL VAR POINTER IN THE LIST")
941 IF(
Associated(var%SCL_INT)) var%SCL_INT=0
942 IF(
Associated(var%VEC_INT)) var%VEC_INT=0
943 IF(
Associated(var%ARR_INT)) var%ARR_INT=0
944 IF(
Associated(var%CUB_INT)) var%CUB_INT=0
946 IF(
Associated(var%SCL_FLT)) var%SCL_FLT=0.0_spa
947 IF(
Associated(var%VEC_FLT)) var%VEC_FLT=0.0_spa
948 IF(
Associated(var%ARR_FLT)) var%ARR_FLT=0.0_spa
949 IF(
Associated(var%CUB_FLT)) var%CUB_FLT=0.0_spa
951 IF(
Associated(var%SCL_DBL)) var%SCL_DBL=0.0_dp
952 IF(
Associated(var%VEC_DBL)) var%VEC_DBL=0.0_dp
953 IF(
Associated(var%ARR_DBL)) var%ARR_DBL=0.0_dp
954 IF(
Associated(var%CUB_DBL)) var%CUB_DBL=0.0_dp
957 current => current%NEXT
965 TYPE(grid),
SAVE :: MYGRID
966 TYPE(ncfile),
POINTER ::NC_RST2
972 write(ipt,*)
"!--------------------------------------------------" 973 write(ipt,*)
"! SETTING UP RESTART FILE OUTPUT..." 1024 IF(wetting_drying_on)
THEN 1037 IF (startup_type /=
"crashrestart")
THEN 1039 nc_rst%FTIME%NEXT_STKCNT = 1
1041 nc_rst%CONNECTED = .true.
1051 TYPE(ncfile),
POINTER ::NCF
1052 TYPE(ncftime),
POINTER :: FTM
1062 IF (ftm%MAX_STKCNT .NE. 0 .AND. &
1063 & ftm%NEXT_STKCNT > ftm%MAX_STKCNT)
THEN 1067 ncf%CONNECTED=.false.
1086 ftm%PREV_IO = inttime
1087 ftm%NEXT_IO = ftm%NEXT_IO + ftm%INTERVAL
1090 ftm%PREV_STKCNT = ftm%NEXT_STKCNT
1091 ftm%NEXT_STKCNT = ftm%NEXT_STKCNT + 1
1108 INTEGER :: SBUF, SOURCE
1109 INTEGER :: RBUF, DEST
1134 IF(obc_longshore_flow_on)
THEN 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
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")
1251 allocate(
zz1(ngl,kb),stat=status)
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" )
1319 att =>
nc_make_att(name=
'CoordinateProjection',values=projection_reference )
1320 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1322 IF(trim(prg_name) ==
"FVCOM")
THEN 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)
1344 IF (icing_model)
THEN 1346 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1351 IF(
ASSOCIATED(att)) ncf => add(ncf,att)
1355 IF(obc_longshore_flow_on)
THEN 1356 att=>
nc_make_att(name=
'Special_Physical_processes',&
1357 & values=
'long shore flow adjustment for thermal wind and win& 1369 att =>
nc_make_att(name=
'long_name',values=
'number of processors')
1379 att =>
nc_make_att(name=
'long_name',values=
'nodal x-coordinate')
1389 att =>
nc_make_att(name=
'long_name',values=
'nodal y-coordinate')
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')
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 1429 att =>
nc_make_att(name=
'long_name',values=
'zonal x-coordinate')
1437 IF (
ALLOCATED(
ymc))
THEN 1441 att =>
nc_make_att(name=
'long_name',values=
'zonal y-coordinate')
1450 IF (
ALLOCATED(
lonc))
THEN 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 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 1488 att =>
nc_make_att(name=
'long_name',values=
'Sigma Layers')
1491 att =>
nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
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 1514 att =>
nc_make_att(name=
'long_name',values=
'Sigma Levels')
1517 att =>
nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
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 1544 att =>
nc_make_att(name=
'long_name',values=
'Sigma Layers')
1547 att =>
nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
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 1570 att =>
nc_make_att(name=
'long_name',values=
'Sigma Levels')
1573 att =>
nc_make_att(name=
'standard_name',values=
'ocean_sigma/general_coordinate')
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 1595 att =>
nc_make_att(name=
'long_name',values=
'Bathymetry')
1598 att =>
nc_make_att(name=
'standard_name',values=
'sea_floor_depth_below_geoid')
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 1626 att =>
nc_make_att(name=
'long_name',values=
'Bathymetry')
1629 att =>
nc_make_att(name=
'standard_name',values=
'sea_floor_depth_below_geoid')
1638 att =>
nc_make_att(name=
'grid',values=
'Bathymetry_Mesh')
1654 att =>
nc_make_att(name=
'long_name',values=
'nodes surrounding element')
1668 INTEGER :: status, i
1669 LOGICAL,
SAVE :: ioproc_allocated = .false.
1670 TYPE(ncfile),
POINTER :: ncf
1671 TYPE(ncvar),
POINTER :: var
1672 TYPE(ncatt),
POINTER :: att
1680 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 1682 ioproc_allocated = .true.
1684 allocate(
el(mgl),stat=status)
1685 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:EL")
1695 IF (
ALLOCATED(
el))
THEN 1700 att =>
nc_make_att(name=
'long_name',values=
'Water Surface Elevation')
1709 att =>
nc_make_att(name=
'standard_name',values=
'sea_surface_height_above_geoid')
1712 att =>
nc_make_att(name=
'grid',values=
'Bathymetry_Mesh')
1716 att =>
nc_make_att(name=
'coordinates',values=
"time lat lon")
1739 LOGICAL,
SAVE :: ioproc_allocated = .false.
1740 TYPE(ncfile),
POINTER :: ncf
1741 TYPE(ncvar),
POINTER :: var
1742 TYPE(ncatt),
POINTER :: att
1744 REAL(
sp),
POINTER :: vec_flt(:),arr_flt(:)
1745 INTEGER,
POINTER :: vec_int(:),arr_int(:)
1747 character(len=100) :: timestamp, temp, netcdf_convention
1749 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START GRID_METRICS_FILE_OBJECT" 1758 IF(.NOT.
ASSOCIATED(g%NBE))
THEN 1759 allocate(g%NBE(g%NGL,3),stat=status)
1760 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:G%NBE")
1764 &(
"GRID DATA NBE HAS ALREADY BEEN ASSOICATED ON THE IOPROC",&
1765 &
"AND THE DIMENSION DOES NOT MATCH THE CURRENT FILE!",&
1766 &
"GRID NAME:"//trim(g%NAME))
1769 IF(.NOT.
ASSOCIATED(g%NBSN))
THEN 1770 allocate(g%NBSN(g%MGL,
dim_maxnode%DIM),stat=status)
1771 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:G%NBSN")
1775 &(
"GRID DATA NBSN HAS ALREADY BEEN ASSOICATED ON THE IOPROC",&
1776 &
"AND THE DIMENSION DOES NOT MATCH THE CURRENT FILE!",&
1777 &
"GRID NAME:"//trim(g%NAME))
1780 IF(.NOT.
ASSOCIATED(g%NBVE))
THEN 1781 allocate(g%NBVE(g%MGL,
dim_maxelem%DIM),stat=status)
1782 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:G%NBVE")
1786 &(
"GRID DATA NBVE HAS ALREADY BEEN ASSOICATED ON THE IOPROC",&
1787 &
"AND THE DIMENSION DOES NOT MATCH THE CURRENT FILE!",&
1788 &
"GRID NAME:"//trim(g%NAME))
1795 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 1799 ioproc_allocated = .true.
1801 allocate(
ntsn(mgl),stat=status)
1802 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:NTSN")
1805 allocate(
ntve(mgl),stat=status)
1806 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:NTVE")
1809 allocate(
a1u(ngl,4),stat=status)
1810 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:A1U")
1813 allocate(
a2u(ngl,4),stat=status)
1814 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:A2U")
1817 allocate(
awx(ngl,3),stat=status)
1818 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:AWX")
1821 allocate(
awy(ngl,3),stat=status)
1822 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:AWY")
1825 allocate(
aw0(ngl,3),stat=status)
1826 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:AW0")
1829 allocate(
art2(mgl),stat=status)
1830 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ART2")
1833 allocate(
art1(mgl),stat=status)
1834 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ART1")
1849 att =>
nc_make_att(name=
'long_name',values=
'elements surrounding each element')
1858 att =>
nc_make_att(name=
'long_name',values=
'#nodes surrounding each node')
1867 att =>
nc_make_att(name=
'long_name',values=
'nodes surrounding each node')
1876 att =>
nc_make_att(name=
'long_name',values=
'#elems surrounding each node')
1885 att =>
nc_make_att(name=
'long_name',values=
'elems surrounding each node')
1939 att =>
nc_make_att(name=
'long_name',values=
'Area of elements around a node')
1948 att =>
nc_make_att(name=
'long_name',values=
'Area of Node-Base Con& 1965 TYPE(ncfile),
POINTER :: ncf
1966 TYPE(ncvar),
POINTER :: var
1967 TYPE(ncatt),
POINTER :: att
1968 INTEGER,
OPTIONAL :: size
1969 CHARACTER(LEN=80),
pointer :: data_vec(:)
1972 IF(
PRESENT(size))
THEN 1973 ALLOCATE(data_vec(size))
1975 ALLOCATE(data_vec(1))
1986 var%SCL_CHR => var%VEC_CHR(1)
1988 IF(use_real_world_time)
THEN 1989 att =>
nc_make_att(name=
'time_zone',values=trim(timezone))
2006 LOGICAL,
SAVE :: ioproc_allocated = .false.
2007 TYPE(ncfile),
POINTER :: ncf
2008 TYPE(ncvar),
POINTER :: var
2009 TYPE(ncatt),
POINTER :: att
2011 character(len=100) :: timestamp, temp, netcdf_convention
2018 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2020 ioproc_allocated = .true.
2022 allocate(
u(ngl,kb),stat=status)
2023 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:U")
2026 allocate(
v(ngl,kb),stat=status)
2027 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:V")
2030 allocate(
taubm(ngl),stat=status)
2031 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WUBOT")
2045 att =>
nc_make_att(name=
'long_name',values=
'Eastward Water Velocity')
2048 att =>
nc_make_att(name=
'standard_name',values=
'eastward_sea_water_velocity')
2051 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2054 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2060 att =>
nc_make_att(name=
'coordinates',values=
'time siglay latc lonc')
2063 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2077 att =>
nc_make_att(name=
'long_name',values=
'Northward Water Velocity')
2080 att =>
nc_make_att(name=
'standard_name',values=
'Northward_sea_water_velocity')
2083 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2086 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2092 att =>
nc_make_att(name=
'coordinates',values=
'time siglay latc lonc')
2095 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2106 att =>
nc_make_att(name=
'long_name',values=
'bed stress magnitude from currents')
2109 att =>
nc_make_att(name=
'note1',values=
'this stress is bottom boundary condtion on velocity field')
2112 att =>
nc_make_att(name=
'note2',values=
'dimensions are stress/rho')
2115 att =>
nc_make_att(name=
'units',values=
'm^2 s^-2')
2118 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2124 att =>
nc_make_att(name=
'coordinates',values=
'time latc lonc')
2127 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2144 LOGICAL,
SAVE :: ioproc_allocated = .false.
2145 TYPE(ncfile),
POINTER :: ncf
2146 TYPE(ncvar),
POINTER :: var
2147 TYPE(ncatt),
POINTER :: att
2154 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2156 ioproc_allocated = .true.
2158 allocate(
vort(mgl),stat=status)
2159 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:VORT")
2173 att =>
nc_make_att(name=
'long_name',values=
'Ertels 2d potential vorticity')
2179 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2197 LOGICAL,
SAVE :: ioproc_allocated = .false.
2198 TYPE(ncfile),
POINTER :: ncf
2199 TYPE(ncvar),
POINTER :: var
2200 TYPE(ncatt),
POINTER :: att
2202 character(len=100) :: timestamp, temp, netcdf_convention
2204 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START AVERAGE_VEL_FILE_OBJECT" 2209 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2211 ioproc_allocated = .true.
2213 allocate(
ua(ngl),stat=status)
2214 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:UA")
2217 allocate(
va(ngl),stat=status)
2218 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:VA")
2232 att =>
nc_make_att(name=
'long_name',values=
'Vertically Averaged x-velocity')
2235 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2238 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2251 att =>
nc_make_att(name=
'long_name',values=
'Vertically Averaged y-velocity')
2254 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2257 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2275 LOGICAL,
SAVE :: ioproc_allocated = .false.
2276 TYPE(ncfile),
POINTER :: ncf
2277 TYPE(ncvar),
POINTER :: var
2278 TYPE(ncatt),
POINTER :: att
2280 character(len=100) :: timestamp, temp, netcdf_convention
2282 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START VERTICAL_VEL_FILE_OBJECT" 2287 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2289 ioproc_allocated = .true.
2291 allocate(
ww(ngl,kb),stat=status)
2292 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WW")
2295 allocate(
wts(mgl,kb),stat=status)
2296 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WTS")
2310 att =>
nc_make_att(name=
'long_name',values=
'Vertical Sigma Coordinate Velocity')
2316 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2330 att =>
nc_make_att(name=
'long_name',values=
'Upward Water Velocity')
2333 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2336 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2352 LOGICAL,
SAVE :: ioproc_allocated = .false.
2353 TYPE(ncfile),
POINTER :: ncf
2354 TYPE(ncvar),
POINTER :: var
2355 TYPE(ncatt),
POINTER :: att
2357 character(len=100) :: timestamp, temp, netcdf_convention
2364 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2366 ioproc_allocated = .true.
2368 allocate(
t1(mgl,kb),stat=status)
2369 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:T1")
2372 allocate(
s1(mgl,kb),stat=status)
2373 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:S1")
2387 att =>
nc_make_att(name=
'long_name',values=
'temperature')
2390 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_temperature')
2393 att =>
nc_make_att(name=
'units',values=
'degrees_C')
2396 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2400 att =>
nc_make_att(name=
'coordinates',values=
'time siglay lat lon')
2406 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2419 att =>
nc_make_att(name=
'long_name',values=
'salinity')
2422 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_salinity')
2429 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2433 att =>
nc_make_att(name=
'coordinates',values=
'time siglay lat lon')
2439 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2456 LOGICAL,
SAVE :: ioproc_allocated = .false.
2457 TYPE(ncfile),
POINTER :: ncf
2458 TYPE(ncvar),
POINTER :: var
2459 TYPE(ncatt),
POINTER :: att
2461 character(len=100) :: timestamp, temp, netcdf_convention
2468 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2470 ioproc_allocated = .true.
2472 allocate(
rho1(mgl,kb),stat=status)
2473 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:RHO1")
2476 allocate(
rmean1(mgl,kb),stat=status)
2477 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:RMEAN1")
2491 att =>
nc_make_att(name=
'long_name',values=
'density')
2494 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_density')
2500 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2516 att =>
nc_make_att(name=
'long_name',values=
'mean density')
2519 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_density')
2525 att =>
nc_make_att(name=
'grid',values=
'SigmaLayer_Mesh')
2542 LOGICAL,
SAVE :: ioproc_allocated = .false.
2543 TYPE(ncfile),
POINTER :: ncf
2544 TYPE(ncvar),
POINTER :: var
2545 TYPE(ncatt),
POINTER :: att
2546 TYPE(ncdim),
POINTER :: dim1
2547 TYPE(ncdim),
POINTER :: dim2
2548 TYPE(ncdim),
POINTER :: dim3
2550 character(len=100) :: timestamp, temp, netcdf_convention
2557 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2559 ioproc_allocated = .true.
2561 allocate(
viscofm(ngl,kb),stat=status)
2562 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:VISCOFM")
2565 allocate(
viscofh(mgl,kb),stat=status)
2566 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:VISCOFH")
2569 allocate(
km(mgl,kb),stat=status)
2570 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:KM")
2573 allocate(
kh(mgl,kb),stat=status)
2574 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:KH")
2577 allocate(
kq(mgl,kb),stat=status)
2578 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:KQ")
2581 allocate(
q2(mgl,kb),stat=status)
2582 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Q2")
2585 allocate(
q2l(mgl,kb),stat=status)
2586 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Q2L")
2589 allocate(
l(mgl,kb),stat=status)
2590 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:L")
2605 att =>
nc_make_att(name=
'long_name',values=
'Horizontal Turbulent Eddy Viscosity For Momentum')
2611 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2626 att =>
nc_make_att(name=
'long_name',values=
'Horizontal Turbulent Eddy Viscosity For Scalars')
2632 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2647 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Eddy Viscosity For Momentum')
2653 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2668 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Eddy Viscosity For Scalars')
2674 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2689 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Eddy Viscosity For Q2/Q2L')
2695 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2710 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Kinetic Energy')
2716 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2731 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Kinetic Ene& 2732 &rgy X Turbulent Macroscale')
2738 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2753 att =>
nc_make_att(name=
'long_name',values=
'Turbulent Macroscale')
2759 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2779 LOGICAL,
SAVE :: ioproc_allocated = .false.
2780 TYPE(ncfile),
POINTER :: ncf
2781 TYPE(ncvar),
POINTER :: var
2782 TYPE(ncatt),
POINTER :: att
2784 character(len=100) :: timestamp, temp, netcdf_convention
2786 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START SURFACE_HEATING_FILE_OBJECT" 2791 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2793 ioproc_allocated = .true.
2796 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:SWRAD")
2800 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WTSURF")
2814 att =>
nc_make_att(name=
'long_name',values=
'Short Wave Radiation')
2820 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2824 att =>
nc_make_att(name=
'coordinates',values=
'time lat lon')
2830 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2842 att =>
nc_make_att(name=
'long_name',values=
'Surface Net Heat Flux')
2848 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2852 att =>
nc_make_att(name=
'coordinates',values=
'time lat lon')
2858 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2866 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"END SURFACE_HEATING_FILE_OBJECT" 2874 LOGICAL,
SAVE :: ioproc_allocated = .false.
2875 TYPE(ncfile),
POINTER :: ncf
2876 TYPE(ncvar),
POINTER :: var
2877 TYPE(ncatt),
POINTER :: att
2879 character(len=100) :: timestamp, temp, netcdf_convention
2881 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START WIND_VELOCITY_FILE_OBJECT" 2886 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2888 ioproc_allocated = .true.
2890 allocate(
uuwind(ngl),stat=status)
2891 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:UUWIND")
2894 allocate(
vvwind(ngl),stat=status)
2895 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:VVWIND")
2909 att =>
nc_make_att(name=
'long_name',values=
'Eastward Wind Velocity')
2912 att =>
nc_make_att(name=
'standard_name',values=
'eastward wind')
2915 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2918 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2921 att =>
nc_make_att(name=
'coordinates',values=
'time latc lonc')
2927 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2939 att =>
nc_make_att(name=
'long_name',values=
'Northward Wind Velocity')
2942 att =>
nc_make_att(name=
'standard_name',values=
'northward wind')
2945 att =>
nc_make_att(name=
'units',values=
'meters s-1')
2948 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
2951 att =>
nc_make_att(name=
'coordinates',values=
'time latc lonc')
2957 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
2966 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"END WIND_VELOCITY_FILE_OBJECT" 2975 LOGICAL,
SAVE :: ioproc_allocated = .false.
2976 TYPE(ncfile),
POINTER :: ncf
2977 TYPE(ncvar),
POINTER :: var
2978 TYPE(ncatt),
POINTER :: att
2980 character(len=100) :: timestamp, temp, netcdf_convention
2982 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START WIND_STRESS_FILE_OBJECT" 2987 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 2989 ioproc_allocated = .true.
2992 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WUSURF")
2996 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:WVSURF")
3010 att =>
nc_make_att(name=
'long_name',values=
'Eastward Wind Stress')
3013 att =>
nc_make_att(name=
'standard_name',values=
'Wind Stress')
3019 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3031 att =>
nc_make_att(name=
'long_name',values=
'Northward Wind Stress')
3034 att =>
nc_make_att(name=
'standard_name',values=
'Wind Stress')
3040 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3058 LOGICAL,
SAVE :: ioproc_allocated = .false.
3059 TYPE(ncfile),
POINTER :: ncf
3060 TYPE(ncvar),
POINTER :: var
3061 TYPE(ncatt),
POINTER :: att
3062 TYPE(ncdim),
POINTER :: dim1
3063 TYPE(ncdim),
POINTER :: dim2
3064 TYPE(ncdim),
POINTER :: dim3
3066 character(len=100) :: timestamp, temp, netcdf_convention
3068 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START PRECIPITATION_FILE_OBJECT" 3073 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 3075 ioproc_allocated = .true.
3077 allocate(
qprec(mgl),stat=status)
3078 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:QPREC2")
3081 allocate(
qevap(mgl),stat=status)
3082 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:QEVAP2")
3096 att =>
nc_make_att(name=
'long_name',values=
'Precipitation')
3099 att =>
nc_make_att(name=
'description',values=
'Precipitation, ocean & 3100 &lose water is negative')
3106 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3121 att =>
nc_make_att(name=
'long_name',values=
'Evaporation')
3124 att =>
nc_make_att(name=
'description',values=
'Evaporation, ocean & 3125 &lose water is negative')
3131 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3143 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"END PRECIPITATION_FILE_OBJECT" 3155 LOGICAL,
SAVE :: ioproc_allocated = .false.
3156 TYPE(ncfile),
POINTER :: ncf
3157 TYPE(ncvar),
POINTER :: var
3158 TYPE(ncatt),
POINTER :: att
3160 character(len=100) :: timestamp, temp, netcdf_convention
3162 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START RESTART_EXTRAS_FILE_OBJECT" 3167 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 3169 ioproc_allocated = .true.
3171 allocate(
cor(ngl),stat=status)
3172 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:COR")
3176 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:CC_SPONGE")
3179 allocate(
et(mgl),stat=status)
3180 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:EL")
3188 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:I_OBC_N_OUTPUT")
3193 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:type_obc")
3198 IF(obc_longshore_flow_on)
THEN 3200 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:IBCLSF_OUTPUT")
3203 allocate(
rbc_geo(nobclsf_gl),stat=status)
3204 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:RBC_GEO")
3207 allocate(
rbc_wdf(nobclsf_gl),stat=status)
3208 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:RBC_WDF")
3213 allocate(
tmean1(mgl,kb),stat=status)
3214 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Tmean1")
3217 allocate(
smean1(mgl,kb),stat=status)
3218 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:Smean1")
3238 att =>
nc_make_att(name=
'long_name',values=
'Coriolis Parameter')
3244 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3256 att =>
nc_make_att(name=
'long_name',values=
'Sponge Layer Parameter')
3262 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3274 att =>
nc_make_att(name=
'long_name',values=
'Water Surface Elevation At Last Timestep')
3283 att =>
nc_make_att(name=
'standard_name',values=
'sea_surface_elevation')
3298 att =>
nc_make_att(name=
'long_name',values=
'mean initial temperature')
3301 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_temperature')
3304 att =>
nc_make_att(name=
'units',values=
'degrees_C')
3307 att =>
nc_make_att(name=
'grid',values=
'SigmaLayer_Mesh')
3319 att =>
nc_make_att(name=
'long_name',values=
'mean initial salinity')
3322 att =>
nc_make_att(name=
'standard_name',values=
'sea_water_temperature')
3328 att =>
nc_make_att(name=
'grid',values=
'SigmaLayer_Mesh')
3341 att =>
nc_make_att(name=
'long_name',values=
'Open Boundary Node Number')
3353 att =>
nc_make_att(name=
'long_name',values=
'Open Boundary Type')
3362 IF(obc_longshore_flow_on)
THEN 3367 att =>
nc_make_att(name=
'long_name',values=
'Longshore Flow Node Number')
3379 att =>
nc_make_att(name=
'long_name',values=
'Wind Driven Flow Adjustment Scaling')
3382 att =>
nc_make_att(name=
'valid_range',values=
'[0 1]')
3393 att =>
nc_make_att(name=
'long_name',values=
'Thermal Wind Flow Adjustment Scaling')
3396 att =>
nc_make_att(name=
'valid_range',values=
'[0 1]')
3414 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"END RESTART_EXTRAS_FILE_OBJECT" 3424 LOGICAL,
SAVE :: ioproc_allocated = .false.
3425 TYPE(ncfile),
POINTER :: ncf
3426 TYPE(ncvar),
POINTER :: var
3427 TYPE(ncatt),
POINTER :: att
3429 character(len=100) :: timestamp, temp, netcdf_convention
3436 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 3438 ioproc_allocated = .true.
3440 allocate(
iswetn(mgl),stat=status)
3441 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ISWETN")
3444 allocate(
iswetc(ngl),stat=status)
3445 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ISWETC")
3448 allocate(
iswetnt(mgl),stat=status)
3449 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ISWETNT")
3452 allocate(
iswetct(ngl),stat=status)
3453 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ISWETCT")
3456 allocate(
iswetce(ngl),stat=status)
3457 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ISWETCE")
3472 att =>
nc_make_att(name=
'long_name',values=
'Wet_Nodes')
3475 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3481 att =>
nc_make_att(name=
'coordinates',values=
'time lat lon')
3484 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
3496 att =>
nc_make_att(name=
'long_name',values=
'Wet_Cells')
3499 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3505 att =>
nc_make_att(name=
'coordinates',values=
'time latc lonc')
3508 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
3520 att =>
nc_make_att(name=
'long_name',values=
'Wet_Nodes_At_Previous_Internal_Step')
3523 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3529 att =>
nc_make_att(name=
'coordinates',values=
'time lat lon')
3532 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
3544 att =>
nc_make_att(name=
'long_name',values=
'Wet_Cells_At_Previous_Internal_Step')
3547 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3553 att =>
nc_make_att(name=
'coordinates',values=
'time latc lonc')
3556 att =>
nc_make_att(name=
'mesh',values=
'fvcom_mesh')
3568 att =>
nc_make_att(name=
'long_name',values=
'Wet_Cells_At_Previous_External_Step')
3571 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3590 LOGICAL,
SAVE :: ioproc_allocated = .false.
3591 TYPE(ncfile),
POINTER :: ncf
3592 TYPE(ncvar),
POINTER :: var
3593 TYPE(ncatt),
POINTER :: att
3600 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 3602 ioproc_allocated = .true.
3605 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ICING_0kts")
3609 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ICING_10kts")
3613 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ICING_wndY")
3617 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ICING_wndX")
3621 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:ICING_satmp")
3635 att =>
nc_make_att(name=
'long_name',values=
'Icing Hazard@0knots')
3638 att =>
nc_make_att(name=
'units',values=
'm C s^-1')
3641 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3653 att =>
nc_make_att(name=
'long_name',values=
'Icing Hazard@10knots')
3656 att =>
nc_make_att(name=
'units',values=
'm C s^-1')
3659 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3671 att =>
nc_make_att(name=
'long_name',values=
'Icing Wind x-direction')
3677 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3689 att =>
nc_make_att(name=
'long_name',values=
'Icing Wind y-direction')
3695 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3707 att =>
nc_make_att(name=
'long_name',values=
'Icing Surface Air Temperature')
3710 att =>
nc_make_att(name=
'units',values=
'degrees_C')
3713 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3731 LOGICAL,
SAVE :: ioproc_allocated = .false.
3732 TYPE(ncfile),
POINTER :: ncf
3733 TYPE(ncvar),
POINTER :: var
3734 TYPE(ncatt),
POINTER :: att
3736 IF(
dbg_set(
dbg_sbr))
WRITE(ipt,*)
"START: GROUNDWATER_FILE_OBJECT" 3741 IF(ioproc .AND. .NOT. ioproc_allocated)
THEN 3743 ioproc_allocated = .true.
3745 allocate(
bfwdis(mgl),stat=status)
3746 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:BFWDIS")
3749 IF(groundwater_temp_on)
THEN 3750 allocate(
bfwtmp(mgl),stat=status)
3751 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:BFWTMP")
3755 IF(groundwater_salt_on)
THEN 3756 allocate(
bfwslt(mgl),stat=status)
3757 IF (status /=0 )
CALL fatal_error(
"COULD NOT ALLOCATE MEMORY ON IO PROC FOR OUTPUT DATA:BFWSLT")
3773 att =>
nc_make_att(name=
'long_name',values=
'groundwater volume flux')
3779 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3788 IF(groundwater_temp_on)
THEN 3792 att =>
nc_make_att(name=
'long_name',values=
'groundwater inflow temperature')
3795 att =>
nc_make_att(name=
'units',values=
'degrees_C')
3798 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3808 IF(groundwater_salt_on)
THEN 3812 att =>
nc_make_att(name=
'long_name',values=
'groundwater inflow salinity')
3818 att =>
nc_make_att(name=
'grid',values=
'fvcom_grid')
3846 TYPE(ncfile),
POINTER :: ncf
3847 TYPE(ncvar),
POINTER :: var
3848 TYPE(ncatt),
POINTER :: att
3863 &(use_mjd=use_real_world_time, &
3871 &(use_mjd=use_real_world_time, &
3878 &(use_mjd=use_real_world_time, &
3883 IF (use_real_world_time)
THEN 3914 TYPE(
time),
INTENT(IN) :: NOW
3915 TYPE(ncvar),
POINTER :: VAR1,VAR2
3916 TYPE(ncfile),
POINTER :: NCF
3925 &(
"UPDATE_IODATA: THE FILE OBJECT IS NOT ASSOCIATED!")
3927 var1 => find_var(ncf,
"time",found)
3930 var1 => find_var(ncf,
"Itime",found)
3932 var2 => find_var(ncf,
"Itime2",found)
3933 IF (.NOT.found)
THEN 3935 & (
"FOUND ONLY PART OF INTEGER TIME VARIABLE IN OUT PUT FILE!")
3941 var1 => find_var(ncf,
"Times",found)
3946 var1 => find_var(ncf,
"iint",found)
3947 IF(found) var1%scl_int = iint
3949 var1 => find_var(ncf,
"file_date",found)
3964 TYPE(ncfile),
POINTER :: NCF
3965 TYPE(grid),
POINTER :: GRIDS(:)
3966 CHARACTER(LEN=*) :: SUB_FILES
3967 CHARACTER(LEN=80),
ALLOCATABLE :: FNAMES(:)
3968 CHARACTER(LEN=80) :: FILE,PATH,EXT
3969 INTEGER :: NUMF,I, STATUS
3971 INTEGER,
POINTER:: NID(:),EID(:)
3977 IF(serial .and. sub_files /=
"FVCOM")
THEN 3979 &(
"SETUP_SUBDOMAIN: YOU CAN NOT USE SUBDOMAIN OUTPUT DURING A SINGLE PROCESSOR MODLE RUN!")
3981 ELSEIF(len_trim(sub_files) == 0 )
THEN 3982 CALL fatal_error(
"THE SUBDOMAIN FILE LIST PASSED TO SETUP_SUBDOMAINS IS EMPTY",&
3983 &
"PLEASE CHECK YOUR NAME LIST FILE FOR THE NC_SUBDOMAIN_FILES",&
3984 &
"AND NCAV_SUBDOMAIN_FILES ENTRIES!")
3994 if(
dbg_set(
dbg_log))
write(ipt,*)
"! NUMBER OF DOMAINS TO OUTPUT:",numf
3995 ALLOCATE(grids(numf),stat=status)
3996 IF(status /=0)
CALL fatal_error(
"NCDIO: COULD NOT ALLOCATE SUBDOMAIN GRIDS!")
3999 if(
dbg_set(
dbg_log))
write(ipt,*)
"! SETTING FVCOM DOMAIN OUTPUT" 4018 INTEGER :: I,J,STATUS
4021 &
write(ipt,*)
"START SET_FVCOM_GRID" 4027 g%UNITS =
"Not used yet" 4051 IF(.NOT. ioproc)
THEN 4072 ALLOCATE(g%NV(g%NT,3), stat=status)
4073 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NV")
4076 g%NV(i,:) = g%NGID_X(
nv(i,1:3))
4080 ALLOCATE(g%NBE(0:n,3), stat=status)
4081 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBE")
4084 g%NBE(i,:) = g%EGID_X(
nbe(i,:))
4088 ALLOCATE(g%NBSN(0:m,mx_nbr_elem+3), stat=status)
4089 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBSN")
4092 ALLOCATE(g%NBVE(0:m,mx_nbr_elem+1), stat=status)
4093 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBVE")
4097 g%NBVE(i,:) = g%EGID_X(
nbve(i,:))
4099 g%NBSN(i,:) = g%NGID_X(
nbsn(i,:))
4116 &
write(ipt,*)
"END SET_FVCOM_GRID" 4128 INTEGER :: I,J,STATUS
4129 INTEGER,
POINTER :: INV_E(:),INV_N(:)
4132 &
write(ipt,*)
"START SET_SUBDOMAIN_GRID" 4135 IF(.NOT. ioproc)
THEN 4138 ALLOCATE(inv_n(0:mt));inv_n=0
4140 inv_n(g%NLID_X(i))=i
4144 ALLOCATE(inv_e(0:nt));inv_e=0
4146 inv_e(g%ELID_X(i))=i
4151 ALLOCATE(g%NV(g%NT,3), stat=status)
4152 IF(status /=0)
CALL fatal_error(
"SET_SUBDOMAIN_GRID: COULD NOT ALLOCATE G%NV")
4158 g%NV(i,:) = g%NGID_X(inv_n(
nv(g%ELID_X(i),1:3)))
4166 ALLOCATE(g%NBE(0:g%N,3), stat=status)
4167 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBE")
4170 g%NBE(i,:) = g%EGID_X(inv_e(
nbe(g%ELID(i),:)))
4175 ALLOCATE(g%NBSN(0:g%M,mx_nbr_elem+3), stat=status)
4176 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBSN")
4179 ALLOCATE(g%NBVE(0:g%M,mx_nbr_elem+1), stat=status)
4180 IF(status /=0)
CALL fatal_error(
"FVCOM2GRID: COULD NOT ALLOCATE G%NBVE")
4184 g%NBVE(i,:) = g%EGID_X(inv_e(
nbve(g%NLID(i),:)))
4186 g%NBSN(i,:) = g%NGID_X(inv_n(
nbsn(g%NLID(i),:)))
4198 &
write(ipt,*)
"END SET_SUBDOMAIN_GRID" 4210 LOGICAL,
INTENT(INOUT) :: TF
4211 INTEGER,
INTENT(OUT) :: COMMGRP
4212 INTEGER :: total_group
4213 INTEGER :: fvcom_group
4214 INTEGER :: SBUF,RBUF, trueval, i
4215 INTEGER,
allocatable :: fvcom_subset(:)
4220 &
write(ipt,*)
"STARTING SETUP_MPI_IO_MODE" 4223 if (nprocs .LE. 3)
THEN 4225 &
CALL warning(
"FVCOM CAN NOT USE MPI IO MODE WHEN RUN & 4226 &ON LESS THAN 4 PROCESSORS",
"CONTINUING WITHOUT THIS OPTION!")
4242 &
write(ipt,*)
"! MPI IO MODE IS NOT ACTIVE" 4247 &
write(ipt,*)
"END SETUP_MPI_IO_MODE" 4255 CALL fatal_error(
"THIS IS A DUMMY ROUTINE:",
"MPI_IO_SYNCHRONIZ& 4256 &E only exists when FVCOM is compiled with multiprocessor",&
4257 &
"USE_MPI_IO_MODE should not be .true.")
integer, dimension(:), allocatable, target ntsn
subroutine define_dimensions(G)
real(sp), dimension(:,:), allocatable, target q2
real(sp), dimension(:), allocatable, target partition
real(sp), dimension(:,:), allocatable, target km
real(sp), dimension(:), allocatable, target va
real(sp), dimension(:), allocatable, target cor
real(sp), dimension(:), allocatable, target qprec
integer, dimension(:), allocatable iswetce
type(ncdim), pointer dim_nobc
subroutine get_timestamp(TS)
real(sp), dimension(:), allocatable, target h
character(len=char_max_attlen), dimension(:), allocatable, public precip_forcing_comments
subroutine set_subdomain_grid(G)
real(sp), dimension(:,:), allocatable, target viscofh
type(ncdim), pointer dim_grid
subroutine mpi_io_synchronize(CODE)
type(ncfile) function, pointer wet_dry_file_object()
real(sp), dimension(:), allocatable, target el
real(sp), dimension(:,:), allocatable, target v
integer, dimension(:), allocatable type_obc
logical function dbg_set(vrb)
real(sp), dimension(:,:), allocatable, target rho1
subroutine update_iodata(NCF, NOW)
real(sp), dimension(:), allocatable, target wtsurf_watts
real(sp), dimension(:), allocatable, target art1
real(sp), dimension(:,:), allocatable, target t1
real(sp), dimension(:), allocatable, target ymc
type(time) function get_now()
type(ncfile) function, pointer time_file_object()
real(sp), dimension(:), allocatable, target latc
real(sp), dimension(:), allocatable, target icing_0kts
subroutine set_fvcom_grid(G)
real(sp), dimension(:,:), allocatable, target a1u
type(ncfile), pointer nc_avg_sum
subroutine dump_data(NCF)
integer, dimension(:), allocatable iswetct
real(sp), dimension(:,:), allocatable, target awx
real(sp), dimension(:,:), allocatable, target ww
real(sp), dimension(:), allocatable, target wusurf_save
real(sp), dimension(:,:), allocatable, target q2l
real(sp), dimension(:), allocatable, target art2
type(ncfile) function, pointer grid_metrics_file_object(G)
real(sp), dimension(:,:), allocatable, target viscofm
real(sp), dimension(:,:), allocatable, target tmean1
real(sp), dimension(:,:), allocatable, target u
real(sp), dimension(:,:), allocatable, target s1
real(sp), dimension(:,:), allocatable, target aw0
real(sp), dimension(:), allocatable, target icing_wndy
type(ncfile) function, pointer salt_temp_file_object()
real(sp), dimension(:,:), allocatable, target smean1
real(sp), dimension(:), allocatable, target et
real(sp), dimension(:,:), allocatable, target awy
type(ncfile) function, pointer groundwater_file_object()
real(sp), dimension(:), allocatable, target vort
type(ncfile) function, pointer restart_extras_file_object()
character(len=char_max_attlen), dimension(:), allocatable, public gwater_forcing_comments
real(sp), dimension(:), allocatable, target bfwslt
type(ncfile) function, pointer wind_velocity_file_object()
type(ncdim), pointer dim_maxnode
type(ncfile) function, pointer velocity_file_object()
type(ncdim), pointer dim_node
type(ncfile) function, pointer file_date_object(SIZE)
integer, dimension(:), allocatable, target ntve
real(sp), dimension(:), allocatable, target xmc
integer, dimension(:,:), allocatable, target nbe
real(sp), dimension(:), allocatable, target lonc
type(ncdim), pointer dim_siglev
type(ncdim), pointer dim_nele
real(sp), dimension(:), allocatable, target bfwdis
integer, parameter dbg_sbrio
subroutine warning(ER1, ER2, ER3, ER4)
integer, dimension(:), allocatable i_obc_n_output
character(len=char_max_attlen), dimension(:), allocatable, public heat_forcing_comments
real(sp), dimension(:), allocatable, target bfwtmp
integer, dimension(:,:), allocatable, target nv
type(ncfile) function, pointer zeta_file_object()
type(ncdim), pointer dim_ncat
character(len=char_max_attlen), dimension(:), allocatable, public icing_forcing_comments
integer, dimension(:), allocatable, target ibclsf_output
type(ncfile) function, pointer density_file_object()
real(sp), dimension(:), allocatable, target icing_10kts
subroutine setup_mpi_io_mode(TF, COMMGRP)
real(sp), dimension(:), allocatable, target xm
type(ncfile), pointer nc_avg_data
real(sp), dimension(:,:), allocatable, target zz1
character(len=char_max_attlen), dimension(:), allocatable, public tide_forcing_comments
real(sp), dimension(:), allocatable, target ua
type(grid), dimension(:), pointer nc_dat_grids
subroutine setup_subdomains(SUB_FILES, GRIDS)
real(sp), dimension(:), allocatable, target qevap
subroutine divide_average
character(len=char_max_attlen), dimension(:), allocatable, public winds_forcing_comments
real(sp), dimension(:,:), allocatable, target l
integer, dimension(:), allocatable iswetnt
real(sp), dimension(:,:), allocatable, target kh
subroutine kill_dimensions
real(sp), dimension(:), allocatable, target swrad_watts
type(ncdim), pointer dim_time
real(dp) function seconds(MJD)
subroutine split_string(instring, delim, outstrings)
real(sp), dimension(:,:), allocatable, target a2u
integer, dimension(:), allocatable iswetc
real(sp), dimension(:), allocatable, target lat
integer, dimension(:,:), allocatable, target nbve
real(sp), dimension(:,:), allocatable, target z
real(sp), dimension(:), allocatable, target icing_satmp
type(ncdim), pointer dim_nlsf
type(ncdim), pointer dim_siglay
subroutine fatal_error(ER1, ER2, ER3, ER4)
real(sp), dimension(:), allocatable, target h1
real(sp), dimension(:), allocatable, target lon
type(ncfile) function, pointer surface_heating_file_object()
real(sp), dimension(:), allocatable, target vvwind
real(sp), dimension(:), allocatable, target taubm
character(len=char_max_attlen), dimension(:), allocatable, public ice_forcing_comments
type(ncdim), pointer dim_four
real(sp), dimension(:,:), allocatable, target z1
type(ncfile) function, pointer turbulence_file_object()
type(grid), dimension(:), pointer nc_avg_grids
real(sp), dimension(:), allocatable, target wvsurf_save
real(sp), dimension(:), allocatable, target cc_sponge
character(len=char_max_attlen), dimension(:), allocatable, public river_forcing_comments
real(sp), dimension(:), allocatable, target rbc_geo
integer, dimension(:,:), allocatable, target nbsn
integer, parameter dbg_io
real(sp), dimension(:,:), allocatable, target wts
real(sp), dimension(:), allocatable, target rbc_wdf
type(ncfile) function, pointer vertical_vel_file_object()
integer, parameter dbg_sbr
type(ncfile) function, pointer grid_file_object(G)
type(ncfile) function, pointer vorticity_file_object()
type(ncdim), pointer dim_maxelem
type(ncdim), pointer dim_datestrlen
type(ncfile) function, pointer icing_file_object()
type(ncdim), pointer dim_ntilay
type(ncdim), pointer dim_three
real(sp), dimension(:,:), allocatable, target zz
real(sp), dimension(:,:), allocatable, target kq
type(ncfile) function, pointer precipitation_file_object()
real(sp), dimension(:), allocatable, target uuwind
character(len=50) coordvar
real(sp), dimension(:,:), allocatable, target rmean1
type(ncfile) function, pointer average_vel_file_object()
integer, parameter dbg_log
real(sp), dimension(:), allocatable, target ym
real(sp), dimension(:), allocatable, target icing_wndx
integer, dimension(:), allocatable iswetn
type(ncfile) function, pointer wind_stress_file_object()