Самый простой способ: индексирование в Интернете
Перед тем, как мы начнем, я бы использовал целочисленный индекс, а не имя файла, чтобы идентифицировать каждый прогон, так как его намного проще обрабатывать, как для записи, так и для обработки в программе matlab. Вместо простого монотонно увеличивающегося индекса идентификатор может иметь значение для вашего прогона (или вы можете даже написать несколько отдельных индексов, если необходимо (например, у вас может быть число для разрешения, даты, версии модели и т. Д.).
Итак, очевидный способ сделать это, о котором я могу подумать, состоит в том, чтобы каждая симуляция записывала индекс в файл для идентификации себя. при первом запуске модели будет записана переменная
myrun=1
второй
myrun=2
и так далее ... тогда, когда вы просматриваете файлы, данные могут быть легко идентифицированы с помощью этого индекса.
Обратите внимание, что если ваши пространственные измерения не являются уникальными и число временных шагов также изменяется от выполнения к выполнению от того, что вы пишете, ваш индекс должен быть функцией всех неуникальных измерений, например, myrun (х, у, т). Если какое-либо из ваших измерений является уникальным для всех файлов, то это измерение является избыточным в индексе и может быть опущено.
Конечно, единственная проблема с этим решением - это снова запустить симуляции :-D, и вы можете говорить о дорогой модели для запуска или чьих-либо других прогонах, которые вы не можете повторить. Если о повторном запуске не может быть и речи, вам нужно попытаться добавить индекс в автономном режиме ...
Автономное индексирование (легко, если сетки одинаковые, в противном случае более сложное)
ЕСЛИ ваши размеры пространства были одинаковыми для всех файлов, тогда это все еще простая задача, поскольку вы можете очень легко добавить автономный индекс для всех временных шагов в каждом файле используя nco:
ncap2 -s 'myrun[$time]=array(X,0,$time)' infile.nc outfile.nc
или если вы готовы перезаписать исходный файл (будьте осторожны!)
ncap2 -O -s 'myrun[$time]=array(X,0,$time)'
где X - номер прогона. Это добавит переменную с новой переменной myrun, которая является функцией времени, а затем поместит X на каждом шаге. При слиянии вы можете видеть, какой срез данных был из какого конкретного прогона.
Кстати, второй ноль - это приращение, так как оно установлено в ноль, число X будет записано для всех временных шагов в данном файле (в противном случае, если бы это было 1, индекс увеличился бы на один каждый временной шаг - это может быть полезен в некоторых случаях. Например, вы можете использовать два индекса, один с приращением нуля, чтобы идентифицировать прогон, а второй с шагом в единицу, чтобы легко сказать вам, к какому шагу X-го прогона принадлежит срез данных) ,
Если ваши файлы тоже для разных доменов, то, возможно, вы захотите поместить их в общую сетку, прежде чем сделать это ... Я думаю, для этого
cdo enlarge
может помочь, см. Этот пост: https://code.mpimet.mpg.de/boards/2/topics/1459