Примечание: эта информация запустит глобальное моделирование. Я опубликую дополнительные комментарии по запуску 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
- ~/$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 на своих ноутбуках. Я надеюсь, что этот пост поможет вам начать.