В последнее время я столкнулся с netcdf и не знаю, как это использовать. Кроме того, проблема у меня конкретна, и я еще не нашел ничего полезного. У меня есть код fortran, который выполняет claculations в parralel, используя MPI. Конечные результаты - 3D-поля в декартовой системе координат - затем записываются каждый в другой файл с использованием netcdf. Процесс написания определяется следующим кодом:Запись файлов в формате netcdf classic с использованием netcdf4
nf90_create(path=file_name,&
cmode=IOR(NF90_NETCDF4,NF90_MPIIO),ncid=ncid,&
comm=mpid%comm,info=MPI_INFO_NULL))
сейчас, у меня есть еще один код, который использует netcdf3 поэтому он не может читать netcdf4 формат. Что я хочу сделать, так это изменить в cmode NF90_NETCDF4 с помощью NF90_CLASSIC_MODEL. Когда я это делаю, код компилируется, запускается, но он записывает данные совершенно неправильно. Кроме того, он останавливается перед тем, как перейти от записи переменной A к записи переменной B. Или до того, как ей нужно будет выйти из подпрограммы, в которой используется эта команда. Чтобы прояснить немного больше: после представленной команды, код определяет запуск и подсчет в соответствии с MPI и использует followind NetCDF команды:
nf90_def_dim(ncid,dim_name(i),dim_len(i),dimid(i))
nf90_def_var(ncid,var_name,nf90_real,dimid,varid(1))
nf90_enddef(ncid)
nf90_put_var(ncid,varid(1),var,start=startv,count=countv)
nf90_close(ncid)
Итак, мне интересно, что я должен изменить для кода на записывайте нужные данные в классическом или 64bit_offstring формате без указанных проблем. Если представление проблемы неясно, я могу предоставить исходную подпрограмму, которая вызывает у меня проблемы.
спасибо за все комментарии заранее
из CMakeList кода Я вижу, что используется netcdf4. Чтобы быть более конкретным, вот список всех используемых библиотек, связанных с netcdf: -I/opt/netcdf/netcdf4/include -L/opt/netcdf/netcdf4/lib -lnetcdff -L/opt/pnetcdf/pnetcdf-1.2 .0/lib -L/opt/netcdf/netcdf4/hdf5.1.8.8/lib -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl; – user3316906