Примечание: эта информация запустит глобальное моделирование. Я опубликую дополнительные комментарии по запуску SCAM модели с одним столбцом, как только разберусь с этим.

Недавно мне поручили сложную задачу запустить CESM на моем MacBook Air. Модель Community Earth Systems Model (CESM) — это глобальная климатическая модель, поддерживаемая для использования на суперкомпьютерах, и другие пользователи успешно используют ее на своих ноутбуках; однако заставить его работать — нетривиальная задача. Я нашел пару сообщений в Интернете, в которых люди документировали процесс запуска CESM на Mac (http://hannahlab.org/cesm-building-cesm-1-2-on-mac-osx/, https://www .mariokrapp.com/blog/Building_and_Running_CESM.html, http://www.easterbrook.ca/steve/2010/07/a-portable-climate-model/). Некоторые проблемы, с которыми я столкнулся, не были освещены, поэтому в этом посте я поделюсь всем, что узнал о запуске CESM на Mac.

Получение кода CESM

Есть несколько предпосылок для запуска CESM. Сначала установите их. Я могу пропустить несколько, но убедитесь, что у вас есть:

компилятор GNU

XCode

zlib

NetCDF С

NetCDF фортран

параллельный NetCDF

Switch.pm

Перл

Как только вы все это настроите, скачайте CESM 1.2.2 из клиента subversion в каталог, который я буду называть $CESM. Для этого вам необходимо зарегистрироваться под именем пользователя. Более подробные инструкции можно найти на http://www.cesm.ucar.edu/models/cesm1.2/. Некоторые номера версий изменились с тех пор, как это было настроено, поэтому после загрузки на ваш компьютер необходимо сделать несколько обновлений вручную. В $CESM/tools/cprnc/SVN_EXTERNAL_DIRECTORIES:

удалить: genf90 http://parallelio.googlecode.com/svn/genf90/trunk_tags/genf90_140121

добавить: genf90 https://github.com/PARALLELIO/genf90/tags/genf90_140121

В $CESM/SVN_EXTERNAL_DIRECTORIES:

удалить: models/utils/pio http://parallelio.googlecode.com/svn/trunk_tags/pio1_8_12/pio

добавить: models/utils/pio https://github.com/NCAR/ParallelIO.git/tags/pio1_8_12/pio

После каждого изменения запускайте

$ svn propset svn:externals –F SVN_EXTERNAL_DIRECTORIES

$ SVN обновление

Если эти команды не работают, вам может потребоваться вручную проверить версии. Например, проверьте запись для models/utils/pio в $CESM/models/utils/pio с помощью команды:

svn co https://github.com/NCAR/ParallelIO.git/tags/pio1_8_12/pio

Теперь у вас должны быть установлены все правильные пути.

Подготовка CESM к использованию

Было бы неплохо, если бы вы могли просто начать использовать код, как только вы его получите, но компилятор GNU не поддерживается. В результате необходимо внести некоторые изменения, чтобы убедиться, что модель может работать с GNU.

В $CESM/scripts/ccsm_utils/Machines/config_compilers.xml в разделе ‹compiler MACH="userdefined"› укажите путь NetCDF и непосредственно под этими строками добавьте:

‹INC_NETCDF›${NETCDF_PATH}/include‹/INC_NETCDF›

‹LIB_NETCDF›${NETCDF_PATH}/lib‹/LIB_NETCDF›

‹INC_PNETCDF›${PNETCDF_PATH}/bin‹/INC_PNETCDF›

‹LIB_PNETCDF›${PNETCDF_PATH}/lib‹/LIB_PNETCDF›

Затем отредактируйте строку ‹ADD_SLIBS›, чтобы удалить USERDEFINED, и убедитесь, что в остальном путь правильный. Ниже этой строки добавьте:

‹ADD_SLIBS›-L$(NETCDF_DIR)/lib -lnetcdff -lnetcdf‹/ADD_SLIBS›

В разделе ‹compiler COMPILER="gnu"› удалите строку ‹FFLAGS› и замените ее на:

‹FFLAGS› -O -fconvert=big-endian -ffree-line-length-none -fixed-line-length-none -fno-range-check –fcray-pointer‹/FFLAGS›.

Настройка дела

Первым шагом к использованию модели является настройка случая с желаемыми параметрами $RESOLUTION и $COMPSET. В командной строке войдите в каталог $CESM/scripts и выполните команду:

./create_newcase –case $CASE_PATH –res $RESOLUTION –mach userdefined –compset $COMPSET

где $CASE_PATH — это путь к каталогу, в который вы хотите поместить ваш кейс (например, ~/cesm1_2_2/cases/newcase).

Теперь перейдите в каталог case, который вы только что создали, и выполните команду:

./cesm_setup.

Должен быть список ошибок, говорящий вам определить нужные вам переменные. Чтобы определить эти переменные, используйте команду ./xmlchange. Переменные, которые я определил, следующие:

./xmlchange ОС=дарвин

./xmlchange COMPILER=gnu

./xmlchange CESMSCRATCHROOT=~/Загрузки

./xmlchange DIN_LOC_ROOT=$ABSOLUTE_PATH_TO_CESM

./xmlchange MAX_TASKS_PER_NODE=1

./xmlchange EXEROOT=$ABSOLUTE_PATH_TO_CASE/bld

./xmlchange MPILIB=mpi-последовательный

Ошибки с ./cesm_setup

  1. ~/$PATH не является каталогом

Если вы убедились, что это действительно каталог, замените ~ на абсолютный путь. Это всегда решало эту проблему для меня.

2. Устаревший QW

Эта ошибка укажет вам на оператор qw. Синтаксис Perl немного изменился в последней версии Perl, поэтому, чтобы исправить это, вам просто нужно добавить круглые скобки вокруг оператора qw, то есть (qw (…)).

3. Неэкранированная левая фигурная скобка в регулярном выражении устарела, передается в регулярном выражении; отмечен…$ENV{

Это указывает на строку, в которой есть переменная $ENV. Фигурные скобки больше не разрешены рядом с переменными. Чтобы обойти это, замените $ENV{(.*)} на $ENV\{\(.*\)}.

Создание дела

После успешного завершения установки выполните следующую команду, чтобы создать корпус:

./$CASE.сборка

Ошибки с ./$CASE.build

1. Ошибка при поиске MPICH

В test_driver.sh измените MPICH_PATH на:

MPICH_PATH:=/opt/local/var/macports/sources/rsync.macports.org/release/tarballs/ports/science/mpich

2. Неопределенные символы для архитектуры x86_64: ошибка isnanf

В shr_isnan.o замените isnanf на isnan. По какой-то причине эта лишняя буква «f» все портит.

3. Неопределенные символы для архитектуры x86_64: ошибка netcdf

Вы узнаете, является ли это netcdf, если есть несколько строк, начинающихся с netcdf. Это список вещей, которые не удалось связать должным образом. Это означает, что вы либо не указали правильный путь netcdf в config_compilers, либо не добавили строки SLIBS. Для этого есть два исправления. Первый — зайти в файл Macros в $CASE, исправить путь netcdf и добавить следующие строки SLIBS в CPPDEFS:

SLIBS+=#$(оболочка $(NETCDF_PATH)/bin/nc-config — флибы)

SLIBS+= -L$(NETCDF_DIR)/lib -lnetcdff –lnetcdf.

Это решит проблему для дела, над которым вы сейчас работаете. Чтобы решить эту проблему во всех будущих случаях, отредактируйте config_compilers, как указано выше.

4. Ошибка Cray-указателя (проблема inbuf, outbuf)

Опять же, есть два исправления. Сначала зайдите в файл Macros в $CASE и добавьте -fcray-pointer в строку FFLAGS. Затем, чтобы решить проблему для всех будущих случаев, добавьте –fcray-pointer к ‹FFLAGS› в config_compilers.

Ведение дела

После успешного завершения сборки увеличьте лимит стека, чтобы предотвратить ошибки времени выполнения:

улимит –s 65532

65532 — это максимальный предел, разрешенный для Mac. Перед запуском кейса вы должны открыть файл $CASE/$CASE.run. Внутри этого файла, под определяемым пользователем, раскомментируйте одну из следующих строк:

#mpiexec -n 1 $EXEROOT/cesm.exe ›&! cesm.log.$LID

#mpirun -np 1 $EXEROOT/cesm.exe ›&! cesm.log.$LID

Это позволит вам запустить дело. Кажется, не имеет значения, какой из них вы выберете. Запустите кейс, выполнив команду:

./$CASE.run

Надеюсь, это вам поможет. В первый раз, когда я успешно запустил дело, мой компьютер вышел из строя, но с тех пор я мог успешно запускать дела без серьезных проблем. Удачи всем, кто пытается запустить CESM на своих ноутбуках. Я надеюсь, что этот пост поможет вам начать.