Как читать / хранить много файлов, используя GrADS?
Я хотел бы знать, может ли кто-нибудь помочь мне найти проблему об этом коде на языке GrADS.
Я хотел бы прочитать много файлов, вычислить и сохранить их, но когда я выполняю это в GraDS, у меня один и тот же ответ для всех файлов импута.
Может ли кто-нибудь помочь мне в этой проблеме, пожалуйста?
'reinit'
****Modify here******
var = v10
ano = 1980
while(ano <= 2013)
*Desire point
local = IAG
**lat = -22.3
**lon = 314.62
latInitialP = -34.58
lonInitialP = 305.43
*******************************************************
'sdfopen C:\Pesquisa_Michelle\dados_amandenha\V10m_'ano'.nc'
*Storing out
'set gxout print'
'set prnopts %10.2f 1 1'
in = 1
test = 1460
if ( math_fmod(ano,4) = 0 )
test = 1464
endif
while(in <= test)
'set t 'in
in2 = in + 3
say in
say in2
'define m = ave('var',t='in',t='in2')'
'set lat 'latInitialP''
'set lon 'lonInitialP''
'd m'
valor = sublin(result,2)
lixo = write('C:\Pesquisa_Michelle\dados_amandenha\'var'_'ano'.txt',valor)
in = in + 4
endwhile
lixo = close(''var'_'ano'.txt')
ano = ano + 1
endwhile
Обновить
Я не получаю сообщение об ошибке. Это прекрасно работает, проблема в файлах результата. Все файлы результатов имеют первый результат, как репликация файлов. Когда я выполняю это, не используя цикл, а меняя каждое значение для "ano", я получаю другой результат.
Проблема, на мой взгляд, в команде:
'sdfopen C: \ Pesquisa_Michelle \ dados_amandenha \ V10m_'ano'.nc'
Эта команда не заменяет файлы для каждого "ano".
1 ответ
Проблема в том, что вы никогда не закрываете свой входной файл данных или не сбрасываете грады во время основного цикла. Рассмотрим этот пример, где я открываю файл:
% grads -l
ga-> open data/semicircle-qv14_s.ctl
Scanning description file: data/semicircle-qv14_s.ctl
Data file data/semicircle-qv14_00%y4_s.dat is open as file 1
LON set to -79.5 79.5
LAT set to -79.5 79.5
LEV set to 0.05 0.05
Time values set: 0:7:3:0 0:7:3:0
E set to 1 1
Обратите внимание, что это говорит open as file 1
, Теперь я сузю свой выбор до одной точки сетки и покажу давление:
ga-> set lat 0
LAT set to 0.125 0.125
ga-> set lon 0
LON set to 0.125 0.125
ga-> set lev 5
LEV set to 4.92368 4.92368
ga-> d prs
Result value = 55198.4
Давление составляет 551 гПа. Выглядит хорошо. Теперь давайте откроем другой файл данных, не закрывая этот:
ga-> open data-fine/semicircle-qv14_s.ctl
Scanning description file: data-fine/semicircle-qv14_s.ctl
Data file data-fine/semicircle-qv14_00%y4_s.dat is open as file 2
Обратите внимание, это говорит open as file 2
, Позволяет отображать давление из этого файла:
ga-> d prs
Result value = 55198.4
Подождите, это то же значение? Да, потому что мы все еще отображаем из файла 1, здесь prs
так же, как писать prs.1
, Если мы хотим давление со второго файла, нам нужно использовать prs.2
:
ga-> d prs.2
Result value = -9.99e+08
Другой результат (и это отсутствует), поскольку во втором файле нет данных на данном временном шаге.
Есть два способа это исправить.
Где вы увеличиваете
ano
в вашем цикле, добавьте командуclose 1
, Это закроет файл входных данных, поэтому при загрузке следующей команды дисплея будут правильно отображать его содержимое.В верхней части вашего цикла, прежде чем
sdfopen
добавлятьreinit
, который будет сбрасывать много вещей, в том числе закрытие всех открытых файлов. Вы устанавливаете свой выход в каждой итерации цикла, так что это не должно быть проблемой для вас.