Skip to content
Snippets Groups Projects
Commit 36d84147 authored by Ramil Ahtamyanov's avatar Ramil Ahtamyanov
Browse files

netcdf_io_module.f90 init. Series recording functionality

parent e2989120
No related branches found
No related tags found
No related merge requests found
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CMakeWorkspace"> <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<contentRoot DIR="$PROJECT_DIR$" />
</component>
</project> </project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/scm-io.iml" filepath="$PROJECT_DIR$/.idea/scm-io.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />
\ No newline at end of file
program main
use netcdf_io_module
implicit none
type(io_struct) :: ios
real, dimension(10) :: time_data = (/1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0/)
real, dimension(10) :: series_data = (/10.0, 9.0, 8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0/)
call open_netcdf('series_data.nc', ios, 10)
if (ios%is_open) then
call write_series(ios, time_data, series_data)
call close_netcdf(ios)
else
print *, 'Failed to open NetCDF file.'
endif
end program main
module netcdf_io_module
use netcdf
implicit none
type :: io_struct
integer :: ncid
integer :: time_dimid, varid_time, varid_series
logical :: is_open = .false.
character(len=128) :: series_name = 'timeseries of variable'
character(len=128) :: series_long_name = 'timeseries of some variable'
character(len=128) :: series_units = 'unit'
end type io_struct
contains
subroutine open_netcdf(filename, ios, time_len)
character(len=*), intent(in) :: filename
type(io_struct), intent(out) :: ios
integer, intent(in) :: time_len
integer :: ierr
ierr = nf90_create(filename, nf90_clobber, ios%ncid)
if (ierr == nf90_noerr) then
ios%is_open = .true.
ierr = nf90_def_dim(ios%ncid, 'time', time_len, ios%time_dimid)
ierr = nf90_def_var(ios%ncid, 'time', nf90_float, ios%time_dimid, ios%varid_time)
ierr = nf90_def_var(ios%ncid, 'series', nf90_float, ios%time_dimid, ios%varid_series)
ierr = nf90_put_att(ios%ncid, ios%varid_series, 'standard_name', ios%series_name)
ierr = nf90_put_att(ios%ncid, ios%varid_series, 'long_name', ios%series_long_name)
ierr = nf90_put_att(ios%ncid, ios%varid_series, 'units', ios%series_units)
ierr = nf90_enddef(ios%ncid)
else
print *, 'Error opening file: ', ierr
ios%is_open = .false.
endif
end subroutine open_netcdf
subroutine write_series(ios, time_data, series_data)
type(io_struct), intent(in) :: ios
real, dimension(:), intent(in) :: time_data, series_data
integer :: ierr
if (.not. ios%is_open) then
print *, "File is not open."
return
endif
ierr = nf90_put_var(ios%ncid, ios%varid_time, time_data)
ierr = nf90_put_var(ios%ncid, ios%varid_series, series_data)
if (ierr /= nf90_noerr) then
print *, 'Error writing data:', ierr
endif
end subroutine write_series
subroutine close_netcdf(ios)
type(io_struct), intent(inout) :: ios
integer :: ierr
ierr = nf90_close(ios%ncid)
ios%is_open = .false.
end subroutine close_netcdf
end module netcdf_io_module
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment