Привет, первый вопрос о stackoverflow.
Я застрял на этом в течение 5 дней. Я хочу написать файл netcdf на Фортране.
Я использую netcdf/3.6.3. Я пытаюсь вывести большой массив 43000x 18000 с именем frech и несколько меньших (массивы 1d).
пример моего кода ниже, это действительно большой файл, и проблема не в том, чтобы ввести значения для переменных, а в том, чтобы завершить определение переменных:
print*,"nunks is",nunks
print*,"neqns is",neqns
ok=nf90_create('michalek.nc', NF90_CLOBBER, ncid)
print *,"create ok=",ok
ok= nf90_def_dim(ncid,"nunks", nunks, nunks_dimid)
print *,"def nunks dimension ",ok
ok= nf90_def_dim(ncid,"neqns", neqns, neqns_dimid)
print *,"def neqns dimension ",ok
dimids=(/neqns_dimid, nunks_dimid/)
print *,dimids
ok= nf90_def_var(ncid,"frech", NF90_REAL, dimids, frech_varid)
print *,"def frech",ok
ok= nf90_def_var(ncid,"src", NF90_REAL, nunks_dimid, src_varid)
print *,"def src",ok
ok= nf90_def_var(ncid,"csrc", NF90_REAL, nunks_dimid, csrc_varid)
print *,"define csrc",ok
ok= nf90_def_var(ncid,"dat", NF90_REAL, neqns_dimid, dat_varid)
print *,"define dat",ok
ok= nf90_def_var(ncid,"cdat", NF90_REAL, neqns_dimid, cdat_varid)
print *,"define cdat",ok
ok= nf90_enddef(ncid)
print *,"end dif ", ok
ok= nf90_put_var(ncid, frech_varid, frech)
print *, 'frech put in ok=',ok
ok= nf90_put_var(ncid, src_varid, src)
print *, 'src put in ok=',ok
ok= nf90_put_var(ncid, csrc_varid, csrc)
print *, 'csrc put in ok=',ok
ok= nf90_put_var(ncid, dat_varid, dat)
print *, 'dat put in ok=',ok
ok= nf90_put_var(ncid, cdat_varid, cdat)
print *, 'cdat put in ok=',ok
ok= nf90_close(ncid)
print *, 'close?',ok
Я понимаю, что ok=0, когда файл правильно читается. Однако, когда я дохожу до стадии завершения определения файла (nf90_enddif), ok возвращается как =-62, а файл netcdf не создается. Я предполагаю, что это проблема со слишком большим массивом, но я не могу решить эту проблему.
соответствующий вывод для приведенного выше кода:
nunks is 43894
neqns is 18144
create ok= 0
def nunks dimension 0
def neqns dimension 0
2 1
def frech 0
def src 0
define csrc 0
define dat 0
define cdat 0
end dif -62
frech put in ok= -39
src put in ok= -39
csrc put in ok= -39
dat put in ok= -39
cdat put in ok= -39
close? -62
Спасибо за любую помощь!
С уважением Питер :)