diff --git a/src/netcdf/netcdf.f90 b/src/netcdf/netcdf.f90 index 02f65f103..0adf0f7c6 100644 --- a/src/netcdf/netcdf.f90 +++ b/src/netcdf/netcdf.f90 @@ -198,160 +198,98 @@ module subroutine netcdf_initialize_output(self, param) end select !! Define the variables - !! Disabled chunking for now, as it was causing uncontrolled memory growth in some runs call check( nf90_def_var(self%ncid, TIME_DIMNAME, self%out_type, self%time_dimid, self%time_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%time_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, ID_DIMNAME, NF90_INT, self%id_dimid, self%id_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%id_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, NPL_VARNAME, NF90_INT, self%time_dimid, self%npl_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%npl_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, NTP_VARNAME, NF90_INT, self%time_dimid, self%ntp_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%ntp_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, NAME_VARNAME, NF90_CHAR, [self%str_dimid, self%id_dimid], self%name_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%name_varid, NF90_CHUNKED, [NAMELEN, self%id_chunk]) ) call check( nf90_def_var(self%ncid, PTYPE_VARNAME, NF90_CHAR, [self%str_dimid, self%id_dimid], self%ptype_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%ptype_varid, NF90_CHUNKED, [NAMELEN, self%id_chunk]) ) call check( nf90_def_var(self%ncid, STATUS_VARNAME, NF90_CHAR, [self%str_dimid, self%id_dimid], self%status_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%status_varid, NF90_CHUNKED, [NAMELEN, self%id_chunk]) ) if ((param%out_form == XV) .or. (param%out_form == XVEL)) then call check( nf90_def_var(self%ncid, XHX_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%xhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%xhx_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, XHY_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%xhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%xhy_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, XHZ_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%xhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%xhz_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, VHX_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%vhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%vhx_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, VHY_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%vhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%vhy_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, VHZ_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%vhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%vhz_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) end if if ((param%out_form == EL) .or. (param%out_form == XVEL)) then call check( nf90_def_var(self%ncid, A_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%a_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%a_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, E_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%e_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%e_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, INC_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%inc_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%inc_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, CAPOM_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%capom_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%capom_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, OMEGA_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%omega_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%omega_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, CAPM_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%capm_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%capm_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) end if call check( nf90_def_var(self%ncid, GMASS_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%Gmass_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Gmass_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) if (param%lrhill_present) then call check( nf90_def_var(self%ncid, RHILL_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%rhill_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%rhill_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) end if if (param%lclose) then call check( nf90_def_var(self%ncid, RADIUS_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%radius_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%radius_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_TIME_VARNAME, self%out_type, self%id_dimid, self%origin_time_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_time_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_TYPE_VARNAME, NF90_CHAR, [self%str_dimid, self%id_dimid], & self%origin_type_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_type_varid, NF90_CHUNKED, [NAMELEN, self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_XHX_VARNAME, self%out_type, self%id_dimid, self%origin_xhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_xhx_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_XHY_VARNAME, self%out_type, self%id_dimid, self%origin_xhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_xhy_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_XHZ_VARNAME, self%out_type, self%id_dimid, self%origin_xhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_xhz_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_VHX_VARNAME, self%out_type, self%id_dimid, self%origin_vhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_vhx_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_VHY_VARNAME, self%out_type, self%id_dimid, self%origin_vhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_vhy_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, ORIGIN_VHZ_VARNAME, self%out_type, self%id_dimid, self%origin_vhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%origin_vhz_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, COLLISION_ID_VARNAME, NF90_INT, self%id_dimid, self%collision_id_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%collision_id_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_TIME_VARNAME, self%out_type, self%id_dimid, self%discard_time_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_time_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_XHX_VARNAME, self%out_type, self%id_dimid, self%discard_xhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_xhx_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_XHY_VARNAME, self%out_type, self%id_dimid, self%discard_xhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_xhy_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_XHZ_VARNAME, self%out_type, self%id_dimid, self%discard_xhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_xhz_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_VHX_VARNAME, self%out_type, self%id_dimid, self%discard_vhx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_vhx_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_VHY_VARNAME, self%out_type, self%id_dimid, self%discard_vhy_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_vhy_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_VHZ_VARNAME, self%out_type, self%id_dimid, self%discard_vhz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_vhz_varid, NF90_CHUNKED, [self%id_chunk]) ) call check( nf90_def_var(self%ncid, DISCARD_BODY_ID_VARNAME, NF90_INT, self%id_dimid, self%discard_body_id_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%discard_body_id_varid, NF90_CHUNKED, [self%id_chunk]) ) end if if (param%lrotation) then call check( nf90_def_var(self%ncid, IP1_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%Ip1_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Ip1_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, IP2_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%Ip2_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Ip2_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, IP3_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%Ip3_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Ip3_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, ROTX_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%rotx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%rotx_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, ROTY_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%roty_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%roty_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, ROTZ_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%rotz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%rotz_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) end if if (param%ltides) then call check( nf90_def_var(self%ncid, K2_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%k2_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%k2_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) call check( nf90_def_var(self%ncid, Q_VARNAME, self%out_type, [self%id_dimid, self%time_dimid], self%Q_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Q_varid, NF90_CHUNKED, [self%id_chunk, self%time_chunk]) ) end if if (param%lenergy) then call check( nf90_def_var(self%ncid, KE_ORB_VARNAME, self%out_type, self%time_dimid, self%KE_orb_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%KE_orb_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, KE_SPIN_VARNAME, self%out_type, self%time_dimid, self%KE_spin_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%KE_spin_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, PE_VARNAME, self%out_type, self%time_dimid, self%PE_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%PE_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ORBX_VARNAME, self%out_type, self%time_dimid, self%L_orbx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_orbx_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ORBY_VARNAME, self%out_type, self%time_dimid, self%L_orby_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_orby_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ORBZ_VARNAME, self%out_type, self%time_dimid, self%L_orbz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_orbz_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_SPINX_VARNAME, self%out_type, self%time_dimid, self%L_spinx_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_spinx_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_SPINY_VARNAME, self%out_type, self%time_dimid, self%L_spiny_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_spiny_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_SPINZ_VARNAME, self%out_type, self%time_dimid, self%L_spinz_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_spinz_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ESCAPEX_VARNAME, self%out_type, self%time_dimid, self%L_escapex_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_escapex_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ESCAPEY_VARNAME, self%out_type, self%time_dimid, self%L_escapey_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_escapey_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, L_ESCAPEZ_VARNAME, self%out_type, self%time_dimid, self%L_escapez_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%L_escapez_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, ECOLLISIONS_VARNAME, self%out_type, self%time_dimid, self%Ecollisions_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Ecollisions_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, EUNTRACKED_VARNAME, self%out_type, self%time_dimid, self%Euntracked_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%Euntracked_varid, NF90_CHUNKED, [self%time_chunk]) ) call check( nf90_def_var(self%ncid, GMESCAPE_VARNAME, self%out_type, self%time_dimid, self%GMescape_varid) ) - !call check( nf90_def_var_chunking(self%ncid, self%GMescape_varid, NF90_CHUNKED, [self%time_chunk]) ) end if call check( nf90_def_var(self%ncid, J2RP2_VARNAME, self%out_type, self%time_dimid, self%j2rp2_varid) ) call check( nf90_def_var(self%ncid, J4RP4_VARNAME, self%out_type, self%time_dimid, self%j4rp4_varid) ) + ! Set fill mode to NaN for all variables call check( nf90_inquire(self%ncid, nVariables=nvar) ) do varid = 1, nvar @@ -368,6 +306,8 @@ module subroutine netcdf_initialize_output(self, param) end select end do + + ! Take the file out of define mode call check( nf90_enddef(self%ncid) ) @@ -490,6 +430,9 @@ module subroutine netcdf_open(self, param, readonly) call check( nf90_inq_varid(self%ncid, J2RP2_VARNAME, self%j2rp2_varid) ) call check( nf90_inq_varid(self%ncid, J4RP4_VARNAME, self%j4rp4_varid) ) + if (param%lgr) then + end if + return end subroutine netcdf_open