42 PRIVATE :: def_std_nf90
43# if defined PIO_LIB && defined DISTRIBUTE
44 PRIVATE :: def_std_pio
50 SUBROUTINE def_std (ng)
55 integer,
intent(in) :: ng
59 character (len=*),
parameter :: MyFile = &
66 SELECT CASE (
std(5,ng)%IOtype)
68 CALL def_std_nf90 (ng)
70# if defined PIO_LIB && defined DISTRIBUTE
80 10
FORMAT (
' DEF_STD - Illegal output file type, io_type = ',i0, &
81 & /,11x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
84 END SUBROUTINE def_std
87 SUBROUTINE def_std_nf90 (ng)
94 integer,
intent(in) :: ng
98 logical :: got_var(NV)
100 integer,
parameter :: Natt = 25
102 integer :: i, j, ifield, itrc, nrec, nvd, nvd3, nvd4
103 integer :: recdim, status, varid
105# ifdef ADJUST_BOUNDARY
106 integer :: IorJdim, brecdim
108# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
111 integer :: DimIDs(nDimID)
112 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
113# ifdef ADJUST_BOUNDARY
118 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
119# ifdef ADJUST_BOUNDARY
126# ifdef ADJUST_WSTRESS
127 integer :: u3dfrc(4), v3dfrc(4)
132 character (len=256) :: ncname
133 character (len=MaxLen) :: Vinfo(Natt)
135 character (len=*),
parameter :: MyFile = &
136 & __FILE__//
", def_std_nf90"
145 ncname=
std(5,ng)%name
148 IF (ldefstd(ng))
THEN
149 WRITE (
stdout,10) ng, trim(ncname)
151 WRITE (
stdout,20) ng, trim(ncname)
159 define :
IF (ldefstd(ng))
THEN
204# ifdef ADJUST_BOUNDARY
210# if defined WRITE_WATER && defined MASKING
225# if defined WRITE_WATER && defined MASKING
239 &
iobounds(ng)%xy_rho*(
n(ng)+1), dimids(23))
252 &
n(ng)+1, dimids(10))
256 &
nt(ng), dimids(11))
268# if defined WRITE_WATER && defined MASKING
312# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
314 &
nfrec(ng), dimids(30))
318# ifdef ADJUST_BOUNDARY
320 &
nbrec(ng), dimids(31))
326 & nf90_unlimited, dimids(12))
330# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
333# ifdef ADJUST_BOUNDARY
339# if defined WRITE_WATER && defined MASKING
349# if defined WRITE_WATER && defined MASKING
373# ifdef ADJUST_BOUNDARY
389# if defined WRITE_WATER && defined MASKING
406# ifdef ADJUST_WSTRESS
416# if defined WRITE_WATER && defined MASKING
433# ifdef ADJUST_WSTRESS
444# if defined WRITE_WATER && defined MASKING
485 WRITE (vinfo( 3),
'(a,a)')
'seconds since ', trim(
rclock%string)
486 vinfo( 4)=trim(
rclock%calendar)
490 &
nf_tout, 1, (/recdim/), aval, vinfo, ncname, &
491 & setparaccess = .true.)
501# if defined WRITE_WATER && defined MASKING
505 vinfo(22)=
'coordinates'
508 &
nf_fout, nvd3, t2dgrd, aval, vinfo, ncname)
515 vinfo( 3)=
'meter2 second-2'
518# if defined WRITE_WATER && defined MASKING
522 vinfo(22)=
'coordinates'
525 &
nf_fout, nvd3, u2dgrd, aval, vinfo, ncname)
532 vinfo( 3)=
'meter2 second-2'
535# if defined WRITE_WATER && defined MASKING
539 vinfo(22)=
'coordinates'
542 &
nf_fout, nvd3, v2dgrd, aval, vinfo, ncname)
551 vinfo( 3)=
'meter2 second-2'
554# if defined WRITE_WATER && defined MASKING
558 vinfo(22)=
'coordinates'
561 &
nf_fout, nvd4, u3dgrd, aval, vinfo, ncname)
568 vinfo( 3)=
'meter2 second-2'
571# if defined WRITE_WATER && defined MASKING
575 vinfo(22)=
'coordinates'
578 &
nf_fout, nvd4, v3dgrd, aval, vinfo, ncname)
586 IF (itrc.eq.
itemp)
THEN
588 ELSE IF (itrc.eq.
isalt)
THEN
589 vinfo( 3)=
'nondimensional'
597 IF (itrc.eq.
idsed(i))
THEN
598 WRITE (vinfo(19),60) 1000.0_r8*
sd50(i,ng)
602# if defined WRITE_WATER && defined MASKING
606 vinfo(22)=
'coordinates'
609 &
nf_fout, nvd4, t3dgrd, aval, vinfo, ncname)
634 query:
IF (.not.ldefstd(ng))
THEN
635 ncname=
std(5,ng)%name
641 WRITE (
stdout,70) trim(ncname)
648 & ncid =
std(5,ng)%ncid)
654 & ncid =
std(5,ng)%ncid)
693 got_var(
idtvar(itrc))=.true.
703 IF (.not.got_var(
idtime))
THEN
709 IF (.not.got_var(
idfsur))
THEN
716 IF (.not.got_var(
idubar))
THEN
722 IF (.not.got_var(
idvbar))
THEN
730 IF (.not.got_var(
iduvel))
THEN
736 IF (.not.got_var(
idvvel))
THEN
745 IF (.not.got_var(
idtvar(itrc)))
THEN
759 10
FORMAT (2x,
'DEF_STD_NF90 - creating standard deviation', &
760 &
' file,',t56,
'Grid ',i2.2,
': ',a)
761 20
FORMAT (2x,
'DEF_STD_NF90 - inquiring standard deviation', &
762 &
' file,',t56,
'Grid ',i2.2,
': ',a)
763 30
FORMAT (/,
' DEF_STD_NF90 - unable to create standard deviation' &
764 &
' NetCDF file:',1x,a)
765 40
FORMAT (a,
', standard deviation')
766 50
FORMAT (
'(',a,
')^2')
767 60
FORMAT (1pe11.4,1x,
'millimeter')
768 70
FORMAT (/,
' DEF_STD_NF90 - unable to open standard deviation', &
769 &
' NetCDF file: ',a)
770 80
FORMAT (/,
' DEF_STD_NF90 - unable to find variable: ',a,2x, &
771 &
' in standard deviation NetCDF file: ',a)
774 END SUBROUTINE def_std_nf90
776# if defined PIO_LIB && defined DISTRIBUTE
779 SUBROUTINE def_std_pio (ng)
786 integer,
intent(in) :: ng
790 logical :: got_var(NV)
792 integer,
parameter :: Natt = 25
794 integer :: i, j, ifield, itrc, nrec, nvd, nvd3, nvd4
795 integer :: recdim, status
797# ifdef ADJUST_BOUNDARY
798 integer :: IorJdim, brecdim
800# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
803 integer :: DimIDs(nDimID)
804 integer :: t2dgrd(3), u2dgrd(3), v2dgrd(3)
805# ifdef ADJUST_BOUNDARY
809 integer :: t3dgrd(4), u3dgrd(4), v3dgrd(4), w3dgrd(4)
810# ifdef ADJUST_BOUNDARY
817# ifdef ADJUST_WSTRESS
818 integer :: u3dfrc(4), v3dfrc(4)
823 character (len=256) :: ncname
824 character (len=MaxLen) :: Vinfo(Natt)
826 character (len=*),
parameter :: MyFile = &
827 & __FILE__//
", def_std_pio"
829 TYPE (Var_desc_t) :: varDesc
838 ncname=
std(5,ng)%name
841 IF (ldefstd(ng))
THEN
842 WRITE (
stdout,10) ng, trim(ncname)
844 WRITE (
stdout,20) ng, trim(ncname)
852 define :
IF (ldefstd(ng))
THEN
898# ifdef ADJUST_BOUNDARY
904# if defined WRITE_WATER && defined MASKING
919# if defined WRITE_WATER && defined MASKING
933 &
iobounds(ng)%xy_rho*(
n(ng)+1), dimids(23))
946 &
n(ng)+1, dimids(10))
950 &
nt(ng), dimids(11))
962# if defined WRITE_WATER && defined MASKING
1006# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1008 &
'frc_adjust',
nfrec(ng), dimids(30))
1012# ifdef ADJUST_BOUNDARY
1014 &
'obc_adjust',
nbrec(ng), dimids(31))
1020 & pio_unlimited, dimids(12))
1024# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1027# ifdef ADJUST_BOUNDARY
1033# if defined WRITE_WATER && defined MASKING
1043# if defined WRITE_WATER && defined MASKING
1044 t2dgrd(1)=dimids(17)
1045 t2dgrd(2)=dimids(12)
1047 t3dgrd(1)=dimids(20)
1048 t3dgrd(2)=dimids(12)
1051 t2dgrd(1)=dimids( 1)
1052 t2dgrd(2)=dimids( 5)
1053 t2dgrd(3)=dimids(12)
1055 t3dgrd(1)=dimids( 1)
1056 t3dgrd(2)=dimids( 5)
1057 t3dgrd(3)=dimids( 9)
1058 t3dgrd(4)=dimids(12)
1060# ifdef ADJUST_STFLUX
1061 t3dfrc(1)=dimids( 1)
1062 t3dfrc(2)=dimids( 5)
1064 t3dfrc(4)=dimids(12)
1067# ifdef ADJUST_BOUNDARY
1069 t2dobc(2)=dimids(14)
1071 t2dobc(4)=dimids(12)
1074 t3dobc(2)=dimids( 9)
1075 t3dobc(3)=dimids(14)
1077 t3dobc(5)=dimids(12)
1083# if defined WRITE_WATER && defined MASKING
1084 u2dgrd(1)=dimids(18)
1085 u2dgrd(2)=dimids(12)
1087 u3dgrd(1)=dimids(21)
1088 u3dgrd(2)=dimids(12)
1091 u2dgrd(1)=dimids( 2)
1092 u2dgrd(2)=dimids( 6)
1093 u2dgrd(3)=dimids(12)
1095 u3dgrd(1)=dimids( 2)
1096 u3dgrd(2)=dimids( 6)
1097 u3dgrd(3)=dimids( 9)
1098 u3dgrd(4)=dimids(12)
1100# ifdef ADJUST_WSTRESS
1101 u3dfrc(1)=dimids( 2)
1102 u3dfrc(2)=dimids( 6)
1104 u3dfrc(4)=dimids(12)
1110# if defined WRITE_WATER && defined MASKING
1111 v2dgrd(1)=dimids(19)
1112 v2dgrd(2)=dimids(12)
1114 v3dgrd(1)=dimids(22)
1115 v3dgrd(2)=dimids(12)
1118 v2dgrd(1)=dimids( 3)
1119 v2dgrd(2)=dimids( 7)
1120 v2dgrd(3)=dimids(12)
1122 v3dgrd(1)=dimids( 3)
1123 v3dgrd(2)=dimids( 7)
1124 v3dgrd(3)=dimids( 9)
1125 v3dgrd(4)=dimids(12)
1127# ifdef ADJUST_WSTRESS
1128 v3dfrc(1)=dimids( 3)
1129 v3dfrc(2)=dimids( 7)
1131 v3dfrc(4)=dimids(12)
1138# if defined WRITE_WATER && defined MASKING
1139 w3dgrd(1)=dimids(23)
1140 w3dgrd(2)=dimids(12)
1142 w3dgrd(1)=dimids( 1)
1143 w3dgrd(2)=dimids( 5)
1144 w3dgrd(3)=dimids(10)
1145 w3dgrd(4)=dimids(12)
1156 DO j=1,len(vinfo(1))
1179 WRITE (vinfo( 3),
'(a,a)')
'seconds since ', trim(
rclock%string)
1180 vinfo( 4)=trim(
rclock%calendar)
1188 &
pio_tout, 1, (/recdim/), aval, vinfo, ncname, &
1189 & setparaccess = .true.)
1199# if defined WRITE_WATER && defined MASKING
1200 vinfo(20)=
'mask_rho'
1203 vinfo(22)=
'coordinates'
1210 &
pio_fout, nvd3, t2dgrd, aval, vinfo, ncname)
1217 vinfo( 3)=
'meter2 second-2'
1220# if defined WRITE_WATER && defined MASKING
1224 vinfo(22)=
'coordinates'
1231 &
pio_fout, nvd3, u2dgrd, aval, vinfo, ncname)
1238 vinfo( 3)=
'meter2 second-2'
1241# if defined WRITE_WATER && defined MASKING
1245 vinfo(22)=
'coordinates'
1252 &
pio_fout, nvd3, v2dgrd, aval, vinfo, ncname)
1261 vinfo( 3)=
'meter2 second-2'
1264# if defined WRITE_WATER && defined MASKING
1268 vinfo(22)=
'coordinates'
1275 &
pio_fout, nvd4, u3dgrd, aval, vinfo, ncname)
1282 vinfo( 3)=
'meter2 second-2'
1285# if defined WRITE_WATER && defined MASKING
1289 vinfo(22)=
'coordinates'
1296 &
pio_fout, nvd4, v3dgrd, aval, vinfo, ncname)
1304 IF (itrc.eq.
itemp)
THEN
1305 vinfo( 3)=
'Celsius2'
1306 ELSE IF (itrc.eq.
isalt)
THEN
1307 vinfo( 3)=
'nondimensional'
1315 IF (itrc.eq.
idsed(i))
THEN
1316 WRITE (vinfo(19),60) 1000.0_r8*
sd50(i,ng)
1320# if defined WRITE_WATER && defined MASKING
1321 vinfo(20)=
'mask_rho'
1324 vinfo(22)=
'coordinates'
1330 &
std(5,ng)%pioTrc(itrc)%vd, &
1331 &
pio_fout, nvd4, t3dgrd, aval, vinfo, ncname)
1356 query:
IF (.not.ldefstd(ng))
THEN
1357 ncname=
std(5,ng)%name
1363 WRITE (
stdout,70) trim(ncname)
1370 & piofile =
std(5,ng)%pioFile)
1376 & piofile =
std(5,ng)%pioFile)
1389 IF (trim(var_name(i)).eq.trim(
vname(1,
idtime)))
THEN
1394 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idfsur)))
THEN
1400 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idubar)))
THEN
1405 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvbar)))
THEN
1412 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
iduvel)))
THEN
1417 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idvvel)))
THEN
1426 IF (trim(var_name(i)).eq.trim(
vname(1,
idtvar(itrc))))
THEN
1427 got_var(
idtvar(itrc))=.true.
1439 IF (.not.got_var(
idtime))
THEN
1445 IF (.not.got_var(
idfsur))
THEN
1451 IF (.not.got_var(
idubar))
THEN
1457 IF (.not.got_var(
idvbar))
THEN
1464 IF (.not.got_var(
iduvel))
THEN
1470 IF (.not.got_var(
idvvel))
THEN
1479 IF (.not.got_var(
idtvar(itrc)))
THEN
1490 std(5,ng)%Rindex=rec_size
1493 10
FORMAT (2x,
'DEF_STD_PIO - creating standard deviation', &
1494 &
' file,',t56,
'Grid ',i2.2,
': ',a)
1495 20
FORMAT (2x,
'DEF_STD_PIO - inquiring standard deviation', &
1496 &
' file,',t56,
'Grid ',i2.2,
': ',a)
1497 30
FORMAT (/,
' DEF_STD_PIO - unable to create standard deviation', &
1498 &
' NetCDF file:',1x,a)
1499 40
FORMAT (a,
', standard deviation')
1500 50
FORMAT (
'(',a,
')^2')
1501 60
FORMAT (1pe11.4,1x,
'millimeter')
1502 70
FORMAT (/,
' DEF_STD_PIO - unable to open standard deviation', &
1503 &
' NetCDF file: ',a)
1504 80
FORMAT (/,
' DEF_STD_PIO - unable to find variable: ',a,2x, &
1505 &
' in standard deviation NetCDF file: ',a)
1508 END SUBROUTINE def_std_pio
integer, parameter nbands
integer, dimension(:), allocatable nstatevar
type(t_io), dimension(:,:), allocatable std
character(len=256) sourcefile
integer, parameter io_nf90
integer, parameter io_pio
integer, dimension(:), allocatable idtvar
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:,:,:), allocatable iinfo
integer, parameter nf_tout
subroutine, public netcdf_check_dim(ng, model, ncname, ncid)
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
integer, parameter nf_fout
subroutine, public netcdf_enddef(ng, model, ncname, ncid)
character(len=100), dimension(mvars) var_name
integer, dimension(mvars) var_id
subroutine, public netcdf_create(ng, model, ncname, ncid)
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
integer, dimension(:), allocatable n
integer, parameter r3dvar
type(t_iobounds), dimension(:), allocatable iobounds
integer, parameter u3dvar
integer, parameter u2dvar
integer, dimension(:), allocatable nt
integer, parameter r2dvar
integer, parameter v2dvar
integer, parameter v3dvar
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)
integer, dimension(:), allocatable nfrec
integer, dimension(:), allocatable nbrec
integer, dimension(:), allocatable idsed
real(r8), dimension(:,:), allocatable sd50
logical function, public founderror(flag, noerr, line, routine)