subroutine h5write(nvars, nstanzas, drows, dcols, ep_data, ms_data, ep_diet) use statevartypesEcopath_mod use iso_c_binding use hdf5 implicit none type deneme real :: biomass real :: age_start real :: mortality real :: qob integer :: leading real :: vbk real :: rec_power real :: rel_ba real :: Wage real :: WWa real :: survive real :: splitno end type deneme ! This is the name of the data file we will read. character (len = 9), parameter :: filename = "ep_res.h5" character (len = 7), parameter :: dsetname0 = "ep_data" ! name of the Ecopath base dataset character (len = 7), parameter :: dsetname1 = "ms_data" ! name of the Ecopath multistanza dataset ! variables inherited from Ecopath model integer(8), intent(in) :: nvars, nstanzas, drows, dcols type(ecopath_data), intent(in), target :: ep_data type(multi_stanza), intent(in), target :: ms_data(nstanzas) type(deneme), target :: den_data(4) real(4), intent(in), target :: ep_diet(drows, dcols) ! in-subroutine variable declarations for ep_data integer(8), parameter :: ep_dim0 = 52 ! dimension of ep_data integer :: hdferr ! variable to handle errors integer(hid_t) :: file_id, plist_id ! file identifier of the output file integer(hid_t) :: dset_id ! dataset identifier integer(hid_t) :: dtype_id, dt1_id ! dataset type identifier integer(4) :: dspace_id ! dataspace identifier integer(hid_t) :: memtype integer(8) :: type_size, offset integer(8) :: type_sizei, type_sizer integer(hsize_t), DIMENSION(1) :: ep_dims = (/ep_dim0/) type(c_ptr) :: f_ptr ! in-subroutine variable declarations for ms_data integer , parameter :: ms_dim0 = 4 ! number of stanzas integer(hid_t) :: file, filetype, space, dset ! Handles integer(hsize_t), dimension(1:1) :: ms_dims = (/ms_dim0/) integer(hsize_t), dimension(1:2) :: maxdims ! initialize FORTRAN interface call h5open_f(hdferr) call h5pcreate_f(H5P_DATASET_XFER_F, plist_id, hdferr) call h5pset_preserve_f(plist_id, .TRUE., hdferr) ! create file, if it already exists overwrite (H%F_ACC_TRUNC_F) call h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, hdferr) ! get size of each member in the compound datatype call h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, hdferr) call h5tget_size_f(H5T_NATIVE_REAL, type_sizer, hdferr) type_size = (19 * type_sizer) + (5 * type_sizei) ! create the compound datatype for memory call h5tcreate_f(H5T_COMPOUND_F, type_size, memtype, hdferr) ! insert members offset = 0 call h5tinsert_f(memtype, "biomass", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "pob", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "qob", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "ee", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "poq", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "unass_q", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "detritus_import", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "immig", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "emig", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "emig_rate", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "ba", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "ba_rate", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "landings", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizei call h5tinsert_f(memtype, "org_type", offset, H5T_NATIVE_INTEGER, hdferr) offset = offset + type_sizei call h5tinsert_f(memtype, "stanza", offset, H5T_NATIVE_INTEGER, hdferr) offset = offset + type_sizei call h5tinsert_f(memtype, "stanza_no", offset, H5T_NATIVE_INTEGER, hdferr) offset = offset + type_sizei call h5tinsert_f(memtype, "age_start", offset, H5T_NATIVE_INTEGER, hdferr) offset = offset + type_sizei call h5tinsert_f(memtype, "leading", offset, H5T_NATIVE_INTEGER, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "production", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "consumption", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "respiration", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "assimilation", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "eatenof", offset, H5T_NATIVE_REAL, hdferr) offset = offset + type_sizer call h5tinsert_f(memtype, "eatenby", offset, H5T_NATIVE_REAL, hdferr) call h5screate_simple_f(1, ep_dims, dspace_id, hdferr) call h5dcreate_f(file_id, dsetname0, memtype, dspace_id, dset_id, hdferr) f_ptr = C_LOC(ep_data) call h5dwrite_f(dset_id, memtype, f_ptr, hdferr) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! second data den_data(1)%biomass = 3.1 den_data(1)%age_start = 3.2 den_data(1)%mortality = 3.3 den_data(1)%qob = 3.4 den_data(1)%leading = 1 den_data(1)%vbk = 3.5 den_data(1)%rec_power = 3.6 den_data(1)%rel_ba = 3.7 den_data(1)%Wage = 3.8 den_data(1)%WWa = 3.9 den_data(1)%survive = 4.0 den_data(1)%splitno = 4.1 den_data(2)%biomass = 3.1 den_data(2)%age_start = 3.2 den_data(2)%mortality = 3.3 den_data(2)%qob = 3.4 den_data(2)%leading = 1 den_data(2)%vbk = 3.5 den_data(2)%rec_power = 3.6 den_data(2)%rel_ba = 3.7 den_data(2)%Wage = 3.8 den_data(2)%WWa = 3.9 den_data(2)%survive = 4.0 den_data(2)%splitno = 4.1 den_data(3)%biomass = 3.1 den_data(3)%age_start = 3.2 den_data(3)%mortality = 3.3 den_data(3)%qob = 3.4 den_data(3)%leading = 1 den_data(3)%vbk = 3.5 den_data(3)%rec_power = 3.6 den_data(3)%rel_ba = 3.7 den_data(3)%Wage = 3.8 den_data(3)%WWa = 3.9 den_data(3)%survive = 4.0 den_data(3)%splitno = 4.1 den_data(4)%biomass = 3.1 den_data(4)%age_start = 3.2 den_data(4)%mortality = 3.3 den_data(4)%qob = 3.4 den_data(4)%leading = 1 den_data(4)%vbk = 3.5 den_data(4)%rec_power = 3.6 den_data(4)%rel_ba = 3.7 den_data(4)%Wage = 3.8 den_data(4)%WWa = 3.9 den_data(4)%survive = 4.0 den_data(4)%splitno = 4.1 ! Create the compound datatype for memory. ! CALL h5tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(den_data(1)), C_LOC(den_data(2))), memtype, hdferr) CALL h5tinsert_f(memtype, "biomass", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%biomass)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "age_start", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%age_start)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "mortality", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%mortality)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "qob", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%qob)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "leading", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%leading)), H5T_NATIVE_INTEGER, hdferr) CALL h5tinsert_f(memtype, "vbk", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%vbk)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "rec_power", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%rec_power)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "rel_ba", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%rel_ba)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "Wage", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%Wage)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "WWa", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%WWa)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "survive", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%survive)), H5T_NATIVE_REAL, hdferr) CALL h5tinsert_f(memtype, "splitno", & H5OFFSETOF(C_LOC(den_data(1)),C_LOC(den_data(1)%splitno)), H5T_NATIVE_REAL, hdferr) ! Create array datatypes for file and memory. ! !CALL H5Tarray_create_f(INT(H5T_STD_I64LE, HID_T), 2, ms_adims, filetype, hdferr) !CALL H5Tarray_create_f(H5T_NATIVE_INTEGER, 2, ms_adims, memtype, hdferr) ! ! Create dataspace. Setting maximum size to be the current size. ! CALL h5screate_simple_f(1, ms_dims, space, hdferr) ! ! Create the dataset and write the array data to it. ! CALL h5dcreate_f(file_id, dsetname1, memtype, space, dset, hdferr) f_ptr = C_LOC(den_data(1)) CALL h5dwrite_f(dset, memtype, f_ptr, hdferr) end subroutine h5write