Как читать / хранить много файлов, используя 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 

Другой результат (и это отсутствует), поскольку во втором файле нет данных на данном временном шаге.

Есть два способа это исправить.

  1. Где вы увеличиваете ano в вашем цикле, добавьте команду close 1, Это закроет файл входных данных, поэтому при загрузке следующей команды дисплея будут правильно отображать его содержимое.

  2. В верхней части вашего цикла, прежде чем sdfopen добавлять reinit, который будет сбрасывать много вещей, в том числе закрытие всех открытых файлов. Вы устанавливаете свой выход в каждой итерации цикла, так что это не должно быть проблемой для вас.

Другие вопросы по тегам